用 proton 在 linux 下玩哈利波特:魔法覺醒

上個月中國網易合作開發的哈利波特魔法覺醒遊戲推出了, 看起來做得很棒,完全不是免洗手遊,對原作還原度也很高, 對我這代童年在哈利波特長大的人應該很有吸引力。 幾周後電腦版也出了,我本來想現在這個遊戲引擎時代, 這種用遊戲引擎開發的遊戲應該裝起來很簡單。 結果一開始沒裝起來,折騰半天才想到是要先裝好 Visual C++ Redistributable, 在 proton 下就可以玩了

all in one script

for those who does not speak chinese but speak bash.

wget https://g92.gdl.netease.com/HPMA.rar # game size 6.7G
7z x HPMA.rar # 6.8G

export STEAM_COMPAT_DATA_PATH=$HOME/hpma-compat-data
export STEAM_COMPAT_CLIENT_INSTALL_PATH=$HOME/.steam/steam
proton_version=6.3

cd hpzs # game file directory in rar
# installation take 10G
"$HOME/.steam/steam/steamapps/common/Proton $proton_version/proton" \
    run harrypotter_setup.exe
echo press enter after installation finished
read x
cd ..

wget https://aka.ms/vs/16/release/vc_redist.x64.exe
"$HOME/.steam/steam/steamapps/common/Proton $proton_version/proton" \
    run vc_redist.x64.exe
echo press enter after installation finished
read x

"$HOME/.steam/steam/steamapps/common/Proton $proton_version/proton" \
    run "C:\Program Files (x86)\HPMA\Launch.exe"
# do not choose OpenGL in graphic setting; choose direct x 11.
# opengl will cause chinese font become tofu.

美術風格

這遊戲對我這代童年在哈利波特長大的人應該很有吸引力, 遊戲出了後臉書上都出現一堆哈利波特 cosplay 照, 剛推出時我自己也和朋友去西門町的大型廣告走了一圈。 遊戲內容也蠻用心的, 在地圖模式裡可以騎掃把在霍格華茲校園裡自由飛行, 城堡內部大多地圖也是可以純用走的走到,只是很容易迷路而已。 只有少部份地圖只能靠超連結按鈕連進去。

可能是網易的風格和哈利波特很合吧, 第五人格的畫風,稍微改一下就很適合哈利波特了。 雖然這遊戲很明顯有中資問題,但還是真香, 畢竟是原廠有合作開發,中資問題應該也沒那麼大吧。(自我安慰中。) 總之等到出事再來抵制應該也不遲。

還有一個主因是,我覺得遊戲中用卡牌加上拖曳來施法的機制蠻有趣的, 所以也想入坑玩玩看。 朋友也有幾個一開始就入坑,然後爬到蠻高段位的, 看他們雙排一直贏感覺很爽。

電腦版

這遊戲一開始只出 android ios 版, 但因為不是大家手機都很好, 所以後來很多人都用電腦的手機模擬器玩,像用 bluestack。 我的手機是夠新跑得動,但螢幕太小字看不清楚,根本沒辦法玩。 後來網易自己出了 pc 版,檔案超大 8G,就打算裝裝看。

一開始在 linux 下用 proton 裝一次,但裝完一直開不起來。 我用 proton 的作法是裝好 steam, 用 steam 內建的功能裝 proton, 之後 proton 就會在 $HOME/.steam/steam/steamapps/common/Proton $version/proton , version 目前最新是 6.3。

proton 執行時要指定一個當 windows c 槽,放系統函式庫的資料夾, 用環境變數 STEAM_COMPAT_DATA_PATH 指定, 然後執行安裝檔 proton run harrypotter_setup.exe 即可。 安裝檔一共有五個檔案, harrypotter_setup-[1-4].bin 和一個 harrypotter_setup.exe ,載下來時是都放在一個 rar 壓縮檔裡。

例如我解壓縮後的四個檔案放在 ~/hpzs , 給 proton 當 c 槽的資料夾則是 ~/hpma-compat-data , steam 則是安裝在 ~/.steam ,proton 版本是 6.3, 那執行 proton 來安裝的指令就要這樣下:

cd ~/hpzs
env STEAM_COMPAT_DATA_PATH=$HOME/hpma-compat-data \
    STEAM_COMPAT_CLIENT_INSTALL_PATH=$HOME/.steam/steam \
    "$HOME/.steam/steam/steamapps/common/Proton 6.3/proton" run \
    harrypotter_setup.exe

安裝後預設是把遊戲裝在 C:\Program Files (x86)\HPMA , 也就是 ~/hpma-compat-data/pfx/drive_c/Program Files (x86)/HPMA 。 執行檔是 C:\Program Files (x86)\HPMA\Launch.exe 裝好要執行的話,可以直接用 windows 風格指定 c 槽路徑:

env STEAM_COMPAT_DATA_PATH=$HOME/hpma-compat-data \
    STEAM_COMPAT_CLIENT_INSTALL_PATH=$HOME/.steam/steam \
    "$HOME/.steam/steam/steamapps/common/Proton 6.3/proton" run \
    "C:\Program Files (x86)\HPMA\Launch.exe"

但現在還不能跑,因為少了一個 microsoft visual c++ 的函式庫, 應該跑到出現網易的 logo 後會有錯誤訊息的視窗出現, 但是亂碼所以我一開始都不知道是什麼意思。 visual c++ 函式庫可以去 microsoft 網站 下載, 我是選 x64 那個,或是 用 exe 檔直接連結

載下來和上面裝遊戲的安裝方式一樣, 用 proton 指定同一個 c 槽資料夾, 然後一直下一步就好了。

env STEAM_COMPAT_DATA_PATH=$HOME/hpma-compat-data \
    STEAM_COMPAT_CLIENT_INSTALL_PATH=$HOME/.steam/steam \
    "$HOME/.steam/steam/steamapps/common/Proton 6.3/proton" run \
    vc_redist.x64.exe

裝完後理論上就可以開了。 第一次開可能要更新,檔案還蠻大的。 更新完後要重開一次,遊戲只會自己關掉,你要手動打開。

第一次打開後要註冊,可以綁 facebook 或 line,也只有這二種方法。 遊戲會嘗試打開瀏覽器用 oauth 授權,如果是 windows 會開 edge, proton 下會用 linux 預設的瀏覽開; 如果都沒有也會顯示授權網址,就自己開吧。

進遊戲之後可以去設定把調顯示設定, 我筆電沒有很好,所以設 fps 30、畫質低。 然後有一個可以選底層要用 OpenGL 或 DirectX 11, proton 選 opengl 的話(下次重開生效), 字會變豆腐方塊顯示不出來,所以不要選。

遊戲安裝檔大小 8G,安裝後 10G。

安裝撞牆記錄

一開始裝不起來以為是 proton 的問題,就把塵封已久的 windows 開來裝裝看。 先用虛擬機試,本以為手機遊戲應該不會太吃效能,搞不好虛擬機就夠用。 結果手上二個 windows 硬碟的映像檔,一個開不起來一個開得起來。 開得起來那個效能也嚴重不足,連過場動畫都超頓, 畫面落後聲音快一半,根本不能玩。 所以打算雙開機回 windows 玩。

在 windows 裝時,錯誤訊息是缺少 CONTCTR140.dllMSVCP140.dll 二個函式庫。 先用之前的想法,手動把這二個 dll 抓下來放進 windows system32, 但還是不行,錯誤訊息變成別的無意義的東西。

於是去開得起來那台找這二個 dll 是收在哪, 結果是很檔名很長很奇怪的資料夾,我猜是 windows 內部更新會用的位置, 所以以為是 windows 版本太舊,就把雙系統 windows 整理一下, 更新到最新版,edge 也從 ms 自幹換成 blink 底了。 但還是跳一樣的,缺那二個 dll 的錯誤訊息。

後來用錯誤訊息去 google,看到一些相關問題, 提到那二個 dll 是屬於 microsoft visual c++ 的函式庫, 有些軟體會用到,可以自己手動裝。 後來仔細想想那台開得起來的映象檔, 以前的確因為某商業軟體要用, 就裝過 visual c++ 函式庫,難怪可以動。

但網易也太雷,在安裝說明寫個要手動裝 visual c++ 函式庫是會死嗎? 而且好像大家都沒有這個問題? 我也不知道為什麼,可能是我的 windows 太乾淨吧。

裝完函式庫就可以玩了。 之後想到,搞不好 proton 不能玩也是這個原因? 所以就在 proton 下把函式庫裝起來,結果還真的可以跑了。 只是效能比在 windows 下還差一點, 打二對二對戰時,畫面比較花就會 lag。 後來發現不要邊開著瀏覽器邊玩就好了,可能我的 ram 不夠。

這遊戲好像是先發布中國版和台灣版,歐美都還沒發布, 所以之前想找有沒有人用 linux 裝的經驗都找不到。 reddit 的討論區裡,還有美國人跑來台灣服玩的心得。

用鍵盤玩舞會音樂遊戲時無法一次點二個音符的問題

這遊戲裡除了決鬥,還有舞會這個簡單的小音樂遊戲。 在手機上可以直接全螢幕點擊,在電腦版用滑鼠不太好操作, 所以官方讓電腦版可以用空白鍵直接點擊音符,不用管位置。 但如果是要同時按下二個音符的場合,就變成要按二下空白鍵。 如果其它鍵也可以代替空白鍵判定,就可以同時按下二個鍵擊中二個音符了。

隨便 google 了一下 linux 下做不做得到這件事, 找到 一則 ask ubuntu 上的回答,看起來用 xmodmap 就行了 。 簡單用 xmodmap -e 'keycode 54 = space' 就可以把本次 xsession 裡的 keycode 54 換成輸出成空白鍵, 也就是按 c 鍵也會輸出空白鍵。 如果要還原,就是 xmodmap -e 'keycode 54 = c

寫成腳本的話:

#!/bin/sh
xmodmap -e "keycode 54 = space"
xmodmap -e "keycode 59 = space"
xmodmap -e "keycode 58 = space"
xmodmap -e "keycode 78 = space"

echo "key 'x' 'c' 'm' ',' are mapped to space"
echo "press enter to recover"
read wait

xmodmap -e "keycode 54 = c"
xmodmap -e "keycode 59 = comma"
xmodmap -e "keycode 58 = m"
xmodmap -e "keycode 78 = x"

這樣就碰到需要雙手同時按的音符時, 就可以一次按二個鍵達成。 windows 下應該也有類似的工具吧,總之我不熟。