前往
大廳
主題

如何製作漢化工具.4

Q拔 | 2021-02-01 13:53:45 | 巴幣 2114 | 人氣 5481

前面幾篇比較在講漢化工具本身架構的修繕,功能是把已有的漢化檔案(陸版or漢化版)原封不動的導進新的檔案裡、修改上是比較沒彈性的。

比如說若想要修改某些字句則需要在程式裡特別新增一些判斷式,藉此匡列出想更動的地方進行修改、整個過程實際上很繁雜瑣碎的。

舉例一下,修改"加油塔塔露"這個喊話任務,想要將喊話內容改回英文。首先用SaintCoinach內附的Godbert這個TOOL先手動尋找任務代號是GAIUSE314_01455,位置再//quest//14//,然後喊話內容的劇情ID是TEXT_GAIUSE314_01455_TATARU_SAYTODO_000。查出這些條件後,再回到程式碼裡添加這些判斷式,讓漢化程式執行到相關部分時會依照判斷句找出其ID並套入指定字句。

    ...
    //設定判斷式 if //quest//14//GAIUSE314_01455 的位置
    if("EXD/quest/014/GAIUSE314_01455 .EXH".equals(replaceFile))
    ...
    ...
    if("TEXT_GAIUSE314_01455_TATARU_SAYTODO_000".equals(TEXT)) //ID  //實際上替換時會複雜點,讓我象徵性帶過吧...
    {
        newFFXIVString = ArrayUtil.append(newFFXIVString,"Tataru".getBytes("UTF-8")); //將喊話任務的塔塔露改英文Tataru
    }

這邊整理一下整個流程...

1. 打開"已漢化過的版本"與"國際版原版"檔案。
2. 同步提取兩方的資料藉此保持資料對齊。
3. 一筆一筆字句提出來並檢查漢化版是否有中文字串,是的話替換掉國際版的字串,又或是根據判斷式換成自行修改的字串。  
4. 以此類推不斷重復將整個處理完後存檔。

可以看到這樣的做法會花上許多時間,尤其在步驟3上、除了找到正確字句位置所需費時外,也會在程式碼內增加一堆條件式讓整個流程變得繁瑣又不直覺,甚至修改之後又得再移除不需要的部分、若是想部分恢復也是麻煩。早期再翻譯測試修改時都對這步驟感到非常頭痛、尤其各種IF ELSE一多起來就容易衍生出新BUG!!

後來為了方便處理這問題,就利用SaintCoinach可以輸出CSV文件檔的功能改寫一版能匯出資料的版本,而漢化程式本身當然也要改寫支援CSV。因為資料架構明確,前篇一直提到的劇情錯位的問題也在這版得到了修正。

CSV檔是種文件格式的檔案,以文字檔的方式直觀地呈現,所以這樣在修改上會大大的方便使用,因為任何文書編輯軟體都可直接修改他。

貼一下匯出成CSV格式的塔塔陸任務片段。

104,"TEXT_GAIUSE314_01455_TATARU_000_131","不过……<hex:02100103>刚才真是吓死我了……<hex:02100103>摩杜纳……真是个恐怖的地方……"
105,"TEXT_GAIUSE314_01455_TATARU_000_132","看来我以后还是不要单独行动了……<hex:02100103>下次采矿时,我一定会拽上一个人跟我一起去。"
106,"TEXT_GAIUSE314_01455_TATARU_000_133","哎……发家致富之路还真是险峻……<hex:02100103>不过我是不会轻言放弃的!<hex:02100103>为了把这石之家变成黄金之家,我一定会努力的!"
107,"TEXT_GAIUSE314_01455_POPMESSAGE_000_000","察觉到了敌人的气息!"
108,"TEXT_GAIUSE314_01455_POP_MESSAGE","(★未使用/削除予定★)"
109,"TEXT_GAIUSE314_01455_TATARU_SAYTODO_000","塔塔露"

這樣很方便的看到塔塔露任務字串位置,想要修改只需要用筆記本打開該文件修改成"Tataru"後,再跑一次程式即可將資料導入。

另外這樣還去除掉了原本對漢化檔案(sqpack檔)的依賴,僅靠這些CSV檔就可以執行漢化,因為不用再更動漢化工具,所以連不懂程式的人也可以進行對遊戲翻譯編輯。

好拉、還是要會藍色部分的FF14指令句、這個下面再講。

CSV化的漢化流程:

1. 打開國際版原版"檔案  
2. 提取資料並讀取該檔的CSV  
3. 因字串已處理過故直接替換。(文字編輯器)
4. 以此類推不斷重復將整個處理完後存檔。

可以看到步驟3的繁瑣已經消失了,不過CSV法當然也有些缺點、除了改成CSV版會遇到的基本問題,另外就是版本更新時可能碰到的問題,比如資料欄位改變或是資料位移這類問題也都要再多次修改、無法一個版本吃到底。



再來前面提到的指令句,從上面塔塔露任務片段裡標示成藍色。

<hex:02100103>

這特別的字句是FF14再文字內文中夾帶的指令句,實際上是一些非字元碼的資料,它表示了各種特殊指令。像這個表示空一行的意思。其他還有高亮,斜體,物品道具,人物名稱,性別,甚至IF ELSE SWITCH CASE這類條件判斷句都有、指令相當雜多。

舉幾個栗子,內文中可能會出現...
冒險者 , if "性別" "你好" else "妳好"
像這樣會依據腳色性別而顯示不同字串。

另外也能標示某個物品...
弗弗茶已認可冒險者成為園藝工公會的一員。她似乎要介紹一下園藝工的工作內容。裝備上從弗弗茶那裡獲得的<Sheet(Item, 2545,0)/>,並再次和她對話。

這些指令句在漢化時是非常重要的一個環節,再套用陸板字句或是自行翻譯時都有機會碰到指令句錯誤的狀況。

對,有時陸板也是錯的,因為陸板跟國際版還是差了好幾個版本並不合國際板使用。

可以說幾乎玩漢化版時會碰到的異常問題,都跟指令句錯誤有關。

像是新版本更改了物品的指令而導致物品消失,只能移除漢化才看的到...
又或是遇到區域內有人穿戴新裝備時當機...
之前開優雷卡部分任務時當機...
甚至部隊房屋漢化時不能購買...
一些零零總總隨機性當機都可能跟它有關?
(不過少部分真的是原版的坑拉,像是之前有一版本的副本掉落物會有BUG,造成包包裡有一件看不見的物品無法點選也無法移除,我被朋友懷疑了好一陣子?)


好囉,最近比較忙這篇就先這樣。下篇再來講CSV版怎麼改或是翻譯時怎麼處理指令句吧。







創作回應

EZ25362575
從小屋最新創作來的 以前看過人家改電影台詞 但沒想到這麼複雜的感覺
2021-02-01 19:32:58
Q拔
噗,遊戲類的大多比較封閉,可以想成修改影片內崁的字幕而非srt檔
2021-02-01 20:10:02
萊特亞
不好意思 可以請問一下 <hex:02100103> 這段是要怎麼從原始檔案提取出來? 直接用SaintCoinach好像弄不出來?
2021-12-29 11:26:47
Q拔
我在這邊也貼一下連結好了,避免有相同問題XDD
https://drive.google.com/file/d/1a3008NAzI4-cocAFLkbflhFHnlnl8Z5f/view?usp=sharing
不過我這版有破壞掉HEX原本的結構,所以比較推薦GP大的修改方式。
2021-12-29 22:55:09

更多創作