예제 #1
0
        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();
        }
예제 #2
0
		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();
		}