mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2026-09-14 23:43:49 +00:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7510b8e3d2 | |||
| 9cc52e613d | |||
| 4242847637 |
Vendored
+599
-709
File diff suppressed because it is too large
Load Diff
Vendored
+600
-709
File diff suppressed because it is too large
Load Diff
Vendored
+600
-709
File diff suppressed because it is too large
Load Diff
Vendored
+599
-708
File diff suppressed because it is too large
Load Diff
Vendored
+599
-708
File diff suppressed because it is too large
Load Diff
Vendored
+599
-708
File diff suppressed because it is too large
Load Diff
Vendored
+601
-710
File diff suppressed because it is too large
Load Diff
Vendored
+599
-708
File diff suppressed because it is too large
Load Diff
Vendored
+599
-708
File diff suppressed because it is too large
Load Diff
Vendored
+600
-709
File diff suppressed because it is too large
Load Diff
Vendored
+600
-709
File diff suppressed because it is too large
Load Diff
Vendored
+600
-709
File diff suppressed because it is too large
Load Diff
Vendored
+600
-709
File diff suppressed because it is too large
Load Diff
Vendored
+599
-708
File diff suppressed because it is too large
Load Diff
Vendored
+600
-709
File diff suppressed because it is too large
Load Diff
Vendored
+600
-709
File diff suppressed because it is too large
Load Diff
Vendored
+600
-709
File diff suppressed because it is too large
Load Diff
Vendored
+600
-709
File diff suppressed because it is too large
Load Diff
Vendored
+600
-709
File diff suppressed because it is too large
Load Diff
Vendored
+599
-708
File diff suppressed because it is too large
Load Diff
Vendored
+599
-709
File diff suppressed because it is too large
Load Diff
Vendored
+600
-709
File diff suppressed because it is too large
Load Diff
Vendored
+600
-709
File diff suppressed because it is too large
Load Diff
Vendored
+600
-709
File diff suppressed because it is too large
Load Diff
Vendored
+600
-709
File diff suppressed because it is too large
Load Diff
Vendored
+599
-708
File diff suppressed because it is too large
Load Diff
Vendored
+600
-709
File diff suppressed because it is too large
Load Diff
+33
-21
@@ -1,32 +1,44 @@
|
||||
# User Handbook - Command Line
|
||||
|
||||
There are two main applications, an SDL-based app (`eden-cli`) and a Qt based app (`eden`); both accept command line arguments.
|
||||
|
||||
## eden
|
||||
There are two main applications, an SDL-based app (`eden-cli`) and a Qt based app (`eden`); both accept the same command line arguments.
|
||||
|
||||
- `./eden <path>`: Running with a single argument and nothing else, will make the emulator look for the given file and load it, this behavior is similar to `eden-cli`; allows dragging and dropping games into the application.
|
||||
- `-g <path>`: Alternate way to specify what to load, overrides. However let it be noted that arguments that use `-` will be treated as options/ignored, if your game, for some reason, starts with `-`, in order to safely handle it you may need to specify it as an argument.
|
||||
- `-f`: Use fullscreen.
|
||||
- `-u <number>`: Select the index of the user to load as.
|
||||
- `-input-profile <name>`: Specifies input profile name to use (for player #0 only).
|
||||
- `--debug/-d`: Enter debug mode, allow gdb stub at port `1234`
|
||||
- `--config/-c`: Specify alternate configuration file.
|
||||
- `--fullscreen/-f`: Use fullscreen.
|
||||
- `--help/-h`: Display help.
|
||||
- `--game/-g <path>`: Alternate way to specify what to load, overrides. However let it be noted that arguments that use `-` will be treated as options/ignored, if your game, for some reason, starts with `-`, in order to safely handle it you may need to specify it as an argument.
|
||||
- `--multiplayer/-m`: Specify multiplayer options.
|
||||
- `--program/-p`: Specify the program arguments to pass (optional).
|
||||
- `--user/-u <number>`: Specify the user index.
|
||||
- `--version/-v`: Display version and quit.
|
||||
- `--input-profile/-i <name>`: Specifies input profile name to use (for player #0 only).
|
||||
- `--null-render/-n`: Forces the usage of the "Null" render backend irrespective of settings.
|
||||
- `--filter/-x`: Sets the debug log filter irrespective of settings.
|
||||
- `--singlecore/-s`: Forces single-core regardless of settings.
|
||||
|
||||
Only the Qt frontend supports the following arguments:
|
||||
|
||||
- `-qlaunch`: Launch QLaunch.
|
||||
- `-hlaunch`: Launch homebrew launcher `nx-hbloader`.
|
||||
- Requires a copy of Atmosphere to be extracted onto `sdmc`.
|
||||
- This is a shorthand for `<eden folder>/sdmc/atmosphere/hbl.nsp`.
|
||||
- `-setup`: Launch setup applet.
|
||||
|
||||
## eden-cli
|
||||
`eden` (provided with `--room`), and `eden-room` supports the following options as well:
|
||||
|
||||
- `--debug/-d`: Enter debug mode, allow gdb stub at port `1234`
|
||||
- `--config/-c`: Specify alternate configuration file.
|
||||
- `--fullscreen/-f`: Set fullscreen.
|
||||
- `--help/-h`: Display help.
|
||||
- `--game/-g`: Specify the game to run.
|
||||
- `--multiplayer/-m`: Specify multiplayer options.
|
||||
- `--program/-p`: Specify the program arguments to pass (optional).
|
||||
- `--user/-u`: Specify the user index.
|
||||
- `--version/-v`: Display version and quit.
|
||||
- `--input-profile/-i`: Specifies input profile name to use (for player #0 only).
|
||||
- `--null-render/-n`: Forces the usage of the "Null" render backend irrespective of settings.
|
||||
- `--filter/-x`: Sets the debug log filter irrespective of settings.
|
||||
- `--singlecore/-s`: Forces single-core regardless of settings.
|
||||
- `-n/--room-name`: The name of the room.
|
||||
- `-d/--room-description`: The room description.
|
||||
- `-s/--bind-address`: The bind address for the room.
|
||||
- `-p/--port`: The port used for the room.
|
||||
- `-m/--max-members`: The maximum number of players for this room.
|
||||
- `-w/--password`: The password for the room.
|
||||
- `-g/--preferred-game`: The preferred game for this room.
|
||||
- `-i/--preferred-game-id`: The preferred game-id for this room.
|
||||
- `-u/--username`: The username used for announce.
|
||||
- `-t/--token`: The token used for announce.
|
||||
- `-a/--web-api-url`: yuzu Web API url.
|
||||
- `-b/--ban-list-file`: The file for storing the room ban list.
|
||||
- `-l/--log-file`: The file for storing the room log.
|
||||
- `-h/--help`: Display this help and exit.
|
||||
- `-v/--version`: Output version information and exit.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
|
||||
|
||||
<string name="app_disclaimer">سيعمل هذا البرنامج على تشغيل ألعاب منصة ألعاب «نينتندو سويتش». لا يتضمن البرنامج أي ألعاب أو مفاتيح تفعيل.<br /><br /> قبل البدء، يرجى تحديد موقع ملف <![CDATA[<b> prod.keys</b> ]]> في مساحة التخزين بجهازك.<br /><br /><![CDATA[<a href=\"https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/user/QuickStart.md\">مزيد من المعلومات</a>]]></string>
|
||||
<string name="app_disclaimer">سيشغل هذا البرنامج ألعاب جهاز Nintendo Switch. لا يتضمن البرنامج أي ألعاب أو مفاتيح.<br /><br />قبل أن تبدأ، يرجى تحديد موقع ملف <![CDATA[<b> prod.keys </b>]]> على وحدة تخزين جهازك.<br /><br /><![CDATA[<a href=\"https://yuzu-mirror.github.io/help/quickstart\">اعرف المزيد</a>]]></string>
|
||||
<string name="notice_notification_channel_name">الإشعارات والأخطاء</string>
|
||||
<string name="notice_notification_channel_description">عرض الإشعارات عند حدوث خطأ ما.</string>
|
||||
<string name="notification_permission_not_granted">لم يتم منح إذن الإشعار!</string>
|
||||
@@ -291,25 +291,6 @@
|
||||
<string name="gpu_driver_fetcher">أداة جلب برامج تشغيل وحدة المعالجة الرسومية</string>
|
||||
<string name="gpu_driver_manager">إدارة برامج تشغيل وحدة معالجة الرسومات</string>
|
||||
<string name="install_gpu_driver_description">تثبيت برامج تشغيل بديلة لأداء أو دقة أفضل</string>
|
||||
<string name="post_processing">تأثيرات ما بعد المعالجة</string>
|
||||
<string name="post_processing_description">تأثيرات ReShade FX التي يتم تطبيقها بعد عملية العرض</string>
|
||||
<string name="post_processing_per_game_description">ضبط تسلسل التأثيرات لهذه اللعبة</string>
|
||||
<string name="post_processing_add">إضافة تأثير</string>
|
||||
<string name="post_processing_remove">إزالة</string>
|
||||
<string name="post_processing_open_list">فتح القائمة</string>
|
||||
<string name="post_processing_close_list">إغلاق القائمة</string>
|
||||
<string name="post_processing_remove_all">إزالة التأثيرات</string>
|
||||
<string name="post_processing_preset_locked">الإعداد مسبقًا نشط. قم بتعديله في «تأثيرات ما بعد المعالجة» قبل بدء اللعبة.</string>
|
||||
<string name="post_processing_preset_modified">تم تغيير القيم عن الإعداد الأصلي.</string>
|
||||
<string name="post_processing_presets">الإعدادات المسبقة</string>
|
||||
<string name="post_processing_preset_new">إعداد مسبق جديد</string>
|
||||
<string name="post_processing_preset_new_description">يحفظ التأثيرات التي قمت بتحميلها، مع قيمها الحالية، كإعداد مسبق يمكنك اختياره لاحقًا.</string>
|
||||
<string name="post_processing_preset_name_invalid">قم بتسمية الإعداد المسبق باسم لا يحتوي على علامة يساوي.</string>
|
||||
<string name="post_processing_preset_none">لا يوجد إعداد مسبق</string>
|
||||
<string name="post_processing_preset_delete">حذف الإعداد المسبق</string>
|
||||
<string name="post_processing_preset_reset">إعادة تعيين القيم المحددة مسبقًا</string>
|
||||
<string name="post_processing_reset">إعادة التعيين إلى الإعدادات الافتراضية</string>
|
||||
<string name="post_processing_empty">لم يتم العثور على أي ملفات. ضع ملفات .fx في هذا المجلد:</string>
|
||||
<string name="frame_gen">توليد الإطار</string>
|
||||
<string name="frame_gen_per_game_description">ضبط إعدادات إنشاء الإطارات لهذه اللعبة</string>
|
||||
<string name="frame_gen_description">قم بإدراج الإطارات المُستكملة بين الإطارات المُعالجة باستخدام تقنية التحجيم بدون فقدان الجودة. يُفرض هذا الخيار عرض الإطارات وفقًا لترتيب FIFO عند تفعيله.</string>
|
||||
@@ -324,13 +305,6 @@
|
||||
<string name="frame_gen_target_rate_60">60 إطارًا في الثانية</string>
|
||||
<string name="frame_gen_target_rate_90">90 إطارًا في الثانية</string>
|
||||
<string name="frame_gen_target_rate_120">120 إطارًا في الثانية</string>
|
||||
<string name="frame_gen_on">تشغيل</string>
|
||||
<string name="frame_gen_off">إيقاف</string>
|
||||
<string name="frame_gen_fixed">مستقر</string>
|
||||
<string name="frame_gen_flow_auto">تلقائي</string>
|
||||
<string name="frame_gen_quick_description">قم بتشغيل أو إيقاف توليد الإطارات واختر مضاعف الإطارات.</string>
|
||||
<string name="frame_gen_target_rate_quick_description">توليد إطارات بمعدل إطارات مستهدف. ويتم ضبط المضاعف تلقائيًا.</string>
|
||||
<string name="frame_gen_flow_scale_quick_description">الدقة المستخدمة لتقدير الحركة بين الإطارات. تقلل القيم المنخفضة من الوقت الذي تستهلكه وحدة معالجة الرسومات.</string>
|
||||
<string name="frame_gen_queue_target">هدف قائمة انتظار الإطارات</string>
|
||||
<string name="frame_gen_queue_target_description">كم عدد الإطارات المكتملة التي قد تنتظر قبل عرضها؟ تعمل قوائم الانتظار الأكبر حجمًا على امتصاص الارتفاعات المفاجئة في حمل وحدة معالجة الرسومات على حساب زمن انتقال الإدخال.</string>
|
||||
<string name="frame_gen_queue_target_0">أقل زمن انتقال (بدون تخزين مؤقت)</string>
|
||||
@@ -341,14 +315,14 @@
|
||||
<string name="frame_gen_flow_scale">دقة تقدير الحركة</string>
|
||||
<string name="frame_gen_flow_scale_description">دقة مسار التدفق البصري، كجزء من الناتج. ويُعد خفض هذه القيمة أرخص طريقة لاستعادة الأداء.</string>
|
||||
<string name="frame_gen_unsupported">توليد الإطار غير متاح</string>
|
||||
<string name="frame_gen_unsupported_description">يفتقر برنامج تشغيل وحدة معالجة الرسومات هذا إلى نموذج ذاكرة Vulkan أو دعم الدقة النصفية (float16) التي تتطلبها برامج التظليل الخاصة بـ «Lossless Scaling».</string>
|
||||
<string name="frame_gen_unsupported_description">لا يدعم برنامج تشغيل وحدة معالجة الرسومات هذا نموذج ذاكرة Vulkan، الذي تتطلبه برامج التظليل الخاصة بـ«Lossless Scaling».</string>
|
||||
<string name="lossless_scaling_setup_description">اختياري. قم بتوفير ملف Lossless.dll الخاص بك لتمكين إنشاء الإطارات لاحقًا</string>
|
||||
<string name="lossless_scaling_install">تثبيت ملف Lossless.dll</string>
|
||||
<string name="lossless_scaling_install_description">يتطلب إنشاء الإطارات أن تكون لديك نسخة قانونية خاصة بك من ملف Lossless.dll المأخوذ من برنامج Lossless Scaling</string>
|
||||
<string name="lossless_scaling_replace_description">اختر نسخة أخرى من ملف Lossless.dll</string>
|
||||
<string name="frame_generation_support">توليد الإطارات</string>
|
||||
<string name="frame_generation_supported">مدعوم</string>
|
||||
<string name="frame_generation_unsupported">غير مدعوم (لا يتوفر نموذج ذاكرة Vulkan أو float16)</string>
|
||||
<string name="frame_generation_unsupported">غير مدعوم (لا يتوفر نموذج ذاكرة Vulkan)</string>
|
||||
<string name="lossless_scaling">Lossless Scaling</string>
|
||||
<string name="lossless_scaling_description">قم بتوفير نسختك الخاصة من ملف Lossless.dll لتمكين توليد الإطارات</string>
|
||||
<string name="lossless_scaling_installed">مثبت</string>
|
||||
@@ -938,7 +912,7 @@
|
||||
<string name="loader_error_file_not_found">ملف ROM غير موجود</string>
|
||||
|
||||
<string name="loader_requires_firmware">اللعبة تتطلب الفيرموير</string>
|
||||
<string name="loader_requires_firmware_description"><![CDATA[قد تتطلب هذه اللعبة برنامجاً ثابتاً لتعمل بشكل صحيح، ولم يتم تثبيت أي منها لديك. يرجى تثبيت البرنامج الثابت قبل التشغيل، أو الضغط على \"موافق\" للتشغيل على أية حال.]]></string>
|
||||
<string name="loader_requires_firmware_description"><![CDATA[اللعبة التي تحاول تشغيلها تتطلب الفيرموير للتمهيد أو لتجاوز القائمة الافتتاحية. يرجى <a href=\"https://yuzu-mirror.github.io/help/quickstart\">نسخ وتثبيت الفيرموير</a>، أو اضغط \"موافق\" للمتابعة على أي حال.]]></string>
|
||||
|
||||
<!-- Intent Launch strings -->
|
||||
<string name="searching_for_game">جارٍ البحث عن اللعبة...</string>
|
||||
|
||||
@@ -474,6 +474,8 @@
|
||||
<string name="loader_error_file_not_found">فایلی ڕۆم بوونی نییە</string>
|
||||
|
||||
<string name="loader_requires_firmware">یارییەکە فریموێر پێویستە</string>
|
||||
<string name="loader_requires_firmware_description"><![CDATA[یارییەکە کە تۆ هەوڵ دەدەیت بیخەیتە کار فریموێر پێویستە بۆ کردنەوە یان تێپەڕاندنی مێنیوی کردنەوە. تکایە <a href=\"https://yuzu-mirror.github.io/help/quickstart\"> فریموێر دامپ بکە و دابنێ</a>, یان پەنجە بنێ سەر \"باشە\" بۆ بەردەوامبوون هەرچۆنێک بێت.]]></string>
|
||||
|
||||
<!-- Intent Launch strings -->
|
||||
<string name="searching_for_game">گەڕان بە دوای یارییە...</string>
|
||||
<string name="game_not_found_for_title_id">یاری نەدۆزرایەوە بۆ ناسنامەی ناونیشان: %1$s</string>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
|
||||
|
||||
<string name="app_disclaimer">Tento software umožňuje spouštět hry pro herní konzoli Nintendo Switch. Neobsahuje žádné herní tituly ani klíče.<br /><br /> Nejdříve prosím vyhledejte soubor <![CDATA[<b> prod.keys </b>]]> v úložišti vašeho zařízení.<br /><br /><![CDATA[<a href=\"https://yuzu-mirror.github.io/help/quickstart\">Další informace</a>]]></string>
|
||||
<string name="notice_notification_channel_name">Upozornění a chyby</string>
|
||||
<string name="notice_notification_channel_description">Zobrazí oznámení v případě chyby.</string>
|
||||
<string name="notification_permission_not_granted">Oprávnění k zobrazení oznámení nebylo uděleno!</string>
|
||||
@@ -604,6 +605,8 @@
|
||||
<string name="loader_error_file_not_found">ROM neexistuje</string>
|
||||
|
||||
<string name="loader_requires_firmware">Hra vyžaduje firmware</string>
|
||||
<string name="loader_requires_firmware_description"><![CDATA[Hra, kterou se pokoušíte spustit, vyžaduje firmware pro spuštění nebo pro překročení úvodní nabídky. Prosím <a href=\"https://yuzu-mirror.github.io/help/quickstart\"> převezměte a nainstalujte firmware</a>, nebo stiskněte \"OK\" pro pokračování v každém případě.]]></string>
|
||||
|
||||
<!-- Intent Launch strings -->
|
||||
<string name="searching_for_game">Hledání hry...</string>
|
||||
<string name="game_not_found_for_title_id">Hra nebyla nalezena pro ID titulu: %1$s</string>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
|
||||
|
||||
<string name="app_disclaimer">Diese Software führt Spiele für die Nintendo Switch-Konsole aus. Es sind keine Spiele oder Schlüssel enthalten. Suche, bevor du beginnst, deine <![CDATA[<b> prod.keys </b>]]>-Datei auf deinem Gerät.<br /><br /><![CDATA[<a href=\"https://yuzu-mirror.github.io/help/quickstart\">Mehr Erfahren</a>]]></string>
|
||||
<string name="notice_notification_channel_name">Hinweise und Fehler</string>
|
||||
<string name="notice_notification_channel_description">Zeigt Benachrichtigungen an, wenn etwas schief läuft.</string>
|
||||
<string name="notification_permission_not_granted">Berechtigung für Benachrichtigungen nicht zugelassen!</string>
|
||||
@@ -306,10 +307,12 @@
|
||||
<string name="frame_gen_queue_target_1">Ausbalanciert (1 Bild)</string>
|
||||
<string name="frame_gen_queue_target_2">Flüssigste (2 Bilder)</string>
|
||||
<string name="frame_gen_unsupported">Frame-Generation nicht verfügbar</string>
|
||||
<string name="frame_gen_unsupported_description">Dieser GPU-Treiber unterstützt das Vulkan-Memory-Model nicht, welches Lossless Scaling-Shader benötigen.</string>
|
||||
<string name="lossless_scaling_setup_description">Optional. Stelle deine eigene Lossless.dll zur Verfügung, um Frame-Generation später zu aktivieren.</string>
|
||||
<string name="lossless_scaling_install">Installiere Lossless.dll</string>
|
||||
<string name="lossless_scaling_replace_description">Wähle eine andere Kopie von Lossless.dll</string>
|
||||
<string name="frame_generation_supported">Unterstützt</string>
|
||||
<string name="frame_generation_unsupported">Nicht unterstützt (kein Vulkan-Memory-Model)</string>
|
||||
<string name="lossless_scaling">Lossless Scaling</string>
|
||||
<string name="lossless_scaling_installed">Installiert</string>
|
||||
<string name="lossless_scaling_not_installed">Nicht installiert</string>
|
||||
@@ -808,6 +811,8 @@ Wirklich fortfahren?</string>
|
||||
<string name="loader_error_file_not_found">ROM-Datei existiert nicht</string>
|
||||
|
||||
<string name="loader_requires_firmware">Spiel erfordert Firmware</string>
|
||||
<string name="loader_requires_firmware_description"><![CDATA[Das Spiel, das Sie starten möchten, benötigt Firmware zum Booten oder zum Überspringen des Startmenüs. Bitte <a href=\"https://yuzu-mirror.github.io/help/quickstart\"> dumpen und installieren Sie Firmware</a>, oder drücken Sie \"OK\", um trotzdem zu starten.]]></string>
|
||||
|
||||
<!-- Intent Launch strings -->
|
||||
<string name="searching_for_game">Suche nach Spiel...</string>
|
||||
<string name="game_not_found_for_title_id">Spiel nicht gefunden für Titel-ID: %1$s</string>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
|
||||
|
||||
<string name="app_disclaimer">Este software arrancará juegos para la consola Nintendo Switch. No se incluyen títulos ni claves de juego.<br /><br />Antes de continuar, por favor localiza tu archivo <![CDATA[prod.keys ]]> en el almacenamiento de tu dispositivo. <br /><br /><![CDATA[<a href=\"https://yuzu-mirror.github.io/help/quickstart\">Aprender más</a>]]><b></string>
|
||||
<string name="notice_notification_channel_name">Avisos y errores</string>
|
||||
<string name="notice_notification_channel_description">Mostrar notificaciones cuando algo vaya mal.</string>
|
||||
<string name="notification_permission_not_granted">¡Permiso de notificación no concedido!</string>
|
||||
@@ -289,9 +290,6 @@
|
||||
<string name="gpu_driver_fetcher">Obtenedor de controladores de la GPU</string>
|
||||
<string name="gpu_driver_manager">Gestor de controladores de la GPU</string>
|
||||
<string name="install_gpu_driver_description">Instale los controladores alternativos para obtener un posible mejor rendimiento o precisión</string>
|
||||
<string name="post_processing_open_list">Abrir lista</string>
|
||||
<string name="post_processing_close_list">Cerrar lista</string>
|
||||
<string name="post_processing_reset">Restablecer a predeterminado</string>
|
||||
<string name="frame_gen">Generación de fotograma</string>
|
||||
<string name="frame_gen_per_game_description">Configurar la generación de fotogramas para este juego</string>
|
||||
<string name="frame_gen_multiplier">Multiplicador de fotograma</string>
|
||||
@@ -311,6 +309,7 @@
|
||||
<string name="lossless_scaling_replace_description">Seleccionar una copia diferente de Lossless.dll</string>
|
||||
<string name="frame_generation_support">Generación de fotograma</string>
|
||||
<string name="frame_generation_supported">Soportado</string>
|
||||
<string name="frame_generation_unsupported">No soportado (sin modelo de memoria de Vulkan)</string>
|
||||
<string name="lossless_scaling">Escalado sin pérdidas</string>
|
||||
<string name="lossless_scaling_installed">Instalado</string>
|
||||
<string name="lossless_scaling_not_installed">No instalado</string>
|
||||
@@ -784,7 +783,7 @@
|
||||
<!-- Custom Paths settings -->
|
||||
<string name="custom_save_directory">Directorio de los datos de guardado</string>
|
||||
<string name="custom_save_directory_description">Establecer una ruta personalizada para el almacenamiento de los datos de guardado</string>
|
||||
<string name="reset_to_nand">Restaurar los valores predeterminados</string>
|
||||
<string name="reset_to_nand">Restaurar valores predeterminados</string>
|
||||
<string name="migrate_save_data">Migrar datos de guardado</string>
|
||||
<string name="migrate_save_data_question">¿Desea migrar los datos de guardado existentes a la nueva ubicación\?</string>
|
||||
<string name="save_migration_complete">Datos de guardado migrados con éxito</string>
|
||||
@@ -878,6 +877,8 @@
|
||||
<string name="loader_error_file_not_found">Archivo ROM no existe</string>
|
||||
|
||||
<string name="loader_requires_firmware">El juego requiere firmware</string>
|
||||
<string name="loader_requires_firmware_description"><![CDATA[El juego que intenta iniciar requiere el firmware para arrancar o pasar el menú de inicio. Por favor <a href=\"https://yuzu-mirror.github.io/help/quickstart\"> vuelque e instale el firmware</a>, o pulse \"Aceptar\" para continuar de todos modos.]]></string>
|
||||
|
||||
<!-- Intent Launch strings -->
|
||||
<string name="searching_for_game">Buscando juego...</string>
|
||||
<string name="game_not_found_for_title_id">Juego no encontrado para el ID de título: %1$s</string>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
|
||||
|
||||
<string name="app_disclaimer">Ce logiciel permet de jouer à des jeux de la console Nintendo Switch. Aucun titre ni clé de jeu n\'est inclus.<br /><br />Avant de commencer, veuillez localiser votre fichier <![CDATA[<b> prod.keys </b>]]> sur le stockage de votre appareil.<br /><br /><![CDATA[<a href=\"https://yuzu-mirror.github.io/help/quickstart\">En savoir plus</a>]]></string>
|
||||
<string name="notice_notification_channel_name">Avis et erreurs</string>
|
||||
<string name="notice_notification_channel_description">Affiche des notifications en cas de problème.</string>
|
||||
<string name="notification_permission_not_granted">Permission de notification non accordée !</string>
|
||||
@@ -784,6 +785,8 @@
|
||||
<string name="loader_error_file_not_found">Le fichier ROM n\'existe pas</string>
|
||||
|
||||
<string name="loader_requires_firmware">Jeu nécessite un firmware</string>
|
||||
<string name="loader_requires_firmware_description"><![CDATA[Ce jeu nécessite un firmware pour démarrer ou passer le menu d\'accueil. Veuillez <a href=\"https://yuzu-mirror.github.io/help/quickstart\">dumper et installer le firmware</a> ou appuyez sur \"OK\" pour continuer quand même.]]></string>
|
||||
|
||||
<!-- Intent Launch strings -->
|
||||
<string name="searching_for_game">Recherche du jeu...</string>
|
||||
<string name="game_not_found_for_title_id">Jeu non trouvé pour l\'ID de titre : %1$s</string>
|
||||
|
||||
@@ -510,6 +510,8 @@
|
||||
<string name="loader_error_file_not_found">קובץ המשחק לא קיים</string>
|
||||
|
||||
<string name="loader_requires_firmware">המשחק דורש קושחה</string>
|
||||
<string name="loader_requires_firmware_description"><![CDATA[המשחק שאתה מנסה להפעיל דורש קושחה לאתחול או למעבר מתפריט הפתיחה. אנא <a href=\"https://yuzu-mirror.github.io/help/quickstart\">שמור והתקן קושחה</a> או לחץ \"אישור\" כדי להמשיך בכל מקרה.]]></string>
|
||||
|
||||
<!-- Intent Launch strings -->
|
||||
<string name="searching_for_game">מחפש משחק...</string>
|
||||
<string name="game_not_found_for_title_id">משחק לא נמצא למזהה כותרת: %1$s</string>
|
||||
|
||||
@@ -598,6 +598,8 @@
|
||||
<string name="loader_error_file_not_found">ROM fájl nem létezik</string>
|
||||
|
||||
<string name="loader_requires_firmware">A játék firmware-t igényel</string>
|
||||
<string name="loader_requires_firmware_description"><![CDATA[A játék, amelyet el szeretne indítani, firmware-t igényel a bootoláshoz vagy a kezdőmenü átlépéséhez. Kérjük, <a href=\"https://yuzu-mirror.github.io/help/quickstart\"> dumpolja és telepítse a firmware-t</a>, vagy nyomja meg az \"OK\" gombot a folytatáshoz.]]></string>
|
||||
|
||||
<!-- Intent Launch strings -->
|
||||
<string name="searching_for_game">Játék keresése...</string>
|
||||
<string name="game_not_found_for_title_id">A játék nem található a következő címazonosítóhoz: %1$s</string>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
|
||||
|
||||
<string name="app_disclaimer">Perangkat lunak ini akan menjalankan permainan dari konsol Nintendo Switch. Permainan maupun keys tidak disediakan.<br /><br />Sebelum memulai, tolong temukan berkas <![CDATA[<b> prod.keys </b>]]> didalam tempat penyimpanan mu.<br /><br /><![CDATA[<a href=\"https://yuzu-mirror.github.io/help/quickstart\">Pelajari lebih lanjut</a>]]></string>
|
||||
<string name="notice_notification_channel_name">Pemberitahuan dan error</string>
|
||||
<string name="notice_notification_channel_description">Menampilkan pemberitahuan ketika terjadi kesalahan.</string>
|
||||
<string name="notification_permission_not_granted">Izin notifikasi tidak diberikan!</string>
|
||||
@@ -637,6 +638,8 @@
|
||||
<string name="loader_error_file_not_found">Berkas Tidak Ditemukan</string>
|
||||
|
||||
<string name="loader_requires_firmware">Game memerlukan firmware</string>
|
||||
<string name="loader_requires_firmware_description"><![CDATA[Game yang ingin Anda jalankan memerlukan firmware untuk boot atau melewati menu pembuka. Silakan <a href=\"https://yuzu-mirror.github.io/help/quickstart\"> dump dan instal firmware</a>, atau tekan \"OK\" untuk melanjutkan.]]></string>
|
||||
|
||||
<!-- Intent Launch strings -->
|
||||
<string name="searching_for_game">Mencari game...</string>
|
||||
<string name="game_not_found_for_title_id">Game tidak ditemukan untuk ID Judul: %1$s</string>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
|
||||
|
||||
<string name="app_disclaimer">Questo software esegue giochi per la console Nintendo Switch. Non sono inclusi titoli di giochi o chiavi.<br /><br /> Prima di iniziare, individua il file <![CDATA[<b>prod.keys</b>]]> nella memoria del tuo dispositivo.<br /><br /> <![CDATA[<a href=\"https://yuzu-mirror.github.io/help/quickstart\">Ulteriori informazioni</a>]]></string>
|
||||
<string name="notice_notification_channel_name">Avvisi ed errori</string>
|
||||
<string name="notice_notification_channel_description">Mostra le notifiche quando qualcosa va storto.</string>
|
||||
<string name="notification_permission_not_granted">Autorizzazione di notifica non concessa!</string>
|
||||
@@ -661,6 +662,8 @@
|
||||
<string name="loader_error_file_not_found">Il file della ROM non esiste</string>
|
||||
|
||||
<string name="loader_requires_firmware">Firmware richiesto</string>
|
||||
<string name="loader_requires_firmware_description"><![CDATA[Il gioco che stai cercando di avviare richiede il firmware per poter partire o per superare il menù iniziale. <a href=\"https://yuzu-mirror.github.io/help/quickstart\">Esegui il dump del firmware e installalo</a>, o premi \"OK\" per continuare lo stesso.]]></string>
|
||||
|
||||
<!-- Intent Launch strings -->
|
||||
<string name="searching_for_game">Ricerca del gioco in corso...</string>
|
||||
<string name="game_not_found_for_title_id">Gioco non trovato per l\'ID titolo: %1$s</string>
|
||||
|
||||
@@ -508,6 +508,8 @@
|
||||
<string name="loader_error_file_not_found">ROMファイルが存在しません</string>
|
||||
|
||||
<string name="loader_requires_firmware">ゲームにはファームウェアが必要です</string>
|
||||
<string name="loader_requires_firmware_description"><![CDATA[起動しようとしているゲームは、起動または開始メニューを通過するためにファームウェアが必要です。<a href=\"https://yuzu-mirror.github.io/help/quickstart\"> ファームウェアをダンプしてインストール</a>するか、\"OK\"を押して続行してください。]]></string>
|
||||
|
||||
<!-- Intent Launch strings -->
|
||||
<string name="searching_for_game">ゲームを検索中...</string>
|
||||
<string name="game_not_found_for_title_id">タイトルID: %1$s のゲームが見つかりません</string>
|
||||
|
||||
@@ -558,6 +558,8 @@
|
||||
<string name="loader_error_file_not_found">롬 파일이 존재하지 않음</string>
|
||||
|
||||
<string name="loader_requires_firmware">게임에 펌웨어가 필요합니다</string>
|
||||
<string name="loader_requires_firmware_description"><![CDATA[실행하려는 게임은 부팅하거나 시작 메뉴를 통과하기 위해 펌웨어가 필요합니다. <a href=\"https://yuzu-mirror.github.io/help/quickstart\">펌웨어를 덤프하여 설치</a>하거나 \"확인\"을 눌러 계속 진행하세요.]]></string>
|
||||
|
||||
<!-- Intent Launch strings -->
|
||||
<string name="searching_for_game">게임 검색 중...</string>
|
||||
<string name="game_not_found_for_title_id">타이틀 ID에 대한 게임을 찾을 수 없음: %1$s</string>
|
||||
|
||||
@@ -487,6 +487,8 @@
|
||||
<string name="loader_error_file_not_found">ROM-filen finnes ikke</string>
|
||||
|
||||
<string name="loader_requires_firmware">Spillet krever fastvare</string>
|
||||
<string name="loader_requires_firmware_description"><![CDATA[Spillet du prøver å starte krever fastvare for oppstart eller for å komme forbi startmenyen. Vennligst <a href=\"https://yuzu-mirror.github.io/help/quickstart\"> dump og installer fastvare</a>, eller trykk \"OK\" for å fortsette likevel.]]></string>
|
||||
|
||||
<!-- Intent Launch strings -->
|
||||
<string name="searching_for_game">Søker etter spill...</string>
|
||||
<string name="game_not_found_for_title_id">Spill ikke funnet for tittel-ID: %1$s</string>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
|
||||
|
||||
<string name="app_disclaimer">To oprogramowanie uruchamia gry na konsoli Nintendo Switch. Żadne tytuły gier ani klucze nie są dołączone.<br /><br />Zanim zaczniesz, zlokalizuj plik <![CDATA[<b> prod.keys </b>]]> na swoim urządzeniu.<br /><br /><![CDATA[<a href=\"https://yuzu-mirror.github.io/help/quickstart\">Więcej informacji</a>]]></string>
|
||||
<string name="notice_notification_channel_name">Powiadomienia błędy</string>
|
||||
<string name="notice_notification_channel_description">Pokaż powiadomienie gdy coś pójdzie źle</string>
|
||||
<string name="notification_permission_not_granted">Nie zezwolono na powiadomienia!</string>
|
||||
@@ -757,6 +758,8 @@
|
||||
<string name="loader_error_file_not_found">Plik ROM nie istnieje</string>
|
||||
|
||||
<string name="loader_requires_firmware">Gra wymaga oprogramowania sprzętowego</string>
|
||||
<string name="loader_requires_firmware_description"><![CDATA[Gra, którą próbujesz uruchomić, wymaga oprogramowania sprzętowego do uruchomienia lub przejścia przez menu startowe. Proszę <a href=\"https://yuzu-mirror.github.io/help/quickstart\"> zrzuć i zainstaluj oprogramowanie sprzętowe</a>, lub naciśnij \"OK\", aby kontynuować mimo to.]]></string>
|
||||
|
||||
<!-- Intent Launch strings -->
|
||||
<string name="searching_for_game">Wyszukiwanie gry...</string>
|
||||
<string name="game_not_found_for_title_id">Nie znaleziono gry dla ID tytułu: %1$s</string>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
|
||||
|
||||
<string name="app_disclaimer">Este programa serve para rodar jogos do Nintendo Switch. Nenhum jogo ou chaves do sistema são inclusos<br /><br />Antes de começar, localize o seu <![CDATA[<b> prod.keys </b>]]> salvo no seu sistema.<br /><br /><![CDATA[<a href=\"https://yuzu-mirror.github.io/help/quickstart\">Saiba mais</a>]]></string>
|
||||
<string name="notice_notification_channel_name">Notificações e erros</string>
|
||||
<string name="notice_notification_channel_description">Mostra notificações quando acontecer um erro.</string>
|
||||
<string name="notification_permission_not_granted">Acesso às notificações não foi permitido!</string>
|
||||
@@ -716,6 +717,8 @@
|
||||
<string name="loader_error_file_not_found">O arquivo ROM não existe</string>
|
||||
|
||||
<string name="loader_requires_firmware">O jogo requer firmware</string>
|
||||
<string name="loader_requires_firmware_description"><![CDATA[O jogo que você está tentando iniciar requer firmware para inicializar ou passar do menu de abertura. Por favor <a href=\"https://yuzu-mirror.github.io/help/quickstart\"> faça dump e instale o firmware</a>, ou pressione \"OK\" para continuar mesmo assim.]]></string>
|
||||
|
||||
<!-- Intent Launch strings -->
|
||||
<string name="searching_for_game">Procurando jogo...</string>
|
||||
<string name="game_not_found_for_title_id">Jogo não encontrado para o ID do Título: %1$s</string>
|
||||
|
||||
@@ -609,6 +609,8 @@ uma tentativa de mapeamento automático</string>
|
||||
<string name="loader_error_file_not_found">O ficheiro da ROM não existe</string>
|
||||
|
||||
<string name="loader_requires_firmware">O jogo requer firmware</string>
|
||||
<string name="loader_requires_firmware_description"><![CDATA[O jogo que está a tentar iniciar requer firmware para arrancar ou passar o menu inicial. Por favor <a href=\"https://yuzu-mirror.github.io/help/quickstart\"> faça dump e instale o firmware</a>, ou pressione \"OK\" para continuar mesmo assim.]]></string>
|
||||
|
||||
<!-- Intent Launch strings -->
|
||||
<string name="searching_for_game">A procurar jogo...</string>
|
||||
<string name="game_not_found_for_title_id">Jogo não encontrado para o ID do Título: %1$s</string>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
|
||||
|
||||
<string name="app_disclaimer">Это программное обеспечение предназначено для запуска игр консоли Nintendo Switch. Никакие игры или ключи не входят в комплект.<br /><br />Перед началом работы найдите файл <![CDATA[<b> prod.keys </b>]]> во внутреннем хранилище вашего устройства. <br /><br /><![CDATA[<a href=\"https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/user/QuickStart.md\">Узнать больше</a>]]></string>
|
||||
<string name="app_disclaimer">Это программное обеспечение предназначено для запуска игр для игровой консоли Nintendo Switch. Игры и ключи в комплект не входят.<br /><br />Прежде чем начать, пожалуйста, найдите файл <![CDATA[<b>prod.keys</b>]]> на вашем устройстве.<br /><br /> <![CDATA[<a href=\"https://yuzu-mirror.github.io/help/quickstart\">Узнать больше</a>]]></string>
|
||||
<string name="notice_notification_channel_name">Уведомления и ошибки</string>
|
||||
<string name="notice_notification_channel_description">Показывает уведомления, когда что-то пошло не так</string>
|
||||
<string name="notification_permission_not_granted">Вы не предоставили разрешение на уведомления!</string>
|
||||
@@ -291,25 +291,6 @@
|
||||
<string name="gpu_driver_fetcher">Получение драйверов ГПУ</string>
|
||||
<string name="gpu_driver_manager">Менеджер драйверов ГПУ</string>
|
||||
<string name="install_gpu_driver_description">Установите альтернативные драйверы для потенциально лучшей производительности и/или точности</string>
|
||||
<string name="post_processing">Эффекты постобработки</string>
|
||||
<string name="post_processing_description">Эффекты ReShade FX, применяемые после рендеринга</string>
|
||||
<string name="post_processing_per_game_description">Настроить цепочку эффектов для этой игры</string>
|
||||
<string name="post_processing_add">Добавить эффект</string>
|
||||
<string name="post_processing_remove">Удалить</string>
|
||||
<string name="post_processing_open_list">Открыть список</string>
|
||||
<string name="post_processing_close_list">Закрыть список</string>
|
||||
<string name="post_processing_remove_all">Удалить эффекты</string>
|
||||
<string name="post_processing_preset_locked">Пресет активен. Отредактируйте его в разделе \"Эффекты постобработки\" перед запуском игры.</string>
|
||||
<string name="post_processing_preset_modified">Значения изменены относительно исходного пресета.</string>
|
||||
<string name="post_processing_presets">Пресеты</string>
|
||||
<string name="post_processing_preset_new">Новый пресет</string>
|
||||
<string name="post_processing_preset_new_description">Сохраняет загруженные вами эффекты вместе с их текущими значениями в виде пресета, который можно будет выбрать позже.</string>
|
||||
<string name="post_processing_preset_name_invalid">Дайте пресету имя без знака равенства.</string>
|
||||
<string name="post_processing_preset_none">Нет пресета</string>
|
||||
<string name="post_processing_preset_delete">Удалить пресет</string>
|
||||
<string name="post_processing_preset_reset">Сбросить значения пресета</string>
|
||||
<string name="post_processing_reset">Сбросить до значений по умолчанию</string>
|
||||
<string name="post_processing_empty">Эффекты не найдены. Поместите файлы .fx в эту папку:</string>
|
||||
<string name="frame_gen">Генерация кадров</string>
|
||||
<string name="frame_gen_per_game_description">Настройка генерации кадров для данной игры</string>
|
||||
<string name="frame_gen_description">Вставляет промежуточные кадры между отрендеренными с помощью Lossless Scaling. При включении принудительно устанавливает режим вывода FIFO.</string>
|
||||
@@ -328,12 +309,14 @@
|
||||
<string name="frame_gen_flow_scale">Разрешение оценки движения</string>
|
||||
<string name="frame_gen_flow_scale_description">Разрешение прохода оптического потока в долях от выходного разрешения. Его понижение — самый дешёвый способ вернуть производительность.</string>
|
||||
<string name="frame_gen_unsupported">Генерация кадров недоступна</string>
|
||||
<string name="frame_gen_unsupported_description">Драйвер ГПУ не поддерживает модель памяти Vulkan, требуемую шейдерами Lossless Scaling.</string>
|
||||
<string name="lossless_scaling_setup_description">Опционально. Укажите свой Lossless.dll для включения генерации кадров позже.</string>
|
||||
<string name="lossless_scaling_install">Установить Lossless.dll</string>
|
||||
<string name="lossless_scaling_install_description">Для генерации кадров требуется ваша собственная легальная копия Lossless.dll из Lossless Scaling</string>
|
||||
<string name="lossless_scaling_replace_description">Выбрать другой файл Lossless.dll</string>
|
||||
<string name="frame_generation_support">Генерация кадров</string>
|
||||
<string name="frame_generation_supported">Поддерживается</string>
|
||||
<string name="frame_generation_unsupported">Не поддерживается (нет модели памяти Vulkan)</string>
|
||||
<string name="lossless_scaling_description">Предоставьте свою копию Lossless.dll для включения генерации кадров</string>
|
||||
<string name="lossless_scaling_installed">Установлена</string>
|
||||
<string name="lossless_scaling_not_installed">Не установлена</string>
|
||||
@@ -630,11 +613,6 @@
|
||||
<string name="log">Логирование</string>
|
||||
<string name="flush_by_line">Сбрасывать логи отладки построчно</string>
|
||||
<string name="flush_by_line_description">Сбрасывает логи отладки после каждой написанной строки, упрощая отладку в случае сбоев или зависаний.</string>
|
||||
<string name="extended_logging">Включить расширенное логирование</string>
|
||||
<string name="extended_logging_description">Увеличивает максимальный размер файла журнала со 100 МБ до 1 ГБ.</string>
|
||||
<string name="log_filter">Фильтр журнала</string>
|
||||
<string name="log_filter_description">Управляет категориями журнала Eden. Пример: :Info Service.LM:Debug</string>
|
||||
|
||||
<!-- GPU Logging strings -->
|
||||
<string name="gpu_logging_header">Ведение журнала ГПУ</string>
|
||||
<string name="gpu_log_level">Уровень журналирования</string>
|
||||
@@ -918,7 +896,7 @@
|
||||
<string name="loader_error_file_not_found">Файл ROM не существует</string>
|
||||
|
||||
<string name="loader_requires_firmware">Игре требуется прошивка</string>
|
||||
<string name="loader_requires_firmware_description"><![CDATA[Для корректной работы этой игры может потребоваться прошивка, а у вас она не установлена. Пожалуйста, установите прошивку перед запуском или нажмите \"OK\", чтобы всё равно запустить.]]></string>
|
||||
<string name="loader_requires_firmware_description"><![CDATA[Для запуска этой игры или прохождения начального меню требуется прошивка. Пожалуйста, <a href=\"https://yuzu-mirror.github.io/help/quickstart\">сохраните и установите прошивку</a> или нажмите \"OK\" для запуска в любом случае.]]></string>
|
||||
|
||||
<!-- Intent Launch strings -->
|
||||
<string name="searching_for_game">Поиск игры...</string>
|
||||
|
||||
@@ -606,6 +606,8 @@
|
||||
<string name="loader_error_file_not_found">РОМ датотека не постоји</string>
|
||||
|
||||
<string name="loader_requires_firmware">Игра захтева firmware</string>
|
||||
<string name="loader_requires_firmware_description"><![CDATA[Игра коју покушавате да покренете захтева firmware за покретање или прелазак почетног менија. Молимо <a href=\"https://yuzu-mirror.github.io/help/quickstart\"> направите дамп и инсталирајте firmware</a>, или притисните \"OK\" да бисте наставили у сваком случају.]]></string>
|
||||
|
||||
<!-- Intent Launch strings -->
|
||||
<string name="searching_for_game">Тражење игре...</string>
|
||||
<string name="game_not_found_for_title_id">Игра није пронађена за ID наслова: %1$s</string>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
|
||||
|
||||
<string name="app_disclaimer">Цей застосунок запускає ігри для ігрової консолі Nintendo Switch. Він не містить ігор чи ключів.<br /><br />Перш ніж почати, укажіть розташування файлу <![CDATA[<b> prod.keys </b>]]> у пам’яті вашого пристрою.<br /><br /><![CDATA[<a href=\"https://yuzu-mirror.github.io/help/quickstart\">Дізнатися більше</a>]]></string>
|
||||
<string name="notice_notification_channel_name">Сповіщення та помилки</string>
|
||||
<string name="notice_notification_channel_description">Показує сповіщення у разі виникнення проблем.</string>
|
||||
<string name="notification_permission_not_granted">Дозвіл на сповіщення не надано!</string>
|
||||
@@ -829,6 +830,8 @@
|
||||
<string name="loader_error_file_not_found">ROM файлу не існує</string>
|
||||
|
||||
<string name="loader_requires_firmware">Гра вимагає прошивки</string>
|
||||
<string name="loader_requires_firmware_description"><![CDATA[Гра, яку ви намагаєтеся запустити, вимагає прошивки для завантаження або пропуску початкового меню. Будь ласка, <a href=\"https://yuzu-mirror.github.io/help/quickstart\"> зробіть дамп і встановіть прошивку</a>, або натисніть \"OK\", щоб продовжити в будь-якому разі.]]></string>
|
||||
|
||||
<!-- Intent Launch strings -->
|
||||
<string name="searching_for_game">Пошук гри...</string>
|
||||
<string name="game_not_found_for_title_id">Гру не знайдено для ID заголовку: %1$s</string>
|
||||
|
||||
@@ -483,6 +483,8 @@
|
||||
<string name="loader_error_file_not_found">Tệp ROM không tồn tại</string>
|
||||
|
||||
<string name="loader_requires_firmware">Trò chơi yêu cầu firmware</string>
|
||||
<string name="loader_requires_firmware_description"><![CDATA[Trò chơi bạn đang cố khởi chạy yêu cầu firmware để khởi động hoặc vượt qua menu mở đầu. Vui lòng <a href=\"https://yuzu-mirror.github.io/help/quickstart\"> dump và cài đặt firmware</a>, hoặc nhấn \"OK\" để tiếp tục dù sao đi nữa.]]></string>
|
||||
|
||||
<!-- Intent Launch strings -->
|
||||
<string name="searching_for_game">Đang tìm kiếm trò chơi...</string>
|
||||
<string name="game_not_found_for_title_id">Không tìm thấy trò chơi cho ID Tiêu đề: %1$s</string>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
|
||||
|
||||
<string name="app_disclaimer">本软件可以运行Nintendo Switch游戏主机的游戏,但自身并不包含任何游戏或密钥。<br /><br />请于开始之前选定位于你的设备存储空间中的<![CDATA[<b>prod.keys</b>]]>。<br /><br /><![CDATA[<a href=\"https://yuzu-mirror.github.io/help/quickstart\">了解更多</a>]]></string>
|
||||
<string name="notice_notification_channel_name">错误与注意事项</string>
|
||||
<string name="notice_notification_channel_description">当发生错误时显示通知。</string>
|
||||
<string name="notification_permission_not_granted">未授予通知权限!</string>
|
||||
@@ -314,12 +315,14 @@
|
||||
<string name="frame_gen_flow_scale">运动预估分辨率</string>
|
||||
<string name="frame_gen_flow_scale_description">光流通道的分辨率,以输出的比例表示。降低它是提升性能最经济的做法。</string>
|
||||
<string name="frame_gen_unsupported">帧生成不可用</string>
|
||||
<string name="frame_gen_unsupported_description">这个 GPU 驱动不支持无损缩放着色器所需的 Vulkan 内存模型。</string>
|
||||
<string name="lossless_scaling_setup_description">作为可选项。请提供您自己的 Lossless.dll 以便在之后可以启用帧生成。</string>
|
||||
<string name="lossless_scaling_install">安装 Lossless.dll</string>
|
||||
<string name="lossless_scaling_install_description">帧生成需要您自己从 Lossless Scaling 获得合法的 Lossless.dll 副本</string>
|
||||
<string name="lossless_scaling_replace_description">选择其它 Lossless.dll 副本</string>
|
||||
<string name="frame_generation_support">帧生成</string>
|
||||
<string name="frame_generation_supported">支持</string>
|
||||
<string name="frame_generation_unsupported">不支持 (无 Vulkan 内存模型)</string>
|
||||
<string name="lossless_scaling">无损缩放</string>
|
||||
<string name="lossless_scaling_description">提供您自己的 Lossless.dll 文件以启用帧生成</string>
|
||||
<string name="lossless_scaling_installed">已安装</string>
|
||||
@@ -894,6 +897,8 @@
|
||||
<string name="loader_error_file_not_found">ROM 文件不存在</string>
|
||||
|
||||
<string name="loader_requires_firmware">游戏需要固件</string>
|
||||
<string name="loader_requires_firmware_description"><![CDATA[您尝试启动的游戏需要固件才能引导或通过启动菜单。请<a href=\"https://yuzu-mirror.github.io/help/quickstart\">转储并安装固件</a>,或点击\"确定\"继续。]]></string>
|
||||
|
||||
<!-- Intent Launch strings -->
|
||||
<string name="searching_for_game">正在搜索游戏...</string>
|
||||
<string name="game_not_found_for_title_id">未找到标题ID的游戏: %1$s</string>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
|
||||
|
||||
<string name="app_disclaimer">本軟體可執行Nintendo Switch主機的遊戲,軟體不提供遊戲和金鑰檔案。<br /><br />在開始之前,請先安裝您的 <![CDATA[<b> prod.keys </b>]]> 檔案,<![CDATA[<a href=\"https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/user/QuickStart.md\">了解更多</a>]]></string>
|
||||
<string name="app_disclaimer">本軟體可執行Nintendo Switch主機的遊戲,軟體不提供遊戲和金鑰檔案。<br/> <br/>在開始之前,請先安裝您的 <<![CDATA[ <b>prod.keys</b> ]]> 檔案,<br /><br /><![CDATA[<a href=\"https://yuzu-mirror.github.io/help/quickstart\">了解更多</a>]]></string>
|
||||
<string name="notice_notification_channel_name">通知和錯誤</string>
|
||||
<string name="notice_notification_channel_description">發生錯誤時顯示通知</string>
|
||||
<string name="notification_permission_not_granted">未授予通知權限!</string>
|
||||
@@ -291,25 +291,6 @@
|
||||
<string name="gpu_driver_fetcher">GPU驅動程式下載器</string>
|
||||
<string name="gpu_driver_manager">GPU 驅動程式管理員</string>
|
||||
<string name="install_gpu_driver_description">安裝替代驅動程式以取得潛在的更佳效能或準確度</string>
|
||||
<string name="post_processing">後製處理效果</string>
|
||||
<string name="post_processing_description">在渲染完成後套用 ReShade FX 效果</string>
|
||||
<string name="post_processing_per_game_description">為此遊戲設定特殊濾鏡或效果</string>
|
||||
<string name="post_processing_add">新增效果</string>
|
||||
<string name="post_processing_remove">移除</string>
|
||||
<string name="post_processing_open_list">開啟清單</string>
|
||||
<string name="post_processing_close_list">收起清單</string>
|
||||
<string name="post_processing_remove_all">移除效果</string>
|
||||
<string name="post_processing_preset_locked">濾鏡已啟用。請在開啟遊戲前於 後製處理效果 中調整</string>
|
||||
<string name="post_processing_preset_modified">數值已變更,與原始濾鏡設定不同</string>
|
||||
<string name="post_processing_presets">濾鏡</string>
|
||||
<string name="post_processing_preset_new">新增濾鏡</string>
|
||||
<string name="post_processing_preset_new_description">將目前載入的效果及數值儲存為設定檔方便日後使用</string>
|
||||
<string name="post_processing_preset_name_invalid">請為此濾鏡設定檔命名,名稱中不得包含等號且不能與預先提供的設定檔名稱相同</string>
|
||||
<string name="post_processing_preset_none">無濾鏡</string>
|
||||
<string name="post_processing_preset_delete">刪除濾鏡</string>
|
||||
<string name="post_processing_preset_reset">重設此濾鏡的所有設定值</string>
|
||||
<string name="post_processing_reset">重設為預設值</string>
|
||||
<string name="post_processing_empty">找不到設定檔。請將濾鏡效果的 .fx 檔案放置於此資料夾:</string>
|
||||
<string name="frame_gen">影格生成</string>
|
||||
<string name="frame_gen_per_game_description">調整此遊戲的影格生成設定</string>
|
||||
<string name="frame_gen_description">使用 Lossless Scaling 在已渲染的影格之間插入補間影格。啟用此功能時,會強制採用 FIFO 垂直同步</string>
|
||||
@@ -334,37 +315,10 @@
|
||||
<string name="frame_gen_flow_scale">運動預測解析度</string>
|
||||
<string name="frame_gen_flow_scale_description">光流處理的解析度,以輸出解析度的比例表示。降低此設定值是減少效能負載最有效的方法</string>
|
||||
<string name="frame_gen_unsupported">無法使用影格生成</string>
|
||||
<string name="frame_gen_unsupported_description">Lossless Scaling 的著色器需要 Vulkan 記憶體模型,所選的驅動程式不支援該功能</string>
|
||||
<string name="lossless_scaling_setup_description">可選擇安裝自己擁有的 Lossless.dll 以在之後啟用影格生成功能</string>
|
||||
<string name="lossless_scaling_install">安裝 Lossless.dll</string>
|
||||
<string name="lossless_scaling_install_description">您需要擁有從合法管道獲得的 Lossless Scaling 並從該軟體的資料夾中取得 Lossless.dll 檔案才能使用影格生成功能</string>
|
||||
<string name="lossless_scaling_replace_description">安裝不同的 Lossless.dll 檔案</string>
|
||||
<string name="frame_generation_support">影格生成</string>
|
||||
<string name="frame_generation_supported">支援</string>
|
||||
<string name="lossless_scaling">Lossless Scaling</string>
|
||||
<string name="lossless_scaling_description">安裝您擁有的 Lossless.dll 檔案以使用影格生成</string>
|
||||
<string name="lossless_scaling_installed">已安裝</string>
|
||||
<string name="lossless_scaling_not_installed">未安裝</string>
|
||||
<string name="lossless_scaling_replace">替換</string>
|
||||
<string name="lossless_scaling_remove">刪除</string>
|
||||
<string name="lossless_scaling_remove_description">刪除已安裝的 Lossless.dll 及預先編譯的著色器</string>
|
||||
<string name="lossless_scaling_remove_confirmation">影格生成功能會停止運作直到您重新安裝 Lossless.dll 。您的 Lossless.dll 原始檔並不會被 Eden 修改</string>
|
||||
<string name="lossless_scaling_missing">Lossless.dll 未安裝</string>
|
||||
<string name="lossless_scaling_missing_description">前往 設定 -> Lossless Scaling 安裝以使用影格生成功能</string>
|
||||
<string name="lossless_scaling_locked">請先關閉遊戲</string>
|
||||
<string name="lossless_scaling_locked_description">Lossless.dll 無法在遊戲執行時進行更換</string>
|
||||
<string name="lossless_scaling_remove_unavailable">沒有東西可以刪除</string>
|
||||
<string name="lossless_scaling_remove_unavailable_description">尚未安裝 Lossless.dll</string>
|
||||
<string name="lossless_scaling_installing">準備影格生成著色器中...</string>
|
||||
<string name="lossless_scaling_install_success">成功安裝 Lossless.dll</string>
|
||||
<string name="lossless_scaling_install_failed">無法安裝 Lossless.dll</string>
|
||||
<string name="error_lossless_copy_failed">無法複製選取的檔案</string>
|
||||
<string name="error_lossless_unreadable">無法讀取選取的檔案</string>
|
||||
<string name="error_lossless_not_pe">選取的檔案並不是 Windows 程式庫。請在 Lossless Scaling 的安裝位置(資料夾)中選擇 Lossless.dll</string>
|
||||
<string name="error_lossless_missing_shaders">這個 Lossless.dll 的副本並未包含影格生成著色器。請更新 Lossless Scaling 後再試一次</string>
|
||||
<string name="error_lossless_translation_failed">無法轉譯影格生成著色器。尚不支援此 Lossless Scaling 版本</string>
|
||||
<string name="error_lossless_cache_failed">轉譯的著色器無法寫入到儲存空間。請確認手機容量是否充足</string>
|
||||
<string name="advanced_settings">進階設定</string>
|
||||
<string name="settings_description">調整模擬器設定</string>
|
||||
<string name="settings_description">進行模擬器設定</string>
|
||||
<string name="search_recently_played">最近遊玩</string>
|
||||
<string name="search_recently_added">最近新增</string>
|
||||
<string name="open_user_folder">開啟 Eden 資料夾</string>
|
||||
@@ -558,7 +512,7 @@
|
||||
<string name="renderer_async_presentation">非同步呈現</string>
|
||||
<string name="renderer_async_presentation_description">此修改可以透過將渲染移至單獨的 CPU 執行緒來提升性能,但可能會導致圖形問題</string>
|
||||
<string name="renderer_reactive_flushing">使用重新啟用排清</string>
|
||||
<string name="renderer_reactive_flushing_description">犧牲效能,以改善部分遊戲的轉譯準確度</string>
|
||||
<string name="renderer_reactive_flushing_description">犧牲效能,以改善部分遊戲的轉譯準確度。</string>
|
||||
<string name="enable_buffer_history">啟用緩衝區歷史</string>
|
||||
<string name="enable_buffer_history_description">允許存取先前的緩衝區狀態。此選項可能會改善部分遊戲的渲染品質與效能穩定性</string>
|
||||
<string name="enable_gpu_buffer_readback">啟用 GPU 緩衝區讀回</string>
|
||||
@@ -571,7 +525,7 @@
|
||||
<string name="fast_gpu_time">GPU 時脈</string>
|
||||
<string name="fast_gpu_time_description">讓遊戲誤以為 GPU 工作能更快完成,避免遊戲為了配合 Switch 的時脈而降低解析度與渲染距離</string>
|
||||
<string name="skip_cpu_inner_invalidation">跳過CPU內部失效處理</string>
|
||||
<string name="skip_cpu_inner_invalidation_description">在記憶體更新期間跳過某些CPU端快取的失效處理,減少CPU使用率並提高其性能。可能會導致某些遊戲出現故障或當機</string>
|
||||
<string name="skip_cpu_inner_invalidation_description">在記憶體更新期間跳過某些CPU端快取的失效處理,減少CPU使用率並提高其性能。可能會導致某些遊戲出現故障或當機。</string>
|
||||
<string name="fix_bloom_effects">修正光暈特效</string>
|
||||
<string name="fix_bloom_effects_description">在 薩爾達傳說:織夢島 和 薩爾達傳說:智慧的再現 中 減少光暈模糊的問題並移除 橫衝直撞:狂飆樂園重製版 中的光暈效果 (Adreno A6XX - A7XX/ Turnip)。警告:可能會在其它遊戲中導致圖形異常</string>
|
||||
<string name="emulate_bgr565">模擬 BGR565</string>
|
||||
@@ -631,11 +585,6 @@
|
||||
<string name="log">日誌</string>
|
||||
<string name="flush_by_line">按行寫入偵錯日誌</string>
|
||||
<string name="flush_by_line_description">在每行寫入時重新整理偵錯日誌,讓程式在當機或閃退時更容易偵錯。</string>
|
||||
<string name="extended_logging">啟用更詳細的日誌記錄</string>
|
||||
<string name="extended_logging_description">將日誌檔的最大檔案限制從 100MB 提高到 1GB</string>
|
||||
<string name="log_filter">日誌過濾器</string>
|
||||
<string name="log_filter_description">控制 Eden 日誌的紀錄類別。例如: *:Info Service.LM:Debug</string>
|
||||
|
||||
<!-- GPU Logging strings -->
|
||||
<string name="gpu_logging_header">GPU 日誌</string>
|
||||
<string name="gpu_log_level">記錄層級</string>
|
||||
@@ -760,7 +709,7 @@
|
||||
<string name="import_failed">導入失敗</string>
|
||||
<string name="cancelling">正在取消</string>
|
||||
<string name="install">安裝</string>
|
||||
<string name="fetch">下載</string>
|
||||
<string name="fetch">獲取</string>
|
||||
<string name="delete">刪除</string>
|
||||
<string name="edit">編輯</string>
|
||||
<string name="import_success">已成功導入</string>
|
||||
@@ -785,12 +734,12 @@
|
||||
|
||||
<!-- GPU driver fetcher -->
|
||||
<string name="show_releases">顯示版本</string>
|
||||
<string name="failed_to_fetch">下載失敗</string>
|
||||
<string name="error_during_fetch">下載過程中發生錯誤</string>
|
||||
<string name="failed_to_fetch">獲取失敗</string>
|
||||
<string name="error_during_fetch">獲取過程中發生錯誤</string>
|
||||
<string name="show_downloads">顯示下載</string>
|
||||
<string name="hide_downloads">隱藏下載</string>
|
||||
<string name="failed_cache_dir">快取目錄不可用</string>
|
||||
<string name="empty_response_body">未回傳任何資料</string>
|
||||
<string name="empty_response_body">回應內容為空</string>
|
||||
<string name="successfully_installed">%1$s 安裝成功</string>
|
||||
<string name="driver_failed_title">驅動程式安裝失敗</string>
|
||||
<string name="failed_install_driver">無法安裝 %1$s 驅動程式,您的系統支援此驅動程式嗎?</string>
|
||||
@@ -831,21 +780,13 @@
|
||||
<string name="save_migration_complete">成功遷移儲存資料</string>
|
||||
<string name="save_migration_failed">儲存資料遷移失敗</string>
|
||||
<string name="save_directory_set">存檔目錄設定完成</string>
|
||||
<string name="destination_has_saves">所選取的位置已有儲存資料。是否要取代該檔案?</string>
|
||||
<string name="all_files_permission_required">若要自訂路徑必須授予所有檔案的存取權</string>
|
||||
<string name="grant_permission">授予權限</string>
|
||||
<string name="custom_nand_directory">NAND 路徑</string>
|
||||
<string name="custom_nand_directory_description">設定 NAND 資料的自訂路徑</string>
|
||||
<string name="custom_sdmc_directory">虛擬 SD卡 路徑</string>
|
||||
<string name="custom_sdmc_directory_description">設定虛擬 SD卡 儲存空間的自訂路徑</string>
|
||||
<string name="path_set">路徑設定成功</string>
|
||||
<string name="skip_migration">跳過</string>
|
||||
|
||||
<!-- Game properties -->
|
||||
<string name="info">軟體資訊</string>
|
||||
<string name="info">資訊</string>
|
||||
<string name="info_description">程式 ID、開發人員及版本資訊</string>
|
||||
<string name="per_game_settings">個別遊戲設定</string>
|
||||
<string name="per_game_settings_description">調整此遊戲的專用設定</string>
|
||||
<string name="per_game_settings_description">編輯此遊戲的特定設定</string>
|
||||
<string name="launch_options">啟動設定</string>
|
||||
<string name="path">路徑</string>
|
||||
<string name="program_id">程式 ID</string>
|
||||
@@ -880,17 +821,17 @@
|
||||
<string name="save_data_description">管理此遊戲的儲存資料</string>
|
||||
<string name="delete_save_data">刪除儲存資料</string>
|
||||
<string name="delete_save_data_description">刪除此遊戲的所有儲存資料</string>
|
||||
<string name="delete_save_data_warning_description">這將會刪除此遊戲的所有儲存資料且無法復原,您確定要繼續嗎?</string>
|
||||
<string name="delete_save_data_warning_description">這將會刪除此遊戲的所有儲存資料,且無法復原,您確定要繼續嗎?</string>
|
||||
<string name="save_data_deleted_successfully">儲存資料已成功刪除</string>
|
||||
<string name="select_content_type">內容類型</string>
|
||||
<string name="updates_and_dlc">更新及 DLC</string>
|
||||
<string name="mods_and_cheats">模組及金手指</string>
|
||||
<string name="mods_and_cheats">模組及密技</string>
|
||||
<string name="addon_notice">重要的˙附加元件通知</string>
|
||||
<!-- \"cheats/" "romfs/" and \"exefs/ should not be translated -->
|
||||
<string name="addon_notice_description">若要安裝模組及金手指,您必須選擇一個包含 cheats/、romfs/ 或 exefs/ 的目錄。我們無法驗證這些內容是否與您的遊戲相容,所以請謹慎安裝!</string>
|
||||
<string name="addon_notice_description">若要安裝模組及密技,您必須選擇一個包含 cheats/、romfs/ 或 exefs/ 的目錄。我們無法驗證這些內容是否與您的遊戲相容,所以請謹慎安裝!</string>
|
||||
<string name="invalid_directory">無效的目錄</string>
|
||||
<!-- \"cheats/" "romfs/" and \"exefs/ should not be translated -->
|
||||
<string name="invalid_directory_description">請確保您選取的目錄包含 cheats/、romfs/ 或 exefs/ 資料夾,然後再試一次</string>
|
||||
<string name="invalid_directory_description">請確保您選取的目錄包含 cheats/、romfs/ 或 exefs/ 資料夾,然後再試一次。</string>
|
||||
<string name="addon_installed_successfully">附加元件已成功安裝</string>
|
||||
<string name="verifying_content">正在驗證內容…</string>
|
||||
<string name="content_install_notice">內容安裝通知</string>
|
||||
@@ -898,12 +839,11 @@
|
||||
<string name="confirm_uninstall">確認刪除</string>
|
||||
<string name="confirm_uninstall_description">您確定要刪除此附加元件嗎?</string>
|
||||
<string name="verify_integrity">完整性驗證</string>
|
||||
<string name="verifying">驗證中...</string>
|
||||
<string name="verify_success">完整性驗證成功!</string>
|
||||
<string name="verify_failure">完整性驗證失敗!</string>
|
||||
<string name="verify_failure_description">文件可能已經損壞</string>
|
||||
<string name="verify_no_result">無法正常執行完整性驗證</string>
|
||||
<string name="verify_no_result_description">未完成文件完整性檢查</string>
|
||||
<string name="verify_no_result">無法執行完整性驗證</string>
|
||||
<string name="verify_no_result_description">未檢查文件的完整性</string>
|
||||
<string name="verification_failed_for">以下文件的完整性驗證失敗:\n %1$s</string>
|
||||
<string name="share_game_settings">分享設定</string>
|
||||
<string name="import_config">導入設定</string>
|
||||
@@ -913,13 +853,13 @@
|
||||
<!-- ROM loading errors -->
|
||||
<string name="loader_error_encrypted">您的 ROM 已加密</string>
|
||||
<string name="loader_error_encrypted_roms_description"><![CDATA[請按照指南重新轉儲您的<a href=\"https://yuzu-mirror.github.io/help/quickstart/#dumping-physical-titles-game-cards\">遊戲卡</a>或<a href=\"https://yuzu-mirror.github.io/help/quickstart/#dumping-digital-titles-eshop\">數位版遊戲</a>。]]></string>
|
||||
<string name="loader_error_encrypted_keys_description"><![CDATA[請確保您的 <a href=\"https://yuzu-mirror.github.io/help/quickstart/#dumping-prodkeys-and-titlekeys\">prod.keys</a> 檔案已安裝,讓遊戲可以正常解密]]></string>
|
||||
<string name="loader_error_encrypted_keys_description"><![CDATA[請確保您的 <a href=\"https://yuzu-mirror.github.io/help/quickstart/#dumping-prodkeys-and-titlekeys\">prod.keys</a> 檔案已安裝,讓遊戲可以解密。]]></string>
|
||||
<string name="loader_error_video_core">初始化視訊核心時發生錯誤</string>
|
||||
<string name="loader_error_video_core_description">這經常是因為不相容的 GPU 驅動程式造成,安裝自訂 GPU 驅動程式可能會解決此問題。</string>
|
||||
<string name="loader_error_file_not_found">ROM 檔案不存在</string>
|
||||
|
||||
<string name="loader_requires_firmware">遊戲需要韌體</string>
|
||||
<string name="loader_requires_firmware_description"><![CDATA[您嘗試啟動的遊戲需要韌體才能正常運作,而您並未安裝任何韌體。請於遊戲啟動前安裝韌體或按\"確定\"強制啟動遊戲]]></string>
|
||||
<string name="loader_requires_firmware_description"><![CDATA[您嘗試啟動的遊戲需要韌體才能啟動或通過遊戲主選單。請<a href=\"https://yuzu-mirror.github.io/help/quickstart\">轉儲並安裝韌體</a>,或點擊\"確定\"繼續。]]></string>
|
||||
|
||||
<!-- Intent Launch strings -->
|
||||
<string name="searching_for_game">正在搜尋遊戲...</string>
|
||||
@@ -941,15 +881,15 @@
|
||||
<string name="config_write_failed">設定寫入失敗</string>
|
||||
<string name="config_apply_failed">套用設定失敗</string>
|
||||
<string name="config_already_exists_title">設定已存在</string>
|
||||
<string name="config_already_exists_message">%1$s已存在自訂設定\n\n您要取代它嗎?\n\n這個動作無法復原</string>
|
||||
<string name="config_already_exists_message">%1$s已存在自訂設定\n\n您要覆寫它嗎?\n\n這個動作無法復原</string>
|
||||
<string name="config_exists_prompt">正在檢查現有設定...</string>
|
||||
<string name="overwrite_cancelled">已取消取代該設定</string>
|
||||
<string name="overwrite">取代</string>
|
||||
<string name="overwrite_cancelled">覆寫已取消</string>
|
||||
<string name="overwrite">覆寫</string>
|
||||
|
||||
<!-- Driver strings -->
|
||||
<string name="driver_not_found">未安裝所需的驅動程式: %s</string>
|
||||
<string name="invalid_driver_file">無效的驅動程式檔案: %s</string>
|
||||
<string name="network_unavailable">無可用網路連線。請檢查您的網路連線並重試</string>
|
||||
<string name="driver_not_found">未安裝所需的驅動程式: %s</string>
|
||||
<string name="invalid_driver_file">無效的驅動程式檔案: %s</string>
|
||||
<string name="network_unavailable">無可用網路連線。請檢查您的網路連線並重試。</string>
|
||||
<string name="driver_missing_title">需要GPU驅動程式</string>
|
||||
<string name="driver_missing_message">這個遊戲的設定需要 \"%s\"驅動程式,而它並沒有安裝在您的裝置上\n\n要下載並安裝此驅動程式嗎?</string>
|
||||
<string name="driver_download_cancelled">驅動程式下載已取消。沒有所需的驅動程式無法啟動遊戲。</string>
|
||||
@@ -961,7 +901,7 @@
|
||||
<string name="emulation_toggle_controls">切換控制</string>
|
||||
<string name="emulation_rel_stick_center">相對搖桿中心</string>
|
||||
<string name="emulation_dpad_slide">方向鍵滑動</string>
|
||||
<string name="emulation_haptics">觸覺回饋</string>
|
||||
<string name="emulation_haptics">觸覺回饋技術</string>
|
||||
<string name="emulation_show_overlay">顯示虛擬按鍵</string>
|
||||
<string name="emulation_hide_overlay">隱藏虛擬按鍵</string>
|
||||
<string name="emulation_toggle_all">全部切換</string>
|
||||
@@ -970,9 +910,8 @@
|
||||
<string name="emulation_control_opacity">不透明度</string>
|
||||
<string name="emulation_touch_overlay_reset">重設虛擬按鍵</string>
|
||||
<string name="emulation_touch_overlay_edit">編輯虛擬按鍵</string>
|
||||
<string name="emulation_snap_to_grid">對齊網格</string>
|
||||
<string name="emulation_pause">暫停模擬</string>
|
||||
<string name="emulation_unpause">繼續模擬</string>
|
||||
<string name="emulation_unpause">取消暫停模擬</string>
|
||||
<string name="emulation_input_overlay">疊加層/虛擬按鍵設定</string>
|
||||
<string name="load_amiibo">導入Amiibo</string>
|
||||
<string name="touchscreen">觸控螢幕</string>
|
||||
|
||||
@@ -23,6 +23,8 @@ add_library(core STATIC
|
||||
core_timing.h
|
||||
cpu_manager.cpp
|
||||
cpu_manager.h
|
||||
launch_params.cpp
|
||||
launch_params.h
|
||||
crypto/aes_util.cpp
|
||||
crypto/aes_util.h
|
||||
crypto/ctr_encryption_layer.cpp
|
||||
@@ -1201,6 +1203,9 @@ endif()
|
||||
|
||||
target_include_directories(core PRIVATE ${OPUS_INCLUDE_DIRS})
|
||||
target_link_libraries(core PUBLIC common PRIVATE audio_core hid_core network video_core nx_tzdb tz)
|
||||
if (MSVC)
|
||||
target_link_libraries(core PRIVATE getopt)
|
||||
endif()
|
||||
|
||||
if (BOOST_NO_HEADERS)
|
||||
target_link_libraries(core PUBLIC Boost::container Boost::heap Boost::asio Boost::process Boost::crc)
|
||||
|
||||
@@ -0,0 +1,205 @@
|
||||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
#include <regex>
|
||||
#include <cctype>
|
||||
|
||||
#include "common/assert.h"
|
||||
#include "common/logging.h"
|
||||
#include "common/settings.h"
|
||||
#include "common/string_util.h"
|
||||
#include "common/scm_rev.h"
|
||||
#include "core/core.h"
|
||||
#include "core/hle/service/acc/profile_manager.h"
|
||||
#include "core/launch_params.h"
|
||||
|
||||
#undef _UNICODE
|
||||
#include <getopt.h>
|
||||
#ifndef _MSC_VER
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
namespace Core {
|
||||
LaunchParams ParseLaunchParams(Core::System& system, int argc, char *argv[], wchar_t *argv_w[]) noexcept {
|
||||
LaunchParams p{};
|
||||
|
||||
int option_index = 0;
|
||||
static struct option long_options[] = {
|
||||
// clang-format off
|
||||
{"debug", no_argument, 0, 'd'},
|
||||
{"config", required_argument, 0, 'c'},
|
||||
{"fullscreen", no_argument, 0, 'f'},
|
||||
{"help", no_argument, 0, 'h'},
|
||||
{"game", required_argument, 0, 'g'},
|
||||
{"multiplayer", required_argument, 0, 'm'},
|
||||
{"program", optional_argument, 0, 'p'},
|
||||
{"user", required_argument, 0, 'u'},
|
||||
{"version", no_argument, 0, 'v'},
|
||||
{"input-profile", no_argument, 0, 'i'},
|
||||
{"null-render", no_argument, 0, 'n'},
|
||||
{"singlecore", no_argument, 0, 's'},
|
||||
{"filter", no_argument, 0, 'x'},
|
||||
{0, 0, 0, 0},
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
while (optind < argc) {
|
||||
if (int arg = getopt_long(argc, argv, "dc:fhg:m:p:u:vinsx", long_options, &option_index); arg != -1) {
|
||||
switch (char(arg)) {
|
||||
case 'd':
|
||||
p.override_gdb_port = uint16_t(atoi(optarg));
|
||||
break;
|
||||
case 'c':
|
||||
p.config_path = optarg;
|
||||
break;
|
||||
case 'f':
|
||||
p.fullscreen = true;
|
||||
LOG_INFO(Frontend, "Starting in fullscreen mode...");
|
||||
break;
|
||||
case 'h':
|
||||
p.print_help = true;
|
||||
break;
|
||||
case 'g':
|
||||
p.filepath = std::string(optarg);
|
||||
break;
|
||||
case 'i': {
|
||||
p.input_profile = std::string(optarg);
|
||||
break;
|
||||
}
|
||||
case 'm': {
|
||||
p.use_multiplayer = true;
|
||||
const std::string str_arg(optarg);
|
||||
// regex to check if the format is nickname:password@ip:port
|
||||
// with optional :password
|
||||
const std::regex re("^([^:]+)(?::(.+))?@([^:]+)(?::([0-9]+))?$");
|
||||
if (std::regex_match(str_arg, re)) {
|
||||
std::smatch match;
|
||||
std::regex_search(str_arg, match, re);
|
||||
ASSERT(match.size() == 5);
|
||||
p.nickname = match[1];
|
||||
p.password = match[2];
|
||||
p.address = match[3];
|
||||
if (!match[4].str().empty()) {
|
||||
p.port = u16(std::strtoul(match[4].str().c_str(), nullptr, 0));
|
||||
}
|
||||
std::regex nickname_re("^[a-zA-Z0-9._\\- ]+$");
|
||||
ASSERT(std::regex_match(p.nickname, nickname_re) && "Nickname is not valid. Must be 4 to 20 alphanumeric characters");
|
||||
ASSERT(!p.address.empty() && "Address is empty");
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'p':
|
||||
p.program_args = argv[optind];
|
||||
++optind;
|
||||
break;
|
||||
case 'u': {
|
||||
// Launch game with a specific user
|
||||
bool argument_ok = isdigit(optarg[0]);
|
||||
p.selected_user = atoi(optarg);
|
||||
if (!argument_ok) {
|
||||
// try to look it up by username, only finds the first username that matches.
|
||||
auto const user_idx = system.GetProfileManager().GetUserIndex(optarg);
|
||||
if (user_idx != std::nullopt) {
|
||||
p.selected_user = user_idx.value();
|
||||
} else {
|
||||
LOG_ERROR(Frontend, "Invalid user argument '{}'", optarg);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (system.GetProfileManager().UserExistsIndex(*p.selected_user)) {
|
||||
Settings::values.current_user = s32(*p.selected_user);
|
||||
} else {
|
||||
LOG_ERROR(Frontend, "Selected user {} doesn't exist", *p.selected_user);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'v':
|
||||
p.print_version = true;
|
||||
break;
|
||||
case 'n':
|
||||
p.force_null_render = true;
|
||||
break;
|
||||
case 's':
|
||||
p.force_single_core = true;
|
||||
break;
|
||||
case 'x':
|
||||
p.log_filter = argv[optind];
|
||||
++optind;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
// only kept due to shortcuts made by Qt frontend which use "-qlaunch"
|
||||
if (strcmp(argv[optind], "-hlaunch") == 0) {
|
||||
p.launch_hlaunch = true;
|
||||
} else if (strcmp(argv[optind], "-qlaunch") == 0) {
|
||||
p.launch_qlaunch = true;
|
||||
} else if (strcmp(argv[optind], "-setup") == 0) {
|
||||
p.launch_setup = true;
|
||||
} else {
|
||||
// qt feeds utf8 data, sdl frontend feeds raw utf16 data
|
||||
#ifdef _WIN32
|
||||
p.filepath = argv_w != nullptr
|
||||
? Common::UTF16ToUTF8(argv_w[optind])
|
||||
: argv[optind];
|
||||
#else
|
||||
p.filepath = argv[optind];
|
||||
#endif
|
||||
}
|
||||
optind++;
|
||||
}
|
||||
}
|
||||
p.argv0 = argv[0];
|
||||
return p;
|
||||
}
|
||||
|
||||
void ApplyLaunchParams(LaunchParams const& lp) noexcept {
|
||||
// apply the log_filter setting
|
||||
// the logger was initialized before and doesn't pick up the filter on its own
|
||||
Common::Log::Filter filter{};
|
||||
filter.ParseFilterString(lp.log_filter.value_or(Settings::values.log_filter.GetValue()));
|
||||
Common::Log::SetGlobalFilter(filter);
|
||||
|
||||
if (!lp.program_args.empty()) {
|
||||
Settings::values.program_args = lp.program_args;
|
||||
}
|
||||
if (!lp.input_profile.empty()) {
|
||||
auto& players = Settings::values.players.GetValue();
|
||||
players[0].profile_name = lp.input_profile;
|
||||
}
|
||||
if (lp.selected_user.has_value()) {
|
||||
Settings::values.current_user = std::clamp(*lp.selected_user, 0, 7);
|
||||
}
|
||||
if (lp.override_gdb_port.has_value()) {
|
||||
Settings::values.use_gdbstub = true;
|
||||
Settings::values.gdbstub_port = *lp.override_gdb_port;
|
||||
}
|
||||
if (lp.force_single_core) {
|
||||
Settings::values.use_multi_core = false;
|
||||
}
|
||||
if (lp.force_null_render) {
|
||||
Settings::values.renderer_backend = Settings::RendererBackend::Null;
|
||||
}
|
||||
|
||||
if (lp.print_version) {
|
||||
LOG_INFO(Frontend, "Eden {} {}", Common::g_scm_branch, Common::g_scm_desc);
|
||||
}
|
||||
if (lp.print_help) {
|
||||
LOG_INFO(Frontend,
|
||||
"Usage: {}"
|
||||
" [options] <filename>\n"
|
||||
"-c, --config Load the specified configuration file\n"
|
||||
"-f, --fullscreen Start in fullscreen mode\n"
|
||||
"-g, --game File path of the game to load\n"
|
||||
"-h, --help Display this help and exit\n"
|
||||
"-m, --multiplayer=nick:password@address:port"
|
||||
" Nickname, password, address and port for multiplayer\n"
|
||||
"-p, --program Pass following string as arguments to executable\n"
|
||||
"-u, --user Select a specific user profile from 0 to 7\n"
|
||||
"-d, --debug Run the GDB stub on a port from 1 to 65535\n"
|
||||
"-v, --version Output version information and exit\n",
|
||||
lp.argv0
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <optional>
|
||||
#include "common/common_types.h"
|
||||
#include "network/room.h"
|
||||
|
||||
namespace Core {
|
||||
|
||||
class System;
|
||||
struct LaunchParams {
|
||||
std::string argv0{};
|
||||
std::string filepath{};
|
||||
std::string nickname{};
|
||||
std::string password{};
|
||||
std::string address{};
|
||||
std::string input_profile{};
|
||||
std::string program_args{};
|
||||
std::optional<std::string> config_path{};
|
||||
std::optional<int> selected_user{};
|
||||
std::optional<u16> override_gdb_port{};
|
||||
std::optional<std::string> log_filter{};
|
||||
u16 port = Network::DefaultRoomPort;
|
||||
bool use_multiplayer = false;
|
||||
bool fullscreen = false;
|
||||
bool force_null_render = false;
|
||||
bool force_single_core = false;
|
||||
// print
|
||||
bool print_version = false;
|
||||
bool print_help = false;
|
||||
// qt
|
||||
bool launch_hlaunch = false;
|
||||
bool launch_qlaunch = false;
|
||||
bool launch_setup = false;
|
||||
};
|
||||
|
||||
LaunchParams ParseLaunchParams(Core::System& system, int argc, char *argv[], wchar_t *argv_w[]) noexcept;
|
||||
void ApplyLaunchParams(LaunchParams const& lp) noexcept;
|
||||
|
||||
}
|
||||
@@ -151,9 +151,6 @@ std::unique_ptr<TranslationMap> InitializeTranslations(QObject* parent) {
|
||||
tr("The anti-aliasing method to use.\nSMAA offers the best quality.\nFXAA "
|
||||
"can produce a more stable picture in lower resolutions."));
|
||||
INSERT(Settings, post_shader_chain, QString(), QString());
|
||||
INSERT(Settings, post_shader_preset, QString(), QString());
|
||||
INSERT(Settings, post_shader_enabled, tr("Enable post-processing effects"),
|
||||
tr("Applies post-processing effects to the final image."));
|
||||
INSERT(Settings, fullscreen_mode, tr("Fullscreen Mode:"),
|
||||
tr("The method used to render the window in fullscreen.\nBorderless offers the best "
|
||||
"compatibility with the on-screen keyboard that some games request for "
|
||||
|
||||
@@ -37,10 +37,6 @@
|
||||
#include "yuzu/configuration/configure_graphics.h"
|
||||
#include "yuzu/configuration/shared_widget.h"
|
||||
|
||||
#ifdef HAS_RESHADE
|
||||
#include "yuzu/configuration/configure_post_processing.h"
|
||||
#endif
|
||||
|
||||
ConfigureGraphics::ConfigureGraphics(
|
||||
const Core::System& system_, std::vector<VkDeviceInfo::Record>& records_,
|
||||
const std::function<void()>& expose_compute_option_,
|
||||
@@ -220,12 +216,6 @@ void ConfigureGraphics::Setup(const ConfigurationShared::Builder& builder) {
|
||||
std::vector<QWidget*> hold_api;
|
||||
|
||||
for (const auto setting : Settings::values.linkage.by_category[Settings::Category::Renderer]) {
|
||||
#ifndef HAS_RESHADE
|
||||
if (setting->Id() == Settings::values.post_shader_enabled.Id()) {
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
|
||||
ConfigurationShared::Widget* widget = [&]() {
|
||||
if (setting->Id() == Settings::values.fsr_sharpening_slider.Id()) {
|
||||
// FSR needs a reversed slider and a 0.5 multiplier
|
||||
@@ -305,23 +295,6 @@ void ConfigureGraphics::Setup(const ConfigurationShared::Builder& builder) {
|
||||
// Keep track of the resolution combobox to update other UI tabs that need it
|
||||
resolution_combobox = widget->combobox;
|
||||
hold_graphics.emplace(setting->Id(), widget);
|
||||
#ifdef HAS_RESHADE
|
||||
} else if (setting->Id() == Settings::values.post_shader_enabled.Id()) {
|
||||
QPushButton* post_shader_button = new QPushButton(tr("Configure Effects..."), widget);
|
||||
post_shader_button->setVisible(widget->checkbox->isChecked());
|
||||
|
||||
connect(post_shader_button, &QAbstractButton::clicked, this, [this]() {
|
||||
ConfigurePostProcessing dialog(this);
|
||||
dialog.exec();
|
||||
});
|
||||
connect(widget->checkbox, &QCheckBox::toggled, post_shader_button,
|
||||
&QWidget::setVisible);
|
||||
|
||||
QBoxLayout* row = qobject_cast<QBoxLayout*>(widget->layout());
|
||||
row->insertWidget(1, post_shader_button);
|
||||
|
||||
hold_graphics.emplace(setting->Id(), widget);
|
||||
#endif
|
||||
} else {
|
||||
hold_graphics.emplace(setting->Id(), widget);
|
||||
}
|
||||
|
||||
@@ -70,8 +70,10 @@ ConfigurePostProcessing::ConfigurePostProcessing(QWidget* parent) : QDialog(pare
|
||||
|
||||
auto* root = new QVBoxLayout(this);
|
||||
|
||||
auto* description =
|
||||
new QLabel(tr("Changes apply immediately while a game is running."), this);
|
||||
auto* description = new QLabel(
|
||||
tr("ReShade FX effects are loaded from the post_shaders folder in the Eden data "
|
||||
"directory. Changes apply immediately while a game is running."),
|
||||
this);
|
||||
description->setWordWrap(true);
|
||||
root->addWidget(description);
|
||||
|
||||
@@ -126,15 +128,17 @@ ConfigurePostProcessing::ConfigurePostProcessing(QWidget* parent) : QDialog(pare
|
||||
});
|
||||
preset_row->addWidget(save_button);
|
||||
|
||||
auto* clear_button = new QPushButton(tr("Clear"), this);
|
||||
clear_button->setToolTip(tr("Remove every effect in use and deselect the preset."));
|
||||
connect(clear_button, &QPushButton::clicked, this, [this]() {
|
||||
VideoCore::FxChain::Instance().Clear();
|
||||
VideoCore::SetActiveFxPreset(std::string());
|
||||
preset_combo->setCurrentIndex(0);
|
||||
ApplyStructuralChange();
|
||||
auto* delete_button = new QPushButton(tr("Delete"), this);
|
||||
connect(delete_button, &QPushButton::clicked, this, [this]() {
|
||||
const QString name = preset_combo->currentData().toString();
|
||||
if (name.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
VideoCore::DeleteFxPreset(name.toStdString());
|
||||
PopulatePresetCombo();
|
||||
RefreshPresetStatus();
|
||||
});
|
||||
preset_row->addWidget(clear_button);
|
||||
preset_row->addWidget(delete_button);
|
||||
|
||||
root->addLayout(preset_row);
|
||||
|
||||
@@ -199,7 +203,6 @@ void ConfigurePostProcessing::ApplyStructuralChange() {
|
||||
void ConfigurePostProcessing::PopulatePresetCombo() {
|
||||
const QString previous = preset_combo->currentData().toString();
|
||||
preset_combo->clear();
|
||||
preset_combo->addItem(tr("None"), QString());
|
||||
|
||||
for (const auto& preset : VideoCore::GetFxPresetCatalog()) {
|
||||
const QString name = QString::fromStdString(preset.name);
|
||||
@@ -209,7 +212,7 @@ void ConfigurePostProcessing::PopulatePresetCombo() {
|
||||
}
|
||||
|
||||
const int restored = preset_combo->findData(previous);
|
||||
if (!previous.isEmpty() && restored >= 0) {
|
||||
if (restored >= 0) {
|
||||
preset_combo->setCurrentIndex(restored);
|
||||
return;
|
||||
}
|
||||
@@ -217,21 +220,12 @@ void ConfigurePostProcessing::PopulatePresetCombo() {
|
||||
const int active = preset_combo->findData(QString::fromStdString(VideoCore::GetActiveFxPreset()));
|
||||
if (active >= 0) {
|
||||
preset_combo->setCurrentIndex(active);
|
||||
return;
|
||||
}
|
||||
|
||||
preset_combo->setCurrentIndex(0);
|
||||
}
|
||||
|
||||
void ConfigurePostProcessing::RefreshPresetStatus() {
|
||||
const std::string active = VideoCore::GetActiveFxPreset();
|
||||
if (active.empty()) {
|
||||
if (VideoCore::FxChain::Instance().Size() == 0) {
|
||||
preset_status->setText(
|
||||
tr("No effects in use. Pick a preset and press Apply, or add effects one "
|
||||
"by one."));
|
||||
return;
|
||||
}
|
||||
preset_status->setText(tr("Custom chain. Pick a preset above and press Apply to replace it."));
|
||||
return;
|
||||
}
|
||||
|
||||
+18
-125
@@ -3,6 +3,7 @@
|
||||
|
||||
// Static Qt on macOS doesn't use Vulkan
|
||||
// Other platforms do, and thus have conflicting VulkanMemoryAllocator symbols
|
||||
#include "core/launch_params.h"
|
||||
#if defined(QT_STATICPLUGIN) && !defined(__APPLE__)
|
||||
#undef VMA_IMPLEMENTATION
|
||||
#endif
|
||||
@@ -15,7 +16,6 @@
|
||||
#include "render/performance_overlay.h"
|
||||
#ifdef HAS_RESHADE
|
||||
#include "configuration/configure_post_processing.h"
|
||||
#include "video_core/post_processing/fx_preset.h"
|
||||
#endif
|
||||
#include "updater/update_dialog.h"
|
||||
|
||||
@@ -515,79 +515,28 @@ MainWindow::MainWindow(bool has_broken_vulkan)
|
||||
// to prevent the UI from blowing up.
|
||||
UpdateUITheme();
|
||||
|
||||
QStringList args = QApplication::arguments();
|
||||
if (QStringList args = QApplication::arguments(); args.size() >= 2) {
|
||||
QList<QByteArray> qba{};
|
||||
for (auto const& e : args)
|
||||
qba.push_back(e.toUtf8());
|
||||
std::vector<char*> args_cstr{};
|
||||
for (auto& e : qba)
|
||||
args_cstr.push_back(e.data());
|
||||
|
||||
if (args.size() < 2) {
|
||||
return;
|
||||
}
|
||||
auto const lp = Core::ParseLaunchParams(*QtCommon::system, args_cstr.size(), args_cstr.data(), nullptr);
|
||||
|
||||
QString game_path;
|
||||
bool should_launch_qlaunch = false;
|
||||
bool should_launch_hlaunch = false;
|
||||
bool should_launch_setup = false;
|
||||
bool has_gamepath = false;
|
||||
bool is_fullscreen = false;
|
||||
|
||||
// Preserves drag/drop functionality
|
||||
for (int i = 1; i < args.size(); ++i) {
|
||||
if (args[i] == QStringLiteral("-f")) {
|
||||
// Launch game in fullscreen mode
|
||||
is_fullscreen = true;
|
||||
} else if (args[i] == QStringLiteral("-u") && i < args.size() - 1) {
|
||||
// Launch game with a specific user
|
||||
int user_arg_idx = ++i;
|
||||
bool argument_ok;
|
||||
std::size_t selected_user = args[user_arg_idx].toUInt(&argument_ok);
|
||||
if (!argument_ok) {
|
||||
// try to look it up by username, only finds the first username that matches.
|
||||
std::string const user_arg_str = args[user_arg_idx].toStdString();
|
||||
auto const user_idx =
|
||||
QtCommon::system->GetProfileManager().GetUserIndex(user_arg_str);
|
||||
if (user_idx != std::nullopt) {
|
||||
selected_user = user_idx.value();
|
||||
} else {
|
||||
LOG_ERROR(Frontend, "Invalid user argument '{}'", user_arg_str);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (QtCommon::system->GetProfileManager().UserExistsIndex(selected_user)) {
|
||||
Settings::values.current_user = s32(selected_user);
|
||||
user_flag_cmd_line = true;
|
||||
} else {
|
||||
LOG_ERROR(Frontend, "Selected user {} doesn't exist", selected_user);
|
||||
}
|
||||
} else if (args[i] == QStringLiteral("-g") && i < args.size() - 1) {
|
||||
// Launch game at path
|
||||
game_path = args[++i];
|
||||
has_gamepath = true;
|
||||
} else if (args[i] == QStringLiteral("-input-profile") && i < args.size() - 1) {
|
||||
auto& players = Settings::values.players.GetValue();
|
||||
players[0].profile_name = args[++i].toStdString();
|
||||
} else if (args[i] == QStringLiteral("-qlaunch")) {
|
||||
should_launch_qlaunch = true;
|
||||
} else if (args[i] == QStringLiteral("-hlaunch")) {
|
||||
should_launch_hlaunch = true;
|
||||
} else if (args[i] == QStringLiteral("-setup")) {
|
||||
should_launch_setup = true;
|
||||
} else {
|
||||
game_path = args[i];
|
||||
has_gamepath = true;
|
||||
// Override fullscreen setting if gamepath or argument is provided
|
||||
if (!lp.filepath.empty() || lp.fullscreen) {
|
||||
ui->action_Fullscreen->setChecked(lp.fullscreen);
|
||||
}
|
||||
}
|
||||
|
||||
// Override fullscreen setting if gamepath or argument is provided
|
||||
if (has_gamepath || is_fullscreen) {
|
||||
ui->action_Fullscreen->setChecked(is_fullscreen);
|
||||
}
|
||||
|
||||
if (should_launch_setup) {
|
||||
LaunchFirmwareApplet(u64(Service::AM::AppletProgramId::Starter), std::nullopt);
|
||||
} else {
|
||||
if (!game_path.isEmpty()) {
|
||||
BootGame(game_path, ApplicationAppletParameters());
|
||||
} else if (should_launch_qlaunch) {
|
||||
if (!lp.filepath.empty()) {
|
||||
BootGame(QString::fromStdString(lp.filepath), ApplicationAppletParameters());
|
||||
} else if (lp.launch_setup) {
|
||||
LaunchFirmwareApplet(u64(Service::AM::AppletProgramId::Starter), std::nullopt);
|
||||
} else if (lp.launch_qlaunch) {
|
||||
LaunchFirmwareApplet(u64(Service::AM::AppletProgramId::QLaunch), std::nullopt);
|
||||
} else if (should_launch_hlaunch) {
|
||||
} else if (lp.launch_hlaunch) {
|
||||
std::filesystem::path const sd_dir =
|
||||
Common::FS::GetEdenPathString(Common::FS::EdenPath::SDMCDir);
|
||||
auto const hbl_path = (sd_dir / "atmosphere" / "hbl.nsp").string();
|
||||
@@ -1091,41 +1040,6 @@ void MainWindow::InitializeWidgets() {
|
||||
|
||||
statusBar()->insertPermanentWidget(0, volume_button);
|
||||
|
||||
#ifdef HAS_RESHADE
|
||||
post_shader_status_button = new QPushButton();
|
||||
post_shader_status_button->setObjectName(QStringLiteral("TogglableStatusBarButton"));
|
||||
post_shader_status_button->setFocusPolicy(Qt::NoFocus);
|
||||
post_shader_status_button->setCheckable(true);
|
||||
connect(post_shader_status_button, &QPushButton::clicked, this, [this] {
|
||||
const bool enabled = Settings::values.post_shader_enabled.GetValue();
|
||||
Settings::values.post_shader_enabled.SetValue(!enabled);
|
||||
UpdatePostShaderText();
|
||||
});
|
||||
UpdatePostShaderText();
|
||||
post_shader_status_button->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||
connect(post_shader_status_button, &QPushButton::customContextMenuRequested,
|
||||
[this](const QPoint& menu_location) {
|
||||
QMenu context_menu;
|
||||
|
||||
for (auto const& preset : VideoCore::GetFxPresetCatalog()) {
|
||||
context_menu.addAction(QString::fromStdString(preset.name),
|
||||
[this, name = preset.name] {
|
||||
VideoCore::ApplyFxPreset(name);
|
||||
Settings::values.post_shader_enabled.SetValue(true);
|
||||
UpdatePostShaderText();
|
||||
});
|
||||
}
|
||||
|
||||
context_menu.addSeparator();
|
||||
context_menu.addAction(tr("Configure Effects..."), this,
|
||||
&MainWindow::OnPostProcessingShaders);
|
||||
|
||||
context_menu.exec(post_shader_status_button->mapToGlobal(menu_location));
|
||||
post_shader_status_button->repaint();
|
||||
});
|
||||
statusBar()->insertPermanentWidget(0, post_shader_status_button);
|
||||
#endif
|
||||
|
||||
// setup AA button
|
||||
aa_status_button = new QPushButton();
|
||||
aa_status_button->setObjectName(QStringLiteral("TogglableStatusBarButton"));
|
||||
@@ -3944,7 +3858,6 @@ void MainWindow::OnPostProcessingShaders() {
|
||||
connect(post_processing_dialog, &QDialog::finished, post_processing_dialog, [this]() {
|
||||
post_processing_dialog->deleteLater();
|
||||
post_processing_dialog = nullptr;
|
||||
UpdatePostShaderText();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -4299,26 +4212,6 @@ void MainWindow::UpdateAAText() {
|
||||
: aa_text.toUpper());
|
||||
}
|
||||
|
||||
#ifdef HAS_RESHADE
|
||||
void MainWindow::UpdatePostShaderText() {
|
||||
const bool enabled = Settings::values.post_shader_enabled.GetValue();
|
||||
post_shader_status_button->setChecked(enabled);
|
||||
|
||||
if (!enabled) {
|
||||
post_shader_status_button->setText(tr("NO FX"));
|
||||
return;
|
||||
}
|
||||
|
||||
const std::string preset = VideoCore::GetActiveFxPreset();
|
||||
if (preset.empty()) {
|
||||
post_shader_status_button->setText(tr("FX"));
|
||||
return;
|
||||
}
|
||||
|
||||
post_shader_status_button->setText(QString::fromStdString(preset).toUpper());
|
||||
}
|
||||
#endif
|
||||
|
||||
void MainWindow::UpdateVolumeUI() {
|
||||
const auto volume_value = static_cast<int>(Settings::values.volume.GetValue());
|
||||
volume_slider->setValue(volume_value);
|
||||
|
||||
@@ -448,7 +448,6 @@ private:
|
||||
void UpdateAPIText();
|
||||
void UpdateFilterText();
|
||||
void UpdateAAText();
|
||||
void UpdatePostShaderText();
|
||||
void UpdateVolumeUI();
|
||||
void UpdateStatusBar();
|
||||
void UpdateGPUAccuracyButton();
|
||||
@@ -525,7 +524,6 @@ private:
|
||||
QPushButton* dock_status_button = nullptr;
|
||||
QPushButton* filter_status_button = nullptr;
|
||||
QPushButton* aa_status_button = nullptr;
|
||||
QPushButton* post_shader_status_button = nullptr;
|
||||
VolumeButton* volume_button = nullptr;
|
||||
QWidget* volume_popup = nullptr;
|
||||
QSlider* volume_slider = nullptr;
|
||||
|
||||
@@ -42,9 +42,6 @@ target_link_libraries(yuzu-cmd PRIVATE common core input_common frontend_common
|
||||
if (ENABLE_OPENGL)
|
||||
target_link_libraries(yuzu-cmd PRIVATE glad)
|
||||
endif()
|
||||
if (MSVC)
|
||||
target_link_libraries(yuzu-cmd PRIVATE getopt)
|
||||
endif()
|
||||
target_link_libraries(yuzu-cmd PRIVATE ${PLATFORM_LIBRARIES} Threads::Threads)
|
||||
|
||||
create_resource("../../dist/eden.bmp" "yuzu_cmd/yuzu_icon.h" "yuzu_icon")
|
||||
|
||||
+15
-189
@@ -10,6 +10,7 @@
|
||||
#include <regex>
|
||||
#include <string>
|
||||
#include "common/settings_enums.h"
|
||||
#include "core/launch_params.h"
|
||||
#ifdef __EMSCRIPTEN__
|
||||
#include <emscripten.h>
|
||||
#endif
|
||||
@@ -52,12 +53,6 @@
|
||||
#include "common/windows/timer_resolution.h"
|
||||
#endif
|
||||
|
||||
#undef _UNICODE
|
||||
#include <getopt.h>
|
||||
#ifndef _MSC_VER
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
extern "C" {
|
||||
// tells Nvidia and AMD drivers to use the dedicated GPU by default on laptops with switchable
|
||||
@@ -67,25 +62,6 @@ __declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
static void PrintHelp(const char* argv0) {
|
||||
std::cout << "Usage: " << argv0
|
||||
<< " [options] <filename>\n"
|
||||
"-c, --config Load the specified configuration file\n"
|
||||
"-f, --fullscreen Start in fullscreen mode\n"
|
||||
"-g, --game File path of the game to load\n"
|
||||
"-h, --help Display this help and exit\n"
|
||||
"-m, --multiplayer=nick:password@address:port"
|
||||
" Nickname, password, address and port for multiplayer\n"
|
||||
"-p, --program Pass following string as arguments to executable\n"
|
||||
"-u, --user Select a specific user profile from 0 to 7\n"
|
||||
"-d, --debug Run the GDB stub on a port from 1 to 65535\n"
|
||||
"-v, --version Output version information and exit\n";
|
||||
}
|
||||
|
||||
static void PrintVersion() {
|
||||
std::cout << "Eden " << Common::g_scm_branch << " " << Common::g_scm_desc << std::endl;
|
||||
}
|
||||
|
||||
static void OnStateChanged(const Network::RoomMember::State& state) {
|
||||
switch (state) {
|
||||
case Network::RoomMember::State::Idle:
|
||||
@@ -208,168 +184,18 @@ extern "C" SDL_AppResult SDL_AppInit(void **appstate, int argc, char **argv) {
|
||||
LOG_CRITICAL(Frontend, "Failed to get command line arguments");
|
||||
return SDL_APP_FAILURE;
|
||||
}
|
||||
#endif
|
||||
std::string filepath;
|
||||
std::optional<std::string> config_path{};
|
||||
std::string program_args;
|
||||
std::optional<int> selected_user{};
|
||||
std::optional<u16> override_gdb_port{};
|
||||
bool use_multiplayer = false;
|
||||
bool fullscreen = false;
|
||||
bool force_null_render = false;
|
||||
bool force_single_core = false;
|
||||
std::string nickname{};
|
||||
std::string password{};
|
||||
std::string address{};
|
||||
std::string input_profile{};
|
||||
std::optional<std::string> log_filter{};
|
||||
u16 port = Network::DefaultRoomPort;
|
||||
|
||||
static struct option long_options[] = {
|
||||
// clang-format off
|
||||
{"debug", no_argument, 0, 'd'},
|
||||
{"config", required_argument, 0, 'c'},
|
||||
{"fullscreen", no_argument, 0, 'f'},
|
||||
{"help", no_argument, 0, 'h'},
|
||||
{"game", required_argument, 0, 'g'},
|
||||
{"multiplayer", required_argument, 0, 'm'},
|
||||
{"program", optional_argument, 0, 'p'},
|
||||
{"user", required_argument, 0, 'u'},
|
||||
{"version", no_argument, 0, 'v'},
|
||||
{"input-profile", no_argument, 0, 'i'},
|
||||
{"null-render", no_argument, 0, 'n'},
|
||||
{"singlecore", no_argument, 0, 's'},
|
||||
{"filter", no_argument, 0, 'x'},
|
||||
{0, 0, 0, 0},
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
while (optind < argc) {
|
||||
int arg = getopt_long(argc, argv, "g:fhvcip::c:u:d:", long_options, &option_index);
|
||||
if (arg != -1) {
|
||||
switch (char(arg)) {
|
||||
case 'd':
|
||||
override_gdb_port = uint16_t(atoi(optarg));
|
||||
break;
|
||||
case 'c':
|
||||
config_path = optarg;
|
||||
break;
|
||||
case 'f':
|
||||
fullscreen = true;
|
||||
LOG_INFO(Frontend, "Starting in fullscreen mode...");
|
||||
break;
|
||||
case 'h':
|
||||
PrintHelp(argv[0]);
|
||||
return SDL_APP_FAILURE;
|
||||
case 'g':
|
||||
filepath = std::string(optarg);
|
||||
break;
|
||||
case 'i': {
|
||||
input_profile = std::string(optarg);
|
||||
break;
|
||||
}
|
||||
case 'm': {
|
||||
use_multiplayer = true;
|
||||
const std::string str_arg(optarg);
|
||||
// regex to check if the format is nickname:password@ip:port
|
||||
// with optional :password
|
||||
const std::regex re("^([^:]+)(?::(.+))?@([^:]+)(?::([0-9]+))?$");
|
||||
if (!std::regex_match(str_arg, re)) {
|
||||
std::cout << "Wrong format for option --multiplayer\n";
|
||||
PrintHelp(argv[0]);
|
||||
return SDL_APP_FAILURE;
|
||||
}
|
||||
|
||||
std::smatch match;
|
||||
std::regex_search(str_arg, match, re);
|
||||
ASSERT(match.size() == 5);
|
||||
nickname = match[1];
|
||||
password = match[2];
|
||||
address = match[3];
|
||||
if (!match[4].str().empty()) {
|
||||
port = u16(std::strtoul(match[4].str().c_str(), nullptr, 0));
|
||||
}
|
||||
std::regex nickname_re("^[a-zA-Z0-9._\\- ]+$");
|
||||
if (!std::regex_match(nickname, nickname_re)) {
|
||||
LOG_ERROR(Frontend, "Nickname is not valid. Must be 4 to 20 alphanumeric characters");
|
||||
return SDL_APP_FAILURE;
|
||||
}
|
||||
if (address.empty()) {
|
||||
LOG_ERROR(Frontend, "Address to room must not be empty");
|
||||
return SDL_APP_FAILURE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'p':
|
||||
program_args = argv[optind];
|
||||
++optind;
|
||||
break;
|
||||
case 'u':
|
||||
selected_user = atoi(optarg);
|
||||
break;
|
||||
case 'v':
|
||||
PrintVersion();
|
||||
return SDL_APP_FAILURE;
|
||||
case 'n':
|
||||
force_null_render = true;
|
||||
break;
|
||||
case 's':
|
||||
force_single_core = true;
|
||||
break;
|
||||
case 'x':
|
||||
log_filter = argv[optind];
|
||||
++optind;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
#ifdef _WIN32
|
||||
filepath = Common::UTF16ToUTF8(argv_w[optind]);
|
||||
#else
|
||||
filepath = argv[optind];
|
||||
wchar_t **argv_w = nullptr;
|
||||
#endif
|
||||
optind++;
|
||||
}
|
||||
}
|
||||
|
||||
SdlConfig config{config_path};
|
||||
|
||||
// apply the log_filter setting
|
||||
// the logger was initialized before and doesn't pick up the filter on its own
|
||||
Common::Log::Filter filter;
|
||||
filter.ParseFilterString(log_filter.value_or(Settings::values.log_filter.GetValue()));
|
||||
Common::Log::SetGlobalFilter(filter);
|
||||
|
||||
if (!program_args.empty()) {
|
||||
Settings::values.program_args = program_args;
|
||||
}
|
||||
|
||||
if (!input_profile.empty()) {
|
||||
auto& players = Settings::values.players.GetValue();
|
||||
players[0].profile_name = input_profile;
|
||||
}
|
||||
|
||||
if (selected_user.has_value()) {
|
||||
Settings::values.current_user = std::clamp(*selected_user, 0, 7);
|
||||
}
|
||||
|
||||
if (override_gdb_port.has_value()) {
|
||||
Settings::values.use_gdbstub = true;
|
||||
Settings::values.gdbstub_port = *override_gdb_port;
|
||||
}
|
||||
|
||||
if (force_single_core) {
|
||||
Settings::values.use_multi_core = false;
|
||||
}
|
||||
|
||||
if (force_null_render) {
|
||||
Settings::values.renderer_backend = Settings::RendererBackend::Null;
|
||||
}
|
||||
|
||||
Core::LaunchParams lp = Core::ParseLaunchParams(state->system, argc, argv, argv_w);
|
||||
#ifdef _WIN32
|
||||
LocalFree(argv_w);
|
||||
#endif
|
||||
SdlConfig config{lp.config_path};
|
||||
|
||||
if (filepath.empty()) {
|
||||
Core::ApplyLaunchParams(lp);
|
||||
|
||||
if (lp.filepath.empty()) {
|
||||
LOG_CRITICAL(Frontend, "Failed to load ROM: No ROM specified");
|
||||
return SDL_APP_FAILURE;
|
||||
}
|
||||
@@ -386,14 +212,14 @@ extern "C" SDL_AppResult SDL_AppInit(void **appstate, int argc, char **argv) {
|
||||
case Settings::RendererBackend::OpenGL_GLSL:
|
||||
case Settings::RendererBackend::OpenGL_GLASM:
|
||||
case Settings::RendererBackend::OpenGL_SPIRV:
|
||||
state->emu_window = std::make_unique<EmuWindow_SDL3_GL>(&input_subsystem, state->system, fullscreen);
|
||||
state->emu_window = std::make_unique<EmuWindow_SDL3_GL>(&input_subsystem, state->system, lp.fullscreen);
|
||||
break;
|
||||
#endif
|
||||
case Settings::RendererBackend::Vulkan:
|
||||
state->emu_window = std::make_unique<EmuWindow_SDL3_VK>(&input_subsystem, state->system, fullscreen);
|
||||
state->emu_window = std::make_unique<EmuWindow_SDL3_VK>(&input_subsystem, state->system, lp.fullscreen);
|
||||
break;
|
||||
case Settings::RendererBackend::Null:
|
||||
state->emu_window = std::make_unique<EmuWindow_SDL3_Null>(&input_subsystem, state->system, fullscreen);
|
||||
state->emu_window = std::make_unique<EmuWindow_SDL3_Null>(&input_subsystem, state->system, lp.fullscreen);
|
||||
break;
|
||||
default:
|
||||
LOG_CRITICAL(Frontend, "Invalid renderer backend");
|
||||
@@ -413,12 +239,12 @@ extern "C" SDL_AppResult SDL_AppInit(void **appstate, int argc, char **argv) {
|
||||
Service::AM::FrontendAppletParameters load_parameters{
|
||||
.applet_id = Service::AM::AppletId::Application,
|
||||
};
|
||||
const Core::SystemResultStatus load_result = state->system.Load(*state->emu_window, filepath, load_parameters);
|
||||
const Core::SystemResultStatus load_result = state->system.Load(*state->emu_window, lp.filepath, load_parameters);
|
||||
switch (load_result) {
|
||||
case Core::SystemResultStatus::Success:
|
||||
break; // Expected case
|
||||
case Core::SystemResultStatus::ErrorGetLoader:
|
||||
LOG_CRITICAL(Frontend, "Failed to obtain loader for {}!", filepath);
|
||||
LOG_CRITICAL(Frontend, "Failed to obtain loader for {}!", lp.filepath);
|
||||
return SDL_APP_FAILURE;
|
||||
case Core::SystemResultStatus::ErrorLoader:
|
||||
LOG_CRITICAL(Frontend, "Failed to load ROM!");
|
||||
@@ -440,14 +266,14 @@ extern "C" SDL_AppResult SDL_AppInit(void **appstate, int argc, char **argv) {
|
||||
return SDL_APP_FAILURE;
|
||||
}
|
||||
|
||||
if (use_multiplayer) {
|
||||
if (lp.use_multiplayer) {
|
||||
if (auto member = Network::GetRoomMember().lock()) {
|
||||
member->BindOnChatMessageReceived(OnMessageReceived);
|
||||
member->BindOnStatusMessageReceived(OnStatusMessageReceived);
|
||||
member->BindOnStateChanged(OnStateChanged);
|
||||
member->BindOnError(OnNetworkError);
|
||||
LOG_DEBUG(Network, "Start connection to {}:{} with nickname {}", address, port, nickname);
|
||||
member->Join(nickname, address.c_str(), port, 0, Network::NoPreferredIP, password);
|
||||
LOG_DEBUG(Network, "Start connection to {}:{} with nickname {}", lp.address, lp.port, lp.nickname);
|
||||
member->Join(lp.nickname, lp.address.c_str(), lp.port, 0, Network::NoPreferredIP, lp.password);
|
||||
} else {
|
||||
LOG_ERROR(Network, "Could not access RoomMember");
|
||||
return SDL_APP_FAILURE;
|
||||
|
||||
Reference in New Issue
Block a user