📖 本文由 Batocera 官方 Wiki 翻译整理,内容可能随版本更新而变化。


自定义 ES 系统配置

EmulationStation(简称 ES)主要依靠一个名为 es_systems.cfg 的文件来决定显示哪些游戏系统。在其他系统中,这通常是唯一生效的文件,但在 Batocera 中,你可以使用更灵活的方式。

你可以把 /userdata/system/configs/EmulationStation/es_systems_<自定义名称>.cfg 作为一个覆盖层(Overlay),叠加在原始的 /usr/share/EmulationStation/es_systems.cfg 文件之上。

生活化类比: 原始配置文件就像是一张打印好的基础菜单,而你的自定义文件就像是一张“便利贴”。你不需要重新打印整张菜单,只需要把改动写在便利贴上盖在原位即可。


【注意】关于完全重写配置文件的风险

如果你愿意,也可以通过在 /userdata/system/configs/EmulationStation/es_systems.cfg 创建完整文件来彻底取代系统默认配置。

但请务必小心!这样做意味着在 Batocera 升级内部组件(尤其是 Python 语言环境)时,维护这个文件的重任就全落在你一个人身上了。
* 建议: 除非你打算永远不再升级 Batocera 系统,否则不推荐这种做法。

为什么会有风险?
每当 Batocera 升级时,其内置的 Python 解释器(Python interpreter) 版本可能会发生变化。如果你在自定义文件中手动指定了启动命令((例如指向了旧版的 /usr/lib/python2.7/...),系统升级后该命令就会失效。
* 【提示】: 通常建议避免使用自定义启动命令,直接沿用系统默认设置最稳妥。


进阶:使用自定义覆盖文件修改现有系统

你可以创建一个名为 es_systems_<自定义名称>.cfg 的文件(把 <自定义名称> 换成你喜欢的名字)。这个文件需要遵循原始配置文件的格式规范,但不需要包含原文件的全部内容,只需写下你想修改的部分。

第一步:创建配置文件
例如,我们要为 3DO 系统创建一个名为 es_systems_3do.cfg 的文件。

第二步:编写代码内容
参考以下 XML 格式:

<?xml version="1.0"?>
<systemList>
  <system>
    ```

### 深入解析系统配置文件参数

在自定义系统的配置文件时,你会看到一系列 XML 标签。这些标签就像是给系统下达的“身份说明书”,告诉 EmulationStation 该如何识别和运行你的游戏。

以下是核心参数的详细拆解:

* **全称(`<fullname>`)**:
    `3DO Interactive Multiplayer`
    这是系统的“大名”,会直接显示在菜单和界面上。
* **短名称(`<name>`)**:
    `3do`
    这是系统的“小名”,主要用于程序内部识别以及对应存放游戏镜像的文件夹路径。
* **厂商与发布日期(`<manufacturer>` 与 `<release>`)**:
    这些属于**元数据(Metadata)**。
    **生活化类比**:就像是商品的品牌和生产日期。虽然不填也能用,但填好后能让你的游戏库显得更加专业,方便日后分类整理。
* **硬件类型(`<hardware>`)**:
    指明是家用机(Console)还是掌机。目前 Batocera 并没有强制要求此项,但为了以后升级兼容,建议写上。
* **游戏存放路径(`<path>`)**:
    ` /userdata/roms/3do`
    **【注意】** 这是极其关键的一项!它告诉系统去哪里扫描你的游戏。请确保该路径始终以 `/userdata/roms/` 开头。
* **文件后缀名(`<extension>`)**:
    `.iso .chd .cue`
    系统在扫描时会过滤掉其他文件,只把这些后缀名的文件列入游戏清单。
    **【提示】** 填写时必须包含开头的点号(.),并注意区分大小写,多个格式之间用空格隔开。
* **启动命令(`<command>`)**:
    ```xml
    python /usr/lib/python3.9/site-packages/configgen/emulatorlauncher.py %CONTROLLERSCONFIG% -system %SYSTEM% -rom %ROM%
    ```
    这是点击运行游戏时执行的指令。在 Batocera 中,它主要负责调用**配置生成器(Config generators)**来启动对应的模拟器。
* **抓取平台 ID(`<platform>`)**:
    当你使用**刮削器(Scraper)**在线获取游戏封面和简介时,系统会根据这个 ID 去数据库里匹配。
* **主题风格(`<theme>`)**:
    决定系统在菜单里呈现的样子。通常与“短名称”保持一致,系统会自动从当前的主题包里加载对应的图片和布局。

---

**第一步**:确认你的游戏文件夹路径与 `<path>` 标签一致。
**第二步**:检查你的游戏文件后缀是否包含在 `<extension>` 列表中。
**第三步**:在 `<emulators>` 标签下,我们还可以进一步配置具体的模拟器核心,具体操作如下:

### 模拟器核心配置与优先级逻辑

在配置文件的末尾,你会看到关于模拟器的具体定义:

```xml
<emulator name="libretro">
  <cores>
    <core default="true">opera</core>
  </cores>
</emulator>
</emulators>
</system>
</systemList>

这段配置的作用是:如果你按照这种方式修改了 3DO 系统,那么只有 3DO 会受到影响。至于其他的系统,依然会乖乖参考系统自带的全局配置文件(/usr/share/EmulationStation/es_systems.cfg)。

【提示】优先级规则:
如果两个文件里出现了相同的系统名称(,Batocera 会表现得很“听你的话”——它会优先采用你自定义的 es_systems_<自定义名称>.cfg 文件中的内容。


灵活的“按需修改”机制

Batocera 非常聪明,它具备增量更新的能力,只会应用你修改过的部分。

生活化类比: 这就像你去餐厅改菜单,如果你只是不喜欢某道菜的配料,你不需要重写整张菜单,只需要递个纸条说“宫保鸡丁不要花生”即可,其他的菜品依然照旧。

比如,你只想修改 Pico-8 系统的游戏存放路径,你只需要在 /userdata/system/configs/EmulationStation/es_systems_pico8.cfg 中写下这几行:

<?xml version="1.0" encoding="UTF-8"?>
<systemList>
  <system>
    <name>pico8</name>
    <path>/userdata/roms/pico8real</path>
  </system>
</systemList>

操作效果:
* 第一步: 系统会识别出你想修改 pico8 这个系统。
* 第二步: 它会将游戏搜索路径改为你指定的 /userdata/roms/pico8real/
* 第三步: 至于启动命令、图标等其他设置,它会自动从全局配置文件中“抄”过来。


创建一个全新的系统

除了修改现有系统,你还可以利用这个方法“无中生有”,创造一个原本不存在的系统分类。

第一步:确定需求
例如,你收集了很多世嘉 MD 的改版游戏,想专门弄一个叫“世嘉 MD 改版(megadrivehacks)”的分类,而不是把它们和正版游戏混在一起。

第二步:编写自定义文件
你可以参照上述格式,定义一个新的 <name><path>

第三步:保存并重启
保存后重启系统,你就会发现主界面多出了一个专属的系统入口。

如果你希望获得最高权限,完全接管所有的系统配置,依然可以使用前文提到的“完全覆盖”法,即直接把整个原始配置文件拷贝到 /userdata/system/configs/EmulationStation/ 目录下(不加自定义后缀名)进行深度定制。

实战演示:创建一个“世嘉 MD 改版”系统

如果你想把那些充满创意的世嘉 MD 改版游戏(ROMhacks)从普通游戏中独立出来,专门做一个分类,可以按照以下步骤操作:

第一步:创建配置文件
在你的设备中新建一个名为 /userdata/system/configs/EmulationStation/es_systems_megadrivehacks.cfg 的文件。

第二步:编写自定义内容
将以下代码填入该文件中,让系统识别这个新分类:

<?xml version="1.0"?>
<systemList>
  <system>
    <fullname>Megadrive hacks</fullname>
    <name>megadrive</name>
    <manufacturer>Sega</manufacturer>
    <release>1988</release>
    <hardware>console</hardware>
    <path>/userdata/roms/megadrivehacks</path>
    <extension>.bin .gen .md .sg .smd .zip .7z</extension>
    <command>python /usr/lib/python3.9/site-packages/configgen/emulatorlauncher.py %CONTROLLERSCONFIG% -system %SYSTEM% -rom %ROM%</command>
    <platform>megadrive</platform>
    <theme>megadrivehacks</theme>
    <emulators>
      <emulator name="libretro">
        <cores>
          <core>blastem</core>
          <core default="true">genesisplusgx</core>
          <core>genesisplusgx-wide</core>
          <core>picodrive</core>
        </cores>
      </emulator>
    </emulators>
  </system>
</systemList>

进阶技巧:自定义系统名称(<name>

在上面的例子中,我们虽然创建了新路径,但内部的“小名”(<name>)和“平台 ID”(<platform>)依然沿用了系统的默认设置。

生活化类比: 这就像是虽然你给孩子起了一个个性的“大名”,但为了让邻居(系统核心)能听懂,你还是用了大家习惯的“乳名”。

如果你坚持要使用一个完全独一无二的名称(比如把 <name> 改成 cps1),那么 Batocera 就不知道该用哪个模拟器来运行它了。此时,你需要额外手动指定默认模拟器:

第一步: 打开 batocera.conf 配置文件。
第二步: 添加如下代码(以 cps1 为例):

cps1.emulator=libretro
cps1.core=FBNeo

这样,当你启动这个新系统里的游戏时,Batocera 才知道该叫哪个模拟器“起床干活”。

默认模拟器设置与旧版本回顾

除了在配置文件中修改,这些默认模拟器的指向也可以在系统的默认设置文件 /usr/share/Batocera/configgen/configgen-defaults.yml/usr/share/Batocera/configgen/configgen-defaults-arch.yml 中找到。

如何让新旧系统共存?

如果你想在保留原有系统的基础上新增一个系统,必须使用一个唯一的名称(字段。

生活化类比: 这就像在同一个班级里,如果有两个人都叫“小明”,老师点名时就会产生混乱。
* 第一步: 给新系统起一个独一无二的“短名称(Shortname)”。
* 第二步: 如果你非要让两个系统使用相同的短名称,但又想让它们同时出现在界面上,那么你必须将这两个系统的配置信息全部写进同一个 .cfg 配置文件中。


关于默认核心的【注意】事项

【注意】:虽然你在 es_systems_megadrivehacks.cfg 文件中可以看到类似 <core default="true"> 的设置,但实际上 Batocera 在启动模拟器时并不参考这个标签。相反,它会去查找自己内部的 配置生成器(Configgen) 默认列表。

如果你打算创建一个全新的系统,并配备全新的模拟器或特殊参数,建议参考专门的开发者文档(Developer documentation)


了解旧版本 Batocera 的操作差异

为了让你了解系统进化的过程,我们可以看看在旧版本中是如何操作的:

过去(旧版本)的操作方式:

  • 原始阶段: > 以前,你必须直接修改 /usr/share/EmulationStation 目录下的 es_systems.cfg 原始文件,然后运行 batocera-save-overlay 命令。
    【注意】: 这种方法在系统更新时非常麻烦,因为所有的覆盖层(Overlays)都必须移除,这意味着每次更新后你都要重新操作一遍。

  • 过渡阶段: > 后来,Batocera 引入了将文件复制到 /userdata/system/configs/EmulationStation/es_system.cfg 并在此修改的功能。
    【提示】: 尽管这样不用担心文件丢失,但由于 Batocera 几乎在每个大版本更新中都会增加新系统或更改启动方式,你依然不得不手动对比新旧文件的差异,并重新合并你的修改内容,过程非常繁琐且容易导致系统出错。


总结: 现在的“覆盖层”机制已经极大简化了操作,只需修改你想改的部分即可。


原文: 自定义游戏系统界面 • 翻译: DIY8 Bot

© 版权声明
评论 抢沙发

请登录后发表评论

    暂无评论内容