Ejemplo n.º 1
0
 protected override void InitEntries(ArchiveWorker aw = null)
 {
     if (Entries == null)
     {
         //read from icon.sp1
         using (MemoryStream ms = new MemoryStream(ArchiveWorker.GetBinaryFile(ArchiveString,
                                                                               aw.GetListOfFiles().First(x => x.IndexOf(IndexFilename, StringComparison.OrdinalIgnoreCase) >= 0))))
         {
             using (BinaryReader br = new BinaryReader(ms))
             {
                 Loc[] locs = new Loc[br.ReadUInt32()];
                 for (int i = 0; i < locs.Length; i++)
                 {
                     locs[i].seek   = br.ReadUInt16();
                     locs[i].length = br.ReadUInt16();
                 }
                 Entries = new Dictionary <ID, EntryGroup>(locs.Length + 10);
                 for (int i = 0; i < locs.Length; i++)
                 {
                     ms.Seek(locs[i].seek, SeekOrigin.Begin);
                     byte c = (byte)locs[i].length;
                     Entries[(ID)i] = new EntryGroup(c);
                     for (int e = 0; e < c; e++)
                     {
                         Entry tmp = new Entry();
                         tmp.LoadfromStreamSP1(br);
                         tmp.Part = (byte)e;
                         tmp.SetLoc(locs[i]);
                         Entries[(ID)i].Add(tmp);
                     }
                 }
             }
         }
     }
 }
Ejemplo n.º 2
0
        private static void Init()
        {
            ArchiveWorker aw = new ArchiveWorker(Memory.Archives.A_FIELD);

            string[] test = aw.GetListOfFiles();

            //TODO fix endless look on FieldID 50.
            if (Memory.FieldHolder.FieldID >= Memory.FieldHolder.fields.Length ||
                Memory.FieldHolder.FieldID < 0)
            {
                return;
            }
            var CollectionEntry = test.Where(x => x.ToLower().Contains(Memory.FieldHolder.fields[Memory.FieldHolder.FieldID]));

            if (!CollectionEntry.Any())
            {
                return;
            }
            string fieldArchive = CollectionEntry.First();
            int    fieldLen     = fieldArchive.Length - 3;

            fieldArchive = fieldArchive.Substring(0, fieldLen);
            byte[] fs = aw.GetBinaryFile($"{fieldArchive}{Memory.Archive.B_FileArchive}");
            byte[] fi = aw.GetBinaryFile($"{fieldArchive}{Memory.Archive.B_FileIndex}");
            byte[] fl = aw.GetBinaryFile($"{fieldArchive}{Memory.Archive.B_FileList}");
            if (fs == null || fi == null || fl == null)
            {
                return;
            }
            string[] test_ = aw.GetBinaryFileList(fl);
            string   mim   = null;
            string   map   = null;

            try
            {
                mim = test_.First(x => x.ToLower().Contains(".mim"));
            }
            catch {}
            try
            {
                map = test_.First(x => x.ToLower().Contains(".map"));
            }
            catch {}

            if (mim != null && map != null)
            {
                byte[] mimb = aw.FileInTwoArchives(fi, fs, fl, mim);
                byte[] mapb = aw.FileInTwoArchives(fi, fs, fl, map);

                ParseBackground(mimb, mapb);
            }
            //let's start with scripts
            byte[] jsm   = null;
            byte[] sy    = null;
            string s_jsm = null;
            string s_sy  = null;

            s_jsm = test_.FirstOrDefault(x => x.IndexOf(".jsm", StringComparison.OrdinalIgnoreCase) >= 0);
            s_sy  = test_.FirstOrDefault(x => x.IndexOf(".sy", StringComparison.OrdinalIgnoreCase) >= 0);
            if (!string.IsNullOrWhiteSpace(s_jsm) && !string.IsNullOrWhiteSpace(s_sy))
            {
                jsm = aw.FileInTwoArchives(fi, fs, fl, s_jsm);
                sy  = aw.FileInTwoArchives(fi, fs, fl, s_sy);
            }
            else
            {
                Debug.WriteLine($"s_jsm={s_jsm} or s_sy={s_sy} values are null/empty");
                mod = Field_mods.DISABLED;
                return; //
            }
            List <Jsm.GameObject> jsmObjects = new List <Jsm.GameObject>(0);

            try
            {
                jsmObjects = Jsm.File.Read(jsm);
            }
            catch (Exception e)
            {
                Debug.WriteLine(e);
                mod = Field_mods.DISABLED;
                return;
            }
            if (sy == null)
            {
                return;
            }
            Sym.GameObjects symObjects = Sym.Reader.FromBytes(sy);

            services    = FieldInitializer.GetServices();
            eventEngine = ServiceId.Field[services].Engine;
            eventEngine.Reset();
            for (var objIndex = 0; objIndex < jsmObjects.Count; objIndex++)
            {
                Jsm.GameObject obj         = jsmObjects[objIndex];
                FieldObject    fieldObject = new FieldObject(obj.Id, symObjects.GetObjectOrDefault(objIndex).Name);

                foreach (Jsm.GameScript script in obj.Scripts)
                {
                    fieldObject.Scripts.Add(script.ScriptId, script.Segment.GetExecuter());
                }

                eventEngine.RegisterObject(fieldObject);
            }
            //string mch = test_.Where(x => x.ToLower().Contains(".mch")).First();
            //string one = test_.Where(x => x.ToLower().Contains(".one")).First();
            //string msd = test_.Where(x => x.ToLower().Contains(".msd")).First();
            //string inf = test_.Where(x => x.ToLower().Contains(".inf")).First();
            //string id = test_.Where(x => x.ToLower().Contains(".id")).First();
            //string ca = test_.Where(x => x.ToLower().Contains(".ca")).First();
            //string tdw = test_.Where(x => x.ToLower().Contains(".tdw")).First();
            //string msk = test_.Where(x => x.ToLower().Contains(".msk")).First();
            //string rat = test_.Where(x => x.ToLower().Contains(".rat")).First();
            //string pmd = test_.Where(x => x.ToLower().Contains(".pmd")).First();
            //string sfx = test_.Where(x => x.ToLower().Contains(".sfx")).First();

            //byte[] mchb = ArchiveWorker.FileInTwoArchives(fi, fs, fl, mch); //Field character models
            //byte[] oneb = ArchiveWorker.FileInTwoArchives(fi, fs, fl, one); //Field character models container
            //byte[] msdb = ArchiveWorker.FileInTwoArchives(fi, fs, fl, msd); //dialogs
            //byte[] infb = ArchiveWorker.FileInTwoArchives(fi, fs, fl, inf); //gateways
            //byte[] idb = ArchiveWorker.FileInTwoArchives(fi, fs, fl, id); //walkmesh
            //byte[] cab = ArchiveWorker.FileInTwoArchives(fi, fs, fl, ca); //camera
            //byte[] tdwb = ArchiveWorker.FileInTwoArchives(fi, fs, fl, tdw); //extra font
            //byte[] mskb = ArchiveWorker.FileInTwoArchives(fi, fs, fl, msk); //movie cam
            //byte[] ratb = ArchiveWorker.FileInTwoArchives(fi, fs, fl, rat); //battle on field
            //byte[] pmdb = ArchiveWorker.FileInTwoArchives(fi, fs, fl, pmd); //particle info
            //byte[] sfxb = ArchiveWorker.FileInTwoArchives(fi, fs, fl, sfx); //sound effects


            mod++;
            return;
        }