/// <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); }
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); }
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]); } }
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]); } }