Ejemplo n.º 1
0
        private bool LoadFile(Stream stream, EndianUtils.Endianness endian, BitUtils.Bitness bits)
        {
            string magic = stream.ReadAscii(8);

            if (magic != "T8BTTA  ")
            {
                throw new Exception("Invalid magic.");
            }
            uint strategySetCount    = stream.ReadUInt32().FromEndian(endian);
            uint strategyOptionCount = stream.ReadUInt32().FromEndian(endian);
            uint refStringStart      = stream.ReadUInt32().FromEndian(endian);

            StrategySetList = new List <StrategySet>((int)strategySetCount);
            for (uint i = 0; i < strategySetCount; ++i)
            {
                StrategySet ss = new StrategySet(stream, refStringStart, endian, bits);
                StrategySetList.Add(ss);
            }
            StrategyOptionList = new List <StrategyOption>((int)strategyOptionCount);
            for (uint i = 0; i < strategyOptionCount; ++i)
            {
                StrategyOption so = new StrategyOption(stream, refStringStart, endian, bits);
                StrategyOptionList.Add(so);
            }

            StrategyOptionDict = new Dictionary <uint, StrategyOption>(StrategyOptionList.Count);
            foreach (var option in StrategyOptionList)
            {
                StrategyOptionDict.Add(option.InGameID, option);
            }

            return(true);
        }
Ejemplo n.º 2
0
 public MapList(System.IO.Stream stream, EndianUtils.Endianness endian, BitUtils.Bitness bits)
 {
     if (!LoadFile(stream, endian, bits))
     {
         throw new Exception("Loading MapList failed!");
     }
 }
Ejemplo n.º 3
0
        private bool LoadFile(Stream stream, EndianUtils.Endianness endian, BitUtils.Bitness bits)
        {
            string magic = stream.ReadAscii(8);

            if (magic != "T8BTEMEG")
            {
                throw new Exception("Invalid magic.");
            }
            uint encounterGroupCount = stream.ReadUInt32().FromEndian(endian);
            uint refStringStart      = stream.ReadUInt32().FromEndian(endian);

            EncounterGroupList = new List <EncounterGroup>((int)encounterGroupCount);
            for (uint i = 0; i < encounterGroupCount; ++i)
            {
                EncounterGroup s = new EncounterGroup(stream, refStringStart, endian, bits);
                EncounterGroupList.Add(s);
            }

            EncounterGroupIdDict = new Dictionary <uint, EncounterGroup>(EncounterGroupList.Count);
            foreach (EncounterGroup e in EncounterGroupList)
            {
                EncounterGroupIdDict.Add(e.InGameID, e);
            }

            return(true);
        }
Ejemplo n.º 4
0
 public T8BTSK(Stream stream, EndianUtils.Endianness endian, BitUtils.Bitness bits)
 {
     if (!LoadFile(stream, endian, bits))
     {
         throw new Exception("Loading T8BTSK failed!");
     }
 }
Ejemplo n.º 5
0
        private bool LoadFile(Stream stream, EndianUtils.Endianness endian, BitUtils.Bitness bits)
        {
            string magic = stream.ReadAscii(8);

            if (magic != "T8BTSK  ")
            {
                throw new Exception("Invalid magic.");
            }
            uint skillCount     = stream.ReadUInt32().FromEndian(endian);
            uint refStringStart = stream.ReadUInt32().FromEndian(endian);

            SkillList = new List <Skill>((int)skillCount);
            for (uint i = 0; i < skillCount; ++i)
            {
                Skill s = new Skill(stream, refStringStart, endian, bits);
                SkillList.Add(s);
            }

            SkillIdDict = new Dictionary <uint, Skill>(SkillList.Count);
            foreach (Skill s in SkillList)
            {
                SkillIdDict.Add(s.InGameID, s);
            }

            return(true);
        }
Ejemplo n.º 6
0
        private bool LoadFile(Stream stream, EndianUtils.Endianness endian, BitUtils.Bitness bits)
        {
            string magic = stream.ReadAscii(8);

            if (magic != "TOVNPCT\0")
            {
                throw new Exception("Invalid magic.");
            }
            uint fileSize         = stream.ReadUInt32().FromEndian(endian);
            uint unknownDataStart = stream.ReadUInt32().FromEndian(endian);
            uint unknownDataCount = stream.ReadUInt32().FromEndian(endian);
            uint npcDefStart      = stream.ReadUInt32().FromEndian(endian);
            uint npcDefCount      = stream.ReadUInt32().FromEndian(endian);
            uint refStringStart   = stream.ReadUInt32().FromEndian(endian);

            stream.Position = npcDefStart;
            NpcDefList      = new List <NpcDialogueDefinition>((int)npcDefCount);
            for (uint i = 0; i < npcDefCount; ++i)
            {
                NpcDialogueDefinition n = new NpcDialogueDefinition(stream, refStringStart, endian, bits);
                NpcDefList.Add(n);
            }

            return(true);
        }
Ejemplo n.º 7
0
 public T8BTSK(String filename, EndianUtils.Endianness endian, BitUtils.Bitness bits)
 {
     using (Stream stream = new System.IO.FileStream(filename, FileMode.Open, System.IO.FileAccess.Read)) {
         if (!LoadFile(stream, endian, bits))
         {
             throw new Exception("Loading T8BTSK failed!");
         }
     }
 }
Ejemplo n.º 8
0
        public static void WriteInt(this Stream s, long num, BitUtils.Bitness bits, EndianUtils.Endianness endian)
        {
            switch (bits)
            {
            case BitUtils.Bitness.B8: s.WriteInt8((sbyte)num); return;

            case BitUtils.Bitness.B16: s.WriteInt16((short)num, endian); return;

            case BitUtils.Bitness.B32: s.WriteInt32((int)num, endian); return;

            case BitUtils.Bitness.B64: s.WriteInt64(num, endian); return;
            }
            throw new Exception("Writing int not implemented for bitness " + bits.ToString());
        }
Ejemplo n.º 9
0
        public static long PeekInt(this Stream s, BitUtils.Bitness bits, EndianUtils.Endianness endian)
        {
            switch (bits)
            {
            case BitUtils.Bitness.B8: return(s.PeekInt8());

            case BitUtils.Bitness.B16: return(s.PeekInt16(endian));

            case BitUtils.Bitness.B32: return(s.PeekInt32(endian));

            case BitUtils.Bitness.B64: return(s.PeekInt64(endian));
            }
            throw new Exception("Peeking int not implemented for bitness " + bits.ToString());
        }
Ejemplo n.º 10
0
        private bool LoadFile(Stream stream, EndianUtils.Endianness endian, BitUtils.Bitness bits)
        {
            string magic = stream.ReadAscii(8);

            if (magic != "T8BTGR  ")
            {
                throw new Exception("Invalid magic.");
            }
            uint entryCount     = stream.ReadUInt32().FromEndian(endian);
            uint refStringStart = stream.ReadUInt32().FromEndian(endian);

            GradeShopEntryList = new List <GradeShopEntry>((int)entryCount);
            for (uint i = 0; i < entryCount; ++i)
            {
                GradeShopEntry e = new GradeShopEntry(stream, refStringStart, endian, bits);
                GradeShopEntryList.Add(e);
            }

            return(true);
        }
Ejemplo n.º 11
0
        private bool LoadFile(Stream stream, EndianUtils.Endianness endian, BitUtils.Bitness bits)
        {
            string magic = stream.ReadAscii(8);

            if (magic != "T8BTXTMT")
            {
                throw new Exception("Invalid magic.");
            }
            uint infoCount      = stream.ReadUInt32().FromEndian(endian);
            uint refStringStart = stream.ReadUInt32().FromEndian(endian);

            TreasureInfoList = new List <TreasureInfo>((int)infoCount);
            for (uint i = 0; i < infoCount; ++i)
            {
                TreasureInfo ti = new TreasureInfo(stream, refStringStart, endian, bits);
                TreasureInfoList.Add(ti);
            }

            return(true);
        }
Ejemplo n.º 12
0
        private bool LoadFile(Stream stream, EndianUtils.Endianness endian, BitUtils.Bitness bits)
        {
            string magic = stream.ReadAscii(8);

            if (magic != "TOVNPCL\0")
            {
                throw new Exception("Invalid magic.");
            }
            uint fileSize       = stream.ReadUInt32().FromEndian(endian);
            uint dataStart      = stream.ReadUInt32().FromEndian(endian);
            uint dataCount      = stream.ReadUInt32().FromEndian(endian);
            uint refStringStart = stream.ReadUInt32().FromEndian(endian);

            stream.Position = dataStart;
            NpcFileList     = new List <NpcFileReference>((int)dataCount);
            for (uint i = 0; i < dataCount; ++i)
            {
                NpcFileReference n = new NpcFileReference(stream, refStringStart, endian, bits);
                NpcFileList.Add(n);
            }

            return(true);
        }
Ejemplo n.º 13
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);
     }
 }
Ejemplo n.º 14
0
 public ChatFile(Stream file, EndianUtils.Endianness endian, TextUtils.GameTextEncoding encoding, BitUtils.Bitness bits, int languageCount)
 {
     LoadFile(file, endian, encoding, bits, languageCount);
 }
Ejemplo n.º 15
0
        public NpcFileReference(System.IO.Stream stream, uint refStringStart, EndianUtils.Endianness endian, BitUtils.Bitness bits)
        {
            ulong refStringLocation1 = stream.ReadUInt(bits, endian);
            ulong refStringLocation2 = stream.ReadUInt(bits, endian);

            Filesize = stream.ReadUInt32().FromEndian(endian);
            stream.ReadUInt32();

            Map      = stream.ReadAsciiNulltermFromLocationAndReset((long)(refStringStart + refStringLocation1));
            Filename = stream.ReadAsciiNulltermFromLocationAndReset((long)(refStringStart + refStringLocation2));
        }
Ejemplo n.º 16
0
        public MapName(System.IO.Stream stream, uint textstart, EndianUtils.Endianness endian, BitUtils.Bitness bits)
        {
            ulong p1       = stream.ReadUInt(bits, endian);
            ulong p2       = stream.ReadUInt(bits, endian);
            ulong p3       = stream.ReadUInt(bits, endian);
            ulong unknown4 = stream.ReadUInt(bits, endian);               // either this or unknown5 is bitness affected, probably?

            Util.Assert(unknown4 == 0);

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

            Util.Assert(unknown5 == 0);
            Unknown6a = stream.ReadUInt16().FromEndian(endian).AsSigned();
            uint unknown6b = stream.ReadUInt16().FromEndian(endian);

            Util.Assert(unknown6b == 0);
            uint unknown7 = stream.ReadUInt32().FromEndian(endian);

            Util.Assert(unknown7 == 0);
            uint unknown8 = stream.ReadUInt32().FromEndian(endian);

            Util.Assert(unknown8 == 0);

            Name1 = stream.ReadAsciiNulltermFromLocationAndReset((long)(textstart + p1));
            Name2 = stream.ReadAsciiNulltermFromLocationAndReset((long)(textstart + p2));
            Name3 = stream.ReadAsciiNulltermFromLocationAndReset((long)(textstart + p3));
        }
Ejemplo n.º 17
0
 public UnknownSkitData5(System.IO.Stream stream, EndianUtils.Endianness endian, BitUtils.Bitness bits)
 {
     Unknown1 = stream.ReadUInt(bits, endian);
 }
Ejemplo n.º 18
0
        public SkitInfo(System.IO.Stream stream, uint refStringStart, EndianUtils.Endianness endian, BitUtils.Bitness bits)
        {
            // first 16 bytes are always null in the existing files
            stream.DiscardBytes(0x10);

            SkitFlagUnique = stream.ReadUInt16().FromEndian(endian);
            Unknown2       = stream.ReadUInt16().FromEndian(endian);

            FlagTrigger      = stream.ReadUInt32().FromEndian(endian);
            FlagCancel       = stream.ReadUInt32().FromEndian(endian);
            Category         = stream.ReadUInt32().FromEndian(endian);
            CharacterBitmask = stream.ReadUInt32().FromEndian(endian);
            Unknown4         = stream.ReadUInt32().FromEndian(endian);
            SkitConditionForwarderReference = stream.ReadUInt(bits, endian);
            SkitConditionRelated            = stream.ReadUInt32().FromEndian(endian);
            SkitFlag = stream.ReadUInt32().FromEndian(endian);
            ulong refStringPos = stream.ReadUInt(bits, endian);

            StringDicIdName      = stream.ReadUInt32().FromEndian(endian);
            StringDicIdCondition = stream.ReadUInt32().FromEndian(endian);

            RefString = stream.ReadAsciiNulltermFromLocationAndReset((long)(refStringStart + refStringPos));

            return;
        }
Ejemplo n.º 19
0
        public NpcDialogueDefinition(System.IO.Stream stream, uint refStringStart, EndianUtils.Endianness endian, BitUtils.Bitness bits)
        {
            Unknown1    = stream.ReadUInt32().FromEndian(endian);
            Unknown2    = stream.ReadUInt32().FromEndian(endian);
            StringDicId = stream.ReadUInt32().FromEndian(endian);
            Unknown4    = stream.ReadUInt32().FromEndian(endian);

            Unknown5a1 = (byte)stream.ReadByte();
            Unknown5a2 = (byte)stream.ReadByte();
            Unknown5b1 = (byte)stream.ReadByte();
            Unknown5b2 = (byte)stream.ReadByte();
            Unknown6a  = (short)stream.ReadUInt16().FromEndian(endian);
            Unknown6b  = (short)stream.ReadUInt16().FromEndian(endian);
            Unknown7a1 = (byte)stream.ReadByte();
            Unknown7a2 = (byte)stream.ReadByte();
            Unknown7b  = stream.ReadUInt16().FromEndian(endian);
            Unknown8   = stream.ReadUInt32().FromEndian(endian);

            RefStringLocation1 = stream.ReadUInt(bits, endian);
            RefStringLocation2 = stream.ReadUInt(bits, endian);
            Unknown11          = stream.ReadUInt32().FromEndian(endian);
            Unknown12          = stream.ReadUInt32().FromEndian(endian);

            Unknown13 = stream.ReadUInt32().FromEndian(endian);
            Unknown14 = stream.ReadUInt32().FromEndian(endian);
            Unknown15 = stream.ReadUInt32().FromEndian(endian);
            Unknown16 = stream.ReadUInt32().FromEndian(endian);

            RefString1 = stream.ReadAsciiNulltermFromLocationAndReset((long)(refStringStart + RefStringLocation1));
            RefString2 = stream.ReadAsciiNulltermFromLocationAndReset((long)(refStringStart + RefStringLocation2));
        }
Ejemplo 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('@', ' ');
                }
            }
        }
Ejemplo n.º 21
0
 public SkitConditionForwarder(System.IO.Stream stream, EndianUtils.Endianness endian, BitUtils.Bitness bits)
 {
     SkitConditionReference = stream.ReadUInt(bits, endian);
     SkitConditionCount     = stream.ReadUInt32().FromEndian(endian);
 }
        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 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 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);
     }
 }
Ejemplo n.º 25
0
        private bool LoadFile(Stream stream, EndianUtils.Endianness endian, BitUtils.Bitness bits)
        {
            string magic = stream.ReadAscii(8);

            if (magic != "TO8CHLI\0")
            {
                throw new Exception("Invalid magic.");
            }
            uint fileSize                 = stream.ReadUInt32().FromEndian(endian);
            uint skitInfoCount            = stream.ReadUInt32().FromEndian(endian);
            uint skitInfoOffset           = stream.ReadUInt32().FromEndian(endian);
            uint conditionForwarderCount  = stream.ReadUInt32().FromEndian(endian);
            uint conditionForwarderOffset = stream.ReadUInt32().FromEndian(endian);
            uint conditionCount           = stream.ReadUInt32().FromEndian(endian);
            uint conditionOffset          = stream.ReadUInt32().FromEndian(endian);
            uint uCount4        = stream.ReadUInt32().FromEndian(endian);
            uint uOffset4       = stream.ReadUInt32().FromEndian(endian);
            uint uCount5        = stream.ReadUInt32().FromEndian(endian);
            uint uOffset5       = stream.ReadUInt32().FromEndian(endian);
            uint refStringStart = stream.ReadUInt32().FromEndian(endian);

            SkitInfoList    = new List <SkitInfo>((int)skitInfoCount);
            stream.Position = skitInfoOffset;
            for (uint i = 0; i < skitInfoCount; ++i)
            {
                SkitInfo s = new SkitInfo(stream, refStringStart, endian, bits);
                SkitInfoList.Add(s);
            }

            SkitConditionForwarderList = new List <SkitConditionForwarder>((int)conditionForwarderCount);
            stream.Position            = conditionForwarderOffset;
            for (uint i = 0; i < conditionForwarderCount; ++i)
            {
                var s = new SkitConditionForwarder(stream, endian, bits);
                SkitConditionForwarderList.Add(s);
            }

            SkitConditionList = new List <SkitCondition>((int)conditionCount);
            stream.Position   = conditionOffset;
            for (uint i = 0; i < conditionCount; ++i)
            {
                var s = new SkitCondition(stream, endian);
                SkitConditionList.Add(s);
            }

            UnknownSkitData4List = new List <UnknownSkitData4>((int)uCount4);
            stream.Position      = uOffset4;
            for (uint i = 0; i < uCount4; ++i)
            {
                var s = new UnknownSkitData4(stream, endian, bits);
                UnknownSkitData4List.Add(s);
            }

            UnknownSkitData5List = new List <UnknownSkitData5>((int)uCount5);
            stream.Position      = uOffset5;
            for (uint i = 0; i < uCount5; ++i)
            {
                var s = new UnknownSkitData5(stream, endian, bits);
                UnknownSkitData5List.Add(s);
            }

            return(true);
        }
Ejemplo n.º 26
0
        public TreasureInfo(System.IO.Stream stream, uint refStringStart, EndianUtils.Endianness endian, BitUtils.Bitness bits)
        {
            EntrySize         = stream.ReadUInt32().FromEndian(endian);
            ID                = stream.ReadUInt32().FromEndian(endian);
            IDAgain           = stream.ReadUInt32().FromEndian(endian);
            RefStringLocation = stream.ReadUInt(bits, endian);

            ChestTypes = new uint[4];
            for (int i = 0; i < ChestTypes.Length; ++i)
            {
                ChestTypes[i] = stream.ReadUInt32().FromEndian(endian);
            }

            ChestPositions = new float[8];
            for (int i = 0; i < ChestPositions.Length; ++i)
            {
                ChestPositions[i] = stream.ReadUInt32().FromEndian(endian).UIntToFloat();
            }

            Items = new uint[12];
            for (int i = 0; i < Items.Length; ++i)
            {
                Items[i] = stream.ReadUInt32().FromEndian(endian);
            }
            Chances = new uint[12];
            for (int i = 0; i < Chances.Length; ++i)
            {
                Chances[i] = stream.ReadUInt32().FromEndian(endian);
            }

            RefString = stream.ReadAsciiNulltermFromLocationAndReset((long)(refStringStart + RefStringLocation));
        }
Ejemplo n.º 27
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);
        }
Ejemplo n.º 28
0
        public EnemyGroup(System.IO.Stream stream, uint refStringStart, EndianUtils.Endianness endian, BitUtils.Bitness bits)
        {
            uint entryLength = stream.ReadUInt32().FromEndian(endian);

            ID          = stream.ReadUInt32().FromEndian(endian);
            StringDicID = stream.ReadUInt32().FromEndian(endian);
            InGameID    = stream.ReadUInt32().FromEndian(endian);
            ulong refLoc = stream.ReadUInt(bits, endian);

            EnemyIDs = new int[8];
            for (int i = 0; i < EnemyIDs.Length; ++i)
            {
                EnemyIDs[i] = (int)stream.ReadUInt32().FromEndian(endian);
            }

            UnknownFloats = new float[8];
            for (int i = 0; i < UnknownFloats.Length; ++i)
            {
                UnknownFloats[i] = stream.ReadUInt32().FromEndian(endian).UIntToFloat();
            }
            PosX = new float[8];
            for (int i = 0; i < PosX.Length; ++i)
            {
                PosX[i] = stream.ReadUInt32().FromEndian(endian).UIntToFloat();
            }
            PosY = new float[8];
            for (int i = 0; i < PosY.Length; ++i)
            {
                PosY[i] = stream.ReadUInt32().FromEndian(endian).UIntToFloat();
            }
            Scale = new float[8];
            for (int i = 0; i < Scale.Length; ++i)
            {
                Scale[i] = stream.ReadUInt32().FromEndian(endian).UIntToFloat();
            }

            SomeFlag    = stream.ReadUInt32().FromEndian(endian);
            UnknownInts = new uint[8];
            for (int i = 0; i < UnknownInts.Length; ++i)
            {
                UnknownInts[i] = stream.ReadUInt32().FromEndian(endian);
            }

            RefString = stream.ReadAsciiNulltermFromLocationAndReset((long)(refStringStart + refLoc));
        }
Ejemplo n.º 29
0
 public ShopDefinition(System.IO.Stream stream, EndianUtils.Endianness endian, BitUtils.Bitness bits)
 {
     InGameID    = stream.ReadUInt32().FromEndian(endian);
     StringDicID = stream.ReadUInt32().FromEndian(endian);
     stream.ReadUInt32().FromEndian(endian);               // second instance of string dic id?
     stream.ReadUInt32().FromEndian(endian);               // always empty?
     OnTrigger    = stream.ReadUInt32().FromEndian(endian);
     ChangeToShop = stream.ReadUInt32().FromEndian(endian);
     stream.DiscardBytes(4 + bits.NumberOfBytes());               // always empty?
 }
Ejemplo n.º 30
0
 public UnknownSkitData4(System.IO.Stream stream, EndianUtils.Endianness endian, BitUtils.Bitness bits)
 {
     ScenarioBegin = stream.ReadUInt32().FromEndian(endian);
     ScenarioEnd   = stream.ReadUInt32().FromEndian(endian);
     DataBegin     = stream.ReadUInt(bits, endian);
     DataCount     = stream.ReadUInt32().FromEndian(endian);
 }