Esempio n. 1
0
    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);
        }
    }
Esempio n. 2
0
    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);
            }
        }
    }