private static string processFile(string path) { BMAP bmap = new BMAP(); string extension = Path.GetExtension(path).Substring(1); string outputName; if (settings.Raw) { if (Raw.IsValid(path)) { Console.WriteLine($"Loading : {Path.GetFileName(path)}"); Raw.Load(path, true); return(path); } } else if (settings.Compress) { if (Enum.TryParse(extension, out WreckfestExtensions we)) { using (MemoryStream ms = new MemoryStream(File.ReadAllBytes(path))) using (BinaryReader br = new BinaryReader(ms)) { if ( br.ReadInt32() != 4 || br.ReadByte() != extension[3] || br.ReadByte() != extension[2] || br.ReadByte() != extension[1] || br.ReadByte() != extension[0]) { br.BaseStream.Position = 0; byte[] input = br.ReadBytes((int)ms.Length); File.Move(path, $"{path}.bak"); using (BinaryWriter bw = new BinaryWriter(new FileStream(path, FileMode.Create))) { bw.Write(4); bw.Write(extension[3]); bw.Write(extension[2]); bw.Write(extension[1]); bw.Write(extension[0]); bw.Write((int)we); int[] hashTable = new int[1 << (14 - 2)]; byte[] output = new byte[LZ4Compress.CalculateChunkSize(input.Length)]; int i = 0; while (i < input.Length) { byte[] chunk = new byte[Math.Min(input.Length - i, output.Length)]; Array.Copy(input, i, chunk, 0, chunk.Length); Array.Clear(hashTable, 0, hashTable.Length); int size = LZ4Compress.Compress(hashTable, chunk, output, chunk.Length, chunk.Length + 4); bw.Write(size); bw.Write(output, 0, size); i += chunk.Length; } } } else { Console.WriteLine($"Skipping : {Path.GetFileName(path)} is already compressed"); } } } else { Console.WriteLine($"Error : unsupported extension '{extension}'."); } } else if (extension == "bmap") { if (BMAP.IsBMAP(path)) { Console.WriteLine($"Loading : {Path.GetFileName(path)}"); bmap = BMAP.Load(path, false); outputName = $"{Path.GetFileNameWithoutExtension(path)}.{(bmap.Mode == 1 ? "clutter" : (bmap.DDS.Format == D3DFormat.A8R8G8B8 ? "raw" : bmap.DDS.Format.ToString().ToLower()))}.{settings.SaveAs}"; Console.WriteLine($"Saving : {outputName}"); if (!overwrite($@"{Path.GetDirectoryName(path)}\{outputName}")) { return(null); } bmap.SaveAs(outputName, settings.SaveAs); return(path); } } else if (extension == "dds") { string newExtension = $"{(settings.NoRename ? "" : ".x")}.bmap"; Console.WriteLine($"Loading : {Path.GetFileName(path)}"); Console.WriteLine($"Saving : {Path.GetFileNameWithoutExtension(path)}{newExtension}"); bmap.Path = Path.GetFileName(path); bmap.DDS = DDS.Load(path); if (!overwrite(path.Replace(".dds", newExtension))) { return(null); } bmap.Save(path.Replace(".dds", newExtension)); return(path); } else if (Array.IndexOf(new string[] { "png", "tga", "tif" }, extension) > -1) { Texture texture = null; Console.WriteLine($"Loading : {Path.GetFileName(path)}"); switch (extension) { case "tga": texture = TGA.Load(path); break; case "tif": case "png": texture = Texture.Load(path); break; } BreckfestSettings original = settings.Clone(); if (Path.GetFileNameWithoutExtension(path).EndsWith(".clutter", StringComparison.OrdinalIgnoreCase)) { settings.Clutter = true; path = path.Replace(".clutter", ""); } else if (Path.GetFileNameWithoutExtension(path).EndsWith(".raw", StringComparison.OrdinalIgnoreCase)) { settings.Format = D3DFormat.A8R8G8B8; path = path.Replace(".raw", ""); } else if (Path.GetFileNameWithoutExtension(path).EndsWith(".dxt1", StringComparison.OrdinalIgnoreCase)) { settings.Format = D3DFormat.DXT1; path = path.Replace(".dxt1", ""); } else if (Path.GetFileNameWithoutExtension(path).EndsWith(".dxt5", StringComparison.OrdinalIgnoreCase)) { settings.Format = D3DFormat.DXT5; path = path.Replace(".dxt5", ""); } bmap.Path = Path.GetFileName(path); if (settings.Clutter) { Console.WriteLine($"Cluttering: {texture.Bitmap.Width}x{texture.Bitmap.Height}"); bmap.Mode = 1; bmap.Raw = texture.Bitmap; } else { if (settings.Format == D3DFormat.A8R8G8B8) { Console.WriteLine($"Formatting: {texture.Bitmap.Width}x{texture.Bitmap.Height} (this might take awhile)"); } else { Console.WriteLine($"Squishing : {texture.Bitmap.Width}x{texture.Bitmap.Height} (this might take awhile)"); } bmap.DDS = new DDS(settings.Format, texture.Bitmap); } string newExtension = $"{(settings.NoRename ? "" : ".x")}.bmap"; Console.WriteLine($"Saving : {Path.GetFileNameWithoutExtension(path)}{newExtension}"); if (!overwrite(path.Replace($".{extension}", $"{newExtension}"))) { return(null); } bmap.Save(path.Replace($".{extension}", $"{newExtension}"), true); settings = original.Clone(); return(path); } return(null); }
public static new TGA Load(string path) { return(TGA.Load(File.ReadAllBytes(path))); }