星期四, 11月 08, 2012

圖示選單文字完成....大多數....


我記得網路上唯一有"部分"(這部份的量約略是1%)中文化的OB  
就是把8x8圖示選單文字換成了高度8的中文字(視覺效果很...微妙)
因為這是少數沒壓縮又能直接改的地方  所以整個OB就只有改這邊
(不過老實說...OB很不好弄是真的  小字太多  大字又代碼不夠用)

 其實我本來這邊也是要用英文字混過去的(艸

因為原本就只有8的高度  硬改16通常表示手續很麻煩  
不過這週還是趁空檔改了出來  畢竟用英文也還蠻怪的
"結果比預想中簡單一點" ....正當我這麼想時....

掯!  戰鬥時的8x8圖示選單文字竟然是另外處理的!

而且看來是要在VRam上直接加才行....(暈
因為如此   所以總數31種圖示選單文字(嚴格說來是圖)中
有5種出現在戰鬥畫面裡的還未處理....這OB真是折騰人!



星期一, 10月 29, 2012

8x16地名、地圖地名完成

嗯....差點被這地名搞死....

之前一直忘了加8x16地名上去   所以回頭補上
本來以為這跟武器、人名等名詞沒兩樣
結果要填時才發現....
因為每章每個地名要快速顯示
所以是先要用1個"章節索引"指到章節中的第一個"地名索引"
再用"地名索引"指到後續的該章節地名
每章地名資料緊跟在每章最後一個地名索引後面
所以其實各章是獨立卻串在一起
超麻煩~(技術相關因為太囉唆所以淺色字體XD)
因為地名也有幾百個多到不行
最後還是寫了個程式跑完....orz
效果就大概如下面第1個圖

又因為在改8x16地名時   有些地名是大地圖上也會被用到的
為了怕大地圖上的地名文字有硬體限制   所以決定再去弄這部份。
果然.....大地圖上的地名文字完全不是用16x16劇情文字
而是把會用到的幾個字獨立壓縮起來放到某處
要用時再解到ram  然後根據"另一段函式"拼成地名放到Vram
其實難的不是壓縮部分  因為我OB跟TO的處理方式不同
我在OB都是等原程式資料解壓完放到ram/Vram後
隨即直接把一塊無壓縮的新資料用狸貓換太子的方式  
覆蓋掉原本ram/Vram的資料  讓畫面顯示出我放的中文字
當然要選擇在哪裡換就很重要  雖然通常越快換越好
但也會遇到同一個函式被使用在其他無關的地方
導致其他地方出問題的悲劇
這時就要自行在ram裡設flag用其他方法判斷  變得超~麻煩
有時則是原本安排的ram空間不夠  也會變得很吐血

這次能用的ram空間就只有1800 bytes
...大概相當於96個16x16字翻成中文後最少也要~110字
....沒辦法....只好想辦法調整字的位置
最後靠著"修改拼地名的程式+適當調整字的位置"
硬是把110個字塞進去   塞完剛好只剩半個字的空間=___=|||
(我好像常幹這種把大象塞進冰箱的事...之前TO的op也是orz)
效果大概如下面第2、3個圖(還沒加外框)

目前看來  絕大部分的技術問題都解決了
劇情部分  解壓寫出的程式已經好了 
寫入只是找塊地方用無壓縮規則反操作而已

技術上唯一還沒解決的就是主角取名字的部分
這部份的份量雖小  但感覺函式也要動很大T___T
所以放在長假....大概春節再做吧   畢竟我其實平常也蠻忙的

老實說   OB中文化我覺得技術面比TO難2倍以上  這是我當初沒想的
光是原本沒有的新函式就加了22段以上  還不包括其他一堆的修改函式
不過我想目前看來   要像TO,TOG一樣100%中文化應該沒問題










星期日, 10月 14, 2012

占卜翻譯完成

與其說是在翻譯   倒不如說幾乎都在刻字跟寫導入程式....
接下來就是一章一章的翻譯了  不過看來還有些東西要改....






星期一, 9月 24, 2012

16x16劇情文字開始翻譯

....說是這樣說啦   不過最近工作又開始忙了
進度上完全沒法掌握呢   尤其是這該死的刻字....

目前系統訊息翻譯完了.....文字大概快用掉千字了(躺








星期一, 8月 27, 2012

16x16刻字開始(吐血)

.....開始刻字了  電動時間減少了
(P4U才剛買說....)

目前確定會用到的字約700字
這700字其實就是主要的8x16字
左邊是目前刻好的256字
約一半是沿用原漢字  一半是新刻

一般人應該分不出來吧?
比較簡單的分法是....
越難看的越可能是原版(我說真的)
 
因為YY-CHAR不太支援它的格式
所以一個字會分成文字跟外框

老實說  隨便找個10x10字型取代
再寫程式自動加外框
大概不用2天就能完成
但這樣就失去原字型的風格了
所以我還是找相似12x12字型
再手動改成10x11的相似風格


....有種狂氣的感覺呢www



まぁ....反正按照這種速度
要到下下週才會刻到700字
之後就是看翻譯要什麼刻什麼

一邊翻一邊刻也比較不會無聊

啊  這種說法其實有點不正確
...因為我有興趣的事太多
所以幾乎不會有感到無聊的時候
只是可惜一天的休閒時間有限
只能選擇當下最有興趣的事來做
所以如果產生了嚴重作業感
我搞不好會跑去幹其他有趣的事XD

星期一, 8月 20, 2012

咦~怎麼一晃眼就過了3個月...

呃...因為5月底時颱風引起的斷電
我客廳的準系統主機板爆掉啦(灑花
然後我OB的測試檔案全在上面(汗....

因為準系統規格特殊  所以到6月底才修好回來
還好硬碟正常  資料完全無損
不過因為一個月沒動  我就推拖拉扯、一時懶得再開計畫
直到上週末才又有興趣繼續(逃

果不其然...一打開OB資料夾完全看不懂之前弄到哪裡、怎麼弄的
所以乾脆先去弄16x16劇情文字的解碼跟擴容....

16x16文字主要有兩種編碼方式:

1.訊息部分是未壓縮+索引
   這部份很簡單,導出程式一下就寫好了,導入程式也不難寫(還沒動手)。
   改出來大概就下最下面的圖....

2.劇情對話部分是壓縮+索引
   這部份較難些,不過很謎的是導出程式我以前不知何時就寫得差不多了,導入程式預計用與未壓縮差不多的方式寫入(還沒動手,不過應該也不難)。

相對起來...擴容還是傷腦筋得多...雖然沒8x16那麼複雜啦

擴容這邊問題在於代碼不足!
原遊戲的16x16字可用代碼範圍如下:
XX, 19+YY, 1A+YY, 1B+YY  (XX:20~FF, YY:00~FF)
所以原本最多有約1000個字可用   要擴容最多也只能多加下面幾組:
1C+YY, 1D+YY, 1E+YY, 1F+YY (20以上開頭就是XX,17以下是控制碼)

花了半天,終於改寫好已經亂到不行的原ROM
把1D+YY, 1E+YY, 1F+YY納入了新的可使用範圍  順便多加一個新的空間放字庫
1C+YY目前無法納入  因為跟小人像的圖塊代號重複
為了避免麻煩....我決定乾脆不用了XD
(例如下圖就使用了1D00~1D01,1E00~1E03,1F00~1F02來顯示皇家騎士團1中文化)

目前看來16x16的文字最多大概可以用1700字左右
考慮OB劇情文字量只有TO一半  我想是夠用了
問題是這些文字要從哪裡來  我現在沒那精力去刻了=__=|||






星期一, 5月 07, 2012

這部分2年前就破過 簡單啦.....

這部分2年前就破過   簡單啦.....:D    

.....才怪:(

 這週處理的是狀態欄上方的bar
 因為上週翻回去以前的blog文章   看到類似處理完的圖
我以為以前就弄好了.....

.....我錯啦!!(抱頭

以前真的就只是試做確認可行性
例如可以固定顯示某小隊長名字   但其實不能換人顯示
這次又是預設只有256個8x8可用   卻要改成可顯示~700個8x16
連那256個8x8字都是不知道壓縮放在哪(我也懶得查了)
反正硬幹等它丟到Ram我再去把代碼跟字型換掉
就出現了左下那張圖   事實上到這裡還不難 
因為就固定是那幾個字   頂多一個早上就能弄好
可是要弄出右下圖就讓我傻眼了....

移動到不同小隊時會顯示小隊長名
原本遊戲人名都是平片假名  所以256個8x8字就夠用
但是現在有上千個中文人名(還有幾個擅長移動地形)
要從~700個8x16字隨意選出來....=_=|||

好吧   也只能看要什麼就臨時載入什麼到VRam
這邊的顯示函式又是照慣例跟其他地方不同
所以又硬著頭皮找遊戲原本是載入到VRam哪裡
然後隨時把要的文字動態取代掉其中的一部份字庫位置
再把代碼依序對應到那固定幾個位置
理論上就能成功了!......才怪:(

不知道什麼原因,直接從Rom丟字到VRam 0x0900位置時
一直無法順利取代掉該位置內容(這是第一次用DMA傳失敗)
試了一個下午  卻"意外"發現丟到0x0400反而可以成功
雖然後來猜測是之前為顯示左下圖而丟在Ram的文字
因為多寫的函式被別人呼叫而持續將它自動載入VRam同位置
導致我另外寫上去的動作在0x0800~0x1000被覆蓋掉
0x0000~0x0800則因為我沒有要拿來顯示  所以沒被別人呼叫到
不過....我在trace過程中  其實完全沒發現有被意外呼叫的情形
所以真正原因至今還是個謎....

まぁ.....反正最後有改出來就好XD

最後總計花了一天時間   多寫了3段函式處理這個bar  效果如下:
(....其實右下小隊長名用空白打混過去  我想80%的人也不會注意到吧....)

那麼   再改完最後一個地方就完成所有8x16字的部分了....
....很遺憾  其實前天想到還有音樂鑑賞模式沒弄....orz
假設1~2週解決1個課題的話(我不一定每週都有空檔....)  
也許6月就可以來弄16x16劇情部分了



星期一, 4月 30, 2012

又多完成了一部分

這部分...其實也是直接沿用2年前的修改   然後實際把字庫(第6個....)跟翻譯加上去
同樣的地方一共有10處(下圖為其中三處)   因為地方少所以直接把16進位碼用手key in進去
英文字還是8x8原字形  我有試改成8x16大小過   不過看起來沒有原版的fu~
考慮到我的目標是"維持原本的風格 > 文字好讀" (這是不改成16x16的主因之一)
所以數字、英文、符號還是保留8x8原字形.....

目前8x16剩2個小地方還沒動手  其中一個2年前有破過了
另一個主角名(取名、記錄時)的部分可能有點小棘手

  

星期一, 4月 16, 2012

8x16字完成90%

8x16字大部分完成了(...90%吧)
只剩下城鎮名(準備寫入中)、取名選單/存檔欄、狀態欄最上方文字、地圖指令這四樣吧
其他什麼人名、武器道具名 、魔法技能名、解說文等都完成了

也許五月中就可以開始弄16x16劇情文字部分
這部分技術上應該遠比8x16簡單 
文字量感覺也比TO少很多   可能只有1/4的量吧
まぁ....反正那是暑假的事了

目前完成的部分大致如下 
原本ROM裡面大概多加了20幾個函式  5個大小字庫
才能像現在這樣顯示原本不存在的8x16字....




星期日, 4月 08, 2012

最困難的部分解決了

最困難關鍵的部分目前確認可以完全解決了
那就是無中生有出700個以上中文字庫與一堆對應不同地方的顯示函式
顯示上最囉唆的主狀態畫面與副狀態畫面如下:
反正能忠於原作的部分我都盡量保留了
主狀態畫面下方的"LEADER:OK"是故意不改中文的(美觀的考量)
與2年前半途而廢的進度有兩大關鍵差異點
1.之前字庫頂多500字  其實可能會有點不夠用....
2.8x16文字代碼範圍也擴充了  這樣才能跟16x16的劇情文字做到對應
   之前未對應的話會有些問題  例如塔羅牌名代碼不一的話
   會變成之後16x16的劇情文字與8x16文字無法同步內容




總之
最麻煩的8x8字改8x16字問題幾乎都解決了
老實說遇到的問題比之前預想的多2~3倍
本來也考慮過犧牲一般人名甚至武器名(各多200多字)
不過最後程式還是改出來了....
可以從256x3=約750個8x16字中選出使用

原本OB系統字只有左邊最上面 那張的8x8字
文字代碼範圍限定在0x20~0xFE
加上幾十個0x19??的濁音字等代碼
這個月反譯並新增了快20處蠻長的機械碼
為了能讓OB文字代碼除了0x20~0xFE外
還能合法利用0x1900~0x1BFF追加新的8x16字約750個
例如0x1900="魔", 0x1A00="芙", 0x19FF="妮"
同樣一個"魔"字可能會因為顯示在不同處
而有2~3種不同的顯示方法與字庫(2或4 bits顯示一個點)
左邊只是主狀態畫面的字庫 副狀態畫面字庫又有點不同
目前職業、魔法、特技等都弄好並驗證顯示無誤了
其他隨機人名(1650筆...orz)、 城鎮名、道具名因為太多
等以後再簡單寫個小程式做一次寫入
反正字庫還留有一堆空間可供使用(左邊紫色部分)


比起8x16文字用到十幾個不同顯示方法 
16x16的劇情文字部分應該都共用同一函式


我想技術上要把OB完全中文化是沒問題了


.....說是這樣說啦(苦笑

星期六, 3月 31, 2012

戰鬥畫面文字完成

戰鬥中的解說部分也完成了,這部分沒啥特別好提的,不過說服指令只有遇到中立角色時才會出現,差點因此漏了這個指令解說。目前戰鬥中所有可能出現的8x16文字都弄好了,只有以半透明圖片顯示的8x8指令名沒處理,直接改成英文名的話應該5分鐘能全弄完,不過也許以後再看看要不要弄成8x16吧。

接下來要開始填狀態欄、地圖上會出現的8x16文字,相關字庫函式方面是修改完了(大概...),但是選字、寫入譯名也很麻煩就是,這部分大概有近千個人名、道具名、地名、職業名...etc.

進度上已經超越2年前了吧(茶


星期二, 3月 27, 2012

戰鬥畫面文字...75%

呃......上週突然發現我出了個大包.......
我沒發現動畫關掉會顯示出完全不同的招式技能名啊 XD

結果要解決的問題變得更複雜了
因為狀態欄跟戰鬥用字庫原本是用不同索引同一字庫
之前好不容易把共用的字庫一分為二讓兩個索引各自取用
結果動畫關掉後的技能名文字是兩個索引都有部分引用
變成同一個技能名其實有3種交叉顯示辦法(噴血)

最簡單的解決法....強制動畫開啟
....算啦  這不符合我的性格
只好硬著頭皮找一下解決辦法....
吐血的過程就不提了   反正改了好一些code
原本遊戲只有平片假名的小字庫(8x8, 180字字庫)  
現在預估至少要有6個(8x16, 110字字庫x4 + 800字x2)才能應付這情況
下圖是其中3個大致決定好的110字字庫  全用於戰鬥畫面


左邊是這次的罪魁禍首...關掉動畫後會出現的技能名
中間是之前弄的...動畫開啟時會出現的技能名
右邊是中斷戰鬥時可能會出現的塔羅牌名跟策略名跟少量選單解釋
這些字已經是盡量規劃後挑出來的了
例如為了顯示"winner"、"draw"、"on"、"off"而留下了些英文字
甚至還有共用一個中文字上半部分的例子
例如"雷"、"電"、"雪"、"震"、"霧"等字共用了上面的"雨"
應該看得出來我很努力在塞可用字了....(線條那些是邊框  不能砍)
更注意一點看會發現左圖跟中間圖許多字都是一樣的
基本上這些字就是不管開不開動畫都會出現用到
差異主要在於最下面兩列
左圖動畫關掉部分會多了一堆像"揮砍"這種一般攻擊名用字
中間圖主要是因boss戰強制開啟動畫而出現的敵boss技能用字

講了這麼多  總之戰鬥畫面文字這部分
主要只剩下按選擇鍵會出現的解釋文字  所以這部分完成至少75%
最後附上目前戰鬥畫面的樣子




星期三, 3月 21, 2012

戰鬥畫面文字

這部份意外地煩人,因為是用Sprites所以不太能用前文的方法取代,只能用一次讀入256個8x8字的方式。但是它部分函式又跟其他混合使用,動到這邊代碼就會影響另一邊。所以最後我投降了....回去找自己兩年前是怎麼改這部份的XD,最神奇的是最後總算在維持其他部分正常的情況下改好,但我卻不太確定原理(爆。

Anyway,反正戰鬥這部份出現的文字是獨立於狀態畫面等其他地方的(例如同一個魔法名稱會有複數份在Rom裡供不同地方使用),既然不用跟其他地方"同步",文字代碼就隨便我亂用了。

戰鬥畫面會出現的文字又能再分獨立三個部分:戰鬥中的招式與策略名、中斷選單中的塔羅牌與策略名、按選擇鍵的說明文。所以這三部分再各分3個256大小8x8字庫出來塞會用到的字,扣掉畫邊框用的與指令碼,大概會剩224個8x8字可用。再把少數會用到的8x8英文字獨立出來,8x16中文字大概塞100個左右吧。目前用來塞第一部份剛好夠用,記得以前精算過另外兩部分也沒問題。接下來應該會先把這三部分字先塞完,確認沒問題再去規劃狀態畫面跟地圖畫面的字庫(這邊可以使用700字以上,應該充裕得多...)。

下面是錄下來的影片,別問我怎麼取追魂暗影這種中二味十足的名稱...原文Dark Quest這種名稱鬼才知道怎麼翻...反正現在是套用兩年前的字庫,先將就著吧(逃

星期一, 3月 12, 2012

OB解析再開

呃....我還活著!
事實上有點活得太好,過得太爽了....
所以自虐老毛病又犯....突然對OB解析又有興趣了

雖然這兩年Blog被FB等整個覆滅了
不過我還是比較喜歡這種半日記的記事方式

之前.....哇~一年半前嗎(笑)
OB解析到一半時   因為要換工作太忙而停了
結果最近打開之前OB資料夾來看....完全看不懂XD
所以乾脆直接重來(爆)

先來確認一下情況一下吧!

OB系統面全部是8x8字  劇情面是16x16字
16x16字原始約有900字可用  まぁ....這完全是小case
壓縮法很簡單  索引方式比較不正規罷了
這部份有看到之前寫的解壓程式 但我卻完全沒有印象何時寫的(爆

討厭的是8x8字  主要有三大問題...

1. 顯示的方法太多種:
有Sprites的、有BG的、有字庫全讀的、有用到才讀的、有解壓展開的....etc.
之前解決法是case by case直接根據函式進入點寫死到VRAM固定位置
但這樣會變成不同視窗裡同代碼用不同字庫...

 2. 8x8字庫有夠小:
只有256個字可用  扣掉約一半是基本符號不能用....剩128字 
再加上至少2個字才能組出8x16中文字....變64字
雖然可以用取巧方法  讓64字變回兩倍128字....
但OB光武器名就需要兩倍量了吧.....

3. 沒辦法隨便擴容:
8x8字基本上只用到1 byte代碼
2 byte代碼"基本上是不存在的"(濁音字雖是2byte但其實是用table湊出來)
在同一地方要顯示超過256種字以上就一定要用到2byte
簡單來說就是....程式要"加寫"很大 orz
如果是C語言其實不是大問題  可惜這邊全是機械碼...
(e.g. AF 00  ff 7f表示將Ram 7fff00位置的值載入A暫存器)
一個for loop就能讓人看到淚目  更不用說去改了.....

好吧   對這種改很大的...好的工具是絕對必要的
除了看圖的YY-CHR跟看binary code的UltraEdit,下面是我ASM解析時不可缺的:

Snes9X1.43.ep9r8
>> 兩年前用的SFC debugger,用來輸出執行過程函式,很方便就沒想過要換了

65816 Reference (http://wiki.superfamicom.org/snes/show/65816+Reference)
>> SFC OP code一覽,沒這個就看不懂ROM在講什麼

總之....經過幾個假日約30~40小時的重新解析   8x8的主問題算解決了
簡單來說,就是將VRAM tile B1~FE兩兩一組  依顯示順序固定配給
再使代碼多出19xx~1Bxx  依不同顯示函式進行大小修改   
遇到這範圍的代碼就依序將整個字送到tile B1~FE的對應位置
用更白話一點的方式說
就是雖然知道有700多人  但同時間會進來房間坐的最多只有近40
所以乾脆準備40張椅子  有人進來就發一張椅子隨他要坐哪(位置不固定)
(之前的方式是把700人分組在不同房間  每個房間椅子都是固定位置)
好處是700字總算夠讓8x8系統用字使用  而且可以跟16x16代碼同步一致


測試圖如下  就解析來說是完成的
但因為我只有改其中兩個8x16字的代碼跟字樣而已  所以一副未完成樣XD
事實上是比之前做的方案還完善得多!