public RbyTileset(Rby game, byte id, ByteStream data) { Game = game; Id = id; Bank = data.u8(); BlockPointer = data.u16le(); GfxPointer = data.u16le(); CollisionPointer = data.u16le(); CounterTiles = data.Read(3); GrassTile = data.u8(); data.Seek(1); TilePairCollisionsLand = new List <RbyTilePairCollision>(); TilePairCollisionsWater = new List <RbyTilePairCollision>(); LandPermissions = new PermissionSet(); LandPermissions.AddRange(game.ROM.From((game is Yellow ? 0x01 : 0x00) << 16 | CollisionPointer).Until(0xff)); WaterPermissions = new PermissionSet(); WaterPermissions.Add(0x14); WaterPermissions.Add(0x32); if (id == 14) { WaterPermissions.Add(0x48); } }
public RbyTileset(Rby game, byte id, ReadStream data) { Game = game; Id = id; Bank = data.u8(); BlockPointer = data.u16le(); GfxPointer = data.u16le(); CollisionPointer = data.u16le(); CounterTiles = data.Read(3); GrassTile = data.u8(); data.Seek(1); TilePairCollisionsLand = new List <int>(); TilePairCollisionsWater = new List <int>(); LandPermissions = new PermissionSet(); LandPermissions.AddRange(game.ROM.From((game.IsYellow ? 0x01 : 0x00) << 16 | CollisionPointer).Until(0xff, false)); WaterPermissions = new PermissionSet(); WaterPermissions.Add(0x14); WaterPermissions.Add(0x32); if (id == 14) { WaterPermissions.Add(0x48); } WarpTiles = game.ROM.From(3 << 16 | game.ROM.u16le(game.SYM["WarpTileIDPointers"] + id * 2)).Until(0xff, false); ReadStream stream = game.ROM.From("DoorTileIDPointers"); DoorTiles = new byte[0]; for (; ;) { byte tileset = stream.u8(); ushort pointer = stream.u16le(); if (tileset == 0xff) { break; } if (tileset == Id) { DoorTiles = game.ROM.From(6 << 16 | pointer).Until(0x00, false); } } }