Add Ryujinx emulator support and update dependencies

This commit is contained in:
2026-08-08 00:14:38 -05:00
parent 1222aae191
commit f8b759ec85
5 changed files with 97 additions and 7 deletions
+1
View File
@@ -36,6 +36,7 @@ OmniEmu is a cross-platform emulator manager, game launcher, and ROM library for
| Dolphin | GameCube, Wii | ✅ | ✅ | ✅ | | Dolphin | GameCube, Wii | ✅ | ✅ | ✅ |
| RPCS3 | PlayStation 3 | ✅ | — | ✅ | | RPCS3 | PlayStation 3 | ✅ | — | ✅ |
| Eden | Nintendo Switch | ✅ | ✅ | ✅ | | Eden | Nintendo Switch | ✅ | ✅ | ✅ |
| Ryujinx | Nintendo Switch | ✅ | ✅ | ✅ |
| PCSX2 | PlayStation 2 | ✅ | ✅ | ✅ | | PCSX2 | PlayStation 2 | ✅ | ✅ | ✅ |
| DuckStation | PlayStation 1 | ✅ | ✅ | ✅ | | DuckStation | PlayStation 1 | ✅ | ✅ | ✅ |
| Mednafen | PS1, PC Engine, Lynx, Neo Geo Pocket, WonderSwan | ✅ | ✅ | ✅ | | Mednafen | PS1, PC Engine, Lynx, Neo Geo Pocket, WonderSwan | ✅ | ✅ | ✅ |
+6 -6
View File
@@ -1,12 +1,12 @@
{ {
"name": "omniemu2", "name": "omniemu2",
"version": "0.3.1", "version": "0.3.3",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "omniemu2", "name": "omniemu2",
"version": "0.3.1", "version": "0.3.3",
"hasInstallScript": true, "hasInstallScript": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@@ -20,7 +20,7 @@
"@vitejs/plugin-react": "^4.4.0", "@vitejs/plugin-react": "^4.4.0",
"7zip-bin": "^5.2.0", "7zip-bin": "^5.2.0",
"concurrently": "^9.1.0", "concurrently": "^9.1.0",
"electron": "^43.1.0", "electron": "^43.2.0",
"electron-builder": "^25.1.0", "electron-builder": "^25.1.0",
"typescript": "^5.7.0", "typescript": "^5.7.0",
"vite": "^6.0.0" "vite": "^6.0.0"
@@ -3318,9 +3318,9 @@
} }
}, },
"node_modules/electron": { "node_modules/electron": {
"version": "43.1.0", "version": "43.3.0",
"resolved": "https://registry.npmjs.org/electron/-/electron-43.1.0.tgz", "resolved": "https://registry.npmjs.org/electron/-/electron-43.3.0.tgz",
"integrity": "sha512-DPfxpQLd4NL3BJ8DBxYAfmLUKKesF5Rx9dQx5FyczAP8bhOPScjHE48GArVeXu68LlAainuwkmQTQvdZwpIIAQ==", "integrity": "sha512-nLlvu0WFjftWsSaTkV2B/c4NDuJBspTyXu8vKSQ6vLvFt8uG3NgN49LLKcXddwX0GqVvAQDhciWp+4xOdTdhew==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
+26
View File
@@ -91,6 +91,26 @@ CPU:
"shader_cache": true, "shader_cache": true,
"audio_backend": "OpenAL", "audio_backend": "OpenAL",
"controller": "SDL" "controller": "SDL"
}`,
},
},
],
ryujinx: [
{
name: 'OmniEmu Recommended',
description: 'Best settings for Ryujinx Switch emulation',
files: {
'Config.json': `{
"graphics_backend": "Vulkan",
"resolution_scale": 2,
"docked_mode": true,
"max_anisotropy": 4,
"aspect_ratio": "16:9",
"enable_vsync": true,
"enable_ptc": true,
"enable_multi_thread_rendering": true,
"audio_backend": "SDL2",
"enable_discord_integration": false
}`, }`,
}, },
}, },
@@ -399,6 +419,11 @@ function getConfigDir(emulatorId: string, installPath: string): string {
darwin: join(require('os').homedir(), 'Library', 'Application Support', 'Eden'), darwin: join(require('os').homedir(), 'Library', 'Application Support', 'Eden'),
linux: join(require('os').homedir(), '.config', 'Eden'), linux: join(require('os').homedir(), '.config', 'Eden'),
}, },
ryujinx: {
win32: join(process.env.APPDATA || '', 'Ryujinx'),
darwin: join(require('os').homedir(), 'Library', 'Application Support', 'Ryujinx'),
linux: join(require('os').homedir(), '.config', 'Ryujinx'),
},
flycast: { flycast: {
win32: join(process.env.APPDATA || '', 'flycast'), win32: join(process.env.APPDATA || '', 'flycast'),
darwin: join(require('os').homedir(), 'Library', 'Application Support', 'flycast'), darwin: join(require('os').homedir(), 'Library', 'Application Support', 'flycast'),
@@ -551,6 +576,7 @@ const esdeEmulatorNames: Record<string, string> = {
melonds: 'MELONDS', melonds: 'MELONDS',
flycast: 'FLYCAST', flycast: 'FLYCAST',
eden: 'EDEN', eden: 'EDEN',
ryujinx: 'RYUJINX',
mednafen: 'MEDNAFEN', mednafen: 'MEDNAFEN',
}; };
+55
View File
@@ -128,6 +128,52 @@ export const knownEmulators: EmulatorConfig[] = [
linux: 'https://eden-emu.dev/', linux: 'https://eden-emu.dev/',
}, },
}, },
{
id: 'ryujinx',
name: 'Ryujinx',
description: 'Nintendo Switch emulator',
platforms: ['switch'],
defaultPath: {
win32: 'C:\\Program Files\\Ryujinx\\Ryujinx.exe',
darwin: '/Applications/Ryujinx.app/Contents/MacOS/Ryujinx',
linux: '/usr/bin/ryujinx',
},
downloads: {
win32: [
{
url: 'https://git.ryujinx.app/projects/Ryubing/releases/download/1.3.3/ryujinx-1.3.3-win_x64.zip',
format: 'zip',
executablePath: 'Ryujinx.exe',
arch: 'x64',
},
],
darwin: [
{
url: 'https://git.ryujinx.app/projects/Ryubing/releases/download/1.3.3/ryujinx-1.3.3-macos_universal.app.tar.gz',
format: 'tar.gz',
executablePath: 'Ryujinx.app/Contents/MacOS/Ryujinx',
},
],
linux: [
{
url: 'https://git.ryujinx.app/projects/Ryubing/releases/download/1.3.3/ryujinx-1.3.3-x64.AppImage',
format: 'appimage',
arch: 'x64',
},
{
url: 'https://git.ryujinx.app/projects/Ryubing/releases/download/1.3.3/ryujinx-1.3.3-arm64.AppImage',
format: 'appimage',
arch: 'arm64',
},
],
},
supported: true,
websiteUrl: {
win32: 'https://ryujinx.app/download',
darwin: 'https://ryujinx.app/download',
linux: 'https://ryujinx.app/download',
},
},
{ {
id: 'pcsx2', id: 'pcsx2',
name: 'PCSX2', name: 'PCSX2',
@@ -1031,6 +1077,13 @@ function alternativePaths(emulatorId: string): string[] {
join(omniEmuDir, 'PCSX2'), join(omniEmuDir, 'PCSX2'),
join(omniEmuDir, 'pcsx2.AppImage'), join(omniEmuDir, 'pcsx2.AppImage'),
], ],
ryujinx: [
join(omniEmuDir, 'Ryujinx.exe'),
join(omniEmuDir, 'ryujinx'),
join(omniEmuDir, 'Ryujinx'),
join(omniEmuDir, 'Ryujinx.AppImage'),
join(omniEmuDir, 'Ryujinx.app', 'Contents', 'MacOS', 'Ryujinx'),
],
mame: [ mame: [
join(omniEmuDir, 'mame64.exe'), join(omniEmuDir, 'mame64.exe'),
join(omniEmuDir, 'mame'), join(omniEmuDir, 'mame'),
@@ -1299,6 +1352,8 @@ function launchArgs(emulatorId: string, romPath: string): string[] {
return [romPath]; return [romPath];
case 'eden': case 'eden':
return [romPath]; return [romPath];
case 'ryujinx':
return [romPath];
case 'pcsx2': case 'pcsx2':
return [romPath]; return [romPath];
case 'mame': case 'mame':
+9 -1
View File
@@ -143,6 +143,13 @@ function emulatorSaveDirs(emuId: string): SaveDirConfig | null {
? join(home, 'Library', 'Application Support', 'Eden', 'sdmc', '0000000000000000') ? join(home, 'Library', 'Application Support', 'Eden', 'sdmc', '0000000000000000')
: join(home, '.local', 'share', 'eden', 'sdmc', '0000000000000000'), : join(home, '.local', 'share', 'eden', 'sdmc', '0000000000000000'),
}, },
ryujinx: {
saves: platform === 'win32'
? join(process.env.APPDATA || join(home, 'AppData', 'Roaming'), 'Ryujinx', 'bis', 'user', 'save')
: platform === 'darwin'
? join(home, 'Library', 'Application Support', 'Ryujinx', 'bis', 'user', 'save')
: join(home, '.config', 'Ryujinx', 'bis', 'user', 'save'),
},
pcsx2: { pcsx2: {
saves: platform === 'win32' saves: platform === 'win32'
? join(process.env.USERPROFILE || home, 'Documents', 'PCSX2', 'memcards') ? join(process.env.USERPROFILE || home, 'Documents', 'PCSX2', 'memcards')
@@ -321,7 +328,7 @@ export { emulatorSaveDirs };
export function guessSavePathFromLabel(label: string): string | null { export function guessSavePathFromLabel(label: string): string | null {
const lower = label.toLowerCase(); const lower = label.toLowerCase();
for (const emu of ['retroarch', 'dolphin', 'rpcs3', 'eden', 'pcsx2', 'duckstation', 'flycast', 'ppsspp']) { for (const emu of ['retroarch', 'dolphin', 'rpcs3', 'eden', 'ryujinx', 'pcsx2', 'duckstation', 'flycast', 'ppsspp']) {
if (lower.includes(emu)) return getSaveDir(emu); if (lower.includes(emu)) return getSaveDir(emu);
} }
return null; return null;
@@ -332,6 +339,7 @@ const EMU_SAVE_META: { id: string; name: string }[] = [
{ id: 'dolphin', name: 'Dolphin' }, { id: 'dolphin', name: 'Dolphin' },
{ id: 'rpcs3', name: 'RPCS3' }, { id: 'rpcs3', name: 'RPCS3' },
{ id: 'eden', name: 'Eden' }, { id: 'eden', name: 'Eden' },
{ id: 'ryujinx', name: 'Ryujinx' },
{ id: 'pcsx2', name: 'PCSX2' }, { id: 'pcsx2', name: 'PCSX2' },
{ id: 'duckstation', name: 'DuckStation' }, { id: 'duckstation', name: 'DuckStation' },
{ id: 'flycast', name: 'Flycast' }, { id: 'flycast', name: 'Flycast' },