diff --git a/Common/Serialize/Serializer.h b/Common/Serialize/Serializer.h index 808967b51863..7b972c86de57 100644 --- a/Common/Serialize/Serializer.h +++ b/Common/Serialize/Serializer.h @@ -255,7 +255,6 @@ class CChunkFileReader } } - // Load file template template static Error Load(const Path &filename, std::string *gitVersion, T& _class, std::string *failureReason) diff --git a/Core/SaveState.cpp b/Core/SaveState.cpp index 99ba2e3e06d6..c5c967717c70 100644 --- a/Core/SaveState.cpp +++ b/Core/SaveState.cpp @@ -20,6 +20,8 @@ #include #include +#include + #include "Common/Data/Text/I18n.h" #include "Common/Thread/ThreadUtil.h" #include "Common/Data/Text/Parsers.h" @@ -100,6 +102,17 @@ namespace SaveState return CChunkFileReader::LoadPtr(&data[0], state, errorString); } + struct StateBuffer { + void Clear() { + zstd_compressed.clear(); + decompressed_size = 0; + compressed_size = 0; + } + std::vector zstd_compressed; + size_t decompressed_size = 0; + size_t compressed_size = 0; + }; + // This ring buffer of states is for rewind save states, which are kept in RAM. // Save states are compressed against one of two reference saves (bases_), and the reference // is switched to a fresh save every N saves, where N is BASE_USAGE_INTERVAL. @@ -151,7 +164,7 @@ namespace SaveState if (err == CChunkFileReader::ERROR_NONE) ScheduleCompress(&states_[n], compressBuffer, &bases_[base_]); else - states_[n].clear(); + states_[n].zstd_compressed.clear(); baseMapping_[n] = base_; return err; @@ -166,17 +179,26 @@ namespace SaveState return CChunkFileReader::ERROR_BAD_FILE; int n = (--next_ + size_) % size_; - if (states_[n].empty()) + if (states_[n].zstd_compressed.empty()) return CChunkFileReader::ERROR_BAD_FILE; static std::vector buffer; - LockedDecompress(buffer, states_[n], bases_[baseMapping_[n]]); - CChunkFileReader::Error error = LoadFromRam(buffer, errorString); - rewindLastTime_ = time_now_d(); - return error; + if (LockedDecompress(buffer, states_[n], bases_[baseMapping_[n]])) { + CChunkFileReader::Error error = LoadFromRam(buffer, errorString); + if (error == CChunkFileReader::ERROR_NONE) { + INFO_LOG(SAVESTATE, "Rewinding to recent savestate snapshot (%d bytes compressed)", states_[n].zstd_compressed.size()); + rewindLastTime_ = time_now_d(); + } + return error; + } else { + WARN_LOG(SAVESTATE, "Failed to load rewind savestate"); + // Unclear what CChunkFileReader error code we should pass in this case, which I'm not sure will + // happen in practice barring memory corruption. + } + return CChunkFileReader::ERROR_NONE; } - void ScheduleCompress(std::vector *result, const std::vector *state, const std::vector *base) + void ScheduleCompress(StateBuffer *result, const std::vector *state, const std::vector *base) { if (compressThread_.joinable()) compressThread_.join(); @@ -184,11 +206,13 @@ namespace SaveState SetCurrentThreadName("SaveStateCompress"); // Should do no I/O, so no JNI thread context needed. - Compress(*result, *state, *base); + Compress(result, *state, *base); }); } - void Compress(std::vector &result, const std::vector &state, const std::vector &base) + const bool USE_XOR = false; + + void Compress(StateBuffer *result, const std::vector &state, const std::vector &base) { std::lock_guard guard(lock_); // Bail if we were cleared before locking. @@ -196,51 +220,94 @@ namespace SaveState return; double start_time = time_now_d(); - result.clear(); - result.reserve(512 * 1024); - for (size_t i = 0; i < state.size(); i += BLOCK_SIZE) - { - int blockSize = std::min(BLOCK_SIZE, (int)(state.size() - i)); - if (i + blockSize > base.size() || memcmp(&state[i], &base[i], blockSize) != 0) + std::vector compressed; + if (USE_XOR) { + compressed.resize(state.size()); + for (size_t i = 0; i < state.size(); i++) { + if (i >= base.size()) { + compressed[i] = state[i]; + } else { + compressed[i] = base[i] ^ state[i]; + } + } + } else { + compressed.reserve(512 * 1024); + for (size_t i = 0; i < state.size(); i += BLOCK_SIZE) { - result.push_back(1); - result.insert(result.end(), state.begin() + i, state.begin() + i + blockSize); + int blockSize = std::min(BLOCK_SIZE, (int)(state.size() - i)); + if (i + blockSize > base.size() || memcmp(&state[i], &base[i], blockSize) != 0) + { + compressed.push_back(1); + compressed.insert(compressed.end(), state.begin() + i, state.begin() + i + blockSize); + } else { + compressed.push_back(0); + } } - else - result.push_back(0); } double taken_s = time_now_d() - start_time; - DEBUG_LOG(SAVESTATE, "Rewind: Compressed save from %d bytes to %d in %0.2f ms.", (int)state.size(), (int)result.size(), taken_s * 1000.0); + DEBUG_LOG(SAVESTATE, "Rewind: Compressed save from %d bytes to %d in %0.2f ms.", (int)state.size(), (int)compressed.size(), taken_s * 1000.0); + + // Temporarily allocate a buffer to do compression in. + size_t compressCapacity = ZSTD_compressBound(compressed.size()); + result->zstd_compressed.resize(compressCapacity); + result->compressed_size = ZSTD_compress(&result->zstd_compressed[0], compressCapacity, compressed.data(), compressed.size(), 1); + if (result->compressed_size) { + result->zstd_compressed.resize(result->compressed_size); + result->decompressed_size = compressed.size(); + } + + double zstd_s = time_now_d() - start_time - taken_s; + DEBUG_LOG(SAVESTATE, "Rewind: ZSTD compressed to %d in %0.2f ms.", (int)result->compressed_size, zstd_s * 1000.0); } - void LockedDecompress(std::vector &result, const std::vector &compressed, const std::vector &base) + bool LockedDecompress(std::vector &result, const StateBuffer &buffer, const std::vector &base) { result.clear(); result.reserve(base.size()); auto basePos = base.begin(); - for (size_t i = 0; i < compressed.size(); ) - { - if (compressed[i] == 0) - { - ++i; - int blockSize = std::min(BLOCK_SIZE, (int)(base.size() - result.size())); - result.insert(result.end(), basePos, basePos + blockSize); - basePos += blockSize; + + // OK, zstd decompress first. + std::vector compressed = std::vector(buffer.decompressed_size, 0); + size_t retval = ZSTD_decompress(&compressed[0], compressed.size(), buffer.zstd_compressed.data(), buffer.zstd_compressed.size()); + if (ZSTD_isError(retval)) { + WARN_LOG(SAVESTATE, "Failed to decompress zstd-compressed rewind savestate"); + return false; + } + + if (USE_XOR) { + result.resize(compressed.size()); + for (size_t i = 0; i < compressed.size(); i++) { + if (i < base.size()) { + result[i] = compressed[i] ^ base[i]; + } else { + result[i] = compressed[i]; + } } - else - { - ++i; - int blockSize = std::min(BLOCK_SIZE, (int)(compressed.size() - i)); - result.insert(result.end(), compressed.begin() + i, compressed.begin() + i + blockSize); - i += blockSize; - // This check is to avoid advancing basePos out of range, which MSVC catches. - // When this happens, we're at the end of decoding anyway. - if (base.end() - basePos >= blockSize) { + } else { + for (size_t i = 0; i < compressed.size(); ) { + if (compressed[i] == 0) { + ++i; + int blockSize = std::min(BLOCK_SIZE, (int)(base.size() - result.size())); + _dbg_assert_(blockSize >= 0); + result.insert(result.end(), basePos, basePos + blockSize); basePos += blockSize; + } else { + ++i; + int blockSize = std::min(BLOCK_SIZE, (int)(compressed.size() - i)); + if (blockSize > 0) { + result.insert(result.end(), compressed.begin() + i, compressed.begin() + i + blockSize); + i += blockSize; + // This check is to avoid advancing basePos out of range, which MSVC catches. + // When this happens, we're at the end of decoding anyway. + if (base.end() - basePos >= blockSize) { + basePos += blockSize; + } + } } } } + return true; } void Clear() @@ -258,7 +325,7 @@ namespace SaveState baseMapping_.clear(); baseMapping_.resize(size_); for (auto &s : states_) { - s.clear(); + s.Clear(); } buffer_.clear(); base_ = -1; @@ -297,14 +364,12 @@ namespace SaveState // TODO: Instead, based on size of compressed state? const int BASE_USAGE_INTERVAL = 15; - typedef std::vector StateBuffer; - int first_ = 0; int next_ = 0; int size_; std::vector states_; - StateBuffer bases_[2]; + std::vector bases_[2]; std::vector baseMapping_; std::mutex lock_; std::thread compressThread_; @@ -313,7 +378,7 @@ namespace SaveState int base_ = -1; int baseUsage_ = 0; - double rewindLastTime_ = 0.0f; + double rewindLastTime_ = 0.0; }; static bool needsProcess = false; @@ -1019,7 +1084,6 @@ namespace SaveState break; case SAVESTATE_REWIND: - INFO_LOG(SAVESTATE, "Rewinding to recent savestate snapshot"); result = rewindStates.Restore(&errorString); if (result == CChunkFileReader::ERROR_NONE) { callbackMessage = sc->T("Loaded State"); diff --git a/assets/lang/az_AZ.ini b/assets/lang/az_AZ.ini index c71945e59672..7b081667e802 100644 --- a/assets/lang/az_AZ.ini +++ b/assets/lang/az_AZ.ini @@ -1285,7 +1285,7 @@ Record Display = Record display Reset Recording on Save/Load State = Reset recording on Save/Load state Restore Default Settings = Restore PPSSPP's settings to default RetroAchievements = RetroAchievements -Rewind Snapshot Interval = Rewind Snapshot Interval (mem hog) +Rewind Snapshot Interval = Rewind Snapshot Interval Save path in installed.txt = Save path in installed.txt Save path in My Documents = Save path in My Documents Savestate Slot = Savestate slot diff --git a/assets/lang/bg_BG.ini b/assets/lang/bg_BG.ini index 0c631b887715..41514eef5b9f 100644 --- a/assets/lang/bg_BG.ini +++ b/assets/lang/bg_BG.ini @@ -1285,7 +1285,7 @@ Record Display = Record display Reset Recording on Save/Load State = Reset recording on Save/Load state Restore Default Settings = Възстанови първоначалните настройки на PPSSPP RetroAchievements = RetroAchievements -Rewind Snapshot Interval = Rewind snapshot честота („яде“ памет) +Rewind Snapshot Interval = Rewind snapshot честота Save path in installed.txt = Save path in installed.txt Save path in My Documents = Save path in My Documents Savestate Slot = слот за запазено състояние diff --git a/assets/lang/ca_ES.ini b/assets/lang/ca_ES.ini index c85fe7e7cd3b..14110fc4fc0a 100644 --- a/assets/lang/ca_ES.ini +++ b/assets/lang/ca_ES.ini @@ -1285,7 +1285,7 @@ Record Display = Record display Reset Recording on Save/Load State = Reset recording on Save/Load state Restore Default Settings = Restore PPSSPP's settings to default RetroAchievements = RetroAchievements -Rewind Snapshot Interval = Rewind Snapshot Interval (mem hog) +Rewind Snapshot Interval = Rewind Snapshot Interval Save path in installed.txt = Save path in installed.txt Save path in My Documents = Save path in My Documents Savestate Slot = Savestate slot diff --git a/assets/lang/cz_CZ.ini b/assets/lang/cz_CZ.ini index c02269cda754..d0f389385699 100644 --- a/assets/lang/cz_CZ.ini +++ b/assets/lang/cz_CZ.ini @@ -1285,7 +1285,7 @@ Record Display = Record display Reset Recording on Save/Load State = Reset recording on Save/Load state Restore Default Settings = Obnovit výchozí nastavení PPSSPP RetroAchievements = RetroAchievements -Rewind Snapshot Interval = Četnost snímků přetočení (žrout paměti) +Rewind Snapshot Interval = Četnost snímků přetočení Save path in installed.txt = Cesta pro uložení dat je installed.txt Save path in My Documents = Cesta pro uložení dat je v Dokumentech Savestate Slot = Pozice uložené hry diff --git a/assets/lang/da_DK.ini b/assets/lang/da_DK.ini index 5bd3ccf765a2..6c3cc5cd43e0 100644 --- a/assets/lang/da_DK.ini +++ b/assets/lang/da_DK.ini @@ -1285,7 +1285,7 @@ Record Display = Optag skærm Reset Recording on Save/Load State = Reset recording on Save/Load state Restore Default Settings = Sæt PPSSPP's indstillinger tilbage til standard RetroAchievements = RetroAchievements -Rewind Snapshot Interval = Tilbagespol snapshot frekvens (mem hog) +Rewind Snapshot Interval = Tilbagespol snapshot interval Save path in installed.txt = Gem sti i installed.txt Save path in My Documents = Gem sti i Mine Dokumenter Savestate Slot = Lagerplads for spil-status diff --git a/assets/lang/de_DE.ini b/assets/lang/de_DE.ini index 1e6d22bc9e7f..9f6fb3eb3446 100644 --- a/assets/lang/de_DE.ini +++ b/assets/lang/de_DE.ini @@ -1285,7 +1285,7 @@ Record Display = Bildschirm aufzeichnen Reset Recording on Save/Load State = Zurücksetzen der Aufnahme bei Laden/Speichern eines Standes Restore Default Settings = Auf Standardeinstellungen zurücksetzen RetroAchievements = RetroAchievements -Rewind Snapshot Interval = Zurückspulen-Snapshot Frequenz (Speicherfresser) +Rewind Snapshot Interval = Zurückspulen-Snapshot Frequenz Save path in installed.txt = Speicherpfad in installed.txt Save path in My Documents = Speicherpfad in "Meine Dokumente" Savestate Slot = Speicherplatz diff --git a/assets/lang/dr_ID.ini b/assets/lang/dr_ID.ini index fbd7d52f3434..10ba81adbd4c 100644 --- a/assets/lang/dr_ID.ini +++ b/assets/lang/dr_ID.ini @@ -1285,7 +1285,7 @@ Record Display = Record display Reset Recording on Save/Load State = Reset recording on Save/Load state Restore Default Settings = Restore PPSSPP's settings to default RetroAchievements = RetroAchievements -Rewind Snapshot Interval = Rewind Snapshot Interval (mem hog) +Rewind Snapshot Interval = Rewind Snapshot Interval Save path in installed.txt = Save path in installed.txt Save path in My Documents = Save path in My Documents Savestate Slot = Savestate slot diff --git a/assets/lang/en_US.ini b/assets/lang/en_US.ini index 4ab093301034..8ec7b4cf47ae 100644 --- a/assets/lang/en_US.ini +++ b/assets/lang/en_US.ini @@ -1299,7 +1299,7 @@ Record Display = Record display Reset Recording on Save/Load State = Reset recording on Save/Load state Restore Default Settings = Restore PPSSPP's settings to default RetroAchievements = RetroAchievements -Rewind Snapshot Interval = Rewind Snapshot Interval (mem hog) +Rewind Snapshot Interval = Rewind Snapshot Interval Save path in installed.txt = Save path in installed.txt Save path in My Documents = Save path in My Documents Savestate Slot = Savestate slot diff --git a/assets/lang/es_LA.ini b/assets/lang/es_LA.ini index 1edcc925c73a..7baa9675f648 100644 --- a/assets/lang/es_LA.ini +++ b/assets/lang/es_LA.ini @@ -1287,7 +1287,7 @@ Record Display = Grabar pantalla Reset Recording on Save/Load State = Reiniciar grabación al abrir/guardar estados Restore Default Settings = Reestablecer ajustes RetroAchievements = RetroAchievements -Rewind Snapshot Interval = Frecuencia de rebobinado\n(consume memoria) +Rewind Snapshot Interval = Intervalo de rebobinado Save path in installed.txt = Guardar ruta en installed.txt Save path in My Documents = Guardar ruta en "C:/Users/(tu usuario)/Documents" Savestate Slot = Ranura de estado guardado diff --git a/assets/lang/fa_IR.ini b/assets/lang/fa_IR.ini index da2d791276ab..2170934f27bd 100644 --- a/assets/lang/fa_IR.ini +++ b/assets/lang/fa_IR.ini @@ -1285,7 +1285,7 @@ Record Display = ‎ضبط صفحه Reset Recording on Save/Load State = Reset recording on Save/Load state Restore Default Settings = ‎به حالت اولیه PPSSPP بازگشت تنظیمات RetroAchievements = RetroAchievements -Rewind Snapshot Interval = ‎تعداد فریم ذخیره شده برای به عقب رفتن (مصرف زیاد رم) +Rewind Snapshot Interval = ‎تعداد فریم ذخیره شده برای به عقب رفتن Save path in installed.txt = Save path in installed.txt Save path in My Documents = ذخیره در داکیومنت ها Savestate Slot = Savestate slot diff --git a/assets/lang/fi_FI.ini b/assets/lang/fi_FI.ini index bbc64d014214..872e75b56a5c 100644 --- a/assets/lang/fi_FI.ini +++ b/assets/lang/fi_FI.ini @@ -1285,7 +1285,7 @@ Record Display = Nauhoita näyttöä Reset Recording on Save/Load State = Nollaa nauhoitus tallennettaessa/ladattaessa tila Restore Default Settings = Palauta PPSSPP:n oletusasetukset RetroAchievements = RetroAchievements -Rewind Snapshot Interval = Pikakelaa tilannevedosten välit (muistisyöppö) +Rewind Snapshot Interval = Pikakelaa tilannevedosten välit Save path in installed.txt = Tallennuskansio installed.txt-tiedostossa Save path in My Documents = Tallennuskansio Omat tiedostot -kansiossa Savestate Slot = Tilatallennuksen lohko diff --git a/assets/lang/gl_ES.ini b/assets/lang/gl_ES.ini index 831f5af18e2c..c529ef2a5f1b 100644 --- a/assets/lang/gl_ES.ini +++ b/assets/lang/gl_ES.ini @@ -1285,7 +1285,7 @@ Record Display = Record display Reset Recording on Save/Load State = Reset recording on Save/Load state Restore Default Settings = Reestablecer axustes RetroAchievements = RetroAchievements -Rewind Snapshot Interval = Frecuencia de rebobinado de instantánea (mem hog) +Rewind Snapshot Interval = Frecuencia de rebobinado de instantánea Save path in installed.txt = Carpeta de gardado en installed.txt Save path in My Documents = Carpeta de gardado en Meus documentos Savestate Slot = Ranura de estado gardado diff --git a/assets/lang/gr_EL.ini b/assets/lang/gr_EL.ini index 1d596bbc8ee6..d09cf5b1a992 100644 --- a/assets/lang/gr_EL.ini +++ b/assets/lang/gr_EL.ini @@ -1285,7 +1285,7 @@ Record Display = Καταγραφή Εικόνας Reset Recording on Save/Load State = Επαναφορά της εγγραφής κατή την Αποθήκευση/Φόρτωση σημείου αποθήκευσης Restore Default Settings = Επαναφορά προεπιλεγμένων ρυθμίσεων του PPSSPP RetroAchievements = RetroAchievements -Rewind Snapshot Interval = Συχνότητα Αντιστροφής Στιγμιότυπου (mem hog) +Rewind Snapshot Interval = Συχνότητα Αντιστροφής Στιγμιότυπου Save path in installed.txt = Αποθήκευση διαδρομής στο installed.txt Save path in My Documents = Αποθήκευση διαδρομής στα Έγγραφα μου Savestate Slot = Slot Σημείου Αποθήκευσης diff --git a/assets/lang/he_IL.ini b/assets/lang/he_IL.ini index 4de9636bf3a2..de31336cf778 100644 --- a/assets/lang/he_IL.ini +++ b/assets/lang/he_IL.ini @@ -1285,7 +1285,7 @@ Record Display = Record display Reset Recording on Save/Load State = Reset recording on Save/Load state Restore Default Settings = Restore PPSSPP's settings to default RetroAchievements = RetroAchievements -Rewind Snapshot Interval = Rewind Snapshot Interval (mem hog) +Rewind Snapshot Interval = Rewind Snapshot Interval Save path in installed.txt = Save path in installed.txt Save path in My Documents = Save path in My Documents Savestate Slot = Savestate slot diff --git a/assets/lang/he_IL_invert.ini b/assets/lang/he_IL_invert.ini index 59a71ff03c19..04e5ffee57dc 100644 --- a/assets/lang/he_IL_invert.ini +++ b/assets/lang/he_IL_invert.ini @@ -1285,7 +1285,7 @@ Record Display = Record display Reset Recording on Save/Load State = Reset recording on Save/Load state Restore Default Settings = Restore PPSSPP's settings to default RetroAchievements = RetroAchievements -Rewind Snapshot Interval = Rewind Snapshot Interval (mem hog) +Rewind Snapshot Interval = Rewind Snapshot Interval Save path in installed.txt = Save path in installed.txt Save path in My Documents = Save path in My Documents Savestate Slot = Savestate slot diff --git a/assets/lang/hr_HR.ini b/assets/lang/hr_HR.ini index 36a62075eb6e..78783054a946 100644 --- a/assets/lang/hr_HR.ini +++ b/assets/lang/hr_HR.ini @@ -1285,7 +1285,7 @@ Record Display = Snimi prikaz Reset Recording on Save/Load State = Ponovo postavi snimak na Save/Load state Restore Default Settings = Vrati PPSSPP opcije na zadano RetroAchievements = RetroAchievements -Rewind Snapshot Interval = Vrati snapshot frekvenciju (mem hog) +Rewind Snapshot Interval = Vrati snapshot frekvenciju Save path in installed.txt = Spremi put u installed.txt Save path in My Documents = Spremi put u My Documents Savestate Slot = Savestate mjesto diff --git a/assets/lang/hu_HU.ini b/assets/lang/hu_HU.ini index 27c47253b8d2..900ffec7d60a 100644 --- a/assets/lang/hu_HU.ini +++ b/assets/lang/hu_HU.ini @@ -1285,7 +1285,7 @@ Record Display = Videó felvétele Reset Recording on Save/Load State = Felvétel leállítása állapotmentés készítésekor vagy betöltésekor Restore Default Settings = PPSSPP beállításainak alapértelmezettre állítása RetroAchievements = RetroAchievements -Rewind Snapshot Interval = Visszatekerési állapotmentések gyakorisága (sok memória kell) +Rewind Snapshot Interval = Visszatekerési állapotmentések gyakorisága Save path in installed.txt = Mentés helye installed.txt-ben Save path in My Documents = Mentés helye a Dokumentumok mappában Savestate Slot = Állapotmentés sorszáma diff --git a/assets/lang/id_ID.ini b/assets/lang/id_ID.ini index 5c37a85867ed..8ecdb6124a5b 100644 --- a/assets/lang/id_ID.ini +++ b/assets/lang/id_ID.ini @@ -1285,7 +1285,7 @@ Record Display = Rekam tampilan Reset Recording on Save/Load State = Atur ulang rekaman pada status simpan/muat Restore Default Settings = Atur ulang pengaturan PPSSPP ke awal RetroAchievements = RetroAchievements -Rewind Snapshot Interval = Putar ulang frekuensi foto (memory hog) +Rewind Snapshot Interval = Putar ulang frekuensi foto Save path in installed.txt = Simpan jalur dalam installed.txt Save path in My Documents = Simpan jalur dalam dokumen saya Savestate Slot = Slot simpanan status diff --git a/assets/lang/it_IT.ini b/assets/lang/it_IT.ini index e45a91a8d415..d28ce9930163 100644 --- a/assets/lang/it_IT.ini +++ b/assets/lang/it_IT.ini @@ -1291,7 +1291,7 @@ Record Audio = Registra Audio Record Display = Registra Display Reset Recording on Save/Load State = Reset della registrazione al Salvataggio/Caricamento stato Restore Default Settings = Ripristina Impostazioni di PPSSPP -Rewind Snapshot Interval = Frequenza riavvolgimento snapshot (+ memoria) +Rewind Snapshot Interval = Frequenza riavvolgimento snapshot Save path in installed.txt = Salva il percorso in "installed.txt" Save path in My Documents = Salva il percorso in "Documenti" Savestate Slot = Slot di salvataggio stato diff --git a/assets/lang/ja_JP.ini b/assets/lang/ja_JP.ini index c5eb1cfe796d..78b8916fff92 100644 --- a/assets/lang/ja_JP.ini +++ b/assets/lang/ja_JP.ini @@ -1285,7 +1285,7 @@ Record Display = 画面を記録する Reset Recording on Save/Load State = ステートをセーブ/ロードしたら記録をリセットする Restore Default Settings = 設定をデフォルトに戻す RetroAchievements = RetroAchievements -Rewind Snapshot Interval = スナップショットの巻き戻し頻度 (メモリを消費) +Rewind Snapshot Interval = スナップショットの巻き戻し頻度 Save path in installed.txt = パスを installed.txt に保存する Save path in My Documents = パスを My Documents に保存する Savestate Slot = セーブステートのスロット diff --git a/assets/lang/jv_ID.ini b/assets/lang/jv_ID.ini index 3defca062a8e..177ed7af0f7b 100644 --- a/assets/lang/jv_ID.ini +++ b/assets/lang/jv_ID.ini @@ -1285,7 +1285,7 @@ Record Display = Record display Reset Recording on Save/Load State = Reset recording on Save/Load state Restore Default Settings = Mulihake setelan PPSSPP kanggo gawan RetroAchievements = RetroAchievements -Rewind Snapshot Interval = Frekuensi gambar asli seko mundur (mem hog) +Rewind Snapshot Interval = Frekuensi gambar asli seko mundur Save path in installed.txt = Nyimpen path ing installed.txt Save path in My Documents = Nyimpen path ing Dokumen kulo Savestate Slot = Savestate slot diff --git a/assets/lang/ko_KR.ini b/assets/lang/ko_KR.ini index a2d6887f3077..42463b9b3aa7 100644 --- a/assets/lang/ko_KR.ini +++ b/assets/lang/ko_KR.ini @@ -1275,7 +1275,7 @@ Record Display = 녹화 표시 Reset Recording on Save/Load State = 저장/불러오기 상태에서 녹화 재설정 Restore Default Settings = PPSSPP의 설정을 기본값으로 복원 RetroAchievements = RetroAchievements -Rewind Snapshot Interval = 되감기 스냅샷 빈도 (메모리 호그) +Rewind Snapshot Interval = 되감기 스냅샷 빈도 Save path in installed.txt = install.txt에 경로 저장 Save path in My Documents = 내 문서에 경로 저장 Savestate Slot = 저장 상태 슬롯 diff --git a/assets/lang/lo_LA.ini b/assets/lang/lo_LA.ini index 520071b2beb9..122cb7613f2f 100644 --- a/assets/lang/lo_LA.ini +++ b/assets/lang/lo_LA.ini @@ -1285,7 +1285,7 @@ Record Display = ບັນທຶກພາບ Display Reset Recording on Save/Load State = Reset recording on Save/Load state Restore Default Settings = "ຄືນຄ່າການຕັ້ງຄ່າຂອງ PPSSPP ເປັນຄ່າເລີ່ມຕົ້ນ" RetroAchievements = RetroAchievements -Rewind Snapshot Interval = Rewind Snapshot Interval (mem hog) +Rewind Snapshot Interval = Rewind Snapshot Interval Save path in installed.txt = ບັນທຶກຂໍ້ມູນໃນ installed.txt Save path in My Documents = ບັນທຶກຂໍ້ມູນໄວ້ທີ່ My Documents Savestate Slot = ຊ່ອງເກັບເຊບ diff --git a/assets/lang/lt-LT.ini b/assets/lang/lt-LT.ini index 8a87a2749591..017262d3ac60 100644 --- a/assets/lang/lt-LT.ini +++ b/assets/lang/lt-LT.ini @@ -1285,7 +1285,7 @@ Record Display = Record display Reset Recording on Save/Load State = Reset recording on Save/Load state Restore Default Settings = Nustatyti "PPSSPP" parametrus į numatytuosius RetroAchievements = RetroAchievements -Rewind Snapshot Interval = "Vėjinti" momentinės nuotraukos dažnį (atminties "rijikas") +Rewind Snapshot Interval = "Vėjinti" momentinės nuotraukos dažnį Save path in installed.txt = Save path in installed.txt Save path in My Documents = Save path in My Documents Savestate Slot = Išsaugojimo statuso vieta diff --git a/assets/lang/ms_MY.ini b/assets/lang/ms_MY.ini index 823db61b5b35..d160e473e6bc 100644 --- a/assets/lang/ms_MY.ini +++ b/assets/lang/ms_MY.ini @@ -1285,7 +1285,7 @@ Record Display = Record display Reset Recording on Save/Load State = Reset recording on Save/Load state Restore Default Settings = Kembalikan tetapan PPSSPP ke lalai RetroAchievements = RetroAchievements -Rewind Snapshot Interval = Kekerapan pusingan gambar skrin (mem hog) +Rewind Snapshot Interval = Kekerapan pusingan gambar skrin Save path in installed.txt = Save path in installed.txt Save path in My Documents = Save path in My Documents Savestate Slot = Slot Savestate diff --git a/assets/lang/nl_NL.ini b/assets/lang/nl_NL.ini index 9f90c356f2ca..f3f246b2126d 100644 --- a/assets/lang/nl_NL.ini +++ b/assets/lang/nl_NL.ini @@ -1285,7 +1285,7 @@ Record Display = Scherm opnemen Reset Recording on Save/Load State = Opname opnieuw opstarten bij opslaan/laden van states Restore Default Settings = PPSSPP's standaardinstellingen herstellen RetroAchievements = RetroAchievements -Rewind Snapshot Interval = Terugspoelfrequentie (kost geheugen) +Rewind Snapshot Interval = Terugspoelfrequentie Save path in installed.txt = Opslagpad in installed.txt Save path in My Documents = Opslagpad in Mijn documenten Savestate Slot = Savestatesleuf diff --git a/assets/lang/no_NO.ini b/assets/lang/no_NO.ini index 03aac9614f39..db2185dcc892 100644 --- a/assets/lang/no_NO.ini +++ b/assets/lang/no_NO.ini @@ -1285,7 +1285,7 @@ Record Display = Record display Reset Recording on Save/Load State = Reset recording on Save/Load state Restore Default Settings = Restore PPSSPP's settings to default RetroAchievements = RetroAchievements -Rewind Snapshot Interval = Rewind Snapshot Interval (mem hog) +Rewind Snapshot Interval = Rewind Snapshot Interval Save path in installed.txt = Save path in installed.txt Save path in My Documents = Save path in My Documents Savestate Slot = Savestate slot diff --git a/assets/lang/pl_PL.ini b/assets/lang/pl_PL.ini index 6cf7fe66a8c7..273188dcc52a 100644 --- a/assets/lang/pl_PL.ini +++ b/assets/lang/pl_PL.ini @@ -1291,7 +1291,7 @@ Record Display = Nagrywaj obraz Reset Recording on Save/Load State = Resetuj nagrywanie przy zapisie/wczytaniu stanu Restore Default Settings = Przywróć domyślne ustawienia RetroAchievements = RetroAchievements -Rewind Snapshot Interval = Częstotl. zapisu stanów przewijania (wymaga pamięci) +Rewind Snapshot Interval = Częstotl. zapisu stanów przewijania Save path in installed.txt = Ścieżka zapisu w installed.txt Save path in My Documents = Ścieżka zapisu w Dokumentach Savestate Slot = Slot zapisu stanu diff --git a/assets/lang/pt_BR.ini b/assets/lang/pt_BR.ini index ae9b4a1984be..58273d5bd565 100644 --- a/assets/lang/pt_BR.ini +++ b/assets/lang/pt_BR.ini @@ -984,10 +984,10 @@ tools = Ferramentas grátis usadas: # Leave extra lines blank. 4 contributors per line seems to look best. translators1 = Papel, gabrielmop, Efraim Lopes, AkiraJkr translators2 = Felipe -translators3 = -translators4 = -translators5 = -translators6 = +translators3 = +translators4 = +translators5 = +translators6 = Twitter @PPSSPP_emu = Twitter @PPSSPP_emu website = Verifique o site da web: written = Escrito em C++ pela velocidade e portabilidade @@ -1299,7 +1299,7 @@ Record Display = Gravar tela Reset Recording on Save/Load State = Resetar a gravação ao salvar/carregar o state Restore Default Settings = Restaurar as configurações do PPSSPP para os padrões RetroAchievements = RetroAchievements -Rewind Snapshot Interval = Retroceder a frequência dos snapshots (consome muita memória) +Rewind Snapshot Interval = Retroceder a frequência dos snapshots Save path in installed.txt = Caminho do save em installed.txt Save path in My Documents = Caminho do save em Meus Documentos Savestate Slot = Slot do state salvo diff --git a/assets/lang/pt_PT.ini b/assets/lang/pt_PT.ini index beff910b1d15..bd3172443e5e 100644 --- a/assets/lang/pt_PT.ini +++ b/assets/lang/pt_PT.ini @@ -1300,7 +1300,7 @@ Record Display = Gravar tela Reset Recording on Save/Load State = Reiniciar a gravação ao salvar/carregar o estado Restore Default Settings = Restaurar as Definições do PPSSPP para os padrões RetroAchievements = RetroAchievements -Rewind Snapshot Interval = Rebobinar frequência dos snapshots (consome memória) +Rewind Snapshot Interval = Rebobinar frequência dos snapshots Save path in installed.txt = Caminho do save em installed.txt Save path in My Documents = Caminho do save em Meus Documentos Savestate Slot = Espaço do estado salvo diff --git a/assets/lang/ro_RO.ini b/assets/lang/ro_RO.ini index b8c9ad76d95b..bbba58cbb9b5 100644 --- a/assets/lang/ro_RO.ini +++ b/assets/lang/ro_RO.ini @@ -1286,7 +1286,7 @@ Record Display = Record display Reset Recording on Save/Load State = Reset recording on Save/Load state Restore Default Settings = Adu la setări PPSSPP inițiale RetroAchievements = RetroAchievements -Rewind Snapshot Interval = Rewind Snapshot Interval (mem hog) +Rewind Snapshot Interval = Rewind Snapshot Interval Save path in installed.txt = Save path in installed.txt Save path in My Documents = Save path in My Documents Savestate Slot = Slot salvare diff --git a/assets/lang/sv_SE.ini b/assets/lang/sv_SE.ini index 4dca588361c9..227495736db7 100644 --- a/assets/lang/sv_SE.ini +++ b/assets/lang/sv_SE.ini @@ -1286,7 +1286,7 @@ Record Display = Spela in video till fil Reset Recording on Save/Load State = Reset recording on Save/Load state Restore Default Settings = Återställ standard-inställningar RetroAchievements = RetroAchievements -Rewind Snapshot Interval = Rewind Snapshot Interval (mem hog) +Rewind Snapshot Interval = Rewind Snapshot Interval Save path in installed.txt = Sparkatalog från installed.txt Save path in My Documents = Sparkatalog i Dokument Savestate Slot = Savestate slot diff --git a/assets/lang/tg_PH.ini b/assets/lang/tg_PH.ini index 2d42bbb11f38..c66c9d584d63 100644 --- a/assets/lang/tg_PH.ini +++ b/assets/lang/tg_PH.ini @@ -1285,7 +1285,7 @@ Record Display = I-record ang Display Reset Recording on Save/Load State = Reset Recording on Save/Load state Restore Default Settings = Ibalik ang settings sa dati nitong ayos RetroAchievements = RetroAchievements -Rewind Snapshot Interval = Rewind Snapshot Interval (mem hog) +Rewind Snapshot Interval = Rewind Snapshot Interval Save path in installed.txt = I-save sa direksyon na installed.txt Save path in My Documents = I-save sa direksyon na "Aking Dokumento" Savestate Slot = Savestate Slot diff --git a/assets/lang/th_TH.ini b/assets/lang/th_TH.ini index 75bfec21faa1..427c41818e6d 100644 --- a/assets/lang/th_TH.ini +++ b/assets/lang/th_TH.ini @@ -1301,7 +1301,7 @@ Record Display = อัดบันทึกวีดีโอ Reset Recording on Save/Load State = เริ่มการอัดบันทึกไฟล์ใหม่ เมื่อกดเซฟ/โหลดสเตทเกม Restore Default Settings = รีเซ็ตการตั้งค่าของ PPSSPP ทั้งหมด RetroAchievements = RetroAchievements -Rewind Snapshot Interval = เซฟสเตทพื้นหลังแบบอัตโนมัติ (สูบแรม) +Rewind Snapshot Interval = เซฟสเตทพื้นหลังแบบอัตโนมัติ Save path in installed.txt = บันทึกข้อมูลตามเส้นทางที่เลือกไว้ Save path in My Documents = บันทึกข้อมูลไว้ที่ My Documents Savestate Slot = ช่องเก็บเซฟสเตทเกม diff --git a/assets/lang/tr_TR.ini b/assets/lang/tr_TR.ini index 14d2071367ab..f956ccc44baa 100644 --- a/assets/lang/tr_TR.ini +++ b/assets/lang/tr_TR.ini @@ -1286,7 +1286,7 @@ Record Display = Görüntüyü kaydet Reset Recording on Save/Load State = Kaydet/Yükle durumunda kaydı sıfırla Restore Default Settings = Varsayılan ayarları yükle RetroAchievements = RetroAchievements -Rewind Snapshot Interval = Geri sarma görüntüsü sıklığı (mem hog) +Rewind Snapshot Interval = Geri sarma görüntüsü sıklığı Save path in installed.txt = Yolu installed.txt'ye kaydet Save path in My Documents = Dosyaları "Belgeler"'e kaydet Savestate Slot = Durum kaydı yeri diff --git a/assets/lang/uk_UA.ini b/assets/lang/uk_UA.ini index 3854aec10a0e..a64c378b8f74 100644 --- a/assets/lang/uk_UA.ini +++ b/assets/lang/uk_UA.ini @@ -1285,7 +1285,7 @@ Record Display = Запис відео Reset Recording on Save/Load State = Скидати запис при збереженні / завантаженні Restore Default Settings = Скинути налаштування RetroAchievements = RetroAchievements -Rewind Snapshot Interval = Змінити частоту кадрів (багато пам'яті) +Rewind Snapshot Interval = Змінити частоту кадрів Save path in installed.txt = Шлях до збережень в installed.txt Save path in My Documents = Шлях до збережень в Моїх документах Savestate Slot = Слот пам'яті