在虛空中與 amitié 相遇。上篇

接下來上演的,是 Void Linux 和 FLOWERS 四季的邂逅。

夏空の光 - 考崎千鳥&八重垣えりか on Soundcloud

序章

noarch 也喜歡百合呢。2021 年某個時候,我在翻看萌娘百科的時候發現了 FLOWERS,本來以為是個番劇...

點開連結,好傢伙,是個分成四篇的視覺小說,分別講述了九個少女在天主教寄宿學校(啊,傳統藝能)的百合故事。工作室 Innocent Grey,本業是獵奇解謎遊戲,而 FLOWERS 是他們為數不多的全年齡作品之一。

所以問題出現了:noarch 的筆記本絕大多數時間都在執行 Void Linux,為了 FLOWERS 經常重啟進 Windows 顯然不現實,虛擬機器又沒有硬體加速,所以一直避而不及的 Wine 現在看上去變得不可避了。

能否藉助 Steam 和 Proton 呢?答案是肯定的,但 noarch 不想在筆記本上裝 Steam,以及嘗試 KISS 的方法把 Wine 配起來聽著挺誘人的。

noarch 不在此提供 FLOWERS 資源下載,請自行購買支援正版或去 BT 站及論壇獲取 FLOWERS 遊戲本體。FLOWERS 前三篇()都在 Steam 有售,並且沒有 DRM,在 Steam 內安裝後可以直接複製到其它電腦上執行。冬篇漢化預計在 2022 年內 Steam 釋出,但下面 noarch 會跟你一起體驗啃生肉的樂趣!

我們一起來跳進 Void Linux + Wine + Gallium Nine + Textractor + FLOWERS 這個兔子窩吧(是夏篇劇透哦。)

First things first: Wine (multilib)

既然已經在用 Void Linux,安裝 Wine 應該已經輕車熟路了吧。# xbps-install wine 就行了嗎?好像不是,還有幾個額外的注意事項。

首先,FLOWERS 是個 32 位的遊戲,需要利用 32 位 Wine 以及配套的 multilib 庫來執行。Void 預設不啟用 32 位支援,如果你用的是 musl 版則完全沒有 multilib,需要用到 glib chroot 等奇技淫巧。noarch 的 Void Linux 是 glibc 風味的,所以只需要安裝 void-repo-multilib 包即可。

新添加了源,你多半要改掉映象:根據 Void Handbook,複製 /usr/share/xbps.d/10-repository-multilib.conf/etc/xbps.d/ 然後編輯。

現在再 # xbps-install -S 然後 xbps-query -Rs wine:

$ xbps-query -Rs wine
[*] libwine-7.7_1          Run Microsoft Windows applications - Runtime library
[-] protontricks-1.8.1_1   Simple wrapper that does winetricks things for Proton enabled games
[*] wine-7.7_1             Run Microsoft Windows applications
[*] wine-common-7.7_1      Run Microsoft Windows applications - common files
[-] wine-devel-7.7_1       Run Microsoft Windows applications - development files
[*] wine-gecko-2.47.2_1    Mozilla Gecko Layout Engine for WINE (32bit)
[*] wine-mono-7.2.0_1      Mono built for running .NET applications with WINE
[-] wine-tools-7.7_1       Run Microsoft Windows applications - development tools
[*] winetricks-20210825_1  Script to install various redistributable runtime libraries in Wine
[*] libwine-32bit-7.7_1    Run Microsoft Windows applications - Runtime library (32bit)
[*] wine-32bit-7.7_1       Run Microsoft Windows applications (32bit)
[-] wine-devel-32bit-7.7_1 Run Microsoft Windows applications - development files (32bit)

多出來的,帶 -32bit 字尾的包就是我們想要的。

然後安裝 wine wine-32bit winetrickswine-geckowine-mono 也可選,但 FLOWERS 用不到。接下來,xbps 會安裝大量的依賴,但只要你選對了源,它快得讓你坐和放寬的機會都沒有。

首次執行

你可能注意到了我們缺點什麼。嘗試在遊戲目錄執行 wine FLOWERS.exe,果然,遊戲崩潰,Wine 丟擲錯誤:

遊戲崩潰

但是,我們能在終端看到 Wine 給我們的線索:

0024:err:wgl:X11DRV_WineGL_InitOpenglInfo  couldn't initialize OpenGL, expect problems

不應該啊!這混成器跑得好好的,怎麼就沒有 OpenGL 了呢?

glxgears 能執行

$ xbps-query -Rs mesa
...
[*] mesa-21.3.5_1                            Graphics library similar to SGI's OpenGL
[-] mesa-XvMC-21.3.5_1                       Mesa XvMC drivers
[-] mesa-ati-dri-21.3.5_1                    Mesa DRI drivers for ATI GPUs (transitional dummy package)
[*] mesa-demos-8.4.0_3                       Mesa 3D demos and tools
[*] mesa-dri-21.3.5_1                        Mesa DRI drivers
...
[-] mesa-32bit-21.3.5_1                      Graphics library similar to SGI's OpenGL (32bit)
[-] mesa-XvMC-32bit-21.3.5_1                 Mesa XvMC drivers (32bit)
[-] mesa-ati-dri-32bit-21.3.5_1              Mesa DRI drivers for ATI GPUs (transitional dummy package) (32bit)
[-] mesa-dri-32bit-21.3.5_1                  Mesa DRI drivers (32bit)
...

還記得之前 noarch 說的,這是個 32 位遊戲嗎?因此,Wine 需要對應的 32 位 Mesa 來執行 OpenGL。

安裝 mesa-32bit mesa-dri-32bit,然後再次運行遊戲:

標題介面

遊戲啟動後,請暫離現實,開始享受少女們甜美的百合世界。

... 嗎?

更多故障排除

要命的是,這才是我們 debug 旅途的開始。

字型缺失

首先, 根據 Wine 老傳統, 字型缺失是要有的:

英文版春篇缺失字型

不過這也不是 Wine 的鍋,是因為遊戲用了一個 Windows 都沒預裝的,叫做 Overlock 的字型,還魔改加入了一些字元。

這裡下載之後放進 WINEPREFIX 裡的 C:\windows\Fonts 裡就行了。 比如 noarch 用 winetricks 建立了一個 WINEPREFIX 叫 Games,那麼我應該先執行 export WINEPREFIX=$HOME/.local/share/wineprefixes/Games,對應的字型目錄就是 $WINEPREFIX/drive_c/windows/Fonts

對於中文版和日文版,字型缺失會直接不顯示,這裡照例在同一個 WINEPREFIX 下 winetricks cjkfonts 即可。

OP/ED 白屏

序章看完後,遊戲可能會白屏,並伴隨終端輸出:

winegstreamer error: decodebin0: Your GStreamer installation is missing a plug-in.
winegstreamer error: decodebin0: ../gst/playback/gstdecodebin2.c(4701): gst_decode_bin_expose (): /GstBin:bin0/GstDecodeBin:decodebin0:
no suitable plugins found:
Missing decoder: MPEG-1 System Stream (video/mpeg, systemstream=(boolean)true, mpegversion=(int)1)

Ah, proprietary codecs, here we go again.

缺失的這個 MPEG-1 外掛在 gst-plugins-bad1 裡面,安裝它的 32 位版本 gst-plugins-bad1-32bit 即可。

可選:使用 Gallium Nine

雖然這個文字遊戲基本上只要有個顯示卡就能玩,沒顯示卡也能用軟體渲染,但如果你想要省點電,或者提升一些效能,Gallium Nine 是一個高效能的 DirectX 9 實現。

與 wined3d 將 DX9 渲染指令轉換成 OpenGL 不同,它能直接將 DX9 渲染指令交給任何支援 Gallium 的圖形驅動(Mesa,nouveau...),以達到接近原生的效能。

在 WINEPREFIX 裡執行 winetricks galliumnine 即可安裝 Gallium Nine。

之後,你啟動遊戲就會看到:

$ wine FLOWERS.exe
Native Direct3D 9 v0.8.0.385-release is active.
For more information visit https://github.com/iXit/wine-nine-standalone
fixme:d3d9nine:DRIPresentGroup_GetMultiheadCount (0x270f78), stub!
fixme:d3d9nine:DRIPresentGroup_GetMultiheadCount (0x270f78), stub!

代表 Gallium Nine 正常執行。

旅途還未結束

noarch 從 2022 年初就有了寫這篇文章的想法,並斷斷續續寫了不多。因為其實 noarch 只在 Void 上玩了英文版春篇,一開始並沒有測試中文版,續作是在 Windows 上玩的。

寫完第一小節之後,一在 Wine 上測試,好傢伙,直接黑屏卡死。試了種種方法,也採集了日誌,都看不到任何問題的影子。再看了看 Wine bug tracker,面對裡面多年未解決,甚至開發者完全不搭理的 bug,再想想 FLOWERS 這個系列的小眾程度,直接絕望(這也是為什麼我一直不想碰 Wine 的原因之一啊!)

直到某次 Wine 更新(7.5?),noarch 又嘗試啟動了一下游戲,這次可以了,後續執行看上去也沒問題。可能是 Wine 修復其它遊戲的過程中受益了吧。