CodeWalker/GameFiles/MetaTypes/MetaTypes.cs
2017-09-21 20:33:05 +10:00

5460 lines
247 KiB
C#

using SharpDX;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
using System.Xml;
using TC = System.ComponentModel.TypeConverterAttribute;
using EXP = System.ComponentModel.ExpandableObjectConverter;
using CodeWalker.World;
namespace CodeWalker.GameFiles
{
//this is a helper class for parsing the data.
public static class MetaTypes
{
public static Dictionary<uint, MetaEnumInfo> EnumDict = new Dictionary<uint, MetaEnumInfo>();
public static Dictionary<uint, MetaStructureInfo> StructDict = new Dictionary<uint, MetaStructureInfo>();
public static void Clear()
{
StructDict.Clear();
}
public static void EnsureMetaTypes(Meta meta)
{
if (meta.EnumInfos != null)
{
foreach (MetaEnumInfo mei in meta.EnumInfos)
{
if (!EnumDict.ContainsKey(mei.EnumKey))
{
EnumDict.Add(mei.EnumKey, mei);
}
else
{
MetaEnumInfo oldei = EnumDict[mei.EnumKey];
if (!CompareMetaEnumInfos(oldei, mei))
{
}
}
}
}
if (meta.StructureInfos != null)
{
foreach (MetaStructureInfo msi in meta.StructureInfos)
{
if (!StructDict.ContainsKey(msi.StructureKey))
{
StructDict.Add(msi.StructureKey, msi);
}
else
{
MetaStructureInfo oldsi = StructDict[msi.StructureKey];
if (!CompareMetaStructureInfos(oldsi, msi))
{
}
}
}
}
}
public static bool CompareMetaEnumInfos(MetaEnumInfo a, MetaEnumInfo b)
{
//returns true if they are the same.
if (a.Entries.Length != b.Entries.Length)
{
return false;
}
for (int i = 0; i < a.Entries.Length; i++)
{
if ((a.Entries[i].EntryNameHash != b.Entries[i].EntryNameHash) ||
(a.Entries[i].EntryValue != b.Entries[i].EntryValue))
{
return false;
}
}
return true;
}
public static bool CompareMetaStructureInfos(MetaStructureInfo a, MetaStructureInfo b)
{
//returns true if they are the same.
if (a.Entries.Length != b.Entries.Length)
{
return false;
}
for (int i = 0; i < a.Entries.Length; i++)
{
if ((a.Entries[i].EntryNameHash != b.Entries[i].EntryNameHash) ||
(a.Entries[i].DataOffset != b.Entries[i].DataOffset) ||
(a.Entries[i].DataType != b.Entries[i].DataType))
{
return false;
}
}
return true;
}
public static string GetTypesString()
{
StringBuilder sbe = new StringBuilder();
StringBuilder sbs = new StringBuilder();
sbe.AppendLine("//Enum infos");
sbs.AppendLine("//Struct infos");
foreach (var kvp in EnumDict)
{
var mei = kvp.Value;
string name = GetSafeName(mei.EnumNameHash, mei.EnumKey);
sbe.AppendLine("public enum " + name + " //Key:" + mei.EnumKey.ToString());
sbe.AppendLine("{");
foreach (var entry in mei.Entries)
{
string eename = GetSafeName(entry.EntryNameHash, (uint)entry.EntryValue);
sbe.AppendFormat(" {0} = {1},", eename, entry.EntryValue);
sbe.AppendLine();
}
sbe.AppendLine("}");
sbe.AppendLine();
}
foreach (var kvp in StructDict)
{
var msi = kvp.Value;
string name = GetSafeName(msi.StructureNameHash, msi.StructureKey);
sbs.AppendLine("public struct " + name + " //" + msi.StructureSize.ToString() + " bytes, Key:" + msi.StructureKey.ToString());
sbs.AppendLine("{");
for (int i = 0; i < msi.Entries.Length; i++)
{
var entry = msi.Entries[i];
if ((entry.DataOffset == 0) && (entry.EntryNameHash == MetaName.ARRAYINFO)) //referred to by array
{
}
else
{
string sename = GetSafeName(entry.EntryNameHash, (uint)entry.ReferenceKey);
string fmt = " public {0} {1}; //{2} {3}";
if (entry.DataType == MetaStructureEntryDataType.Array)
{
if (entry.ReferenceTypeIndex >= msi.Entries.Length)
{
}
else
{
var structentry = msi.Entries[entry.ReferenceTypeIndex];
var typename = "Array_" + MetaStructureEntryDataTypes.GetCSharpTypeName(structentry.DataType);
sbs.AppendFormat(fmt, typename, sename, entry.DataOffset, entry.ToString() + " {" + structentry.ToString() + "}");
sbs.AppendLine();
}
}
else if (entry.DataType == MetaStructureEntryDataType.Structure)
{
var typename = GetSafeName(entry.ReferenceKey, (uint)entry.ReferenceTypeIndex);
sbs.AppendFormat(fmt, typename, sename, entry.DataOffset, entry.ToString());
sbs.AppendLine();
}
else
{
var typename = MetaStructureEntryDataTypes.GetCSharpTypeName(entry.DataType);
sbs.AppendFormat(fmt, typename, sename, entry.DataOffset, entry);
sbs.AppendLine();
}
}
}
sbs.AppendLine("}");
sbs.AppendLine();
}
sbe.AppendLine();
sbe.AppendLine();
sbe.AppendLine();
sbe.AppendLine();
sbe.AppendLine();
sbe.Append(sbs.ToString());
string result = sbe.ToString();
return result;
}
public static string GetTypesInitString(Meta meta)
{
StringBuilder sb = new StringBuilder();
foreach (var si in meta.StructureInfos)
{
sb.AppendFormat("return new MetaStructureInfo(MetaName.{0}, {1}, {2}, {3},", si.StructureNameHash, si.StructureKey, si.Unknown_8h, si.StructureSize);
sb.AppendLine();
for (int i = 0; i < si.Entries.Length; i++)
{
var e = si.Entries[i];
string refkey = "0";
if (e.ReferenceKey != 0)
{
refkey = "MetaName." + e.ReferenceKey.ToString();
}
sb.AppendFormat("new MetaStructureEntryInfo_s(MetaName.{0}, {1}, MetaStructureEntryDataType.{2}, {3}, {4}, {5})", e.EntryNameHash, e.DataOffset, e.DataType, e.Unknown_9h, e.ReferenceTypeIndex, refkey);
if (i < si.Entries.Length - 1) sb.Append(",");
sb.AppendLine();
}
sb.AppendFormat(");");
sb.AppendLine();
}
sb.AppendLine();
foreach (var ei in meta.EnumInfos)
{
sb.AppendFormat("return new MetaEnumInfo(MetaName.{0}, {1},", ei.EnumNameHash, ei.EnumKey);
sb.AppendLine();
for (int i = 0; i < ei.Entries.Length; i++)
{
var e = ei.Entries[i];
sb.AppendFormat("new MetaEnumEntryInfo_s(MetaName.{0}, {1})", e.EntryNameHash, e.EntryValue);
if (i < ei.Entries.Length - 1) sb.Append(",");
sb.AppendLine();
}
sb.AppendFormat(");");
sb.AppendLine();
}
string str = sb.ToString();
return str;
}
public static MetaStructureInfo GetStructureInfo(MetaName name)
{
//to generate structinfos
switch (name)
{
/* YMAP types */
case MetaName.rage__fwInstancedMapData:
return new MetaStructureInfo(MetaName.rage__fwInstancedMapData, 1836780118, 768, 48,
new MetaStructureEntryInfo_s(MetaName.ImapLink, 8, MetaStructureEntryDataType.Hash, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, MetaName.rage__fwPropInstanceListDef),
new MetaStructureEntryInfo_s(MetaName.PropInstanceList, 16, MetaStructureEntryDataType.Array, 0, 1, 0),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, MetaName.rage__fwGrassInstanceListDef),
new MetaStructureEntryInfo_s(MetaName.GrassInstanceList, 32, MetaStructureEntryDataType.Array, 0, 3, 0)
);
case MetaName.CLODLight:
return new MetaStructureInfo(MetaName.CLODLight, 2325189228, 768, 136,
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, MetaName.VECTOR3),
new MetaStructureEntryInfo_s(MetaName.direction, 8, MetaStructureEntryDataType.Array, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.falloff, 24, MetaStructureEntryDataType.Array, 0, 2, 0),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.falloffExponent, 40, MetaStructureEntryDataType.Array, 0, 4, 0),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.UnsignedInt, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.timeAndStateFlags, 56, MetaStructureEntryDataType.Array, 0, 6, 0),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.UnsignedInt, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.hash, 72, MetaStructureEntryDataType.Array, 0, 8, 0),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.coneInnerAngle, 88, MetaStructureEntryDataType.Array, 0, 10, 0),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.coneOuterAngleOrCapExt, 104, MetaStructureEntryDataType.Array, 0, 12, 0),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.coronaIntensity, 120, MetaStructureEntryDataType.Array, 0, 14, 0)
);
case MetaName.CDistantLODLight:
return new MetaStructureInfo(MetaName.CDistantLODLight, 2820908419, 768, 48,
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, MetaName.VECTOR3),
new MetaStructureEntryInfo_s(MetaName.position, 8, MetaStructureEntryDataType.Array, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.UnsignedInt, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.RGBI, 24, MetaStructureEntryDataType.Array, 0, 2, 0),
new MetaStructureEntryInfo_s(MetaName.numStreetLights, 40, MetaStructureEntryDataType.UnsignedShort, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.category, 42, MetaStructureEntryDataType.UnsignedShort, 0, 0, 0)
);
case MetaName.CBlockDesc:
return new MetaStructureInfo(MetaName.CBlockDesc, 2015795449, 768, 72,
new MetaStructureEntryInfo_s(MetaName.version, 0, MetaStructureEntryDataType.UnsignedInt, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.flags, 4, MetaStructureEntryDataType.UnsignedInt, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.name, 8, MetaStructureEntryDataType.CharPointer, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.exportedBy, 24, MetaStructureEntryDataType.CharPointer, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.owner, 40, MetaStructureEntryDataType.CharPointer, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.time, 56, MetaStructureEntryDataType.CharPointer, 0, 0, 0)
);
case MetaName.CMapData:
return new MetaStructureInfo(MetaName.CMapData, 3448101671, 1024, 512,
new MetaStructureEntryInfo_s(MetaName.name, 8, MetaStructureEntryDataType.Hash, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.parent, 12, MetaStructureEntryDataType.Hash, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.flags, 16, MetaStructureEntryDataType.UnsignedInt, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.contentFlags, 20, MetaStructureEntryDataType.UnsignedInt, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.streamingExtentsMin, 32, MetaStructureEntryDataType.Float_XYZ, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.streamingExtentsMax, 48, MetaStructureEntryDataType.Float_XYZ, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.entitiesExtentsMin, 64, MetaStructureEntryDataType.Float_XYZ, 0, 0, 0),
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.containerLods, 112, MetaStructureEntryDataType.Array, 0, 10, 0),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, (MetaName)975711773/*.SectionUNKNOWN7*/),
new MetaStructureEntryInfo_s(MetaName.boxOccluders, 128, MetaStructureEntryDataType.Array, 4, 12, 0),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, (MetaName)2741784237/*.SectionUNKNOWN5*/),
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),
new MetaStructureEntryInfo_s(MetaName.instancedData, 176, MetaStructureEntryDataType.Structure, 0, 0, MetaName.rage__fwInstancedMapData),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, MetaName.CTimeCycleModifier),
new MetaStructureEntryInfo_s(MetaName.timeCycleModifiers, 224, MetaStructureEntryDataType.Array, 0, 19, 0),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, MetaName.CCarGen),
new MetaStructureEntryInfo_s(MetaName.carGenerators, 240, MetaStructureEntryDataType.Array, 0, 21, 0),
new MetaStructureEntryInfo_s(MetaName.LODLightsSOA, 256, MetaStructureEntryDataType.Structure, 0, 0, MetaName.CLODLight),
new MetaStructureEntryInfo_s(MetaName.DistantLODLightsSOA, 392, MetaStructureEntryDataType.Structure, 0, 0, MetaName.CDistantLODLight),
new MetaStructureEntryInfo_s(MetaName.block, 440, MetaStructureEntryDataType.Structure, 0, 0, MetaName.CBlockDesc)
);
case MetaName.CEntityDef:
return new MetaStructureInfo(MetaName.CEntityDef, 1825799514, 1024, 128,
new MetaStructureEntryInfo_s(MetaName.archetypeName, 8, MetaStructureEntryDataType.Hash, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.flags, 12, MetaStructureEntryDataType.UnsignedInt, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.guid, 16, MetaStructureEntryDataType.UnsignedInt, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.position, 32, MetaStructureEntryDataType.Float_XYZ, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.rotation, 48, MetaStructureEntryDataType.Float_XYZW, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.scaleXY, 64, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.scaleZ, 68, MetaStructureEntryDataType.Float, 0, 0, 0),
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.numChildren, 88, MetaStructureEntryDataType.UnsignedInt, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.priorityLevel, 92, MetaStructureEntryDataType.IntEnum, 0, 0, (MetaName)648413703),
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),
new MetaStructureEntryInfo_s(MetaName.artificialAmbientOcclusion, 116, MetaStructureEntryDataType.SignedInt, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.tintValue, 120, MetaStructureEntryDataType.UnsignedInt, 0, 0, 0)
);
case MetaName.CTimeCycleModifier:
return new MetaStructureInfo(MetaName.CTimeCycleModifier, 2683420777, 1024, 64,
new MetaStructureEntryInfo_s(MetaName.name, 8, MetaStructureEntryDataType.Hash, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.minExtents, 16, MetaStructureEntryDataType.Float_XYZ, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.maxExtents, 32, MetaStructureEntryDataType.Float_XYZ, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.percentage, 48, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.range, 52, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.startHour, 56, MetaStructureEntryDataType.UnsignedInt, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.endHour, 60, MetaStructureEntryDataType.UnsignedInt, 0, 0, 0)
);
case MetaName.CCarGen:
return new MetaStructureInfo(MetaName.CCarGen, 2345238261, 1024, 80,
new MetaStructureEntryInfo_s(MetaName.position, 16, MetaStructureEntryDataType.Float_XYZ, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.orientX, 32, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.orientY, 36, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.perpendicularLength, 40, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.carModel, 44, MetaStructureEntryDataType.Hash, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.flags, 48, MetaStructureEntryDataType.UnsignedInt, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.bodyColorRemap1, 52, MetaStructureEntryDataType.SignedInt, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.bodyColorRemap2, 56, MetaStructureEntryDataType.SignedInt, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.bodyColorRemap3, 60, MetaStructureEntryDataType.SignedInt, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.bodyColorRemap4, 64, MetaStructureEntryDataType.SignedInt, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.popGroup, 68, MetaStructureEntryDataType.Hash, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.livery, 72, MetaStructureEntryDataType.SignedByte, 0, 0, 0)
);
case MetaName.CExtensionDefLightEffect:
return new MetaStructureInfo(MetaName.CExtensionDefLightEffect, 2436199897, 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.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, MetaName.CLightAttrDef),
new MetaStructureEntryInfo_s(MetaName.instances, 32, MetaStructureEntryDataType.Array, 0, 2, 0)
);
case MetaName.CLightAttrDef:
return new MetaStructureInfo(MetaName.CLightAttrDef, 2363260268, 768, 160,
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.posn, 8, MetaStructureEntryDataType.ArrayOfBytes, 0, 0, (MetaName)3),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.colour, 20, MetaStructureEntryDataType.ArrayOfBytes, 0, 2, (MetaName)3),
new MetaStructureEntryInfo_s(MetaName.flashiness, 23, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.intensity, 24, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.flags, 28, MetaStructureEntryDataType.UnsignedInt, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.boneTag, 32, MetaStructureEntryDataType.SignedShort, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.lightType, 34, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.groupId, 35, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.timeFlags, 36, MetaStructureEntryDataType.UnsignedInt, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.falloff, 40, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.falloffExponent, 44, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.cullingPlane, 48, MetaStructureEntryDataType.ArrayOfBytes, 0, 13, (MetaName)4),
new MetaStructureEntryInfo_s(MetaName.shadowBlur, 64, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.padding1, 65, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.padding2, 66, MetaStructureEntryDataType.SignedShort, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.padding3, 68, MetaStructureEntryDataType.UnsignedInt, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.volIntensity, 72, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.volSizeScale, 76, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.volOuterColour, 80, MetaStructureEntryDataType.ArrayOfBytes, 0, 21, (MetaName)3),
new MetaStructureEntryInfo_s(MetaName.lightHash, 83, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.volOuterIntensity, 84, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.coronaSize, 88, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.volOuterExponent, 92, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.lightFadeDistance, 96, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.shadowFadeDistance, 97, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.specularFadeDistance, 98, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.volumetricFadeDistance, 99, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.shadowNearClip, 100, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.coronaIntensity, 104, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.coronaZBias, 108, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.direction, 112, MetaStructureEntryDataType.ArrayOfBytes, 0, 34, (MetaName)3),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.tangent, 124, MetaStructureEntryDataType.ArrayOfBytes, 0, 36, (MetaName)3),
new MetaStructureEntryInfo_s(MetaName.coneInnerAngle, 136, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.coneOuterAngle, 140, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.extents, 144, MetaStructureEntryDataType.ArrayOfBytes, 0, 40, (MetaName)3),
new MetaStructureEntryInfo_s(MetaName.projectedTextureKey, 156, MetaStructureEntryDataType.UnsignedInt, 0, 0, 0)
);
case MetaName.CExtensionDefSpawnPointOverride:
return new MetaStructureInfo(MetaName.CExtensionDefSpawnPointOverride, 2551875873, 1024, 64,
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.ScenarioType, 32, MetaStructureEntryDataType.Hash, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.iTimeStartOverride, 36, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.iTimeEndOverride, 37, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0),
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.Radius, 56, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.TimeTillPedLeaves, 60, MetaStructureEntryDataType.Float, 0, 0, 0)
);
case MetaName.CExtensionDefDoor:
return new MetaStructureInfo(MetaName.CExtensionDefDoor, 2671601385, 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.enableLimitAngle, 32, MetaStructureEntryDataType.Boolean, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.startsLocked, 33, MetaStructureEntryDataType.Boolean, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.canBreak, 34, MetaStructureEntryDataType.Boolean, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.limitAngle, 36, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.doorTargetRatio, 40, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.audioHash, 44, MetaStructureEntryDataType.Hash, 0, 0, 0)
);
case MetaName.rage__phVerletClothCustomBounds:
return new MetaStructureInfo(MetaName.rage__phVerletClothCustomBounds, 2075461750, 768, 32,
new MetaStructureEntryInfo_s(MetaName.name, 8, MetaStructureEntryDataType.Hash, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, (MetaName)1701774085/*.SectionUNKNOWN1*/),
new MetaStructureEntryInfo_s(MetaName.CollisionData, 16, MetaStructureEntryDataType.Array, 0, 1, 0)
);
case (MetaName)1701774085/*.SectionUNKNOWN1*/:
return new MetaStructureInfo((MetaName)1701774085/*.SectionUNKNOWN1*/, 2859775340, 1024, 96,
new MetaStructureEntryInfo_s(MetaName.OwnerName, 0, MetaStructureEntryDataType.CharPointer, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.Rotation, 16, MetaStructureEntryDataType.Float_XYZW, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.Position, 32, MetaStructureEntryDataType.Float_XYZ, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.Normal, 48, MetaStructureEntryDataType.Float_XYZ, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.CapsuleRadius, 64, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.CapsuleLen, 68, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.CapsuleHalfHeight, 72, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.CapsuleHalfWidth, 76, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.Flags, 80, MetaStructureEntryDataType.IntFlags2, 0, 32, (MetaName)3044470860)
);
/* SCENARIO types */
case MetaName.CScenarioPointContainer:
return new MetaStructureInfo(MetaName.CScenarioPointContainer, 2489654897, 768, 48,
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, MetaName.CExtensionDefSpawnPoint),
new MetaStructureEntryInfo_s(MetaName.LoadSavePoints, 0, MetaStructureEntryDataType.Array, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, MetaName.CScenarioPoint),
new MetaStructureEntryInfo_s(MetaName.MyPoints, 16, MetaStructureEntryDataType.Array, 0, 2, 0)
);
case (MetaName)4023740759:
return new MetaStructureInfo((MetaName)4023740759, 88255871, 768, 88,
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, MetaName.CScenarioChainingNode),
new MetaStructureEntryInfo_s(MetaName.Nodes, 0, MetaStructureEntryDataType.Array, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, MetaName.CScenarioChainingEdge),
new MetaStructureEntryInfo_s(MetaName.Edges, 16, MetaStructureEntryDataType.Array, 0, 2, 0),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, MetaName.CScenarioChain),
new MetaStructureEntryInfo_s(MetaName.Chains, 32, MetaStructureEntryDataType.Array, 0, 4, 0)
);
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)
);
case MetaName.CScenarioPointLookUps:
return new MetaStructureInfo(MetaName.CScenarioPointLookUps, 2669361587, 768, 96,
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Hash, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.TypeNames, 0, MetaStructureEntryDataType.Array, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Hash, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.PedModelSetNames, 16, MetaStructureEntryDataType.Array, 0, 2, 0),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Hash, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.VehicleModelSetNames, 32, MetaStructureEntryDataType.Array, 0, 4, 0),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Hash, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.GroupNames, 48, MetaStructureEntryDataType.Array, 0, 6, 0),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Hash, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.InteriorNames, 64, MetaStructureEntryDataType.Array, 0, 8, 0),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Hash, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.RequiredIMapNames, 80, MetaStructureEntryDataType.Array, 0, 10, 0)
);
case MetaName.CScenarioPointRegion:
return new MetaStructureInfo(MetaName.CScenarioPointRegion, 3501351821, 768, 376,
new MetaStructureEntryInfo_s(MetaName.VersionNumber, 0, MetaStructureEntryDataType.SignedInt, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.Points, 8, MetaStructureEntryDataType.Structure, 0, 0, MetaName.CScenarioPointContainer),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, MetaName.CScenarioEntityOverride),
new MetaStructureEntryInfo_s(MetaName.EntityOverrides, 72, MetaStructureEntryDataType.Array, 0, 2, 0),
new MetaStructureEntryInfo_s((MetaName)3696045377, 96, MetaStructureEntryDataType.Structure, 0, 0, (MetaName)4023740759),
new MetaStructureEntryInfo_s(MetaName.AccelGrid, 184, MetaStructureEntryDataType.Structure, 0, 0, MetaName.rage__spdGrid2D),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.UnsignedShort, 0, 0, 0),
new MetaStructureEntryInfo_s((MetaName)3844724227, 248, MetaStructureEntryDataType.Array, 0, 6, 0),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, MetaName.CScenarioPointCluster),
new MetaStructureEntryInfo_s(MetaName.Clusters, 264, MetaStructureEntryDataType.Array, 0, 8, 0),
new MetaStructureEntryInfo_s(MetaName.LookUps, 280, MetaStructureEntryDataType.Structure, 0, 0, MetaName.CScenarioPointLookUps)
);
case MetaName.CScenarioPoint:
return new MetaStructureInfo(MetaName.CScenarioPoint, 402442150, 1024, 64,
new MetaStructureEntryInfo_s(MetaName.iType, 21, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.ModelSetId, 22, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.iInterior, 23, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.iRequiredIMapId, 24, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.iProbability, 25, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0),
new MetaStructureEntryInfo_s((MetaName)717991212, 26, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.iTimeStartOverride, 27, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.iTimeEndOverride, 28, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0),
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.vPositionAndDirection, 48, MetaStructureEntryDataType.Float_XYZW, 0, 0, 0)
);
case MetaName.CScenarioEntityOverride:
return new MetaStructureInfo(MetaName.CScenarioEntityOverride, 1271200492, 1024, 80,
new MetaStructureEntryInfo_s(MetaName.EntityPosition, 0, MetaStructureEntryDataType.Float_XYZ, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.EntityType, 16, MetaStructureEntryDataType.Hash, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, MetaName.CExtensionDefSpawnPoint),
new MetaStructureEntryInfo_s(MetaName.ScenarioPoints, 24, MetaStructureEntryDataType.Array, 0, 2, 0),
new MetaStructureEntryInfo_s((MetaName)538733109, 64, MetaStructureEntryDataType.Boolean, 0, 0, 0),
new MetaStructureEntryInfo_s((MetaName)1035513142, 65, MetaStructureEntryDataType.Boolean, 0, 0, 0)
);
case MetaName.CExtensionDefSpawnPoint:
return new MetaStructureInfo(MetaName.CExtensionDefSpawnPoint, 3077340721, 1024, 96,
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.offsetRotation, 32, MetaStructureEntryDataType.Float_XYZW, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.spawnType, 48, MetaStructureEntryDataType.Hash, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.pedType, 52, MetaStructureEntryDataType.Hash, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.group, 56, MetaStructureEntryDataType.Hash, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.interior, 60, MetaStructureEntryDataType.Hash, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.requiredImap, 64, MetaStructureEntryDataType.Hash, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.availableInMpSp, 68, MetaStructureEntryDataType.IntEnum, 0, 0, (MetaName)3573596290),
new MetaStructureEntryInfo_s(MetaName.probability, 72, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.timeTillPedLeaves, 76, MetaStructureEntryDataType.Float, 0, 0, 0),
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.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)
);
case MetaName.CScenarioChainingNode:
return new MetaStructureInfo(MetaName.CScenarioChainingNode, 1811784424, 1024, 32,
new MetaStructureEntryInfo_s(MetaName.Position, 0, MetaStructureEntryDataType.Float_XYZ, 0, 0, 0),
new MetaStructureEntryInfo_s((MetaName)2602393771, 16, MetaStructureEntryDataType.Hash, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.ScenarioType, 20, MetaStructureEntryDataType.Hash, 0, 0, 0),
new MetaStructureEntryInfo_s((MetaName)407126079, 24, MetaStructureEntryDataType.Boolean, 0, 0, 0),
new MetaStructureEntryInfo_s((MetaName)1308720135, 25, MetaStructureEntryDataType.Boolean, 0, 0, 0)
);
case MetaName.CScenarioChainingEdge:
return new MetaStructureInfo(MetaName.CScenarioChainingEdge, 2004985940, 256, 8,
new MetaStructureEntryInfo_s(MetaName.NodeIndexFrom, 0, MetaStructureEntryDataType.UnsignedShort, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.NodeIndexTo, 2, MetaStructureEntryDataType.UnsignedShort, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.Action, 4, MetaStructureEntryDataType.ByteEnum, 0, 0, (MetaName)3609807418),
new MetaStructureEntryInfo_s(MetaName.NavMode, 5, MetaStructureEntryDataType.ByteEnum, 0, 0, (MetaName)3971773454),
new MetaStructureEntryInfo_s(MetaName.NavSpeed, 6, MetaStructureEntryDataType.ByteEnum, 0, 0, (MetaName)941086046)
);
case MetaName.CScenarioChain:
return new MetaStructureInfo(MetaName.CScenarioChain, 2751910366, 768, 40,
new MetaStructureEntryInfo_s((MetaName)1156691834, 0, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.UnsignedShort, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.EdgeIds, 8, MetaStructureEntryDataType.Array, 0, 1, 0)
);
case MetaName.rage__spdSphere:
return new MetaStructureInfo(MetaName.rage__spdSphere, 1189037266, 1024, 16,
new MetaStructureEntryInfo_s(MetaName.centerAndRadius, 0, MetaStructureEntryDataType.Float_XYZW, 0, 0, 0)
);
case MetaName.CScenarioPointCluster:
return new MetaStructureInfo(MetaName.CScenarioPointCluster, 3622480419, 1024, 80,
new MetaStructureEntryInfo_s(MetaName.Points, 0, MetaStructureEntryDataType.Structure, 0, 0, MetaName.CScenarioPointContainer),
new MetaStructureEntryInfo_s(MetaName.ClusterSphere, 48, MetaStructureEntryDataType.Structure, 0, 0, MetaName.rage__spdSphere),
new MetaStructureEntryInfo_s((MetaName)1095875445, 64, MetaStructureEntryDataType.Float, 0, 0, 0),
new MetaStructureEntryInfo_s((MetaName)3129415068, 68, MetaStructureEntryDataType.Boolean, 0, 0, 0)
);
default:
return null;
}
}
public static MetaEnumInfo GetEnumInfo(MetaName name)
{
//to generate enuminfos
switch (name)
{
case (MetaName)1264241711:
return new MetaEnumInfo((MetaName)1264241711, 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),
new MetaEnumEntryInfo_s(MetaName.LODTYPES_DEPTH_SLOD2, 3),
new MetaEnumEntryInfo_s(MetaName.LODTYPES_DEPTH_SLOD3, 4),
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,
new MetaEnumEntryInfo_s(MetaName.PRI_REQUIRED, 0),
new MetaEnumEntryInfo_s(MetaName.PRI_OPTIONAL_HIGH, 1),
new MetaEnumEntryInfo_s(MetaName.PRI_OPTIONAL_MEDIUM, 2),
new MetaEnumEntryInfo_s(MetaName.PRI_OPTIONAL_LOW, 3)
);
case (MetaName)3573596290:
return new MetaEnumInfo((MetaName)3573596290, 671739257,
new MetaEnumEntryInfo_s(MetaName.kBoth, 0),
new MetaEnumEntryInfo_s(MetaName.kOnlySp, 1),
new MetaEnumEntryInfo_s(MetaName.kOnlyMp, 2)
);
case (MetaName)700327466:
return new MetaEnumInfo((MetaName)700327466, 2814596095,
new MetaEnumEntryInfo_s(MetaName.IgnoreMaxInRange, 0),
new MetaEnumEntryInfo_s(MetaName.NoSpawn, 1),
new MetaEnumEntryInfo_s(MetaName.StationaryReactions, 2),
new MetaEnumEntryInfo_s((MetaName)3257836369, 3),
new MetaEnumEntryInfo_s((MetaName)2165609255, 4),
new MetaEnumEntryInfo_s(MetaName.ActivateVehicleSiren, 5),
new MetaEnumEntryInfo_s((MetaName)2626064871, 6),
new MetaEnumEntryInfo_s((MetaName)2004780781, 7),
new MetaEnumEntryInfo_s((MetaName)536864854, 8),
new MetaEnumEntryInfo_s((MetaName)3441065168, 9),
new MetaEnumEntryInfo_s(MetaName.AerialVehiclePoint, 10),
new MetaEnumEntryInfo_s(MetaName.TerritorialScenario, 11),
new MetaEnumEntryInfo_s((MetaName)3690227693, 12),
new MetaEnumEntryInfo_s((MetaName)1601179199, 13),
new MetaEnumEntryInfo_s((MetaName)2583152330, 14),
new MetaEnumEntryInfo_s((MetaName)3490317520, 15),
new MetaEnumEntryInfo_s(MetaName.InWater, 16),
new MetaEnumEntryInfo_s((MetaName)1269249358, 17),
new MetaEnumEntryInfo_s(MetaName.OpenDoor, 18),
new MetaEnumEntryInfo_s(MetaName.PreciseUseTime, 19),
new MetaEnumEntryInfo_s((MetaName)2247631388, 20),
new MetaEnumEntryInfo_s((MetaName)4100708934, 21),
new MetaEnumEntryInfo_s(MetaName.ExtendedRange, 22),
new MetaEnumEntryInfo_s(MetaName.ShortRange, 23),
new MetaEnumEntryInfo_s(MetaName.HighPriority, 24),
new MetaEnumEntryInfo_s(MetaName.IgnoreLoitering, 25),
new MetaEnumEntryInfo_s((MetaName)1524211135, 26),
new MetaEnumEntryInfo_s(MetaName.ResetNoCollisionOnCleanUp, 27),
new MetaEnumEntryInfo_s((MetaName)3304563391, 28),
new MetaEnumEntryInfo_s((MetaName)1111379709, 29),
new MetaEnumEntryInfo_s((MetaName)176469077, 30)
);
case (MetaName)3044470860:
return new MetaEnumInfo((MetaName)3044470860, 1585854303,
new MetaEnumEntryInfo_s((MetaName)997866013, 0)
);
case (MetaName)3609807418:
return new MetaEnumInfo((MetaName)3609807418, 3326075799,
new MetaEnumEntryInfo_s(MetaName.Move, 0),
new MetaEnumEntryInfo_s((MetaName)7865678, 1),
new MetaEnumEntryInfo_s(MetaName.MoveFollowMaster, 2)
);
case (MetaName)3971773454:
return new MetaEnumInfo((MetaName)3971773454, 3016128742,
new MetaEnumEntryInfo_s(MetaName.Direct, 0),
new MetaEnumEntryInfo_s(MetaName.NavMesh, 1),
new MetaEnumEntryInfo_s(MetaName.Roads, 2)
);
case (MetaName)941086046:
return new MetaEnumInfo((MetaName)941086046, 1112851290,
new MetaEnumEntryInfo_s((MetaName)3279574318, 0),
new MetaEnumEntryInfo_s((MetaName)2212923970, 1),
new MetaEnumEntryInfo_s((MetaName)4022799658, 2),
new MetaEnumEntryInfo_s((MetaName)1425672334, 3),
new MetaEnumEntryInfo_s((MetaName)957720931, 4),
new MetaEnumEntryInfo_s((MetaName)3795195414, 5),
new MetaEnumEntryInfo_s((MetaName)2834622009, 6),
new MetaEnumEntryInfo_s((MetaName)1876554076, 7),
new MetaEnumEntryInfo_s((MetaName)698543797, 8),
new MetaEnumEntryInfo_s((MetaName)1544199634, 9),
new MetaEnumEntryInfo_s((MetaName)2725613303, 10),
new MetaEnumEntryInfo_s((MetaName)4033265820, 11),
new MetaEnumEntryInfo_s((MetaName)3054809929, 12),
new MetaEnumEntryInfo_s((MetaName)3911005380, 13),
new MetaEnumEntryInfo_s((MetaName)3717649022, 14),
new MetaEnumEntryInfo_s((MetaName)3356026130, 15)
);
default:
return null;
}
}
private static string GetSafeName(MetaName namehash, uint key)
{
string name = namehash.ToString();
if (string.IsNullOrEmpty(name))
{
name = "Unk_" + key;
}
if (!char.IsLetter(name[0]))
{
name = "Unk_" + name;
}
return name;
}
public static byte[] ConvertToBytes<T>(T item) where T : struct
{
int size = Marshal.SizeOf(typeof(T));
int offset = 0;
byte[] arr = new byte[size];
IntPtr ptr = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(item, ptr, true);
Marshal.Copy(ptr, arr, 0, size);
Marshal.FreeHGlobal(ptr);
offset += size;
return arr;
}
public static byte[] ConvertArrayToBytes<T>(params T[] items) where T : struct
{
if (items == null) return null;
int size = Marshal.SizeOf(typeof(T));
int sizetot = size * items.Length;
byte[] arrout = new byte[sizetot];
int offset = 0;
for (int i = 0; i < items.Length; i++)
{
byte[] arr = new byte[size];
IntPtr ptr = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(items[i], ptr, true);
Marshal.Copy(ptr, arr, 0, size);
Marshal.FreeHGlobal(ptr);
Buffer.BlockCopy(arr, 0, arrout, offset, size);
offset += size;
}
return arrout;
}
public static T ConvertData<T>(byte[] data) where T : struct
{
GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned);
var h = handle.AddrOfPinnedObject();
var r = Marshal.PtrToStructure<T>(h);
handle.Free();
return r;
}
public static T ConvertData<T>(byte[] data, int offset) where T : struct
{
GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned);
var h = handle.AddrOfPinnedObject();
var r = Marshal.PtrToStructure<T>(h + offset);
handle.Free();
return r;
}
public static T[] ConvertDataArray<T>(byte[] data, int offset, int count) where T : struct
{
T[] items = new T[count];
int itemsize = Marshal.SizeOf(typeof(T));
for (int i = 0; i < count; i++)
{
int off = offset + i * itemsize;
items[i] = ConvertData<T>(data, off);
}
return items;
}
public static T[] ConvertDataArray<T>(Meta meta, MetaName name, Array_StructurePointer array) where T : struct
{
//return ConvertDataArray<T>(meta, name, array.Pointer, array.Count1);
uint count = array.Count1;
if (count == 0) return null;
MetaPOINTER[] ptrs = GetPointerArray(meta, array);
if (ptrs == null) return null;
if (ptrs.Length < count)
{ return null; }
T[] items = new T[count];
int itemsize = Marshal.SizeOf(typeof(T));
int itemsleft = (int)count; //large arrays get split into chunks...
//MetaName blocktype = 0;
for (int i = 0; i < count; i++)
{
var sptr = ptrs[i];
int blocki = sptr.BlockID - 1;
int offset = sptr.ItemOffset * 16;//block data size...
if (blocki >= meta.DataBlocks.Count)
{ continue; }
var block = meta.DataBlocks[blocki];
//if (blocktype == 0)
//{ blocktype = block.StructureNameHash; }
//else if (block.StructureNameHash != blocktype)
//{ } //not all the same type..!
if (block.StructureNameHash != name)
{ return null; } //type mismatch - don't return anything...
if ((offset < 0) || (block.Data == null) || (offset >= block.Data.Length))
{ continue; }
items[i] = ConvertData<T>(block.Data, offset);
}
return items;
}
public static T[] ConvertDataArray<T>(Meta meta, MetaName name, Array_Structure array) where T : struct
{
return ConvertDataArray<T>(meta, name, array.Pointer, array.Count1);
}
public static T[] ConvertDataArray<T>(Meta meta, MetaName name, uint pointer, uint count) where T : struct
{
if (count == 0) return null;
T[] items = new T[count];
int itemsize = Marshal.SizeOf(typeof(T));
int itemsleft = (int)count; //large arrays get split into chunks...
uint ptrindex = (pointer & 0xFFF) - 1;
uint ptroffset = ((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!
int byteoffset = (int)ptroffset;// (ptroffset * 16 + ptrunkval);
int itemoffset = byteoffset / itemsize;
int curi = 0;
while (itemsleft > 0)
{
int blockcount = ptrblock.DataLength / itemsize;
int itemcount = blockcount - itemoffset;
if (itemcount > itemsleft)
{ itemcount = itemsleft; } //don't try to read too many items..
for (int i = 0; i < itemcount; i++)
{
int offset = (itemoffset + i) * itemsize;
int index = curi + i;
items[index] = ConvertData<T>(ptrblock.Data, offset);
}
itemoffset = 0; //start at beginning of next block..
curi += itemcount;
itemsleft -= itemcount;
if (itemsleft <= 0)
{ return items; }//all done!
ptrindex++;
ptrblock = (ptrindex < meta.DataBlocks.Count) ? meta.DataBlocks[(int)ptrindex] : null;
if ((ptrblock == null) || (ptrblock.Data == null))
{ break; } //not enough items..?
if (ptrblock.StructureNameHash != name)
{ break; } //type mismatch..
}
return null;
#region old version
/*
//old version
int currentp = (int)pointer - 1;
var datablock = ((currentp>=0)&&(currentp < meta.DataBlocks.Count)) ? meta.DataBlocks[currentp] : null;
if ((datablock == null) || (datablock.StructureNameHash != name)) //no match. look for the first match
{
currentp = -1;
for (int i = 0; i < meta.DataBlocks.Count; i++)
{
if (meta.DataBlocks[i].StructureNameHash == name)
{
currentp = i;
break;
}
}
if (currentp < 0) //couldn't find the right type.
{
return null;
}
}
int curindex = 0;
while (itemsleft > 0)
{
if ((currentp >= meta.DataBlocks.Count) || (meta.DataBlocks[currentp].StructureNameHash != name))
{
//wasn't enough data to read... problem.. (no next block to read from), just return whatever we got
T[] newitems = new T[curindex]; //have to return a smaller array..
for (int n = 0; n < curindex; n++) newitems[n] = items[n];
return newitems;
}
datablock = meta.DataBlocks[currentp];
int curitemcount = datablock.DataLength / itemsize;
int totusedbytes = curitemcount * itemsize;
if (totusedbytes < datablock.DataLength)
{
//didn't use all the bytes in the block... potential problem!
if (totusedbytes == 0)
{
//not big enough for one item..
if (curindex == 0) return null; //nothing read if on first iteration.
T[] newitems = new T[curindex]; //have to return a smaller array.. just return whatever we got
for (int n = 0; n < curindex; n++) newitems[n] = items[n];
return newitems;
}
else //there was something... how to know if it's right though??
{
//break; //just keep going.. at least parse what we got
}
}
for (int i = 0; i < curitemcount; i++)
{
int offset = i * itemsize;
int index = curindex + i;
if (index >= items.Length)
{
//too much data! grow the output?
break;
}
items[index] = ConvertData<T>(datablock.Data, offset);
}
itemsleft -= curitemcount;
curindex += curitemcount;
currentp++;
}
return items;
*/
#endregion
}
public static MetaPOINTER[] GetPointerArray(Meta meta, Array_StructurePointer array)
{
uint count = array.Count1;
if (count == 0) return null;
MetaPOINTER[] ptrs = new MetaPOINTER[count];
int ptrsize = Marshal.SizeOf(typeof(MetaPOINTER));
//int itemsleft = (int)count; //large arrays get split into chunks...
uint ptr = array.Pointer;
int ptrindex = (int)(ptr & 0xFFF) - 1;
int ptroffset = (int)((ptr >> 12) & 0xFFFFF);
var ptrblock = (ptrindex < meta.DataBlocks.Count) ? meta.DataBlocks[ptrindex] : null;
if ((ptrblock == null) || (ptrblock.Data == null) || (ptrblock.StructureNameHash != MetaName.POINTER))
{ return null; }
for (int i = 0; i < count; i++)
{
int offset = ptroffset + (i * ptrsize);
if (offset >= ptrblock.Data.Length)
{ break; }
ptrs[i] = ConvertData<MetaPOINTER>(ptrblock.Data, offset);
}
return ptrs;
}
public static MetaHash[] GetHashArray(Meta meta, Array_uint array)
{
return ConvertDataArray<MetaHash>(meta, MetaName.HASH, array.Pointer, array.Count1);
}
public static uint[] GetUintArray(Meta meta, Array_uint array)
{
return ConvertDataArray<uint>(meta, MetaName.UINT, array.Pointer, array.Count1);
}
public static ushort[] GetUshortArray(Meta meta, Array_ushort array)
{
return ConvertDataArray<ushort>(meta, MetaName.USHORT, array.Pointer, array.Count1);
}
public static short[] GetShortArray(Meta meta, Array_ushort array)
{
return ConvertDataArray<short>(meta, MetaName.USHORT, array.Pointer, array.Count1);
}
public static float[] GetFloatArray(Meta meta, Array_float array)
{
return ConvertDataArray<float>(meta, MetaName.FLOAT, array.Pointer, array.Count1);
}
public static byte[] GetByteArray(Meta meta, Array_byte array)
{
var pointer = array.Pointer;
uint ptrindex = (pointer & 0xFFF) - 1;
uint ptroffset = ((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, count);
return data;
}
public static T[] GetTypedDataArray<T>(Meta meta, MetaName name) where T : struct
{
if ((meta == null) || (meta.DataBlocks == null)) return null;
var datablocks = meta.DataBlocks.Data;
MetaDataBlock startblock = null;
int startblockind = -1;
for (int i = 0; i < datablocks.Count; i++)
{
var block = datablocks[i];
if (block.StructureNameHash == name)
{
startblock = block;
startblockind = i;
break;
}
}
if (startblock == null)
{
return null; //couldn't find the data.
}
int count = 0; //try figure out how many items there are, from the block size(s).
int itemsize = Marshal.SizeOf(typeof(T));
var currentblock = startblock;
int currentblockind = startblockind;
while (currentblock != null)
{
int blockitems = currentblock.DataLength / itemsize;
count += blockitems;
currentblockind++;
if (currentblockind >= datablocks.Count) break; //last block, can't go any further
currentblock = datablocks[currentblockind];
if (currentblock.StructureNameHash != name) break; //not the right block type, can't go further
}
if (count <= 0)
{
return null; //didn't find anything...
}
return ConvertDataArray<T>(meta, name, (uint)startblockind + 1, (uint)count);
}
public static T GetTypedData<T>(Meta meta, MetaName name) where T : struct
{
foreach (var block in meta.DataBlocks)
{
if (block.StructureNameHash == name)
{
return MetaTypes.ConvertData<T>(block.Data);
}
}
throw new Exception("Couldn't find " + name.ToString() + " block.");
}
public static string[] GetStrings(Meta meta)
{
//look for strings in the sectionSTRINGS data block(s)
if ((meta == null) || (meta.DataBlocks == null)) return null;
var datablocks = meta.DataBlocks.Data;
MetaDataBlock startblock = null;
int startblockind = -1;
for (int i = 0; i < datablocks.Count; i++)
{
var block = datablocks[i];
if (block.StructureNameHash == MetaName.STRING)
{
startblock = block;
startblockind = i;
break;
}
}
if (startblock == null)
{
return null; //couldn't find the strings data section.
}
List<string> strings = new List<string>();
StringBuilder sb = new StringBuilder();
var currentblock = startblock;
int currentblockind = startblockind;
while (currentblock != null)
{
//read strings from the block.
sb.Clear();
int startindex = 0;
int endindex = 0;
var data = currentblock.Data;
for (int b = 0; b < data.Length; b++)
{
if (data[b] == 0)
{
startindex = endindex;
endindex = b;
if (endindex > startindex)
{
string str = Encoding.ASCII.GetString(data, startindex, endindex - startindex);
strings.Add(str);
endindex++; //start next string after the 0.
}
}
}
if (endindex != data.Length - 1)
{
startindex = endindex;
endindex = data.Length - 1;
if (endindex > startindex)
{
string str = Encoding.ASCII.GetString(data, startindex, endindex - startindex);
strings.Add(str);
}
}
currentblockind++;
if (currentblockind >= datablocks.Count) break; //last block, can't go any further
currentblock = datablocks[currentblockind];
if (currentblock.StructureNameHash != MetaName.STRING) break; //not the right block type, can't go further
}
if (strings.Count <= 0)
{
return null; //don't return empty array...
}
return strings.ToArray();
}
public static string GetString(Meta meta, CharPointer ptr)
{
var blocki = (int)ptr.PointerDataIndex;// (ptr.Pointer & 0xFFF) - 1;
var offset = (int)ptr.PointerDataOffset;// (ptr.Pointer >> 12) & 0xFFFFF;
if ((blocki < 0) || (blocki >= meta.DataBlocks.BlockLength))
{ return null; }
var block = meta.DataBlocks[blocki];
if (block.StructureNameHash != MetaName.STRING)
{ return null; }
//var byteoffset = offset * 16 + offset2;
var length = ptr.Count1;
var lastbyte = offset + length;
if (lastbyte >= block.DataLength)
{ return null; }
string s = Encoding.ASCII.GetString(block.Data, offset, length);
//if (meta.Strings == null) return null;
//if (offset < 0) return null;
//if (offset >= meta.Strings.Length) return null;
//string s = meta.Strings[offset];
return s;
}
public static MetaWrapper[] GetExtensions(Meta meta, Array_StructurePointer ptr)
{
if (ptr.Count1 == 0) return null;
var result = new MetaWrapper[ptr.Count1];
var extptrs = GetPointerArray(meta, ptr);
if (extptrs != null)
{
for (int i = 0; i < extptrs.Length; i++)
{
var extptr = extptrs[i];
MetaWrapper ext = null;
var block = GetDataBlock(meta, extptr);
var h = block.StructureNameHash;
switch (h)
{
//archetype extension types
case MetaName.CExtensionDefParticleEffect:
ext = new MCExtensionDefParticleEffect();// MetaExtension<CExtensionDefParticleEffect>(h, GetData<CExtensionDefParticleEffect>(block, extptr));
break;
case MetaName.CExtensionDefAudioCollisionSettings:
ext = new MCExtensionDefAudioCollisionSettings();// MetaExtension<CExtensionDefAudioCollisionSettings>(h, GetData<CExtensionDefAudioCollisionSettings>(block, extptr));
break;
case MetaName.CExtensionDefAudioEmitter:
ext = new MCExtensionDefAudioEmitter();// MetaExtension<CExtensionDefAudioEmitter>(h, GetData<CExtensionDefAudioEmitter>(block, extptr));
break;
case MetaName.CExtensionDefSpawnPoint:
ext = new MCExtensionDefSpawnPoint();// new MetaExtension<CExtensionDefSpawnPoint>(h, GetData<CExtensionDefSpawnPoint>(block, extptr));
break;
case MetaName.CExtensionDefExplosionEffect:
ext = new MCExtensionDefExplosionEffect();// MetaExtension<CExtensionDefExplosionEffect>(h, GetData<CExtensionDefExplosionEffect>(block, extptr));
break;
case MetaName.CExtensionDefLadder:
ext = new MCExtensionDefLadder();// MetaExtension<CExtensionDefLadder>(h, GetData<CExtensionDefLadder>(block, extptr));
break;
case MetaName.CExtensionDefBuoyancy:
ext = new MCExtensionDefBuoyancy();// MetaExtension<CExtensionDefBuoyancy>(h, GetData<CExtensionDefBuoyancy>(block, extptr));
break;
case MetaName.CExtensionDefExpression:
ext = new MCExtensionDefExpression();// MetaExtension<CExtensionDefExpression>(h, GetData<CExtensionDefExpression>(block, extptr));
break;
case MetaName.CExtensionDefLightShaft:
ext = new MCExtensionDefLightShaft();// MetaExtension<CExtensionDefLightShaft>(h, GetData<CExtensionDefLightShaft>(block, extptr));
break;
case MetaName.CExtensionDefWindDisturbance:
ext = new MCExtensionDefWindDisturbance();// MetaExtension<CExtensionDefWindDisturbance>(h, GetData<CExtensionDefWindDisturbance>(block, extptr));
break;
case MetaName.CExtensionDefProcObject:
ext = new MCExtensionDefProcObject();// MetaExtension<CExtensionDefProcObject>(h, GetData<CExtensionDefProcObject>(block, extptr));
break;
//entity extension types
case MetaName.CExtensionDefLightEffect:
ext = new MCExtensionDefLightEffect();// MetaExtension<CExtensionDefLightEffect>(h, GetData<CExtensionDefLightEffect>(block, extptr));
break;
case MetaName.CExtensionDefSpawnPointOverride:
ext = new MCExtensionDefSpawnPointOverride();// MetaExtension<CExtensionDefSpawnPointOverride>(h, GetData<CExtensionDefSpawnPointOverride>(block, extptr));
break;
case MetaName.CExtensionDefDoor:
ext = new MCExtensionDefDoor();// MetaExtension<CExtensionDefDoor>(h, GetData<CExtensionDefDoor>(block, extptr));
break;
case MetaName.rage__phVerletClothCustomBounds: //rage__phVerletClothCustomBounds
ext = new Mrage__phVerletClothCustomBounds();// MetaExtension<rage__phVerletClothCustomBounds>(h, GetData<rage__phVerletClothCustomBounds>(block, extptr));
break;
default:
break;
}
//string ts = GetTypesInitString(meta);
if (ext != null)
{
ext.Load(meta, extptr);
}
if (i < result.Length)
{
result[i] = ext;
}
}
}
return result;
}
public static MetaDataBlock GetDataBlock(Meta meta, MetaPOINTER ptr)
{
int blocki = ptr.BlockID - 1;
if ((blocki < 0) || (blocki >= meta.DataBlocks.Count))
{ return null; }
var block = meta.DataBlocks[blocki];
return block;
}
public static int GetDataOffset(MetaDataBlock block, MetaPOINTER ptr)
{
if (block == null) return -1;
int offset = ptr.ItemOffset * 16;//block data size...
if (ptr.ExtraOffset != 0)
{ }
//offset += (int)ptr.ExtraOffset;
if ((offset < 0) || (block.Data == null) || (offset >= block.Data.Length))
{ return -1; }
return offset;
}
public static T GetData<T>(Meta meta, MetaPOINTER ptr) where T : struct
{
var block = GetDataBlock(meta, ptr);
var offset = GetDataOffset(block, ptr);
if (offset < 0) return new T();
return ConvertData<T>(block.Data, offset);
}
public static T GetData<T>(MetaDataBlock block, MetaPOINTER ptr) where T : struct
{
var offset = GetDataOffset(block, ptr);
if (offset < 0) return new T();
return ConvertData<T>(block.Data, offset);
}
public static ushort SwapBytes(ushort x)
{
return (ushort)(((x & 0xFF00) >> 8) | ((x & 0x00FF) << 8));
}
public static uint SwapBytes(uint x)
{
// swap adjacent 16-bit blocks
x = (x >> 16) | (x << 16);
// swap adjacent 8-bit blocks
return ((x & 0xFF00FF00) >> 8) | ((x & 0x00FF00FF) << 8);
}
public static int SwapBytes(int x)
{
return (int)SwapBytes((uint)x);
}
public static ulong SwapBytes(ulong x)
{
// swap adjacent 32-bit blocks
x = (x >> 32) | (x << 32);
// swap adjacent 16-bit blocks
x = ((x & 0xFFFF0000FFFF0000) >> 16) | ((x & 0x0000FFFF0000FFFF) << 16);
// swap adjacent 8-bit blocks
return ((x & 0xFF00FF00FF00FF00) >> 8) | ((x & 0x00FF00FF00FF00FF) << 8);
}
public static float SwapBytes(float f)
{
var a = BitConverter.GetBytes(f);
Array.Reverse(a);
return BitConverter.ToSingle(a, 0);
}
public static Vector2 SwapBytes(Vector2 v)
{
var x = SwapBytes(v.X);
var y = SwapBytes(v.Y);
return new Vector2(x, y);
}
public static Vector3 SwapBytes(Vector3 v)
{
var x = SwapBytes(v.X);
var y = SwapBytes(v.Y);
var z = SwapBytes(v.Z);
return new Vector3(x, y, z);
}
public static Vector4 SwapBytes(Vector4 v)
{
var x = SwapBytes(v.X);
var y = SwapBytes(v.Y);
var z = SwapBytes(v.Z);
var w = SwapBytes(v.W);
return new Vector4(x, y, z, w);
}
}
[TC(typeof(EXP))] public abstract class MetaWrapper
{
public virtual string Name { get { return ToString(); } }
public abstract void Load(Meta meta, MetaPOINTER ptr);
public abstract MetaPOINTER Save(MetaBuilder mb);
}
//derived types - manually created (array & pointer structs)
[TC(typeof(EXP))] public struct Array_StructurePointer //16 bytes - pointer for a structure pointer array
{
public uint Pointer { get; set; }
public uint Unk0 { get; set; }
public ushort Count1 { get; set; }
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 void SwapEnd()
{
Pointer = MetaTypes.SwapBytes(Pointer);
Count1 = MetaTypes.SwapBytes(Count1);
Count2 = MetaTypes.SwapBytes(Count2);
Unk1 = MetaTypes.SwapBytes(Unk1);
}
public override string ToString()
{
return "Array_StructurePointer: " + PointerDataIndex.ToString() + " (" + Count1.ToString() + "/" + Count2.ToString() + ")";
}
}
[TC(typeof(EXP))] public struct Array_Structure //16 bytes - pointer for a structure array
{
public uint Pointer { get; set; }
public uint Unk0 { get; set; }
public ushort Count1 { get; set; }
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 Array_Structure(uint ptr, int cnt)
{
Pointer = ptr;
Unk0 = 0;
Count1 = (ushort)cnt;
Count2 = Count1;
Unk1 = 0;
}
public Array_Structure(MetaBuilderPointer ptr)
{
Pointer = ptr.Pointer;
Unk0 = 0;
Count1 = (ushort)ptr.Length;
Count2 = Count1;
Unk1 = 0;
}
public void SwapEnd()
{
Pointer = MetaTypes.SwapBytes(Pointer);
Unk0 = MetaTypes.SwapBytes(Unk0);
Count1 = MetaTypes.SwapBytes(Count1);
Count2 = MetaTypes.SwapBytes(Count2);
Unk1 = MetaTypes.SwapBytes(Unk1);
}
public override string ToString()
{
return "Array_Structure: " + PointerDataIndex.ToString() + " (" + Count1.ToString() + "/" + Count2.ToString() + ")";
}
}
[TC(typeof(EXP))] public struct Array_uint //16 bytes - pointer for a uint array
{
public uint Pointer { get; set; }
public uint Unk0 { get; set; }
public ushort Count1 { get; set; }
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 Array_uint(uint ptr, int cnt)
{
Pointer = ptr;
Unk0 = 0;
Count1 = (ushort)cnt;
Count2 = Count1;
Unk1 = 0;
}
public Array_uint(MetaBuilderPointer ptr)
{
Pointer = ptr.Pointer;
Unk0 = 0;
Count1 = (ushort)ptr.Length;
Count2 = Count1;
Unk1 = 0;
}
public void SwapEnd()
{
Pointer = MetaTypes.SwapBytes(Pointer);
Unk0 = MetaTypes.SwapBytes(Unk0);
Count1 = MetaTypes.SwapBytes(Count1);
Count2 = MetaTypes.SwapBytes(Count2);
Unk1 = MetaTypes.SwapBytes(Unk1);
}
public override string ToString()
{
return "Array_uint: " + PointerDataIndex.ToString() + " (" + Count1.ToString() + "/" + Count2.ToString() + ")";
}
}
[TC(typeof(EXP))] public struct Array_ushort //16 bytes - pointer for a ushort array
{
public uint Pointer { get; set; }
public uint Unk0 { get; set; }
public ushort Count1 { get; set; }
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 Array_ushort(uint ptr, int cnt)
{
Pointer = ptr;
Unk0 = 0;
Count1 = (ushort)cnt;
Count2 = Count1;
Unk1 = 0;
}
public Array_ushort(MetaBuilderPointer ptr)
{
Pointer = ptr.Pointer;
Unk0 = 0;
Count1 = (ushort)ptr.Length;
Count2 = Count1;
Unk1 = 0;
}
public void SwapEnd()
{
Pointer = MetaTypes.SwapBytes(Pointer);
Unk0 = MetaTypes.SwapBytes(Unk0);
Count1 = MetaTypes.SwapBytes(Count1);
Count2 = MetaTypes.SwapBytes(Count2);
Unk1 = MetaTypes.SwapBytes(Unk1);
}
public override string ToString()
{
return "Array_ushort: " + PointerDataIndex.ToString() + " (" + Count1.ToString() + "/" + Count2.ToString() + ")";
}
}
[TC(typeof(EXP))] public struct Array_byte //16 bytes - pointer for a byte array
{
public uint Pointer { get; set; }
public uint Unk0 { get; set; }
public ushort Count1 { get; set; }
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 void SwapEnd()
{
Pointer = MetaTypes.SwapBytes(Pointer);
Unk0 = MetaTypes.SwapBytes(Unk0);
Count1 = MetaTypes.SwapBytes(Count1);
Count2 = MetaTypes.SwapBytes(Count2);
Unk1 = MetaTypes.SwapBytes(Unk1);
}
public override string ToString()
{
return "Array_byte: " + PointerDataIndex.ToString() + " (" + Count1.ToString() + "/" + Count2.ToString() + ")";
}
}
[TC(typeof(EXP))] public struct Array_float //16 bytes - pointer for a float array
{
public uint Pointer { get; set; }
public uint Unk0 { get; set; }
public ushort Count1 { get; set; }
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 void SwapEnd()
{
Pointer = MetaTypes.SwapBytes(Pointer);
Unk0 = MetaTypes.SwapBytes(Unk0);
Count1 = MetaTypes.SwapBytes(Count1);
Count2 = MetaTypes.SwapBytes(Count2);
Unk1 = MetaTypes.SwapBytes(Unk1);
}
public override string ToString()
{
return "Array_float: " + PointerDataIndex.ToString() + " (" + Count1.ToString() + "/" + Count2.ToString() + ")";
}
}
[TC(typeof(EXP))] public struct Array_Vector3 //16 bytes - pointer for a Vector3 array
{
public uint Pointer { get; set; }
public uint Unk0 { get; set; }
public ushort Count1 { get; set; }
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 void SwapEnd()
{
Pointer = MetaTypes.SwapBytes(Pointer);
Unk0 = MetaTypes.SwapBytes(Unk0);
Count1 = MetaTypes.SwapBytes(Count1);
Count2 = MetaTypes.SwapBytes(Count2);
Unk1 = MetaTypes.SwapBytes(Unk1);
}
public override string ToString()
{
return "Array_Vector3: " + PointerDataIndex.ToString() + " (" + Count1.ToString() + "/" + Count2.ToString() + ")";
}
}
[TC(typeof(EXP))] public struct CharPointer //16 bytes - pointer for a char array
{
public uint Pointer { get; set; }
public uint Unk0 { get; set; }
public ushort Count1 { get; set; }
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 CharPointer(uint ptr, int len)
{
Pointer = ptr;
Unk0 = 0;
Count1 = (ushort)len;
Count2 = Count1;
Unk1 = 0;
}
public CharPointer(MetaBuilderPointer ptr)
{
Pointer = ptr.Pointer;
Unk0 = 0;
Count1 = (ushort)ptr.Length;
Count2 = Count1;
Unk1 = 0;
}
public void SwapEnd()
{
Pointer = MetaTypes.SwapBytes(Pointer);
Unk0 = MetaTypes.SwapBytes(Unk0);
Count1 = MetaTypes.SwapBytes(Count1);
Count2 = MetaTypes.SwapBytes(Count2);
Unk1 = MetaTypes.SwapBytes(Unk1);
}
public override string ToString()
{
return "CharPointer: " + Pointer.ToString() + " (" + Count1.ToString() + "/" + Count2.ToString() + ")";
}
}
[TC(typeof(EXP))] public struct DataBlockPointer //8 bytes - pointer to data block
{
public uint Ptr0 { get; set; }
public uint Ptr1 { get; set; }
public uint PointerDataId { get { return (Ptr0 & 0xFFF); } }
public uint PointerDataIndex { get { return (Ptr0 & 0xFFF) - 1; } }
public uint PointerDataOffset { get { return ((Ptr0 >> 12) & 0xFFFFF); } }
public override string ToString()
{
return "DataBlockPointer: " + Ptr0.ToString() + ", " + Ptr1.ToString();
}
public void SwapEnd()
{
Ptr0 = MetaTypes.SwapBytes(Ptr0);
Ptr1 = MetaTypes.SwapBytes(Ptr1);
}
}
public struct ArrayOfUshorts3 //array of 3 bytes
{
public ushort u0, u1, u2;
public override string ToString()
{
return u0.ToString() + ", " + u1.ToString() + ", " + u2.ToString();
}
}
public struct ArrayOfBytes3 //array of 3 bytes
{
public byte b0,b1,b2;
public override string ToString()
{
return b0.ToString() + ", " + b1.ToString() + ", " + b2.ToString();
}
}
public struct ArrayOfBytes4 //array of 4 bytes
{
public byte b0,b1,b2,b3;
public override string ToString()
{
return b0.ToString() + ", " + b1.ToString() + ", " + b2.ToString() + ", " + b3.ToString();
}
}
public struct ArrayOfBytes5 //array of 5 bytes
{
public byte b0, b1, b2, b3, b4;
}
public struct ArrayOfBytes6 //array of 6 bytes
{
public byte b0, b1, b2, b3, b4, b5;
}
public struct ArrayOfBytes12 //array of 12 bytes
{
public byte b00, b01, b02, b03, b04, b05, b06, b07, b08, b09, b10, b11;
}
public struct ArrayOfChars64 //array of 64 chars (bytes)
{
public byte
b00, b01, b02, b03, b04, b05, b06, b07, b08, b09, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19,
b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39,
b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50, b51, b52, b53, b54, b55, b56, b57, b58, b59,
b60, b61, b62, b63;
public override string ToString()
{
byte[] bytes =
{
b00, b01, b02, b03, b04, b05, b06, b07, b08, b09, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19,
b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39,
b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50, b51, b52, b53, b54, b55, b56, b57, b58, b59,
b60, b61, b62, b63
};
StringBuilder sb = new StringBuilder();
for (int i = 0; i < bytes.Length; i++)
{
if (bytes[i] == 0) break;
sb.Append((char)bytes[i]);
}
return sb.ToString();
}
}
public struct MetaVECTOR3 //12 bytes, Key:2751397072
{
public float x { get; set; } //0 0: Float: 0: x
public float y { get; set; } //4 4: Float: 0: y
public float z { get; set; } //8 8: Float: 0: z
public override string ToString()
{
return x.ToString() + ", " + y.ToString() + ", " + z.ToString();
}
public Vector3 ToVector3()
{
return new Vector3(x, y, z);
}
}
public struct MetaPOINTER //8 bytes - pointer to data item //SectionUNKNOWN10
{
public ushort BlockID { get; set; } //1-based ID
public ushort ItemOffset { get; set; } //byte offset / 16
public uint ExtraOffset { get; set; }
public MetaPOINTER(ushort blockID, ushort itemOffset, uint extra)
{
BlockID = blockID;
ItemOffset = itemOffset;
ExtraOffset = extra;
}
public override string ToString()
{
return BlockID.ToString() + ", " + ItemOffset.ToString() + ", " + ExtraOffset.ToString();
}
}
//generated enums
//Enum infos
[Flags] public enum Unk_700327466 //SCENARIO point flags / extension spawn point flags
: int //Key:2814596095
{
IgnoreMaxInRange = 1,//0,
NoSpawn = 2,//1,
StationaryReactions = 4,//2,
Unk_3257836369 = 8,//3,
Unk_2165609255 = 16,//4,
ActivateVehicleSiren = 32,//5,
Unk_2626064871 = 64,//6, // AggressiveVehicleDriving ?
Unk_2004780781 = 128,//7,
Unk_536864854 = 256,//8,
Unk_3441065168 = 512,//9,
AerialVehiclePoint = 1024,//10,
TerritorialScenario = 2048,//11,
Unk_3690227693 = 4096,//12,
Unk_1601179199 = 8192,//13,
Unk_2583152330 = 16384,//14,
Unk_3490317520 = 32768,//15,
InWater = 65536,//16,
Unk_1269249358 = 131072,//17, // AllowInvestigation ?
OpenDoor = 262144,//18,
PreciseUseTime = 524288,//19,
Unk_2247631388 = 1048576,//20,
Unk_4100708934 = 2097152,//21,
ExtendedRange = 4194304,//22,
ShortRange = 8388608,//23,
HighPriority = 16777216,//24,
IgnoreLoitering = 33554432,//25,
Unk_1524211135 = 67108864,//26, // UseSearchlight ?
ResetNoCollisionOnCleanUp = 134217728,//27,
Unk_3304563391 = 268435456,//28,
Unk_1111379709 = 536870912,//29,
Unk_176469077 = 1073741824,//30, // IgnoreWeatherRestrictions ?
}
public enum Unk_3573596290 //SCENARIO Spawn point availability availableInMpSp
: int //Key:671739257
{
kBoth = 0,
kOnlySp = 1,
kOnlyMp = 2,
}
public enum Unk_3609807418 //SCENARIO (Path) Edge Action
: byte //Key:3326075799
{
Move = 0,
Unk_7865678 = 1,
MoveFollowMaster = 2,
}
public enum Unk_3971773454 //SCENARIO (Path) Edge nav mode
: byte //Key:3016128742
{
Direct = 0,
NavMesh = 1,
Roads = 2,
}
public enum Unk_941086046 //SCENARIO (Path) Edge nav speed
: byte //Key:1112851290
{
Unk_00_3279574318 = 0,
Unk_01_2212923970 = 1,
Unk_02_4022799658 = 2,
Unk_03_1425672334 = 3,
Unk_04_957720931 = 4,
Unk_05_3795195414 = 5,
Unk_06_2834622009 = 6,
Unk_07_1876554076 = 7,
Unk_08_698543797 = 8,
Unk_09_1544199634 = 9,
Unk_10_2725613303 = 10,
Unk_11_4033265820 = 11,
Unk_12_3054809929 = 12,
Unk_13_3911005380 = 13,
Unk_14_3717649022 = 14,
Unk_15_3356026130 = 15,
}
public enum Unk_1991964615 //archetype assetType
: int //Key:1866031916
{
ASSET_TYPE_UNINITIALIZED = 0, //189734893
ASSET_TYPE_FRAGMENT = 1, //571047911
ASSET_TYPE_DRAWABLE = 2, //130075505
ASSET_TYPE_DRAWABLEDICTIONARY = 3, //1580165652
ASSET_TYPE_ASSETLESS = 4, //4161085041
}
public enum Unk_1264241711 //entity lodLevel
: int //Key:1856311430
{
LODTYPES_DEPTH_HD = 0,
LODTYPES_DEPTH_LOD = 1,
LODTYPES_DEPTH_SLOD1 = 2,
LODTYPES_DEPTH_SLOD2 = 3,
LODTYPES_DEPTH_SLOD3 = 4, //thanks Tadden :D
LODTYPES_DEPTH_ORPHANHD = 5,
LODTYPES_DEPTH_SLOD4 = 6,
}
public enum Unk_648413703 //entity priorityLevel
: int //Key:2200357711
{
PRI_REQUIRED = 0, //1943361227
PRI_OPTIONAL_HIGH = 1, //3993616791
PRI_OPTIONAL_MEDIUM = 2, //515598709
PRI_OPTIONAL_LOW = 3, //329627604
}
public enum Unk_1294270217 //archetype CExtensionDefLadder materialType
: int //Key:3514570158
{
METAL_SOLID_LADDER = 0, //Unk_1101797524 = 0,
METAL_LIGHT_LADDER = 1,
Unk_3202617440 = 2,
}
public enum Unk_1931949281 //archetype CExtensionDefLightShaft densityType
: int //Key:3539601182
{
Unk_676250331 = 0,
Unk_2399586564 = 1,
Unk_2057886646 = 2,
Unk_1816804348 = 3,
Unk_152140774 = 4,
Unk_2088805984 = 5,
Unk_1098824079 = 6,
Unk_1492299290 = 7,
}
public enum Unk_2266515059 //archetype CExtensionDefLightShaft volumeType
: int //Key:4287472345
{
Unk_665241531 = 0,
Unk_462992848 = 1,
}
public enum Unk_884254308 //component peds CComponentInfo ped accessory / variations slot
: short //Key:3472084374
{
PV_COMP_INVALID = -1,
PV_COMP_HEAD = 0,
PV_COMP_BERD = 1,
PV_COMP_HAIR = 2,
PV_COMP_UPPR = 4,//3,
PV_COMP_LOWR = 8,//4,
PV_COMP_HAND = 16,//5,
PV_COMP_FEET = 32,//6,
PV_COMP_TEEF = 64,//7,
PV_COMP_ACCS = 128,//8,
PV_COMP_TASK = 256,//9,
PV_COMP_DECL = 512,//10,
PV_COMP_JBIB = 1024,//11,
PV_COMP_MAX = 2048,//12,
}
public enum Unk_4212977111 //component peds Unk_94549140 renderFlags
: int //Key:1551913633
{
Unk_3757767268 = 0,
Unk_3735238938 = 1,
Unk_3395845123 = 2,
}
public enum Unk_2834549053 //component peds CAnchorProps anchor
: int //Key:1309372691
{
ANCHOR_HEAD = 0,
ANCHOR_EYES = 1,
ANCHOR_EARS = 2,
ANCHOR_MOUTH = 3,
ANCHOR_LEFT_HAND = 4,
ANCHOR_RIGHT_HAND = 5,
ANCHOR_LEFT_WRIST = 6,
ANCHOR_RIGHT_WRIST = 7,
ANCHOR_HIP = 8,
ANCHOR_LEFT_FOOT = 9,
ANCHOR_RIGHT_FOOT = 10,
Unk_604819740 = 11,
Unk_2358626934 = 12,
NUM_ANCHORS = 13,
}
public enum Unk_3044470860 //cloth collision data SectionUNKNOWN1/1701774085 Flags
: int //Key:1585854303
{
Unk_997866013 = 0,
}
//generated + adjusted structs code (UnusedX padding vars manually added) from here down
//Struct infos
[TC(typeof(EXP))] public struct CMapTypes //80 bytes, Key:2608875220
{
public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4
public Array_StructurePointer extensions { get; set; } //8 8: Array: 0: extensions {0: StructurePointer: 0: 256}
public Array_StructurePointer archetypes { get; set; } //24 24: Array: 0: archetypes {0: StructurePointer: 0: 256}
public MetaHash name { get; set; } //40 40: Hash: 0: name
public uint Unused2 { get; set; }//44
public Array_uint dependencies { get; set; } //48 48: Array: 0: dependencies//1013942340 {0: Hash: 0: 256}
public Array_Structure compositeEntityTypes { get; set; } //64 64: Array: 0: compositeEntityTypes {0: Structure: SectionUNKNOWN2: 256}
public override string ToString()
{
return name.ToString();
}
}
[TC(typeof(EXP))] public struct CBaseArchetypeDef //144 bytes, Key:2411387556
{
public uint Unused00 { get; set; }//0
public uint Unused01 { get; set; }//4
public float lodDist { get; set; } //8 8: Float: 0: lodDist
public uint flags { get; set; } //12 12: UnsignedInt: 0: flags
public uint specialAttribute { get; set; } //16 16: UnsignedInt: 0: specialAttribute
public uint Unused02 { get; set; }//20
public uint Unused03 { get; set; }//24
public uint Unused04 { get; set; }//28
public Vector3 bbMin { get; set; } //32 32: Float_XYZ: 0: bbMin
public float Unused05 { get; set; }//44
public Vector3 bbMax { get; set; } //48 48: Float_XYZ: 0: bbMax
public float Unused06 { get; set; }//60
public Vector3 bsCentre { get; set; } //64 64: Float_XYZ: 0: bsCentre
public float Unused07 { get; set; }//76
public float bsRadius { get; set; } //80 80: Float: 0: bsRadius
public float hdTextureDist { get; set; } //84 84: Float: 0: hdTextureDist//2908576588
public MetaHash name { get; set; } //88 88: Hash: 0: name
public MetaHash textureDictionary { get; set; } //92 92: Hash: 0: textureDictionary
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 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}
public uint Unused09 { get; set; }//136
public uint Unused10 { get; set; }//140
public override string ToString()
{
return name.ToString() + ", " +
assetName.ToString() + ", " +
drawableDictionary.ToString() + ", " +
textureDictionary.ToString();
}
}
[TC(typeof(EXP))] public struct CTimeArchetypeDef //160 bytes, Key:2520619910
{
public CBaseArchetypeDef CBaseArchetypeDef { get; set; }
public uint timeFlags { get; set; } //144 144: UnsignedInt: 0: timeFlags//2248791340
public uint Unused11 { get; set; }//148
public uint Unused12 { get; set; }//152
public uint Unused13 { get; set; }//156
public override string ToString()
{
return CBaseArchetypeDef.ToString();
}
}
[TC(typeof(EXP))] public struct CMloArchetypeDef //240 bytes, Key:937664754
{
public CBaseArchetypeDef CBaseArchetypeDef { get; set; }
public uint mloFlags { get; set; } //144 144: UnsignedInt: 0: mloFlags//3590839912
public uint Unused11 { get; set; }//148
public Array_StructurePointer entities { get; set; } //152 152: Array: 0: entities {0: StructurePointer: 0: 256}
public Array_Structure rooms { get; set; } //168 168: Array: 0: rooms {0: Structure: CMloRoomDef: 256}
public Array_Structure portals { get; set; } //184 184: Array: 0: portals//2314725778 {0: Structure: CMloPortalDef: 256}
public Array_Structure entitySets { get; set; } //200 200: Array: 0: entitySets//1169996080 {0: Structure: CMloEntitySet: 256}
public Array_Structure timeCycleModifiers { get; set; } //216 216: Array: 0: timeCycleModifiers {0: Structure: CMloTimeCycleModifier: 256}
public uint Unused12 { get; set; }//232
public uint Unused13 { get; set; }//236
public override string ToString()
{
return CBaseArchetypeDef.ToString();
}
}
[TC(typeof(EXP))] public struct CLODLight //136 bytes, Key:2325189228
{
public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4
public Array_Structure direction { get; set; } //8 8: Array: 0: direction {0: Structure: SectionUNKNOWN9: 256}
public Array_float falloff { get; set; } //24 24: Array: 0: falloff {0: Float: 0: 256}
public Array_float falloffExponent { get; set; } //40 40: Array: 0: falloffExponent {0: Float: 0: 256}
public Array_uint timeAndStateFlags { get; set; } //56 56: Array: 0: timeAndStateFlags=3112418278 {0: UnsignedInt: 0: 256}
public Array_uint hash { get; set; } //72 72: Array: 0: hash {0: UnsignedInt: 0: 256}
public Array_byte coneInnerAngle { get; set; } //88 88: Array: 0: coneInnerAngle//1163671864 {0: UnsignedByte: 0: 256}
public Array_byte coneOuterAngleOrCapExt { get; set; } //104 104: Array: 0: coneOuterAngleOrCapExt=3161894080 {0: UnsignedByte: 0: 256}
public Array_byte coronaIntensity { get; set; } //120 120: Array: 0: coronaIntensity//2292363771 {0: UnsignedByte: 0: 256}
}
[TC(typeof(EXP))] public struct CDistantLODLight //48 bytes, Key:2820908419
{
public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4
public Array_Structure position { get; set; } //8 8: Array: 0: position {0: Structure: SectionUNKNOWN9: 256}
public Array_uint RGBI { get; set; } //24 24: Array: 0: RGBI {0: UnsignedInt: 0: 256}
public ushort numStreetLights { get; set; } //40 40: UnsignedShort: 0: numStreetLights//3708891211
public ushort category { get; set; } //42 42: UnsignedShort: 0: category//2052871693
public uint Unused2 { get; set; }//44
}
[TC(typeof(EXP))] public struct CBlockDesc //72 bytes, Key:2015795449
{
public uint version { get; set; } //0 0: UnsignedInt: 0: version
public uint flags { get; set; } //4 4: UnsignedInt: 0: flags
public CharPointer name { get; set; } //8 8: CharPointer: 0: name
public CharPointer exportedBy { get; set; } //24 24: CharPointer: 0: exportedBy//1983184981
public CharPointer owner { get; set; } //40 40: CharPointer: 0: owner
public CharPointer time { get; set; } //56 56: CharPointer: 0: time
}
[TC(typeof(EXP))] public struct CMapData //512 bytes, Key:3448101671
{
public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4
public MetaHash name { get; set; } //8 8: Hash: 0: name
public MetaHash parent { get; set; } //12 12: Hash: 0: parent
public uint flags { get; set; } //16 16: UnsignedInt: 0: flags
public uint contentFlags { get; set; } //20 20: UnsignedInt: 0: contentFlags//1785155637
public uint Unused2 { get; set; }//24
public uint Unused3 { get; set; }//28
public Vector3 streamingExtentsMin { get; set; } //32 32: Float_XYZ: 0: streamingExtentsMin//3710026271
public float Unused4 { get; set; }//44
public Vector3 streamingExtentsMax { get; set; } //48 48: Float_XYZ: 0: streamingExtentsMax//2720965429
public float Unused5 { get; set; }//60
public Vector3 entitiesExtentsMin { get; set; } //64 64: Float_XYZ: 0: entitiesExtentsMin//477478129
public float Unused6 { get; set; }//76
public Vector3 entitiesExtentsMax { get; set; } //80 80: Float_XYZ: 0: entitiesExtentsMax//1829192759
public float Unused7 { get; set; }//92
public Array_StructurePointer entities { get; set; } //96 96: Array: 0: entities {0: StructurePointer: 0: 256}
public Array_Structure containerLods { get; set; } //112 112: Array: 0: containerLods//2935983381 {0: Structure: 372253349: 256}
public Array_Structure boxOccluders { get; set; } //128 128: Array: 0: boxOccluders//3983590932 {0: Structure: SectionUNKNOWN7: 256}
public Array_Structure occludeModels { get; set; } //144 144: Array: 0: occludeModels//2132383965 {0: Structure: SectionUNKNOWN5: 256}
public Array_uint physicsDictionaries { get; set; } //160 160: Array: 0: physicsDictionaries//949589348 {0: Hash: 0: 256}
public rage__fwInstancedMapData instancedData { get; set; } //176 176: Structure: rage__fwInstancedMapData: instancedData//2569067561
public Array_Structure timeCycleModifiers { get; set; } //224 224: Array: 0: timeCycleModifiers {0: Structure: CTimeCycleModifier: 256}
public Array_Structure carGenerators { get; set; } //240 240: Array: 0: carGenerators//3254823756 {0: Structure: CCarGen: 256}
public CLODLight LODLightsSOA { get; set; } //256 256: Structure: CLODLight: LODLightsSOA//1774371066
public CDistantLODLight DistantLODLightsSOA { get; set; } //392 392: Structure: CDistantLODLight: DistantLODLightsSOA//2954466641
public CBlockDesc block { get; set; } //440 440: Structure: CBlockDesc//3072355914: block
//notes:
//CMapData.flags:
// flag 1 = SCRIPTED flag (eg destruction)
// flag 2 = LOD flag? reflection proxy flag?
public override string ToString()
{
return name.ToString() + ": " + parent.ToString();
}
}
[TC(typeof(EXP))] public struct CEntityDef //128 bytes, Key:1825799514
{
public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4
public MetaHash archetypeName { get; set; } //8 8: Hash: 0: archetypeName
public uint flags { get; set; } //12 12: UnsignedInt: 0: flags
public uint guid { get; set; } //16 16: UnsignedInt: 0: guid
public uint Unused2 { get; set; }//20
public uint Unused3 { get; set; }//24
public uint Unused4 { get; set; }//28
public Vector3 position { get; set; } //32 32: Float_XYZ: 0: position
public float Unused5 { get; set; }//44
public Vector4 rotation { get; set; } //48 48: Float_XYZW: 0: rotation
public float scaleXY { get; set; } //64 64: Float: 0: 2627937847
public float scaleZ { get; set; } //68 68: Float: 0: 284916802
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 uint numChildren { get; set; } //88 88: UnsignedInt: 0: numChildren//2793909385
public Unk_648413703 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
public uint tintValue { get; set; } //120 120: UnsignedInt: 0: tintValue//1015358759
public uint Unused6 { get; set; }//124
public override string ToString()
{
return JenkIndex.GetString(archetypeName) + ": " + JenkIndex.GetString(guid) + ": " + position.ToString();
}
}
[TC(typeof(EXP))] public struct CTimeCycleModifier //64 bytes, Key:2683420777
{
public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4
public MetaHash name { get; set; } //8 8: Hash: 0: name
public uint Unused2 { get; set; }//12
public Vector3 minExtents { get; set; } //16 16: Float_XYZ: 0: minExtents=1731020657
public float Unused3 { get; set; }//28
public Vector3 maxExtents { get; set; } //32 32: Float_XYZ: 0: maxExtents=2554806840
public float Unused4 { get; set; }//44
public float percentage { get; set; } //48 48: Float: 0: percentage
public float range { get; set; } //52 52: Float: 0: range
public uint startHour { get; set; } //56 56: UnsignedInt: 0: startHour
public uint endHour { get; set; } //60 60: UnsignedInt: 0: endHour
//regarding name in OpenIV:
//2633803310 = NoAmbientmult
//2003616884 = INT_NoAmbientMult
public override string ToString()
{
return name.ToString() + ": startHour " + startHour.ToString() + ", endHour " + endHour.ToString() + ", range " + range.ToString() + ", percentage " + percentage.ToString();
}
}
[TC(typeof(EXP))] public struct CMloInstanceDef //160 bytes, Key:2151576752
{
public CEntityDef CEntityDef { get; set; }
public uint groupId { get; set; } //128 128: UnsignedInt: 0: 2501631252
public uint floorId { get; set; } //132 132: UnsignedInt: 0: floorId//2187650609
public Array_uint Unk_1407157833 { get; set; } //136 136: Array: 0: 1407157833 {0: Hash: 0: 256}
public uint Unk_528711607 { get; set; } //152 152: UnsignedInt: 0: 528711607
public uint Unk_3761966250 { get; set; } //156 156: UnsignedInt: 0: 3761966250
}
[TC(typeof(EXP))] public struct CMloRoomDef //112 bytes, Key:3885428245
{
public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4
public CharPointer name { get; set; } //8 8: CharPointer: 0: name
public uint Unused2 { get; set; }//24
public uint Unused3 { get; set; }//28
public Vector3 bbMin { get; set; } //32 32: Float_XYZ: 0: bbMin
public float Unused4 { get; set; }//44
public Vector3 bbMax { get; set; } //48 48: Float_XYZ: 0: bbMax
public float Unused5 { get; set; }//60
public float blend { get; set; } //64 64: Float: 0: blend
public MetaHash timecycleName { get; set; } //68 68: Hash: 0: timecycleName//2724323497
public MetaHash secondaryTimecycleName { get; set; } //72 72: Hash: 0: secondaryTimecycleName//3255324828
public uint flags { get; set; } //76 76: UnsignedInt: 0: flags
public uint portalCount { get; set; } //80 80: UnsignedInt: 0: portalCount//1105339827
public int floorId { get; set; } //84 84: SignedInt: 0: floorId//2187650609
public int Unk_552849982 { get; set; } //88 88: SignedInt: 0: exteriorVisibiltyDepth//552849982
public uint Unused6 { get; set; }//92
public Array_uint attachedObjects { get; set; } //96 96: Array: 0: attachedObjects//2382704940 {0: UnsignedInt: 0: 256}
}
[TC(typeof(EXP))] public struct CMloPortalDef //64 bytes, Key:1110221513
{
public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4
public uint roomFrom { get; set; } //8 8: UnsignedInt: 0: 4101034749
public uint roomTo { get; set; } //12 12: UnsignedInt: 0: 2607060513
public uint flags { get; set; } //16 16: UnsignedInt: 0: flags
public uint mirrorPriority { get; set; } //20 20: UnsignedInt: 0: 1185490713
public uint opacity { get; set; } //24 24: UnsignedInt: 0: opacity
public uint audioOcclusion { get; set; } //28 28: UnsignedInt: 0: 1093790004
public Array_Vector3 corners { get; set; } //32 32: Array: 0: corners {0: Float_XYZ: 0: 256}
public Array_uint attachedObjects { get; set; } //48 48: Array: 0: attachedObjects//2382704940 {0: UnsignedInt: 0: 256}
}
[TC(typeof(EXP))] public struct CMloTimeCycleModifier //48 bytes, Key:838874674
{
public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4
public MetaHash name { get; set; } //8 8: Hash: 0: name
public uint Unused2 { get; set; }//12
public Vector4 sphere { get; set; } //16 16: Float_XYZW: 0: sphere
public float percentage { get; set; } //32 32: Float: 0: percentage
public float range { get; set; } //36 36: Float: 0: range
public uint startHour { get; set; } //40 40: UnsignedInt: 0: startHour
public uint endHour { get; set; } //44 44: UnsignedInt: 0: vlink87812
}
[TC(typeof(EXP))] public struct CMloEntitySet //48 bytes, Key:4180211587
{
public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4
public MetaHash name { get; set; } //8 8: Hash: 0: name
public uint Unused2 { get; set; }//12
public Array_uint locations { get; set; } //16 16: Array: 0: locations {0: UnsignedInt: 0: 256}
public Array_StructurePointer entities { get; set; } //32 32: Array: 0: entities {0: StructurePointer: 0: 256}
}
[TC(typeof(EXP))] public struct rage__spdGrid2D //64 bytes, Key:894636096
{
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 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 uint Unused7 { get; set; }//52
public uint Unused8 { get; set; }//56
public uint Unused9 { get; set; }//60
public Vector2I Dimensions
{
get
{
return new Vector2I((Unk_MaxX_3824598937 - Unk_MinX_860552138)+1, (Unk_MaxY_3374647798 - Unk_MinY_496029782)+1);
}
}
public Vector2 Scale
{
get
{
return new Vector2(Unk_X_2690909759, Unk_Y_3691675019);
}
set
{
Unk_X_2690909759 = value.X;
Unk_Y_3691675019 = value.Y;
}
}
public Vector2 Min
{
get
{
return new Vector2(Unk_MinX_860552138, Unk_MinY_496029782) * Scale;
}
set
{
var gv = value / Scale;
Unk_MinX_860552138 = (int)Math.Floor(gv.X);
Unk_MinY_496029782 = (int)Math.Floor(gv.Y);
}
}
public Vector2 Max
{
get
{
return new Vector2(Unk_MaxX_3824598937, Unk_MaxY_3374647798) * Scale;
}
set
{
var gv = value / Scale;
Unk_MaxX_3824598937 = (int)Math.Floor(gv.X);
Unk_MaxY_3374647798 = (int)Math.Floor(gv.Y);
}
}
}
[TC(typeof(EXP))] public struct rage__spdAABB //32 bytes, Key:1158138379 //WAS: Unk_4084721864
{
public Vector4 min { get; set; } //0 0: Float_XYZW: 0: min
public Vector4 max { get; set; } //16 16: Float_XYZW: 0: max
public override string ToString()
{
return "min: " + min.ToString() + ", max: " + max.ToString();
}
public void SwapEnd()
{
min = MetaTypes.SwapBytes(min);
max = MetaTypes.SwapBytes(max);
}
}
[TC(typeof(EXP))] public struct rage__spdSphere //16 bytes, Key:1189037266 //Sphere - used in scenario parts
{
public Vector4 centerAndRadius { get; set; } //0 0: Float_XYZW: 0: centerAndRadius
public override string ToString()
{
return centerAndRadius.ToString();
}
}
[TC(typeof(EXP))] public struct rage__phVerletClothCustomBounds //32 bytes, Key:2075461750
{
public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4
public MetaHash name { get; set; } //8 8: Hash: 0: name
public uint Unused2 { get; set; }//12
public Array_Structure CollisionData { get; set; } //16 16: Array: 0: CollisionData {0: Structure: SectionUNKNOWN1: 256}
}
[TC(typeof(EXP))] public class Mrage__phVerletClothCustomBounds : MetaWrapper
{
public rage__phVerletClothCustomBounds _Data;
public rage__phVerletClothCustomBounds Data { get { return _Data; } }
public MUnk_1701774085[] CollisionData { get; set; }
public override void Load(Meta meta, MetaPOINTER ptr)
{
_Data = MetaTypes.GetData<rage__phVerletClothCustomBounds>(meta, ptr);
var cdata = MetaTypes.ConvertDataArray<Unk_1701774085>(meta, (MetaName)1701774085/*.SectionUNKNOWN1*/, _Data.CollisionData);
if (cdata != null)
{
CollisionData = new MUnk_1701774085[cdata.Length];
for (int i = 0; i < cdata.Length; i++)
{
CollisionData[i] = new MUnk_1701774085(meta, cdata[i]);
}
}
}
public override MetaPOINTER Save(MetaBuilder mb)
{
if (CollisionData != null)
{
_Data.CollisionData = mb.AddWrapperArray(CollisionData);
}
mb.AddStructureInfo(MetaName.rage__phVerletClothCustomBounds);
return mb.AddItemPtr(MetaName.rage__phVerletClothCustomBounds, _Data);
}
public override string ToString()
{
return "rage__phVerletClothCustomBounds - " + _Data.name.ToString() + " (" + (CollisionData?.Length ?? 0).ToString() + " CollisionData)";
}
}
[TC(typeof(EXP))] public struct rage__fwInstancedMapData //48 bytes, Key:1836780118
{
public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4
public MetaHash ImapLink { get; set; } //8 8: Hash: 0: ImapLink//2142127586
public uint Unused2 { get; set; }//12
public Array_Structure PropInstanceList { get; set; } //16 16: Array: 0: PropInstanceList//3551474528 {0: Structure: rage__fwPropInstanceListDef: 256}
public Array_Structure GrassInstanceList { get; set; } //32 32: Array: 0: GrassInstanceList//255292381 {0: Structure: rage__fwGrassInstanceListDef: 256}
public override string ToString()
{
return ImapLink.ToString() + ", " + PropInstanceList.Count1.ToString() + " props, " + GrassInstanceList.Count1.ToString() + " grasses";
}
}
[TC(typeof(EXP))] public struct rage__fwGrassInstanceListDef //96 bytes, Key:941808164 rage__fwGrassInstanceListDef//2085051229
{
public rage__spdAABB BatchAABB { get; set; } //0 0: Structure: 4084721864: BatchAABB//1859041902
public Vector3 ScaleRange { get; set; } //32 32: Float_XYZ: 0: ScaleRange
public float Unused0 { get; set; }//44
public MetaHash archetypeName { get; set; } //48 48: Hash: 0: archetypeName
public uint lodDist { get; set; } //52 52: UnsignedInt: 0: lodDist
public float LodFadeStartDist { get; set; } //56 56: Float: 0: LodFadeStartDist//2216273066
public float LodInstFadeRange { get; set; } //60 60: Float: 0: LodInstFadeRange//1405992723
public float OrientToTerrain { get; set; } //64 64: Float: 0: OrientToTerrain//3341475578
public uint Unused1 { get; set; }//68
public Array_Structure InstanceList { get; set; } //72 72: Array: 0: InstanceList//470289337 {0: Structure: rage__fwGrassInstanceListDef__InstanceData: 256}
public uint Unused2 { get; set; }//88
public uint Unused3 { get; set; }//92
public override string ToString()
{
return archetypeName.ToString() + " (" + InstanceList.Count1.ToString() + " instances)";
}
}
[TC(typeof(EXP))] public struct rage__fwGrassInstanceListDef__InstanceData //16 bytes, Key:2740378365 rage__fwGrassInstanceListDef__InstanceData//3985044770 // Tom: Something to do with placing foliage
{
public ArrayOfUshorts3 Position { get; set; } //0 0: ArrayOfBytes: 3: Position - Ushorts
public byte NormalX { get; set; } //6 6: UnsignedByte: 0: NormalX//3138065392
public byte NormalY { get; set; } //7 7: UnsignedByte: 0: NormalY//273792636
public ArrayOfBytes3 Color { get; set; } //8 8: ArrayOfBytes: 3: Color
public byte Scale { get; set; } //11 11: UnsignedByte: 0: Scale
public byte Ao { get; set; } //12 12: UnsignedByte: 0: Ao//2996378564
public ArrayOfBytes3 Pad { get; set; } //13 13: ArrayOfBytes: 3: Pad
public override string ToString()
{
return Position.ToString() + " : " + Color.ToString() + " : " + Scale.ToString();
}
}
public struct CBaseArchetypeDef_v2 //128 bytes, Key:2352343492
{
public uint Unused00 { get; set; }//0
public uint Unused01 { get; set; }//4
public float lodDist { get; set; } //8 8: Float: 0: lodDist
public uint flags { get; set; } //12 12: UnsignedInt: 0: flags
public uint specialAttribute { get; set; } //16 16: UnsignedInt: 0: specialAttribute
public uint Unused02 { get; set; }//20
public uint Unused03 { get; set; }//24
public uint Unused04 { get; set; }//28
public Vector3 bbMin { get; set; } //32 32: Float_XYZ: 0: bbMin
public float Unused05 { get; set; }//44
public Vector3 bbMax { get; set; } //48 48: Float_XYZ: 0: bbMax
public float Unused06 { get; set; }//60
public Vector3 bsCentre { get; set; } //64 64: Float_XYZ: 0: bsCentre
public float Unused07 { get; set; }//76
public float bsRadius { get; set; } //80 80: Float: 0: bsRadius
public float hdTextureDist { get; set; } //84 84: Float: 0: hdTextureDist//2908576588
public MetaHash name { get; set; } //88 88: Hash: 0: name
public MetaHash textureDictionary { get; set; } //92 92: Hash: 0: textureDictionary
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 uint Unused08 { get; set; }//108
public Array_StructurePointer extensions { get; set; } //112 112: Array: 0: extensions {0: StructurePointer: 0: 256}
}
public struct CCreatureMetaData //56 bytes, Key:2181653572
{
public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4
public Array_Structure shaderVariableComponents { get; set; } //8 8: Array: 0: shaderVariableComponents {0: Structure: CShaderVariableComponent: 256}
public Array_Structure pedPropExpressions { get; set; } //24 24: Array: 0: pedPropExpressions {0: Structure: CPedPropExpressionData: 256}
public Array_Structure pedCompExpressions { get; set; } //40 40: Array: 0: pedCompExpressions {0: Structure: CPedCompExpressionData: 256}
}
public struct CShaderVariableComponent //72 bytes, Key:3085831725
{
public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4
public uint pedcompID { get; set; } //8 8: UnsignedInt: 0: pedcompID
public uint maskID { get; set; } //12 12: UnsignedInt: 0: maskID
public uint shaderVariableHashString { get; set; } //16 16: Hash: 0: shaderVariableHashString
public uint Unused2 { get; set; }//20
public Array_byte tracks { get; set; } //24 24: Array: 0: tracks {0: UnsignedByte: 0: 256}
public Array_ushort ids { get; set; } //40 40: Array: 0: ids {0: UnsignedShort: 0: 256}
public Array_byte components { get; set; } //56 56: Array: 0: components {0: UnsignedByte: 0: 256}
}
public struct CPedPropExpressionData //88 bytes, Key:1355135810
{
public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4
public uint pedPropID { get; set; } //8 8: UnsignedInt: 0: pedPropID
public int pedPropVarIndex { get; set; } //12 12: SignedInt: 0: pedPropVarIndex
public uint pedPropExpressionIndex { get; set; } //16 16: UnsignedInt: 0: pedPropExpressionIndex
public uint Unused2 { get; set; }//20
public Array_byte tracks { get; set; } //24 24: Array: 0: tracks {0: UnsignedByte: 0: 256}
public Array_ushort ids { get; set; } //40 40: Array: 0: ids {0: UnsignedShort: 0: 256}
public Array_byte types { get; set; } //56 56: Array: 0: types {0: UnsignedByte: 0: 256}
public Array_byte components { get; set; } //72 72: Array: 0: components {0: UnsignedByte: 0: 256}
}
public struct CPedCompExpressionData //88 bytes, Key:3458164745
{
public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4
public uint pedCompID { get; set; } //8 8: UnsignedInt: 0: pedCompID
public int pedCompVarIndex { get; set; } //12 12: SignedInt: 0: pedCompVarIndex
public uint pedCompExpressionIndex { get; set; } //16 16: UnsignedInt: 0: pedCompExpressionIndex
public uint Unused2 { get; set; }//20
public Array_byte tracks { get; set; } //24 24: Array: 0: tracks {0: UnsignedByte: 0: 256}
public Array_ushort ids { get; set; } //40 40: Array: 0: ids {0: UnsignedShort: 0: 256}
public Array_byte types { get; set; } //56 56: Array: 0: types {0: UnsignedByte: 0: 256}
public Array_byte components { get; set; } //72 72: Array: 0: components {0: UnsignedByte: 0: 256}
}
[TC(typeof(EXP))] public struct CLightAttrDef //160 bytes, Key:2363260268
{
public uint Unused00 { get; set; }//0
public uint Unused01 { get; set; }//4
public Vector3 posn { get; set; } //8 8: ArrayOfBytes: 3: posn //actually ArrayOfFloats3 (Vector3!)
public ArrayOfBytes3 colour { get; set; } //20 20: ArrayOfBytes: 3: colour
public byte flashiness { get; set; } //23 23: UnsignedByte: 0: 3829693202
public float intensity { get; set; } //24 24: Float: 0: intensity
public uint flags { get; set; } //28 28: UnsignedInt: 0: flags
public short boneTag { get; set; } //32 32: SignedShort: 0: boneTag
public byte lightType { get; set; } //34 34: UnsignedByte: 0: 482065968
public byte groupId { get; set; } //35 35: UnsignedByte: 0: 2501631252
public uint timeFlags { get; set; } //36 36: UnsignedInt: 0: timeFlags//2248791340
public float falloff { get; set; } //40 40: Float: 0: falloff
public float falloffExponent { get; set; } //44 44: Float: 0: falloffExponent
public Vector4 cullingPlane { get; set; } //48 48: ArrayOfBytes: 4: 1689591312 //48: 1689591312//cullingPlane - actually ArrayOfFloats4!
public byte shadowBlur { get; set; } //64 64: UnsignedByte: 0: shadowBlur
public byte padding1 { get; set; } //65 65: UnsignedByte: 0: padding1//3180641850
public short padding2 { get; set; } //66 66: SignedShort: 0: padding2//2346113727
public uint padding3 { get; set; } //68 68: UnsignedInt: 0: padding3//3521603295
public float volIntensity { get; set; } //72 72: Float: 0: volIntensity//689780512
public float volSizeScale { get; set; } //76 76: Float: 0: volSizeScale//2029533327
public ArrayOfBytes3 volOuterColour { get; set; } //80 80: ArrayOfBytes: 3: volOuterColour//2283994062
public byte lightHash { get; set; } //83 83: UnsignedByte: 0: lightHash//643049222
public float volOuterIntensity { get; set; } //84 84: Float: 0: volOuterIntensity//3008198647
public float coronaSize { get; set; } //88 88: Float: 0: coronaSize//1705000075
public float volOuterExponent { get; set; } //92 92: Float: 0: volOuterExponent//2758849250
public byte lightFadeDistance { get; set; } //96 96: UnsignedByte: 0: lightFadeDistance//1307926275
public byte shadowFadeDistance { get; set; } //97 97: UnsignedByte: 0: shadowFadeDistance//1944267876
public byte specularFadeDistance { get; set; } //98 98: UnsignedByte: 0: specularFadeDistance//4150887048
public byte volumetricFadeDistance { get; set; } //99 99: UnsignedByte: 0: volumetricFadeDistance//2066998816
public float shadowNearClip { get; set; } //100 100: Float: 0: shadowNearClip//954647178
public float coronaIntensity { get; set; } //104 104: Float: 0: coronaIntensity//2292363771
public float coronaZBias { get; set; } //108 108: Float: 0: coronaZBias//2520359283
public Vector3 direction { get; set; } //112 112: ArrayOfBytes: 3: direction //actually ArrayOfFloats3 (Vector3!)
public Vector3 tangent { get; set; } //124 124: ArrayOfBytes: 3: tangent //actually ArrayOfFloats3 (Vector3!)
public float coneInnerAngle { get; set; } //136 136: Float: 0: coneInnerAngle//1163671864
public float coneOuterAngle { get; set; } //140 140: Float: 0: coneOuterAngle//4175029060
public Vector3 extents { get; set; } //144 144: ArrayOfBytes: 3: extents//759134656 //actually ArrayOfFloats3 (Vector3!)
public uint projectedTextureKey { get; set; } //156 156: UnsignedInt: 0: projectedTextureKey//1076718994
}
[TC(typeof(EXP))] public struct CCarGen //80 bytes, Key:2345238261
{
public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4
public uint Unused2 { get; set; }//8
public uint Unused3 { get; set; }//12
public Vector3 position { get; set; } //16 16: Float_XYZ: 0: position
public float Unused4 { get; set; }//28
public float orientX { get; set; } //32 32: Float: 0: orientX=735213009
public float orientY { get; set; } //36 36: Float: 0: orientY=979440342
public float perpendicularLength { get; set; } //40 40: Float: 0: perpendicularLength=124715667
public MetaHash carModel { get; set; } //44 44: Hash: 0: carModel
public uint flags { get; set; } //48 48: UnsignedInt: 0: flags /// _CP_: looks like flag 1879051873 in cargens forces to spawn a vehicle
public int bodyColorRemap1 { get; set; } //52 52: SignedInt: 0: bodyColorRemap1=1429703670
public int bodyColorRemap2 { get; set; } //56 56: SignedInt: 0: bodyColorRemap2=1254848286
public int bodyColorRemap3 { get; set; } //60 60: SignedInt: 0: bodyColorRemap3=1880965569
public int bodyColorRemap4 { get; set; } //64 64: SignedInt: 0: bodyColorRemap4=1719152247
public MetaHash popGroup { get; set; } //68 68: Hash: 0: popGroup=911358791
public sbyte livery { get; set; } //72 72: SignedByte: 0: livery
public byte Unused5 { get; set; }//73
public ushort Unused6 { get; set; }//74
public uint Unused7 { get; set; }//76
public override string ToString()
{
return carModel.ToString() + ", " + position.ToString() + ", " + popGroup.ToString() + ", " + livery.ToString();
}
}
[TC(typeof(EXP))] public struct Unk_1701774085 //96 bytes, Key:2859775340 //dexy: cloth CollisionData (child of rage__phVerletClothCustomBounds) ... eg josh house // Tom: explosions?
{
public CharPointer OwnerName { get; set; } //0 0: CharPointer: 0: OwnerName
public Vector4 Rotation { get; set; } //16 16: Float_XYZW: 0: Rotation
public Vector3 Position { get; set; } //32 32: Float_XYZ: 0: Position
public float Unused0 { get; set; }//44
public Vector3 Normal { get; set; } //48 48: Float_XYZ: 0: Normal
public float Unused1 { get; set; }//60
public float CapsuleRadius { get; set; } //64 64: Float: 0: CapsuleRadius
public float CapsuleLen { get; set; } //68 68: Float: 0: CapsuleLen
public float CapsuleHalfHeight { get; set; } //72 72: Float: 0: CapsuleHalfHeight
public float CapsuleHalfWidth { get; set; } //76 76: Float: 0: CapsuleHalfWidth
public Unk_3044470860 Flags { get; set; } //80 80: IntFlags2: 3044470860: Flags
public uint Unused2 { get; set; }//84
public uint Unused3 { get; set; }//88
public uint Unused4 { get; set; }//92
}
[TC(typeof(EXP))] public class MUnk_1701774085 : MetaWrapper
{
public Unk_1701774085 _Data;
public Unk_1701774085 Data { get { return _Data; } }
public string OwnerName { get; set; }
public MUnk_1701774085() { }
public MUnk_1701774085(Meta meta, Unk_1701774085 s)
{
_Data = s;
OwnerName = MetaTypes.GetString(meta, _Data.OwnerName);
}
public override void Load(Meta meta, MetaPOINTER ptr)
{
_Data = MetaTypes.GetData<Unk_1701774085>(meta, ptr);
OwnerName = MetaTypes.GetString(meta, _Data.OwnerName);
}
public override MetaPOINTER Save(MetaBuilder mb)
{
if (OwnerName != null)
{
_Data.OwnerName = mb.AddStringPtr(OwnerName);
}
mb.AddEnumInfo((MetaName)3044470860);
mb.AddStructureInfo((MetaName)1701774085/*.SectionUNKNOWN1*/);
return mb.AddItemPtr((MetaName)1701774085/*.SectionUNKNOWN1*/, _Data);
}
public override string ToString()
{
return "Unk_1701774085 - " + OwnerName;
}
}
[TC(typeof(EXP))] public struct CCompositeEntityType //304 bytes, Key:659539004 dex: composite entity type - ytyp // Tom: des_ destruction
{
public ArrayOfChars64 Name { get; set; } //0 0: ArrayOfChars: 64: Name
public float lodDist { get; set; } //64 64: Float: 0: lodDist
public uint flags { get; set; } //68 68: UnsignedInt: 0: flags
public uint specialAttribute { get; set; } //72 72: UnsignedInt: 0: specialAttribute
public uint Unused0 { get; set; }//76
public Vector3 bbMin { get; set; } //80 80: Float_XYZ: 0: bbMin
public float Unused1 { get; set; }//92
public Vector3 bbMax { get; set; } //96 96: Float_XYZ: 0: bbMax
public float Unused2 { get; set; }//108
public Vector3 bsCentre { get; set; } //112 112: Float_XYZ: 0: bsCentre
public float Unused3 { get; set; }//124
public float bsRadius { get; set; } //128 128: Float: 0: bsRadius
public uint Unused4 { get; set; }//132
public ArrayOfChars64 StartModel { get; set; } //136 136: ArrayOfChars: 64: StartModel
public ArrayOfChars64 EndModel { get; set; } //200 200: ArrayOfChars: 64: EndModel
public MetaHash StartImapFile { get; set; } //264 264: Hash: 0: StartImapFile//2462971690
public MetaHash EndImapFile { get; set; } //268 268: Hash: 0: EndImapFile//2059586669
public MetaHash PtFxAssetName { get; set; } //272 272: Hash: 0: PtFxAssetName//2497993358
public uint Unused5 { get; set; }//276
public Array_Structure Animations { get; set; } //280 280: Array: 0: Animations {0: Structure: 1980345114: 256}
public uint Unused6 { get; set; }//296
public uint Unused7 { get; set; }//300
public override string ToString()
{
return Name.ToString() + ", " + StartModel.ToString() + ", " + EndModel.ToString() + ", " +
StartImapFile.ToString() + ", " + EndImapFile.ToString() + ", " + PtFxAssetName.ToString();
}
}
[TC(typeof(EXP))] public struct Unk_1980345114 //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
public ArrayOfChars64 AnimatedModel { get; set; } //128 128: ArrayOfChars: 64: AnimatedModel
public float punchInPhase { get; set; } //192 192: Float: 0: punchInPhase//3142377407
public float punchOutPhase { get; set; } //196 196: Float: 0: punchOutPhase//2164219370
public Array_Structure effectsData { get; set; } //200 200: Array: 0: effectsData {0: Structure: 3430328684: 256}
}
[TC(typeof(EXP))] public struct Unk_2741784237 //64 bytes, Key:1172796107 //occludeModels
{
public Vector3 bmin { get; set; } //0 0: Float_XYZ: 0: bmin
public float Unused0 { get; set; }//12
public Vector3 bmax { get; set; } //16 16: Float_XYZ: 0: bmax
public float Unused1 { get; set; }//28
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 uint flags { get; set; } //52 52: UnsignedInt: 0: flags
public uint Unused3 { get; set; }//56
public uint Unused4 { get; set; }//60
}
[TC(typeof(EXP))] public struct Unk_975711773 //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
public short iCenterZ { get; set; } //4 4: SignedShort: 0: 1597508449
public short iCosZ { get; set; } //6 6: SignedShort: 0: iCosZ
public short iLength { get; set; } //8 8: SignedShort: 0: 2854610661
public short iWidth { get; set; } //10 10: SignedShort: 0: 168013536
public short iHeight { get; set; } //12 12: SignedShort: 0: 3485277993
public short iSinZ { get; set; } //14 14: SignedShort: 0: iSinZ
}
[TC(typeof(EXP))] public struct Unk_3430328684 //160 bytes, Key:1724963966 //destruction animation effects
{
public uint fxType { get; set; } //0 0: UnsignedInt: 0: fxType
public uint Unused0 { get; set; }//4
public uint Unused1 { get; set; }//8
public uint Unused2 { get; set; }//12
public Vector3 fxOffsetPos { get; set; } //16 16: Float_XYZ: 0: fxOffsetPos
public float Unused3 { get; set; }//28
public Vector4 fxOffsetRot { get; set; } //32 32: Float_XYZW: 0: fxOffsetRot
public uint boneTag { get; set; } //48 48: UnsignedInt: 0: boneTag
public float startPhase { get; set; } //52 52: Float: 0: startPhase
public float endPhase { get; set; } //56 56: Float: 0: endPhase
public byte ptFxIsTriggered { get; set; } //60 60: Boolean: 0: ptFxIsTriggered
public ArrayOfChars64 ptFxTag { get; set; } //61 61: ArrayOfChars: 64: ptFxTag
public byte Unused4 { get; set; }//125
public ushort Unused5 { get; set; }//126
public float ptFxScale { get; set; } //128 128: Float: 0: ptFxScale
public float ptFxProbability { get; set; } //132 132: Float: 0: ptFxProbability
public byte ptFxHasTint { get; set; } //136 136: Boolean: 0: ptFxHasTint
public byte ptFxTintR { get; set; } //137 137: UnsignedByte: 0: ptFxTintR
public byte ptFxTintG { get; set; } //138 138: UnsignedByte: 0: ptFxTintG
public byte ptFxTintB { get; set; } //139 139: UnsignedByte: 0: ptFxTintB
public uint Unused6 { get; set; }//140
public Vector3 ptFxSize { get; set; } //144 144: Float_XYZ: 0: ptFxSize
public uint Unused7 { get; set; }//156
}
[TC(typeof(EXP))] public struct CExtensionDefParticleEffect //96 bytes, Key:466596385
{
public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4
public MetaHash name { get; set; } //8 8: Hash: 0: name
public uint Unused2 { get; set; }//12
public Vector3 offsetPosition { get; set; } //16 16: Float_XYZ: 0: offsetPosition
public uint Unused3 { get; set; }//28
public Vector4 offsetRotation { get; set; } //32 32: Float_XYZW: 0: offsetRotation
public CharPointer fxName { get; set; } //48 48: CharPointer: 0: fxName
public int fxType { get; set; } //64 64: SignedInt: 0: fxType
public int boneTag { get; set; } //68 68: SignedInt: 0: boneTag
public float scale { get; set; } //72 72: Float: 0: scale
public int probability { get; set; } //76 76: SignedInt: 0: probability
public int flags { get; set; } //80 80: SignedInt: 0: flags
public uint color { get; set; } //84 84: UnsignedInt: 0: color
public uint Unused4 { get; set; }//88
public uint Unused5 { get; set; }//92
public override string ToString()
{
return "CExtensionDefParticleEffect - " + name.ToString();
}
}
[TC(typeof(EXP))] public class MCExtensionDefParticleEffect : MetaWrapper
{
public CExtensionDefParticleEffect _Data;
public CExtensionDefParticleEffect Data { get { return _Data; } }
public string fxName { get; set; }
public override void Load(Meta meta, MetaPOINTER ptr)
{
_Data = MetaTypes.GetData<CExtensionDefParticleEffect>(meta, ptr);
fxName = MetaTypes.GetString(meta, _Data.fxName);
}
public override MetaPOINTER Save(MetaBuilder mb)
{
if (fxName != null)
{
_Data.fxName = mb.AddStringPtr(fxName);
}
mb.AddStructureInfo(MetaName.CExtensionDefParticleEffect);
return mb.AddItemPtr(MetaName.CExtensionDefParticleEffect, _Data);
}
public override string Name
{
get
{
return fxName;
}
}
public override string ToString()
{
return _Data.ToString() + " - " + fxName;
}
}
[TC(typeof(EXP))] public struct CExtensionDefLightEffect //48 bytes, Key:2436199897
{
public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4
public MetaHash name { get; set; } //8 8: Hash: 0: name
public uint Unused2 { get; set; }//12
public Vector3 offsetPosition { get; set; } //16 16: Float_XYZ: 0: offsetPosition
public float Unused3 { get; set; }//28
public Array_Structure instances { get; set; } //32 32: Array: 0: 274177522 {0: Structure: CLightAttrDef: 256}
public override string ToString()
{
return "CExtensionDefLightEffect - " + name.ToString();
}
}
[TC(typeof(EXP))] public class MCExtensionDefLightEffect : MetaWrapper
{
public CExtensionDefLightEffect _Data;
public CExtensionDefLightEffect Data { get { return _Data; } }
public CLightAttrDef[] instances { get; set; }
public override void Load(Meta meta, MetaPOINTER ptr)
{
_Data = MetaTypes.GetData<CExtensionDefLightEffect>(meta, ptr);
instances = MetaTypes.ConvertDataArray<CLightAttrDef>(meta, MetaName.CLightAttrDef, _Data.instances);
}
public override MetaPOINTER Save(MetaBuilder mb)
{
if (instances != null)
{
_Data.instances = mb.AddItemArrayPtr(MetaName.CLightAttrDef, instances);
}
mb.AddStructureInfo(MetaName.CLightAttrDef);
mb.AddStructureInfo(MetaName.CExtensionDefLightEffect);
return mb.AddItemPtr(MetaName.CExtensionDefLightEffect, _Data);
}
public override string Name
{
get
{
return _Data.name.ToString();
}
}
public override string ToString()
{
return _Data.ToString() + " (" + (instances?.Length ?? 0).ToString() + " Attributes)";
}
}
[TC(typeof(EXP))] public struct CExtensionDefAudioCollisionSettings //48 bytes, Key:2701897500
{
public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4
public MetaHash name { get; set; } //8 8: Hash: 0: name
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 settings { get; set; } //32 32: Hash: 0: settings
public uint Unused4 { get; set; }//36
public uint Unused5 { get; set; }//40
public uint Unused6 { get; set; }//44
public override string ToString()
{
return "CExtensionDefAudioCollisionSettings - " + name.ToString();
}
}
[TC(typeof(EXP))] public class MCExtensionDefAudioCollisionSettings : MetaWrapper
{
public CExtensionDefAudioCollisionSettings _Data;
public CExtensionDefAudioCollisionSettings Data { get { return _Data; } }
public override void Load(Meta meta, MetaPOINTER ptr)
{
_Data = MetaTypes.GetData<CExtensionDefAudioCollisionSettings>(meta, ptr);
}
public override MetaPOINTER Save(MetaBuilder mb)
{
mb.AddStructureInfo(MetaName.CExtensionDefAudioCollisionSettings);
return mb.AddItemPtr(MetaName.CExtensionDefAudioCollisionSettings, _Data);
}
public override string Name
{
get
{
return _Data.name.ToString();
}
}
public override string ToString()
{
return _Data.ToString();
}
}
[TC(typeof(EXP))] public struct CExtensionDefAudioEmitter //64 bytes, Key:15929839
{
public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4
public MetaHash name { get; set; } //8 8: Hash: 0: name
public uint Unused2 { get; set; }//12
public Vector3 offsetPosition { get; set; } //16 16: Float_XYZ: 0: offsetPosition
public float Unused3 { get; set; }//28
public Vector4 offsetRotation { get; set; } //32 32: Float_XYZW: 0: offsetRotation
public MetaHash effectHash { get; set; } //48 48: UnsignedInt: 0: effectHash//2982223448
public uint Unused4 { get; set; }//52
public uint Unused5 { get; set; }//56
public uint Unused6 { get; set; }//60
public override string ToString()
{
return "CExtensionDefAudioEmitter - " + name.ToString() + ": " + effectHash.ToString() + ": " + offsetPosition.ToString();
}
}
[TC(typeof(EXP))] public class MCExtensionDefAudioEmitter : MetaWrapper
{
public CExtensionDefAudioEmitter _Data;
public CExtensionDefAudioEmitter Data { get { return _Data; } }
public override void Load(Meta meta, MetaPOINTER ptr)
{
_Data = MetaTypes.GetData<CExtensionDefAudioEmitter>(meta, ptr);
}
public override MetaPOINTER Save(MetaBuilder mb)
{
mb.AddStructureInfo(MetaName.CExtensionDefAudioEmitter);
return mb.AddItemPtr(MetaName.CExtensionDefAudioEmitter, _Data);
}
public override string Name
{
get
{
return _Data.name.ToString();
}
}
public override string ToString()
{
return _Data.ToString();
}
}
[TC(typeof(EXP))] public struct CExtensionDefExplosionEffect //80 bytes, Key:2840366784
{
public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4
public MetaHash name { get; set; } //8 8: Hash: 0: name
public uint Unused2 { get; set; }//12
public Vector3 offsetPosition { get; set; } //16 16: Float_XYZ: 0: offsetPosition
public float Unused3 { get; set; }//28
public Vector4 offsetRotation { get; set; } //32 32: Float_XYZW: 0: offsetRotation
public CharPointer explosionName { get; set; } //48 48: CharPointer: 0: explosionName//3301388915
public int boneTag { get; set; } //64 64: SignedInt: 0: boneTag
public int explosionTag { get; set; } //68 68: SignedInt: 0: explosionTag//2653034051
public int explosionType { get; set; } //72 72: SignedInt: 0: explosionType//3379115010
public uint flags { get; set; } //76 76: UnsignedInt: 0: flags
public override string ToString()
{
return "CExtensionDefExplosionEffect - " + name.ToString();
}
}
[TC(typeof(EXP))] public class MCExtensionDefExplosionEffect : MetaWrapper
{
public CExtensionDefExplosionEffect _Data;
public CExtensionDefExplosionEffect Data { get { return _Data; } }
public string explosionName { get; set; }
public override void Load(Meta meta, MetaPOINTER ptr)
{
_Data = MetaTypes.GetData<CExtensionDefExplosionEffect>(meta, ptr);
explosionName = MetaTypes.GetString(meta, _Data.explosionName);
}
public override MetaPOINTER Save(MetaBuilder mb)
{
if (explosionName != null)
{
_Data.explosionName = mb.AddStringPtr(explosionName);
}
mb.AddStructureInfo(MetaName.CExtensionDefExplosionEffect);
return mb.AddItemPtr(MetaName.CExtensionDefExplosionEffect, _Data);
}
public override string Name
{
get
{
return _Data.name.ToString();
}
}
public override string ToString()
{
return _Data.ToString() + " - " + explosionName;
}
}
[TC(typeof(EXP))] public struct CExtensionDefLadder //96 bytes, Key:1978210597
{
public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4
public MetaHash name { get; set; } //8 8: Hash: 0: name
public uint Unused2 { get; set; }//12
public Vector3 offsetPosition { get; set; } //16 16: Float_XYZ: 0: offsetPosition
public float Unused3 { get; set; }//28
public Vector3 bottom { get; set; } //32 32: Float_XYZ: 0: bottom
public float Unused4 { get; set; }//44
public Vector3 top { get; set; } //48 48: Float_XYZ: 0: top
public float Unused5 { get; set; }//60
public Vector3 normal { get; set; } //64 64: Float_XYZ: 0: normal
public float Unused6 { get; set; }//76
public Unk_1294270217 materialType { get; set; } //80 80: IntEnum: 1294270217: materialType//932754174
public MetaHash template { get; set; } //84 84: Hash: 0: template
public byte canGetOffAtTop { get; set; } //88 88: Boolean: 0: canGetOffAtTop//564839673
public byte canGetOffAtBottom { get; set; } //89 89: Boolean: 0: canGetOffAtBottom//923729576
public ushort Unused7 { get; set; }//90
public uint Unused8 { get; set; }//92
public override string ToString()
{
return "CExtensionDefLadder - " + name.ToString();
}
}
[TC(typeof(EXP))] public class MCExtensionDefLadder : MetaWrapper
{
public CExtensionDefLadder _Data;
public CExtensionDefLadder Data { get { return _Data; } }
public override void Load(Meta meta, MetaPOINTER ptr)
{
_Data = MetaTypes.GetData<CExtensionDefLadder>(meta, ptr);
}
public override MetaPOINTER Save(MetaBuilder mb)
{
mb.AddEnumInfo((MetaName)1294270217);
mb.AddStructureInfo(MetaName.CExtensionDefLadder);
return mb.AddItemPtr(MetaName.CExtensionDefLadder, _Data);
}
public override string Name
{
get
{
return _Data.name.ToString();
}
}
public override string ToString()
{
return _Data.ToString();
}
}
[TC(typeof(EXP))] public struct CExtensionDefBuoyancy //32 bytes, Key:2383039928
{
public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4
public MetaHash name { get; set; } //8 8: Hash: 0: name
public uint Unused2 { get; set; }//12
public Vector3 offsetPosition { get; set; } //16 16: Float_XYZ: 0: offsetPosition
public float Unused3 { get; set; }//28
public override string ToString()
{
return "CExtensionDefBuoyancy - " + name.ToString();
}
}
[TC(typeof(EXP))] public class MCExtensionDefBuoyancy : MetaWrapper
{
public CExtensionDefBuoyancy _Data;
public CExtensionDefBuoyancy Data { get { return _Data; } }
public override void Load(Meta meta, MetaPOINTER ptr)
{
_Data = MetaTypes.GetData<CExtensionDefBuoyancy>(meta, ptr);
}
public override MetaPOINTER Save(MetaBuilder mb)
{
mb.AddStructureInfo(MetaName.CExtensionDefBuoyancy);
return mb.AddItemPtr(MetaName.CExtensionDefBuoyancy, _Data);
}
public override string Name
{
get
{
return _Data.name.ToString();
}
}
public override string ToString()
{
return _Data.ToString();
}
}
[TC(typeof(EXP))] public struct CExtensionDefExpression //48 bytes, Key:24441706
{
public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4
public MetaHash name { get; set; } //8 8: Hash: 0: name
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 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 byte Unused4 { get; set; }//45
public ushort Unused5 { get; set; }//46
public override string ToString()
{
return "CExtensionDefExpression - " + name.ToString();
}
}
[TC(typeof(EXP))] public class MCExtensionDefExpression : MetaWrapper
{
public CExtensionDefExpression _Data;
public CExtensionDefExpression Data { get { return _Data; } }
public override void Load(Meta meta, MetaPOINTER ptr)
{
_Data = MetaTypes.GetData<CExtensionDefExpression>(meta, ptr);
}
public override MetaPOINTER Save(MetaBuilder mb)
{
mb.AddStructureInfo(MetaName.CExtensionDefExpression);
return mb.AddItemPtr(MetaName.CExtensionDefExpression, _Data);
}
public override string Name
{
get
{
return _Data.name.ToString();
}
}
public override string ToString()
{
return _Data.ToString();
}
}
[TC(typeof(EXP))] public struct CExtensionDefLightShaft //176 bytes, Key:2526429398
{
public uint Unused00 { get; set; }//0
public uint Unused01 { get; set; }//4
public MetaHash name { get; set; } //8 8: Hash: 0: name
public uint Unused02 { get; set; }//12
public Vector3 offsetPosition { get; set; } //16 16: Float_XYZ: 0: offsetPosition
public float Unused03 { get; set; }//28
public Vector3 cornerA { get; set; } //32 32: Float_XYZ: 0: 3302595027
public float Unused04 { get; set; }//44
public Vector3 cornerB { get; set; } //48 48: Float_XYZ: 0: 2393877884
public float Unused05 { get; set; }//60
public Vector3 cornerC { get; set; } //64 64: Float_XYZ: 0: 2692731164
public float Unused06 { get; set; }//76
public Vector3 cornerD { get; set; } //80 80: Float_XYZ: 0: 4250372814
public float Unused07 { get; set; }//92
public Vector3 direction { get; set; } //96 96: Float_XYZ: 0: direction
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 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
public byte Unused09 { get; set; }//153
public ushort Unused10 { get; set; }//154
public uint flags { get; set; } //156 156: UnsignedInt: 0: flags
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 Unused11 { get; set; }//173
public ushort Unused12 { get; set; }//174
public override string ToString()
{
return "CExtensionDefLightShaft - " + name.ToString();
}
}
[TC(typeof(EXP))] public class MCExtensionDefLightShaft : MetaWrapper
{
public CExtensionDefLightShaft _Data;
public CExtensionDefLightShaft Data { get { return _Data; } }
public override void Load(Meta meta, MetaPOINTER ptr)
{
_Data = MetaTypes.GetData<CExtensionDefLightShaft>(meta, ptr);
}
public override MetaPOINTER Save(MetaBuilder mb)
{
mb.AddEnumInfo((MetaName)1931949281);
mb.AddEnumInfo((MetaName)2266515059);
mb.AddStructureInfo(MetaName.CExtensionDefLightShaft);
return mb.AddItemPtr(MetaName.CExtensionDefLightShaft, _Data);
}
public override string Name
{
get
{
return _Data.name.ToString();
}
}
public override string ToString()
{
return _Data.ToString();
}
}
[TC(typeof(EXP))] public struct CExtensionDefDoor //48 bytes, Key:2671601385
{
public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4
public MetaHash name { get; set; } //8 8: Hash: 0: name
public uint Unused2 { get; set; }//12
public Vector3 offsetPosition { get; set; } //16 16: Float_XYZ: 0: offsetPosition
public float Unused3 { get; set; }//28
public byte enableLimitAngle { get; set; } //32 32: Boolean: 0: enableLimitAngle=1979299226
public byte startsLocked { get; set; } //33 33: Boolean: 0: startsLocked=3204572347
public byte canBreak { get; set; } //34 34: Boolean: 0: canBreak=2756786344
public byte Unused4 { get; set; }//35
public float limitAngle { get; set; } //36 36: Float: 0: limitAngle
public float doorTargetRatio { get; set; } //40 40: Float: 0: doorTargetRatio=770433283
public MetaHash audioHash { get; set; } //44 44: Hash: 0: audioHash=224069936
public override string ToString()
{
return "CExtensionDefDoor - " + name.ToString() + ", " + audioHash.ToString() + ", " + offsetPosition.ToString() + ", " + limitAngle.ToString();
}
}
[TC(typeof(EXP))] public class MCExtensionDefDoor : MetaWrapper
{
public CExtensionDefDoor _Data;
public CExtensionDefDoor Data { get { return _Data; } }
public override void Load(Meta meta, MetaPOINTER ptr)
{
_Data = MetaTypes.GetData<CExtensionDefDoor>(meta, ptr);
}
public override MetaPOINTER Save(MetaBuilder mb)
{
mb.AddStructureInfo(MetaName.CExtensionDefDoor);
return mb.AddItemPtr(MetaName.CExtensionDefDoor, _Data);
}
public override string Name
{
get
{
return _Data.name.ToString();
}
}
public override string ToString()
{
return _Data.ToString();
}
}
[TC(typeof(EXP))] public struct CExtensionDefSpawnPoint //96 bytes, Key:3077340721
{
public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4
public MetaHash name { get; set; } //8 8: Hash: 0: name
public uint Unused2 { get; set; }//12
public Vector3 offsetPosition { get; set; } //16 16: Float_XYZ: 0: offsetPosition
public float Unused3 { get; set; }//28
public Vector4 offsetRotation { get; set; } //32 32: Float_XYZW: 0: offsetRotation
public MetaHash spawnType { get; set; } //48 48: Hash: 0: spawnType
public MetaHash pedType { get; set; } //52 52: Hash: 0: pedType
public MetaHash group { get; set; } //56 56: Hash: 0: group
public MetaHash interior { get; set; } //60 60: Hash: 0: interior
public MetaHash requiredImap { get; set; } //64 64: Hash: 0: requiredImap
public Unk_3573596290 availableInMpSp { get; set; } //68 68: IntEnum: 3573596290: availableInMpSp
public float probability { get; set; } //72 72: Float: 0: probability
public float timeTillPedLeaves { get; set; } //76 76: Float: 0: timeTillPedLeaves
public float radius { get; set; } //80 80: Float: 0: radius
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 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
public byte Unused5 { get; set; }//95
public override string ToString()
{
return spawnType.ToString() + ": " + name.ToString() + ", " + pedType.ToString();// + ", " + flags.ToString() + ", " + offsetPosition.ToString();
}
}
[TC(typeof(EXP))] public class MCExtensionDefSpawnPoint : MetaWrapper
{
[TC(typeof(EXP))] public object Parent { get; set; }
public MCScenarioPointRegion ScenarioRegion { get; private set; }
public CExtensionDefSpawnPoint _Data;
public CExtensionDefSpawnPoint Data { get { return _Data; } }
public Vector3 ParentPosition { get; set; } = Vector3.Zero;
public Vector3 OffsetPosition { get { return _Data.offsetPosition; } set { _Data.offsetPosition = value; } }
public Vector4 OffsetRotation { get { return _Data.offsetRotation; } set { _Data.offsetRotation = value; } }
public MetaHash NameHash { get { return _Data.name; } set { _Data.name = value; } }
public MetaHash SpawnType { get { return _Data.spawnType; } set { _Data.spawnType = value; } }
public MetaHash PedType { get { return _Data.pedType; } set { _Data.pedType = value; } }
public MetaHash Group { get { return _Data.group; } set { _Data.group = value; } }
public MetaHash Interior { get { return _Data.interior; } set { _Data.interior = value; } }
public MetaHash RequiredImap { get { return _Data.requiredImap; } set { _Data.requiredImap = value; } }
public Unk_3573596290 AvailableInMpSp { get { return _Data.availableInMpSp; } set { _Data.availableInMpSp = value; } }
public float Probability { get { return _Data.probability; } set { _Data.probability = value; } }
public float TimeTillPedLeaves { get { return _Data.timeTillPedLeaves; } set { _Data.timeTillPedLeaves = value; } }
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 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); } }
public Vector3 Position { get { return _Data.offsetPosition + ParentPosition; } set { _Data.offsetPosition = value - ParentPosition; } }
public Quaternion Orientation { get { return new Quaternion(_Data.offsetRotation); } set { _Data.offsetRotation = value.ToVector4(); } }
public MCExtensionDefSpawnPoint() { }
public MCExtensionDefSpawnPoint(MCScenarioPointRegion region, Meta meta, CExtensionDefSpawnPoint data, object parent)
{
ScenarioRegion = region;
Parent = parent;
_Data = data;
}
public MCExtensionDefSpawnPoint(MCScenarioPointRegion region, MCExtensionDefSpawnPoint copy)
{
ScenarioRegion = region;
if (copy != null)
{
_Data = copy.Data;
Parent = copy.Parent;
ParentPosition = copy.ParentPosition;
}
}
public override void Load(Meta meta, MetaPOINTER ptr)
{
_Data = MetaTypes.GetData<CExtensionDefSpawnPoint>(meta, ptr);
}
public override MetaPOINTER Save(MetaBuilder mb)
{
mb.AddEnumInfo((MetaName)3573596290);
mb.AddEnumInfo((MetaName)700327466);
mb.AddStructureInfo(MetaName.CExtensionDefSpawnPoint);
return mb.AddItemPtr(MetaName.CExtensionDefSpawnPoint, _Data);
}
public override string Name
{
get
{
return _Data.name.ToString();
}
}
public override string ToString()
{
return _Data.ToString();
}
}
[TC(typeof(EXP))] public struct CExtensionDefSpawnPointOverride //64 bytes, Key:2551875873
{
public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4
public MetaHash name { get; set; } //8 8: Hash: 0: name
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 ScenarioType { get; set; } //32 32: Hash: 0: ScenarioType
public byte iTimeStartOverride { get; set; } //36 36: UnsignedByte: 0: iTimeStartOverride//591476992
public byte iTimeEndOverride { get; set; } //37 37: UnsignedByte: 0: iTimeEndOverride//2688038523
public ushort Unused4 { get; set; }//38
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 float Radius { get; set; } //56 56: Float: 0: Radius
public float TimeTillPedLeaves { get; set; } //60 60: Float: 0: TimeTillPedLeaves//4073598194
public override string ToString()
{
return "CExtensionDefSpawnPointOverride - " + name.ToString();
}
}
[TC(typeof(EXP))] public class MCExtensionDefSpawnPointOverride : MetaWrapper
{
public CExtensionDefSpawnPointOverride _Data;
public CExtensionDefSpawnPointOverride Data { get { return _Data; } }
public override void Load(Meta meta, MetaPOINTER ptr)
{
_Data = MetaTypes.GetData<CExtensionDefSpawnPointOverride>(meta, ptr);
}
public override MetaPOINTER Save(MetaBuilder mb)
{
mb.AddEnumInfo((MetaName)3573596290);
mb.AddEnumInfo((MetaName)700327466);
mb.AddStructureInfo(MetaName.CExtensionDefSpawnPointOverride);
return mb.AddItemPtr(MetaName.CExtensionDefSpawnPointOverride, _Data);
}
public override string Name
{
get
{
return _Data.name.ToString();
}
}
public override string ToString()
{
return _Data.ToString();
}
}
[TC(typeof(EXP))] public struct CExtensionDefWindDisturbance //96 bytes, Key:3971538917
{
public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4
public MetaHash name { get; set; } //8 8: Hash: 0: name
public uint Unused2 { get; set; }//12
public Vector3 offsetPosition { get; set; } //16 16: Float_XYZ: 0: offsetPosition
public float Unused3 { get; set; }//28
public Vector4 offsetRotation { get; set; } //32 32: Float_XYZW: 0: offsetRotation
public int disturbanceType { get; set; } //48 48: SignedInt: 0: disturbanceType//3802708370
public int boneTag { get; set; } //52 52: SignedInt: 0: boneTag
public uint Unused4 { get; set; }//56
public uint Unused5 { get; set; }//60
public Vector4 size { get; set; } //64 64: Float_XYZW: 0: size
public float strength { get; set; } //80 80: Float: 0: strength
public int flags { get; set; } //84 84: SignedInt: 0: flags
public uint Unused6 { get; set; }//88
public uint Unused7 { get; set; }//92
public override string ToString()
{
return "CExtensionDefWindDisturbance - " + name.ToString();
}
}
[TC(typeof(EXP))] public class MCExtensionDefWindDisturbance : MetaWrapper
{
public CExtensionDefWindDisturbance _Data;
public CExtensionDefWindDisturbance Data { get { return _Data; } }
public override void Load(Meta meta, MetaPOINTER ptr)
{
_Data = MetaTypes.GetData<CExtensionDefWindDisturbance>(meta, ptr);
}
public override MetaPOINTER Save(MetaBuilder mb)
{
mb.AddStructureInfo(MetaName.CExtensionDefWindDisturbance);
return mb.AddItemPtr(MetaName.CExtensionDefWindDisturbance, _Data);
}
public override string Name
{
get
{
return _Data.name.ToString();
}
}
public override string ToString()
{
return _Data.ToString();
}
}
[TC(typeof(EXP))] public struct CExtensionDefProcObject //80 bytes, Key:3965391891
{
public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4
public MetaHash name { get; set; } //8 8: Hash: 0: name
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 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 uint flags { get; set; } //72 72: UnsignedInt: 0: flags
public uint Unused4 { get; set; }//76
public override string ToString()
{
return "CExtensionDefProcObject - " + name.ToString();
}
}
[TC(typeof(EXP))] public class MCExtensionDefProcObject : MetaWrapper
{
public CExtensionDefProcObject _Data;
public CExtensionDefProcObject Data { get { return _Data; } }
public override void Load(Meta meta, MetaPOINTER ptr)
{
_Data = MetaTypes.GetData<CExtensionDefProcObject>(meta, ptr);
}
public override MetaPOINTER Save(MetaBuilder mb)
{
mb.AddStructureInfo(MetaName.CExtensionDefProcObject);
return mb.AddItemPtr(MetaName.CExtensionDefProcObject, _Data);
}
public override string Name
{
get
{
return _Data.name.ToString();
}
}
public override string ToString()
{
return _Data.ToString();
}
}
[TC(typeof(EXP))] public struct CScenarioPointRegion //SCENARIO YMT ROOT - in /scenario/ folder //376 bytes, Key:3501351821
{
public int VersionNumber { get; set; } //0 0: SignedInt: 0: VersionNumber
public uint Unused0 { get; set; }//4
public CScenarioPointContainer Points { get; set; } //8 8: Structure: CScenarioPointContainer//2380938603: Points//702683191
public uint Unused1 { get; set; }//56
public uint Unused2 { get; set; }//60
public uint Unused3 { get; set; }//64
public uint Unused4 { get; set; }//68
public Array_Structure EntityOverrides { get; set; } //72 72: Array: 0: EntityOverrides//697469539 {0: Structure: CScenarioEntityOverride//4213733800: 256}
public uint Unused5 { get; set; }//88
public uint Unused6 { get; set; }//92
public Unk_4023740759 Unk_3696045377 { get; set; } //[PATHS] 96 96: Structure: 4023740759: 3696045377
public rage__spdGrid2D AccelGrid { get; set; } //184 184: Structure: rage__spdGrid2D: AccelGrid//3053155275
public Array_ushort Unk_3844724227 { get; set; } //248 248: Array: 0: 3844724227 {0: UnsignedShort: 0: 256}
public Array_Structure Clusters { get; set; } //264 264: Array: 0: Clusters//3587988394 {0: Structure: CScenarioPointCluster//750308016: 256}
public CScenarioPointLookUps LookUps { get; set; } //280 280: Structure: CScenarioPointLookUps//3019621867: LookUps//1097626284
}
[TC(typeof(EXP))] public class MCScenarioPointRegion : MetaWrapper
{
public YmtFile Ymt { get; set; }
public CScenarioPointRegion _Data;
public CScenarioPointRegion Data { get { return _Data; } }
public MCScenarioPointContainer Points { get; set; }
public MCScenarioEntityOverride[] EntityOverrides { get; set; }
public MUnk_4023740759 Paths { get; set; }
public ushort[] Unk_3844724227 { get; set; } //GRID DATA - 2d dimensions - AccelGrid ((MaxX-MinX)+1)*((MaxY-MinY)+1)
public MCScenarioPointCluster[] Clusters { get; set; }
public MCScenarioPointLookUps LookUps { get; set; }
public int VersionNumber { get { return _Data.VersionNumber; } set { _Data.VersionNumber = value; } }
public override void Load(Meta meta, MetaPOINTER ptr)
{
var data = MetaTypes.GetData<CScenarioPointRegion>(meta, ptr);
Load(meta, data);
}
public void Load(Meta meta, CScenarioPointRegion data)
{
_Data = data;
Points = new MCScenarioPointContainer(this, meta, _Data.Points);
var entOverrides = MetaTypes.ConvertDataArray<CScenarioEntityOverride>(meta, MetaName.CScenarioEntityOverride, _Data.EntityOverrides);
if (entOverrides != null)
{
EntityOverrides = new MCScenarioEntityOverride[entOverrides.Length];
for (int i = 0; i < entOverrides.Length; i++)
{
EntityOverrides[i] = new MCScenarioEntityOverride(this, meta, entOverrides[i]);
}
}
Paths = new MUnk_4023740759(this, meta, _Data.Unk_3696045377);
var clusters = MetaTypes.ConvertDataArray<CScenarioPointCluster>(meta, MetaName.CScenarioPointCluster, _Data.Clusters);
if (clusters != null)
{
Clusters = new MCScenarioPointCluster[clusters.Length];
for (int i = 0; i < clusters.Length; i++)
{
Clusters[i] = new MCScenarioPointCluster(this, meta, clusters[i]);
}
}
Unk_3844724227 = MetaTypes.GetUshortArray(meta, _Data.Unk_3844724227);
LookUps = new MCScenarioPointLookUps(this, meta, _Data.LookUps);
#region data analysis
////data analysis
//if (Points.LoadSavePoints != null)
//{ } //no hits here!
//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 len = Unk_3844724227.Length;
// var calclen = ((maxx - minx) + 1) * ((maxy - miny) + 1);
// if (len != calclen)
// { } //no hits here!
// int pointcount = 0;
// if (Points.MyPoints != null) pointcount += Points.MyPoints.Length;
// //if (Points.LoadSavePoints != null) pointcount += Points.LoadSavePoints.Length;//not necessary!
// int lastuval = 0;
// for (int i = 0; i < Unk_3844724227.Length; i++)
// {
// var uval = Unk_3844724227[i];
// var uval2 = uval & 0x7FFF;
// var uval3 = uval >> 15; //what does this bit mean?
// if (uval3 > 0)
// { }
// lastuval = uval2;
// if (uval2 > pointcount)
// { } //no hits here!
// }
// if (lastuval != pointcount)
// { } //no hits here!
//}
#endregion
}
public override MetaPOINTER Save(MetaBuilder mb)
{
var sprb = mb.EnsureBlock(MetaName.CScenarioPointRegion);
//var hashb = mb.EnsureBlock(MetaName.HASH);
//var ushb = mb.EnsureBlock(MetaName.USHORT);
//var pntb = mb.EnsureBlock(MetaName.CScenarioPoint);
mb.AddStructureInfo(MetaName.CScenarioPointContainer);
mb.AddStructureInfo((MetaName)4023740759);
mb.AddStructureInfo(MetaName.rage__spdGrid2D);
mb.AddStructureInfo(MetaName.CScenarioPointLookUps);
mb.AddStructureInfo(MetaName.CScenarioPointRegion);
if (Points != null)
{
var scp = new CScenarioPointContainer();
var loadSavePoints = Points.GetCLoadSavePoints();
if (loadSavePoints != null)//this never seems to be used...
{
mb.AddStructureInfo(MetaName.CExtensionDefSpawnPoint);
mb.AddEnumInfo((MetaName)3573596290);
mb.AddEnumInfo((MetaName)700327466);
scp.LoadSavePoints = mb.AddItemArrayPtr(MetaName.CExtensionDefSpawnPoint, loadSavePoints);
}
var myPoints = Points.GetCMyPoints();
if (myPoints != null)
{
mb.AddStructureInfo(MetaName.CScenarioPoint);
mb.AddEnumInfo((MetaName)700327466);
scp.MyPoints = mb.AddItemArrayPtr(MetaName.CScenarioPoint, myPoints);
}
_Data.Points = scp;
}
else
{
_Data.Points = new CScenarioPointContainer();
}
if ((EntityOverrides != null) && (EntityOverrides.Length > 0))
{
//mb.AddStructureInfo(MetaName.CScenarioEntityOverride); //will get added by MCScenarioEntityOverride
//mb.AddStructureInfo(MetaName.CExtensionDefSpawnPoint);
_Data.EntityOverrides = mb.AddWrapperArray(EntityOverrides);
}
else
{
_Data.EntityOverrides = new Array_Structure();
}
if (Paths != null)
{
var pd = new Unk_4023740759();
var nodes = Paths.GetCNodes();
if (nodes != null)
{
mb.AddStructureInfo(MetaName.CScenarioChainingNode);
pd.Nodes = mb.AddItemArrayPtr(MetaName.CScenarioChainingNode, nodes);
}
var edges = Paths.GetCEdges();
if (edges != null)
{
mb.AddStructureInfo(MetaName.CScenarioChainingEdge);
mb.AddEnumInfo((MetaName)3609807418);
mb.AddEnumInfo((MetaName)3971773454);
mb.AddEnumInfo((MetaName)941086046);
pd.Edges = mb.AddItemArrayPtr(MetaName.CScenarioChainingEdge, edges);
}
if (Paths.Chains != null)
{
foreach (var chain in Paths.Chains)
{
if (chain.EdgeIds != null)
{
chain._Data.EdgeIds = mb.AddUshortArrayPtr(chain.EdgeIds);
}
else
{
chain._Data.EdgeIds = new Array_ushort();
}
}
}
var chains = Paths.GetCChains();
if (chains != null)
{
mb.AddStructureInfo(MetaName.CScenarioChain);
pd.Chains = mb.AddItemArrayPtr(MetaName.CScenarioChain, chains);
}
_Data.Unk_3696045377 = pd;
}
else
{
_Data.Unk_3696045377 = new Unk_4023740759();
}
if ((Clusters != null) && (Clusters.Length > 0))
{
//mb.AddStructureInfo(MetaName.rage__spdSphere);
//mb.AddStructureInfo(MetaName.CScenarioPointCluster);
_Data.Clusters = mb.AddWrapperArray(Clusters);
}
else
{
_Data.Clusters = new Array_Structure();
}
if ((Unk_3844724227 != null) && (Unk_3844724227.Length > 0))
{
_Data.Unk_3844724227 = mb.AddUshortArrayPtr(Unk_3844724227);
}
else
{
_Data.Unk_3844724227 = new Array_ushort();
}
if (LookUps != null)
{
var spl = new CScenarioPointLookUps();
if ((LookUps.TypeNames != null) && (LookUps.TypeNames.Length > 0))
{
spl.TypeNames = mb.AddHashArrayPtr(LookUps.TypeNames);
}
if ((LookUps.PedModelSetNames != null) && (LookUps.PedModelSetNames.Length > 0))
{
spl.PedModelSetNames = mb.AddHashArrayPtr(LookUps.PedModelSetNames);
}
if ((LookUps.VehicleModelSetNames != null) && (LookUps.VehicleModelSetNames.Length > 0))
{
spl.VehicleModelSetNames = mb.AddHashArrayPtr(LookUps.VehicleModelSetNames);
}
if ((LookUps.GroupNames != null) && (LookUps.GroupNames.Length > 0))
{
spl.GroupNames = mb.AddHashArrayPtr(LookUps.GroupNames);
}
if ((LookUps.InteriorNames != null) && (LookUps.InteriorNames.Length > 0))
{
spl.InteriorNames = mb.AddHashArrayPtr(LookUps.InteriorNames);
}
if ((LookUps.RequiredIMapNames != null) && (LookUps.RequiredIMapNames.Length > 0))
{
spl.RequiredIMapNames = mb.AddHashArrayPtr(LookUps.RequiredIMapNames);
}
_Data.LookUps = spl;
}
else
{
_Data.LookUps = new CScenarioPointLookUps(); //this shouldn't happen...
}
return mb.AddItemPtr(MetaName.CScenarioPointRegion, _Data);
}
public void AddCluster(MCScenarioPointCluster cluster)
{
List<MCScenarioPointCluster> newclusters = new List<MCScenarioPointCluster>();
if (Clusters != null)
{
newclusters.AddRange(Clusters);
}
cluster.Region = this;
//cluster.ClusterIndex = newclusters.Count;
newclusters.Add(cluster);
Clusters = newclusters.ToArray();
}
public void AddEntity(MCScenarioEntityOverride ent)
{
List<MCScenarioEntityOverride> newents = new List<MCScenarioEntityOverride>();
if (EntityOverrides != null)
{
newents.AddRange(EntityOverrides);
}
ent.Region = this;
//ent.EntityIndex = newents.Count;
newents.Add(ent);
EntityOverrides = newents.ToArray();
}
public bool RemoveCluster(MCScenarioPointCluster cluster)
{
bool r = false;
if (Clusters != null)
{
List<MCScenarioPointCluster> newclusters = new List<MCScenarioPointCluster>();
foreach (var nc in Clusters)
{
if (nc == cluster)
{
r = true;
}
else
{
//nc.ClusterIndex = newclusters.Count;
newclusters.Add(nc);
}
}
if (r)
{
Clusters = newclusters.ToArray();
}
}
return r;
}
public bool RemoveEntity(MCScenarioEntityOverride ent)
{
bool r = false;
if (EntityOverrides != null)
{
List<MCScenarioEntityOverride> newents = new List<MCScenarioEntityOverride>();
foreach (var nc in EntityOverrides)
{
if (nc == ent)
{
r = true;
}
else
{
//nc.EntityIndex = newents.Count;
newents.Add(nc);
}
}
if (r)
{
EntityOverrides = newents.ToArray();
}
}
return r;
}
public override string Name
{
get
{
return Ymt?.ToString() ?? "CScenarioPointRegion";
}
}
public override string ToString()
{
return Name;
}
}
[TC(typeof(EXP))] public struct CScenarioPointContainer //SCENARIO Region Points arrays // 48 bytes, Key:2489654897
{
public Array_Structure LoadSavePoints { get; set; } //0 0: Array: 0: LoadSavePoints//3016741991 {0: Structure: CExtensionDefSpawnPoint: 256}
public Array_Structure MyPoints { get; set; } //16 16: Array: 0: MyPoints//1170781136 {0: Structure: CScenarioPoint//4103049490: 256}
public uint Unused0 { get; set; }//32
public uint Unused1 { get; set; }//36
public uint Unused2 { get; set; }//40
public uint Unused3 { get; set; }//44
public override string ToString()
{
return LoadSavePoints.Count1.ToString() + " LoadSavePoints, " + MyPoints.Count1.ToString() + " MyPoints";
}
}
[TC(typeof(EXP))] public class MCScenarioPointContainer : MetaWrapper
{
[TC(typeof(EXP))] public object Parent { get; set; }
public MCScenarioPointRegion Region { get; private set; }
public CScenarioPointContainer _Data;
public CScenarioPointContainer Data { get { return _Data; } set { _Data = value; } }
public MCExtensionDefSpawnPoint[] LoadSavePoints { get; set; }
public MCScenarioPoint[] MyPoints { get; set; }
public MCScenarioPointContainer() { }
public MCScenarioPointContainer(MCScenarioPointRegion region)
{
Region = region;
}
public MCScenarioPointContainer(MCScenarioPointRegion region, Meta meta, CScenarioPointContainer d)
{
Region = region;
_Data = d;
Init(meta);
}
public void Init(Meta meta)
{
var vLoadSavePoints = MetaTypes.ConvertDataArray<CExtensionDefSpawnPoint>(meta, MetaName.CExtensionDefSpawnPoint, _Data.LoadSavePoints);
if (vLoadSavePoints != null)
{
LoadSavePoints = new MCExtensionDefSpawnPoint[vLoadSavePoints.Length];
for (int i = 0; i < vLoadSavePoints.Length; i++)
{
LoadSavePoints[i] = new MCExtensionDefSpawnPoint(Region, meta, vLoadSavePoints[i], this);
}
}
var vMyPoints = MetaTypes.ConvertDataArray<CScenarioPoint>(meta, MetaName.CScenarioPoint, _Data.MyPoints);
if (vMyPoints != null)
{
MyPoints = new MCScenarioPoint[vMyPoints.Length];
for (int i = 0; i < vMyPoints.Length; i++)
{
MyPoints[i] = new MCScenarioPoint(Region, meta, vMyPoints[i], this);
MyPoints[i].PointIndex = i;
}
}
}
public override void Load(Meta meta, MetaPOINTER ptr)
{
_Data = MetaTypes.GetData<CScenarioPointContainer>(meta, ptr);
Init(meta);
}
public override MetaPOINTER Save(MetaBuilder mb)
{
mb.AddStructureInfo(MetaName.CScenarioPointContainer);
return mb.AddItemPtr(MetaName.CScenarioPointContainer, _Data);
}
public CExtensionDefSpawnPoint[] GetCLoadSavePoints()
{
if ((LoadSavePoints == null) || (LoadSavePoints.Length == 0)) return null;
CExtensionDefSpawnPoint[] r = new CExtensionDefSpawnPoint[LoadSavePoints.Length];
for (int i = 0; i < LoadSavePoints.Length; i++)
{
r[i] = LoadSavePoints[i].Data;
}
return r;
}
public CScenarioPoint[] GetCMyPoints()
{
if ((MyPoints == null) || (MyPoints.Length == 0)) return null;
CScenarioPoint[] r = new CScenarioPoint[MyPoints.Length];
for (int i = 0; i < MyPoints.Length; i++)
{
r[i] = MyPoints[i].Data;
}
return r;
}
public void AddMyPoint(MCScenarioPoint p)
{
List<MCScenarioPoint> newpoints = new List<MCScenarioPoint>();
if (MyPoints != null)
{
newpoints.AddRange(MyPoints);
}
p.PointIndex = newpoints.Count;
newpoints.Add(p);
p.Container = this;
MyPoints = newpoints.ToArray();
}
public void AddLoadSavePoint(MCExtensionDefSpawnPoint p)
{
List<MCExtensionDefSpawnPoint> newpoints = new List<MCExtensionDefSpawnPoint>();
if (LoadSavePoints != null)
{
newpoints.AddRange(LoadSavePoints);
}
newpoints.Add(p);
p.Parent = this;
LoadSavePoints = newpoints.ToArray();
}
public bool RemoveMyPoint(MCScenarioPoint p)
{
bool r = false;
if (MyPoints != null)
{
List<MCScenarioPoint> newpoints = new List<MCScenarioPoint>();
foreach (var mp in MyPoints)
{
if (mp == p)
{
r = true;
}
else
{
newpoints.Add(mp);
}
}
if (r)
{
MyPoints = newpoints.ToArray();
for (int i = 0; i < MyPoints.Length; i++)
{
MyPoints[i].PointIndex = i;
}
}
}
return r;
}
public bool RemoveLoadSavePoint(MCExtensionDefSpawnPoint p)
{
bool r = false;
if (LoadSavePoints != null)
{
List<MCExtensionDefSpawnPoint> newpoints = new List<MCExtensionDefSpawnPoint>();
foreach (var mp in LoadSavePoints)
{
if (mp == p)
{
r = true;
}
else
{
newpoints.Add(mp);
}
}
if (r)
{
LoadSavePoints = newpoints.ToArray();
}
}
return r;
}
public override string Name
{
get
{
return "CScenarioPointContainer";
}
}
public override string ToString()
{
return _Data.ToString();
}
}
[TC(typeof(EXP))] public struct CScenarioPoint //SCENARIO Point, similar to CExtensionDefSpawnPointOverride //64 bytes, Key:402442150
{
public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4
public uint Unused2 { get; set; }//8
public uint Unused3 { get; set; }//12
public uint Unused4 { get; set; }//16
public byte Unused5 { get; set; }//20
public byte iType { get; set; } //21 21: UnsignedByte: 0: iType
public byte ModelSetId { get; set; } //22 22: UnsignedByte: 0: ModelSetId//3361647288
public byte iInterior { get; set; } //23 23: UnsignedByte: 0: 1975994103
public byte iRequiredIMapId { get; set; } //24 24: UnsignedByte: 0: iRequiredIMapId//1229525587
public byte iProbability { get; set; } //25 25: UnsignedByte: 0: iProbability//2974610960
public byte Unk_717991212_SpOnly { get; set; } //26 26: UnsignedByte: 0: 717991212 // animal point, or a ped with a pet?
public byte iTimeStartOverride { get; set; } //27 27: UnsignedByte: 0: 591476992
public byte iTimeEndOverride { get; set; } //28 28: UnsignedByte: 0: 2688038523
public byte iRadius { get; set; } //29 29: UnsignedByte: 0: iRadius
public byte iTimeTillPedLeaves { get; set; } //30 30: UnsignedByte: 0: 2296188475 //in game minutes?
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 uint Unused8 { get; set; }//40
public uint Unused9 { get; set; }//44
public Vector4 vPositionAndDirection { get; set; } //48 48: Float_XYZW: 0: vPositionAndDirection//4685037
public override string ToString()
{
return FloatUtil.GetVector4String(vPositionAndDirection); //iTimeStartOverride.ToString() + "-" + iTimeEndOverride.ToString();// + ", " + Flags.ToString();
}
}
[TC(typeof(EXP))] public class MCScenarioPoint : MetaWrapper
{
[TC(typeof(EXP))] public MCScenarioPointContainer Container { get; set; }
public MCScenarioPointRegion Region { get; set; }
public CScenarioPoint _Data;
public CScenarioPoint Data { get { return _Data; } set { _Data = value; } }
public Vector3 Position { get { return _Data.vPositionAndDirection.XYZ(); } set { _Data.vPositionAndDirection = new Vector4(value, Direction); } }
public float Direction { get { return _Data.vPositionAndDirection.W; } set { _Data.vPositionAndDirection = new Vector4(Position, value); } }
public Quaternion Orientation
{
get { return Quaternion.RotationAxis(Vector3.UnitZ, Direction); }
set
{
Vector3 dir = value.Multiply(Vector3.UnitX);
float dira = (float)Math.Atan2(dir.Y, dir.X);
Direction = dira;
}
}
public byte TypeId { get { return _Data.iType; } set { _Data.iType = value; } }
public ScenarioType Type { get; set; }
public byte ModelSetId { get { return _Data.ModelSetId; } set { _Data.ModelSetId = value; } }
public AmbientModelSet ModelSet { get; set; }
public byte InteriorId { get { return _Data.iInterior; } set { _Data.iInterior = value; } }
public MetaHash InteriorName { get; set; }
public ushort GroupId { get { return _Data.iScenarioGroup; } set { _Data.iScenarioGroup = value; } }
public MetaHash GroupName { get; set; }
public byte IMapId { get { return _Data.iRequiredIMapId; } set { _Data.iRequiredIMapId = value; } }
public MetaHash IMapName { get; set; }
public string TimeRange { get { return _Data.iTimeStartOverride.ToString().PadLeft(2, '0') + ":00 - " + _Data.iTimeEndOverride.ToString().PadLeft(2, '0') + ":00"; } }
public byte TimeStart { get { return _Data.iTimeStartOverride; } set { _Data.iTimeStartOverride = value; } }
public byte TimeEnd { get { return _Data.iTimeEndOverride; } set { _Data.iTimeEndOverride = value; } }
public byte Probability { get { return _Data.iProbability; } set { _Data.iProbability = value; } }
public byte SpOnlyFlag { get { return _Data.Unk_717991212_SpOnly; } set { _Data.Unk_717991212_SpOnly = 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 int PointIndex { get; set; }
public MCScenarioPoint(MCScenarioPointRegion region) { Region = region; }
public MCScenarioPoint(MCScenarioPointRegion region, Meta meta, CScenarioPoint d, MCScenarioPointContainer container)
{
Region = region;
Container = container;
_Data = d;
}
public MCScenarioPoint(MCScenarioPointRegion region, MCScenarioPoint copy)
{
Region = region;
if (copy != null)
{
_Data = copy.Data;
Type = copy.Type;
ModelSet = copy.ModelSet;
InteriorName = copy.InteriorName;
GroupName = copy.GroupName;
IMapName = copy.IMapName;
}
}
public void CopyFrom(MCScenarioPoint copy)
{
_Data = copy.Data;
Type = copy.Type;
ModelSet = copy.ModelSet;
InteriorName = copy.InteriorName;
GroupName = copy.GroupName;
IMapName = copy.IMapName;
}
public override void Load(Meta meta, MetaPOINTER ptr)
{
_Data = MetaTypes.GetData<CScenarioPoint>(meta, ptr);
}
public override MetaPOINTER Save(MetaBuilder mb)
{
mb.AddStructureInfo(MetaName.CScenarioPoint);
return mb.AddItemPtr(MetaName.CScenarioPoint, _Data);
}
public override string Name
{
get
{
return (Type?.ToString() ?? "") + ": " + (ModelSet?.ToString() ?? "");
}
}
public override string ToString()
{
return Name + ": " + TimeRange;
}
}
[TC(typeof(EXP))] public struct CScenarioEntityOverride //SCENARIO Entity Override //80 bytes, Key:1271200492
{
public Vector3 EntityPosition { get; set; } //0 0: Float_XYZ: 0: EntityPosition//642078041
public float Unused00 { get; set; }//12
public MetaHash EntityType { get; set; } //16 16: Hash: 0: EntityType//1374199246
public uint Unused01 { get; set; }//20
public Array_Structure ScenarioPoints { get; set; } //24 24: Array: 0: ScenarioPoints {0: Structure: CExtensionDefSpawnPoint: 256}
public uint Unused02 { get; set; }//40
public uint Unused03 { get; set; }//44
public uint Unused04 { get; set; }//48
public uint Unused05 { get; set; }//52
public uint Unused06 { get; set; }//56
public uint Unused07 { get; set; }//60
public byte Unk_538733109 { get; set; } //64 64: Boolean: 0: 538733109
public byte Unk_1035513142 { get; set; } //65 65: Boolean: 0: 1035513142
public ushort Unused08 { get; set; }//66
public uint Unused09 { get; set; }//68
public uint Unused10 { get; set; }//72
public uint Unused11 { get; set; }//76
public override string ToString()
{
return EntityType.ToString() + ", " + ScenarioPoints.Count1.ToString() + " ScenarioPoints";
}
}
[TC(typeof(EXP))] public class MCScenarioEntityOverride : MetaWrapper
{
[TC(typeof(EXP))] public object Parent { get; set; }
public MCScenarioPointRegion Region { get; set; }
public CScenarioEntityOverride _Data;
public CScenarioEntityOverride Data { get { return _Data; } set { _Data = value; } }
public Vector3 Position { get { return _Data.EntityPosition; } set { _Data.EntityPosition = value; } }
public MetaHash TypeName { get { return _Data.EntityType; } set { _Data.EntityType = value; } }
public byte Unk1 { get { return _Data.Unk_538733109; } set { _Data.Unk_538733109 = value; } }
public byte Unk2 { get { return _Data.Unk_1035513142; } set { _Data.Unk_1035513142 = value; } }
public MCExtensionDefSpawnPoint[] ScenarioPoints { get; set; }
public MCScenarioEntityOverride() { }
public MCScenarioEntityOverride(MCScenarioPointRegion region, MCScenarioEntityOverride copy)
{
Region = region;
if (copy != null)
{
_Data = copy.Data;
}
}
public MCScenarioEntityOverride(MCScenarioPointRegion region, Meta meta, CScenarioEntityOverride d)
{
Region = region;
_Data = d;
Init(meta);
}
public void Init(Meta meta)
{
var scenarioPoints = MetaTypes.ConvertDataArray<CExtensionDefSpawnPoint>(meta, MetaName.CExtensionDefSpawnPoint, _Data.ScenarioPoints);
if (scenarioPoints != null)
{
ScenarioPoints = new MCExtensionDefSpawnPoint[scenarioPoints.Length];
for (int i = 0; i < scenarioPoints.Length; i++)
{
ScenarioPoints[i] = new MCExtensionDefSpawnPoint(Region, meta, scenarioPoints[i], this);
ScenarioPoints[i].ParentPosition = Position;
}
}
}
public override void Load(Meta meta, MetaPOINTER ptr)
{
_Data = MetaTypes.GetData<CScenarioEntityOverride>(meta, ptr);
Init(meta);
}
public override MetaPOINTER Save(MetaBuilder mb)
{
mb.AddStructureInfo(MetaName.CScenarioEntityOverride);
if (ScenarioPoints != null)
{
mb.AddStructureInfo(MetaName.CExtensionDefSpawnPoint);
mb.AddEnumInfo((MetaName)3573596290);
mb.AddEnumInfo((MetaName)700327466);
_Data.ScenarioPoints = mb.AddWrapperArray(ScenarioPoints);
}
return mb.AddItemPtr(MetaName.CScenarioEntityOverride, _Data);
}
public void AddScenarioPoint(MCExtensionDefSpawnPoint p)
{
List<MCExtensionDefSpawnPoint> newpoints = new List<MCExtensionDefSpawnPoint>();
if (ScenarioPoints != null)
{
newpoints.AddRange(ScenarioPoints);
}
newpoints.Add(p);
p.Parent = this;
ScenarioPoints = newpoints.ToArray();
}
public bool RemoveScenarioPoint(MCExtensionDefSpawnPoint p)
{
bool r = false;
if (ScenarioPoints != null)
{
List<MCExtensionDefSpawnPoint> newpoints = new List<MCExtensionDefSpawnPoint>();
foreach (var mp in ScenarioPoints)
{
if (mp == p)
{
r = true;
}
else
{
newpoints.Add(mp);
}
}
if (r)
{
ScenarioPoints = newpoints.ToArray();
}
}
return r;
}
public override string Name
{
get
{
return "CScenarioEntityOverride " + _Data.EntityType.ToString();
}
}
public override string ToString()
{
return _Data.ToString();
}
}
[TC(typeof(EXP))] public struct Unk_4023740759 //SCENARIO PATH ARRAYS //88 bytes, Key:88255871
{
public Array_Structure Nodes { get; set; } //0 0: Array: 0: Nodes {0: Structure: CScenarioChainingNode//3340683255: 256}
public Array_Structure Edges { get; set; } //16 16: Array: 0: Edges {0: Structure: CScenarioChainingEdge//4255409560: 256}
public Array_Structure Chains { get; set; } //32 32: Array: 0: Chains {0: Structure: CScenarioChain: 256}
public uint Unused0 { get; set; }//48
public uint Unused1 { get; set; }//52
public uint Unused2 { get; set; }//56
public uint Unused3 { get; set; }//60
public uint Unused4 { get; set; }//64
public uint Unused5 { get; set; }//68
public uint Unused6 { get; set; }//72
public uint Unused7 { get; set; }//76
public uint Unused8 { get; set; }//80
public uint Unused9 { get; set; }//84
public override string ToString()
{
return Nodes.Count1.ToString() + " Nodes, " + Edges.Count1.ToString() + " Edges, " + Chains.Count1.ToString() + " Chains";
}
}
[TC(typeof(EXP))] public class MUnk_4023740759 : MetaWrapper
{
public MCScenarioPointRegion Region { get; private set; }
public Unk_4023740759 _Data;
public Unk_4023740759 Data { get { return _Data; } set { _Data = value; } }
public MCScenarioChainingNode[] Nodes { get; set; }
public MCScenarioChainingEdge[] Edges { get; set; }
public MCScenarioChain[] Chains { get; set; }
public MUnk_4023740759() { }
public MUnk_4023740759(MCScenarioPointRegion region) { Region = region; }
public MUnk_4023740759(MCScenarioPointRegion region, Meta meta, Unk_4023740759 d)
{
Region = region;
_Data = d;
Init(meta);
}
public void Init(Meta meta)
{
var pathnodes = MetaTypes.ConvertDataArray<CScenarioChainingNode>(meta, MetaName.CScenarioChainingNode, _Data.Nodes);
if (pathnodes != null)
{
Nodes = new MCScenarioChainingNode[pathnodes.Length];
for (int i = 0; i < pathnodes.Length; i++)
{
Nodes[i] = new MCScenarioChainingNode(Region, meta, pathnodes[i], this, i);
}
}
var pathedges = MetaTypes.ConvertDataArray<CScenarioChainingEdge>(meta, MetaName.CScenarioChainingEdge, _Data.Edges);
if (pathedges != null)
{
Edges = new MCScenarioChainingEdge[pathedges.Length];
for (int i = 0; i < pathedges.Length; i++)
{
Edges[i] = new MCScenarioChainingEdge(Region, meta, pathedges[i], i);
}
}
var pathchains = MetaTypes.ConvertDataArray<CScenarioChain>(meta, MetaName.CScenarioChain, _Data.Chains);
if (pathchains != null)
{
Chains = new MCScenarioChain[pathchains.Length];
for (int i = 0; i < pathchains.Length; i++)
{
Chains[i] = new MCScenarioChain(Region, meta, pathchains[i]);
}
}
}
public override void Load(Meta meta, MetaPOINTER ptr)
{
_Data = MetaTypes.GetData<Unk_4023740759>(meta, ptr);
Init(meta);
}
public override MetaPOINTER Save(MetaBuilder mb)
{
mb.AddStructureInfo((MetaName)4023740759);
return mb.AddItemPtr((MetaName)4023740759, _Data);
}
public CScenarioChainingNode[] GetCNodes()
{
if ((Nodes == null) || (Nodes.Length == 0)) return null;
CScenarioChainingNode[] r = new CScenarioChainingNode[Nodes.Length];
for (int i = 0; i < Nodes.Length; i++)
{
r[i] = Nodes[i].Data;
}
return r;
}
public CScenarioChainingEdge[] GetCEdges()
{
if ((Edges == null) || (Edges.Length == 0)) return null;
CScenarioChainingEdge[] r = new CScenarioChainingEdge[Edges.Length];
for (int i = 0; i < Edges.Length; i++)
{
r[i] = Edges[i].Data;
}
return r;
}
public CScenarioChain[] GetCChains()
{
if ((Chains == null) || (Chains.Length == 0)) return null;
CScenarioChain[] r = new CScenarioChain[Chains.Length];
for (int i = 0; i < Chains.Length; i++)
{
r[i] = Chains[i].Data;
}
return r;
}
public void AddNode(MCScenarioChainingNode node)
{
List<MCScenarioChainingNode> newnodes = new List<MCScenarioChainingNode>();
if (Nodes != null)
{
newnodes.AddRange(Nodes);
}
node.Parent = this;
node.Region = Region;
node.NodeIndex = newnodes.Count;
newnodes.Add(node);
Nodes = newnodes.ToArray();
}
public void AddEdge(MCScenarioChainingEdge edge)
{
List<MCScenarioChainingEdge> newedges = new List<MCScenarioChainingEdge>();
if (Edges != null)
{
newedges.AddRange(Edges);
}
edge.Region = Region;
edge.EdgeIndex = newedges.Count;
newedges.Add(edge);
Edges = newedges.ToArray();
}
public void AddChain(MCScenarioChain chain)
{
List<MCScenarioChain> newchains = new List<MCScenarioChain>();
if (Chains != null)
{
newchains.AddRange(Chains);
}
chain.Region = Region;
chain.ChainIndex = newchains.Count;
newchains.Add(chain);
Chains = newchains.ToArray();
}
public bool RemoveNode(MCScenarioChainingNode n)
{
bool r = false;
if (Edges != null)
{
//first remove any edges referencing this node...
List<MCScenarioChainingEdge> remedges = new List<MCScenarioChainingEdge>();
if (Chains != null)
{
foreach (var chain in Chains)
{
if (chain.Edges == null) continue;
remedges.Clear();
foreach (var edge in chain.Edges)
{
if ((edge.NodeFrom == n) || (edge.NodeTo == n))
{
remedges.Add(edge);
}
}
foreach (var edge in remedges)
{
chain.RemoveEdge(edge);
}
}
}
remedges.Clear();
foreach (var edge in Edges)
{
if ((edge.NodeFrom == n) || (edge.NodeTo == n))
{
remedges.Add(edge);
}
}
foreach (var edge in remedges)
{
RemoveEdge(edge);
}
}
if (Nodes != null)
{
List<MCScenarioChainingNode> newnodes = new List<MCScenarioChainingNode>();
foreach (var nn in Nodes)
{
if (nn == n)
{
r = true;
}
else
{
nn.NodeIndex = newnodes.Count;
newnodes.Add(nn);
}
}
if (r)
{
Nodes = newnodes.ToArray();
foreach (var e in Edges)
{
e.NodeIndexFrom = (ushort)e.NodeFrom.NodeIndex;
e.NodeIndexTo = (ushort)e.NodeTo.NodeIndex;
}
}
}
return r;
}
public bool RemoveEdge(MCScenarioChainingEdge e)
{
bool r = false;
if (Edges != null)
{
List<MCScenarioChainingEdge> newedges = new List<MCScenarioChainingEdge>();
foreach (var ne in Edges)
{
if (ne == e)
{
r = true;
}
else
{
ne.EdgeIndex = newedges.Count;
newedges.Add(ne);
}
}
if (r)
{
Edges = newedges.ToArray();
foreach (var c in Chains)
{
for (int i = 0; i < c.Edges.Length; i++)
{
c.EdgeIds[i] = (ushort)c.Edges[i].EdgeIndex;
}
}
}
}
return r;
}
public bool RemoveChain(MCScenarioChain c)
{
bool r = false;
if (Chains != null)
{
List<MCScenarioChain> newchains = new List<MCScenarioChain>();
foreach (var nc in Chains)
{
if (nc == c)
{
r = true;
}
else
{
nc.ChainIndex = newchains.Count;
newchains.Add(nc);
}
}
if (r)
{
Chains = newchains.ToArray();
}
}
return r;
}
public override string Name
{
get
{
return "Unk_4023740759 (Scenario paths) " + _Data.ToString();
}
}
public override string ToString()
{
return _Data.ToString();
}
}
[TC(typeof(EXP))] public struct CScenarioChainingNode //SCENARIO PATH NODE //32 bytes, Key:1811784424
{
public Vector3 Position { get; set; } //0 0: Float_XYZ: 0: Position
public float Unused0 { get; set; }//12
public MetaHash Unk_2602393771 { get; set; } //16 16: Hash: 0: 2602393771
public MetaHash ScenarioType { get; set; } //20 20: Hash: 0: ScenarioType
public byte Unk_407126079_NotFirst { get; set; } //24 24: Boolean: 0: 407126079 //can move backwards? (not first node)
public byte Unk_1308720135_NotLast { get; set; } //25 25: Boolean: 0: 1308720135 //can move forwards? (not last node)
public ushort Unused1 { get; set; }//26
public uint Unused2 { get; set; }//28
public override string ToString()
{
return //Unk_407126079.ToString() + ", " + Unk_1308720135.ToString() + ", " +
ScenarioType.ToString() + ", " + Unk_2602393771.ToString();
}
}
[TC(typeof(EXP))] public class MCScenarioChainingNode : MetaWrapper
{
[TC(typeof(EXP))] public MUnk_4023740759 Parent { get; set; }
public MCScenarioPointRegion Region { get; set; }
public CScenarioChainingNode _Data;
public CScenarioChainingNode Data { get { return _Data; } set { _Data = value; } }
public Vector3 Position { get { return _Data.Position; } set { _Data.Position = value; } }
public MetaHash Unk1 { get { return _Data.Unk_2602393771; } set { _Data.Unk_2602393771 = value; } }
public MetaHash TypeHash { get { return _Data.ScenarioType; } set { _Data.ScenarioType = value; } }
public ScenarioType Type { get; set; }
public bool NotFirst { get { return _Data.Unk_407126079_NotFirst == 1; } set { _Data.Unk_407126079_NotFirst = (byte)(value ? 1 : 0); } }
public bool NotLast { get { return _Data.Unk_1308720135_NotLast == 1; } set { _Data.Unk_1308720135_NotLast = (byte)(value ? 1 : 0); } }
public int NodeIndex { get; set; }
public MCScenarioChain Chain { get; set; }
public MCScenarioChainingNode() { }
public MCScenarioChainingNode(MCScenarioPointRegion region, Meta meta, CScenarioChainingNode d, MUnk_4023740759 parent, int index)
{
Region = region;
Parent = parent;
_Data = d;
NodeIndex = index;
}
public MCScenarioChainingNode(MCScenarioPointRegion region, MCScenarioChainingNode copy)
{
Region = region;
_Data = copy._Data;
Type = copy.Type;
}
public void CopyFrom(MCScenarioChainingNode copy)
{
_Data = copy._Data;
Type = copy.Type;
}
public override void Load(Meta meta, MetaPOINTER ptr)
{
_Data = MetaTypes.GetData<CScenarioChainingNode>(meta, ptr);
}
public override MetaPOINTER Save(MetaBuilder mb)
{
mb.AddStructureInfo(MetaName.CScenarioChainingNode);
return mb.AddItemPtr(MetaName.CScenarioChainingNode, _Data);
}
public override string Name
{
get
{
return "CScenarioChainingNode";// + _Data.Unk_2602393771.ToString();
}
}
public override string ToString()
{
return _Data.ToString();
}
}
[TC(typeof(EXP))] public struct CScenarioChainingEdge //SCENARIO PATH EDGE //8 bytes, Key:2004985940
{
public ushort NodeIndexFrom { get; set; } //0 0: UnsignedShort: 0: NodeIndexFrom//3236798246
public ushort NodeIndexTo { get; set; } //2 2: UnsignedShort: 0: NodeIndexTo//2851806039
public Unk_3609807418 Action { get; set; } //4 4: ByteEnum: 3609807418: Action
public Unk_3971773454 NavMode { get; set; } //5 5: ByteEnum: 3971773454: NavMode//859022269
public Unk_941086046 NavSpeed { get; set; } //6 6: ByteEnum: 941086046: NavSpeed//1419316113
public byte Unused0 { get; set; }//7
public override string ToString()
{
return NodeIndexFrom.ToString() + ", " + NodeIndexTo.ToString() + ", " + Action.ToString() + ", " + NavMode.ToString() + ", " + NavSpeed.ToString();
}
}
[TC(typeof(EXP))] public class MCScenarioChainingEdge : MetaWrapper
{
public MCScenarioPointRegion Region { get; set; }
public CScenarioChainingEdge _Data;
public CScenarioChainingEdge Data { get { return _Data; } set { _Data = value; } }
public MCScenarioChainingNode NodeFrom { get; set; }
public MCScenarioChainingNode NodeTo { get; set; }
public ushort NodeIndexFrom { get { return _Data.NodeIndexFrom; } set { _Data.NodeIndexFrom = value; } }
public ushort NodeIndexTo { get { return _Data.NodeIndexTo; } set { _Data.NodeIndexTo = value; } }
public Unk_3609807418 Action { get { return _Data.Action; } set { _Data.Action = value; } }
public Unk_3971773454 NavMode { get { return _Data.NavMode; } set { _Data.NavMode = value; } }
public Unk_941086046 NavSpeed { get { return _Data.NavSpeed; } set { _Data.NavSpeed = value; } }
public int EdgeIndex { get; set; }
public MCScenarioChainingEdge() { }
public MCScenarioChainingEdge(MCScenarioPointRegion region, Meta meta, CScenarioChainingEdge d, int index)
{
Region = region;
_Data = d;
EdgeIndex = index;
}
public MCScenarioChainingEdge(MCScenarioPointRegion region, MCScenarioChainingEdge copy)
{
Region = region;
_Data = copy._Data;
NodeFrom = copy.NodeFrom;
NodeTo = copy.NodeTo;//these should be updated later...
}
public override void Load(Meta meta, MetaPOINTER ptr)
{
_Data = MetaTypes.GetData<CScenarioChainingEdge>(meta, ptr);
}
public override MetaPOINTER Save(MetaBuilder mb)
{
mb.AddStructureInfo(MetaName.CScenarioChainingEdge);
return mb.AddItemPtr(MetaName.CScenarioChainingEdge, _Data);
}
public override string Name
{
get
{
return "CScenarioChainingEdge";
}
}
public override string ToString()
{
return Action.ToString() + ", " + NavMode.ToString() + ", " + NavSpeed.ToString();
}
}
[TC(typeof(EXP))] public struct CScenarioChain //SCENARIO PATH CHAIN //40 bytes, Key:2751910366
{
public byte Unk_1156691834 { get; set; } //0 0: UnsignedByte: 0: 1156691834
public byte Unused0 { get; set; }//1
public ushort Unused1 { get; set; }//2
public uint Unused2 { get; set; }//4
public Array_ushort EdgeIds { get; set; } //8 8: Array: 0: EdgeIds {0: UnsignedShort: 0: 256}
public uint Unused3 { get; set; }//24
public uint Unused4 { get; set; }//28
public uint Unused5 { get; set; }//32
public uint Unused6 { get; set; }//36
public override string ToString()
{
return Unk_1156691834.ToString() + ": " + EdgeIds.Count1.ToString() + " EdgeIds";
}
}
[TC(typeof(EXP))] public class MCScenarioChain : MetaWrapper
{
public MCScenarioPointRegion Region { get; set; }
public CScenarioChain _Data;
public CScenarioChain Data { get { return _Data; } set { _Data = value; } }
public byte Unk1 { get { return _Data.Unk_1156691834; } set { _Data.Unk_1156691834 = value; } }
public ushort[] EdgeIds { get; set; }
public MCScenarioChainingEdge[] Edges { get; set; }
public int ChainIndex { get; set; }
public MCScenarioChain() { }
public MCScenarioChain(MCScenarioPointRegion region, Meta meta, CScenarioChain d)
{
Region = region;
_Data = d;
EdgeIds = MetaTypes.GetUshortArray(meta, _Data.EdgeIds);
}
public override void Load(Meta meta, MetaPOINTER ptr)
{
_Data = MetaTypes.GetData<CScenarioChain>(meta, ptr);
EdgeIds = MetaTypes.GetUshortArray(meta, _Data.EdgeIds);
}
public void AddEdge(MCScenarioChainingEdge edge)
{
List<MCScenarioChainingEdge> newedges = new List<MCScenarioChainingEdge>();
List<ushort> newedgeids = new List<ushort>();
if (Edges != null)
{
newedges.AddRange(Edges);
}
if (EdgeIds != null)
{
newedgeids.AddRange(EdgeIds);
}
edge.Region = Region;
newedges.Add(edge);
newedgeids.Add((ushort)edge.EdgeIndex);
Edges = newedges.ToArray();
EdgeIds = newedgeids.ToArray();
}
public bool RemoveEdge(MCScenarioChainingEdge e)
{
bool r = false;
if (Edges != null)
{
List<MCScenarioChainingEdge> newedges = new List<MCScenarioChainingEdge>();
List<ushort> newedgeids = new List<ushort>();
foreach (var ne in Edges)
{
if (ne == e)
{
r = true;
}
else
{
newedges.Add(ne);
newedgeids.Add((ushort)ne.EdgeIndex);
}
}
if (r)
{
Edges = newedges.ToArray();
EdgeIds = newedgeids.ToArray();
}
}
return r;
}
public override MetaPOINTER Save(MetaBuilder mb)
{
//TODO!
//if (EdgeIds != null)
//{
// mb.AddStructureInfo(MetaName.ushort);
// _Data.EdgeIds = mb.AddItemArrayPtr(MetaName.ushort, EdgeIds);
//}
mb.AddStructureInfo(MetaName.CScenarioChain);
return mb.AddItemPtr(MetaName.CScenarioChain, _Data);
}
public override string Name
{
get
{
return "CScenarioChain";
}
}
public override string ToString()
{
return _Data.ToString();
}
}
[TC(typeof(EXP))] public struct CScenarioPointCluster //SCENARIO spawn cluster - all things spawn together //80 bytes, Key:3622480419
{
public CScenarioPointContainer Points { get; set; } //0 0: Structure: CScenarioPointContainer//2380938603: Points//702683191
public rage__spdSphere ClusterSphere { get; set; } //48 48: Structure: 1062159465: ClusterSphere//352461053
public float Unk_1095875445 { get; set; } //64 64: Float: 0: 1095875445 //spawn chance? eg 5, 30
public byte Unk_3129415068 { get; set; } //68 68: Boolean: 0: 3129415068
public uint Unused0 { get; set; }//72
public uint Unused1 { get; set; }//76
public override string ToString()
{
return Points.ToString();// + ", Sphere: " + ClusterSphere.ToString();
}
}
[TC(typeof(EXP))] public class MCScenarioPointCluster : MetaWrapper
{
public MCScenarioPointRegion Region { get; set; }
public CScenarioPointCluster _Data;
public CScenarioPointCluster Data { get { return _Data; } set { _Data = value; } }
public MCScenarioPointContainer Points { get; set; }
public Vector3 Position //is separate from Points...
{
get { return _Data.ClusterSphere.centerAndRadius.XYZ(); }
set
{
var v4 = new Vector4(value, _Data.ClusterSphere.centerAndRadius.W);
_Data.ClusterSphere = new rage__spdSphere() { centerAndRadius = v4 };
}
}
public float Radius
{
get { return _Data.ClusterSphere.centerAndRadius.W; }
set
{
var v4 = new Vector4(_Data.ClusterSphere.centerAndRadius.XYZ(), value);
_Data.ClusterSphere = new rage__spdSphere() { centerAndRadius = v4 };
}
}
public float Unk1 { get { return _Data.Unk_1095875445; } set { _Data.Unk_1095875445 = value; } }
public bool Unk2 { get { return _Data.Unk_3129415068==1; } set { _Data.Unk_3129415068 = (byte)(value?1:0); } }
public MCScenarioPointCluster() { }
public MCScenarioPointCluster(MCScenarioPointRegion region) { Region = region; }
public MCScenarioPointCluster(MCScenarioPointRegion region, MCScenarioPointCluster copy)
{
Region = region;
if (copy != null)
{
_Data = copy.Data;
}
Points = new MCScenarioPointContainer(region);
Points.Parent = this;
}
public MCScenarioPointCluster(MCScenarioPointRegion region, Meta meta, CScenarioPointCluster d)
{
Region = region;
_Data = d;
Points = new MCScenarioPointContainer(region, meta, d.Points);
Points.Parent = this;
}
public override void Load(Meta meta, MetaPOINTER ptr)
{
_Data = MetaTypes.GetData<CScenarioPointCluster>(meta, ptr);
Points = new MCScenarioPointContainer(Region, meta, _Data.Points);
Points.Parent = this;
}
public override MetaPOINTER Save(MetaBuilder mb)
{
mb.AddStructureInfo(MetaName.rage__spdSphere);
mb.AddStructureInfo(MetaName.CScenarioPointCluster);
if (Points != null)
{
var scp = new CScenarioPointContainer();
////meta version
//if ((Points.LoadSavePoints != null) && (Points.LoadSavePoints.Length > 0))
//{
// scp.LoadSavePoints = mb.AddWrapperArray(Points.LoadSavePoints);
//}
//if ((Points.MyPoints != null) && (Points.MyPoints.Length > 0))
//{
// scp.MyPoints = mb.AddWrapperArray(Points.MyPoints);
//}
//optimised version...
var loadSavePoints = Points.GetCLoadSavePoints();
if (loadSavePoints != null)//this never seems to be used...
{
mb.AddStructureInfo(MetaName.CExtensionDefSpawnPoint);
mb.AddEnumInfo((MetaName)3573596290);
mb.AddEnumInfo((MetaName)700327466);
scp.LoadSavePoints = mb.AddItemArrayPtr(MetaName.CExtensionDefSpawnPoint, loadSavePoints);
}
var myPoints = Points.GetCMyPoints();
if (myPoints != null)
{
mb.AddStructureInfo(MetaName.CScenarioPoint);
mb.AddEnumInfo((MetaName)700327466);
scp.MyPoints = mb.AddItemArrayPtr(MetaName.CScenarioPoint, myPoints);
}
_Data.Points = scp;
}
else
{
_Data.Points = new CScenarioPointContainer();
}
return mb.AddItemPtr(MetaName.CScenarioPointCluster, _Data);
}
public override string Name
{
get { return "CScenarioPointCluster"; }
}
public override string ToString()
{
return _Data.ToString();
}
}
[TC(typeof(EXP))] public struct CScenarioPointLookUps //SCENARIO hash arrays //96 bytes, Key:2669361587
{
public Array_uint TypeNames { get; set; } //0 0: Array: 0: TypeNames//3057471271 {0: Hash: 0: 256}
public Array_uint PedModelSetNames { get; set; } //16 16: Array: 0: PedModelSetNames//3020866217 {0: Hash: 0: 256}
public Array_uint VehicleModelSetNames { get; set; } //32 32: Array: 0: VehicleModelSetNames//3827910541 {0: Hash: 0: 256}
public Array_uint GroupNames { get; set; } //48 48: Array: 0: GroupNames//2506712617 {0: Hash: 0: 256}
public Array_uint InteriorNames { get; set; } //64 64: Array: 0: InteriorNames {0: Hash: 0: 256}
public Array_uint RequiredIMapNames { get; set; } //[ymap names] //80 80: Array: 0: RequiredIMapNames//1767860162 {0: Hash: 0: 256}
public override string ToString()
{
return "CScenarioPointLookUps";
}
}
[TC(typeof(EXP))] public class MCScenarioPointLookUps : MetaWrapper
{
public MCScenarioPointRegion Region { get; set; }
public CScenarioPointLookUps _Data;
public CScenarioPointLookUps Data { get { return _Data; } set { _Data = value; } }
public MetaHash[] TypeNames { get; set; } //scenario type hashes used by points
public MetaHash[] PedModelSetNames { get; set; } //ped names
public MetaHash[] VehicleModelSetNames { get; set; } //vehicle names
public MetaHash[] GroupNames { get; set; } //scenario group names?
public MetaHash[] InteriorNames { get; set; }
public MetaHash[] RequiredIMapNames { get; set; } //ymap names
public MCScenarioPointLookUps() { }
public MCScenarioPointLookUps(MCScenarioPointRegion region)
{
Region = region;
}
public MCScenarioPointLookUps(MCScenarioPointRegion region, Meta meta, CScenarioPointLookUps d)
{
Region = region;
_Data = d;
Init(meta);
}
public void Init(Meta meta)
{
TypeNames = MetaTypes.GetHashArray(meta, _Data.TypeNames);
PedModelSetNames = MetaTypes.GetHashArray(meta, _Data.PedModelSetNames);
VehicleModelSetNames = MetaTypes.GetHashArray(meta, _Data.VehicleModelSetNames);
GroupNames = MetaTypes.GetHashArray(meta, _Data.GroupNames);
InteriorNames = MetaTypes.GetHashArray(meta, _Data.InteriorNames);
RequiredIMapNames = MetaTypes.GetHashArray(meta, _Data.RequiredIMapNames);
}
public override void Load(Meta meta, MetaPOINTER ptr)
{
_Data = MetaTypes.GetData<CScenarioPointLookUps>(meta, ptr);
Init(meta);
}
public override MetaPOINTER Save(MetaBuilder mb)
{
mb.AddStructureInfo(MetaName.CScenarioPointLookUps);
return mb.AddItemPtr(MetaName.CScenarioPointLookUps, _Data);
}
public override string Name
{
get
{
return "CScenarioPointLookUps";
}
}
public override string ToString()
{
return _Data.ToString();
}
}
public struct CStreamingRequestRecord //40 bytes, Key:3825587854 //SRL YMT ROOT - in /streaming/ folder
{
public Array_Structure Frames { get; set; } //0 0: Array: 0: Frames//419044527 {0: Structure: CStreamingRequestFrame//999226379: 256}
public Array_Structure CommonSets { get; set; } //16 16: Array: 0: CommonSets//4248405899 {0: Structure: 1358189812: 256}
public byte NewStyle { get; set; } //32 32: Boolean: 0: 2333392588
public byte Unused0 { get; set; }//33
public ushort Unused1 { get; set; }//34
public uint Unused2 { get; set; }//36
}
public struct CStreamingRequestFrame //112 bytes, Key:1112444512 //SRL frame...
{
public Array_uint AddList { get; set; } //0 0: Array: 0: AddList//327274266 {0: Hash: 0: 256}
public Array_uint RemoveList { get; set; } //16 16: Array: 0: RemoveList//3372321331 {0: Hash: 0: 256}
public Array_uint Unk_896120921 { get; set; } //32 32: Array: 0: 896120921 {0: Hash: 0: 256}
public Vector3 CamPos { get; set; } //48 48: Float_XYZ: 0: CamPos//357008256
public float Unused0 { get; set; }//60
public Vector3 CamDir { get; set; } //64 64: Float_XYZ: 0: CamDir//210316193
public float Unused1 { get; set; }//76
public Array_byte Unk_1762439591 { get; set; } //80 80: Array: 0: 1762439591 {0: UnsignedByte: 0: 256}
public uint Flags { get; set; } //96 96: UnsignedInt: 0: Flags
public uint Unused2 { get; set; }//100
public uint Unused3 { get; set; }//104
public uint Unused4 { get; set; }//108
}
public struct CStreamingRequestFrame_v2 //96 bytes, Key:3672937465 //SRL frame...
{
public Array_uint AddList { get; set; } //0 0: Array: 0: AddList//327274266 {0: Hash: 0: 256}
public Array_uint RemoveList { get; set; } //16 16: Array: 0: RemoveList//3372321331 {0: Hash: 0: 256}
public Vector3 CamPos { get; set; } //32 32: Float_XYZ: 0: CamPos//357008256
public float Unused0 { get; set; }//44
public Vector3 CamDir { get; set; } //48 48: Float_XYZ: 0: CamDir//210316193
public float Unused1 { get; set; }//60
public Array_byte Unk_1762439591 { get; set; } //64 64: Array: 0: 1762439591 {0: UnsignedByte: 0: 256}
public uint Flags { get; set; } //80 80: UnsignedInt: 0: Flags
public uint Unused2 { get; set; }//84
public uint Unused3 { get; set; }//88
public uint Unused4 { get; set; }//92
}
public struct Unk_1358189812 //16 bytes, Key:3710200606 //SRL hashes list?
{
public Array_uint Requests { get; set; } //0 0: Array: 0: Requests//2743119154 {0: Hash: 0: 256}
}
public struct Unk_376833625 //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
public byte Unk_911147899 { get; set; } //2 2: Boolean: 0: 911147899
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 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
public uint Unused0 { get; set; }//108
}
public struct Unk_3538495220 //24 bytes, Key:2024084511 //COMPONENT PEDS unknown
{
public byte Unk_3371516811 { get; set; } //0 0: UnsignedByte: 0: 3371516811
public byte Unused0 { get; set; }//1
public ushort Unused1 { get; set; }//2
public uint Unused2 { get; set; }//4
public Array_Structure Unk_1756136273 { get; set; } //8 8: Array: 0: 1756136273 {0: Structure: 1535046754: 256}
}
public struct Unk_1535046754 //48 bytes, Key:124073662 //COMPONENT PEDS unknown /cloth?
{
public byte propMask { get; set; } //0 0: UnsignedByte: 0: propMask//2932859459
public byte Unk_2806194106 { get; set; } //1 1: UnsignedByte: 0: 2806194106
public ushort Unused0 { get; set; }//2
public uint Unused1 { get; set; }//4
public Array_Structure aTexData { get; set; } //8 8: Array: 0: aTexData//1251090986 {0: Structure: 1036962405: 256}
public Unk_2236980467 clothData { get; set; } //24 24: Structure: 2236980467: clothData//2464583091
}
public struct Unk_1036962405 //3 bytes, Key:4272717794 //COMPONENT PEDS (cloth?) TexData
{
public byte texId { get; set; } //0 0: UnsignedByte: 0: texId
public byte distribution { get; set; } //1 1: UnsignedByte: 0: distribution//914976023
public byte Unused0 { get; set; }//2
}
public struct Unk_2236980467 //24 bytes, Key:508935687 //COMPONENT PEDS clothData
{
public byte Unk_2828247905 { get; set; } //0 0: Boolean: 0: 2828247905
public byte Unused0 { get; set; }//1
public ushort Unused1 { get; set; }//2
public uint Unused2 { get; set; }//4
public uint Unused3 { get; set; }//8
public uint Unused4 { get; set; }//12
public uint Unused5 { get; set; }//16
public uint Unused6 { get; set; }//20
}
public struct Unk_253191135 //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
public ArrayOfBytes12 Unk_2991454271 { get; set; } //16 16: ArrayOfBytes: 12: 2991454271
public ArrayOfBytes6 Unk_3598106198 { get; set; } //28 28: ArrayOfBytes: 6: 3598106198
public ArrayOfBytes6 Unk_2095974912 { get; set; } //34 34: ArrayOfBytes: 6: 2095974912
public ArrayOfBytes6 Unk_672172037 { get; set; } //40 40: ArrayOfBytes: 6: 672172037
public ushort Unused0 { get; set; }//46
}
public struct CComponentInfo //48 bytes, Key:3693847250 //COMPONENT PEDS CComponentInfo
{
public MetaHash Unk_802196719 { get; set; } //0 0: Hash: 0: 802196719
public MetaHash Unk_4233133352 { get; set; } //4 4: Hash: 0: 4233133352
public ArrayOfBytes5 Unk_128864925 { get; set; } //8 8: ArrayOfBytes: 5: 128864925
public byte Unused0 { get; set; }//13
public ushort Unused1 { get; set; }//14
public uint Unused2 { get; set; }//16
public uint Unused3 { get; set; }//20
public uint Unused4 { get; set; }//24
public uint flags { get; set; } //28 28: UnsignedInt: 0: flags
public int inclusions { get; set; } //32 32: IntFlags2: 0: inclusions//2172318933
public int exclusions { get; set; } //36 36: IntFlags2: 0: exclusions
public Unk_884254308 Unk_1613922652 { get; set; } //40 40: ShortFlags: 884254308: 1613922652
public ushort Unk_2114993291 { get; set; } //42 42: UnsignedShort: 0: 2114993291
public byte Unk_3509540765 { get; set; } //44 44: UnsignedByte: 0: 3509540765
public byte Unk_4196345791 { get; set; } //45 45: UnsignedByte: 0: 4196345791
public ushort Unused5 { get; set; }//46
}
public struct Unk_2858946626 //40 bytes, Key:1792487819 //COMPONENT PEDS unknown
{
public byte Unk_2598445407 { get; set; } //0 0: UnsignedByte: 0: 2598445407
public byte Unused0 { get; set; }//1
public ushort Unused1 { get; set; }//2
public uint Unused2 { get; set; }//4
public Array_Structure Unk_3902803273 { get; set; } //8 8: Array: 0: 3902803273 {0: Structure: 94549140: 256}
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 MetaHash audioId { get; set; } //0 0: Hash: 0: audioId
public ArrayOfBytes5 expressionMods { get; set; } //4 4: ArrayOfBytes: 5: expressionMods//942761829
public byte Unused0 { get; set; }//9
public ushort Unused1 { get; set; }//10
public uint Unused2 { get; set; }//12
public uint Unused3 { get; set; }//16
public uint Unused4 { get; set; }//20
public Array_Structure texData { get; set; } //24 24: Array: 0: texData//4088935562 {0: Structure: 254518642: 256}
public Unk_4212977111 renderFlags { get; set; } //40 40: IntFlags1: 4212977111: renderFlags//4239582912
public uint propFlags { get; set; } //44 44: UnsignedInt: 0: propFlags//1066841901
public ushort flags { get; set; } //48 48: UnsignedShort: 0: flags
public byte anchorId { get; set; } //50 50: UnsignedByte: 0: anchorId//2731224028
public byte propId { get; set; } //51 51: UnsignedByte: 0: propId//3817142252
public byte Unk_2894625425 { get; set; } //52 52: UnsignedByte: 0: 2894625425
public byte Unused5 { get; set; }//53
public ushort Unused6 { get; set; }//54
}
public struct Unk_254518642 //12 bytes, Key:2767296137 //COMPONENT PEDS (expression?) texData
{
public int inclusions { get; set; } //0 0: IntFlags2: 0: inclusions//2172318933
public int exclusions { get; set; } //4 4: IntFlags2: 0: exclusions
public byte texId { get; set; } //8 8: UnsignedByte: 0: texId
public byte inclusionId { get; set; } //9 9: UnsignedByte: 0: inclusionId//1938349561
public byte exclusionId { get; set; } //10 10: UnsignedByte: 0: exclusionId//3819522186
public byte distribution { get; set; } //11 11: UnsignedByte: 0: distribution//914976023
}
public struct CAnchorProps //24 bytes, Key:403574180 //COMPONENT PEDS CAnchorProps
{
public Array_byte props { get; set; } //0 0: Array: 0: props {0: UnsignedByte: 0: 256}
public Unk_2834549053 anchor { get; set; } //16 16: IntEnum: 2834549053: anchor
public uint Unused0 { get; set; }//20
}
}