在 Linux 上游玩弹幕游戏
当然我在说とうほうプロジェクト
近日开始严肃游玩东方 Project,尽管弹幕游戏过于苦手,但弹设、音乐、立绘及整体节奏均属上乘,算得上是相当放松的体验。
初次接触东方 Project 可能是八九年前,在高中同学(也是目前唯一认识的东方爱好者1)的帮助下简单体验了一下。这些年似乎也听了不少东方官作 OST 和同人作品,以至于一上手游戏便有莫名的熟悉感。把整数作都下回来与残存印象细细比对,但始终未能确定当初游玩的作品,问后知是东方妖々夢。久疏联络,念及往事,一时思绪万千。
回到正题。笔者当时在 CrossOver 162 上顺利运行 th07,未作任何干预;料想即便今日多出 hidpi 等问题,经过这些年的发展,应该是更为容易的。简单尝试后似乎事情并不是那么简单,抛开 PC86 时代的旧作,初次跑起 th06「东方红魔乡」也耗费了不少意想之外的时间。
首先是用到的辅助工具:
能够强制窗口化、自定分辨率并锁定帧率,对 Wine 中运行极为有用。东方 STG 的运行速度似乎对帧率敏感,需要严格保持在 60fps
特别地,在默认配置文件中添加如下参数:启用 AskWindowMode,启用 DisableChecksum 关闭 vpatch 后期版本对主程序文件的验证(部分键位自定方案是通过修改文件实现的)
补丁框架,主要用于在地化 毕竟游戏就那点剧情不看实在可惜
是 Touhou Community Reliant Automatic Patcher 的缩写,但总感觉命名意有所指
此外,可以使用如下工具修改默认键位:
通过修补主程序进行,目前观测到部分版本(如 th12 星莲船)上与 thcrap 不兼容。
thcrap 向导会校验程序完整性,因此需要在其生成启动器后再修改键位。
thcrap 插件,在显示模式弹窗或 custom.exe 界面中,左上角按钮开启设置。
实测 Wine 中需要关闭 DirectInput 工作,后续还是换到了以前的汉化版本。
得益于近年 Steam 与其定制的兼容层深度集成带来的开箱即用体验,笔者几乎完全忘记了 wineprefix 的用法,对于 Linux 桌面生态来说实属好事。
相关 wiki 及教程上都有自己的做法,但看下来多半过于复杂。这里仍然推荐类 CrossOver 方案 Bottles,笔者从 2.0 时代便一直追踪其开发进度,是相当便利的管理器。此外,使用 flatpak 安装也提供了重要的保护,考虑到 Wine 默认有到宿主文件系统的映射3,在沙盒中运行相当必要。
截至写作时,Bottles 默认的 Soda 9.0-1 版本是内置运行时中唯一工作良好的。笔者推荐4使用 proton-cachyos,下载解压到 Bottles 数据文件夹下 runners 目录即可。
在完成「新瓶子」创建后,需要
- 将 Proton 的 system32 & syswow64 下
libvkd3d*.dll拷贝到 prefix 的对应目录 - 在 Bottles 依赖设置中安装 allfonts 和 cjkfonts
- 在 Bottles 兼容设置中选择语言为日本语5,并增加环境变量
LANG=ja_JP.UTF-8和LC_ALL=ja_JP.UTF-8
Notes:
简而言之,对于未提及的设置项,尽量保持 Bottles 提供的默认值。
- 「同步原语」需要传统的 fsync 而非 ntsync,后者会导致 thcrap 向导响应缓慢
- 「独立沙盒」是再起一个 bwrap sandbox,不必要且会导致 Bottles 杀进程功能失效;
如一定启用,记得放行网络及音频权限 - 显示设置中支持调节 DPI 作用于 Win32 MFC/ATL 程序,但游戏可能有兼容性问题;
wined3d renderer 可以使用 Vulkan
行文时稍有纠结用词,印象中车万厨/东方众/车车人都是对群体的常见提法,但也有说部分称呼含贬义,于是替换为稍显冗长的中性词汇。 ↩︎
Deepin 15.x 预装了免费授权。虽然 CrossOver 是基于 Wine 开发的专有软件,但 CodeWeavers 对后者的发展有很大贡献。 ↩︎
Z:驱动器类似 symlink,移除它并不能提升安全性。 ↩︎CachyOS 实现的优化与其宣称的相比颇为原神,笔者向来对各种 tech journalist 及空有性能狂热实则人云亦云的「性能爱好者」之吹捧行径不屑一顾。但他们集成的 Proton 确实工作良好,先前游玩 Manosaba 时,是测试的一票 Wine/Proton fork 中唯一能够正确播出开场动画的。 ↩︎
可能需要为 flatpak 添加 extra-languages,使用 flatpak config 设置后执行更新。 ↩︎