Esempio n. 1
0
        private void InternalRead(BinaryReader reader, int fp)
        {
            name = reader.ReadCString(NAME_LENGTH);
            ushort numDialogs = reader.ReadUInt16();
            _actorIndex = (reader.ReadInt16());

            if (_actorIndex != -1)
            {
                // High bit is a special flag?
                _actorIndex = (short)(_actorIndex & 0x7FFF);
            }

            int[] pagePointerTable = reader.ReadInt32Array(numDialogs);
            int pageDataLength = reader.ReadInt32();

            dialogs = new BMDDialog[numDialogs];
            for (int i = 0; i < numDialogs; i++)
            {
                reader.BaseStream.Seek(fp + BMDFile.DATA_START_ADDRESS + pagePointerTable[i], SeekOrigin.Begin);
                dialogs[i] = new BMDDialog(reader);
            }
        }
Esempio n. 2
0
        private void InternalRead(BinaryReader reader, int fp)
        {
            name = reader.ReadCString(NAME_LENGTH);
            _field18 = reader.ReadUInt16();
            ushort numChoices = reader.ReadUInt16();

            if (_field18 != 0)
            {
                throw new NotImplementedException("_unk0x18 is not zero!");
            }

            // unknown zero 4 bytesz
            reader.BaseStream.Seek(4, SeekOrigin.Current);

            int[] pagePointerTable = reader.ReadInt32Array(numChoices);
            int pageDataLength = reader.ReadInt32();

            dialogs = new BMDDialog[numChoices];
            for (int i = 0; i < numChoices; i++)
            {
                reader.BaseStream.Seek(fp + BMDFile.DATA_START_ADDRESS + pagePointerTable[i], SeekOrigin.Begin);
                dialogs[i] = new BMDDialog(reader);
            }
        }
Esempio n. 3
0
 public void LoadFrom(Stream stream)
 {
     BinaryReader reader = new BinaryReader(stream);
     weight = reader.ReadSingleArray(4);
     boneIndex = reader.ReadInt32Array(4);
 }
Esempio n. 4
0
        public void LoadFrom(Stream stream)
        {
            BinaryReader reader = new BinaryReader(stream);

            int numBools = reader.ReadInt32();
            m_BoolValues = new bool[numBools];
            for (int i = 0; i < numBools; i++)
            {
                m_BoolValues[i] = reader.ReadBoolean();
            }
            if ((numBools & 3) > 0)
            {
                reader.ReadBytes(4 - (numBools & 3));
            }

            m_IntValues = reader.ReadInt32Array(reader.ReadInt32());
            m_FloatValues = reader.ReadSingleArray(reader.ReadInt32());
            m_PositionValues = reader.ReadVector4Array(reader.ReadInt32());
            m_QuaternionValues = reader.ReadVector4Array(reader.ReadInt32());
            m_ScaleValues = reader.ReadVector4Array(reader.ReadInt32());
        }
Esempio n. 5
0
        private void InternalRead(BinaryReader reader)
        {
            long posFileStart = reader.GetPosition();
            short flag = reader.ReadInt16();
            short userID = reader.ReadInt16();
            int length = reader.ReadInt32();
            string tag = reader.ReadCString(4);
            reader.AlignPosition(16);

            if (tag != TAG)
            {
                throw new InvalidDataException();
            }

            int addressRelocTableOffset = reader.ReadInt32();
            int addressRelocTableSize = reader.ReadInt32();
            int numMessages = reader.ReadInt32();
            short isRelocated = reader.ReadInt16(); // actually a byte but not very important
            short unk0x1E = reader.ReadInt16();

            /*
            if (unk0x1C != UNK_CONSTANT)
            {
                Console.WriteLine("_unk0x1C isn't 0x20000");
            }
            */

            BMDMessageTable[] messagePointerTable = new BMDMessageTable[numMessages];
            for (int i = 0; i < messagePointerTable.Length; i++)
            {
                messagePointerTable[i].Type = (BMDMessageType)reader.ReadInt32();
                messagePointerTable[i].Offset = reader.ReadInt32();
            }

            int actorNamePointerTableOffset = reader.ReadInt32();
            int numActors = reader.ReadInt32();

            reader.BaseStream.Seek(posFileStart + DATA_START_ADDRESS + actorNamePointerTableOffset, SeekOrigin.Begin);
            int[] actorNamePointerTable = reader.ReadInt32Array(numActors);

            _actorNames = new string[numActors];
            for (int i = 0; i < _actorNames.Length; i++)
            {
                reader.BaseStream.Seek(posFileStart + DATA_START_ADDRESS + actorNamePointerTable[i], SeekOrigin.Begin);
                _actorNames[i] = reader.ReadCString();
            }

            _messages = new BMDMessage[numMessages];
            for (int i = 0; i < _messages.Length; i++)
            {
                _messages[i] = BMDMessageFactory.GetMessage(reader, (int)posFileStart, messagePointerTable[i]);
            }
        }
Esempio n. 6
0
        public static TerrainTile ReadTile(SimpleTerrain terrain, int tileX, int tileY)
        {
            var filePath = SimpleTileWriter.GetFileName(terrain.MapId, tileX, tileY);
            if (!File.Exists(filePath))
            {
                return null;
            }

            TerrainTile tile;

            using(var file = File.OpenRead(filePath))
            using(var reader = new BinaryReader(file))
            {
                var fileType = reader.ReadString();
                if (fileType != SimpleTileWriter.FileTypeId)
                {
                    throw new InvalidDataException(string.Format("ADT file not in valid format: {0}", filePath));
                }

                var version = reader.ReadInt32();
                if (version != SimpleTileWriter.Version)
                {
                    // invalid version -> File is outdated
                    return null;
                }

                tile = new TerrainTile(tileX, tileY, terrain);

                terrain.m_IsWmoOnly = reader.ReadBoolean();
                tile.TerrainVertices = reader.ReadVector3Array();
                tile.TerrainIndices = reader.ReadInt32Array();

                // Write liquid information
                var hasLiquids = reader.ReadBoolean();

                if (hasLiquids)
                {
                    tile.LiquidChunks = new TerrainLiquidChunk[TerrainConstants.ChunksPerTileSide,TerrainConstants.ChunksPerTileSide];
                    for (var xc = 0; xc < TerrainConstants.ChunksPerTileSide; xc++)
                    {
                        for (var yc = 0; yc < TerrainConstants.ChunksPerTileSide; yc++)
                        {
                            var type = (LiquidType) reader.ReadInt32();
                            if (type != LiquidType.None)
                            {
                                var chunk = tile.LiquidChunks[xc, yc] = new TerrainLiquidChunk();
                                chunk.Type = type;

                                // read heightmap
                                chunk.OffsetX = reader.ReadByte();
                                chunk.OffsetY = reader.ReadByte();
                                chunk.Width = reader.ReadByte();
                                chunk.Height = reader.ReadByte();

                                chunk.Heights = new float[chunk.Width + 1, chunk.Height + 1];
                                for (var x = 0; x <= chunk.Width; x++)
                                {
                                    for (var y = 0; y <= chunk.Height; y++)
                                    {
                                        chunk.Heights[x, y] = reader.ReadSingle();
                                    }
                                }
                            }
                        }
                    }
                }
            }

            return tile;
        }
Esempio n. 7
0
        // Private Methods
        private void InternalRead(BinaryReader reader)
        {
            int posFileStart = (int)reader.BaseStream.Position;
            short flag = reader.ReadInt16();
            short userID = reader.ReadInt16();
            int length = reader.ReadInt32();
            string tag = reader.ReadCString(4);
            int unused = reader.ReadInt32();

            if (tag != TAG)
            {
                throw new InvalidDataException();
            }

            int numTextures = reader.ReadInt32();
            int[] texturePointerTable = reader.ReadInt32Array(numTextures);

            _textures = new List<TMXFile>(numTextures);
            for (int i = 0; i < numTextures; i++)
            {
                reader.BaseStream.Seek(posFileStart + texturePointerTable[i], SeekOrigin.Begin);
                _textures.Add(TMXFile.Load(reader.BaseStream, true));
            }
        }