public Level(Reader reader) { // Separate path components String dirname = Path.GetDirectoryName(reader.GetFilename()); String basename = "\\" + Path.GetFileNameWithoutExtension(reader.GetFilename()); String itmPath = dirname + basename + ".itm"; Reader ITMreader = new Reader(itmPath); Title = ITMreader.ReadRSDKString(); width = reader.ReadByte(); height = reader.ReadByte(); MapLayout = new ushort[height][]; for (int i = 0; i < height; i++) { MapLayout[i] = new ushort[width]; } // Read map data from the map file for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { MapLayout[y][x] = reader.ReadByte(); } } Music = ITMreader.ReadByte(); Background = ITMreader.ReadByte(); PlayerXpos = (ushort)(ITMreader.ReadByte() << 8); PlayerXpos |= ITMreader.ReadByte(); PlayerYPos = (ushort)(ITMreader.ReadByte() << 8); PlayerYPos |= ITMreader.ReadByte(); // Read objects from the item file int ObjCount = ITMreader.ReadByte() << 8; ObjCount |= ITMreader.ReadByte(); for (int i = 0; i < ObjCount; i++) { // Object type, 1 byte, unsigned int obj_type = ITMreader.ReadByte(); // Object subtype, 1 byte, unsigned int obj_subtype = ITMreader.ReadByte(); // X Position, 2 bytes, big-endian, signed int obj_xPos = ITMreader.ReadSByte() << 8; obj_xPos |= ITMreader.ReadByte(); // Y Position, 2 bytes, big-endian, signed int obj_yPos = ITMreader.ReadSByte() << 8; obj_yPos |= ITMreader.ReadByte(); // Add object objects.Add(new Object(obj_type, obj_subtype, obj_xPos, obj_yPos)); } reader.Close(); }