public static Savegame Load(ISavegameSerializer savegameSerializer, SavegameInputFiles savegameFiles, IFileContainer partyTextsContainer) { var savegame = new Savegame(); savegameSerializer.Read(savegame, savegameFiles, partyTextsContainer); return(savegame); }
public Savegame LoadInitial(IGameData gameData, ISavegameSerializer savegameSerializer) { var savegame = new Savegame(); SavegameInputFiles savegameFiles; IFileContainer partyTextContainer; try { savegameFiles = new SavegameInputFiles { SaveDataReader = gameData.Files["Initial/Party_data.sav"].Files[1], PartyMemberDataReaders = gameData.Files["Initial/Party_char.amb"], ChestDataReaders = gameData.Files["Initial/Chest_data.amb"], MerchantDataReaders = gameData.Files["Initial/Merchant_data.amb"], AutomapDataReaders = gameData.Files["Initial/Automap.amb"] }; } catch { try { savegameFiles = new SavegameInputFiles { SaveDataReader = gameData.Files["Save.00/Party_data.sav"].Files[1], PartyMemberDataReaders = gameData.Files["Save.00/Party_char.amb"], ChestDataReaders = gameData.Files["Save.00/Chest_data.amb"], MerchantDataReaders = gameData.Files["Save.00/Merchant_data.amb"], AutomapDataReaders = gameData.Files["Save.00/Automap.amb"] }; } catch { savegameFiles = new SavegameInputFiles { SaveDataReader = gameData.Files["Party_data.sav"].Files[1], PartyMemberDataReaders = gameData.Files["Party_char.amb"], ChestDataReaders = gameData.Files["Chest_data.amb"], MerchantDataReaders = gameData.Files["Merchant_data.amb"], AutomapDataReaders = gameData.Files["Automap.amb"] }; } } partyTextContainer = gameData.Files["Party_texts.amb"]; savegameSerializer.Read(savegame, savegameFiles, partyTextContainer); return(savegame); }
public void Read(Savegame savegame, SavegameInputFiles files, IFileContainer partyTextsContainer, IFileContainer fallbackPartyMemberContainer = null) { var partyMemberReader = new Characters.PartyMemberReader(); var chestReader = new ChestReader(); var merchantReader = new MerchantReader(); var automapReader = new AutomapReader(); savegame.PartyMembers.Clear(); savegame.Chests.Clear(); savegame.Merchants.Clear(); savegame.Automaps.Clear(); foreach (var partyMemberDataReader in files.PartyMemberDataReaders.Files) { var partyTextFile = partyTextsContainer.Files.ContainsKey(partyMemberDataReader.Key) ? partyTextsContainer.Files[partyMemberDataReader.Key] : null; partyMemberDataReader.Value.Position = 0; savegame.PartyMembers.Add((uint)partyMemberDataReader.Key, PartyMember.Load((uint)partyMemberDataReader.Key, partyMemberReader, partyMemberDataReader.Value, partyTextFile, fallbackPartyMemberContainer?.Files[partyMemberDataReader.Key])); } foreach (var chestDataReader in files.ChestDataReaders.Files) { chestDataReader.Value.Position = 0; savegame.Chests.Add((uint)chestDataReader.Key, Chest.Load(chestReader, chestDataReader.Value)); } foreach (var merchantDataReader in files.MerchantDataReaders.Files) { merchantDataReader.Value.Position = 0; savegame.Merchants.Add((uint)merchantDataReader.Key, Merchant.Load(merchantReader, merchantDataReader.Value)); } foreach (var automapDataReader in files.AutomapDataReaders.Files) { automapDataReader.Value.Position = 0; savegame.Automaps.Add((uint)automapDataReader.Key, Automap.Load(automapReader, automapDataReader.Value)); } files.SaveDataReader.Position = 0; ReadSaveData(savegame, files.SaveDataReader); }
public Savegame Load(IGameData gameData, ISavegameSerializer savegameSerializer, int saveSlot) { if (!transferredFolderSaves && File.Exists(savesPath)) { transferredFolderSaves = true; var folderSaveData = new GameData(GameData.LoadPreference.ForceExtracted, null, false); try { folderSaveData.Load(path, true); KeyValuePair <string, IFileContainer>?TransferFile(string name) { if (folderSaveData.Files.ContainsKey(name)) { return(KeyValuePair.Create(name, folderSaveData.Files[name])); } return(null); } for (int i = 1; i <= 10; ++i) { var saveFiles = new List <KeyValuePair <string, IFileContainer> >(5); foreach (var saveFileName in SaveFileNames) { var file = TransferFile($"Save.{i:00}/{saveFileName}"); if (file == null) { break; } saveFiles.Add(file.Value); } if (saveFiles.Count == 5) { foreach (var saveFile in saveFiles) { gameData.Files[saveFile.Key] = saveFile.Value; } } } var saves = TransferFile("Saves"); if (saves != null) { gameData.Files[saves.Value.Key] = saves.Value.Value; } } catch { // ignore } } var savegame = new Savegame(); SavegameInputFiles savegameFiles; try { savegameFiles = new SavegameInputFiles { SaveDataReader = gameData.Files[$"Save.{saveSlot:00}/Party_data.sav"].Files[1], PartyMemberDataReaders = gameData.Files[$"Save.{saveSlot:00}/Party_char.amb"], ChestDataReaders = gameData.Files[$"Save.{saveSlot:00}/Chest_data.amb"], MerchantDataReaders = gameData.Files[$"Save.{saveSlot:00}/Merchant_data.amb"], AutomapDataReaders = gameData.Files[$"Save.{saveSlot:00}/Automap.amb"] }; } catch (KeyNotFoundException) { return(null); } var initialPartyMemberReaders = gameData.Files.TryGetValue("Initial/Party_char.amb", out var readers) ? readers : gameData.Files.TryGetValue("Save.00/Party_char.amb", out readers) ? readers : null; savegameSerializer.Read(savegame, savegameFiles, gameData.Files["Party_texts.amb"], initialPartyMemberReaders); return(savegame); }