(轉(zhuǎn)載)NDS漢化小白教程 —— fengarea(A9VG漢化組)

https://bbs.a9vg.com/thread-501522-1-1.html
第一話:基礎(chǔ)的知識
超執(zhí)刀的工作已經(jīng)進入靜待翻譯進度,JSS也是一個候稿的時候,所以一時閑了一點。
記得很早就說過當(dāng)超執(zhí)刀漢化到一定階段就要寫個教程什么的。所以就到這里噴噴毒了。
這個叫漢化小白教程,不是說這個教程是給小白看的,也不是說看這個教程的就是小白。只是說寫這個教程的人很小白,這個教程能教大家的東西并不多,都是比較小白的東西。當(dāng)然每個人的水平和專長都不一樣,所以說不定里面的一些東西還是有點參考價值的??傊胁煌谆虿蛔闶且欢ǖ?,還望大家多指教。
第一話主要是一些很基礎(chǔ)的知識,后面會陸續(xù)寫關(guān)于圖片HACK,ROM HACK,文本導(dǎo)出導(dǎo)入等部分。當(dāng)然寫教程截圖比較麻煩……所以不知道什么時候才能完成,希望各位慢慢等待了。
廢話少說,那么開始吧。
一、干嘛要漢化
每個人做漢化的理由的不一樣,挑戰(zhàn)自我,服務(wù)群眾,純粹為好玩……當(dāng)然結(jié)果是一定的,不少玩家能在漢化中受益,能以自己引以為豪的母語來更好地體會游戲的樂趣。我要說的是,一個漢化工程,即使是半途而廢,但也是非常有意義的,就是在其中可以學(xué)到不少游戲知識,里面的漢化經(jīng)驗都能未未來的漢化開創(chuàng)更好的道路。所以有能力的朋友,請多多加入漢化的行列,無需顧慮太多,每一分參與都將為漢化界帶來動力。我這個水平也要寫這篇教程獻丑,也是因為想鼓勵更多朋友加入到漢化工作中。
二、漢化需要什么人才?
答案是:任何人都需要!
????漢化是一個復(fù)雜的綜合工程。每一個環(huán)節(jié)都需要不同的人幫忙,相對的,不同特長的人都能加入進來。
????如果對編程,或者修改游戲比較有心得的,可以加入到ROM HACK的部分。
????如果對翻譯比較有能力的可以加入到翻譯的部分。
????如果對改圖比較有心得的,可以加入到美工的部分。
????如果對語言能力比較有自信的,可以加入到潤色的部分。
????如果對統(tǒng)籌能力比較有自信的,可以加入到項目運作統(tǒng)籌的部分。
????如果對耐心比較有自信,可以加入到文本整理的部分。
????如果對自己游戲能力比較有自信,可以加入到游戲測試的部分。
????總之任何人都可以加入到漢化工作中,漢化工作也需要任何人。
當(dāng)然,漢化項目最重要的是耐心與責(zé)任心。有機會加入到漢化項目里面相信就會明白這話的含義了。
以致于我經(jīng)常有這個感覺:一個漢化游戲能否成功,關(guān)鍵并不在于技術(shù)力,而在于怨念的強度……
我們漢化組的群我改名為手術(shù)室,一方面是因為漢化是關(guān)于《超執(zhí)刀》這個手術(shù)游戲,另一個方面也在于提醒自己漢化是一個團隊的合作,自己對一起戰(zhàn)斗的小組成員有責(zé)任,對手術(shù)臺上面的游戲也有著責(zé)任,絕不能輕易放棄!
那么廢話少說,正式開始教程部分,下面我會針對不同的部分分別寫些教程(或流程),首先的是ROM HACK的部分。
三、ROM HACK是什么?
ROM HACK就是對游戲ROM進行破解,我喜歡簡稱為ROM HACK,一方面HACK這個詞太崇高了,其實ROM HACK根據(jù)程度不同,可以是很簡單的解讀或者很深奧的深度破解ASM HACK(這才是真正意義上的HACK),一般情況下,漢化并不一定需要這么深入,所以無需說得太玄。令一方面HACK的含義有更多,我比較喜歡的說法就是“HACK=干”。HACK一個ROM就是干與這個ROM有關(guān)的工作。
希望各位能從上面這段不著邊際的話里面看到一些ROM HACK的概念。也就是其實ROM HACK并不一定要求很高,最基礎(chǔ)的是進行ROM的解讀就行。
四、ROM HACK基礎(chǔ)
ROM HACK需要什么基礎(chǔ)呢?其實一個修改過游戲,對16進制有點認(rèn)識的人基本就已經(jīng)具備了ROM HACKER的基礎(chǔ)了。如果你能懂一些編程的基礎(chǔ),那么你就更有可能成為強大的ROM HACKER。
當(dāng)然要正式做ROM HACK,還需要一些基本功。
下面我推薦一些教程,基本我也是從這些教程里面學(xué)習(xí)ROM HACK的基礎(chǔ)的。
分別是:狼組的教程,天使組的教程,PGCG的教程,真空實驗室-yeyezai(實驗小白鼠)的教程。
當(dāng)然這些教程不少并不是針對NDS的,但無論是FC,SFC,GBA還是其他,漢化的不少原理是共通的,尤其是GBA的,對NDS實在太有參考價值了。
另外多泡一些漢化論壇,多跟漢化達人們交流也是迅速提高自己HACK能力的方法。
漢化工作對自學(xué)能力要求也是相當(dāng)高的,從不同的教程中學(xué)習(xí)需要的能力,充實自己吧。
當(dāng)然這些教程也不是要一下子看明白,與其純粹紙上談兵,還不如拿一個ROM研究一下實際。
我推薦的是《超執(zhí)刀》的ROM,這個ROM實在太厚道了,厚道得完全是為漢化初手而存在的一般。
略略充實一下自己之后,就可以到下一部分了。
五、NDS漢化的特殊性
相信很多人有疑問,為什么GBA這么多漢化作品,NDS的這么少呢?
這是因為NDS有著它的特殊性。首先是ROM的變大,讓漢化研究的平臺要求有所提高。
然后是模擬器的不成熟,DEBUG是非常困難的,涉及ASM HACK的完美破解因為常常需要DEBUG數(shù)據(jù),所以不少游戲無法做到完美破解(對于完美主義者是相當(dāng)大的挫折啊)。
也是上述原因,涉及圖片的色版提取,文件提取等都相對比較多困難。
另外,最大的困難莫過于無法很好地進行字庫移動和擴容。
當(dāng)然,由于系統(tǒng)的變化,原來的一些漢化數(shù)據(jù)(即使是非常近似的GBA)也變得不再適用,一些研究又回到原點。這相信也是一個原因。
對付這些問題,自然就需要破解者有更靈活的頭腦,巧妙地化解一些難題,攻克一些新難題??傊畬W(xué)習(xí)能力,恒心,耐心在這時候就意義重大了。
另外,也因為現(xiàn)在NDS漢化資源相對貧乏,如我之前所說的,任何人的一些漢化研究意義也是非常重大的。
六、ROM HACK的主要任務(wù)
ROM HACK需要承擔(dān)的主要是漢化工作的以下任務(wù):有針對性的查找資料做好準(zhǔn)備吧。
1、解讀判明ROM的基本結(jié)構(gòu)
????例如哪里是字庫,哪里是圖片(分別對應(yīng)那些圖片),哪里是文本區(qū),哪里是聲效區(qū)……如果文件系統(tǒng)比較復(fù)雜的ROM,不同文件分別是什么內(nèi)容也要進行判明。
????另外有的游戲不同文本對應(yīng)不同字庫,這些都是需要認(rèn)真確認(rèn)的內(nèi)容。
????有的ROM可能有壓縮過的內(nèi)容,如果這些內(nèi)容涉及漢化的需要,這時還需要進行解壓和壓縮的測試。
????一般這個階段我是會準(zhǔn)備幾張大紙進行詳細記錄的,這樣為以后的工作將帶來很大方便。
2、字庫HACK
????這個是關(guān)系到漢化可能性的最關(guān)鍵部分。一般游戲的字庫有分完整字庫和精簡字庫。完整字庫里面包含了7000多個字符(其中6000多個漢字),而精簡字庫一般只有1000-2000個游戲里面實際運用到的字符。無論那個字庫,由于日語漢字缺乏不少中文常用字,都必須修改,而精簡字庫更需要大改造,甚至擴容。后面的教程會專門針對字庫HACK進行講解,此處暫時打住。
3、文本試驗
????漢化,就是用中文替換原來的日本語內(nèi)容,所以需要對這個替換的可能性進行試驗。當(dāng)然,初步破解不一定要很正經(jīng)的進行文本導(dǎo)出導(dǎo)入,或翻譯修改,只需看看有沒有修改的可能性就行。前面提到的不少教程都有涉及這方面的操作,可以仔細研究。
4、圖片HACK
????這個視乎小組分工不同,如果美工本身有破解能力的話,可以由美工負責(zé)(據(jù)我所知,不少破解都兼任美工,可能ROM HACK本身就需要一定對圖形的敏感吧),作為負責(zé)這部分內(nèi)容,需要注意的主要就是圖片拼組,色版處理等。另外一些需要漢化的關(guān)鍵圖片(圖片里面有需要漢化內(nèi)容的)必須找出來。另外還可能需要為美工做好色版導(dǎo)出,圖片導(dǎo)出等準(zhǔn)備工作。也可以進行一些圖片修改的試驗。
如果上面的部分準(zhǔn)備完成,并測試成功,那么恭喜,這個漢化項目已經(jīng)成為可能??梢哉秸心既瞬藕屯七M下一步工作了。
基礎(chǔ)的東西就先說這么多,下一話就是NDS ROM HACK的利器,CT(CrystalTile)的教程。敬請期待。
第二話:CT教程+ROM解讀
本話主要是針對ROM HACK里面涉及解讀ROM,先讓各位簡單了解一下CT這個工具。
一、CT的強大功能
CT全稱CrystalTile,是由天使組的Crystal在過去的tile工具的基礎(chǔ)上不斷改進的成果??梢哉f是漢化GBA/NDS游戲非常好用的工具。
另外它還綜合了差值搜索,LZ77解壓,等不少有用的功能,而且還特意為漢化NDS游戲進行了優(yōu)化。
另外這個工具的版本還不斷修正更新,我用的是5月中的版本,寫本文的時候又更新了幾個版本了。
其實以前的TILE工具的一些操作在CT上面是通用的,那些工具都有一些網(wǎng)上的教程,但對于沒有接觸過的朋友,也作為CT這個新工具的介紹,所以我這里就專門簡單介紹一下。
下面就是CT的界面:

①的區(qū)域是導(dǎo)航欄的主部分,最主要的是偏址,即偏移地址,另外還有顏色格式,顏色格式關(guān)系到能否正確查看ROM的圖形部分的內(nèi)容,漢化NDS游戲常用的是1bpp單色,GBA 4bpp,GBA 8bpp這幾種
(1bpp單色主要針對的是字庫的內(nèi)容)
②的區(qū)域就是顯示色版,關(guān)系到能否正確顯示圖形里面所對應(yīng)顏色。可以在調(diào)色版菜單里面進行調(diào)整或回復(fù)默認(rèn)。直接點擊里面的顏色,可以進行直接修改。如果是非256色的色板,上部的橫拉桿還可以讀取總色版(256色)的不同部分來進行匹配。
③的區(qū)域是TILE工具,可以進行簡單的TILE修改,同時CT在這里還集成了通過碼表生成字庫的強大功能。(如果平時用不上TILE功能,可以隱去這個窗口騰出工作空間)
中部的就是打開的ROM的內(nèi)容了。
現(xiàn)在ROM是以TILE模式打開的,也就是可以直接觀察里面的TILE內(nèi)容(字模,圖形……)
菜單欄下面是快捷工具欄

分別是
①導(dǎo)出按鈕,這個按鈕可以讓CT導(dǎo)出選定的內(nèi)容到一定格式的文件,常用的是將選定的圖形區(qū)域內(nèi)容導(dǎo)出為BMP文件,但CT的導(dǎo)出功能可不僅限于導(dǎo)出圖片哦。具體的內(nèi)容在圖片HACK教程會進一步講解。本篇只需有個大體概念就行了。
②導(dǎo)入按鈕,對修改好的圖片,例如BMP圖片,導(dǎo)入回ROM里面的指定區(qū)域。
③16進制編輯器快速切換按鈕,可以快速切換到16進制模式
④LZ77解壓按鈕,對選定的LZ77內(nèi)容解壓
⑤LZ77壓縮按鈕,將選定的內(nèi)容進行LZ77壓縮
⑥將色版轉(zhuǎn)換為16/32數(shù)據(jù)導(dǎo)入
⑦將16進制方式存放的色版導(dǎo)出為PAL色版文件
⑧對編碼染色
⑨應(yīng)用碼表開關(guān)
其中④⑥⑦⑧⑨只能在16進制視圖模式才可以使用。
打開視圖菜單,可以把工作ROM的視圖轉(zhuǎn)換到其他模式。

下面我們切換到16進制模式,看看CT的16進制編輯功能。
CT跟一般的16進制編輯器很像(雖然不及UE強大),但卻結(jié)合漢化進行了優(yōu)化。
例如進行了編碼染色。非常方便查看,有經(jīng)驗的美工,甚至可以直接通過被染色的編碼馬上就能找到色版數(shù)據(jù)的開頭,進行色版導(dǎo)出(后面的美工教程會有進一步介紹)。另外在文本區(qū)域中間,也能很容易找到特殊控制符的內(nèi)容(例如下面的例子中的F1FF等控制符就被染色為淺藍色,與一般文字區(qū)別開來了)。
另外一個很有用的功能就是直接套入碼表來顯示文本區(qū)的大體內(nèi)容:

一般NDS游戲?qū)?yīng)的碼表有兩種分別是8140=空格的標(biāo)準(zhǔn)Shift-JIS碼表和0000=空格的連續(xù)碼表(碼表的相關(guān)內(nèi)容在后面的教程會進行介紹)。可以大膽地套一下來看看能不能找到文本區(qū)。例如超執(zhí)刀就是用0000=空格那種碼表,套入后,應(yīng)用碼表,就可以在CT的16進制模式大概看到文本區(qū)的內(nèi)容。
這對于解讀ROM是非常必要的。
另外CT還有一個很有用的功能就是NDS文件系統(tǒng)。

通過這個系統(tǒng)能直觀地看到NDS的文件結(jié)構(gòu),有的ROM甚至?xí)巡煌愋秃陀猛镜奈募愿氈碌姆绞酱娣?,對于了解ROM的結(jié)構(gòu)非常有用。此外在文件系統(tǒng)欄里面還可以分別對不同部分的文件進行導(dǎo)出和導(dǎo)入,分別分析和修改。
CT還有不少強大的功能,待各位在運用中慢慢挖掘吧??傊矣X得開放這個工具的人,只要不是進行過非常規(guī)壓縮和加密的ROM,大概能破解99%的GBA/NDS游戲了……
二、CT的TILE操作
下面用一個簡單的例子來說一下CT的TILE操作。
一般在CT里面發(fā)現(xiàn)大概圖片后,通過調(diào)整窗口大小(快捷鍵SHIFT+方向,但最新版本修改了這個功能的快捷鍵,用新版本的用戶請閱讀新版本的說明),另外,縮放的數(shù)值建議用200左右進行作業(yè)(舊版本用1位數(shù)值顯示縮放比例)。這樣就可以調(diào)整至比較工整的情況。(下圖已經(jīng)進行了調(diào)整)

但這時看到的顏色是不正確的,因為默認(rèn)的色版不適配所有圖形(正確來說一般都不會適配,但相對的,也比較醒目)。如果想比較好地觀察,我建議自己準(zhǔn)備一個黑至白的色版(具體色版建立方法留在美工教程說吧),這樣圖形就能排除顏色的干擾更容易發(fā)現(xiàn),對于未能確定色版的時候是非常方便的。當(dāng)然,要準(zhǔn)備的分別是8bpp(256色)和4bpp(16色)兩種,以適應(yīng)不同格式的圖片。

好,回到上面,只要套入了正確的色版,那么圖片就可以正常顯示了。(當(dāng)然對于ROM解讀階段,沒有必要給每個圖片套上正確的色版)

但發(fā)現(xiàn)貌似有點瑕疵,那是因為地址偏移還未準(zhǔn)確。
用快捷鍵:CTRL+方向鍵左右可以微調(diào)地址偏移,這個操作非常重要。
調(diào)整后,隱藏掉礙眼網(wǎng)格就能看到這個效果了。

三、開始用CT對ROM的解讀
用上述的方法就可以大概了解ROM的一下大概構(gòu)造了。
結(jié)合NDS文件系統(tǒng)大概了解一下各個文件分別包含的是什么內(nèi)容,關(guān)鍵是這個內(nèi)容在ROM的那個地址。
另外也得進一步分析各個內(nèi)容的具體位置,
準(zhǔn)備幾張大白紙,仔細記錄好ROM的各個區(qū)域分別是什么內(nèi)容,例如
按地址位置順序列出:
XXXXXXXX-XXXXXXXX是大標(biāo)題圖,8bpp
XXXXXXXX-XXXXXXXX是小標(biāo)題圖,4bpp
XXXXXXXX-XXXXXXXX是人物全身像,8bpp
XXXXXXXX-XXXXXXXX是字庫,1bpp
XXXXXXXX-XXXXXXXX是文本區(qū)
XXXXXXXX-XXXXXXXX是音效
…………
這個記錄非常重要,一方面可以方便你隨時查找需要注意的部分,另一個很重要的作用是:對于未確定地址的內(nèi)容,可以通過歸類和排除法,快速找到其可能的位置。
對于本文的內(nèi)容,可以參看第一話介紹過的教程的相關(guān)部分,并進而學(xué)習(xí)一些文本,碼表的相關(guān)知識。
下一話是ROM HACK的重點,字庫的破解部分。敬請期待。
第三話:字庫碼表篇?初步
前兩話之后,終于進入了有點技術(shù)含量的部分了……
當(dāng)然,考慮到這是篇入門教程,所以我盡量說得詳細一點,希望各位不要嫌過于羅嗦和小白……
PS:這篇教程涉及了一些文本導(dǎo)入導(dǎo)出、改圖等本系列教程還沒有詳細講解的內(nèi)容。如果沒有接觸過漢化的朋友,建議參考其他達人寫的漢化相關(guān)教程有個大概了解,這樣可能會比較方便理解本文內(nèi)容。
另外這篇我把字庫和碼表合在一起寫,而且邏輯結(jié)構(gòu)不算太清晰= =|||
所以一下子可能不太容易消化,可以分部分慢慢閱讀。另外還是那句,實踐最實際,拿一個工具一邊做一般看比直接看能直觀得多。
一、碼表知識
GBA/NDS游戲一般是怎么顯示文字的呢?(其實第一篇教程里面推薦的幾篇教程都有說過了,所以我這里盡量簡單地重新介紹一下)
上一篇里面提到了用CT套入正確的碼表,在16進制模式,文本區(qū)就可以看見文本內(nèi)容了。

原理就是,ROM的文本區(qū)是用16進制代碼來寫的,例如上圖中:
“2年前の檢查”對應(yīng)的16進制就是000706f0行的CD00 CE0B 9B09 4701 3E06 1307這5組16進制編碼。而碼表就是表示
CD00=2
CE0B=年
9B09=前
4701=の
3E06=檢
1307=查
這樣的轉(zhuǎn)換關(guān)系的列表。
游戲里面也是通過這樣的轉(zhuǎn)換關(guān)系,從字庫挑取字符顯示到屏幕上面的。
如果把上面文本區(qū)編碼改成CD00 CE0B?CE0B?4701 3E06 1307
游戲也相應(yīng)會顯示成:2年年の檢查,這個也是漢化對文本修改的基礎(chǔ)原理。(原文的“檢”字不是簡體的“檢”字,為了說明方便我做了簡化處理。)
一般日文版游戲用的是Shift-JIS碼表,一個完整的Shift-JIS碼表從空格開始,標(biāo)點,特殊符號,英文字母,平假名,片假名,日語漢字……
例如
8140=
8141=、
8142=。
8143=,
8144=.
8145=?
8146=:
8147=;
8148=?
8149=!
814a=゛
814b=゜
814c=′
814d=`
814e=¨
……
像上面這樣的一個對應(yīng)關(guān)系存放的TBL文件(可以用WINDOWS的記事本打開和編輯)
而之前也說過,一般完整的Shift-JIS有2種主要的表示方式,如下圖,分別是從8140=空格和0000=空格開始的兩種(0000=空格嚴(yán)格來說不是Shift-JIS,而是在Shift-JIS的基礎(chǔ)上重新進行自定義的編碼)。一般完整的Shift-JIS碼表漢字部分是以“亜”開頭,以“熙”字作為結(jié)束(最完整的是以“黑”字結(jié)束,也就是“熙”后面還有一段,但一般情況下因為不是常用字,不少游戲就去掉“熙”字后面的部分了)。下面是這兩種碼表的分析:

(?下圖碼表無進行16進制的高低位互換,是高位在后的,注意一下)

這樣對比不難發(fā)現(xiàn)一個問題,8140=空格開始的那種碼表,并不是連續(xù)的,而是跳過了XX00-XX3F、XX7F、XXFD、XXFE、XXFF(觀察第一個碼表中間框住有空行的部分)。而第二個碼表是完全連續(xù)的。為什么呢?相信只要多觀察幾個文本區(qū)編碼就會發(fā)現(xiàn)問題了。對于第一個碼表的文本,跳過這些區(qū)域可以有效防止錯位搞混的現(xiàn)象,另外也可以留出編碼供半角字符,控制符等使用。而第二種碼表的控制符則多數(shù)以FF00之后的編碼作為控制符。
上面說的是導(dǎo)出文本用的碼表。只要能套上一個正確的碼表就能把文本部分導(dǎo)出來了。
但因為翻譯后,不一定會(應(yīng)該是“一定不會”)用上或只用上原來的字,因為漢化翻譯后會用上很多原來字庫沒有的漢字(例如很多擬聲詞的字日語是沒有的,例如嗎,啦,嗯……),而且日語漢字多數(shù)是繁體字,要做簡體版基本要把字庫里面的字改成簡體。
那么翻譯后要用新的字怎么辦呢?
最簡單就是在原字庫里面添加新字,但是如果只是添加就太浪費空間了,因為翻譯后很多原來的字根本用不上,例如完整的Shift-JIS字庫里面有6000多個漢字字模,而一般正常翻譯之后,實際使用的漢字字模約2000-3000而已,漢化后因為內(nèi)容跟原來不同,可以在原字庫的基礎(chǔ)上全部替換成需要用上的字模就行了。
但是問題又來了,這些新的字模寫進去后,怎么把它跟文本區(qū)的編碼掛鉤呢?這就需要用新的碼表方式,把字庫字模和文本區(qū)的編碼重新對用上,這就需要重新編輯一個新碼表。
簡單舉個例子。例如上面的“2年前の檢查”,漢化后變成“2年前的檢查”,“的”字的字模我必須找一個位置放它,例如原來碼表是4E03=亜,翻譯后用不上這個繁體的“亜”字了,我就在字庫原來“亜”的位置把它改成“的”字,然后把碼表的對應(yīng)關(guān)系改成4E03=的,跟著導(dǎo)入文本的時候,把原來的編碼行“2年前の檢查”的CD00 CE0B 9B09?4701?3E06 1307
改成“2年前的檢查”:CD00 CE0B 9B09?4E03?3E06 1307。那么游戲就會從原來4E03=“亜”的地方提取出現(xiàn)在修改后的“的”字。
而這個新的碼表和字庫對應(yīng)關(guān)系就是導(dǎo)入文本用的碼表,也就是修改后的碼表。這就需要重新編輯一個碼表了。
以上就是對碼表的簡單介紹,有個大概概念后下面轉(zhuǎn)入字庫部分,先簡單了解一下字庫和碼表的關(guān)系。
二、CT的字庫HACK
上一話講了最基礎(chǔ)的ROM解讀,那么字庫一般在ROM里面是什么樣子的呢?
下面就是一個例子:

這個是超執(zhí)刀的小字模字庫庫,看右邊信息就可以看到字模是8X8以下的,用的是1bpp(2色),在游戲中的作用主要是用以標(biāo)注某些專用名詞的上標(biāo)。而正文的字庫是16X16的1bpp(2色)。
【小技巧】:一般判斷字庫字模用的模式1bpp(2色),2bpp(4色),4bpp(16色),8bpp(256色),可以在游戲里面觀察字體,如果是帶陰影或邊緣模糊(抗鋸齒)的,一般就是4色以上的了。另外,如果字庫附近有色版信息,從色版的結(jié)構(gòu)(例如是2色,4色還是16色的色版)也能大概判斷出字模的顯示模式。
在超執(zhí)刀的這個小字庫下面就是16X16的字庫了,初看的話,會變成這個樣子:

這樣有兩種調(diào)節(jié)方法,一個就是強制把窗口寬度調(diào)整為16寬度:

另一種就是比較根本的方法:
上面的錯位原因是方格的大小不對(實際是TILE的組合問題,需要進行“水平重組”),在CT的導(dǎo)航欄里面進行相應(yīng)的調(diào)整就行了:

在上圖橙色框的部分調(diào)整后,然后CTRL+方向鍵左右,調(diào)整正確位移。后就能這樣一字一格顯示了。
但有的時候字模會比這種混亂,例如出現(xiàn)這樣的情況:

這是因為這個ROM的字模之前用了兩位16進制來標(biāo)注這個字模的對應(yīng)編碼,例如在“0”這個字模對應(yīng)的是D0B800-D0B807這8位的數(shù)據(jù),而之前兩位是824f,一查碼表,剛好824f=0。對付這種字庫我們可以用CT的跳過功能,跳過這兩位對顯示字模無關(guān)的字符。

設(shè)置跳過數(shù)據(jù)為兩位后,就能完好地顯示字模了:

再來,又是一種特別的字庫方式,但發(fā)現(xiàn)現(xiàn)在也很常見了,就是圖片字模:
這種字庫是以整張完整的圖片而存在,不是一字一格的,所以在普通情況下TILE模式很難觀察。這就需要用特殊的方法。
一般這種字庫的開頭有個別數(shù)據(jù)表示字庫圖片的寬度信息,這時觀察的時候需要特別注意0010,0020這樣的數(shù)據(jù)(分別表示寬度為256象素,512象素),然后在CT導(dǎo)航欄輸入相應(yīng)的寬度,調(diào)整顯示模式,就能顯示出該字庫了。例如某DS游戲的字庫:需要用256寬和8bpp(套一個黑白色版)才能正常顯示。

這種字庫比較有特色,詳細的我留在字庫另類擴容的部分來講解。
總之字庫顯示好了就能進行具體的字庫手術(shù)了。
三、編碼表
能顯示字庫后,首先是對照字庫確認(rèn)碼表類型。
首先看看字庫的漢字部分,如果是像上面超執(zhí)刀的這樣:“亜唖娃阿哀愛挨姶逢葵茜穐悪……(一直到)龠堯槇遙瑤凜熙”(最完整的熙后面還有一段直到“黑”字),而且字?jǐn)?shù)明顯比較多,那么高興吧,少年,你面前的是一個標(biāo)準(zhǔn)的Shift-JIS完整字庫的ROM,簡單來說就是厚道的ROM,有充分空間給你進行字庫修正。
你要做的是找一份Shift-JIS碼表,看看是那種類型(8140還是0000的),進行確認(rèn)。然后對應(yīng)文本區(qū)看看是否合用。(8140的標(biāo)準(zhǔn)Shift-JIS碼表可以在狼組的網(wǎng)站找到,0000的可以另外找或者自己用8140的改造,因為里面的文字是一樣的,只是編碼順序不同,具體改造方法下面會講。)
如果是如上面的那個圖片式字庫那樣缺了不少漢字,那么先看看它的順序。
如果雖然缺字,但還是按照Shift-JIS碼表的順序出現(xiàn)漢字,那么是一個精簡過的Shift-JIS碼表,需要做的是對照字庫,研究一下踢除了的字,以及之間的情況。一般來說,這種字庫雖然經(jīng)過精簡,但并沒有打亂順序,用標(biāo)準(zhǔn)的完整Shift-JIS碼表并不影響文本的導(dǎo)出。但考慮到漢化后需要把用到的漢字重新按新編碼裝回去,所以最好還是有針對性地做一個精簡后的碼表進行對照。(另外針對精簡字庫,如果不考慮擴容的話還得在翻譯之后進行減少用字的處理,這個操作和相關(guān)原理會在后面的教程講解。)
如果不但缺字,而且順序也是亂來的(例如逆轉(zhuǎn)DS……),那么……你就得一個一個地按文字在碼表上面的順序,針對文本區(qū)的漢字對照公式,寫一個碼表,這樣才能正常導(dǎo)出文本,以及有針對性地對字庫改造。因為這個游戲的字庫用的是獨立的非Shift-JIS碼表排序……這個工程越需要1-2天。
除了上面所說的這種情況,漢化完后,如果如上面提到過的要大規(guī)模替換字庫,也可能需要新建立一個新的碼表關(guān)系來導(dǎo)入文本。
針對碼表的編輯,下面介紹一些編碼表的方法。
最粗糙的方法是用crystalscript(后面簡稱CS),可以把文字寫好在一個UNICODE格式的TXT文件里面,在CS設(shè)置為腳本,然后用CS的這個功能就能生產(chǎn)一個碼表了。

而且如果上面在導(dǎo)入碼表里面可以先寫好一個第一個字的編碼,例如4E03=亜
那么它就會自動把碼表里面沒有的文字按順序從上面的序號開始一直排下去。例如4F03=X,5003=Y,5103=Z……
這個方法比較適合的是新建立一個新的導(dǎo)入碼表,例如漢化后針對完成的文本大規(guī)模替換字庫。
而且因為可以直接用翻譯好的文本制造碼表,非常方便。
當(dāng)然,產(chǎn)生的碼表因為是完全連續(xù)的,如果要做出8140那種非完全連續(xù)的形式,需要進一步修正(用下面的UE相關(guān)方法)。
另一個是比較有效率的方法是用UltraEdit(簡稱UE),但注意的是,UE的對文本功能必須對應(yīng)ANSI格式才會發(fā)揮正常,如果是UNICODE格式,并不能正常。
但偏偏CT和CS卻愛用UNICODE,這就需要對碼表文件轉(zhuǎn)一下格式,記事本打開,然后另存為的時候選一下ANSI格式就行了。

用UE打開碼表文件,然后轉(zhuǎn)換成縱行編輯模式,就能方便地對碼表進行編輯了。

這個功能的主要好處是可以類似OFIICE里面的EXCEL一樣對內(nèi)容進行縱橫向的選擇和編輯,以及按順序插入數(shù)字或修改。例如用選擇范圍工具可以選擇數(shù)行的內(nèi)容,然后一次進行數(shù)字的按順序插入和修改。具體操作一下就能掌握了,我大概截圖說明一下如下,文字就不羅嗦了:



注意一下的就是上面這個序號,上方輸入的是10進制數(shù)字,不要直接寫入16進制的數(shù)字。
10進制轉(zhuǎn)16進制可以直接用WINDOWS的計算器的科學(xué)型模式來做……如果連這個也不懂用,貌似做ROM HACK的工作就很…orz了。
不過無論何時,對數(shù)字的觀察多用計算器是必須的,這個要多注意啊。特別是對某些數(shù)值的分析方面,尤其重要,多用計算器換算一下,可能會有突破性的發(fā)現(xiàn)哦~

(貼這個計算器的貼圖我也覺得很orz……,但我的目的是強烈建議各位多利用好計算器這個工具?。?br>
另外這里介紹一個很有用的技巧,是漢化樂園QQ群里面的朋友教的,可以在UE的縱行模式把文字選擇好,然后左邊編好了序號之后,一次貼上去,這樣的操作對碼表大改造實在非常好用。

最后的方法就是各位編程達人自己寫程序來寫碼表關(guān)系。這個就交給各位編程達人自由發(fā)揮了。反正方法是多樣地,有效達到目的就行。
碼表做好了??梢赃M行文本的導(dǎo)出和導(dǎo)入了。如前面提到了漢化后有些字原來字庫是沒有的,那么就需要對字庫進行修改。下面正式進入修改字庫的部分。
四、改字庫
本部分的內(nèi)容本來應(yīng)該在上面的部分穿插說明,可能方便理解一點,但考慮到CT強大的理由碼表來大規(guī)模修改字庫的功能,我在說明清楚碼表關(guān)系后才放在這里說改字庫。
CT的TILE工具窗口特別為修改字庫進行了強大的優(yōu)化。首先必須注意的是要在CT里面正確修改字庫,必須先把它設(shè)置成1格里面放一個字的模式(參照前面的字庫正確顯示方法)。
然后就可以使用TILE工具修改了。
直接用TILE工具可以像畫筆一樣一筆一劃地寫入,當(dāng)然,更方便的是設(shè)置好字體后直接導(dǎo)入。方法如圖:
在文字窗口輸入要改的漢字,然后設(shè)置好字體后就會在左下角預(yù)覽窗口顯示修改后的效果。然后按修改TILE按鈕就能改好了。
另外下面的復(fù)選框是給文字加上陰影,描邊等效果的,這里就不多說,大家在實踐中摸索就性。(陰影、描邊等需要是4色(2bpp)以上的字模才能有效)
PS:本教程做的有的粗糙……其實正確的文字位置應(yīng)該還要水平位移向右1象素(在下方復(fù)選框設(shè)置)才跟原來的相吻合= =|||

但CT的強大不是這么一個一個字地改,而是可以直接按碼表的順序,一次過把文字全部寫入到字庫里面。
首先準(zhǔn)備好編輯好的碼表(例如導(dǎo)入文本用的新碼表),然后像上面一樣設(shè)置好字體字型。預(yù)覽一下。
然后按下TBL,選用需要的碼表,然后一瞬間,文字就會按碼表的順序一個一個全部寫入到字庫里面了。快捷,方便,強大?。ㄈ缦聢D)

當(dāng)然,修改字庫還有另外的方法。就是美工法。
這個方法雖然比較麻煩,但是卻適用性比較強。例如對一些字體字型,文字顯示效果(陰影描邊)進行靈活處理,對應(yīng)圖形字庫的修改(例如那些不能一個字放一格的字庫)。而且對于小規(guī)模修改字庫也很方便。
當(dāng)然這個部分最好結(jié)合后面的美工教程參考,這里只是簡單說一下。如果有美工基礎(chǔ)的朋友應(yīng)該就不難理解了。
首先把需要修改的碼表部分用CT導(dǎo)出BMP文件。

導(dǎo)入到PS(PHOTOSHOP,作為美工不會不知道PS吧……)
導(dǎo)入的圖片是索引色,為方便轉(zhuǎn)換成RGB色。
為了修改方便,在PS里面設(shè)置跟CT一樣的參考線網(wǎng)格,方法如下:
編輯,首選項,網(wǎng)線和網(wǎng)格

設(shè)置成根CT一樣的象素,16X16象素(px)(注意單位)

視圖,顯示,網(wǎng)格

這樣就能顯示跟CT一樣的參考線網(wǎng)格了。

然后建立背景層覆蓋原層,在上面建立文字層,通過文本段落工具配合參考網(wǎng)格調(diào)整好文字大小,行距和字間距。

修改好后轉(zhuǎn)回索引色,用WINDOWS畫筆校正一下,重新導(dǎo)入到ROM里面相應(yīng)字庫位置就行了(這個流程的具體操作參考后面的美工教程,或者網(wǎng)上的一些漢化相關(guān)美工教程。)
以上就是字庫和碼表的一些基礎(chǔ)。至于關(guān)于圖片字庫的特殊性和修改方法,以及特殊字庫擴容技巧,我將結(jié)合JSS的字庫另外寫一個教程。但之前提到過不會在8月8日前透露JSS的相關(guān)技術(shù)細節(jié),所以那個教程需要等一下。字庫部分就暫時到此為止。
后面就會有文本導(dǎo)出導(dǎo)入的教程,敬請期待。
感謝漢化樂園的各位提供的本文DEBUG意見。