예제 #1
0
        public static void CreateGameVariant(Stream output, GameVariant gameVariant)
        {
            Contract.Requires <ArgumentNullException>(output != null && gameVariant != null);
            Contract.Requires(output.CanWrite);

            gameVariant.Metadata.ContentType  = ContentType.GameVariant;
            gameVariant.Metadata.FileLength   = 0x7F29;
            gameVariant.Metadata.DateModified = DateTime.Now;

            if (gameVariant.Metadata.Engine == GameEngine.None)
            {
                gameVariant.Metadata.Engine = GameEngine.PVP;
            }

            var contentHeader      = new ContentHeader(gameVariant.Metadata);
            var multiplayerVariant = new MultiplayerVariant(gameVariant);

            var chdr = new Chunk("chdr", version: 10, flags: ChunkFlags.IsHeader, payload: contentHeader);
            var mpvr = new Chunk("mpvr", version: 132, flags: ChunkFlags.IsInitialized, payload: multiplayerVariant);

            var blob = new Blob(chdr, mpvr);

            using (var s = new BinaryStream(output, StreamState.Write, ByteOrder.BigEndian, false))
                s.Serialize(blob);
        }
예제 #2
0
        public static GameVariant ReadGameVariant(Stream input)
        {
            Contract.Requires <ArgumentNullException>(input != null);
            Contract.Requires(input.CanRead);

            input.Position = 0x2FC;
            var multiplayerVariant = new MultiplayerVariant(new GameVariant());

            using (var s = new BinaryStream(input, StreamState.Read, ByteOrder.BigEndian, false))
                (multiplayerVariant as ISerializable <BinaryStream>).SerializeObject(s);

            return(multiplayerVariant.VariantData);
        }