在 GNU/Linux 下运行非想天则
本篇内容是关于如何在 GNU/Linux 使用 Wine 运行非想天则及相关程序的。
安装 Wine 并运行带 Mod 的非想天则(包括新则)
Wine 是类 Unix 系统上运行 Windows 程序的兼容层。
以 Debian、Fedora、Ubuntu 为例,你可以安装发行版维护的 Wine 包,也可以安装 WineHQ 提供的包(Debian、Fedora、Ubuntu),也可以使用 Lutris 提供的经过了优化的 Wine 包。
运行 winecfg,在函数库(Libraries)选项卡中添加 d3d9.dll 的配置,设为“原装先于内建”(Native then Builtin),之后在非想天则目录里运行 wine th123.exe 以启动游戏。
(在确认能够正常运行前请先在虚拟终端中运行,而非直接在文件管理器中点击运行,以便通过日志定位可能存在的问题。)
相关信息
若不使用 Mod,那么不需要进行上面这个设置。非想天则的 mod 是通过劫持 d3d9.dll 来加载的,因此需要配置 Wine 让它此时优先使用 mod 加载器的 d3d9.dll。亦可在环境变量 WINEDLLOVERRIDES=d3d9=n,b 下启动非想天则来做到这一点,反过来说当需要在同一路径下使用原版非想天则时,使用环境变量 WINEDLLOVERRIDES=d3d9=b,n 来运行即可。
此外,请务必启用 ChainCFix mod! 详见下文。
若使用中遇到问题可查询下面的文档,若下面文档也未涵盖或无法解决你的问题请向我们反馈。
已知问题(有解决方案)
游戏一般性问题
运行带 Mod 的非想天则时出现 0108:err:sync:RtlpWaitForCriticalSection section 7BC6C3C0 "dlls/ntdll/loader.c… 的报错(标准错误输出),游戏无法启动
完整报错为:
0108:err:sync:RtlpWaitForCriticalSection section 7BC6C3C0 "dlls/ntdll/loader.c: loader_section" wait timed out in thread 0108, blocked by 0024, retrying (60 sec)这是 Wine 的 bug,但在最新版中已经修复。若遇到这种情况,检查你的 Wine 版本是不是在 8.1~8.8 范围内。若是,请尝试更换 Wine 版本——换用稳定版或 WineQH 最新的测试版包。
运行则的终端被 0160:fixme:d3d:wined3d_swapchain_present Ignoring flags 0x1. 刷屏
在环境变量 WINEDEBUG=fixme-d3d 下运行非想天则可以关闭这个警告的输出。
打则时一些图像(比如机体、弹幕)变为白色矩形,终端被 01b8:err:d3d:resource_init Out of adapter memory. 刷屏
该问题尤其可能发生在进入了大厅 mod 的 VS NETWORK 页面后;此外也可能在打街机模式或者故事模式的过程中出现。
使用 dxvk,或将下面的注册表配置保存为 set-video-memory.reg 并运行 wine regedit set-video-memory.reg
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Wine\Direct3D]
"VideoMemorySize"="1024"蕾米莉亚 C 链不同步、C 链变成不正常的短链
具体表现为:
- 网络对战中使用若干次蕾米莉亚 C 链(不管是哪一方使用)后两方不同步
- 蕾米莉亚 C 链变为不正常的短链,攻击效果消失/改变
该问题源于非想天则的数组越界 bug,但在 Wine 中触发的概率远高于在 Windows 中触发的概率。请务必在游玩过程中启用 ChainCFix mod,该 mod 是对此问题的一个修复。非想天启启动器的最新 giuroll 更新包中包含了这个 mod,此外亦可在 https://gitee.com/sanhuizhuan/soku_giuroll_cn/releases 手动获取。
若需要打无 Mod 的非想天则,那么请尽可能使用 WINEDEBUG=trace+heap 环境变量来启动游戏。使用该环境变量的情况下,此问题触发概率几乎变为 0(暂无更多报告表明该环境变量可以彻底修复此问题)。
运行非想天则时弹出 DSound 相关错误
该问题的出现可能是由于 Wine 缺少音频库的依赖。可尝试根据 Wine 的 ArchWiki 页面或 Lutris 给出的 Wine 依赖补齐依赖。
Wine 启动 th123.exe 时报错 unimplemented function ole32.dll.CoIncrementMTAUsage
Winetricks 使用的 ole32.dll 来自 Windows XP,这一版本的 ole32.dll 不提供 CoIncrementMTAUsage 函数的实现,进而导致游戏启动失败。相关问题已经在Winetricks/winetricks #2294中证实。
参见:soku-cn/soku-cn.github.io #118
解决方案是使用 winecfg,在函数库(Libraries)选项卡中下拉找到 ole32,将其调整为 builtin(使用 Wine 内建的 DLL)。
联机大厅相关
遇到问题可以对照以下表格更新大厅
| 大厅可能遇到的问题 | 首次修复问题的大厅mod版本 |
|---|---|
| Host 或使用 host list 时报 SSL 相关错误 | 0.6.4 |
| 大厅内无法用中文输入法聊天(Wine>=8.8) | 0.6.5 |
| 加入联机大厅时连接超时或长时间卡在 Joining | 0.6.6.1 |
(总而言之把大厅 mod 更新到 0.6.6.1 或以上的最新版就好)
在聊天框打字时若遇到光标与文字之间对不齐的问题(尤其文字中包含英文字母时),可使用 FREETYPE_PROPERTIES="truetype:interpreter-version=35" 环境变量来运行,或使用低于 7.17 版本的 Wine。
若遇其他问题请向我们进行反馈。
大厅报错:No Unicode translation.
使用 Wine 启动游戏,在启动游戏时和进入 VS Network 界面时,产生如下错误:
Error while loading lobby data.
Statistic saving, achievements and blank card rewards are now disabled.
To try to load data again, go to the lobby screen.
If loading succeeds, it will be enabled again.
Error:
No Unicode translation.这是 locale 设置引发的问题。请在您的启动参数前加上 LANG=zh_CN.UTF-8。如:LANG="zh_CN.UTF-8" wine ./th123.exe。或尝试在 wineconsole 中启动游戏。
Swarm 相关
直接使用Swarm-NG仓库的Linux发行版即可。

更新日志
7c4fd-于305d1-于62b8f-于6b9fd-于9fdba-于83801-于e47ce-于1857b-于45bac-于01414-于2e49e-于32252-于420b5-于a7821-于59265-于7a34a-于0bd5b-于
