[閒聊] Quest 一體機 UE4 簡中遊戲繁體化

看板 VR
作者 hsz0566 (HSZ)
時間 2024-09-07 07:22:17
留言 0 ( 0推 0噓 0→ )
[教學] Quest 一體機 UE4 簡中遊戲繁體化 這幾個月嘗試學習 UE4 引擎製作的 Meta Quest 一體機遊戲繁體中文化,並將學習成果 撰寫成教學文,本來預計根據困難程度由淺至深整理三篇: (已發表)Lv1. 已經有簡體漢化補丁,轉換成繁體中文化更新檔 https://forum.gamer.com.tw/C.php?bsn=60606&snA=4213 (已發表)Lv2. 已經有簡體漢化破解安裝版,提取文本簡轉繁製作繁體中文化更新檔 https://forum.gamer.com.tw/C.php?bsn=60606&snA=4237 (未發表)Lv3. 只有原版無中文,提取文本翻譯完製作繁體中文化更新檔 不過最近熊熊想到,介於 Lv2 和 Lv3 之間應該還有一個難度,姑且稱之為 Lv2.5, 也就 是: 「Lv2.5 正版即支援簡體中文,提取文本翻譯完製作繁體中文化更新檔」 理由是:因為非官方的簡體中文版,拆包 obb 文件後,裡面通常已經存在 “遊戲名_p.p ak” 的文本 + 字型檔,只需要針對文本簡轉繁並以繁體字型替換就可以了。而官方如果 已經支援簡體中文,就需要在解包 “遊戲名.pak” 的過程中找到實際的文本和字型檔進 行簡轉繁,再逐步打包成 “遊戲名_p.pak” 和 更新檔 / 補丁 形式的 obb 文件,試誤 的機率和步驟會稍微多一點點。 本篇教學文就針對 Lv2.5 的步驟做說明。(一樣強烈建議先閱讀過 Lv1 & Lv2 再閱讀 Lv 2.5, 因為先前描述過的詳細步驟會以較簡單的方式帶過) 》前置作業 1. 安裝 Java Runtime Environment (JRE, Java 運作環境) https://www.java.com/zh-TW/download/manual.jsp (建議 32/64 位元版本都安裝比較保險) 2. 安裝 .NET 8.0 或更新版本 (因為 FModel 需要 C# 運作環境) https://dotnet.microsoft.com/zh-tw/download/dotnet/8.0/runtime 3. 下載 FModel 拆包工具 (優點是可以先瀏覽 pak 的內容,再針對需要的部分解包) https://github.com/4sval/FModel/wiki/Installing-FModel 4. 下載加密遊戲獲取 AES key 的工具 (有些 pak 被加密過,需要金鑰才能正常解包) https://myppt.cc/jwMS2D 5. 下載安卓手機程式「超級備份」的 apk 並透過 SideQuest 側載於 Quest 內 https://apkpure.com/tw/super-backup-restore/com.idea.backup.smscontacts/amp (如果 pak 被加密,解密前需要先從 apk 安裝檔內提取 libUE4.so 檔案) 6. 已安裝解壓縮軟體如 WinRAR 》操作步驟(在此以《Fracked 壓裂》為例,這款遊戲剛好是正版即支援簡體中文字幕) 一、解包 obb 檔和 pak 檔 1-1. 安裝完正版遊戲後,透過 SideQuest 把 Quest 內部儲存空間/Android/obb/com.nD reams.FrackedAppsLab 資料夾內的 main.com.nDreams.FrackedAppsLab.obb 複製到電腦 中 1-2. 透過 WinRAR 開啟 main.com.nDreams.FrackedAppsLab.obb 並解壓縮,得到 \Blac k\Content\Paks\Black-Android_ASTC.pak 1-3. 這邊若採用 Lv1. 教學的 2-2 解包 pak 可以成功,就能直接跳到「二、文本簡轉 繁和字型檔替換」,但這款遊戲剛好是有加密的 pak, 需要搭配 AES key 解密工具才能 解包 pak 1-4. 解壓縮前置作業 4. 的解密工具,裡面有兩個程式:AES_finder_0.9f (PC / PCVR 遊戲用) 和 AES_finder_mobile_0.9e (一體機 / 安卓 遊戲用) 使用方法很簡單: PC / PCVR 遊戲直接把程式放到含有 xxxx-Shipping.exe 的資料夾(通常是 遊戲名\工 作室\Binaries\Win64\工作室-Win64-Shipping.exe),雙擊 AES_finder_0.9f.exe,幾 十秒就能取得。(同資料夾會出現 key.txt) 不過這次要處理的是一體機遊戲,因此必須先在 Quest 的不明來源執行超級備份,並使 用「備份應用程式」的功能備份《Fracked》,得到 apk 安裝檔並複製到電腦,然後用 W inRAR 開啟 apk, 提取 lib 資料夾中的 libUE4.so,然後將 libUE4.so、Black-Android _ASTC.pak 和 AES_finder_mobile.exe 放到同一個資料夾,雙擊exe,說明上寫著根據你 CPU 的性能,大概10 - 40 分鐘可以獲得 key.txt (我是五年前的筆電,大約 72 分鐘 得到金鑰)。 打開 key.txt 後,裡面的金鑰是 hex 格式不能直接使用,要先透過以下網站把 hex 轉 換成 base64: https://base64.guru/converter/encode/hex 我在得到金鑰後嘗試用 UnrealPakSwitchv10 解包仍然失敗(註 1),因此以下的步驟使 用評價更好的 FModel 解包工具 1-5. 執行 FModel.exe, 第一次執行時會跳出小藍視窗,選「其他資訊」、「繼續執行」 ,然後在 Directory Selector 視窗內的 Directory 選擇 Black-Android_ASTC.pak 所 在的資料夾,然後按 OK, 可能會出現重新啟動 FModel 的視窗,按確認即可。這時左側 的 Game Archive 就會出現 Black-Android_ASTC.pak, 但狀態是紅燈,表示缺少 AES ke y 無法看內容。點選左上角 Directory -> AES, 然後複製步驟 1-4 得到的 key (0x 開 頭的 Base64 格式編碼), Ctrl + v 貼上,確認,就能看到狀態變綠燈,可正常讀取。 1-6. 雙擊亮綠燈的 Black-Android_ASTC.pak, 可以看到 Black 和 Engine 兩個資料夾 ,選擇 /Black/Content/Localization/Game/zh 然後按右鍵 Export (目的是得到 Game. locres 文本檔), 再選擇 Engine 然後按右鍵 Export (需要 Engine 資料夾才能成功打 包), Export 匯出來的檔案都在 FModel.exe 程式同資料夾的 \Output\Exports 裡面 https://youtu.be/LN1oUX9Ql-4
二、文本簡轉繁和字型檔替換 2-1. 從步驟 1-3 或 1-6 得到的 /Black/Content/Localization/Game/zh/Game.locres, 可透過 Lv2 教學的 2. 文本簡轉繁得到新的 Game.locres, 不過在匯出 csv 文本文字 時要注意資料筆數和 Powershell 視窗中顯示的 Strings 數量是否一致,譬如這款遊戲 是 1255 strings, 但用 Excel 檢視內容時,會發現多了 20 幾列,實際檢查會發現原來 有好幾個文本自動跳行,導致上一列的 Source 欄出現在下一列的 Key 欄,而下一列的 Source 和 Target 都是空的。解決方法很簡單,只要把下一列的 Key 值剪下並貼在上一 列 Source 欄的最後面即可,然後再將已經完全空白的下一列刪除,最後就能得到剛好為 1255 的資料筆數 2-2. 這款遊戲的 Black 資料夾內沒有 ufont 字型檔,而是在 /Engine/Content/Engine Fonts/Faces/ 資料夾內,有六個: DroidSansFallback.ufont RobotoBold.ufont RobotoBoldItalic.ufont RobotoItalic.ufont RobotoLight.ufont RobotoRegular.ufont 全部用繁體字 ttf 去取代(詳 Lv1 教學 3-7 步驟) (全部取代的理由見註 2) 三、打包 pak 檔和 obb 檔 3-1. 把 FModel.exe 程式同資料夾的 \Output\Exports 裡面的 Black 和 Engine 兩個 資料夾移動到 UnrealPakSwitchv10 資料夾內(雖然現在不用它解包,但打包還是需要) 3-2. 在 UnrealPakSwitchv10 資料夾內建立一個文字檔 lista.txt, 內容是: "../../../Black/Content/Localization/Game/zh/Game.locres" "../../../Engine/Content/EngineFonts/Faces/DroidSansFallback.ufont" "../../../Engine/Content/EngineFonts/Faces/RobotoBold.ufont" "../../../Engine/Content/EngineFonts/Faces/RobotoBoldItalic.ufont" "../../../Engine/Content/EngineFonts/Faces/RobotoItalic.ufont" "../../../Engine/Content/EngineFonts/Faces/RobotoLight.ufont" "../../../Engine/Content/EngineFonts/Faces/RobotoRegular.ufont" 3-3. 用 Lv1 2-2 的方法得知引擎版本是 11 or 11.27, 因此用 pack-v11.cmd 打包(原 因詳見 Lv2 教學步驟 5-1) 3-4. 把 newpak.pak 改名為 Black-Android_ASTC_p.pak 3-5. 建立一個新資料夾結構: \Black\Content\Paks\ 並把 Black-Android_ASTC_p.pak 移動到 Paks 裡面 3-6. 在 Black 資料夾按右鍵加到壓縮檔,務必選擇 ZIP 和「僅儲存」,參考 Lv1 教學 步驟 4-3, 即可得到 Black.zip 3-7. 把 Black.zip 改名為 patch.com.nDreams.FrackedAppsLab.obb 即得到繁體中文化 更新檔(命名規則參考 Lv2 教學的最後補充) 3-8. 把 patch.com.nDreams.FrackedAppsLab.obb 複製到 Quest 的內部儲存空間/Andro id/obb/com.nDreams.FrackedAppsLab, 再執行遊戲就是繁體中文版了!(複製前先執行 過一次遊戲,至少進到標題選單再退出,否則可能會卡在一開始的 logo 畫面) https://youtu.be/ZRsWdzYo-nw
參考資料: B 站 逗逗米玩啊 大大的教學影片 https://www.bilibili.com/video/BV1PF411p7G4/ AES tools 來源與討論 https://cs.rin.ru/forum/viewtopic.php?f=10&t=100672&hilit=aes https://www.deviantart.com/artinkers/art/ue4-Updated-Aes-Keys-840377092 (內含一些 UE4/UE5 的金鑰,如果你想解包的加密遊戲有出現在裡面就能直接用,毋需 再花時間解密) 註 1:步驟 1-4 輸入金鑰後仍然解包失敗,經逗逗米玩啊大大指點改用 FModel 的對話 Q: 大佬您好,我近期遇到一個有加密的 pak 文件,使用您提供的 加密游戏获取AES key 的工具 之後得到 key.txt, 然後透過以下網址轉換成 Base64: https://base64.guru/converter/encode/hex 並編輯 crypto.json (把 DUMMY 換成 key 值) 版本是 11 or 11.27, 嘗試解包後,發現 key 應該是對了,但有非常多檔案只有 0 kb, 譬如 Engine\Content\EngineFonts\Faces 裡面的 ufont 全是 0kb, 遊戲名\Content\Localization\Game\語言\ 裡面的 Game.locres 也全是 0 kb 查看 lista.txt, 應該是有占空間的,譬如: LogPakFile: Display: "Black/Content/Localization/Game/zh/Game.locres" offset: 3009865709, size: 43807 bytes, sha1: 791B0D603729CC3E86A0DEF37E540B4EFC7C26F7, compression: Oodle. 有看到解包過程出現 error: LogCompression: Error: FCompression::GetCompressionFormat - Unable to find a m odule or plugin for compression format Oodle 請問大佬有遇過這問題嗎?謝謝 A: 用fmodel直接导出。脚本有时候会比较麻烦。导出速度也不慢。如果是安卓移动端的 ,直接反编译Apk 查看xml,一般就能确定引擎版本。pc端直接右击游戏启动程序一般就 能查看到游戏版本。 註 2:採用最懶的方法,把 ufont 全部替換為繁體字型最不會出錯 Q: 大大您好,想請教一個問題:很多漢化補丁pak都是包含兩個檔案 1. game.locres 2. ufont 不過在 Content\UI\Fonts\ 文件夾裡面有很多個 ufont 檔 請問我們在漢化的時候,要如何判定需要替換哪一個呢?謝謝 A: 一种最懒的全部替换,一种是用引擎自己制作根据需要调用字体,不用理会原来游戏 的UFONT字体,自己新增就好。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.195.46.1 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/VR/M.1725664953.A.464.html

留言

※ 編輯: hsz0566 (42.73.206.240 臺灣), 09/07/2024 08:57:23