最新の10件
ページ | 日付 |
---|---|
en:guid:febuildergba:work_support | 2023/06/08 20:25 |
guide:febuildergba:作品支援 | 2023/06/08 20:24 |
最新の10件
ページ | 日付 |
---|---|
en:guid:febuildergba:work_support | 2023/06/08 20:25 |
guide:febuildergba:作品支援 | 2023/06/08 20:24 |
GBAでは、大きな画像を8*8のタイルに分けて管理します。
そのタイルをどうやって表示するか決めるのがTSAデータです。
小さい画像ではTSA不要のものが多いですが、CGなどの大きな画像を操作しようとするとTSAの問題にぶつかります。
TSAを活用すると、8*8のタイルごとにパレットを切替たりして16色以上の絵が出せたりしますが、使いこなすのがとてつもなく難しいです。
1つのタイルは8*8ピクセルからなります。
タイル番号は左上を0番としてスタートします。
1つのデータはu16のデータです。(リトルエンディアン)
C言語で表現するとこのようなデータ構造です。
uint max = (width / 8) * (height / 8); for(uint i = 0 ; i < max ; i ++ ) { u16 tileNumber = data[i] & 0x03FF; //タイル番号 bool isHorizontalFlip = data[i] & 0x0400; //横反転するか bool isVerticalFlip = data[i] & 0x0800; //縦反転するか u8 pallet = (data[i] >> 12) & 0xf; //利用するパレット0-15個 }
ビット列に対して、このようになります。
FE DC BA 98 76 54 32 10 11 11 11 11 11 11 11 11 |------------| 3 F F ---> タイルナンバー 0 ~ 1023 |-> 横(Horizontal )反転するかどうか? 0=しない 1=する |--> 縦(Vertical )反転するかどうか? 0=しない 1=する |---| ---> パレット 0-15
こちらに詳しい解説があります。
gbatek LCD VRAM BG Screen Data Format (BG Map)
http://problemkaputt.de/gbatek.htm#lcdvrambgscreendataformatbgmap
[FE7] World Map! + TSA Tips
http://feuniverse.us/t/fe7-world-map-tsa-tips/165
GBA Graphics Editor で生成できます。
GBA Graphics Editorを立ち上げて、romを読み込み、
Window→Control を表示してください。
Use TSA にチェックを入れます。
TSAのアドレスを入れます。
もし、TSAが圧縮されているならば、「Compressed」をチェックします。
これでTSAを利用した画像が見れます。
TSAを変更した場合、Tileの項目で変更できます。
注意!
この内容は変更したら即反映されます。
圧縮TSAの場合、サイズが可変長になるので、後ろのデータを壊すことがあります。
必ずバックアップをとってください。
いちいち変更しなくてはいけないのは変動なので、
キーボード操作自動化ソフトとかを使ってマクロを作るといいです。
OPデモのワールドマップは、HiMacroExで以下のように定義して、一気に作成させました。
W WindowsForms10.Window.8.app.0.33c0d9d,Tile Control LCtrl Down A C LCtrl Up LShift Down Tab LShift Up LCtrl Down A V LCtrl Up Tab Tab LCtrl Down A LCtrl Up 0 LShift Down Tab LShift Up ↑
圧縮解凍はlz77ですので、Nintenlords Compressorなどを使ってください。
背景用に240×160の16色を表示する無圧縮TSAが、ROM内に 0xAA7330 として定義されています。
このTSAで動くものについては、何もせずにこれを指定するだけで利用できます。