SFC中文化經驗談(三)—指標篇— - 模擬器

Table of Contents


【雜言】

我會做中文化主要還是松野的錯.....。

FF12讓我跑一次很high的低等級攻略後,我就很難從一般的玩法獲得滿足了。
後來因為一直提不起玩遊戲的興致,就開始看起我最喜歡的皇騎2的Rom data。
那時什麼都不懂,所以遇到一堆問題都要半猜半想、硬著頭皮解決。

然後.....就解析->翻譯->刻字->解析->loop n次....花差不多一年休閒時間做完了。
雖然那一年沒玩多少遊戲,但滿足感倒是前所未有的。
(日文拖U君等人的福,進步了一些XD)


【正文】

所謂的指標就是Rom裡指向圖片/字庫/文本起始位址的數據
每個指標通常佔用2~3個bytes,遊戲會透過指標來快速載入這些資料。

由於中文化所需的字數通常比原日文遊戲使用字數多,
所以字庫大小與文本長度經常會比原本的長。
如果硬填回原位置的話,勢必會覆蓋掉後面的資料,
因此需要修改指標,將指向原字庫的指標指向一個放新字庫/文本的空間位址,
也就是所謂的"擴容"(註一)

指向單一種未壓縮圖或字庫的指標通常只有單獨一個。
有時候,我們可以用"猜"的猜出這類指標位置
特別是當你知道字庫的開始位置時。

例如我們可以YY-CHR看出0x4bdd9 (04 BD D9)的位址開始有指令名稱的圖,
用Lunar Address可以算出對應的SFC位址是0x9bdd9 (09 BD D9),
又因為SFC位址是高位byte在後面,
所以可以猜測SFC位址在Rom裡的數據也許會是D9 BD 09 (註二)

於是我們用UltraEdit搜尋絕對位址D9 BD 09會發現.....沒這數據XD。

沒關係這常有的事,我們可以再用相對位址D9 BD去找.....發現有34筆。
我們試著把每一筆輪流改成D9 BE,也就是把指標指向的位址延後0x100
希望將原本指向第一筆指令名稱圖的位址改成指向第二筆。
如果我們改到的是指標,原本畫面該顯示第一個圖就會改為顯示第二個圖。
最後我們在改0x4a390的數據時,發現改到指標了:

http://ppt.cc/OJIZ (又拿到奇怪的短網址...之前是o~mg)


事實上,運氣好的話我們可以在附近找到bank值(註二),也就是上述例子中的09
我們將0x4a39c的09改成0A會發現指令名稱圖亂掉了,
這是因為它跑去0xabed9 (0A BE D9)的SFC位址。

如果我們再把0x4a390的數據改成20 92,就會存取到0xa9220 (0A 92 20)的SFC位址,
用Lunar Address可以算出該SFC位址對應的實際Rom裡位址是0x51220
也就是下圖裡的あいうえおかきく圖像(因為調色盤不同,所以顯示出的文字顏色很暗)。

http://ppt.cc/~04w


以上就是不用反組譯,用猜就猜出指標的方法概念。
好,有多少人看到這裡放棄SFC中文化了(笑


劇情文本指標通常囉唆些(壓縮圖或字庫、名詞文本的指標有時也會這樣)。
以皇騎1為例,用了三層指標來存取劇情文本(對!三層!)
先用一個總指標(第一層)指向連續存放的第一個章節指標(第二層),
再用各章節指標(第二層)指向某章節連續存放的的第一個對話指標(第三層),
最後用各對話指標(第三層,就是上一篇紫色的代碼)指向該對話的實際劇情代碼

如此遊戲在進行時,只要知道進行到哪一章第幾段對話,就能透過多重指標快速存取。
(不過老實說,皇騎1把對話指標也壓縮進去沒有意義,甚至還拖累了一點存取時間。)

雖然我覺得大部份指標,只要知道資料起始位址就能反推出來,
因為壓縮的關係,不少時候是根本不知道圖片、字庫、文本的開頭位置。
這時,就只好靠反組譯來知道指標位置跟壓縮方法了。
有趣的是,其實真正有必要知道壓縮方法的只有劇情文本,
圖片跟字庫的壓縮方法對反組譯來說.....根‧本‧不‧重‧要。
找塊空間放要取代的未壓縮新圖片跟字庫,用指標改連過去就好了。


下回開始就要進入胃痛的反組譯篇(不知道3篇能不能講完=___=|||),
對中文化有興趣的人.....請準備胃藥!


============================================================================
(註一) 事實上,擴容包含兩種層面,一種是上述的Rom裡原空間不足
另一種是可使用的文本代碼範圍不足。例如皇騎1的劇情文字只允許
20 ~ FF, 19 00 ~ 1B FF ,接近1000個不重複代碼可供使用,
也就是只能定義最多不到1000個字,這種問題就只能靠反組譯解決,
透過修改原程式來增加更多可用代碼。

(註二) SFC的Rom\Ram裡任何位置都能用3個byte的絕對位址去存取。
但SFC是16 bits主機(簡略的說法),所以會把Rom裡空間拆成幾十個bank,
每個bank都有0000~FFFF的相對位址空間(2個bytes=16個 bits存取範圍)。
SFC位址09 BD D9也就代表第09個bank中相對位址為BD D9的地方。
遊戲程式執行時,bank其實不太常換,大多在處理同一bank裡的資料。
所以有時只會用兩個bytes來當指標,因為bank可能之前就指定了。
============================================================================

--

All Comments

Linda avatarLinda2012-11-18
專業好文推,長知識!
Andy avatarAndy2012-11-23
真神人也!!!!!!!!!!!
Kama avatarKama2012-11-27
なるほど、わからん。大丈夫だ、問題ない。
Agnes avatarAgnes2012-11-28
瓊安軟體那幾款經典作品 從沒看過漢化 是根本上做不到嗎
Eartha avatarEartha2012-11-29
好文章,特來拜讀!!
Ingrid avatarIngrid2012-11-29
我覺得理論上都可以中文化 只是要"改多大"的程度
Victoria avatarVictoria2012-12-03
只是SFC技術較麻煩 中文化圈有在弄反組譯的大概就那幾個人
Sierra Rose avatarSierra Rose2012-12-06
不知道這邊提的經典作品是....?
Jake avatarJake2012-12-09
瓊安軟體的遊戲幾乎每片都是經典之作,在超任上的有
弟切草、恐怖驚魂夜、特魯內克和風塵英雄
Victoria avatarVictoria2012-12-14
風塵英雄有中文化唷...破解我還認識...=__=|||
Faithe avatarFaithe2012-12-16
推lulaptt專業!我超喜歡弟切草的說~破了不下30次呢~
Rae avatarRae2012-12-19
專業好文推一個~
Erin avatarErin2012-12-21
修改一項錯誤 之前BD D9跟BE D9寫反了....
Yuri avatarYuri2012-12-22
推專業文~
Hedwig avatarHedwig2012-12-27
不得不感謝松野的錯 XDD
Steve avatarSteve2012-12-31
感謝好文
Victoria avatarVictoria2012-12-31
推推推
Megan avatarMegan2013-01-01
中文化是個「厚工」的工作~有愛有推~
Ida avatarIda2013-01-04
神文推!
Dinah avatarDinah2013-01-05
有看有推!
Erin avatarErin2013-01-07
路人推專業好文!