[心得] SFC中文化經驗談(三)—指標篇—

看板 Emulator
作者 lulaptt (Lula)
時間 2012-11-16 21:50:04
留言 22 ( 15推 0噓 7→ )
【雜言】 我會做中文化主要還是松野的錯.....。 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可能之前就指定了。 ============================================================================ -- ※ 發信站: 批踢踢實業坊(ptt.cc)

留言

conpo 專業好文推,長知識! 11/16 21:51 1F
protect6090 真神人也!!!!!!!!!!! 11/16 22:04 2F
UlyssesLin なるほど、わからん。大丈夫だ、問題ない。 11/16 22:25 3F
arcadyii 瓊安軟體那幾款經典作品 從沒看過漢化 是根本上做不到嗎 11/16 22:57 4F
ADHI 好文章,特來拜讀!! 11/16 23:02 5F
lulaptt 我覺得理論上都可以中文化 只是要"改多大"的程度 11/16 23:02 6F
lulaptt 只是SFC技術較麻煩 中文化圈有在弄反組譯的大概就那幾個人 11/16 23:07 7F
lulaptt 不知道這邊提的經典作品是....? 11/16 23:08 8F
kurenai911 瓊安軟體的遊戲幾乎每片都是經典之作,在超任上的有 11/16 23:23 9F
kurenai911 弟切草、恐怖驚魂夜、特魯內克和風塵英雄 11/16 23:23 10F
lulaptt 風塵英雄有中文化唷...破解我還認識...=__=||| 11/16 23:35 11F
oginome 推lulaptt專業!我超喜歡弟切草的說~破了不下30次呢~ 11/16 23:56 12F
busin 專業好文推一個~ 11/17 12:52 13F
※ 編輯: lulaptt 來自: 111.249.79.124 (11/17 18:09)
lulaptt 修改一項錯誤 之前BD D9跟BE D9寫反了.... 11/17 18:11 14F
katzdx 推專業文~ 11/17 18:53 15F
prudence 不得不感謝松野的錯 XDD 11/18 13:46 16F
qazxswptt 感謝好文 11/18 14:56 17F
willkill 推推推 11/18 16:30 18F
kaoen 中文化是個「厚工」的工作~有愛有推~ 11/19 01:45 19F
djboy 神文推! 11/19 10:14 20F
kuchibue 有看有推! 11/21 20:26 21F
EDGE 路人推專業好文! 11/23 01:25 22F

最新文章

[閒聊] 超越時間的T1 Faker
lol jeff11503
2024-11-15 06:07:44
[交易] D4 S6 徵 莉斯 Lith
diablo josephd
2024-11-15 04:42:18
Re: [AOE2] 新DLC 編年史:希臘之戰
aoe demo68
2024-11-15 04:19:48
[問題] Oner農夫三拳是不是被亂黑啊?
11 20 lol qwbert
2024-11-15 03:17:17
[問題] (服飾)金屬口罩
ro deepwoody
2024-11-15 02:19:42