public sprHitbox(Reader reader, bool bitflipped = false) { Left = reader.ReadSByte(); Top = reader.ReadSByte(); Right = reader.ReadSByte(); Bottom = reader.ReadSByte(); if (bitflipped) { byte l = (byte)Left; byte r = (byte)Right; byte b = (byte)Bottom; byte t = (byte)Top; l ^= 255; t ^= 255; r ^= 255; b ^= 255; Left = (sbyte)l; Right = (sbyte)r; Bottom = (sbyte)b; Top = (sbyte)t; } }
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(); }