GBAでは、大きな画像を8*8のタイルに分けて管理します。\\ そのタイルをどうやって表示するか決めるのがTSAデータです。\\ 小さい画像ではTSA不要のものが多いですが、CGなどの大きな画像を操作しようとするとTSAの問題にぶつかります。\\ TSAを活用すると、8*8のタイルごとにパレットを切替たりして16色以上の絵が出せたりしますが、使いこなすのがとてつもなく難しいです。\\
====== TSAのデータ構造 ======
{{column:tsa:tile2.png}}\\ 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 \\
====== TSAをGUIで作る方法 ======
===== step_a01 =====
GBA Graphics Editor で生成できます。\\ GBA Graphics Editorを立ち上げて、romを読み込み、\\ Window->Control を表示してください。\\
===== step_a02 =====
Use TSA にチェックを入れます。\\ TSAのアドレスを入れます。\\ もし、TSAが圧縮されているならば、「Compressed」をチェックします。\\ \\ これでTSAを利用した画像が見れます。\\
===== step_a03 =====
例えば、OPデモのワールドマップは、このような感じです。\\
|画像アドレス|0xB4BBA0|
|パレット|0xB4FCD4|
|TSA|0xB4F758|
TSAを設定しない時\\ {{column:tsa:no_tsa.png}}
\\ TSAを設定した時\\ {{column:tsa:use_tsa.png}}
===== step_a04 =====
TSAを変更した場合、Tileの項目で変更できます。\\ 注意!\\ この内容は変更したら即反映されます。\\ 圧縮TSAの場合、サイズが可変長になるので、後ろのデータを壊すことがあります。\\ 必ずバックアップをとってください。\\ \\ {{column:tsa:edit_tsa.png}}
\\ \\ いちいち変更しなくてはいけないのは変動なので、\\ キーボード操作自動化ソフトとかを使ってマクロを作るといいです。\\ 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などを使ってください。\\ \\ ====== 背景用に240x160 16色の画像を表示する無圧縮TSA ======
背景用に240x160の16色を表示する無圧縮TSAが、ROM内に 0xAA7330 として定義されています。\\ このTSAで動くものについては、何もせずにこれを指定するだけで利用できます。\\