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); } }
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); } }
public void LoadFrom(Stream stream) { BinaryReader reader = new BinaryReader(stream); weight = reader.ReadSingleArray(4); boneIndex = reader.ReadInt32Array(4); }
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()); }
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]); } }
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; }
// 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)); } }