Пример #1
0
        }                                     // 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");
            }
        }
Пример #2
0
        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);
        }
Пример #3
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!");
            }
        }
Пример #4
0
        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>();
        }
Пример #5
0
        public override void Deserialise(MfcDeserialiser archive)
        {
            base.Deserialise(archive);

            X1 = archive.DeserialiseUInt16();
            Y1 = archive.DeserialiseUInt16();
            X2 = archive.DeserialiseUInt16();
            Y2 = archive.DeserialiseUInt16();

            archive.DeserialiseObjectNoHeader <TrailingBytes>();
        }
Пример #6
0
        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);
        }
Пример #7
0
        public override void Deserialise(MfcDeserialiser archive)
        {
            base.Deserialise(archive);

            X1 = archive.DeserialiseUInt16();
            Y1 = archive.DeserialiseUInt16();
            X2 = archive.DeserialiseUInt16();
            Y2 = archive.DeserialiseUInt16();

            archive.DeserialiseObjectNoHeader<TrailingBytes>();
        }
Пример #8
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!");
            }
        }
Пример #9
0
        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>();
        }
Пример #10
0
        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);
            }
        }
Пример #11
0
        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>();
        }
Пример #12
0
        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);
        }
Пример #13
0
        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>();
        }
Пример #14
0
        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>();
        }
Пример #15
0
        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);
        }
Пример #16
0
        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");
        }
Пример #17
0
        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>();
        }
Пример #18
0
 public override void Deserialise(MfcDeserialiser archive)
 {
     Name = archive.DeserialiseString();
     archive.DeserialiseObjectNoHeader<TrailingBytes>();
 }
Пример #19
0
 public override void Deserialise(MfcDeserialiser archive)
 {
     Name = archive.DeserialiseString();
     archive.DeserialiseObjectNoHeader <TrailingBytes>();
 }
Пример #20
0
 public abstract void Deserialise(MfcDeserialiser archive);
Пример #21
0
        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);
        }