public override byte[] GetRawFromID(DatumHandle ID, int DataLength) { EndianReader er; string fName = ""; long cIndex = (ID.Value & 0xC0000000) >> 30; int offset = (int)ID.Value & 0x3FFFFFFF; if (cIndex != 0) { switch (cIndex) { case 1: fName = Path.Combine(File.Directory.FullName, "mainmenu.map"); break; case 2: fName = Path.Combine(File.Directory.FullName, "shared.map"); break; case 3: fName = Path.Combine(File.Directory.FullName, "single_player_shared.map"); break; } FileStream fs = new FileStream(fName, FileMode.Open, FileAccess.Read); er = new EndianReader(fs, EndianFormat.LittleEndian); } else { er = Reader; } er.SeekTo(offset); var data = er.ReadBytes(DataLength); if (er != Reader) { er.Close(); er.Dispose(); } return(data); }
private byte[] GetSecondaryResource(DatumHandle ID) { var resource = ResourceGestalt.TagResources[ID.Index]; if (resource.SegmentIndex == -1) { return(null); } var segment = ResourceLayoutTable.Sections[resource.SegmentIndex]; if (segment.OptionalPageIndex == -1 || segment.OptionalSegmentOffset == -1) { return(null); } if (ResourceLayoutTable.Pages[segment.OptionalPageIndex].CrcChecksum == -1) { return(null); } return(ReadSegmentData(resource, segment.OptionalPageIndex, segment.OptionalSegmentOffset, segment.OptionalSizeIndex)); }
public override object Execute(List <string> args) { if (args.Count > 2) { return(false); } var csvFileName = $"{Cache.Version.ToString()}_{Definition.MapId}_scripts.csv"; bool printToConsole = false; if (args.Count > 0 && args[0].ToLower() == "print") { printToConsole = true; if (args.Count == 2) { csvFileName = args[1]; } } else if (args.Count == 1) { csvFileName = args[0]; } var globals = new Dictionary <DatumHandle, string>(); CsvAdd("Globals", printToConsole); for (int index = 0; index < Definition.Globals.Count; index++) { CsvAdd($"{index:D4}," + $"{index:X4}," + $"{Definition.Globals[index].InitializationExpressionHandle:X8}," + $"{Definition.Globals[index].InitializationExpressionHandle.Salt:X4}," + $"{Definition.Globals[index].Name,-0x20}," + $"{GetHsTypeAsString(Cache.Version, Definition.Globals[index].Type)}", printToConsole); globals.Add(Definition.Globals[index].InitializationExpressionHandle, Definition.Globals[index].Name); } CsvAdd("Scripts", printToConsole); for (int index = 0; index < Definition.Scripts.Count; index++) { CsvAdd($"{index:D4}," + $"{index:X4}," + $"{Definition.Scripts[index].Type.ToString()}," + $"{GetHsTypeAsString(Cache.Version, Definition.Scripts[index].ReturnType)}," + $"{Definition.Scripts[index].ScriptName}," + $"A:{Definition.Scripts[index].RootExpressionHandle:X8}", printToConsole); } for (int index = 0; index < Definition.ScriptExpressions.Count; index++) { if (Definition.ScriptExpressions[index].Opcode == 0xBABA) { continue; } string scriptGroupName = ""; if (Definition.ScriptExpressions[index].NextExpressionHandle == DatumHandle.None && Definition.ScriptExpressions[index].Flags == HsSyntaxNodeFlags.Group && Definition.ScriptExpressions[index].Opcode == 0x0) { var relativeHsScript = Definition.Scripts.Find(x => x.RootExpressionHandle.Salt == Definition.ScriptExpressions[index].Identifier); if (relativeHsScript != null) { scriptGroupName = $",S:{relativeHsScript.ScriptName}"; } } DatumHandle expressionHandle = new DatumHandle((uint)((Definition.ScriptExpressions[index].Identifier << 16) + index)); if (globals.ContainsKey(expressionHandle)) { scriptGroupName = $"G:{globals[expressionHandle]}"; } string opcodeName = ""; if (ScriptExpressionIsValue(Definition.ScriptExpressions[index]) && ScriptInfo.ValueTypes[Cache.Version].ContainsKey(Definition.ScriptExpressions[index].Opcode)) { opcodeName = $"{ScriptInfo.ValueTypes[Cache.Version][Definition.ScriptExpressions[index].Opcode]},value"; } else if (ScriptInfo.Scripts[Cache.Version].ContainsKey(Definition.ScriptExpressions[index].Opcode)) { opcodeName = ScriptInfo.Scripts[Cache.Version][Definition.ScriptExpressions[index].Opcode].Name; } if ((Definition.ScriptExpressions[index].Flags == HsSyntaxNodeFlags.ScriptReference) || (index > 0 && Definition.ScriptExpressions[index - 1].Flags == HsSyntaxNodeFlags.ScriptReference)) { opcodeName = ""; } CsvAdd($"{index:D8}," + $"{((Definition.ScriptExpressions[index].Identifier << 16) | index):X8}," + $"{Definition.ScriptExpressions[index].NextExpressionHandle.Value:X8}," + $"{Definition.ScriptExpressions[index].Opcode:X4}," + $"{Definition.ScriptExpressions[index].Data[0]:X2}" + $"{Definition.ScriptExpressions[index].Data[1]:X2}" + $"{Definition.ScriptExpressions[index].Data[2]:X2}" + $"{Definition.ScriptExpressions[index].Data[3]:X2}," + $"{Definition.ScriptExpressions[index].Flags}," + $"{GetHsTypeAsString(Cache.Version, Definition.ScriptExpressions[index].ValueType)}," + $"{opcodeName}," + $"{scriptGroupName}", printToConsole); } CsvDumpQueueToFile(CsvQueue1, csvFileName); return(true); }
public virtual byte[] GetSecondaryResource(DatumHandle ID, int dataLength, int offset = 0, bool padding = false) { throw new NotImplementedException(); }
public virtual byte[] GetSoundRaw(DatumHandle ID, int size) { throw new NotImplementedException(); }
public virtual byte[] GetRawFromID(DatumHandle ID, int DataLength) { throw new NotImplementedException(); }
public byte[] GetRawFromID(DatumHandle ID) { return(GetRawFromID(ID, -1)); }
public static void Write(this BinaryWriter writer, DatumHandle value, EndianFormat format = EndianFormat.LittleEndian) { writer.Write(value.Value, format); }
public static byte[] GetXMAData(CacheFile cache, DatumHandle handle, int size) { return(cache.GetSoundRaw(handle, size)); }