上次我們提到了這個公式:
從實際出發,我們可以從TLP中觀察字庫來計算出編號的差值,而K從表面上來看我們只能確定的是一定小於等於1,所以就需要對K進行一些猜測。接下來介紹一下什麼叫相對搜索:相對搜索就是指不知道具體的搜索值,而只知道幾個值之間的差(例如:a b c 三個數,我們事先並不知道這三個數的具體數值,只知道a-b=5 b-c=6),因此我們就利用這其中的差值作為條件來進行搜索,這樣的搜索方式就叫「相對搜索」(或「差值搜索」)。比如搜索條件是「0,5,6」,可能搜索出來的結果有很多個,像「0,5,6」、「2,7,8」「10,15,16」等等。這種相對搜索方式正好適合我們所知道的條件。先來看看搜索工具《增強差值搜索器》:
全都是中文化的,傻瓜式的操作沒啥需要特別說明的地方。
--------------------------------------------------------------------------------
下面我們來找找上一節中《光明之魂2》裡的那句話「キャラクター……」的位置。
首先我們打開TLP定位到字庫的範圍內,使窗口左上角第一個Tile位於字庫的最開頭,經過觀察得知那個圓圈A就是字庫的開頭。將這個字符的第一個Tile出現在左上角位置(記得微調的時候使用[Ctrl]+左右),並記下這個位置的地址0x8D94E8。
接下來打開《字模精靈組合器》工具,並打開GBA文件和一個調色板文件(用VBA隨便導出一個吧,只要能看清楚就行)。然後再在起始地址框中輸入開始記錄的地址,不過需要注意的是這裡需要輸入的是10進制地址,把開始記下的地址先轉換一下(使用科學計算器吧)得到9278696。因為字符是16*16的結構,所以在窗口右邊選擇「16*16 1」模式,點擊「顯示」後出現這樣的畫面:
我們需要利用這個工具來計算字符序號的差值,雖然我們不知道每個字符的準確序號,但公式中只需要差值就可以了。窗口左邊的位置可以幫我們計算出差值,只要把鼠標指針懸停在字符上就可以出現這個字符的相對值(相對於左上角第一個字符的值)。首先把鼠標放到字符「キ」的位置上得到「位置 57」記下來,接著是第二個「ャ」得到「位置 98」,依次類推。最後得到的記錄是「57 98 77 58 60」。接下來切換到《增強差值搜索器》的窗口。其中「搜索模式」我們先來試試「雙字節」,我們記錄下的是16進制值,所以「值類型」選擇16進制,其他地方先暫時不用去改變它。最後剩下「值」這一欄就是填寫差值的。在上面的公式中我們缺少的K值只能靠猜測得到,最簡單的猜法就是設想「字符編碼」的改變量恰好為「字符序號」改變量的整數倍(再怎麼說程序員也不會清高到使用浮點吧),最簡單的整數倍就是1。既然如此我們就先假設「△字符編號」等於「△字符編碼」,於是在「值」這一欄中依次輸入「57 98 77 58 60」,輸入一個數按一次添加,最後點擊最下面的「開始搜索」。稍微等一會兒,「搜索結果」裡面就會出現
一些搜索出來的結果。最左邊的表示結果的地址,箭頭右邊的表示從該地址開始的文件的真實內容值(16進制),我們可以清楚地看到搜索出來的結果每兩個數之間的差值剛好和「57 98 77 58 60」一致,現在你應該更深刻地體會到什麼叫相對搜索了吧。不過還是不要歡喜,因為我們一開始就是假設的K=1的,倘若K不是1,那麼我們找到的並不是正確的地址,況且現在一共出現了4個符合我們條件的地址。所以,再接下來就應該驗證一下這些地址到底是不是我們想要的。至於怎麼檢驗我就不多提的,基本方法就是利用UE編輯器對這4個地址的內容逐一修改看效果(注意備份)。運氣十分的不錯,我把0x38B010這個地方向後延續的幾個值都改為了58H(用雙字節表示)
保存後,接著在模擬器中打開,出現了如下結果:
屏幕上相應地也出現了4個「キ」,這總可以慶幸一下了,呵呵。
慶幸完了再來看看剛剛修改的內容,你應該能明白0058H是什麼意思了吧?不錯,那就是「キ」字符所對應的編碼。千萬不要放棄這個關鍵位置,很多信息就得靠他來提煉出來呢。把 00 58 改為 00 59 ,在屏幕上又出現了「ク」字符,對照《字模精靈組合器》所顯示出來的字庫,由此看來「△字符編號」和「△字符編號」的確相等,我們猜測的K=1是完全正確的。既然我們得到了「キ」字符的編號又知道K=1,想要知道其他的字符的編號就迎刃而解了。看到這裡你已近會改字庫也會改文字編排了,理論上你已經具備了漢化遊戲的基本能力了。瞭解了這麼多信息後,你還需要整理一下整個遊戲的文字情況。就是查清遊戲哪些地方使用的是圖片文字,哪些地方使用了文本文字等等信息。這些信息也是至關重要的,千萬不能省略這些細節方面。
小結:
這一節內容主要講解了如何利用相對搜索來獲取字符編碼的過程,其分析過程比操作過程更為重要,因為這一部分內容很多時候都帶有一定的猜測,一旦猜測不好的話結果是不會出來的。而且這裡的猜可不是腦筋急轉彎那樣胡亂猜,必須經過事先的一系列分析才可以,反正盡一切可能從文件中多提取信息。甚至有時候還需要通過模擬器搜索內存的值,如果你對遊戲動態修改比較在行的話,在搜索文字編碼的時候還可以想到另外一種方法,就是利用《金山遊俠》《EmuCheat》這些工具來查找內存值的變化,從內存中或者遊戲的存檔.sav中有時候也能有所收穫的。在這裡就不提供具體操作方法了,提示一點:很多遊戲在開始的時候都需要輸入玩家姓名的。
雖然這種方法只能搜索出文字的編碼,但只要把每個字符編碼都確認後再把句子字符串轉換成編碼串來查找(這裡當然是UE的普通搜索了,頭腦一定要清晰)。在實際操作過程中大家一定不可能像這一節介紹的那麼順利,因為這是教程,所有的材料都是事先設計好了的,就連猜的K=1也是如此,所以大家遇到困難是很正常的,要平常心對待。另外還需要補充說明一下關於那個K的問題——K其實可以理解為字符編號和字符編碼的關係,多想想就不難知道「△字符編碼」一定是「△字符編號」的2n倍。說得具體點,仍然以「キャラクター……」這句話,開始我們假設為K=1,所以得到「57 98 77 58 60」,如果這樣子搜索不到結果就設K=1/2,得到「AE 130 EE B0 C0」,還搜索不到就設K=1/4、1/8等等依次類推。搜索的時候還得注意盡量多添加幾個字符來作為搜索條件(一般5-7個字符),並讓幾個字符距離不要太遠(太遠了不便於計算)。有些時候編碼並不一定只採用單字節或者雙字節的單一編碼,單雙混合編碼也很常見,程序員喜歡把英文字符和日本假名設計成單字節再把日文漢字設計成雙字節(例如《SD高達》),所以搜索的時候也要注意搜索的字符最好屬於同一類型的。搜索方法是多種多樣的,大家靈活一點還能想出更多更多。
本章節使用到的附檔工具:
增強差值搜索器 1.2修正版 下載
TLP v1.1 下載
字模精靈組合器 (簡中,請使用Apploc)
留言列表