Esempio n. 1
0
 public static Bitmap CreateBitmap(L1Spr.Frame FrameData, byte[] bmpdata)
 {
     if (bmpdata == null)
     {
         return((Bitmap)null);
     }
     return(ImageConvert.CreateBMP(FrameData.width, FrameData.height, bmpdata, 0, (int)FrameData.maskcolor));
 }
Esempio n. 2
0
        public static L1Spr.Frame[] Load(byte[] sprdata)
        {
            ushort[] numArray1 = (ushort[])null;
            ushort   num1      = 32768;

            ushort[] array = new ushort[7]
            {
                (ushort)31744,
                (ushort)768,
                (ushort)31,
                (ushort)32736,
                (ushort)1023,
                (ushort)31775,
                (ushort)short.MaxValue
            };
            BinaryReader binaryReader = new BinaryReader((Stream) new MemoryStream(sprdata));

            if (binaryReader == null)
            {
                return((L1Spr.Frame[])null);
            }
            bool flag = false;
            byte num2 = binaryReader.ReadByte();

            if ((int)num2 == (int)byte.MaxValue)
            {
                flag = true;
                int length = (int)binaryReader.ReadByte();
                if (length == 0)
                {
                    length = 256;
                }
                numArray1 = new ushort[length];
                for (int index1 = 0; index1 < length; ++index1)
                {
                    numArray1[index1] = binaryReader.ReadUInt16();
                    int index2 = Array.IndexOf <ushort>(array, numArray1[index1]);
                    if (index2 >= 0)
                    {
                        array[index2] = (ushort)0;
                    }
                }
                foreach (ushort num3 in array)
                {
                    if ((int)num3 != 0)
                    {
                        num1 = num3;
                        break;
                    }
                }
                num2 = binaryReader.ReadByte();
            }
            L1Spr.Frame[]      frameArray    = new L1Spr.Frame[(int)num2];
            L1Spr.BlockDef[][] blockDefArray = new L1Spr.BlockDef[(int)num2][];
            for (int index1 = 0; index1 < (int)num2; ++index1)
            {
                frameArray[index1].x_offset = (int)binaryReader.ReadInt16();
                frameArray[index1].y_offset = (int)binaryReader.ReadInt16();
                frameArray[index1].width    = (int)binaryReader.ReadInt16() - frameArray[index1].x_offset + 1;
                frameArray[index1].height   = (int)binaryReader.ReadInt16() - frameArray[index1].y_offset + 1;
                frameArray[index1].unknow_1 = binaryReader.ReadUInt16();
                frameArray[index1].unknow_2 = binaryReader.ReadUInt16();
                int length = (int)binaryReader.ReadUInt16();
                if (length > 0)
                {
                    blockDefArray[index1] = new L1Spr.BlockDef[length];
                    for (int index2 = 0; index2 < length; ++index2)
                    {
                        blockDefArray[index1][index2].a         = (int)binaryReader.ReadSByte();
                        blockDefArray[index1][index2].b         = (int)binaryReader.ReadSByte();
                        blockDefArray[index1][index2].FrameType = (int)binaryReader.ReadByte();
                        blockDefArray[index1][index2].BlockID   = (int)binaryReader.ReadUInt16();
                    }
                    frameArray[index1].type = blockDefArray[index1][0].FrameType;
                }
            }
            Console.WriteLine(binaryReader.BaseStream.Position.ToString("X4"));
            int length1 = binaryReader.ReadInt32();

            int[] numArray2 = new int[length1];
            for (int index = 0; index < length1; ++index)
            {
                numArray2[index] = binaryReader.ReadInt32();
            }
            Console.WriteLine("Data after BlockOffset: {0}", (object)binaryReader.ReadInt32().ToString("x"));
            int position = (int)binaryReader.BaseStream.Position;

            ushort[][,] numArray3 = new ushort[length1][, ];
            for (int index1 = 0; index1 < length1; ++index1)
            {
                numArray3[index1] = new ushort[24, 24];
                for (int index2 = 0; index2 < 24; ++index2)
                {
                    for (int index3 = 0; index3 < 24; ++index3)
                    {
                        numArray3[index1][index2, index3] = (ushort)32768;
                    }
                }
                binaryReader.BaseStream.Seek((long)(position + numArray2[index1]), SeekOrigin.Begin);
                byte num3 = binaryReader.ReadByte();
                byte num4 = binaryReader.ReadByte();
                int  num5 = (int)binaryReader.ReadByte();
                byte num6 = binaryReader.ReadByte();
                for (int index2 = 0; index2 < (int)num6; ++index2)
                {
                    int  index3 = (int)num3;
                    byte num7   = binaryReader.ReadByte();
                    for (int index4 = 0; index4 < (int)num7; ++index4)
                    {
                        index3 += (int)binaryReader.ReadByte() / 2;
                        int num8 = (int)binaryReader.ReadByte();
                        for (int index5 = 0; index5 < num8; ++index5)
                        {
                            if (flag)
                            {
                                numArray3[index1][index2 + (int)num4, index3] = numArray1[(int)binaryReader.ReadByte()];
                            }
                            else
                            {
                                ushort num9 = binaryReader.ReadUInt16();
                                numArray3[index1][index2 + (int)num4, index3] = num9;
                                int index6 = Array.IndexOf <ushort>(array, num9);
                                if (index6 >= 0)
                                {
                                    array[index6] = (ushort)0;
                                }
                            }
                            ++index3;
                        }
                    }
                }
            }
            Console.WriteLine(binaryReader.BaseStream.Position.ToString("X4"));
            if ((int)num1 == 32768)
            {
                foreach (ushort num3 in array)
                {
                    if ((int)num3 != 0)
                    {
                        num1 = num3;
                        break;
                    }
                }
                if ((int)num1 == 32768)
                {
                    int num4 = (int)MessageBox.Show("太神奇了吧! 所有預設的遮罩色被用掉了!!!");
                }
            }
            for (int index1 = 0; index1 < (int)num2; ++index1)
            {
                if (blockDefArray[index1] != null)
                {
                    L1Spr.Frame frame = frameArray[index1];
                    frameArray[index1].maskcolor = num1;
                    byte[] bmpdata = new byte[frame.height * (frame.width + frame.width % 2) * 2];
                    int    num3;
                    for (int index2 = 0; index2 < bmpdata.Length; index2 = num3 + 1)
                    {
                        bmpdata[index2]            = (byte)((uint)num1 & (uint)byte.MaxValue);
                        bmpdata[num3 = index2 + 1] = (byte)(((int)num1 & 65280) >> 8);
                    }
                    for (int index2 = 0; index2 < blockDefArray[index1].Length; ++index2)
                    {
                        int a = blockDefArray[index1][index2].a;
                        if (a < 0)
                        {
                            --a;
                        }
                        int num4 = 24 * (blockDefArray[index1][index2].b + blockDefArray[index1][index2].a - a / 2);
                        int num5 = 12 * (blockDefArray[index1][index2].b - a / 2);
                        ushort[,] numArray4 = numArray3[blockDefArray[index1][index2].BlockID];
                        for (int index3 = 0; index3 < 24; ++index3)
                        {
                            for (int index4 = 0; index4 < 24; ++index4)
                            {
                                ushort num6 = numArray4[index3, index4];
                                if ((int)num6 != 32768)
                                {
                                    int num7 = num4 + index4;
                                    int num8 = num5 + index3;
                                    if (num7 >= frame.x_offset && num7 < frame.width + frame.x_offset && (num8 >= frame.y_offset && num8 < frame.height + frame.y_offset))
                                    {
                                        int index5 = ((num8 - frame.y_offset) * (frame.width + frame.width % 2) + (num7 - frame.x_offset)) * 2;
                                        bmpdata[index5] = (byte)((uint)num6 & (uint)byte.MaxValue);
                                        int num9;
                                        bmpdata[num9 = index5 + 1] = (byte)(((int)num6 & 65280) >> 8);
                                    }
                                }
                            }
                        }
                    }
                    frameArray[index1].image = (Image)L1Spr.CreateBitmap(frameArray[index1], bmpdata);
                }
            }
            return(frameArray);
        }