Example #1
0
        public static Char_Model_Spec[] Read(string path)
        {
            Char_Model_Spec[] Data;
            BinaryReader      br = new BinaryReader(File.Open(path, FileMode.Open));


            br.BaseStream.Seek(8, SeekOrigin.Begin);
            int Count = br.ReadInt32();

            Data = new Char_Model_Spec[Count];
            int Offset = br.ReadInt32();

            for (int i = 0; i < Count; i++)
            {
                br.BaseStream.Seek(Offset + (84 * i), SeekOrigin.Begin);
                Data[i].id        = br.ReadInt32();
                Data[i].shortname = System.Text.Encoding.ASCII.GetString(br.ReadBytes(3));
                br.BaseStream.Seek(9, SeekOrigin.Current);
                Data[i].unk1 = br.ReadInt32();
                Data[i].unk2 = br.ReadInt16();
                Data[i].unk3 = br.ReadInt16();
                Data[i].unk4 = br.ReadInt16();
                Data[i].unk5 = br.ReadInt16();
                br.BaseStream.Seek(4, SeekOrigin.Current);
                Data[i].Paths    = new string[9];
                Data[i].Paths[0] = ReadText(ref br, br.ReadInt32());
                Data[i].Paths[1] = ReadText(ref br, br.ReadInt32());
                br.BaseStream.Seek(4, SeekOrigin.Current);
                Data[i].Paths[2] = ReadText(ref br, br.ReadInt32());
                Data[i].Paths[3] = ReadText(ref br, br.ReadInt32());//additional
                br.BaseStream.Seek(4, SeekOrigin.Current);
                Data[i].Paths[4] = ReadText(ref br, br.ReadInt32());
                Data[i].Paths[5] = ReadText(ref br, br.ReadInt32());
                Data[i].Paths[6] = ReadText(ref br, br.ReadInt32());
                Data[i].Paths[7] = ReadText(ref br, br.ReadInt32());
                br.BaseStream.Seek(8, SeekOrigin.Current);
                Data[i].Paths[8] = ReadText(ref br, br.ReadInt32());
            }

            br.Close();
            return(Data);
        }
Example #2
0
        public static void InjectWrite(ref BinaryWriter bw, Char_Model_Spec cms)
        {
            List <string> CmnText = new List <string>();

            for (int j = 0; j < cms.Paths.Length; j++)
            {
                if (!CmnText.Contains(cms.Paths[j]))
                {
                    CmnText.Add(cms.Paths[j]);
                }
            }

            int[] wordAddress = new int[CmnText.Count];
            int   pos         = (int)bw.BaseStream.Position;

            bw.BaseStream.Seek(84, SeekOrigin.Current);
            for (int i = 0; i < CmnText.Count; i++)
            {
                wordAddress[i] = (int)bw.BaseStream.Position;
                bw.Write(System.Text.Encoding.ASCII.GetBytes(CmnText[i]));
                bw.Write((byte)0);
            }

            bw.BaseStream.Seek(pos, SeekOrigin.Begin);

            bw.Write(cms.id);
            bw.Write(System.Text.Encoding.ASCII.GetBytes(cms.shortname));
            bw.BaseStream.Seek(9, SeekOrigin.Current);
            bw.Write(cms.unk1);
            bw.Write(cms.unk2);
            bw.Write(cms.unk3);
            bw.Write(cms.unk4);
            bw.Write(cms.unk5);
            bw.BaseStream.Seek(4, SeekOrigin.Current);
            if (cms.Paths[0] == "")
            {
                bw.Write((int)0);
            }
            else
            {
                bw.Write(wordAddress[CmnText.IndexOf(cms.Paths[0])]);
            }

            if (cms.Paths[1] == "")
            {
                bw.Write((int)0);
            }
            else
            {
                bw.Write(wordAddress[CmnText.IndexOf(cms.Paths[1])]);
            }

            bw.BaseStream.Seek(4, SeekOrigin.Current);
            if (cms.Paths[2] == "")
            {
                bw.Write((int)0);
            }
            else
            {
                bw.Write(wordAddress[CmnText.IndexOf(cms.Paths[2])]);
            }

            if (cms.Paths[3] == "")//additional
            {
                bw.Write((int)0);
            }
            else
            {
                bw.Write(wordAddress[CmnText.IndexOf(cms.Paths[3])]);
            }

            bw.BaseStream.Seek(4, SeekOrigin.Current);
            if (cms.Paths[4] == "")
            {
                bw.Write((int)0);
            }
            else
            {
                bw.Write(wordAddress[CmnText.IndexOf(cms.Paths[4])]);
            }

            if (cms.Paths[5] == "")
            {
                bw.Write((int)0);
            }
            else
            {
                bw.Write(wordAddress[CmnText.IndexOf(cms.Paths[5])]);
            }

            if (cms.Paths[6] == "")
            {
                bw.Write((int)0);
            }
            else
            {
                bw.Write(wordAddress[CmnText.IndexOf(cms.Paths[6])]);
            }

            if (cms.Paths[7] == "")
            {
                bw.Write((int)0);
            }
            else
            {
                bw.Write(wordAddress[CmnText.IndexOf(cms.Paths[7])]);
            }

            bw.BaseStream.Seek(8, SeekOrigin.Current);
            if (cms.Paths[8] == "")
            {
                bw.Write((int)0);
            }
            else
            {
                bw.Write(wordAddress[CmnText.IndexOf(cms.Paths[8])]);
            }
        }