Terraria.NetMessage.CompressTileBlock_Inner C# (CSharp) Method

CompressTileBlock_Inner() public static method

public static CompressTileBlock_Inner ( BinaryWriter writer, int xStart, int yStart, int width, int height ) : void
writer System.IO.BinaryWriter
xStart int
yStart int
width int
height int
return void
        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]]);
        }