打造专属 Switch 模拟游戏机

文章目录

2种方案

Switch版RetroArch

RetroArch 是一款高度可定制化的跨平台全能模拟器,由 Libretro 团队开发。它不仅模拟单一游戏平台,而是通过不同的"核心"(cores) 支持多种游戏机和计算机系统,允许用户在单一应用中玩遍NES、SNES、Game Boy Advance、Sega Genesis乃至PlayStation等众多平台的经典游戏。RetroArch 还提供了高级功能,比如实时重播、网络对战、各种视频滤镜和增强功能,以及高度可配置的控制设置。

官网:https://www.retroarch.com/

刷机安装方法详见:Switch双系统:2024.6,自己动手丰衣足食版

Lakka系统

Lakka是一个专门为复古游戏爱好者设计的轻量级Linux发行版,它能够将各种低配置的硬件平台,特别是老式计算机,改造成功能全面的复古游戏主机。Lakka基于OpenELEC项目,并内置了RetroArch作为其核心组件,RetroArch是一个强大的前端界面,支持多种游戏模拟器核心(通过Libretro接口),这意味着用户可以在一个统一且用户友好的界面下玩到众多不同平台的经典游戏。

官网:https://lakka.tv/doc/

刷机安装方法详见:Switch刷机:安装Android系统和Linux系统

整体性能对比:Lakka更优

  • Lakka针对模拟游戏进行了系统级的优化,并预设了许多配置,有助于提升兼容性和性能。
  • Lakka在新版本中对Switch端口进行了重写,提升了性能。此外,Lakka还支持动态重新编译和图形堆栈更新,这些改进也有助于提升性能。
  • Lakka系统的一个显著优势在于它对Vulkan图形驱动的支持,而Switch版RetroArch只支持GL和Switch原生视频驱动。Vulkan作为一种现代、低开销的图形API,相比OpenGL(GL),在大多数情况下能够提供更好的性能和图形处理效率。
  • Switch版RetroArch可以使用最新版本,在模拟器核心上最全最新。而lakka因为适配原因,系统自带的RetroArch一般会落后几个版本,并且模拟器核心有缺失情况(缺失的是低性能已被兼容的核心,直接使用升级版本即可,无影响)。
  • 画质方面,两者都能支持到Switch屏幕的原生分辨率。

核心是否兼容:并不兼容

RetroArch 在不同平台上会有不同的核心格式要求,这是由操作系统和编译环境决定的。

在 Nintendo Switch 的大气层(Atmosphere)环境中, RetroArch 使用的是专为 Switch 设计的格式,即 .nro 格式,它是 Switch 定制固件(如大气层)中用于本机应用程序和插件的文件格式。

而在 Lakka 系统中,因为 Lakka 是基于 Linux 的操作系统,所以它使用的是与 Linux 兼容的核心格式,即 .so(共享对象)文件,这是Linux系统上用于动态链接库的标准格式。

整合2种方案:共享游戏ROM和配置、资源等文件夹

考虑到整合的游戏资源一般都是覆盖到Switch版的Retroarch目录,故推荐将Lakka的配置、资源等文件夹设置为共享Switch版的Retroarch目录。反之,如果将Switch版的Retroarch的文件夹设置为共享Lakka的目录也是类似操作方法。

  1. 在Lakka系统的主菜单中打开"设置",选择"文件夹"选项。
  2. 将所有/storage开头的文件夹都改为/flash/retroarch下的同名目录。
  3. playlists目录不要更改,因为Lakka和Switch版Retroarch的根目录路径并不相同。
  4. 更改后在菜单选择"重启程序"后生效。
  5. 注意:所有/tmp开头的文件夹都不要更改设置,这些是Lakka镜像自带目录,更改后可能造成系统不兼容问题。
临时修改Samba共享整个Lakka系统根目录

Lakka默认开启Samba,可以通过电脑在局域网进行访问和管理文件,但只能访问/lakka/storage目录下的文件。

SSH方式登录Lakka终端,在/storage目录下创建 changeSMBToRoot.sh 脚本,并将下面的代码复制到脚本中,添加可执行权限(chmod +x ./changeSMBToRoot.sh)后,直接执行 ./changeSMBToRoot.sh ,即可启动一个名为 Root 的系统根目录共享分区和一个名为 Flash 的SD卡根目录共享分区。在下次系统重新启动后该共享分区失效,需要再次执行脚本可以重新开启。

在MacOS下通过Finder的菜单"前往->连接服务器"中输入 smb://lakka/Root ,或者Windows下通过文件资源管理器地址栏中输入 \\lakka\Root 来访问整个系统根目录(只读)。或输入 smb://lakka/Flash\\lakka\Flash 来访问整个SD卡(可写)。

sh 复制代码
#!/bin/bash

# 强制复制默认Samba配置文件到用户家目录,覆盖已有文件
cp -f /etc/samba/smb.conf ~/

# 使用echo命令结合Here Document来保持格式正确性,在配置文件末尾添加新的[Root]小节
cat <<EOF >> ~/smb.conf

[Root]
  path = /
  available = yes
  browseable = yes
  public = yes
  writable = yes

[Flash]
  path = /flash
  available = yes
  browseable = yes
  public = yes
  writable = yes
  
EOF

# 使用systemctl停止smbd服务
systemctl stop smbd

# 使用新配置文件启动smbd服务
smbd -D -s ~/smb.conf

# 提示操作完成
echo "SMB service has been restarted with the new configuration."

存储空间优化

  1. 如果只游玩少数几种模拟游戏机类型,可以将cores目录下的无关的模拟核心进行删除,例如只保留FC模拟器的整体占用不超过200M(含游戏和缩略图)。
  2. 清理不需要的游戏的缩略图等资源文件。
  3. 其他(不太占容量):
    • 不需要的模拟核心的关联配置等文件。
    • 同一个游戏一般会有多个平台版本或移植版本,只保留一个偏好的平台版本即可。

添加模拟器核心

Switch版RetroArch

RetroArch 官网下载Switch版本最新版后,解压覆盖到SD卡根目录即可完成程序版本和核心的整体更新。

如果只需要添加部分核心,则下载对应的RetroArch版本后,将其解压后的cores子目录中的所需核心拷贝到SD卡对应目录中,查找子目录,例如config文件夹等,寻找该核心配套的配置、资源等文件也拷贝到SD卡对应目录。

Lakka

配置连接WiFi后,选择在线更新,可以更新Lakka系统版本,其自带的RetroArch程序版本和核心都会被更新到最新自带版本。

Lakka系统中,不能单独更新 RetroArch 版本。但可以添加、更新核心,只需要将RetroArch的Linux版本(最好和自带RetroArch版本一致)的对应核心文件拷贝到 /lakka/storage/cores 目录下,即可添加新核心或更新同名核心。

注意:Lakka系统中缺失的是低性能已被兼容的核心,直接使用升级版本即可,无影响。比如,Arcade (FB Alpha 2012 CPS-1)直接使用Arcade (FinalBurn Neo)即可。

添加游戏

Lakka系统可以在线更新游戏,但是因为版权原因,只能下载到极少数自制游戏,例如贪吃蛇等。

自行寻找到ROM资源后,可以按照如下方法进行添加游戏:

  1. 拷贝 ROM 文件等

    • 游戏ROM通常是按照机型来分类在不同文件夹的,也可以按照喜好自行组织和命名文件夹。该文件夹命名很关键,之后缩略图资源等要和该文件夹命名保持一致。
    • 将游戏 ROM 文件夹拷贝到SD卡的根目录的ROM文件夹中。
    • 将游戏附带的各种资源的目录拷贝到/Retroarch目录下进行覆盖。
    • 如果没有该游戏类型的模拟器核心,需要先参照上文进行对应核心的安装。
  2. 尝试运行游戏

    • 游戏附带资源一般会附带palylist目录,拷贝安装后,就可以看到游戏列表。
    • 选择游戏列表中的游戏,点击运行,如果成功则结束游戏安装。
    • 如果没有附带游戏列表,或者游戏列表中的游戏点击后没反应、报错,则继续按照如下步骤,重新生成游戏列表。
  3. 在主菜单选择"导入"、"手动扫描"

    • 在Retroarch或Lakka的"主菜单"中,选择"导入"菜单,选择"手动扫描"选项。
    • 不推荐选择"扫描文件夹"选项。该选项会根据模拟器核心的数据库根据"游戏ROM名"进行匹配筛选,因为一般游戏ROM文件命名并不标准,从而会导致很多游戏无法导入。
  4. 指定扫描位置等

    • 选择要扫描的文件夹为游戏 ROM 文件夹。
    • 默认核心根据游戏ROM机型进行选择。如果不选择,则之后运行游戏时还需要手动再指定一次核心。
    • "递归扫描"默认保持开启。
    • "扫描压缩包内部"根据需要开启,比如NES核心不支持zip格式,对于以zip格式提供的NES ROM需要打开该选项,否则扫描不到游戏。
    • "覆盖现有列表"一般选择开启,这样可以覆盖掉原来的有问题的游戏列表。
    • 其他选项一般只需要保持默认值即可。
  5. 开始扫描

    • 确认选择后,RetroArch 将开始扫描指定的文件夹,查找所有支持的游戏 ROM,并将其添加到新建的游戏列表中。
    • 扫描完成后,就可以在 RetroArch 的游戏列表中看到新添加的游戏。
  6. 为另一个系统也添加游戏列表

    • Switch版Retroarch 和 Lakka 的根目录路径不一样,在一个系统操作完毕后需要再在另一个同样进行一遍游戏列表的添加操作。
    • 当添加的游戏列表比较多时,也可以使用复制游戏列表的方式:
      • 生成的游戏列表是playlists目录下同名的lpl文件,将该文件复制一份到另一个系统中,并批量替换其文件里的根目录路径为正确路径即可。
        • 在Lakka的SSH终端下使用命令将Retroarch配置复制给Lakka并替换根目录路径:cp -r /flash/retroarch/playlists/*.lpl /storage/playlists/ && sed -i -e 's@"path": "/ROM/@"path": "/flash/ROM/@' /storage/playlists/*.lpl
        • 在Lakka的SSH终端下使用命令将Lakka配置复制给Retroarch并替换根目录路径:cp -r /storage/playlists/*.lpl /flash/retroarch/playlists/ && sed -i -e 's@/flash/ROM/@/ROM/@' /flash/retroarch/playlists/*.lpl
      • 有些低性能核心在Lakka系统中已经不存在,这些还需要将lpl文件的default_core_path、default_core_name字段更改为升级核心即可。
      • 主菜单选择"重启程序"之后生效。
  7. 修正游戏缩略图

    • 在Lakka系统中,可以在线更新缩略图资源,更新的是游戏封面、标题画面、游戏截图3图齐全。但是因为是根据游戏文件名进行数据库匹配,所以,大部分游戏都无法通过该方式匹配到。
    • 游戏资源一般会附带缩略图,即/retroarch/thumbnails下的文件夹,该图是根据文件名进行匹配的,如果没有正常显示则进行如下修正:文件夹名和游戏列表名保持一致,图片名和游戏名保持一致。
    • 对于游戏有子目录,且子目录内zip文件名和子目录名不一致,并且缩略图使用子目录名来命名的情况,使用下面的脚本进行修正。
    • 如果游戏文件名是缩写,而缩略图为正式游戏名等情况,无法统一处理,最好还是使用原游戏的游戏列表文件进行修改后使用,否则,只能手动一一重新命名label或缩略图,使2者一致。
    • 游戏资源没有附带缩略图资源,又想自己补全缩略图的,可以去 Lakka官方库 根据游戏机型、游戏名称来下载对应的缩略图,并按照上面所述来进行修正。

游戏列表文件的label命名修正脚本,对于游戏有子目录,且子目录内zip文件名和子目录名不一致,并且缩略图使用子目录名来命名的情况进行修正,将label名改为子目录名。

Lakka的SSH(以及Mac、Linux)适用,在playlists目录下新建fixLabelName.sh文件,将以下脚本内容粘贴到文件内,添加可执行权限(chmod +x ./fixLabelName.sh),执行示例:./fixLabelName.sh CPS*.lpl MAME.lpl

shell 复制代码
#!/bin/sh

# 函数处理单个文件
process_file() {
    local file="$1"
    echo "Now is: ${file}"

    awk '
        BEGIN {inPath=0; inPrint=1}
        /"path": "/ {
            inPath=1;
            inPrint=0;
            print;
            gsub(/^[^{]*"path": "/, "", $0);
            gsub(/".*/, "");
            pathParts=split($0, parts, "/");
            newLabel=parts[pathParts-1];
        }
        inPath && /"label": "/ {
            gsub(/"label":.*/, "\"label\": \"", $0);
            print $0 newLabel "\",";
            inPath=0;
            inPrint=0;
        }
        inPrint {print}
        !inPrint {inPrint=1}
    ' "$file" > "${file}.tmp" && mv "${file}.tmp" "$file"
    echo "Processed $file"
}

# 主程序开始
if [ "$#" -eq 0 ]; then
    echo "Usage: $0 file1 file2 ..."
    echo "Usage: $0 *.lpl"
    exit 1
fi

# 遍历所有提供的文件模式,手动匹配并处理实际文件
for pattern in "$@"; do
    # 使用ls命令配合通配符列出文件,注意这种方式在特殊字符处理上可能有限制
    for file in $(ls -d "$pattern" 2>/dev/null); do
        if [ -f "$file" ]; then
            process_file "$file"
        fi
    done
done

echo "All specified patterns have been processed."
添加特殊类型模拟游戏示例(尤其是Lakka中需要特别处理)
Dreamcast、NAOMI

需要BIOS配置,将该游戏附带的system文件夹覆盖到SD卡的/retroarch//lakka/storage/目录下。

如果已经在Switch版Retroarch中安装过,则可以在Lakka的SSH终端下执行如下命令进行复制:

shell 复制代码
# 拷贝Dreamcast的BIOS文件
cp -rf /flash/retroarch/system/dc* /storage/system/
# 拷贝NAOMI的BIOS文件
cp -rf /flash/retroarch/system/naomi* /storage/system/

BIOS文件生效的条件是:位置、名称、MD5码均正确。同一游戏机的不同模拟核心也可能有不同的要求,具体的BIOS配置要求列表可以参见:Lakka的BIOS简要说明Retroarch的BIOS详尽说明

各平台最新版本和兼容版本的BIOS合集可以从此处下载(2024.06整理),注意:游戏资源附带BIOS虽为历史版本,但一般均可用,游戏可正常运行就无需下载 最新版本。仅当出现兼容问题时,比如PS1遇到卡退等情况可以考虑尝试以下最新和兼容版本BIOS,依次尝试如PSXONPSP660.bin等:
https://download.csdn.net/download/zhiyuan411/89432186

PS

PS游戏所使用的CD映像,对应的格式是BIN+CUE。还需要检查cue文件的内容是否与bin名称匹配。

如果缺少CUE,可以这样创建它:

sql 复制代码
FILE "NameOfTheBin.bin" BINARY
  TRACK 01 MODE2/2352
    INDEX 01 00:00:00

FAQ

什么是核心?

RetroArch采用了高度模块化的架构,它如同一个强大的框架,在其中模拟器和游戏如同即插即用的"插件"般运行。这些"插件"被称作"核心",为了在RetroArch中体验它们的功能,安装这些核心是第一步。值得注意的是,这些核心不仅限于RetroArch,还能够融入任何支持Libretro应用程序编程接口(API)的平台,展现出非凡的通用性和灵活性。Libretro与RetroArch这对"孪生兄弟",皆出自同一开发者之手,而RetroArch正是Libretro技术实力和广泛应用潜力的集中展示窗口。

同一机型哪个核心是最好的(兼容性、效果等)?

没有最好的核心,每个都有不同的特性(准确性,速度......)。

在选择核心时,名称后没有年份的核心是最新的,而具有年份的核心(例如Snes9x2010)是核心开发早期的快照,当时它更快但不太准确。因此,作为一般规则,应该从最新版本开始,如果你的设备无法保持全速,请尝试下一个最旧的核心并重复,直到你可以保持稳定的全速帧速率。

我可以在没有BIOS文件的情况下运行内容吗?

尽管某些核心在运作时可能并不强制要求BIOS文件,但配备合适的BIOS文件无疑能增强核心性能的稳定性和兼容性。例如,使用PCSX ReARMed核心时,加入BIOS文件可以显著提升游戏的兼容性。实际上,有一部分核心是明确需要BIOS文件来确保正常运行的。

当我尝试加载核心时,RetroArch仍然显示No Core

这一问题可能源于几个原因:你可能需要安装MSVC运行时环境;或者需要将RetroArch升级到最新版本;亦或是核心缺少必要的外部依赖组件。你可以在日志中核查这一情况,若发现类似"[错误] 错误:libpng12.dll:无法加载共享库文件:找不到指定文件或目录"的提示,这意味着存在依赖缺失。

无法加载游戏或启动时核心崩溃?

在采取任何措施之前,请先通过在线更新工具来升级你的核心和相关信息。

潜在的几个可能原因是:你可能缺少像BIOS这样的关键文件,或是文件命名有误(你可以通过加载核心来检查,然后在主菜单中选择->信息->核心详情进行核对);当前核心可能不支持你的游戏;你的ROM可能是错误的备份版本(最常见的问题是CUE文件不准确;请确保CUE文件中提到的所有文件都存在且命名无误);你的BIOS可能是错误的备份版本,或者不符合核心的要求;又或者是核心不兼容你当前使用的视频驱动(例如,某些核心需要OpenGL,并且不能与D3D11等其他驱动并用)。此外,基于光盘的游戏(bin+cue格式)不能直接从压缩包(如*.zip、*.7z等)中运行,因此请确保在尝试启动前将它们解压缩。

PPSSPP在我尝试加载内容时崩溃?

首先,采用正确的文件扩展名(如.elf、.iso、.cso、.prx、.pbp)来匹配系统支持。其次,依据个人硬件配置与游戏需求,精心调整核心设置,涵盖CPU核心、锁定的CPU速度、渲染模式及内部分辨率等,以达到最佳性能。再次,验证游戏ROM的完整性,确保无损坏或遗漏,选用如No-Intro系列的纯净ROM以避免常见问题。同时,定期利用在线更新工具升级核心与相关信息,维持兼容性和稳定性。此外,针对特定核心对视频驱动的特殊要求,如OpenGL,正确安装以避免兼容性问题。最后,对于基于光盘的游戏(bin+cue组合),切记从压缩包(.zip、.7z等形式)解压后再运行,直接从压缩状态启动将无法成功。

如果它仍然崩溃,请禁用倒带(rewind)设置。

为什么有些核心或游戏运行缓慢?

问题的根源可能多元化。首要步骤是确保你的操作系统电源设置调整为"最佳性能"模式,以避免节能限制性能。同时,也要考虑到某些游戏或核心对你的硬件配置要求较高,可能超出了其处理能力。

在挑选核心时,请留意,未标注年份的核心代表了当前最新的开发版本,而那些带有特定年份标记的核心(如Snes9x2010)实际上是早期开发阶段的快照,彼时它们运行速度较快,但精确度相对较低。基于此,一般推荐从最新版本的核心开始尝试。如果发现设备无法维持全速运行,可以逐步回溯至次新版本的核心,依此类推,直至找到既能保证游戏流畅运行,又能维持稳定全速帧率的核心版本。

为什么在线更新程序的核心下载器中缺少一些核心?

存在多个可能的原因包括:并非所有核心都能适配所有平台;核心名称可能存在变动(建议查阅libretro博客或发布的更新日志以获取相关公告);你的核心信息文件可能已陈旧,影响了RetroArch核心下载器的正确排序功能;核心也可能因故被弃用,比如被功能相近或更优的新核心所替代。

我如何应用着色器?

RetroArch内置了丰富的着色器预可供选择。要激活这些预设,首先启动游戏。接着,调出菜单,在便捷的快速访问菜单中,你会找到着色器的相关选项。简单浏览至"加载着色器预设"部分,并挑选一个心仪的预设文件进行应用即可。

如何为我的手柄创建新的自动配置文件?

如果更新配置文件后,RetroArch还是无法识别你的手柄,你可以尝试从菜单中生成配置文件。第一步是继续手动映射你的手柄。为了这样做,请拔掉所有其他控制器,并使用设置->输入->用户1绑定->用户1绑定全部。通过测试菜单和某些游戏中的每个按钮,确保你的映射无误。最后,使用设置->输入->用户1绑定->用户1保存自动配置,这样控制器的配置文件就会保存到你的磁盘上。这时候,你可以通过设置->输入->用户1绑定->用户1恢复默认全部绑定来重置手动设置,以免它们覆盖了你刚生成的配置文件。拔下你的控制器,然后再插回去。检查它是否能自动配置好了。

如何在菜单中添加背景音乐?

要完成背景音乐激活过程,请首先导航至设置菜单,继而进入音频设置。在那儿,找到并开启菜单声音选项下的混音器功能。随后,确保将位于界面底部的"启用BGM声音"选项切换至开启状态。

如何删除空播放列表?

前往RetroArch安装目录,进入播放列表文件夹,定位到以欲删除播放列表命名的.lpl文件,并将其删除。

什么是Netplay?

Netplay赋予了你在线联机对战的奇妙体验,利用点对点(P2P)网络技术有效降低延迟,确保游戏过程中的极致流畅与乐趣。要想轻松踏上Netplay之旅,通过RetroArch菜单内置的游戏大厅将是你的不二之选。为了确保一切顺利进行,你需要一个稳定的互联网连接和一台支持UPnP端口转发功能的路由器,以便无缝建立游戏会话。

与伙伴同乐前,确保双方持有完全相同的ROM文件。将这些ROM导入播放列表并通过扫描确认它们的存在至关重要。推荐使用No-Intro系列的ROM,因其以完整性与准确性著称,能最大程度保障游戏体验的一致性与原汁原味。

什么是No-Intro系列的ROM?

No-Intro系列的ROM是指由No-Intro项目维护的一套精心整理和验证过的游戏ROM集合。No-Intro项目是一个致力于游戏ROM完整性和原始性的国际社群,他们专注于创建各类游戏机和计算机系统的ROM集合,其中每个ROM都经过仔细检查,确保没有坏块、无病毒、并且是零售版(非修改版),力求达到"原盘镜像"的标准。这意味着No-Intro ROMs通常代表了游戏的最纯净形式,不含任何修改、破解或粉丝翻译内容,同时也剔除了Demo、Beta版本或其它非正式发行的内容,非常适合追求原版游戏体验的玩家和收藏者。

如何在Nintendo Switch中使用拆分Joy-Con?

首先,请在Switch的主界面中配置Joy-Cons,使其作为两个独立的玩家控制器。随后,在RetroArch应用里,导航至"设置">"输入",并把"分离式游戏手柄模式"设定为"2"。需要注意的是,这样做后,在Homebrew菜单中可能会遇到一些导航不便的情况,这取决于你所使用的Homebrew菜单的具体版本。

相关推荐
梦想平凡1 个月前
新海王2彩虹电玩纯源码简介
游戏·游戏程序·源代码管理·游戏机·1024程序员节
禾川兴科技1 个月前
新款任天堂switch游戏机方案,支持4K60HZ投屏方案,显示器,手柄方案
游戏机·新款任天堂·4k60hz
DisonTangor2 个月前
雅达利“美洲虎“游戏机在iPhone模拟应用程序中重生
ios·iphone·游戏机
梦想平凡2 个月前
源码搭建:从零开始实现程序的步骤解析
大数据·游戏·智能手机·源代码管理·游戏机
Name_NaN_None3 个月前
英特尔 Arrow Lake Halo 再现,猛堆料对标Strix Halo/苹果M系列
人工智能·科技·计算机外设·电脑·游戏机
梦想平凡3 个月前
浅谈:搭建一个属于自己的网站+源码+售后过程
游戏·游戏程序·生活·源代码管理·游戏机
小菜元3 个月前
Java基础学习篇:switch条件语句进阶(最详细版)
java·学习·switch·条件语句·深入学习
梦想平凡3 个月前
如何开发一款流畅、稳定、有趣味性的棋类游戏?
大数据·游戏·游戏程序·源代码管理·游戏机
Name_NaN_None3 个月前
英特尔新独显曝光,或于今年底发布
人工智能·科技·计算机外设·电脑·游戏机
Name_NaN_None3 个月前
手机CPU性能天梯图(2024年8月),含安兔兔/GB6/3DMark跑分
人工智能·科技·智能手机·计算机外设·电脑·游戏机