예제 #1
0
파일: Map.cs 프로젝트: xdanieldzd/G15Map
        public Map(BinaryReader reader, byte mapGroup)
        {
            RomOffset   = reader.BaseStream.Position;
            ParentGroup = mapGroup;

            RomBank         = reader.ReadByte();
            Tileset         = reader.ReadByte();
            Type            = reader.ReadByte();
            HeaderPointer   = reader.ReadUInt16();
            TownMapLocation = reader.ReadByte();
            Unknown1        = reader.ReadByte();
            Unknown2        = reader.ReadByte();

            if (!IsValid)
            {
                return;
            }

            long positionBackup = reader.BaseStream.Position;

            reader.BaseStream.Position = GameHelpers.CalculateOffset(RomBank, HeaderPointer);
            PrimaryHeader = new PrimaryMapHeader(reader);

            reader.BaseStream.Position = GameHelpers.CalculateOffset((byte)(reader.BaseStream.Position >> 14), PrimaryHeader.SecondaryHeaderPointer);
            SecondaryHeader            = new SecondaryMapHeader(reader);

            reader.BaseStream.Position = GameHelpers.CalculateOffset((byte)(reader.BaseStream.Position >> 14), PrimaryHeader.MapDataPointer);
            MapData = reader.ReadBytes(PrimaryHeader.Width * PrimaryHeader.Height);

            reader.BaseStream.Position = positionBackup;
        }
예제 #2
0
        public Tileset(BinaryReader reader)
        {
            Bank                 = reader.ReadByte();
            BlockDataPointer     = reader.ReadUInt16();
            TileDataPointer      = reader.ReadUInt16();
            CollisionDataPointer = reader.ReadUInt16();
            AnimationDataPointer = reader.ReadUInt16();
            Unknown0x09          = reader.ReadByte();
            Unknown0x0A          = reader.ReadByte();

            long positionBackup = reader.BaseStream.Position;

            reader.BaseStream.Position = GameHelpers.CalculateOffset(Bank, BlockDataPointer);
            BlockData = reader.ReadBytes(BlockDataSize);

            reader.BaseStream.Position = GameHelpers.CalculateOffset(Bank, TileDataPointer);
            TileData = reader.ReadBytes(TileDataSize);

            reader.BaseStream.Position = GameHelpers.CalculateOffset(Bank, CollisionDataPointer);
            CollisionData = reader.ReadBytes(CollisionDataSize);

            reader.BaseStream.Position = positionBackup;
        }