【TIC-80】パレット編集

# はじめに

以前の「[ドット絵を描いて動かそう！（「TIC-80」のご紹介）](https://qiita.com/uokagi/items/725972571341a30fd44d)」の続きのようなものです

## パレット編集画面説明

![パレット編集01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284455/9547b38a-3540-eea7-e144-a52181881f22.png)

## パレット文字列

だいたいは使っていれば分かるかと思いますが、左下に「COPY PALETTE」と「PASTE PALETTE」があります。

例えばこの状態で「COPY PALETTE」をクリックした後、「メモ帳」などのテキストエディタで
「貼り付け」すると16進数の文字列が表示されます。
![パレットテキスト.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284455/3e9f4d4b-93e0-fe13-19d5-db0a3b0661d6.png)
「右端で折り返す」表示のため2行になっていますが、1行の文字列です。
最初の6文字で色番号0のR（赤）G（緑）B（青）を16進数の2文字でそれぞれ表しており、以下色番号1～15も同様に並んでいます。

「[TIC-80 Wiki](https://github.com/nesbox/TIC-80/wiki)」の「[パレットのページ](https://github.com/nesbox/TIC-80/wiki/palette)」には様々なパレットが公開されているので試してみるのもいいでしょう。
![TIC80wikiPalette_ss.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284455/9fd0e3a7-e4ab-1c3e-683c-2e340d9435ac.png)

例えば「JAPANESE MACHINE PALETTE」というのがありますので、ブラウザ上で「`pal: `」以下の文字列をコピーして
TIC-80の「PASTE PALETTE」をクリックすると以下のようになります。（ゾンビかな？）
![パレット貼り付け_小.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284455/a80c48f4-d4f5-0f86-46c4-27e6285c3395.png)

## TIC-80パレット編集ツール（Web）

また、Wikiでも紹介されていますが、
ブラウザ上でパレットを編集して、TIC-80用パレット文字列を生成してくれるツールが
公開されています。

**[TIC-80 Color Palette Tool](https://aaronsnoswell.github.io/blog/tic-80-color-palette-tool)**

![パレットツール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284455/865ae9f6-3bac-ddd1-d51c-6f1c5eb704f2.png)


## TIC-80を2つ起動して色々コピペ

テキストエディタやブラウザを経由しなくても、「TIC-80」を２つ立ち上げて、
別ファイルを読み込めば（新規作成）、パレット情報のコピペも可能です。
![パレット共有.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284455/055dc690-8d3e-3525-f936-a882293cb3e9.png)

また、パレット情報だけでなく、スプライトパターンのコピペも可能です。

![スプライトコピペ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284455/a9854fc5-a326-0bdc-925b-a80777be2082.png)

ちなみにテキストエディタに「貼り付け」すると色番号`0`~`f`(15)のスプライトパターン文字列がペーストされます。
GUIでポチポチこのようなデータを生成できるのは応用も色々できそうです。
![スプライトパターン文字列.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284455/e5bdd21d-e702-d3c1-4bea-6671e8fa97b3.png)


## プログラムからパレット情報の変更

また、パレット情報はプログラム動作中に変更も可能で、それをカートリッジ（.tic）ファイルに反映も可能です。

パレットの色の交換の関数を作ってみました。

```swapal.lua
function swapal(c1,c2,dosync)
	local ADDR=0x03FC0
	local t1,t2={},{}
	for i=0,2 do t1[i]=peek(ADDR+3*c1+i)end
	for i=0,2 do t2[i]=peek(ADDR+3*c2+i)end
	t1,t2=t2,t1
	for i=0,2 do poke(ADDR+3*c1+i,t1[i])end
	for i=0,2 do poke(ADDR+3*c2+i,t2[i])end
	if dosync then sync(1<<5,0,true)end
end
```

使い方としては c1,c2にスワップしたい色番号を指定して、ticファイルにも反映させる場合には
trueを続けて指定します。

例えば、newしたサンプルプログラムなら、色番号5は緑色、13は水色ですが、
![new.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284455/eb6a1133-7018-f138-534b-bab0f54b5808.png)
こんな感じでコピペして呼び出すと
![swapal_code.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284455/aa058144-0513-84ce-afe3-df176127dfce.png)

このように色が交換できます。
![swapal_result.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284455/e7dc27bf-339f-5cce-f239-91afd864c879.png)

3番目の引数に`true`を指定したので、ticファイルにも反映されます。
![swapal_result3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284455/aaa52af1-9dbc-0941-16bd-84d53b51d314.png)

「TIC-80]は基本的には16色ですが、プログラム実行中に変化させたり、`SCN`命令との組み合わせで、
描画中に変更して16色以上の色を表示させたりすることもできます。

とりあえずパレットの説明はこの辺で一旦終了します。
その他、palette map とかもありますが別の機会に。

皆さんも「[**TIC-80**](https://tic.computer/)」使ってみましょう！