public static Frame[] GetAnimation(int body, int action, int direction, int hue, bool preserveHue) { if (preserveHue) { Animations.Translate(ref body); } else { Animations.Translate(ref body, ref hue); } FileIndex fileIndex; int num1; switch (BodyConverter.Convert(ref body)) { case 2: fileIndex = Animations.m_FileIndex2; num1 = body >= 200 ? 22000 + (body - 200) * 65 : body * 110; break; case 3: fileIndex = Animations.m_FileIndex3; num1 = body >= 300 ? (body >= 400 ? 35000 + (body - 400) * 175 : 33000 + (body - 300) * 110) : body * 65; break; default: fileIndex = Animations.m_FileIndex; num1 = body >= 200 ? (body >= 400 ? 35000 + (body - 400) * 175 : 22000 + (body - 200) * 65) : body * 110; break; } int num2 = num1 + action * 5; int index1 = direction > 4 ? num2 + (direction - (direction - 4) * 2) : num2 + direction; int length1; int extra; bool patched; Stream input = fileIndex.Seek(index1, out length1, out extra, out patched); if (input == null) { return((Frame[])null); } bool flip = direction > 4; BinaryReader bin = new BinaryReader(input); ushort[] palette = new ushort[256]; for (int index2 = 0; index2 < 256; ++index2) { palette[index2] = (ushort)((uint)bin.ReadUInt16() ^ 32768U); } int num3 = (int)bin.BaseStream.Position; int length2 = bin.ReadInt32(); int[] numArray = new int[length2]; for (int index2 = 0; index2 < length2; ++index2) { numArray[index2] = num3 + bin.ReadInt32(); } bool onlyHueGrayPixels = (hue & 32768) == 0; hue = (hue & 16383) - 1; Hue hue1 = (Hue)null; if (hue >= 0 && hue < Hues.List.Length) { hue1 = Hues.List[hue]; } Frame[] frameArray = new Frame[length2]; for (int index2 = 0; index2 < length2; ++index2) { bin.BaseStream.Seek((long)numArray[index2], SeekOrigin.Begin); frameArray[index2] = new Frame(palette, bin, flip); if (hue1 != null) { hue1.ApplyTo(frameArray[index2].Bitmap, onlyHueGrayPixels); } } return(frameArray); }