internal async Task SaveEncounterData(IEnumerable <EncounterWild> encounters, ReferencedGarc garcEncounters) { var array = encounters.ToArray(); var files = await garcEncounters.GetFiles(); var zoneDataFileIndex = garcEncounters.Garc.FileCount - this.ZoneDataPositionFromEnd; Assertions.AssertLength(zoneDataFileIndex, array, exact: true); for (var i = 0; i < array.Length; i++) { if (!array[i].HasEntries) { continue; } var encounterBuffer = array[i].Write(); if (this.Version.IsORAS()) // Have to write encounter zone data to DexNav database too { // Last file is dexNavData const int Offset = 0xE; var dexNavData = files[files.Length - 1]; var entryPointer = BitConverter.ToInt32(dexNavData, (i + 1) * sizeof(int)) + Offset; var dataPointer = BitConverter.ToInt32(encounterBuffer, EncounterWild.DataOffset); dataPointer += array[i].DataStart; var dataLength = array[i].GetAllEntries().Count() * EncounterWild.Entry.Size; Array.Copy(encounterBuffer, dataPointer, dexNavData, entryPointer, dataLength); } files[i] = encounterBuffer; } await garcEncounters.SetFiles(files); }
internal void SaveTmsHms(TmsHms tmsHms, CodeBin codeBin) { Assertions.AssertVersion(this.Version, tmsHms.GameVersion); codeBin.WriteStructure(tmsHms); }