Exemple #1
0
 public IExtractedFile GetEntryByFileName(string filename)
 {
     if (ExtractedEntries.ContainsKey(filename))
     {
         return(ExtractedEntries[filename]);
     }
     else
     {
         var index = GetIndexForFileName(filename);
         var entry = FSysFileEntry.ExtractFromFSys(this, index);
         ExtractedEntries.Add(entry.FileName, entry);
         return(entry);
     }
 }
        public static void ExtractFSys(FSys sys, bool decode)
        {
            if (sys.NumberOfEntries <= 0)
            {
                return;
            }

            for (int i = 0; i < sys.NumberOfEntries; i++)
            {
                var entry = FSysFileEntry.ExtractFromFSys(sys, i);
                if (!sys.ExtractedEntries.TryAdd(entry.FileName, entry))
                {
                    continue;
                }

                switch (entry.FileType)
                {
                case FileTypes.GSW:
                {
                    var gswTex  = (GSWTexture)entry;
                    var texData = gswTex.ExtractTextureData();
                    foreach (var tex in texData)
                    {
                        sys.ExtractedEntries.Add(tex.FileName, tex);
                    }
                }
                break;
                }
            }

            if (decode)
            {
                var extraData = new List <IExtractedFile>();
                for (int i = 0; i < sys.ExtractedEntries.Count; i++)
                {
                    var entry = sys.ExtractedEntries.Values.ElementAt(i);
                    if (entry is Texture tex)
                    {
                        tex.WritePNGData();
                    }
                    else if (entry is PKX pk)
                    {
                        sys.ExtractedEntries.Add($"{pk.FileName.RemoveFileExtensions()}.dat", pk.ExtractDat());
                    }
                    else if (entry is StringTable tbl)
                    {
                    }
                    else if (entry is SCD scr)
                    {
                        scr.WriteScriptData(sys);
                    }
                    else if (entry.FileType == FileTypes.THH)
                    {
                        var thdData = sys.ExtractedEntries.Values.First(f =>
                        {
                            var entryFileName = f.FileName.Split(".")[0];
                            return(f.FileType == FileTypes.THD && f.FileName.Contains(entryFileName));
                        });
                        var thp = new THP();
                        sys.ExtractedEntries.Add($"{entry.FileName}.thp", thp);
                    }
                }
            }
        }