From 6cea1f73f64a48c9090572af143c61546ae32727 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Mon, 13 Feb 2023 11:36:09 +0100 Subject: [PATCH 1/4] Remove "mem hog" comment from snapshot frequency --- assets/lang/az_AZ.ini | 2 +- assets/lang/bg_BG.ini | 2 +- assets/lang/ca_ES.ini | 2 +- assets/lang/cz_CZ.ini | 2 +- assets/lang/da_DK.ini | 2 +- assets/lang/de_DE.ini | 2 +- assets/lang/dr_ID.ini | 2 +- assets/lang/en_US.ini | 2 +- assets/lang/es_LA.ini | 2 +- assets/lang/fa_IR.ini | 2 +- assets/lang/fi_FI.ini | 2 +- assets/lang/gl_ES.ini | 2 +- assets/lang/gr_EL.ini | 2 +- assets/lang/he_IL.ini | 2 +- assets/lang/he_IL_invert.ini | 2 +- assets/lang/hr_HR.ini | 2 +- assets/lang/hu_HU.ini | 2 +- assets/lang/id_ID.ini | 2 +- assets/lang/it_IT.ini | 2 +- assets/lang/ja_JP.ini | 2 +- assets/lang/jv_ID.ini | 2 +- assets/lang/ko_KR.ini | 8 ++++---- assets/lang/lo_LA.ini | 2 +- assets/lang/lt-LT.ini | 2 +- assets/lang/ms_MY.ini | 2 +- assets/lang/nl_NL.ini | 2 +- assets/lang/no_NO.ini | 2 +- assets/lang/pl_PL.ini | 2 +- assets/lang/pt_BR.ini | 12 ++++++------ assets/lang/pt_PT.ini | 2 +- assets/lang/ro_RO.ini | 2 +- assets/lang/sv_SE.ini | 2 +- assets/lang/tg_PH.ini | 2 +- assets/lang/th_TH.ini | 2 +- assets/lang/tr_TR.ini | 2 +- assets/lang/uk_UA.ini | 2 +- 36 files changed, 44 insertions(+), 44 deletions(-) diff --git a/assets/lang/az_AZ.ini b/assets/lang/az_AZ.ini index 48b7b1de9..df17d9b45 100644 --- a/assets/lang/az_AZ.ini +++ b/assets/lang/az_AZ.ini @@ -1173,7 +1173,7 @@ Record Audio = Record audio 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 -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 62324035c..d8ff13897 100644 --- a/assets/lang/bg_BG.ini +++ b/assets/lang/bg_BG.ini @@ -1173,7 +1173,7 @@ Record Audio = Record audio Record Display = Record display Reset Recording on Save/Load State = Reset recording on Save/Load state Restore Default Settings = Възстанови първоначалните настройки на PPSSPP -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 56781b3ab..84b312793 100644 --- a/assets/lang/ca_ES.ini +++ b/assets/lang/ca_ES.ini @@ -1173,7 +1173,7 @@ Record Audio = Record audio 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 -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 274135c62..b44a271f3 100644 --- a/assets/lang/cz_CZ.ini +++ b/assets/lang/cz_CZ.ini @@ -1173,7 +1173,7 @@ Record Audio = Record audio Record Display = Record display Reset Recording on Save/Load State = Reset recording on Save/Load state Restore Default Settings = Obnovit výchozí nastavení PPSSPP -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 d8c2f33c6..a24d0c553 100644 --- a/assets/lang/da_DK.ini +++ b/assets/lang/da_DK.ini @@ -1173,7 +1173,7 @@ Record Audio = Optag lyd 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 -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 5bb9e17e1..be46b8761 100644 --- a/assets/lang/de_DE.ini +++ b/assets/lang/de_DE.ini @@ -1173,7 +1173,7 @@ Record Audio = Ton aufzeichnen 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 -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 3ab9bacf9..b68409575 100644 --- a/assets/lang/dr_ID.ini +++ b/assets/lang/dr_ID.ini @@ -1173,7 +1173,7 @@ Record Audio = Record audio 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 -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 9840362d1..ab258614b 100644 --- a/assets/lang/en_US.ini +++ b/assets/lang/en_US.ini @@ -1188,7 +1188,7 @@ Record Audio = Record audio 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 -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 2060da086..521f7a0f2 100644 --- a/assets/lang/es_LA.ini +++ b/assets/lang/es_LA.ini @@ -1173,7 +1173,7 @@ Record Audio = Grabar Audio Record Display = Grabar pantalla Reset Recording on Save/Load State = Reiniciar grabación al abrir/guardar estados Restore Default Settings = Reestablecer ajustes -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\n"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 d269c8027..a7a24329a 100644 --- a/assets/lang/fa_IR.ini +++ b/assets/lang/fa_IR.ini @@ -1173,7 +1173,7 @@ Record Audio = ‎ضبط صدا Record Display = ‎ضبط صفحه Reset Recording on Save/Load State = Reset recording on Save/Load state Restore Default Settings = ‎به حالت اولیه PPSSPP بازگشت تنظیمات -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 e5c353f50..1dc528645 100644 --- a/assets/lang/fi_FI.ini +++ b/assets/lang/fi_FI.ini @@ -1173,7 +1173,7 @@ Record Audio = Record audio 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 -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/gl_ES.ini b/assets/lang/gl_ES.ini index 53a7b5ed4..82fcd2eab 100644 --- a/assets/lang/gl_ES.ini +++ b/assets/lang/gl_ES.ini @@ -1173,7 +1173,7 @@ Record Audio = Record audio Record Display = Record display Reset Recording on Save/Load State = Reset recording on Save/Load state Restore Default Settings = Reestablecer axustes -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 7a7255aca..63d82a6d8 100644 --- a/assets/lang/gr_EL.ini +++ b/assets/lang/gr_EL.ini @@ -1173,7 +1173,7 @@ Record Audio = Καταγραφή Ήχου Record Display = Καταγραφή Εικόνας Reset Recording on Save/Load State = Επαναφορά της εγγραφής κατή την Αποθήκευση/Φόρτωση σημείου αποθήκευσης Restore Default Settings = Επαναφορά προεπιλεγμένων ρυθμίσεων του PPSSPP -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 8e5230c6b..2cbe93cf0 100644 --- a/assets/lang/he_IL.ini +++ b/assets/lang/he_IL.ini @@ -1173,7 +1173,7 @@ Record Audio = Record audio 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 -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 f3eb0ef0b..6d501f5e8 100644 --- a/assets/lang/he_IL_invert.ini +++ b/assets/lang/he_IL_invert.ini @@ -1173,7 +1173,7 @@ Record Audio = Record audio 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 -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 bb6929b17..0bbbd4d7c 100644 --- a/assets/lang/hr_HR.ini +++ b/assets/lang/hr_HR.ini @@ -1173,7 +1173,7 @@ Record Audio = Snimi audio 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 -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 18fa6ad6a..eee8f4fdd 100644 --- a/assets/lang/hu_HU.ini +++ b/assets/lang/hu_HU.ini @@ -1173,7 +1173,7 @@ Record Audio = Audió felvétele 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 -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 6a09ecc59..04b9b6a2f 100644 --- a/assets/lang/id_ID.ini +++ b/assets/lang/id_ID.ini @@ -1173,7 +1173,7 @@ Record Audio = Rekam suara 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 -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 7dc86e0ab..e32b0fd72 100644 --- a/assets/lang/it_IT.ini +++ b/assets/lang/it_IT.ini @@ -1179,7 +1179,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 d9b32bce2..c0fc12fd6 100644 --- a/assets/lang/ja_JP.ini +++ b/assets/lang/ja_JP.ini @@ -1173,7 +1173,7 @@ Record Audio = オーディオを記録する Record Display = 画面を記録する Reset Recording on Save/Load State = ステートをセーブ/ロードしたら記録をリセットする Restore Default Settings = 設定をデフォルトに戻す -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 e64084b2e..cf8c19ffc 100644 --- a/assets/lang/jv_ID.ini +++ b/assets/lang/jv_ID.ini @@ -1173,7 +1173,7 @@ Record Audio = Record audio Record Display = Record display Reset Recording on Save/Load State = Reset recording on Save/Load state Restore Default Settings = Mulihake setelan PPSSPP kanggo gawan -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 3f482c771..92dce0b02 100644 --- a/assets/lang/ko_KR.ini +++ b/assets/lang/ko_KR.ini @@ -180,7 +180,7 @@ Pause When Not Focused = 포커싱되지 않았을 때 일시 정지(&P) Portrait = 세로 방향 Portrait reversed = 세로 방향 반전 PPSSPP Forums = PPSSPP 포럼(&F) -Recent = 최근(&R) +Recent = 최근(&R) Record = 녹음(&R) Record Audio = 사운드 녹음(&A) Record Display = 영상 녹화(&D) @@ -1154,7 +1154,7 @@ Record Audio = 오디오 녹음 Record Display = 녹화 표시 Reset Recording on Save/Load State = 저장/불러오기 상태에서 녹화 재설정 Restore Default Settings = PPSSPP의 설정을 기본값으로 복원 -Rewind Snapshot Interval = 되감기 스냅샷 빈도 (메모리 호그) +Rewind Snapshot Interval = 되감기 스냅샷 빈도 Save path in installed.txt = install.txt에 경로 저장 Save path in My Documents = 내 문서에 경로 저장 Savestate Slot = 저장 상태 슬롯 @@ -1238,13 +1238,13 @@ Experts only = 전문가 전용 Game camera rotation step per frame = 프레임당 게임 카메라 회전 단계 Game camera uses rotation smoothing = 회전 스무딩을 사용하는 게임 카메라 Field of view scale = 시야 스케일 -Force 72Hz update = 강제 72Hz 업데이트 +Force 72Hz update = 강제 72Hz 업데이트 Heads-up display detection = 헤드업 디스플레이 감지 Heads-up display scale = 상방시현기 스케일 Map controller movements to keys = 컨트롤러 이동을 키에 매핑 Map HMD rotations on keys instead of VR camera = VR 카메라 대신 키에 HMD 회전 매핑하기 Manual switching between flat screen and VR using SCREEN key = 화면 키를 사용하여 평면 화면과 VR 간 수동 전환 -Camera type = 카메라 유형 +Camera type = 카메라 유형 Motion needed to generate action = 동작 생성에 필요한 동작 Stereoscopic vision (Experimental) = 입체시 (실험적) Virtual reality = 가상 현실 diff --git a/assets/lang/lo_LA.ini b/assets/lang/lo_LA.ini index 2d381b38d..dd0c3a8c8 100644 --- a/assets/lang/lo_LA.ini +++ b/assets/lang/lo_LA.ini @@ -1173,7 +1173,7 @@ Record Audio = ບັນທຶກສຽງ Audio Record Display = ບັນທຶກພາບ Display Reset Recording on Save/Load State = Reset recording on Save/Load state Restore Default Settings = "ຄືນຄ່າການຕັ້ງຄ່າຂອງ PPSSPP ເປັນຄ່າເລີ່ມຕົ້ນ" -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 584526059..556c7a839 100644 --- a/assets/lang/lt-LT.ini +++ b/assets/lang/lt-LT.ini @@ -1173,7 +1173,7 @@ Record Audio = Record audio Record Display = Record display Reset Recording on Save/Load State = Reset recording on Save/Load state Restore Default Settings = Nustatyti "PPSSPP" parametrus į numatytuosius -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 6125fb4c7..ccbaa4fc0 100644 --- a/assets/lang/ms_MY.ini +++ b/assets/lang/ms_MY.ini @@ -1173,7 +1173,7 @@ Record Audio = Record audio Record Display = Record display Reset Recording on Save/Load State = Reset recording on Save/Load state Restore Default Settings = Kembalikan tetapan PPSSPP ke lalai -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 a4b57257b..d544d26aa 100644 --- a/assets/lang/nl_NL.ini +++ b/assets/lang/nl_NL.ini @@ -1173,7 +1173,7 @@ Record Audio = Audio opnemen 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 -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 a4d1ee070..a8ade5772 100644 --- a/assets/lang/no_NO.ini +++ b/assets/lang/no_NO.ini @@ -1173,7 +1173,7 @@ Record Audio = Record audio 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 -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 e62619bac..f6b712242 100644 --- a/assets/lang/pl_PL.ini +++ b/assets/lang/pl_PL.ini @@ -1173,7 +1173,7 @@ Record Audio = Nagrywaj dźwięk Record Display = Nagrywaj obraz Reset Recording on Save/Load State = Resetuj nagrywanie przy zapisie/wczytaniu stanu Restore Default Settings = Przywróć domyślne ustawienia -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 a1fef5921..40cfea34b 100644 --- a/assets/lang/pt_BR.ini +++ b/assets/lang/pt_BR.ini @@ -520,7 +520,7 @@ Frame Skipping = Pulo dos frames Frame Skipping Type = Tipo de pulo dos frames FullScreen = Tela cheia Geometry shader culling = Abate do shader da geometria -Hack Settings = Configurações dos hacks (pode causar erros gráficos) +Hack Settings = Configurações dos hacks (pode causar erros gráficos) Hardware Tessellation = Tesselação por hardware Hardware Transform = Transformação por hardware hardware transform error - falling back to software = Erro de transformação pelo hardware, retrocedendo pro software. @@ -894,10 +894,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 @@ -1187,7 +1187,7 @@ Record Audio = Gravar áudio 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 -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 f5529bdd2..e9edaba4a 100644 --- a/assets/lang/pt_PT.ini +++ b/assets/lang/pt_PT.ini @@ -1188,7 +1188,7 @@ Record Audio = Gravar áudio 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 -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 839a9b3a9..4d49790b0 100644 --- a/assets/lang/ro_RO.ini +++ b/assets/lang/ro_RO.ini @@ -1174,7 +1174,7 @@ Record Audio = Record audio 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 -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 9a1d40b58..88bfcaef0 100644 --- a/assets/lang/sv_SE.ini +++ b/assets/lang/sv_SE.ini @@ -1173,7 +1173,7 @@ Record Audio = Spela in audio till fil 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 -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 b2a16e541..a4a43d1bf 100644 --- a/assets/lang/tg_PH.ini +++ b/assets/lang/tg_PH.ini @@ -1173,7 +1173,7 @@ Record Audio = I-record ang Audio 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 -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 39c4112a4..d1c066de6 100644 --- a/assets/lang/th_TH.ini +++ b/assets/lang/th_TH.ini @@ -1174,7 +1174,7 @@ Record Audio = อัดบันทึกเสียง Record Display = อัดบันทึกวีดีโอ Reset Recording on Save/Load State = เริ่มการอัดบันทึกไฟล์ใหม่ เมื่อกดเซฟ/โหลดสเตทเกม Restore Default Settings = รีเซ็ตการตั้งค่าของ PPSSPP ทั้งหมด -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 ad244d175..8d4200119 100644 --- a/assets/lang/tr_TR.ini +++ b/assets/lang/tr_TR.ini @@ -1174,7 +1174,7 @@ Record Audio = Sesi kaydet 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 -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 aa515323c..0f7eb7ef7 100644 --- a/assets/lang/uk_UA.ini +++ b/assets/lang/uk_UA.ini @@ -1173,7 +1173,7 @@ Record Audio = Запис аудіо Record Display = Запис відео Reset Recording on Save/Load State = Скидати запис при збереженні / завантаженні Restore Default Settings = Скинути налаштування -Rewind Snapshot Interval = Змінити частоту кадрів (багато пам'яті) +Rewind Snapshot Interval = Змінити частоту кадрів Save path in installed.txt = Шлях до збережень в installed.txt Save path in My Documents = Шлях до збережень в Моїх документах Savestate Slot = Слот пам'яті From bd75b2dc6be787ad0d82072a8971d7ad61b1e5b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Mon, 13 Feb 2023 11:44:48 +0100 Subject: [PATCH 2/4] Add ZSTD compression on top of the redundancy compression --- Core/SaveState.cpp | 58 +++++++++++++++++++++++++++++++++------------- 1 file changed, 42 insertions(+), 16 deletions(-) diff --git a/Core/SaveState.cpp b/Core/SaveState.cpp index 84ebef955..9d9d7b79a 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" @@ -99,6 +101,12 @@ namespace SaveState return CChunkFileReader::LoadPtr(&data[0], state, errorString); } + struct StateBuffer { + std::vector zstd_compressed; + size_t decompressed_size; + size_t compressed_size; + }; + // 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. @@ -150,7 +158,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; @@ -165,7 +173,7 @@ 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; @@ -175,7 +183,7 @@ namespace SaveState return error; } - void ScheduleCompress(std::vector *result, const std::vector *state, const std::vector *base) + void ScheduleCompress(StateBuffer *result, std::vector *state, const std::vector *base) { if (compressThread_.joinable()) compressThread_.join(); @@ -183,11 +191,11 @@ 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) + void Compress(StateBuffer *result, std::vector &state, const std::vector &base) { std::lock_guard guard(lock_); // Bail if we were cleared before locking. @@ -195,29 +203,49 @@ namespace SaveState return; double start_time = time_now_d(); - result.clear(); - result.reserve(512 * 1024); + std::vector compressed; + compressed.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) { - result.push_back(1); - result.insert(result.end(), state.begin() + i, state.begin() + i + blockSize); + compressed.push_back(1); + compressed.insert(compressed.end(), state.begin() + i, state.begin() + i + blockSize); } else - result.push_back(0); + compressed.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 decompression in. + size_t compressCapacity = ZSTD_compressBound(compressed.size()); + u8 *compress_buf = (u8 *)malloc(compressCapacity); + + result->compressed_size = ZSTD_compress(compress_buf, compressCapacity, compressed.data(), compressed.size(), 0); + if (result->compressed_size) { + result->zstd_compressed = std::vector(result->compressed_size, 0); + memcpy(&result->zstd_compressed[0], compress_buf, result->compressed_size); + result->decompressed_size = compressed.size(); + } + free(compress_buf); + + 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) + void LockedDecompress(std::vector &result, const StateBuffer &buffer, const std::vector &base) { result.clear(); result.reserve(base.size()); auto basePos = base.begin(); + + // OK, zstd decompress first. + std::vector compressed = std::vector(buffer.decompressed_size, 0); + ZSTD_decompress(&compressed[0], compressed.size(), buffer.zstd_compressed.data(), buffer.zstd_compressed.size()); + for (size_t i = 0; i < compressed.size(); ) { if (compressed[i] == 0) @@ -296,14 +324,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_; @@ -312,7 +338,7 @@ namespace SaveState int base_ = -1; int baseUsage_ = 0; - double rewindLastTime_ = 0.0f; + double rewindLastTime_ = 0.0; }; static bool needsProcess = false; From 602f4cf3e25356f1cda46a0a6ccccbe10775cd67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Mon, 13 Feb 2023 15:22:28 +0100 Subject: [PATCH 3/4] Add experimental, disabled XOR mode, leaving all compression to ZSTD. Seems to perform worse. --- Core/SaveState.cpp | 91 ++++++++++++++++++++++++++++++---------------- 1 file changed, 59 insertions(+), 32 deletions(-) diff --git a/Core/SaveState.cpp b/Core/SaveState.cpp index 9d9d7b79a..422ecf64c 100644 --- a/Core/SaveState.cpp +++ b/Core/SaveState.cpp @@ -102,9 +102,14 @@ namespace SaveState } struct StateBuffer { + void Clear() { + zstd_compressed.clear(); + decompressed_size = 0; + compressed_size = 0; + } std::vector zstd_compressed; - size_t decompressed_size; - size_t compressed_size; + 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. @@ -195,6 +200,8 @@ namespace SaveState }); } + const bool USE_XOR = false; + void Compress(StateBuffer *result, std::vector &state, const std::vector &base) { std::lock_guard guard(lock_); @@ -204,26 +211,36 @@ namespace SaveState double start_time = time_now_d(); std::vector compressed; - compressed.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) - { - compressed.push_back(1); - compressed.insert(compressed.end(), state.begin() + i, state.begin() + i + blockSize); + 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) + { + 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 - compressed.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)compressed.size(), taken_s * 1000.0); - // Temporarily allocate a buffer to do decompression in. + // Temporarily allocate a buffer to do compression in. size_t compressCapacity = ZSTD_compressBound(compressed.size()); u8 *compress_buf = (u8 *)malloc(compressCapacity); - result->compressed_size = ZSTD_compress(compress_buf, compressCapacity, compressed.data(), compressed.size(), 0); if (result->compressed_size) { result->zstd_compressed = std::vector(result->compressed_size, 0); @@ -246,25 +263,35 @@ namespace SaveState std::vector compressed = std::vector(buffer.decompressed_size, 0); ZSTD_decompress(&compressed[0], compressed.size(), buffer.zstd_compressed.data(), buffer.zstd_compressed.size()); - 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; + 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; + } + } } } } @@ -285,7 +312,7 @@ namespace SaveState baseMapping_.clear(); baseMapping_.resize(size_); for (auto &s : states_) { - s.clear(); + s.Clear(); } buffer_.clear(); base_ = -1; From 61a13beeebe05fa0b53c79ef890b972b32a13e8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Tue, 14 Feb 2023 11:11:34 +0100 Subject: [PATCH 4/4] Address feedback --- Common/Serialize/Serializer.h | 1 - Core/SaveState.cpp | 39 ++++++++++++++++++++++------------- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/Common/Serialize/Serializer.h b/Common/Serialize/Serializer.h index a7fa964a0..10decc257 100644 --- a/Common/Serialize/Serializer.h +++ b/Common/Serialize/Serializer.h @@ -250,7 +250,6 @@ public: } } - // 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 422ecf64c..193f27ce8 100644 --- a/Core/SaveState.cpp +++ b/Core/SaveState.cpp @@ -182,13 +182,22 @@ namespace SaveState 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(StateBuffer *result, std::vector *state, const std::vector *base) + void ScheduleCompress(StateBuffer *result, const std::vector *state, const std::vector *base) { if (compressThread_.joinable()) compressThread_.join(); @@ -202,7 +211,7 @@ namespace SaveState const bool USE_XOR = false; - void Compress(StateBuffer *result, std::vector &state, const std::vector &base) + void Compress(StateBuffer *result, const std::vector &state, const std::vector &base) { std::lock_guard guard(lock_); // Bail if we were cleared before locking. @@ -240,20 +249,18 @@ namespace SaveState // Temporarily allocate a buffer to do compression in. size_t compressCapacity = ZSTD_compressBound(compressed.size()); - u8 *compress_buf = (u8 *)malloc(compressCapacity); - result->compressed_size = ZSTD_compress(compress_buf, compressCapacity, compressed.data(), compressed.size(), 0); + 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 = std::vector(result->compressed_size, 0); - memcpy(&result->zstd_compressed[0], compress_buf, result->compressed_size); + result->zstd_compressed.resize(result->compressed_size); result->decompressed_size = compressed.size(); } - free(compress_buf); 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 StateBuffer &buffer, const std::vector &base) + bool LockedDecompress(std::vector &result, const StateBuffer &buffer, const std::vector &base) { result.clear(); result.reserve(base.size()); @@ -261,7 +268,11 @@ namespace SaveState // OK, zstd decompress first. std::vector compressed = std::vector(buffer.decompressed_size, 0); - ZSTD_decompress(&compressed[0], compressed.size(), buffer.zstd_compressed.data(), buffer.zstd_compressed.size()); + 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()); @@ -295,6 +306,7 @@ namespace SaveState } } } + return true; } void Clear() @@ -1065,7 +1077,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");