最近不知道被什麼雷打到,想在 macOS 上面跑日文遊戲。結果大概算是成功一半,如果遊戲原本的資料的路徑有日文會跑不動,除此之外能跑的比想像中的還多,順手寫個紀錄這樣。

安裝 Wine

首先是要安裝 Wine 這個在 Unix-like 系統下的 Windows emulator (?),以下的教學我是照著 Installing Wine on Mac OS X 這篇文章做的。

最首先是要有 Xcode ,這個的取得方式就不贅述了。

再來要安裝 OSX 跟 macOS 上面第三方套件管理工具 Homebrew: https://brew.sh/zh-tw/

如果像我一樣是在 macOS 之前就安裝Homebrew 然後升級成 macOS 之後壞掉的,homebrew 有提供自我診斷指令:

1
brew doctor

升級作業系統上來最常卡到的是原來Homebrew 安裝在 /usr/local 底下,升級到 macOS 之後蘋果改掉了 /usr/local 的 owner ,可以參照底下這個 issue 把 owner 改回來然後執行 brew update : https://github.com/Homebrew/brew/issues/385

brew update 之後,新的 Homebrew 會把自己搬到 /usr/local/Homebrew ,迴避這個權限問題,記得升級完後把 /usr/local 改回 root:wheel

1
sudo chown -R root:wheel /usr/local

再來是安裝 Homebrew Cask 這個擴充套件

1
brew tap caskroom/cask

然後使用 Cask 安裝 Wine 依賴的 Java 跟 XQuartz(Mac 上面的 X11)

1
brew cask install java xquartz

最後安裝 Wine,這邊會跑很久

1
brew install wine

如果一切順利你的 macOS 上面就能跑 Wine 了!

解壓縮有日文檔名的 zip

因為 macOS 的 HFS+ 檔案系統的檔名吃 UTF-8,然後系統內建的解壓縮工具不會處理 Shift JIS 轉 UTF-8,所以跟 Windows 一樣會有解壓縮出來檔名爛掉的問題。我找到一個處理這個問題的 Python 腳本:

http://unknowngenius.com/blog/archives/2011/11/04/recovering-japanese-filenames-from-zip-archives-on-os-x/

不過他沒有處理目錄,所以我 clone 了一份然後用破爛 Python 技能加上了解壓縮目錄的功能:

https://github.com/FrankNine/FilenameEncodingUnzip

因為 macOS 有內建 Python interpreter,所以可以直接下:

1
./unzip.py <壓縮檔路徑> <Encoding>

Encoding 預設 sjis,可以不輸入。執行後如果沒有問題會解出 UTF-8 encoding 的日文檔案目錄名稱。

以日文語系執行 Wine

在 macOS 輸入 locale 會顯示目前的語系資料:

1
2
3
4
5
6
7
8
LANG=
LC_COLLATE="C"
LC_CTYPE="UTF-8"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=

這是英文 macOS 的預設配置,每一個項目都是可以獨立設定語系的,如果要切日文最直接的方法還是直接去設定 LC_ALL 壓過所有語系設定。

不過其實沒有必要去改系統的語系設定,可以只要在 Wine 執行前設定 Wine 的就好了,命令如下:

1
LC_ALL="ja_JP" wine <執行檔路徑>

如果沒出事的話遊戲應該會以 sjis 執行,NScripter 跟 RPG Maker 確定可以,吉里吉里確定會爆炸,然後如果遊戲的素材原本是用日文命名的話,在開檔的時候也會炸。我猜測是因為素材已經被解壓縮成 UTF-8 但是程式內還是用 Shift JIS 字串找檔案,理論上開檔的動作如果攔截下來把檔名也做 Shift JIS 轉 UTF-8 應該檔案就會找得到,但實際上我不知道怎麼做。就有待高手補完了。

P.S. 如果執行的是安裝檔,你會看到 Wine 模擬的 Windows 檔案系統,就別客氣直接 C 槽或是 Program Files 直接裝下去。在 macOS 上 Wine 創的 Windows 檔案系統在:

1
~/.wine/drive_c/