public static List <SetObjectHeroes> GetHeroesLayout(string fileName)
        {
            List <SetObjectHeroes> list             = new List <SetObjectHeroes>(2048);
            BinaryReader           LayoutFileReader = new BinaryReader(new FileStream(fileName, FileMode.Open));

            for (int i = 0; i < 2048; i++)
            {
                LayoutFileReader.BaseStream.Position = 0x30 * i;
                if (LayoutFileReader.BaseStream.Position == LayoutFileReader.BaseStream.Length)
                {
                    break;
                }

                Vector3 Position = new Vector3(Switch(LayoutFileReader.ReadSingle()), Switch(LayoutFileReader.ReadSingle()), Switch(LayoutFileReader.ReadSingle()));
                Vector3 Rotation = new Vector3(Switch(LayoutFileReader.ReadInt32()), Switch(LayoutFileReader.ReadInt32()), Switch(LayoutFileReader.ReadInt32()));

                byte[] UnkBytes1 = LayoutFileReader.ReadBytes(4);
                LayoutFileReader.BaseStream.Position += 4;

                byte[] UnkBytes2 = LayoutFileReader.ReadBytes(4);
                LayoutFileReader.BaseStream.Position += 4;

                byte List = LayoutFileReader.ReadByte();
                byte Type = LayoutFileReader.ReadByte();
                byte Link = LayoutFileReader.ReadByte();
                byte Rend = LayoutFileReader.ReadByte();

                if (List == 0 & Type == 0)
                {
                    continue;
                }

                SetObjectHeroes TempObject = new SetObjectHeroes(List, Type, Position, Rotation, Link, Rend, UnkBytes1.Concat(UnkBytes2).ToArray());

                int MiscSettings = Switch(LayoutFileReader.ReadInt32());

                if (MiscSettings == 0)
                {
                    TempObject.HasMiscSettings = false;
                }
                else
                {
                    LayoutFileReader.BaseStream.Position = 0x18000 + (0x24 * MiscSettings);
                    TempObject.MiscSettings = LayoutFileReader.ReadBytes(36);
                }

                TempObject.CreateTransformMatrix();

                list.Add(TempObject);
            }

            LayoutFileReader.Close();

            return(list);
        }
        public static List <SetObjectHeroes> GetHeroesLayoutFromShadow(string fileName)
        {
            List <SetObjectHeroes> list = new List <SetObjectHeroes>();

            foreach (SetObjectShadow i in GetShadowLayout(fileName))
            {
                SetObjectHeroes TempObject = SetObjectShadowToHeroes(i);

                if (TempObject != null)
                {
                    TempObject.CreateTransformMatrix();
                    list.Add(TempObject);
                }
            }

            return(list);
        }
        public static List <SetObjectHeroes> GetObjectsFromObjFile(string FileName, byte List, byte Type)
        {
            List <SetObjectHeroes> list = new List <SetObjectHeroes>();

            string[] SplineFile = File.ReadAllLines(FileName);
            foreach (string j in SplineFile)
            {
                if (j.StartsWith("v"))
                {
                    string[]        a = Regex.Replace(j, @"\s+", " ").Split();
                    SetObjectHeroes heroesSetObject = new SetObjectHeroes(List, Type, new Vector3(Convert.ToSingle(a[1]), Convert.ToSingle(a[2]), Convert.ToSingle(a[3])), Vector3.Zero, 0, 10);

                    list.Add(heroesSetObject);
                }
            }
            return(list);
        }
        public static List <SetObjectHeroes> GetHeroesLayoutFromINI(string fileName)
        {
            string[] file = File.ReadAllLines(fileName);
            List <SetObjectHeroes> list = new List <SetObjectHeroes>();

            SetObjectHeroes TempObject = new SetObjectHeroes(0, 0, Vector3.Zero, Vector3.Zero, 0, 10, new byte[8]);

            foreach (string s in file)
            {
                if (s.StartsWith("obj "))
                {
                    if (!(TempObject.List == 0 & TempObject.Type == 0))
                    {
                        TempObject.CreateTransformMatrix();
                        list.Add(TempObject);
                    }
                    TempObject = null;
                    TempObject = new SetObjectHeroes(Convert.ToByte(s.Substring(4, 2), 16), Convert.ToByte(s.Substring(6, 2), 16), Vector3.Zero, Vector3.Zero, 0, 10);
                }
                else if (s.StartsWith("link "))
                {
                    TempObject.Link = Convert.ToByte(s.Substring(5, 2));
                }
                else if (s.StartsWith("rend "))
                {
                    TempObject.Rend = Convert.ToByte(s.Substring(5, 2));
                }
                else if (s.StartsWith("v "))
                {
                    string[] j = s.Split(' ');
                    TempObject.Position.X = Convert.ToSingle(j[1]);
                    TempObject.Position.Y = Convert.ToSingle(j[2]);
                    TempObject.Position.Z = Convert.ToSingle(j[3]);
                }
                else if (s.StartsWith("r "))
                {
                    string[] j = s.Split(' ');
                    TempObject.Rotation.X = Convert.ToInt32(j[1]);
                    TempObject.Rotation.Y = Convert.ToInt32(j[2]);
                    TempObject.Rotation.Z = Convert.ToInt32(j[3]);
                }
                else if (s.StartsWith("b "))
                {
                    string[] j = s.Split(' ');
                    TempObject.UnkBytes[0] = Convert.ToByte(j[1]);
                    TempObject.UnkBytes[1] = Convert.ToByte(j[2]);
                    TempObject.UnkBytes[2] = Convert.ToByte(j[3]);
                    TempObject.UnkBytes[3] = Convert.ToByte(j[4]);
                    TempObject.UnkBytes[4] = Convert.ToByte(j[5]);
                    TempObject.UnkBytes[5] = Convert.ToByte(j[6]);
                    TempObject.UnkBytes[6] = Convert.ToByte(j[7]);
                    TempObject.UnkBytes[7] = Convert.ToByte(j[8]);
                }
                else if (s.StartsWith("misc "))
                {
                    if (s.Length == 9 * 9 + 4)
                    {
                        string      NewMiscString   = Regex.Replace(s.Substring(5), @"\s+", "");;
                        List <byte> NewMiscSettings = new List <byte>();

                        for (int j = 0; j < 8 * 9; j += 2)
                        {
                            string byteasstring = new string(new char[] { NewMiscString[j], NewMiscString[j + 1] });
                            NewMiscSettings.Add(Convert.ToByte(byteasstring, 16));
                        }

                        TempObject.MiscSettings = NewMiscSettings.ToArray();
                    }
                    else
                    {
                        TempObject.HasMiscSettings = false;
                    }
                }
                else if (s == "EndOfFile")
                {
                    if (!(TempObject.List == 0 & TempObject.Type == 0))
                    {
                        TempObject.CreateTransformMatrix();
                        list.Add(TempObject);
                    }
                    TempObject = null;
                }
            }

            return(list);
        }