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); }
public MapList(System.IO.Stream stream, EndianUtils.Endianness endian, BitUtils.Bitness bits) { if (!LoadFile(stream, endian, bits)) { throw new Exception("Loading MapList failed!"); } }
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); }
public T8BTSK(Stream stream, EndianUtils.Endianness endian, BitUtils.Bitness bits) { if (!LoadFile(stream, endian, bits)) { throw new Exception("Loading T8BTSK failed!"); } }
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); }
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); }
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!"); } } }
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()); }
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()); }
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); }
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); }
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); }
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); } }
public ChatFile(Stream file, EndianUtils.Endianness endian, TextUtils.GameTextEncoding encoding, BitUtils.Bitness bits, int languageCount) { LoadFile(file, endian, encoding, bits, languageCount); }
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)); }
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)); }
public UnknownSkitData5(System.IO.Stream stream, EndianUtils.Endianness endian, BitUtils.Bitness bits) { Unknown1 = stream.ReadUInt(bits, endian); }
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; }
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)); }
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('@', ' '); } } }
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); } }
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); }
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)); }
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); }
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)); }
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? }
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); }