Esempio n. 1
0
 public SE3(DuplicatableStream stream, EndianUtils.Endianness?endian, TextUtils.GameTextEncoding encoding)
 {
     if (!LoadFile(stream, endian, encoding))
     {
         throw new Exception("Loading SE3 failed!");
     }
 }
Esempio n. 2
0
        public void Write(Stream stream, TextUtils.GameTextEncoding encoding)
        {
            stream.WriteUInt32(Ident);
            stream.WriteUInt32(Unknown2);
            stream.WriteUInt32(Unknown3);
            stream.WriteUInt32((uint)CharacterId);
            stream.WriteUInt32(Unknown5);
            stream.WriteUInt32(Unknown6);
            stream.WriteUInt32(Unknown7);
            stream.WriteUInt32(Unknown8);
            long posTextLength = stream.Position;

            stream.WriteUInt32(0);               // text length, to be filled later

            long posBefore = stream.Position;

            stream.WriteNulltermString(Text, encoding);
            long posAfter = stream.Position;

            // fill skipped text length
            uint textLength = (uint)(posAfter - posBefore);

            stream.Position = posTextLength;
            stream.WriteUInt32(textLength);
            stream.Position = posAfter;
        }
Esempio n. 3
0
 public ebm(Stream stream, TextUtils.GameTextEncoding encoding)
 {
     if (!LoadFile(stream, encoding))
     {
         throw new Exception("Loading ebm failed!");
     }
 }
Esempio n. 4
0
 public ScenarioFile(Stream stream, TextUtils.GameTextEncoding encoding, EndianUtils.Endianness endian, BitUtils.Bitness bits)
 {
     if (!LoadFile(stream, encoding, endian, bits))
     {
         throw new Exception("Loading ScenarioFile failed!");
     }
 }
Esempio n. 5
0
 public SCFOMBIN(Stream stream, EndianUtils.Endianness endian, TextUtils.GameTextEncoding encoding, uint textPointerLocationDiff = 0x1888)
 {
     if (!LoadFile(stream, endian, encoding, textPointerLocationDiff))
     {
         throw new Exception("Loading SCFOMBIN failed!");
     }
 }
Esempio n. 6
0
 public SE3(string filename, EndianUtils.Endianness?endian, TextUtils.GameTextEncoding encoding)
 {
     if (!LoadFile(new System.IO.FileStream(filename, FileMode.Open), endian, encoding))
     {
         throw new Exception("Loading SE3 failed!");
     }
 }
Esempio n. 7
0
 public TSSFile(Stream stream, TextUtils.GameTextEncoding encoding, EndianUtils.Endianness endian)
 {
     if (!LoadFile(stream, encoding, endian))
     {
         throw new Exception("Loading TSSFile failed!");
     }
 }
Esempio n. 8
0
 public void WriteFile(Stream stream, TextUtils.GameTextEncoding encoding)
 {
     stream.WriteUInt32((uint)EntryList.Count);
     foreach (ebmEntry e in EntryList)
     {
         e.Write(stream, encoding);
     }
 }
Esempio n. 9
0
 public ebm(String filename, TextUtils.GameTextEncoding encoding)
 {
     using (Stream stream = new System.IO.FileStream(filename, FileMode.Open)) {
         if (!LoadFile(stream, encoding))
         {
             throw new Exception("Loading ebm failed!");
         }
     }
 }
Esempio n. 10
0
 public SCFOMBIN(String filename, EndianUtils.Endianness endian, TextUtils.GameTextEncoding encoding, uint textPointerLocationDiff = 0x1888)
 {
     using (Stream stream = new System.IO.FileStream(filename, FileMode.Open)) {
         if (!LoadFile(stream, endian, encoding, textPointerLocationDiff))
         {
             throw new Exception("Loading SCFOMBIN failed!");
         }
     }
 }
Esempio n. 11
0
 public ScenarioFile(String filename, TextUtils.GameTextEncoding encoding, EndianUtils.Endianness endian, BitUtils.Bitness bits)
 {
     using (Stream stream = new System.IO.FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read)) {
         if (!LoadFile(stream, encoding, endian, bits))
         {
             throw new Exception("Loading ScenarioFile failed!");
         }
     }
 }
Esempio n. 12
0
 public TSSFile(string filename, TextUtils.GameTextEncoding encoding, EndianUtils.Endianness endian)
 {
     using (Stream stream = new FileStream(filename, FileMode.Open, FileAccess.Read)) {
         if (!LoadFile(stream, encoding, endian))
         {
             throw new Exception("Loading TSSFile failed!");
         }
     }
 }
Esempio n. 13
0
        private bool LoadFile(Stream stream, TextUtils.GameTextEncoding encoding)
        {
            uint entryCount = stream.ReadUInt32();

            EntryList = new List <ebmEntry>((int)entryCount);
            for (uint i = 0; i < entryCount; ++i)
            {
                ebmEntry e = new ebmEntry(stream, encoding);
                EntryList.Add(e);
            }

            return(true);
        }
Esempio n. 14
0
        public static string ReadNulltermString(this Stream s, TextUtils.GameTextEncoding encoding)
        {
            switch (encoding)
            {
            case TextUtils.GameTextEncoding.ASCII: return(ReadAsciiNullterm(s));

            case TextUtils.GameTextEncoding.ShiftJIS: return(ReadShiftJisNullterm(s));

            case TextUtils.GameTextEncoding.UTF8: return(ReadUTF8Nullterm(s));

            case TextUtils.GameTextEncoding.UTF16: return(ReadUTF16Nullterm(s));
            }
            throw new Exception("Reading nullterminated string not implemented for encoding " + encoding.ToString());
        }
Esempio n. 15
0
        public static string ReadSizedString(this Stream s, long count, TextUtils.GameTextEncoding encoding)
        {
            switch (encoding)
            {
            case TextUtils.GameTextEncoding.ASCII: return(ReadSizedString(s, count, Encoding.ASCII));

            case TextUtils.GameTextEncoding.ShiftJIS: return(ReadSizedString(s, count, TextUtils.ShiftJISEncoding));

            case TextUtils.GameTextEncoding.UTF8: return(ReadSizedString(s, count, Encoding.UTF8));

            case TextUtils.GameTextEncoding.UTF16: return(ReadSizedString(s, count, Encoding.Unicode));
            }
            throw new Exception("Reading sized string not implemented for encoding " + encoding.ToString());
        }
Esempio n. 16
0
        public ebmEntry(Stream stream, TextUtils.GameTextEncoding encoding)
        {
            Ident       = stream.ReadUInt32();
            Unknown2    = stream.ReadUInt32();
            Unknown3    = stream.ReadUInt32();
            CharacterId = (int)stream.ReadUInt32();
            Unknown5    = stream.ReadUInt32();
            Unknown6    = stream.ReadUInt32();
            Unknown7    = stream.ReadUInt32();
            Unknown8    = stream.ReadUInt32();
            TextLength  = stream.ReadUInt32();

            long pos = stream.Position;

            Text            = stream.ReadNulltermString(encoding);
            stream.Position = pos + TextLength;
        }
Esempio n. 17
0
        private bool LoadFile(Stream stream, EndianUtils.Endianness?endianParam, TextUtils.GameTextEncoding encoding)
        {
            EndianUtils.Endianness endian;
            if (endianParam == null)
            {
                uint magic = stream.ReadUInt32().FromEndian(EndianUtils.Endianness.BigEndian);
                if (magic == 0x53453320)
                {
                    endian = EndianUtils.Endianness.BigEndian;
                }
                else if (magic == 0x20334553)
                {
                    endian = EndianUtils.Endianness.LittleEndian;
                }
                else
                {
                    Console.WriteLine("Invalid magic: " + magic);
                    return(false);
                }
            }
            else
            {
                endian = endianParam.Value;
                uint magic = stream.ReadUInt32().FromEndian(endian);
                if (magic != 0x53453320)
                {
                    Console.WriteLine("Invalid magic: " + magic);
                    return(false);
                }
            }

            stream.DiscardBytes(8);               // unknown
            DataBegin = stream.ReadUInt32().FromEndian(endian);
            stream.DiscardBytes(4);               // unknown
            FileCount = stream.ReadUInt32().FromEndian(endian);
            Filenames = new List <string>((int)FileCount);
            for (uint i = 0; i < FileCount; ++i)
            {
                Filenames.Add(stream.ReadSizedString(48, encoding).TrimNull());
            }

            Data = stream;

            return(true);
        }
Esempio n. 18
0
        private bool LoadFile(Stream stream, TextUtils.GameTextEncoding encoding, EndianUtils.Endianness endian, BitUtils.Bitness bits)
        {
            uint magic      = stream.ReadUInt32().SwapEndian();
            uint headerSize = stream.ReadUInt32().FromEndian(endian);

            stream.ReadUInt32().FromEndian(endian);
            uint textStart = stream.ReadUInt32().FromEndian(endian);

            stream.ReadUInt32().FromEndian(endian);
            stream.ReadUInt32().FromEndian(endian);
            uint textLength = stream.ReadUInt32().FromEndian(endian);

            stream.ReadUInt32().FromEndian(endian);

            EntryList = FindText(stream, textStart, encoding, endian, bits);

            return(true);
        }
Esempio n. 19
0
        public static void WriteNulltermString(this Stream s, string str, TextUtils.GameTextEncoding encoding)
        {
            switch (encoding)
            {
            case TextUtils.GameTextEncoding.ASCII:
                WriteAsciiNullterm(s, str); return;

            case TextUtils.GameTextEncoding.ShiftJIS:
                WriteShiftJisNullterm(s, str); return;

            case TextUtils.GameTextEncoding.UTF8:
                WriteUTF8Nullterm(s, str); return;

            case TextUtils.GameTextEncoding.UTF16:
                WriteUTF16Nullterm(s, str); return;
            }
            throw new Exception("Writing nullterminated string not implemented for encoding " + encoding.ToString());
        }
Esempio n. 20
0
        private void LoadFile(Stream TO8CHTX, EndianUtils.Endianness endian, TextUtils.GameTextEncoding encoding, BitUtils.Bitness bits, int languageCount)
        {
            Header = new ChatFileHeader();

            ulong pos = (ulong)TO8CHTX.Position;

            Header.Identify  = TO8CHTX.ReadUInt64().FromEndian(endian);
            Header.Filesize  = TO8CHTX.ReadUInt32().FromEndian(endian);
            Header.Lines     = TO8CHTX.ReadUInt32().FromEndian(endian);
            Header.Unknown   = TO8CHTX.ReadUInt32().FromEndian(endian);
            Header.TextStart = TO8CHTX.ReadUInt32().FromEndian(endian);
            Header.Empty     = TO8CHTX.ReadUInt64().FromEndian(endian);

            Lines = new ChatFileLine[Header.Lines];

            int entrySize = (int)(4 + (languageCount + 1) * bits.NumberOfBytes());

            for (int i = 0; i < Header.Lines; i++)
            {
                Lines[i]              = new ChatFileLine();
                Lines[i].Location     = 0x20 + i * entrySize;
                Lines[i].NamePointer  = TO8CHTX.ReadUInt(bits, endian);
                Lines[i].TextPointers = new ulong[languageCount];
                for (int j = 0; j < languageCount; ++j)
                {
                    Lines[i].TextPointers[j] = TO8CHTX.ReadUInt(bits, endian);
                }
                Lines[i].Unknown = TO8CHTX.ReadUInt32().FromEndian(endian);

                Lines[i].SName  = TO8CHTX.ReadNulltermStringFromLocationAndReset((long)(pos + Lines[i].NamePointer + Header.TextStart), encoding);
                Lines[i].STexts = new string[languageCount];
                for (int j = 0; j < languageCount; ++j)
                {
                    Lines[i].STexts[j] = TO8CHTX.ReadNulltermStringFromLocationAndReset((long)(pos + Lines[i].TextPointers[j] + Header.TextStart), encoding).Replace('@', ' ');
                }
            }
        }
Esempio n. 21
0
        private bool LoadFile(Stream stream, EndianUtils.Endianness endian, TextUtils.GameTextEncoding encoding, uint textPointerLocationDiff)
        {
            string magic      = stream.ReadAscii(8);
            uint   alwaysSame = stream.ReadUInt32().FromEndian(endian);
            uint   filesize   = stream.ReadUInt32().FromEndian(endian);

            uint lengthSection1 = stream.ReadUInt32().FromEndian(endian);

            stream.Position = 0x50;
            int textPointerDiffDiff = (int)stream.ReadUInt32().FromEndian(endian);

            stream.Position = 0x20;
            uint textStart       = stream.ReadUInt32().FromEndian(endian);
            int  textPointerDiff = (int)stream.ReadUInt32().FromEndian(endian) - textPointerDiffDiff;

            EntryList = new List <ScenarioFileEntry>();

            // i wonder what the actual logic behind this is...
            uint textPointersLocation = (lengthSection1 + 0x80).Align(0x10) + textPointerLocationDiff;

            // + 0x1888; // + 0x1B4C // diff of 2C4 // Actually this isn't constant, dammit.

            if (textStart != textPointersLocation)
            {
                stream.Position = textPointersLocation;

                while (true)
                {
                    long loc = stream.Position;
                    stream.DiscardBytes(8);
                    uint[] ptrs = new uint[4];
                    ptrs[0] = stream.ReadUInt32().FromEndian(endian);
                    ptrs[1] = stream.ReadUInt32().FromEndian(endian);
                    ptrs[2] = stream.ReadUInt32().FromEndian(endian);
                    ptrs[3] = stream.ReadUInt32().FromEndian(endian);

                    if (stream.Position > textStart)
                    {
                        break;
                    }
                    if (ptrs.Any(x => x == 0))
                    {
                        break;
                    }
                    if (ptrs.Any(x => x + textPointerDiff < textStart))
                    {
                        break;
                    }
                    if (ptrs.Any(x => x + textPointerDiff >= filesize))
                    {
                        break;
                    }

                    var s = new ScenarioFileEntry();
                    s.Pointer = (uint)loc;
                    s.JpName  = stream.ReadNulltermStringFromLocationAndReset(ptrs[0] + textPointerDiff, encoding);
                    s.JpText  = stream.ReadNulltermStringFromLocationAndReset(ptrs[1] + textPointerDiff, encoding);
                    s.EnName  = stream.ReadNulltermStringFromLocationAndReset(ptrs[2] + textPointerDiff, encoding);
                    s.EnText  = stream.ReadNulltermStringFromLocationAndReset(ptrs[3] + textPointerDiff, encoding);
                    EntryList.Add(s);

                    stream.Position = loc + 0x18;
                }
            }

            return(true);
        }
        public static Dictionary <string, SCFOMBIN.SCFOMBIN> LoadBattleText(IContainer gameDataPath, GameLocale locale, GameVersion version, EndianUtils.Endianness endian, TextUtils.GameTextEncoding encoding, BitUtils.Bitness bits)
        {
            var BattleTextFiles = new Dictionary <string, SCFOMBIN.SCFOMBIN>();

            foreach (var filename in GenerateWebsite.GetBattleScenarioFileNames(gameDataPath, locale, version))
            {
                var bin = LoadBattleTextFile(gameDataPath, filename, locale, version, endian, encoding, bits);
                BattleTextFiles.Add(filename, bin);
            }

            return(BattleTextFiles);
        }
        public List <List <ScenarioData> > CreateScenarioIndexGroups(ScenarioType type, MapList.MapList maplist, IContainer gameDataPath, TextUtils.GameTextEncoding encoding, EndianUtils.Endianness endian, BitUtils.Bitness bits)
        {
            SortedDictionary <int, ScenarioWebsiteName> websiteNames = ScenarioWebsiteName.GenerateWebsiteNames(this.Version);

            Util.Assert(maplist.MapNames.Count == websiteNames.Count);

            List <ScenarioData> scenes = new List <ScenarioData>();
            List <ScenarioFile.ScenarioFile> scenarioFiles = new List <ScenarioFile.ScenarioFile>();
            bool haveSeenEP_030_010 = false;

            foreach (var d in websiteNames)
            {
                var names = maplist.MapNames[d.Key];
                if (d.Value.Type != type)
                {
                    continue;
                }

                string episodeID = names.Name3 == "dummy" ? names.Name1 : names.Name3;

                // the game has this file twice in scenario.dat, so ignore the first instance we encounter, as presumably the game would overwrite the first instance with the second?
                if (!haveSeenEP_030_010 && episodeID == "EP_030_010")
                {
                    haveSeenEP_030_010 = true;
                    continue;
                }

                int num      = d.Key;
                var metadata = new ScenarioData()
                {
                    ScenarioDatIndex = num, EpisodeId = episodeID, HumanReadableName = d.Value.Description != null ? d.Value.Description : episodeID
                };
                System.IO.Stream stream = GenerateWebsite.TryGetScenarioFile(gameDataPath, num, Locale, Version);
                if (stream != null)
                {
                    var orig = new ScenarioFile.ScenarioFile(stream, encoding, endian, bits);
                    orig.Metadata = metadata;
                    scenarioFiles.Add(orig);
                    scenes.Add(metadata);
                }
            }

            foreach (var s in scenarioFiles.OrderBy(x => x.Metadata.EpisodeId))
            {
                this.ScenarioFiles.Add(s.Metadata.EpisodeId, s);
            }
            return(ScenarioData.ProcessScenesToGroups(scenes));
        }
 public static SCFOMBIN.SCFOMBIN LoadBattleTextFile(IContainer gameDataPath, string filename, GameLocale locale, GameVersion version, EndianUtils.Endianness endian, TextUtils.GameTextEncoding encoding, BitUtils.Bitness bits)
 {
     if (!version.Is360())
     {
         uint ptrDiff = 0x1888;
         if (filename.StartsWith("BTL_XTM"))
         {
             ptrDiff = 0x1B4C;
         }
         var bin = new SCFOMBIN.SCFOMBIN(GenerateWebsite.TryGetBattleScenarioFile(gameDataPath, filename, locale, version), endian, encoding, ptrDiff);
         return(bin);
     }
     else
     {
         var bin = new ScenarioFile.ScenarioFile(GenerateWebsite.TryGetBattleScenarioFile(gameDataPath, filename, locale, version), encoding, endian, bits);
         var btl = new SCFOMBIN.SCFOMBIN();
         btl.EntryList = bin.EntryList;
         return(btl);
     }
 }
Esempio n. 25
0
        private bool LoadFile(DuplicatableStream inputStream, EndianUtils.Endianness?endianParam, TextUtils.GameTextEncoding encoding)
        {
            DuplicatableStream stream = inputStream.Duplicate();

            stream.Position = 0;
            EndianUtils.Endianness endian;
            if (endianParam == null)
            {
                uint magic = stream.ReadUInt32().FromEndian(EndianUtils.Endianness.BigEndian);
                if (magic == 0x53453320)
                {
                    endian = EndianUtils.Endianness.BigEndian;
                }
                else if (magic == 0x20334553)
                {
                    endian = EndianUtils.Endianness.LittleEndian;
                }
                else
                {
                    Console.WriteLine("Invalid magic: " + magic);
                    return(false);
                }
            }
            else
            {
                endian = endianParam.Value;
                uint magic = stream.ReadUInt32(endian);
                if (magic != 0x53453320)
                {
                    Console.WriteLine("Invalid magic: " + magic);
                    return(false);
                }
            }

            this.Endian = endian;

            uint lengthOfFilenameSection = stream.ReadUInt32(endian);            // probably?
            uint startOfFilenameSection  = stream.ReadUInt32(endian);            // probably?

            DataBegin = stream.ReadUInt32(endian);

            stream.Position = startOfFilenameSection;
            uint magicOfFilenameSection = stream.ReadUInt32(endian);

            FileCount = stream.ReadUInt32(endian);
            Filenames = new List <string>((int)FileCount);
            for (uint i = 0; i < FileCount; ++i)
            {
                Filenames.Add(stream.ReadSizedString(48, encoding).TrimNull());
            }

            Data = stream;

            return(true);
        }
Esempio n. 26
0
        public static int Execute(List <string> args)
        {
            bool gamedirmode = args.Count == 3 || args.Count == 4;
            bool manualmode  = args.Count == 9;

            if (!gamedirmode && !manualmode)
            {
                System.Windows.Forms.MessageBox.Show(
                    "Requires arguments:\n\n" +
                    "  For automatically fetching files from game directory (point at folder containing item.svo):\n" +
                    "    Version Locale GameDirectory [STRING_DIC.SO]\n" +
                    "  STRING_DIC.SO can be overridden to select a different language file.\n" +
                    "\n" +
                    "  For manually providing files:\n" +
                    "    Version Locale ITEM.DAT STRING_DIC.SO T8BTSK T8BTEMST COOKDAT WRLDDAT ITEMSORT.DAT\n" +
                    "\n" +
                    "'Version' should be one of: 360, 360EU, PS3, PC\n" +
                    "'Locale' should be 1 for the 1st language in the given STRING_DIC, or 2 for the second"
                    );
                return(-1);
            }

            GameVersion?version = null;

            EndianUtils.Endianness     endian   = EndianUtils.Endianness.BigEndian;
            BitUtils.Bitness           bits     = BitUtils.Bitness.B32;
            TextUtils.GameTextEncoding encoding = TextUtils.GameTextEncoding.ShiftJIS;
            switch (args[0].ToUpperInvariant())
            {
            case "360":
                version = GameVersion.X360_US;
                break;

            case "360EU":
                version  = GameVersion.X360_EU;
                encoding = TextUtils.GameTextEncoding.UTF8;
                break;

            case "PS3":
                version = GameVersion.PS3;
                break;

            case "PC":
                version  = GameVersion.PC;
                endian   = EndianUtils.Endianness.LittleEndian;
                bits     = BitUtils.Bitness.B64;
                encoding = TextUtils.GameTextEncoding.UTF8;
                break;
            }
            int locale = 0;

            if (args[1] == "1")
            {
                locale = 1;
            }
            else if (args[1] == "2")
            {
                locale = 2;
            }

            if (version == null || locale == 0)
            {
                Console.WriteLine("First parameter must indicate game version, second parameter must indicate locale!");
                return(-1);
            }

            DuplicatableStream itemDatStream;
            DuplicatableStream itemSortStream;
            DuplicatableStream stringDicStream;
            DuplicatableStream skillsStream;
            DuplicatableStream enemiesStream;
            DuplicatableStream cookdatStream;
            DuplicatableStream locationsStream;

            if (manualmode)
            {
                itemDatStream   = new DuplicatableFileStream(args[2]).CopyToByteArrayStreamAndDispose();
                itemSortStream  = new DuplicatableFileStream(args[8]).CopyToByteArrayStreamAndDispose();
                stringDicStream = new DuplicatableFileStream(args[3]).CopyToByteArrayStreamAndDispose();
                skillsStream    = new DuplicatableFileStream(args[4]).CopyToByteArrayStreamAndDispose();
                enemiesStream   = new DuplicatableFileStream(args[5]).CopyToByteArrayStreamAndDispose();
                cookdatStream   = new DuplicatableFileStream(args[6]).CopyToByteArrayStreamAndDispose();
                locationsStream = new DuplicatableFileStream(args[7]).CopyToByteArrayStreamAndDispose();
            }
            else
            {
                bool hasCooksvo = VesperiaUtil.Is360(version.Value);

                using (var itemsvo = new FPS4(Path.Combine(args[2], "item.svo"))) {
                    itemDatStream  = itemsvo.GetChildByName("ITEM.DAT").AsFile.DataStream.CopyToByteArrayStreamAndDispose();
                    itemSortStream = itemsvo.GetChildByName("ITEMSORT.DAT").AsFile.DataStream.CopyToByteArrayStreamAndDispose();
                }
                using (var menusvo = new FPS4(Path.Combine(args[2], "menu.svo"))) {
                    if (!hasCooksvo)
                    {
                        cookdatStream = menusvo.GetChildByName("COOKDATA.BIN").AsFile.DataStream.CopyToByteArrayStreamAndDispose();
                    }
                    else
                    {
                        using (var cooksvo = new FPS4(Path.Combine(args[2], "cook.svo"))) {
                            cookdatStream = cooksvo.GetChildByName("COOKDATA.BIN").AsFile.DataStream.CopyToByteArrayStreamAndDispose();
                        }
                    }
                    locationsStream = menusvo.GetChildByName("WORLDDATA.BIN").AsFile.DataStream.CopyToByteArrayStreamAndDispose();
                }
                if (args.Count == 3)
                {
                    if (version == GameVersion.X360_EU)
                    {
                        stringDicStream = new DuplicatableFileStream(Path.Combine(args[2], "language", "string_dic_uk.so")).CopyToByteArrayStreamAndDispose();
                    }
                    else if (version == GameVersion.PC)
                    {
                        stringDicStream = new DuplicatableFileStream(Path.Combine(args[2], "language", "string_dic_ENG.so")).CopyToByteArrayStreamAndDispose();
                    }
                    else
                    {
                        using (var stringsvo = new FPS4(Path.Combine(args[2], "string.svo"))) {
                            stringDicStream = stringsvo.GetChildByName("STRING_DIC.SO").AsFile.DataStream.CopyToByteArrayStreamAndDispose();
                        }
                    }
                }
                else
                {
                    stringDicStream = new DuplicatableFileStream(args[3]).CopyToByteArrayStreamAndDispose();
                }
                using (var btlsvo = new FPS4(Path.Combine(args[2], "btl.svo"))) {
                    using (var btlpack = new FPS4(btlsvo.GetChildByName(version == GameVersion.X360_EU ? "BTL_PACK_UK.DAT" : "BTL_PACK.DAT").AsFile.DataStream)) {
                        using (var all = new FPS4(btlpack.GetChildByIndex(10).AsFile.DataStream)) {
                            skillsStream = all.GetChildByIndex(0).AsFile.DataStream.CopyToByteArrayStreamAndDispose();
                        }
                        using (var all = new FPS4(btlpack.GetChildByIndex(5).AsFile.DataStream)) {
                            enemiesStream = all.GetChildByIndex(0).AsFile.DataStream.CopyToByteArrayStreamAndDispose();
                        }
                    }
                }
            }


            HyoutaTools.Tales.Vesperia.ItemDat.ItemDat items = new HyoutaTools.Tales.Vesperia.ItemDat.ItemDat(itemDatStream, itemSortStream, EndianUtils.Endianness.BigEndian);

            TSSFile TSS;

            try {
                TSS = new TSSFile(stringDicStream, encoding, endian);
            } catch (System.IO.FileNotFoundException) {
                Console.WriteLine("Could not open STRING_DIC.SO, exiting.");
                return(-1);
            }

            HyoutaTools.Tales.Vesperia.T8BTSK.T8BTSK     skills    = new HyoutaTools.Tales.Vesperia.T8BTSK.T8BTSK(skillsStream, endian, bits);
            HyoutaTools.Tales.Vesperia.T8BTEMST.T8BTEMST enemies   = new HyoutaTools.Tales.Vesperia.T8BTEMST.T8BTEMST(enemiesStream, endian, bits);
            HyoutaTools.Tales.Vesperia.COOKDAT.COOKDAT   cookdat   = new HyoutaTools.Tales.Vesperia.COOKDAT.COOKDAT(cookdatStream, endian);
            HyoutaTools.Tales.Vesperia.WRLDDAT.WRLDDAT   locations = new HyoutaTools.Tales.Vesperia.WRLDDAT.WRLDDAT(locationsStream, endian);

            Console.WriteLine("Initializing GUI...");
            ItemForm itemForm = new ItemForm(version.Value, locale - 1, items, TSS, skills, enemies, cookdat, locations);

            itemForm.Show();
            return(0);
        }
Esempio n. 27
0
        public static string ReadNulltermStringFromLocationAndReset(this Stream s, long location, TextUtils.GameTextEncoding encoding)
        {
            long pos = s.Position;

            s.Position = location;
            string str = s.ReadNulltermString(encoding);

            s.Position = pos;
            return(str);
        }
Esempio n. 28
0
 public static string ReadNulltermStringFromLocationAndReset(this Stream s, ulong location, TextUtils.GameTextEncoding encoding)
 {
     return(ReadNulltermStringFromLocationAndReset(s, (long)location, encoding));
 }
Esempio n. 29
0
 public ChatFile(string filename, EndianUtils.Endianness endian, TextUtils.GameTextEncoding encoding, BitUtils.Bitness bits, int languageCount)
 {
     using (Stream stream = new FileStream(filename, FileMode.Open, FileAccess.Read)) {
         LoadFile(stream, endian, encoding, bits, languageCount);
     }
 }
Esempio n. 30
0
 public ChatFile(Stream file, EndianUtils.Endianness endian, TextUtils.GameTextEncoding encoding, BitUtils.Bitness bits, int languageCount)
 {
     LoadFile(file, endian, encoding, bits, languageCount);
 }