Example #1
0
        /// <summary>
        /// Returns the tile, gfxpage, and attribute for the subtile in tile (index).
        /// </summary>
        /// <param name="index"></param>
        /// <param name="subtile"></param>
        /// <returns></returns>
        public TilePageAttribute GetSubTile(int index, int subtile)
        {
            if (index < 0 || index >= TilesPerSet)
            {
                return(TilePageAttribute.Zero);
            }
            TilePage          value  = m_Tilegfx.GetTileAndPageFromIndex(m_Metatiles[index][subtile]);
            TilePageAttribute value2 = new TilePageAttribute(value.Tile, value.Page, m_Attributes[index]);

            return(value2);
        }
Example #2
0
    private bool ParseTilePage(ref List <RawToken> .Enumerator tokenEnumerator, string path)
    {
        Assert.AreEqual("TILE_PAGE", tokenEnumerator.Current.Token);

        string pageName = tokenEnumerator.Current.Parameters[0];

        path = Path.GetDirectoryName(path);
        int tileWidth  = 0;
        int tileHeight = 0;
        int pageWidth  = 0;
        int pageHeight = 0;

        bool rawLeft = true;

        while (rawLeft = tokenEnumerator.MoveNext())
        {
            var token = tokenEnumerator.Current;
            switch (tokenEnumerator.Current.Token)
            {
            case "CREATURE_GRAPHICS":
            case "TILE_PAGE":
                goto loopExit;

            case "FILE":
                path = Path.Combine(path, token.Parameters[0]);
                break;

            case "TILE_DIM":
                tileWidth  = int.Parse(token.Parameters[0]);
                tileHeight = int.Parse(token.Parameters[1]);
                break;

            case "PAGE_DIM":
                pageWidth  = int.Parse(token.Parameters[0]);
                pageHeight = int.Parse(token.Parameters[1]);
                break;

            default:
                break;
            }
        }
loopExit:
        TilePage page = new TilePage(path, pageName, tileWidth, tileHeight, pageWidth, pageHeight);

        tilePageIndices[pageName] = tilePages.Count;
        tilePages.Add(page);

        return(rawLeft);
    }
Example #3
0
        public void Serialize(BinaryFileWriter writer)
        {
            m_Tilegfx.Consolidate(m_Metatiles);

            writer.Write(c_SerializeIdentifier);
            writer.Write((int)0); // version

            writer.Write(m_PaletteZero);
            for (int i = 0; i < 4; i++)
            {
                writer.Write(m_Palettes[i]);
            }
            for (int i = 0; i < 3; i++)
            {
                writer.Write((byte)0);
            }

            writer.Write((int)m_Tilegfx.CurrentIndex);
            writer.Write((int)m_Tilegfx.Count);
            for (int i = 0; i < m_Tilegfx.Count; i++)
            {
                TilePage value = m_Tilegfx[i];
                writer.Write((int)i);
                writer.Write((byte)value.Tile);
                writer.Write((byte)value.Page);
            }

            for (int i = 0; i < TilesPerSet; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    writer.Write((int)m_Metatiles[i][j]);
                }
                writer.Write((byte)m_Bitfields[i]);
                writer.Write((byte)m_Attributes[i]);
            }
        }
Example #4
0
        public void Export(BinaryFileWriter writer)
        {
            m_Tilegfx.Consolidate(m_Metatiles);

            for (int i = 0; i < TileSet.TilesPerSet; i++)
            {
                writer.Write((byte)(m_Bitfields[i]));
            }
            writer.Write((byte)208);

            for (int i = 0; i < TileSet.TilesPerSet; i++)
            {
                writer.Write((byte)(m_Attributes[i]));
            }
            writer.Write((byte)m_PaletteZero);

            for (int i = 0; i < TileSet.TilesPerSet; i++)
            {
                TilePage value = m_Tilegfx.GetTileAndPageFromIndex(m_Metatiles[i][0]);
                writer.Write((byte)value.Tile);
            }
            writer.Write((byte)m_Palettes[0]);

            for (int i = 0; i < TileSet.TilesPerSet; i++)
            {
                TilePage value = m_Tilegfx.GetTileAndPageFromIndex(m_Metatiles[i][1]);
                writer.Write((byte)value.Tile);
            }
            writer.Write((byte)m_Palettes[1]);

            for (int i = 0; i < TileSet.TilesPerSet; i++)
            {
                TilePage value = m_Tilegfx.GetTileAndPageFromIndex(m_Metatiles[i][2]);
                writer.Write((byte)value.Tile);
            }
            writer.Write((byte)m_Palettes[2]);

            for (int i = 0; i < TileSet.TilesPerSet; i++)
            {
                TilePage value = m_Tilegfx.GetTileAndPageFromIndex(m_Metatiles[i][3]);
                writer.Write((byte)value.Tile);
            }
            writer.Write((byte)m_Palettes[3]);

            byte[] lo_tiles = new byte[208];
            byte[] hi_tiles = new byte[104];

            for (int i = 0; i < 208; i++)
            {
                if (i < m_Tilegfx.Count)
                {
                    TilePage tp = m_Tilegfx.GetTileAndPageFromIndex(i);
                    lo_tiles[i] = tp.Tile;
                    if (i % 2 == 0)
                    {
                        hi_tiles[i / 2] = (byte)(tp.Page % 16);
                    }
                    else
                    {
                        hi_tiles[i / 2] = (byte)(hi_tiles[i / 2] | (byte)((tp.Page % 16) << 4));
                    }
                }
            }

            for (int i = 0; i < 208; i++)
            {
                writer.Write((byte)lo_tiles[i]);
            }
            for (int i = 0; i < 104; i++)
            {
                writer.Write((byte)hi_tiles[i]);
            }
        }