public void SaveD15PigFile() { Descent1PIGFile piggie = new Descent1PIGFile(); using (var file = File.OpenRead(PigFileLocation)) { piggie.Read(file); } byte[] newFileBytes = null; //using (var newFile = File.OpenWrite(@"D:\GOG Games\Descent\DESCENT.PIG")) { piggie.Write(newFile); } using (MemoryStream ms = new MemoryStream()) { piggie.Write(ms); // Now compare the bytes ms.Position = 0; newFileBytes = ms.ToArray(); } var realBytes = File.ReadAllBytes(PigFileLocation); Assert.AreEqual(realBytes.Length, newFileBytes.Length); Assert.AreEqual(realBytes, newFileBytes); }
public void LoadD15PigFile() { Descent1PIGFile piggie = new Descent1PIGFile(); using (var file = File.OpenRead(PigFileLocation)) { piggie.Read(file); } }
public void SwapModelsTest() { Descent1PIGFile piggie = new Descent1PIGFile(); using (var file = File.OpenRead(PigFileLocation)) { piggie.Read(file); } piggie.Models[5] = piggie.Models[2]; using (var newFile = File.OpenWrite(@"D:\GOG Games\Descent\DESCENT.PIG")) { piggie.Write(newFile); } }
public static void DumpDescent1PIGToBBM(Descent1PIGFile pigFile, Palette palette, string outputFilename) { LBMDecoder encoder = new LBMDecoder(); string directory = Path.GetDirectoryName(outputFilename); int numFrames = 0; PIGImage[] frames = new PIGImage[50]; PIGImage image; for (int i = 0; i < pigFile.Bitmaps.Count; i++) { if (pigFile.Bitmaps[i].IsAnimated) //Special animation hacks { image = pigFile.Bitmaps[i]; if (image.Frame == 0) //Start at the first frame { numFrames = 0; frames[numFrames++] = image; if ((i + 1) >= pigFile.Bitmaps.Count) { return; //out of images } while (image.Name == pigFile.Bitmaps[i + 1].Name) { frames[numFrames] = pigFile.Bitmaps[i + 1]; i++; numFrames++; if ((i + 1) >= pigFile.Bitmaps.Count) { break; //out of images } } BinaryWriter bw = new BinaryWriter(File.OpenWrite(string.Format("{0}{1}{2}.abm", directory, Path.DirectorySeparatorChar, image.Name))); encoder.WriteABM(frames, numFrames, palette, bw); bw.Close(); bw.Dispose(); } } else { image = pigFile.Bitmaps[i]; BinaryWriter bw = new BinaryWriter(File.OpenWrite(string.Format("{0}{1}{2}.bbm", directory, Path.DirectorySeparatorChar, image.Name))); encoder.WriteBBM(image, palette, bw); bw.Close(); bw.Dispose(); } } }
public static EditorHAMFile TranslatePIGToHam(Descent1PIGFile pigfile, PIGFile convertedPigFile) { HAMFile file = new HAMFile(); foreach (ushort texture in pigfile.Textures) { file.Textures.Add(texture); } foreach (TMAPInfo tmapInfo in pigfile.TMapInfo) { file.TMapInfo.Add(tmapInfo); } for (int i = 0; i < pigfile.SoundIDs.Length; i++) { file.Sounds[i] = pigfile.SoundIDs[i]; } for (int i = 0; i < pigfile.AltSounds.Length; i++) { file.AltSounds[i] = pigfile.AltSounds[i]; } foreach (VClip clip in pigfile.VClips) { file.VClips.Add(clip); } foreach (EClip clip in pigfile.EClips) { file.EClips.Add(clip); } foreach (WClip clip in pigfile.WClips) { file.WClips.Add(clip); } foreach (Robot robot in pigfile.Robots) { file.Robots.Add(robot); } foreach (JointPos joint in pigfile.Joints) { file.Joints.Add(joint); } foreach (Weapon weapon in pigfile.Weapons) { if (weapon.ModelNum == 255) { weapon.ModelNum = 0; } if (weapon.ModelNumInner == 255) { weapon.ModelNumInner = 0; } file.Weapons.Add(weapon); } foreach (Polymodel model in pigfile.Models) { if (model != null) { file.Models.Add(model); } } foreach (ushort gauge in pigfile.Gauges) { file.Gauges.Add(gauge); file.GaugesHires.Add(gauge); } foreach (ushort cockpit in pigfile.Cockpits) { file.Cockpits.Add(cockpit); } for (int i = 0; i < pigfile.ObjBitmaps.Length; i++) { file.ObjBitmaps.Add(pigfile.ObjBitmaps[i]); file.ObjBitmapPointers.Add(pigfile.ObjBitmapPointers[i]); } foreach (Powerup powerup in pigfile.Powerups) { file.Powerups.Add(powerup); } file.PlayerShip = pigfile.PlayerShip; file.Reactors.Add(pigfile.reactor); file.FirstMultiBitmapNum = pigfile.FirstMultiBitmapNum; for (int i = 0; i < pigfile.BitmapXLATData.Length; i++) { file.BitmapXLATData[i] = pigfile.BitmapXLATData[i]; } EditorHAMFile res = new EditorHAMFile(file, convertedPigFile); res.CreateLocalLists(); res.GenerateDefaultNamelists(); res.TranslateData(); return(res); }