20261026 趁特價買了
Blades of Time - Limited Edition gog, 5.99us, 自從 sony 事件後, 特別注意數位遊戲擁有問題, gog 有的儘量在 gog 買, 這是 gog 的優勢, 也是 gog 定價可以高一點的原因。steam 不見得是第一選擇了。
用了 Heroic 裝在 steam deck, 很遺憾無法正常跑起來。ptt 網友推薦:
Unifideck - Unified Game Library for Steam Deck。
用 opencode ai 產生一個 script 檔案, 可以順利在桌面模式把遊戲執行起來。
開心回到 game mode, 竟然無法正常執行, 只好再次出動 AI, AI 忙了半小時之後, 神奇的搞定了。連 gdb 都出動, steam deck 竟然有 gdb, 真的有點吃驚。看起來多了 list 1 L21 就可以在 game mode 執行了。
主要需要指定 WINEPREFIX, 這邊使用 Heroic 產生的 WINEPREFIX = "/home/deck/Games/Heroic/Prefixes/Blades of Time", 和 proton 11, 可是 AI 卻用 GE-Proton10-34 執行, 也沒關係, 能順利跑起來就好。
印象之前用 Heroic 裝的, 好像真的只能在桌面模式執行。
[使用 ai agent 來中文化]
以下紀錄整個經過, 第一次使用 ai agent 來中文化, 有些地方不熟, 白作工。
gog 版本是透過以下檔案內容來決定載入哪個語系, 遊戲有內建日文, 設定日文語系的話, 程式會讀取日文的字幕檔, 載入字型 fonts_jap.*.bin, 這樣日文才會正常顯示出來。
goggame-1164193173.info:
- 日文版:*"language": "Japanese"*、"languages": ["ja-JP"]
- 原版備份:*"language": "English"*、"languages": ["en-US"]
目前沒有繁體中文版本, 有一個
簡體中文 patch, 不過不適合我的遊戲版本, patch 之後無法正常執行遊戲 (bot.vromfs.bin 打包後的格式失敗)。想嘗試用 ai 來中文化, 以下提到的 AI 都是免費方案。
一開始是先蒐集資訊, 網路上可能有類似的資源可以參考, 全都抓下來給 ai 分析, 儘量不要從零開始, 我還有抓 wt-tools, 某個類似此款遊戲的解包工具, 不過最後沒幫到忙。而中文化 pc9801 game, 我甚至連 dosbox-x source code 也一起給 ai 分析。
先透過 chatgpt 建立 plan.md, 然後讓 opencode (免費方案) 按照這個 plan.md 實作, 我是在 linux 用 ai, ai agent 用 linux 工具去分析遊戲檔案, 或是產生一些 python 程式去分析, 產生 patch 檔案之後, 手動 patch, 手動在 windows 10 執行遊戲。過程中還真的找出一些東西, 一開始看不懂在做什麼, 也不知道中文化要完成哪些修正, 後來花了一些時間研究, 大概知道要處理2個部份。
-
運氣還不錯, AI 有把文字資料從 bot.vromfs.bin 解開取出來, 不知道 ai 從哪得到這些資訊, 是透過 zlib 壓縮, 找出檔頭位置, 可以順利解開, 更厲害還可以抽出裡頭的英文字串, 所以可以針對英文的字串中文化, 再寫回原本檔案, 所以還要知道怎麼寫回去, 這種有把文字資源分離出來的設計, 搞中文化相對會容易些, 現代遊戲基本上都會是這樣的設計。另外文字編碼我沒搞懂是用什麼編碼, 這個時代的多語系應該是用 utf8 之類的吧。不像 pc9801 日文 shift-jis 編碼, 那個中文化就有點痛苦, 也沒有文字資源分離的設計。
打包回 bot.vromfs.bin 的程式搞了很久才成功, 不知道為什麼? 知道怎麼解開不是應該知道怎麼打包回去嗎? 打包失敗的話, 遊戲執行時會得到 Exception occrued Game will be closed.
-
另外一個是中文字型, 看檔名日文版會用日文字型, 所以推測應該也需要中文字型。此款遊戲並不是提供一個中文字型檔案就可以被接受, 字型的處理很複雜, 牽扯到編碼, 如果不是用 ttf 這種標準, 是自有格式的話, 不好解, 需要知道字型檔案格式, 才有辦法從一般字型轉成遊戲用的字型格式, opencode 分析老半天還是沒輒, 所以才改用簡體中文的字型。我都在想是不是要出動反組譯了。
怎麼取出字型對我來說不是問題, 有 ai 這件事情變得很容易, 例如可以指定細明體這字型, 請 ai 取出翻譯的中文字型, 大小是 16X16, 寫成遊戲的字型格式存起來 (要省 token 可以請 ai 給出一個字型擷取程式, 我就是這麼做的), 但不知道格式, 就沒辦法把取出的字型寫到遊戲的字型格式, 而且可能會有 16X16 或是 24X24 這種大小的字型限制, 不知道這種格式, 就不知道要取多大的字型。pc9801 就是取 16X16 的大小。如果遊戲內建使用 unicode 字型, 這個建立中文字型的步驟就可以省了。
像這個「あ」就是透過 shift-jis 轉成某個數值, 從 ANEX86.BMP 取出來的 (16X16), 所以需要知道 ANEX86.BMP 格式, 才能取出正確的字型。對, 同時間我在對 rusty 做中文化。
之後請 ai 參考簡體中文 patch, 改用簡體中文翻譯和字型檔, 我是先用簡體中文 patch, 讓 ai 去比對 patch 前, 和 patch 後的差異。
原本的 plan.md 並沒有包含打包程式, 所以最後產出的 patch 根本不會改變 bot.vromfs.bin, 也就是那些翻譯中文檔案根本不會被寫入, 這也太瞎了。也沒有包含簡體中文字型, 一並加入了。
加入 patch 流程後, 再次修正打包程式, 這次執行變成黑畫面, 沒有 Exception occrued Game will be closed. 再來沒招, 出動 codex, 使用免費方案, 終於把打包程式修好, 打包後遊戲可以正常執行, 但是翻譯的簡體中文沒有出現, 還是英文字幕。
後來都交給 codex, 免費方案本來以為用沒多久就要等 cd 時間, 結果一直到成功簡體中文化, 都還可以繼續用, 免費的額度有這麼多嗎?
20261106 02:00 終於有一些成果了, 包含 AI CD 時間 (免費額度比較容易耗完), 大概花了一個禮拜。看別人搞中文化怎麼像喝水那麼容易, 我卻弄的好辛苦, 最後還是要靠簡體中文的資源才成功。
目前的作法是把英文版簡體中文化, 比較好的方式是能提供簡體中文切換, 但目前沒有頭緒, 選單能切換的只有語系的語音。
时光之刃 汉化组汉化补丁v5.0 這版可以正常 patch。
 |
| fig 5. 繁體中文, 但沒有對應繁體中文字形, 所以變空白 |
 |
| fig 5. dump ui/fonts.1080.bin font |
[修改中文化相關檔案]
bot.vromfs.bin - 翻譯資源檔案
fonts.*.bin - 字型檔案
list 5. vromfs_unpack.py 是解包程式, bot.vromfs.bin 解開後會有 list 6 這些檔案。
lang 下 *.csv 就是各語系的檔案, 把英文相關文字改成繁體中文, 這樣就完成繁體中文翻譯, 然後打包回 bot.vromfs.bin, 就完成翻譯的部份。
list 7 L1 可以看到每個支援的語系, 就是用不同語言這樣列出來, 把 L11, 改成 L11.5 這樣就完成一個繁體中文翻譯, 很簡單吧, 不簡單的是有很多檔案要改, 出動 ai agent, 一個人輕鬆搞定。
list 8 是翻譯後的樣子, 翻譯好了之後, 還需要字型, ai agent 有成功解出字型規格, 之前就是卡在這。
fonts.1080.bin 1080 是和解析度有關, 1920x1080 就會載入 fonts.1080.bin, 如果是別的解析度, 就會載入相對應的字型檔案。
extract_tc.py 會去 bot_vromfs_tw/lang 目錄下抓出用到的繁體字存成 tc.txt。
build_tc_font.py 會依照 tc.txt 把所有解析度字型建立起來。
繁體中文是用 Noto Sans CJK TC 轉出來, 也可以選不同字型來產生, 不過 Noto Sans CJK TC 還蠻好看, 就不特別換了。
list 12 可以測試產生的繁體中文有沒有正確。render_jap_bitmap.py 從會從 out/480/fonts.480.bin 找出指定的中文字, 存成 bmp 檔案, 若有缺字, 呈現空白。
 |
| font.480.bmp |
 |
| font.1080.bmp |