How-To:Linux 安裝 Planescape: Torment: Enhanced Edition

操作環境:

  • Fedora 27
  • PST:EE v3.13.0

 

《異域鎮魂曲》(Planescape: Torment,1999)可說是一部包裝成角色扮演遊戲的互動式小說,其故事劇情及文字量爆炸性般的豐富。同時遊戲也擁有極高的自由度,讓玩家可以自行決定主角的人格特質,並為主角的救贖之旅寫下最終且獨特的篇章。關於遊戲的進一步介紹,可以參考 DR 所寫的一篇文章

 

Beamdog 於 2017 年所發行的增強版(Enhanced Edition),是一款跨平台的版本,其中便包含了對 Linux 平台的原生支援。增強版可於 SteamGOG.com 購買,至於本文的流程則將會使用 GOG.com 所提供的安裝程式。

 

1. 安裝遊戲

從 GOG.com 購買遊戲,並下載 Linux 版的安裝程式後,接著便執行安裝程式:

  • sh gog_planescape_torment_enhanced_edition_2.1.0.3.sh

 

 

安裝過程相當單純,依預設值安裝至使用者家目錄下即可。

 

2. 執行遊戲

Linux 版分別為 32bit 及 64bit 的平台提供了相應的執行檔(Torment 及 Torment64),但一般來說,使用者並不需要特別指定執行檔版本。從應用程式清單中啟動遊戲,或是在命令行使用以下指令:

  •  ./GOG\ Games/Planescape\ Torment\ Enhanced\ Edition/start.sh

 

便能夠透過啟動腳本自動選擇合適的執行檔來執行。

 

3. 安裝所需的函式庫

Fedora 27 下執行遊戲時,會出現找不到 libssl.so.1.0.0 及 libcrypto.so.1.0.0 的錯誤,然而這實際上是遊戲所依賴的版本與 Fedora 27 提供的版本不相容,所以若將系統現有的 OpenSSL 函式庫連結至 libssl.so.1.0.0 及 libcrypto.so.1.0.0 也不會解決問題。對此,既然 Linux 版在系統需求裡提到 Ubuntu 16.04,那麼最直接的解決方案就是抓該發行版的 OpenSSL 來用。

 

以 64bit 平台為例,只要簡單上網搜尋一下,例如在 ubuntu.pkgs.org 網站就可以找到 libssl1.0.0_1.0.2g-1ubuntu4_amd64.deb 套件。下載後可以使用壓縮檔管理員(File Roller),解開該套件及其內的 data.tar.xz。或是使用以下指令:

  • ar vx libssl1.0.0_1.0.2g-1ubuntu4_amd64.deb
  • tar xvf data.tar.xz

 

解開後在 lib/x86_64-linux-gnu 路徑下,找到所需的 libssl.so.1.0.0 及 libcrypto.so.1.0.0,皆複製到 /usr/lib64 目錄下即可。

 

4. 安裝中文語言包

雖然增強版未內建中文,但由於當年台灣曾發行過《異域鎮魂曲》的繁體中文版(DR 有買……),因此網路上便出現了以繁體中文版為基礎的簡體語言包。不僅如此,後來簡體語言包則又再回頭轉換成了繁體語言包。而這些資源都可以在網路上找到,所以若想要實現增強版的中文支援並不困難。

 

這裡 DR 自行準備了一份語言包(vanilla_zh_TW-20180305.7z),是將增強版的字串檔(dialog.tlk),套用原繁體中文版的翻譯後,再經過修補而成。至於安裝方式,則是單純將語言包裡的 zh_TW 目錄,放置到遊戲安裝路徑下的 game/lang 目錄裡。完成後,再修改使用者家目錄下的「.local/share/Planescape Torment - Enhanced Edition/Baldur.lua」設定檔,該檔案會在第一次啟動遊戲後產生,找到其中的:

SetPrivateProfileString('Language','Text','en_US')

 

將其變更為:

SetPrivateProfileString('Language','Text','zh_TW')

 

儲存後再次啟動遊戲,屆時除了遊戲主選單外,其餘主要的遊戲內容都應該會以中文顯示。

 

事實上,遊戲會在初次執行時(未存在設定檔時),自動偵測合適的語系。若當前環境變數 LANG 為 zh_TW,且語言目錄中存在 zh_TW,則前述的設定值便會自動填為「zh_TW」。

 

5. 關於語言包的進一步說明

在 DR 所準備的繁中語言包裡,fonts 目錄下的 bookmani.ttf 及 exocet.ttf 實際上是文泉驛正黑體,按此命名是為了配合遊戲預設的字型載入名稱。除此之外,語言包中所附的 input.xlsx 表格,則是原文及中文翻譯的對照清單。DR 將會在本文最末節說明這份表格是如何產製及使用的。

 

表格中以黃色標示處代表有經過 DR 的增補或修改,不過在增強版的字串檔裡,有不少字串事實上並未出現在遊戲裡,例如有部份文字其實是針對採用相同遊戲引擎的《柏德之門》(Baldur's Gate)系列。另一方面,其實原中文版也存在許多翻譯錯誤,不時會造成誤解,甚至會嚴重影響遊戲的進行。對此,DR 主要是透過實際的遊戲過程,來評估是否有需要補上翻譯之文字,或是需要修改之翻譯。不過這樣的作法,或許難免會有漏網之魚。所以日後若有發現到新問題,就會再做補正,並釋出更新檔案。

 

關於翻譯的正確性,DR 有對網路上的各式中文語言包做了一些抽樣,發現這些語言包似乎都沒有做這類的檢查。如果想要進一步比對 DR 所做的改動,可以另外下載這份 original_zh_TW.xlsx,這是原始版與原繁體中文版的字串匯出清單。

 

6. 解決啟用中文後,部份文字框右側被捲動滑桿擋住的問題

這項問題的處理,需要藉助遊戲的自訂 UI 功能。首先請編輯先前曾提及的隱藏設定檔(Baldur.lua),新增以下設定:

SetPrivateProfileString('Program Options','UI Edit Mode','1')

 

儲存後進入遊戲,並在任一畫面中按下 F11 鍵,屆時將會出現許多方框,讓玩家可對 UI 元件的尺寸及位置進行調整。這時請選擇任一元件進行微幅調整,然後結束遊戲。結束遊戲後,於遊戲安裝路徑的 game/override 目錄裡,將會出現一個名為「UI.menu」的 Lua 腳本。

 

於是接著便編輯此檔案,在約莫第 12765 行,會找到關於對話框的設定:

            width 100
            text
            {
                area 0 0 -1 -1
                text lua "getDialogEntryText(rowNumber)"
                text style "normal"
                text highlight 1
                indent 1
            }

 

而解決方案就是指定(及縮減)文字區域的寬度,並微調該區域的起始 X 座標位置。將其中一段程式碼變更為:

area 40 0 500 -1

 

同理,再前往約莫第 15197 行,會找到關於日誌任務框的設定:

            width 100
            label
            {   
                enabled "questEnabled(rowNumber)"
                area 8 0 -1 -1
                text lua "getQuestText(rowNumber)"
                text style "label"
                text color lua "getQuestColor(rowNumber)"
                align left center
                text highlight 1
                indent 1
                pad 0 0 32 0
            }

 

將其中一段程式碼變更為:

area 8 0 371 -1

 

儲存後再次進入遊戲,則前述修改過的文字區域尺寸都會被縮減,藉此排除文字被滑桿擋住的問題。如果想要清除在 UI.menu 裡所做的任何變更,可以直接將該檔案移除。

 

7. 其它與語言相關的輔助工具

針對語系切換的動作,DR 撰寫了一支 Python 程式:lang_switcher.py,直接執行它就能夠協助修改設定檔,以更加方便的方式來切換語言:

  • ./lang_switcher.py

 

至於繁中字串檔的產製,DR 則撰寫了一支 tlk_toolkit.py,能夠分別載入英文及中文的字串檔,並透過 openpyxl 函式庫來產生單一的 XLSX 表格。而表格中的內容還能夠透過相同的程式,再產製出新的字串檔。

 

關於這支程式的執行,首先需要安裝 openpyxl 函式庫:

  • sudo dnf install python3-openpyxl

 

程式的輸入、輸出路徑,皆是直接設定在程式碼裡,若加上「--export」參數便會將字串檔匯出為 XLSX 表格:

  • ./tlk_toolkit.py --export

 

至於「--import」參數則是將表格內容產製為新的字串檔:

  • ./tlk_toolkit.py --import