static void Main(string[] args) { if (args.Length < 1) { System.Console.WriteLine("Usage: BlastCorpsConsole <DIR with .raw levels> [DIR to output <level>.txt]"); return; } string tmpDir = Path.GetTempPath(); string inputDir = args[0]; string outputDir = null; if (args.Length > 1) { outputDir = args[1]; System.Console.WriteLine("Outputing data to {0}", outputDir); } tmpDir = Path.Combine(tmpDir, "BlastCorps"); System.Console.WriteLine("Saving generated levels to: " + tmpDir); Directory.CreateDirectory(tmpDir); foreach (BlastCorpsLevelMeta levelMeta in BlastCorpsRom.levelMeta) { string inputFile = Path.Combine(inputDir, levelMeta.filename + ".raw"); string outputFile = Path.Combine(tmpDir, levelMeta.filename + ".raw"); byte[] inData = File.ReadAllBytes(inputFile); BlastCorpsLevel level = BlastCorpsLevel.decodeLevel(inData, inData); if (outputDir != null) { string txtFile = Path.Combine(outputDir, levelMeta.filename + ".txt"); using (StreamWriter writer = new StreamWriter(txtFile)) { level.Write(writer, levelMeta); } } byte[] outData = level.ToBytes(); FileStream outStream = File.OpenWrite(outputFile); outStream.Write(outData, 0, outData.Length); outStream.Close(); bool passed = true; if (levelMeta.id == 14) { StatusPrint(ConsoleColor.Yellow, "level14 fails square hole off", "0175A5"); } if (inData.Length != outData.Length) { StatusPrint(ConsoleColor.Red, "Fail", levelMeta.filename + ".raw, lengths differ: " + inData.Length + " -> " + outData.Length); passed = false; } for (int i = 0; i < Math.Min(inData.Length, outData.Length); i++) { if (inData[i] != outData[i]) { StatusPrint(ConsoleColor.Red, "Fail", levelMeta.filename + ".raw, mismatch at " + i.ToString("X6")); passed = false; break; } } if (passed) { StatusPrint(ConsoleColor.Green, "Pass", levelMeta.filename + ".raw"); } } }