全平台社保!

众所周知由于Windows上蛋疼的编码问题,大多数情况下我们运行Galgame都需要使用ntleas或者LocaleEmulator等工具进行转区(不仅如此,有些情况下我打开别人给我的包含中文字符的txt文本都需要转区)。
当我投入了ArchLinux的怀抱以后,即使能用wine来运行Windows应用,但转区就成为了一个头痛的问题。对于64位应用,即使比较麻烦,但还是可以通过手动打开ntleasWin.exe来转区;32位应用你只能用LocaleEmulator进行转区,然而LE转区是要通过Windows的右键菜单来启动对应的程序的,显然这行不通。
为了手冲就要重启的麻烦事我是忍不了的,于是就有了下面的教程。

1 安装wine

在控制台执行

$ sudo pacman -S wine wine_gecko wine-mono

安装完成之后,执行

$ winecfg

会生成一个默认的虚拟Windows环境(prefix),路径是~/.wine
你也可以在winecfg里面对声音、图形等进行简单的设置,一般默认就好了。

2 配置Locale

编辑/etc/locale.gen
找到ja_JP,并且去掉注释

ja_JP.EUC-JP EUC-JP
ja_JP.UTF-8 UTF-8

保存文件
然后在控制台执行以下命令来更新你的locale

$ locale-gen

然后重新启动你的电脑。

建议你可以安装一些日文字体,我个人比较喜欢的是Adobe和Google共同开发的思源体

3 运行

运行非常简单,只需要指定语言变量就行了。 在Galgame所在的目录打开终端,运行以下命令(将someProgram.exe替换为对应的可执行文件)

$ LANG="ja_JP" wine someProgram.exe

对于显卡配置要求较高的Gal,你还可以配合optirun来食用。比如CM3D2

$ LANG="ja_JP" optirun wine CM3D2x64.exe

稍等片刻,你就能看到熟悉的帝国俱乐部了。(而且加载比用Windows还快。。。)

发现一个BUG就是CM3D2的MOD和汉化等插件无法在Linux下使用,经过初步的排查是因为opengl32.dll造成的,wine会默认使用自己的opengl32.dll而不是prefix的那一份,所以游戏目录下面的opengl32.dll不起作用。 尝试让wine强制使用prefix中的或者是游戏目录下的opengl32.dll,结果就是开不了游戏。不过我觉得也不算是特别要命的bug了。

如果你发现指定了语言变量之后也不能运行游戏,你可以尝试额外指定编码
比如

$ LANG="ja_JP.UTF-8" wine someProgram.exe

或者是

$ LANG="ja_JP.EUC-JP" wine someProgram.exe

wine默认生成的是64位的Windows环境,对一些年代久远的Gal的支持可能并不好。你可以额外生成一个32位的prefix来运行32位应用。 执行以下命令,将在生成一个新的prefix~/.wine32

$ WINEARCH=win32 WINEPREFIX="~/.wine32" wineboot -u

然后通过指定32位的prefix来运行

$ WINEPREFIX="~/.wine32" LANG="ja_JP" wine someProgram.exe

最後,你只需要制作一个快捷方式,就可以方便地开冲启动你的Galgame。

如果你的Gal能运行,但是部分字符显示不正常,通常的原因是wine缺少字体文件。此问题就不在本文的讨论范围了。

4 后记

对于某些汉化后的Galgame,如果遇到在LANG="ja_JP"下无法运行的状态,可以在第2步中加入中文locale,常用的字符集有UTF-8以及GBK。

一般来说,如果不确定到底该用哪一个语言变量来运行wine,可以在以下四个里面逐个尝试

如果遇到报错中有libmpg123的字样,安装mpg123即可,大部分的Galgame都需要mpg123才能运行。

祝大家身体健康(逃

illust: 木shiyo