/// <summary> /// Try to read the Patch metadata from the file and add this data to table lists. /// </summary> private bool TryParseDefs(Blob metadata, ref int offset, String defPath) { UInt32 cookie = 0; while ((metadata.Content.Count > offset + 8) && metadata.TryGetUInt32(ref cookie, ref offset)) { if (cookie == OpTable3d)//TODO CONDITIONALLY READ LUTS! { string metaString = null; uint metaOffset = 0; if (metadata.TryGetUInt32(ref metaOffset, ref offset)) { if (this.TryReadDefString(metadata, out metaString, ref offset)) { Blob tableBlob; this.parentMod.TryGetMetaBlob(metaOffset, 10, out tableBlob, this.parentMod.blobList.Blobs); LookupTable3D lut = new LookupTable3D(metaString, tableBlob, metaOffset); if (metaString != null) { RomLutList.Add(lut); } } else { Trace.WriteLine("Invalid definition found."); return(false); } } else { Trace.WriteLine("Invalid definition found."); return(false); } } else if (cookie == OpTable2d)//TODO CONDITIONALLY READ LUTS! { string metaString = null; uint metaOffset = 0; if (metadata.TryGetUInt32(ref metaOffset, ref offset)) { if (this.TryReadDefString(metadata, out metaString, ref offset)) { Blob tableBlob; this.parentMod.TryGetMetaBlob(metaOffset, 10, out tableBlob, this.parentMod.blobList.Blobs); LookupTable2D lut = new LookupTable2D(metaString, tableBlob, metaOffset); if (metaString != null) { RomLutList.Add(lut); } } else { Trace.WriteLine("Invalid definition found."); return(false); } } else { Trace.WriteLine("Invalid definition found."); return(false); } } else if (cookie == OpTable1d) { string metaString = null; uint metaOffset = 0; if (metadata.TryGetUInt32(ref metaOffset, ref offset)) { if (this.TryReadDefString(metadata, out metaString, ref offset)) { LookupTable lut = new LookupTable(metaString, metaOffset); if (metaString != null) { RomLutList.Add(lut); } } else { Trace.WriteLine("Invalid definition found."); return(false); } } else { Trace.WriteLine("Invalid definition found."); return(false); } } else if (cookie == OpRAM) { string paramName = null; string paramId = null; string paramType = null; uint paramOffset = 0; if (metadata.TryGetUInt32(ref paramOffset, ref offset)) { if (this.TryReadDefString(metadata, out paramId, ref offset)) { if (this.TryReadDefString(metadata, out paramType, ref offset)) { if (this.TryReadDefString(metadata, out paramName, ref offset)) { // found modName, output to string! KeyValuePair <String, TableMetaData> tempTable = CreateRomRaiderRamTable(paramName, (int)paramOffset, paramId, paramType); if (tempTable.Key != null) { this.RamTableList.Add(tempTable.Key, tempTable.Value); } } else { Trace.WriteLine("Invalid definition found in mod metadata."); return(false); } } else { Trace.WriteLine("Invalid definition found in mod metadata."); return(false); } } else { Trace.WriteLine("Invalid definition found in mod metadata."); return(false); } } else { Trace.WriteLine("Invalid definition found in mod metadata."); return(false); } } else if (cookie == OpRAMAllBits) { string paramName = null; string paramId = null; string paramType = null; uint paramOffset = 0; if (metadata.TryGetUInt32(ref paramOffset, ref offset)) { if (this.TryReadDefString(metadata, out paramId, ref offset)) { if (this.TryReadDefString(metadata, out paramType, ref offset)) { if (this.TryReadDefString(metadata, out paramName, ref offset)) { // found modName, output to string! int len = Utils.ConvertStorageTypeToIntBytes(paramType); uint address = paramOffset; for (int i = 0; i < len; i++) { for (int j = 0; j < 8; j++) { int bit = ((j) + (8 * (i))); string bitstring = bit.ToString(); KeyValuePair <String, TableMetaData> tempTable = CreateRomRaiderRamTableBit(paramName + " Bit " + bitstring, (int)address, paramId, j); if (tempTable.Key != null) { this.RamTableList.Add(tempTable.Key, tempTable.Value); } } address++; } } else { Trace.WriteLine("Invalid definition found in mod metadata."); return(false); } } else { Trace.WriteLine("Invalid definition found in mod metadata."); return(false); } } else { Trace.WriteLine("Invalid definition found in mod metadata."); return(false); } } else { Trace.WriteLine("Invalid definition found in mod metadata."); return(false); } } else if (cookie == OpRAMBit) { string paramName = null; string paramId = null; uint paramOffset = 0; uint paramBit = 0; if (metadata.TryGetUInt32(ref paramOffset, ref offset)) { if (this.TryReadDefString(metadata, out paramId, ref offset)) { if (metadata.TryGetUInt32(ref paramBit, ref offset)) { if (this.TryReadDefString(metadata, out paramName, ref offset)) { int bit = bit = Utils.SingleBitBitmaskToBit((int)paramBit); // found modName, output to string! KeyValuePair <String, TableMetaData> tempTable = CreateRomRaiderRamTableBit(paramName, (int)paramOffset, paramId, bit); if (tempTable.Key != null) { this.RamTableList.Add(tempTable.Key, tempTable.Value); } } else { Trace.WriteLine("Invalid definition found in mod metadata."); return(false); } } else { Trace.WriteLine("Invalid definition found in mod metadata."); return(false); } } else { Trace.WriteLine("Invalid definition found in mod metadata."); return(false); } } else { Trace.WriteLine("Invalid definition found in mod metadata."); return(false); } } else if (cookie == Mod.endoffile) { break; } } return(true); }
/// <summary> /// Try to read the Patch metadata from the file and add this data to table lists. /// </summary> private bool TryParseDefs(Blob metadata, ref int offset, String defPath) { UInt32 cookie = 0; while ((metadata.Content.Count > offset + 8) && metadata.TryGetUInt32(ref cookie, ref offset)) { if (cookie == OpTable3d)//TODO CONDITIONALLY READ LUTS! { string metaString = null; uint metaOffset = 0; if (this.TryReadDefData(metadata, out metaString, out metaOffset, ref offset)) { Blob tableBlob; this.parentMod.TryGetMetaBlob(metaOffset, 10, out tableBlob, this.parentMod.blobList.Blobs); Lut3D lut = new Lut3D(metaString, tableBlob, metaOffset); if (metaString != null) { RomLutList.Add(lut); } } else { Trace.WriteLine("Invalid definition found."); return(false); } } else if (cookie == OpTable2d)//TODO CONDITIONALLY READ LUTS! { string metaString = null; uint metaOffset = 0; if (this.TryReadDefData(metadata, out metaString, out metaOffset, ref offset)) { Blob tableBlob; this.parentMod.TryGetMetaBlob(metaOffset, 10, out tableBlob, this.parentMod.blobList.Blobs); Lut2D lut = new Lut2D(metaString, tableBlob, metaOffset); if (metaString != null) { RomLutList.Add(lut); } } else { Trace.WriteLine("Invalid definition found."); return(false); } } else if (cookie == OpTable1d) { string metaString = null; uint metaOffset = 0; if (this.TryReadDefData(metadata, out metaString, out metaOffset, ref offset)) { Lut lut = new Lut(metaString, metaOffset); if (metaString != null) { RomLutList.Add(lut); } } else { Trace.WriteLine("Invalid definition found."); return(false); } } else if (cookie == OpRAM) { string paramName = null; string paramId = null; uint paramOffset = 0; uint paramLenght = 0; if (this.TryReadDefData(metadata, out paramId, out paramOffset, ref offset)) { if (this.TryReadDefData(metadata, out paramName, out paramLenght, ref offset)) { // found modName, output to string! KeyValuePair <String, Table> tempTable = CreateRomRaiderRamTable(paramName, (int)paramOffset, paramId, (int)paramLenght); if (tempTable.Key != null) { this.RamTableList.Add(tempTable.Key, tempTable.Value); } } } else { Trace.WriteLine("Invalid definition found."); return(false); } } else if (cookie == Mod.endoffile) { break; } } return(true); }