close

下個定義:文本腳本——文本內容依照指定的編碼所對應的十六進制數字串。例如上一節找到「キャラクター……」的腳本「 58 00 99 00 78 00 59 00……」。從這一段的特徵上我們可以判斷出「0058」對應「キ」、「0099」對應「ャ」等等,依此類推就可以得到該遊戲的全部文字編碼。得到了所有文字的編碼後就可以編寫程序,讓電腦幫我們把這些數字化的文字給轉換出來(導出)便於日後翻譯,在翻譯完後還要利用程序把翻譯好的內容導入遊戲程序中。文本腳本的導入導出實現的手段相對比較多,如多你稍微有一點編程能力的話還是最好自己編程,畢竟每個遊戲都有每個遊戲的特殊性(見得多了自然就會感覺到的)。如果實在沒有這個能力只有借助現成的工具了,比較常用的就是《Script Extractor》和《Script Insertor》,兩者是雙胞胎前者導出後者導入,無論你採用自編軟件還是使用《SEX/SIN》都需要編寫一個碼表文件。前面說過編碼的集合就是碼表,導入導出工具程序根據碼表說明的對應關係來轉換數字和字符的,碼表就如同一本數/符字典。

碼表編寫很簡單,Windows的記事本程序就可以編寫了,格式上不同的工具會有不同的要求,如果是自己編寫的處理程序格式可以自己定編寫格式,不過最好還是採用目前通用的書寫格式比較好。通用格式為:
 
(字符編碼1)=(字符1)  
(字符編碼2)=(字符2) 
(字符編碼3)=(字符3) 
 
編寫的時候一般是按照編碼從小到大的順序編寫的。以下是我書寫的《光明之魂2》碼表的部分內容:



《光明之魂2》的原始字庫有七八百個字,一行一行地寫也確實費事,書寫的時候注意積累經驗。小技巧:先用EXCEL(不會沒用過吧?)創建形如這樣的表格:



  然後往下使用粘貼複製**,一分鐘就能搞定所有的編碼了。接下來再對照《字模精靈組合器》裡顯示的字模一個字一個字地輸入C列(老實點吧,這裡就別想著用程序幫你寫了。電腦把字庫當圖片了不會認識的。OCR可是世界難題喲,如果你真的寫出這段程序的話就平步青雲了,呵呵!!)。《字模精靈組合器》是設計成16*16字的顯示模式並伴有顯示字符位置的功能,每寫一大段就對照一下位置,剛好可以避免遺漏掉字符(錯位了可不得了呀,導出的文本會大變樣)。等所有的字符都寫完後就把全部內容粘貼到記事本中,最後替換掉製表位空白(TAB)就可以了。寫完後一定要檢查最後一個編碼,代入遊戲中看是否正確。檢查完畢後就可以保存下來了,tbl是碼表的公認擴展名,其實個人認為txt也未嘗不可,兩者的實際內容是一樣的,而且這樣更便於查看編輯。


  在《光明之魂2》的文本腳本之中你還會發現一些形如「FFF?」這樣的編碼,而這些編碼在遊戲中並沒有具體字符與之對應,而是出現的主角名字、字符顯示速度減慢、換行、分段等等的控制功能,這樣的編碼稱作控制符。寫碼表前不僅要摸清楚每個字符的編碼而且還要弄清楚遊戲中有多少控制符,每個控制符的具體功能是什麼。我所研究出來的是:F5FF=主角名、F6FF=主角名、F7FF=數值、F8FF=恢復速度、FAFF=慢速、FCFF=主角名3、FFFF=換行、FEFF=塊結束、FDFF=段結束等等。至於這些控制符該不該往碼表文件裡面寫就要看程序是怎麼設計的了,絕大多數程序都是要求從外部鍵入換行分段這些關鍵控制符的,其他只影響文本顯示的控制符一般就寫入碼表,同文本一併導出。對於像減慢速度、變換字體顏色這樣的控制符無法在導出的純文本文件中體現,就可以將它們用特定的符號表示,自己記清楚哪種符號表示什麼。還有一些不知道功能的控制符也可以用某個特別符號來表示,如果這樣的控制符很多的話道出文本鍾就會相應地出現過多的符號不便於瀏覽翻譯,這時可以讓程序把這些未知的控制符的值輸出到導出文本中就可以的。不過要注意,因為這些文本在翻譯後還要再次導入遊戲中,同樣需要靠工具程序完成,因此在設計導出程序的時候盡量考慮一下導出時候的處理,例如對未知控制符的值在導出的時候就可以加上「[ ]」符號括起來等等,導入時候程序判斷到有這個符號便照中間的內容直接寫入遊戲中,而不用轉換。辦法都是自己想、自己定,初次接觸難免有考慮不周的地方。

  碼表做好後接下來就該搞清楚遊戲ROM中哪些才是腳本內容?我們該導出哪些?一般地說在遊戲文件中文本腳本都是一句接一句地放在一起的,構成腳本區。可能所有的文本腳本都放在一起也可能腳本會分割成幾個大的段分別來放置,前者為數更多。只要我們找到了一段腳本區的最開始就可以順次導出了,所以找出腳本頭是最關鍵的。至於查找實際上是不用什麼特殊工具來完成的,在這裡靠工具不如靠自己肉眼觀察。這次我們從《光明之魂2》第一關的第一句開始找起。
 


到了這裡大家已經整理好了碼表,所以就可以把這句話直接翻譯成編碼後用《UE》查找就可以了,完全不用上一節介紹的方法,那樣操作太複雜了。大家頭腦一定要清晰,我們所做的每一步都是由針對性的。兩分鐘搞定,查找到0x368578,這就是句子的開始。根據一系列的試驗我們發現一句話的構成:開頭4位「00 00 01 00」為腳本句子的開頭(在與NPC對話的時候這裡標示說話人頭像的代碼),然後緊接著就是句子主體,其中還包含一個換行符「FFFF」(因為遊戲文本區顯示14*2個字符。由於該遊戲並沒有自動處理換行的程序,換行是靠控制符實現的),「FDFF」是一段的結尾符。等我們總結出腳本的特徵後就在附近瀏覽看看哪些地方還有這些特徵,有這個特徵的多半就是文本。經過一陣的觀察發現從0x368574以後的很大一塊區域具有該特徵並具有連續性,而這之前的區域沒有這個特徵。 


  基本上就可以認為0x368574就是腳本的開頭了,起碼應該是這一塊腳本的開頭。至於還有沒有其他的先可以不考慮,等到文本導出後再說。至於腳本的結尾到不用太在意去找了,導出的時候多導出點超出也沒什麼關係,大不了把後邊的多餘部分刪除掉就完事了。 
 
  文本腳本導入導出工具強烈建議有能力者自行編寫!這可以讓你更加深入地理解腳本的原理。本人漢化《光明之魂2》採用了PGCG漢化小組自行設計的一套導入導出工具,經過以上分析並編程得到導出文本(片斷演示):

引用
<368578> ‧‧‧ヒソヒソ  
<36858E> ‧‧‧え?そうなんですか? 
<3685B0> シッ! 今‧‧‧物音がしたぞ
<3685D2> あ‧‧‧今の‧‧‧ 私のおなかの音です

  大體上介紹一下《Script Extractor》。《Script Extractor》是使用得比較多的導出工具,該工具是以字節為單位導出數據並轉化為文本的,所有控制符要求寫入碼表中。「line: xx」表示行結束;「msg: xx」表示塊結束;「sect: xx」表示段結束;「prog cont char: xx=...」表示控制符,其他功能可以查看軟件的README,有詳細說明。
 


  從上到下依次輸入的是碼表文件名、ROM文件名、導出文本文件名、導出開始地址、導出文本量(字節)。該工具有個最大的弊端就是導出的文本段沒有註明腳本的地址,這會給導入製造很大的麻煩,好在程序包裡面附帶了C++源程序可以修改,不過不懂C++還是慎用該工具。《Script Insertor》主要功能是導入,操作方法和《SEX》差不太多,具體運用還是查看說明文檔。除此之外還有一款國產的文本工具《菜鳥》,是由漢化者「菜鳥小生」編寫的,功能設計上比較全也比較雜,初學者不太容易掌握。這個工具可以在《遊戲漢化聯盟》網站上下載。

--------------------------------------------------------------------------------

  在這節的最後我再談談計算機編碼的問題。雖然之前我說過計算機編碼和遊戲編碼一點聯繫也沒有,但GBA遊戲最初也是在電腦上編寫的,某些程序員為了編寫效率降低成本也可以說是懶惰、偷工減料,部分甚至全部採用了計算機編碼,如果是這樣的話倒是給我們漢化時編寫碼表帶來了不少方便。字庫編碼是字庫組織的依據,不同國家和地區有不同的編碼標準,和中文字庫有關的常見編碼有:單字節編碼、GB2312-80、GB12345-90、GBK、Unicode編碼、ISO10646 / Unicode字符集、GB18030-2000、BIG5編碼、方正748編碼,下面簡要介紹幾個比較常用的:  
  

  「MS Windows:Windows Latin 1(ANSI)」這是Windows操作系統最基本的默認編碼,在記事本的另存為對話框裡可以清楚地看到這個編碼。  


  「GB2312-80」 全稱是GB2312-80《信息交換用漢字編碼字符集 基本集》,1980年由中國頒布,是中文信息處理的國家標準,在中國大陸地區及海外使用簡體中文的地區(如新加坡等)是強制使用的唯一中文編碼(時不時感到自豪呢?)。在中文Windows3.2和蘋果OS中就是以GB2312為基本漢字編碼,Windows 95/98則以GBK為基本漢字編碼、但兼容支持GB2312。該編碼共收錄6763個簡體漢字、682個符號,其中一級漢字3755個,以拼音排序,二級漢字3008個,以偏旁排序。該標準的制定和應用為規範、推動中文信息化進程起了很大作用。互聯網上的大多數簡體中文網站都是採用這個編碼的,在網頁內查看一下編碼就知道了。在1990年國家還頒布了「GB12345-90」字符集,主要添加了非常用字和繁體字部分,以適用於古籍等的編定。此外中文字庫還有「GBK」、「BIG5」等等,後者在中國香港澳門以及中國台灣得到廣泛使用(知道為什麼以前玩台灣遊戲會出現亂碼了吧?需要切換一下編碼的)。還有一種特殊的編碼「Universal Multiple Octet Coded Character Set(Unicode)」,這是一種包含有中日韓等多國文字的編碼集,是由美國人頒布的(吃飽了就該看好世貿)。 

  「Shift-JIS」、「EUC-JIS」等等這些都是鬼子們國內使用編碼,在遊戲機遊戲中前者更為常見,雖然遊戲本身用不到這麼多字符但不用自己去整理文字了,省事啊。
 
  以上這些編碼的詳細標準以及碼表很為龐大,這裡考慮篇幅不詳細介紹,有興趣可以查看文字處理方面的網站,比如「方正字處理」等等,這是一門學問別小看了。

小結:
  這一節介紹了文本腳本的導出,理論並不深入但過程比較繁瑣,大家要理清頭緒。在編寫字庫的時候又有幾點:日文漢字輸入可以安裝一個日文輸入法,以前95下玩港台遊戲所使用的《南極星》就不錯,Windows自帶的字符映射表也可以,裡面有所有日文字符的(還有尼加拉瓜文字?厲害)。書寫編碼的時候也要注意到導出工具的特徵,是不是需要高低反等等,就拿上面我編寫的那個《光2》碼表來說,由於導出工具是以字節為單位讀取數據的(編寫程序上要相對簡單些吧),所以就需要高低反;你自己編寫工具是雙字節的就不需要反了。書寫字符的時候盡量採用ANSI或者GBK,對於遊戲中的特殊符號找不到的可以使用近似符號代替,反正我們又不去翻譯符號,不過還得記清楚符號之間的對應關係。如果漢化的遊戲文本很大,那千萬不要使用《SEX》,因為沒有標出文段地址,而大多數情況下翻譯後的中文句子字符數量遠遠小於日文句子,如果沒有地址標示在寫入的時候只能順序寫入,於是就會發生腳本前移的問題。上面的《光2》文本導出演示可以清楚地看到每句前都有地址標示。自己在編寫工具的時候也一定要記得讓程序標出地址,切記!!。還有就是本節之所以不以上一節的那句「請選擇……」開始查找是因為對話文本的情況最為複雜,控制符也最多,我們在導出文本之前一定要整理出所有的控制符一個都不能漏掉的。還有一個原因就是遊戲的文本腳本一般都是按照出場的先後順序寫進遊戲內容中的,從最開頭的內容找起這樣更容易發現腳本頭部。不知道大家玩了PGCG漢化的《光明之魂2》中文版沒有?遊戲中的文字顯示的時候偶爾花屏甚至造成死機,這全都是因為我當初在書寫碼表的時候沒有分析完整,把其中一個為「FFFE」的控制符給漏掉了,到後來導入的時候恍然大悟,灰心喪氣差點沒氣死,最後還是手工一句一句導入的,不得已採用了一些非常手段,最後還是造成了遊戲運行的不穩定,而VBA模擬器對這個遊戲本身兼容性也有一點問題(絕非推卸,那個飛天的惡魔天使賴著不下來和中文版沒有關係)才使遊戲出現這個BUG。以身說法是為了讓大家知道不在意細節會釀成怎樣的後果?大家一定要細心!

arrow
arrow
    全站熱搜

    ohgi01 發表在 痞客邦 留言(0) 人氣()