} // ID of CMerlinBsp on the right of the line (0xffff if none) public override void Deserialise(MfcDeserialiser archive) { base.Deserialise(archive); unknown01 = archive.DeserialiseUInt16(); unknown02 = archive.DeserialiseUInt16(); unknown03 = archive.DeserialiseUInt16(); unknown04 = archive.DeserialiseUInt16(); int unknownCount01 = archive.DeserialiseUInt16(); byte[] unknown64BitValue01 = archive.DeserialiseBytes(8); byte[] unknown64BitValue02 = archive.DeserialiseBytes(8); archive.DeserialiseObjectNoHeader <TrailingBytes>(); // Ensure unknown values are zero if (unknownCount01 != 0) { throw new InvalidOperationException("unknownCount01 != 0"); } if (unknown64BitValue01.Any(b => b != 0)) { throw new InvalidOperationException("unknown64BitValid01 non-zero"); } if (unknown64BitValue02.Any(b => b != 0)) { throw new InvalidOperationException("unknown64BitValid02 non-zero"); } }
public override void Deserialise(MfcDeserialiser archive) { base.Deserialise(archive); LeftTopTexture = archive.DeserialiseString(); RightTopTexture = archive.DeserialiseString(); LeftWallTexture = archive.DeserialiseString(); RightWallTexture = archive.DeserialiseString(); LeftBottomTexture = archive.DeserialiseString(); RightBottomTexture = archive.DeserialiseString(); BottomZ = archive.DeserialiseUInt16(); TopZ = archive.DeserialiseUInt16(); unknown16 = archive.DeserialiseUInt16(); unknown17 = archive.DeserialiseUInt16(); LeftTextureIsTransparent = archive.DeserialiseByte(); RightTextureIsTransparent = archive.DeserialiseByte(); EnableCollision = archive.DeserialiseByte(); unknown21 = archive.DeserialiseUInt16(); unknown22 = archive.DeserialiseByte(); LeftTextureOffset = archive.DeserialiseUInt16(); RightTextureOffset = archive.DeserialiseUInt16(); System.Diagnostics.Debug.Assert(unknown16 == 0); System.Diagnostics.Debug.Assert(unknown17 == 0); System.Diagnostics.Debug.Assert(unknown21 == 5); System.Diagnostics.Debug.Assert(unknown22 == 0); }
public override void Deserialise(MfcDeserialiser archive) { ushort byteCount = archive.DeserialiseUInt16(); trailingBytes = archive.DeserialiseBytes(byteCount); if (trailingBytes.Length > 0) { throw new InvalidDataException("Trailing byte block with non-zero length; investigate!"); } }
public override void Deserialise(MfcDeserialiser archive) { base.Deserialise(archive); X = archive.DeserialiseUInt16(); Y = archive.DeserialiseUInt16(); FacingDirection = (Rotation)archive.DeserialiseUInt16(); Z = archive.DeserialiseUInt16(); archive.DeserialiseObjectNoHeader<TrailingBytes>(); }
public override void Deserialise(MfcDeserialiser archive) { base.Deserialise(archive); X1 = archive.DeserialiseUInt16(); Y1 = archive.DeserialiseUInt16(); X2 = archive.DeserialiseUInt16(); Y2 = archive.DeserialiseUInt16(); archive.DeserialiseObjectNoHeader <TrailingBytes>(); }
public void TestDeserialiseMerlinStatic() { FileStream smallMazeFile = new FileStream(@"C:\Users\Philip\Desktop\HoverGame\HOVER\MAZES\MAZE1.MAZ", FileMode.Open); var classRegistry = new MfcClassRegistry(); classRegistry.RegisterClass("CMerlinStatic", typeof(CMerlinStatic)); classRegistry.RegisterClass("CMerlinLocation", typeof(CMerlinLocation)); MfcDeserialiser archive = new MfcDeserialiser(smallMazeFile, classRegistry); Maze maze = new Maze(); maze.Deserialise(archive); }
public override void Deserialise(MfcDeserialiser archive) { base.Deserialise(archive); X1 = archive.DeserialiseUInt16(); Y1 = archive.DeserialiseUInt16(); X2 = archive.DeserialiseUInt16(); Y2 = archive.DeserialiseUInt16(); archive.DeserialiseObjectNoHeader<TrailingBytes>(); }
public override void Deserialise(MfcDeserialiser archive) { base.Deserialise(archive); X = archive.DeserialiseUInt16(); Y = archive.DeserialiseUInt16(); FacingDirection = (Rotation)archive.DeserialiseUInt16(); Z = archive.DeserialiseUInt16(); archive.DeserialiseObjectNoHeader <TrailingBytes>(); }
public override void Deserialise(MfcDeserialiser archive) { base.Deserialise(archive); var flags = archive.DeserialiseUInt16(); this.HasTransparency = (flags & 1) != 0; if ((flags & ~1) != 0) { throw new NotImplementedException("Unexpected flag set in texture header"); } ushort mipmapCount = archive.DeserialiseUInt16(); this.Mipmaps = new List <MipMap>(mipmapCount); for (int i = 0; i < mipmapCount; i++) { MipMap mipmap = new MipMap(); var nextLargestHeight = archive.DeserialiseUInt16(); var imageHeight = archive.DeserialiseUInt16(); var nextLargestWidth = archive.DeserialiseUInt16(); var imageWidth = archive.DeserialiseUInt16(); mipmap.ImageDimensionsMinusOne = new Size(imageWidth, imageHeight); mipmap.ImageDimensions = new Size(nextLargestWidth, nextLargestHeight); mipmap.Level = archive.DeserialiseUInt16(); var imageDataLength = archive.DeserialiseUInt32(); mipmap.ImageData = archive.DeserialiseBytes((int)imageDataLength); int totalSpanCount = (int)archive.DeserialiseUInt32(); mipmap.PixelSpans = new List <List <PixelSpan> >(totalSpanCount); for (int y = 0; y < nextLargestHeight; y++) { ushort rowSpanCount = archive.DeserialiseUInt16(); var rowSpans = new List <PixelSpan>(rowSpanCount); for (int k = 0; k < rowSpanCount; k++) { ushort startIndex = archive.DeserialiseUInt16(); ushort endIndex = archive.DeserialiseUInt16(); rowSpans.Add(new PixelSpan(startIndex, endIndex)); } mipmap.PixelSpans.Add(rowSpans); } archive.DeserialiseObjectNoHeader <TrailingBytes>(); this.Mipmaps.Add(mipmap); } }
public override void Deserialise(MfcDeserialiser archive) { Palette = new Color[PALETTE_ENTRIES]; for (int i = 0; i < PALETTE_ENTRIES; i++) { int red = archive.DeserialiseByte(); int green = archive.DeserialiseByte(); int blue = archive.DeserialiseByte(); int alpha = archive.DeserialiseByte(); if (alpha != 0) throw new Exception(); Palette[i] = Color.FromArgb(alpha, red, green, blue); } Textures = archive.DeserialiseBuggyList<CMerlinTexture>(); archive.DeserialiseObjectNoHeader<TrailingBytes>(); }
static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); FileStream smallMazeFile = new FileStream(@"C:\Users\Philip\Desktop\HoverGame\HOVER\MAZES\small.MAZ", FileMode.Open); var classRegistry = new MfcClassRegistry(); classRegistry.AutoRegisterClasses(typeof(Maze).Assembly); MfcDeserialiser archive = new MfcDeserialiser(smallMazeFile, classRegistry); Maze maze = new Maze(); maze.Deserialise(archive); var form = new HoverForm(maze); MainLoop renderFrame = form.RunFrame; MessagePump.Run(form, renderFrame); }
public override void Deserialise(MfcDeserialiser archive) { // The strange order here is intentional and matches the order in the archive files MinY = archive.DeserialiseUInt16(); MinX = archive.DeserialiseUInt16(); MaxX = archive.DeserialiseUInt16(); MaxY = archive.DeserialiseUInt16(); Geometry = archive.DeserialiseBuggyList<CMerlinStatic>(); int unknownPadding = archive.DeserialiseUInt16(); if (unknownPadding != 0) throw new InvalidDataException("unknownPadding != 0; investigate!"); Locations = archive.DeserialiseBuggyList<CMerlinLocation>(); Bsp = archive.DeserialiseBuggyList<CMerlinBsp>(); }
public override void Deserialise(MfcDeserialiser archive) { Palette = new Color[PALETTE_ENTRIES]; for (int i = 0; i < PALETTE_ENTRIES; i++) { int red = archive.DeserialiseByte(); int green = archive.DeserialiseByte(); int blue = archive.DeserialiseByte(); int alpha = archive.DeserialiseByte(); if (alpha != 0) { throw new Exception(); } Palette[i] = Color.FromArgb(alpha, red, green, blue); } Textures = archive.DeserialiseBuggyList <CMerlinTexture>(); archive.DeserialiseObjectNoHeader <TrailingBytes>(); }
public override void Deserialise(MfcDeserialiser archive) { base.Deserialise(archive); unknown01 = archive.DeserialiseUInt16(); unknown02 = archive.DeserialiseUInt16(); unknown03 = archive.DeserialiseUInt16(); unknown04 = archive.DeserialiseUInt16(); int unknownCount01 = archive.DeserialiseUInt16(); byte[] unknown64BitValue01 = archive.DeserialiseBytes(8); byte[] unknown64BitValue02 = archive.DeserialiseBytes(8); archive.DeserialiseObjectNoHeader<TrailingBytes>(); // Ensure unknown values are zero if (unknownCount01 != 0) throw new InvalidOperationException("unknownCount01 != 0"); if (unknown64BitValue01.Any(b => b != 0)) throw new InvalidOperationException("unknown64BitValid01 non-zero"); if (unknown64BitValue02.Any(b => b != 0)) throw new InvalidOperationException("unknown64BitValid02 non-zero"); }
override public void Deserialise(MfcDeserialiser archive) { // The strange order here is intentional and matches the order in the archive files MinY = archive.DeserialiseUInt16(); MinX = archive.DeserialiseUInt16(); MaxX = archive.DeserialiseUInt16(); MaxY = archive.DeserialiseUInt16(); Geometry = archive.DeserialiseBuggyList <CMerlinStatic>(); int unknownPadding = archive.DeserialiseUInt16(); if (unknownPadding != 0) { throw new InvalidDataException("unknownPadding != 0; investigate!"); } Locations = archive.DeserialiseBuggyList <CMerlinLocation>(); Bsp = archive.DeserialiseBuggyList <CMerlinBsp>(); }
public override void Deserialise(MfcDeserialiser archive) { Name = archive.DeserialiseString(); archive.DeserialiseObjectNoHeader<TrailingBytes>(); }
public override void Deserialise(MfcDeserialiser archive) { Name = archive.DeserialiseString(); archive.DeserialiseObjectNoHeader <TrailingBytes>(); }
public abstract void Deserialise(MfcDeserialiser archive);