public static void CompressTileBlock_Inner(BinaryWriter writer, int xStart, int yStart, int width, int height)
{
short[] numArray1 = new short[1000];
short[] numArray2 = new short[1000];
short[] numArray3 = new short[1000];
short num1 = (short)0;
short num2 = (short)0;
short num3 = (short)0;
short num4 = (short)0;
int index1 = 0;
int index2 = 0;
byte num5 = (byte)0;
byte[] buffer = new byte[13];
Tile compTile = (Tile)null;
for (int index3 = yStart; index3 < yStart + height; ++index3)
{
for (int index4 = xStart; index4 < xStart + width; ++index4)
{
Tile tile = Main.tile[index4, index3];
if (tile.isTheSameAs(compTile))
{
++num4;
}
else
{
if (compTile != null)
{
if ((int)num4 > 0)
{
buffer[index1] = (byte)((uint)num4 & (uint)byte.MaxValue);
++index1;
if ((int)num4 > (int)byte.MaxValue)
{
num5 |= 128;
buffer[index1] = (byte)(((int)num4 & 65280) >> 8);
++index1;
}
else
num5 |= (byte)64;
}
buffer[index2] = num5;
writer.Write(buffer, index2, index1 - index2);
num4 = (short)0;
}
index1 = 3;
int num6;
byte num7 = (byte)(num6 = 0);
byte num8 = (byte)num6;
num5 = (byte)num6;
if (tile.active())
{
num5 |= (byte)2;
buffer[index1] = (byte)tile.type;
++index1;
if ((int)tile.type > (int)byte.MaxValue)
{
buffer[index1] = (byte)((uint)tile.type >> 8);
++index1;
num5 |= (byte)32;
}
if ((int)tile.type == 21 && (int)tile.frameX % 36 == 0 && (int)tile.frameY % 36 == 0)
{
short num9 = (short)Chest.FindChest(index4, index3);
if ((int)num9 != -1)
{
numArray1[(int)num1] = num9;
++num1;
}
}
if ((int)tile.type == 88 && (int)tile.frameX % 54 == 0 && (int)tile.frameY % 36 == 0)
{
short num9 = (short)Chest.FindChest(index4, index3);
if ((int)num9 != -1)
{
numArray1[(int)num1] = num9;
++num1;
}
}
if ((int)tile.type == 85 && (int)tile.frameX % 36 == 0 && (int)tile.frameY % 36 == 0)
{
short num9 = (short)Sign.ReadSign(index4, index3, true);
if ((int)num9 != -1)
numArray2[(int)num2++] = num9;
}
if ((int)tile.type == 55 && (int)tile.frameX % 36 == 0 && (int)tile.frameY % 36 == 0)
{
short num9 = (short)Sign.ReadSign(index4, index3, true);
if ((int)num9 != -1)
numArray2[(int)num2++] = num9;
}
if ((int)tile.type == 378 && (int)tile.frameX % 36 == 0 && (int)tile.frameY == 0)
{
int num9 = TETrainingDummy.Find(index4, index3);
if (num9 != -1)
numArray3[(int)num3++] = (short)num9;
}
if ((int)tile.type == 395 && (int)tile.frameX % 36 == 0 && (int)tile.frameY == 0)
{
int num9 = TEItemFrame.Find(index4, index3);
if (num9 != -1)
numArray3[(int)num3++] = (short)num9;
}
if (Main.tileFrameImportant[(int)tile.type])
{
buffer[index1] = (byte)((uint)tile.frameX & (uint)byte.MaxValue);
int index5 = index1 + 1;
buffer[index5] = (byte)(((int)tile.frameX & 65280) >> 8);
int index6 = index5 + 1;
buffer[index6] = (byte)((uint)tile.frameY & (uint)byte.MaxValue);
int index7 = index6 + 1;
buffer[index7] = (byte)(((int)tile.frameY & 65280) >> 8);
index1 = index7 + 1;
}
if ((int)tile.color() != 0)
{
num7 |= (byte)8;
buffer[index1] = tile.color();
++index1;
}
}
if ((int)tile.wall != 0)
{
num5 |= (byte)4;
buffer[index1] = tile.wall;
++index1;
if ((int)tile.wallColor() != 0)
{
num7 |= (byte)16;
buffer[index1] = tile.wallColor();
++index1;
}
}
if ((int)tile.liquid != 0)
{
if (tile.lava())
num5 |= (byte)16;
else if (tile.honey())
num5 |= (byte)24;
else
num5 |= (byte)8;
buffer[index1] = tile.liquid;
++index1;
}
if (tile.k_HasWireFlags(k_WireFlags.WIRE_RED))
num8 |= (byte)2;
if (tile.k_HasWireFlags(k_WireFlags.WIRE_GREEN))
num8 |= (byte)4;
if (tile.k_HasWireFlags(k_WireFlags.WIRE_BLUE))
num8 |= (byte)8;
int num10 = !tile.halfBrick() ? ((int)tile.slope() == 0 ? 0 : (int)tile.slope() + 1 << 4) : 16;
byte num11 = (byte)((uint)num8 | (uint)(byte)num10);
if (tile.k_HasWireFlags(k_WireFlags.WIRE_ACTUATOR))
num7 |= (byte)2;
if (tile.inActive())
num7 |= (byte)4;
index2 = 2;
if ((int)num7 != 0)
{
num11 |= (byte)1;
buffer[index2] = num7;
--index2;
}
if ((int)num11 != 0)
{
num5 |= (byte)1;
buffer[index2] = num11;
--index2;
}
compTile = tile;
}
}
}
if ((int)num4 > 0)
{
buffer[index1] = (byte)((uint)num4 & (uint)byte.MaxValue);
++index1;
if ((int)num4 > (int)byte.MaxValue)
{
num5 |= 128;
buffer[index1] = (byte)(((int)num4 & 65280) >> 8);
++index1;
}
else
num5 |= (byte)64;
}
buffer[index2] = num5;
writer.Write(buffer, index2, index1 - index2);
writer.Write(num1);
for (int index3 = 0; index3 < (int)num1; ++index3)
{
Chest chest = Main.chest[(int)numArray1[index3]];
writer.Write(numArray1[index3]);
writer.Write((short)chest.x);
writer.Write((short)chest.y);
writer.Write(chest.name);
}
writer.Write(num2);
for (int index3 = 0; index3 < (int)num2; ++index3)
{
Sign sign = Main.sign[(int)numArray2[index3]];
writer.Write(numArray2[index3]);
writer.Write((short)sign.x);
writer.Write((short)sign.y);
writer.Write(sign.text);
}
writer.Write(num3);
for (int index3 = 0; index3 < (int)num3; ++index3)
TileEntity.Write(writer, TileEntity.ByID[(int)numArray3[index3]]);
}