前面幾篇比較在講漢化工具本身架構的修繕,功能是把已有的漢化檔案(陸版or漢化版)原封不動的導進新的檔案裡、修改上是比較沒彈性的。
比如說若想要修改某些字句則需要在程式裡特別新增一些判斷式,藉此匡列出想更動的地方進行修改、整個過程實際上很繁雜瑣碎的。
舉例一下,修改"加油塔塔露"這個喊話任務,想要將喊話內容改回英文。首先用SaintCoinach內附的Godbert這個TOOL先手動尋找任務代號是GAIUSE314_01455,位置再//quest//14//,然後喊話內容的劇情ID是TEXT_GAIUSE314_01455_TATARU_SAYTODO_000。查出這些條件後,再回到程式碼裡添加這些判斷式,讓漢化程式執行到相關部分時會依照判斷句找出其ID並套入指定字句。
(SaintCoinach : https://github.com/ufx/SaintCoinach)
...
//設定判斷式 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版怎麼改或是翻譯時怎麼處理指令句吧。