internal static void DumpZoneDataMethod(object param) { var args = param as CacheFileOutputInfoArgs; string out_dir = Path.Combine(kTestResultsPath, @"\resource_dump\"); if (!Directory.Exists(out_dir)) { Directory.CreateDirectory(out_dir); } using (var handler = new CacheHandler <Blam.Halo3.CacheFileBase>(args.Game, args.MapPath)) { handler.Read(); var cache = handler.CacheInterface; string header_name = cache.Header.Name; if ((args.Game & BlamVersion.HaloOdst) == 0 && MapNeedsUniqueName(header_name)) { header_name = cache.GetUniqueName(); } var ci = cache.IndexHalo3[3]; // zone cache.InputStream.Seek(ci.Offset); using (var fs = File.Create(Path.Combine(out_dir, header_name) + ".zone")) { fs.Write(cache.InputStream.ReadBytes(532), 0, 532); } using (var sw = File.CreateText(Path.Combine(out_dir, header_name) + ".zone.txt")) { sw.WriteLine("Mask: {0:X}", cache.AddressMask); sw.WriteLine(); sw.WriteLine("Zone: {0:X}", ci.Offset); sw.WriteLine(); cache.InputStream.Seek(ci.Offset + 0x58); int count; sw.WriteLine("Count: {0:X}", count = cache.InputStream.ReadInt32()); var handles = new resource_handle[count]; handles.Initialize(); cache.InputStream.Seek(cache.InputStream.ReadPointer()); for (int x = 0; x < count; x++) { handles[x].Read(cache); handles[x].ToString(x, cache, sw); sw.WriteLine(); sw.Flush(); } handles = null; } } args.SignalFinished(); }
internal static void DumpZoneDataMethod(object param) { var args = param as CacheFileOutputInfoArgs; string out_dir = Path.Combine(kTestResultsPath, @"\resource_dump\"); if (!Directory.Exists(out_dir)) Directory.CreateDirectory(out_dir); using (var handler = new CacheHandler<Blam.Halo3.CacheFileBase>(args.Game, args.MapPath)) { handler.Read(); var cache = handler.CacheInterface; string header_name = cache.Header.Name; if ((args.Game & BlamVersion.HaloOdst) == 0 && MapNeedsUniqueName(header_name)) header_name = cache.GetUniqueName(); var ci = cache.IndexHalo3[3]; // zone cache.InputStream.Seek(ci.Offset); using (var fs = File.Create(Path.Combine(out_dir, header_name) + ".zone")) { fs.Write(cache.InputStream.ReadBytes(532), 0, 532); } using (var sw = File.CreateText(Path.Combine(out_dir, header_name) + ".zone.txt")) { sw.WriteLine("Mask: {0:X}", cache.AddressMask); sw.WriteLine(); sw.WriteLine("Zone: {0:X}", ci.Offset); sw.WriteLine(); cache.InputStream.Seek(ci.Offset + 0x58); int count; sw.WriteLine("Count: {0:X}", count = cache.InputStream.ReadInt32()); var handles = new resource_handle[count]; handles.Initialize(); cache.InputStream.Seek(cache.InputStream.ReadPointer()); for (int x = 0; x < count; x++) { handles[x].Read(cache); handles[x].ToString(x, cache, sw); sw.WriteLine(); sw.Flush(); } handles = null; } } args.SignalFinished(); }