public static void Initialize() { UDKConstructorDelegate = UDKPackage.Initialize(); ME1ConstructorDelegate = ME1Package.Initialize(); ME2ConstructorDelegate = ME2Package.Initialize(); ME3ConstructorDelegate = ME3Package.Initialize(); }
public ME2ExportEntry(ME2Package pccFile, Stream stream) : base(pccFile) { //determine header length long start = stream.Position; stream.Seek(40, SeekOrigin.Current); int count = stream.ReadValueS32(); stream.Seek(4 + count * 12, SeekOrigin.Current); count = stream.ReadValueS32(); stream.Seek(16, SeekOrigin.Current); stream.Seek(4 + count * 4, SeekOrigin.Current); long end = stream.Position; stream.Seek(start, SeekOrigin.Begin); //read header Header = stream.ReadBytes((int)(end - start)); headerOffset = (uint)start; OriginalDataSize = DataSize; //read data stream.Seek(DataOffset, SeekOrigin.Begin); _data = stream.ReadBytes(DataSize); stream.Seek(end, SeekOrigin.Begin); if ((ObjectFlags & (ulong)UnrealFlags.EObjectFlags.HasStack) != 0) { ReadsFromConfig = (Data[25] & 64) != 0; } else { ReadsFromConfig = false; } }
public static ME2Package OpenME2Package(string pathToFile, WPFBase wpfWindow = null, WinFormsBase winForm = null) { IMEPackage pck = OpenMEPackage(pathToFile, wpfWindow, winForm); ME2Package pcc = pck as ME2Package; if (pcc == null) { pck.Release(wpfWindow, winForm); throw new FormatException("Not an ME2 package file."); } return(pcc); }
public TreeNode ToTree(int MyIndex, ME2Package pcc) { string s = ""; if (Text.Length != 0) s = Text.Substring(0, Text.Length - 1); TreeNode res = new TreeNode(MyIndex + " : " + s + " " + ME2TalkFiles.findDataById(refText)); TreeNode t = new TreeNode("Reply List"); for (int i = 0; i < ReplyList.Count; i++) { EntryListReplyListStruct e = ReplyList[i]; string par = e.Paraphrase; if (par.Length != 0 && par[par.Length - 1] == '\0') par = par.Substring(0, par.Length - 1); t.Nodes.Add(i + " : " + par + " " + e.refParaphrase + " " + ME2TalkFiles.findDataById(e.refParaphrase) + " " + e.Index + " " + pcc.getNameEntry(e.CategoryValue)); } res.Nodes.Add(t); TreeNode t2 = new TreeNode("Speaker List"); for (int i = 0; i < SpeakerList.Count; i++) t2.Nodes.Add(i + " : " + SpeakerList[i]); res.Nodes.Add(t2); res.Nodes.Add("SpeakerIndex : " + SpeakerIndex); res.Nodes.Add("ListenerIndex : " + ListenerIndex); res.Nodes.Add("ConditionalFunc : " + ConditionalFunc); res.Nodes.Add("ConditionalParam : " + ConditionalParam); res.Nodes.Add("StateTransition : " + StateTransition); res.Nodes.Add("StateTransitionParam : " + StateTransitionParam); res.Nodes.Add("ExportID : " + ExportID); res.Nodes.Add("ScriptIndex : " + ScriptIndex); res.Nodes.Add("CameraIntimacy : " + CameraIntimacy); res.Nodes.Add("Skippable : " + Skippable); res.Nodes.Add("FireConditional : " + FireConditional); res.Nodes.Add("Ambient : " + Ambient); res.Nodes.Add("NonTextline : " + NonTextline); res.Nodes.Add("IgnoreBodyGestures : " + IgnoreBodyGestures); res.Nodes.Add("Text : " + Text); res.Nodes.Add("refText : " + refText + " " + ME2TalkFiles.findDataById(refText, true)); res.Nodes.Add("GUIStyle : " + pcc.getNameEntry(GUIStyleValue)); return res; }
private void openToolStripMenuItem_Click(object sender, EventArgs e) { OpenFileDialog d = new OpenFileDialog(); d.Filter = "*.pcc|*.pcc"; if (d.ShowDialog() == DialogResult.OK) { try { pcc = MEPackageHandler.OpenME2Package(d.FileName); Objects = new List<int>(); IReadOnlyList<IExportEntry> Exports = pcc.Exports; for (int i = 0; i < Exports.Count; i++) if (Exports[i].ClassName == "FaceFXAnimSet") Objects.Add(i); ListRefresh(); } catch (Exception ex) { MessageBox.Show("Error:\n" + ex.Message); } } }
public ME2ExportEntry(ME2Package pccFile) : base(pccFile) { }
private static PropertyInfo getProperty(ME2Package pcc, IExportEntry entry) { PropertyInfo p = new PropertyInfo(); switch (entry.ClassName) { case "IntProperty": p.type = PropertyType.IntProperty; break; case "StringRefProperty": p.type = PropertyType.StringRefProperty; break; case "FloatProperty": p.type = PropertyType.FloatProperty; break; case "BoolProperty": p.type = PropertyType.BoolProperty; break; case "StrProperty": p.type = PropertyType.StrProperty; break; case "NameProperty": p.type = PropertyType.NameProperty; break; case "DelegateProperty": p.type = PropertyType.DelegateProperty; break; case "ObjectProperty": p.type = PropertyType.ObjectProperty; p.reference = pcc.getObjectName(BitConverter.ToInt32(entry.Data, entry.Data.Length - 4)); break; case "StructProperty": p.type = PropertyType.StructProperty; p.reference = pcc.getObjectName(BitConverter.ToInt32(entry.Data, entry.Data.Length - 4)); break; case "BioMask4Property": case "ByteProperty": p.type = PropertyType.ByteProperty; p.reference = pcc.getObjectName(BitConverter.ToInt32(entry.Data, entry.Data.Length - 4)); break; case "ArrayProperty": p.type = PropertyType.ArrayProperty; PropertyInfo arrayTypeProp = getProperty(pcc, pcc.Exports[BitConverter.ToInt32(entry.Data, 44) - 1]); if (arrayTypeProp != null) { switch (arrayTypeProp.type) { case PropertyType.ObjectProperty: case PropertyType.StructProperty: case PropertyType.ArrayProperty: p.reference = arrayTypeProp.reference; break; case PropertyType.ByteProperty: if (arrayTypeProp.reference == "") p.reference = arrayTypeProp.type.ToString(); else p.reference = arrayTypeProp.reference; break; case PropertyType.IntProperty: case PropertyType.FloatProperty: case PropertyType.NameProperty: case PropertyType.BoolProperty: case PropertyType.StrProperty: case PropertyType.StringRefProperty: case PropertyType.DelegateProperty: p.reference = arrayTypeProp.type.ToString(); break; case PropertyType.None: case PropertyType.Unknown: default: System.Diagnostics.Debugger.Break(); p = null; break; } } else { p = null; } break; case "ClassProperty": case "InterfaceProperty": case "ComponentProperty": default: p = null; break; } return p; }
private static void generateEnumValues(int index, ME2Package pcc) { string enumName = pcc.Exports[index].ObjectName; if (!Enums.ContainsKey(enumName)) { List<string> values = new List<string>(); byte[] buff = pcc.Exports[index].Data; int count = BitConverter.ToInt32(buff, 20); for (int i = 0; i < count; i++) { values.Add(pcc.Names[BitConverter.ToInt32(buff, 24 + i * 8)]); } Enums.Add(enumName, values); } }
private static ClassInfo generateClassInfo(int index, ME2Package pcc) { ClassInfo info = new ClassInfo(); info.baseClass = pcc.Exports[index].ClassParent; foreach (ME2ExportEntry entry in pcc.Exports) { if (entry.idxLink - 1 == index && entry.ClassName != "ScriptStruct" && entry.ClassName != "Enum" && entry.ClassName != "Function" && entry.ClassName != "Const" && entry.ClassName != "State") { //Skip if property is transient (only used during execution, will never be in game files) if ((BitConverter.ToUInt64(entry.Data, 24) & 0x0000000000002000) == 0 && !info.properties.ContainsKey(entry.ObjectName)) { PropertyInfo p = getProperty(pcc, entry); if (p != null) { info.properties.Add(entry.ObjectName, p); } } } } return info; }
public ME2ExportEntry(ME2Package pccFile, byte[] headerData, uint exportOffset) : base(pccFile, headerData, exportOffset) { }
public ME2BioConversation(ME2Package Pcc, int Index) { pcc = Pcc; MyIndex = Index; Memory = pcc.Exports[Index].Data; ReadData(); }
public TreeNode ToTree(int MyIndex, ME2Package pcc) { string s = ""; if (Text.Length != 0) s = Text.Substring(0, Text.Length - 1); TreeNode res = new TreeNode(MyIndex + " : " + s + " " + ME2TalkFiles.findDataById(refText)); TreeNode t = new TreeNode("Entry List"); for (int i = 0; i < EntryList.Count; i++) t.Nodes.Add(i + " : " + EntryList[i]); res.Nodes.Add(t); res.Nodes.Add("Listener Index : " + ListenerIndex); res.Nodes.Add("Unskippable : " + Unskippable); res.Nodes.Add("ReplyType : " + pcc.getNameEntry(ReplyTypeValue)); res.Nodes.Add("Text : " + Text); res.Nodes.Add("refText : " + refText + " " + ME2TalkFiles.findDataById(refText, true)); res.Nodes.Add("ConditionalFunc : " + ConditionalFunc); res.Nodes.Add("ConditionalParam : " + ConditionalParam); res.Nodes.Add("StateTransition : " + StateTransition); res.Nodes.Add("StateTransitionParam : " + StateTransitionParam); res.Nodes.Add("ExportID : " + ExportID); res.Nodes.Add("ScriptIndex : " + ScriptIndex); res.Nodes.Add("CameraIntimacy : " + CameraIntimacy); res.Nodes.Add("FireConditional : " + FireConditional); res.Nodes.Add("Ambient : " + Ambient); res.Nodes.Add("NonTextline : " + NonTextLine); res.Nodes.Add("IgnoreBodyGestures : " + IgnoreBodyGestures); res.Nodes.Add("GUIStyle : " + pcc.getNameEntry(GUIStyleValue)); return res; }