星期一, 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劇情部分了