
\section{パターン編集}

\label{cmd:patedit}


\ARTemis は、スプライトエディタやパターンエディタとしても使えるように
作ってあります。これから説明する{\jem パターン編集コマンド}を中心として、
「設定」コマンドで設定できる小格子、大格子の表示スイッチ／
範囲座標限定スイッチ／
画面の拡大率のパラメータは、
パターン編集のために用意したものです。

コマンドを実行すると、次のようなメニューが画面いっぱいに
現れます。

.beginfigure() [- ac sn n27 label(fig:patmenu)
┌──────────────────────────┐
│            画像をパターンとして編集する     2      │
│┌──────────────────┐┌────┐│
││                                    │├────┤│
││                                    │├────┤│
││                                    │├────┤│
││                                    │├────┤│
││                                    │├────┤│
││                                    │├────┤│
││                                    │├────┤│
││                                    │├────┤│
││                  1                 │├────┤│
││                                    │├────┤│
││                                    │├────┤│
││                                    │├────┤│
││                                    │├────┤│
││                                    │├────┤│
││                                    │├────┤│
││                                    │├────┤│
││                                    │├────┤│
││                                    │└────┘│
│└──────────────────┘　　　　　　│
│                                            ┌──┐│
│                                           3│終了││
│                                            └──┘│
└──────────────────────────┘
パターン編集メニュー
.] endfigure()
.sp1

\subsection{パターン編集の概要}


まず、\ARTemis によるパターン編集の概要を説明します。

パターン編集は、ふだんの画面とは違う{\jem パターンバッファ}というところ
を中心に行います。ユーザーは、パターンを画面から
切り取って、このパターンバッファの上に
並べていきます。そして、パターンバッファに並べたパターン群に対して、
個別に移動したり削除したり、複数のパターンをまとめて削除したり複製したり
します。そして、パターンバッファ上の
内容をディスクに保存したり、ディスク上のパターンデータを
パターンバッファ上に読み込んだりします。

メニューの図をもとに説明すると、
以下のようになります。

画面から切り取ったパターンはすべて{\jem パターンバッファ}(図中1)上に並べられます。
これらのパターンは、左ドラッグ操作によりいつでも
パターンバッファ内を移動させることができます。
また、(マウスを動かさずに)パターンを左クリックすれば、そのパターンが
\mbox{``選択された''}
状態になり、画面上ではそのパターンは反転表示されます。

パターンを右クリックすると、そのパターンの位置に
「サブメニュー」が表示されます。
このサブメニューによって、ひとつのパターンに関する
情報を得ることができ、またそのパターンに対する編集を行うことができます
(詳細は後述)。

パターンバッファの右側にずらりと並んでいるのは、
パターン編集のための
各種コマンドの{\gt コマンドリスト}です(図中2)。
アイコンの絵柄を考えるのが面倒くさかったので、
文字ボタンにしてあります。サブメニューが個別のパターン
を編集するためであるのに対し、コマンドリスト上の
各コマンドは、複数のパターンをまとめて
編集するときのためのものです(詳細は後述)。

また、この「パターンバッファ」の表示は、拡大率がいつも２倍で表示されます。
スプライトを使う時にはこの倍率で表示するケースがほとんど
なので、問題はないと思います。

パターンバッファ上でないところで右クリックするか、あるいは右下にある
{\jem 終了ボタン}(図中3)を左クリックすれば、パターン編集コマンドは終了し、
メインメニューにもどります。



\subsection{パターンバッファにパターンを登録する}


パターンバッファには、最初はパターンはひとつも登録されていません。
パターン編集を行うには、なにはともあれ、パターンバッファにパターンを登録する
作業を行う必要があります。

コマンドリストの「パターン登録」のボタンを左クリックすると、
画面がふだんの画面に切り替わります。ここで、
パターンとして登録したい矩形領域を指定してください(
矩形領域の対角線の一端を左クリックし、次に、対角線のもう一方の端を
左クリックします)。

矩形領域の指定がおわると、画面はパターン編集画面に
切り替わります。パターンバッファ内をカーソルが移動しますから、
パターンを置きたい位置で左クリックしてください。

パターン登録の操作は以上です。

矩形領域の指定のときには、\mbox{``範囲座標限定''}スイッチ
が有効です。
パターンの大きさが、たとえば$16 \times 16$ドットというように
あらかじめ決まっている場合は、このスイッチを ON にしておくと便利です。



\subsection{パターンバッファの保存, 読み込み}


パターンバッファの状態をディスクに保存するには、コマンドリストの
「全パターン保存」を左クリックします。すると、画面にファイルメニュー
が現れます。画像の保存のときと同じ要領で、
ファイル名を指定してディスクに保存してください。

なお、コマンドリストの「選択パターン保存」を左クリックすると、
現在選択している(反転表示している)パターンだけをディスクに
保存できます。

ディスク上のデータをパターンバッファに読み込むには、コマンドリストの
「パターン新規読込」を左クリックします。すると、画面に
ファイルメニューが現れます。これも同じ要領で、ファイル名を指定して
読み込んでください。

なお、「パターン新規読込」コマンドの場合、以前のパターンバッファの内容は
消去されてしまいます。以前のパターンバッファの内容を残したまま、
ディスク上のパターンデータを読み込みたい場合は、「パターン追加読込」コマンド
を実行してください。


\subsection{パターン編集の各種コマンド}


パターン編集メニュー内で実行できる編集コマンドには、つぎのようなものが
あります。

.[- ac sn n6
-~>
パターンの選択状態の操作    左クリック / 全選択 / 全選択取消 / 全逆選択  
パターンの非表示状態の操作  選択非表示化 / 全表示 / 全非表示化 / 全逆表示
パターンの抹消              (サブメニュー)削除 / 選択パターン抹消        
パターンの複製              (サブメニュー)複製 / 選択パターン複製        
-~>
.] sp1

\subsubsection{パターンの選択}


パターンを``選択''する操作の最も単純なものは、「パターンを左クリックする」
という操作です。すでに選択されているパターンを
左クリックすると、そのパターンは選択されていない状態にもどります。

しかしそれだけでは、パターンの数が増えると面倒くさくなってきます。
そこで、
{\jem 全選択}というコマンドをコマンドリスト上に用意しました。このコマンドを
実行すると、表示されている全部のパターンが
選択された状態になります。

同様に、{\jem 全選択取消}コマンドを実行すると、すべての選択が取り消されます。
{\jem 全逆選択}コマンドを実行すると、選択されているパターンの選択が取り消され、
選択されていないパターンがあらたに選択された状態になります。


\subsubsection{パターンの非表示化}


パターン数があまりに多くなってくると、全部のパターンが表示されるのはうるさく
なってきます。そこで、一部のパターンを、「存在するけど表示されない」状態に
することができます。これを「非表示状態」と呼びます。

{\jem 選択非表示化}コマンドを実行すると、現在選択された状態にあるパターンが
非表示化されます。{\jem 全非表示化}コマンドを実行すると、存在する
すべてのパターンが非表示化されます。逆に{\jem 全表示}コマンドを実行すると、
存在するすべてのパターンの非表示状態が解除されます。{\jem 全逆表示}コマンド
を実行すると、表示されているパターンは非表示化され、表示されていない
パターンは表示されるようになります。


\subsubsection{パターンの抹消}

\label{cmd:patdelete}

いらなくなったパターンを消去したいときは、そのパターンを選択状態にしてから
{\jem 選択パターン抹消}コマンドを実行してください。複数のパターンも一度に
抹消できます。


一つだけのパターンを抹消したいときは、そのパターンの所で
サブメニューを表示させ、サブメニューの「削除」コマンドを用いる、という方法が
あります。


\subsubsection{パターンの複製}

\label{cmd:patcopy}

複数のパターンを複製したい場合は、それらを選択状態にしてから
{\jem 選択パターン複製}コマンドを実行してください。

ひとつのパターンだけを複製したい場合は、サブメニューの「複製」コマンドを
用いると便利です。


\subsection{サブメニューの活用}


サブメニューとは、パターンにカーソルをあわせて右クリックしたときに
表示されるメニューのことです。これには、以下のような機能が備わっています。

.[- i+6
(a) そのパターンを抹消する
(b) そのパターンを複製する
(c) そのパターンの名前をユーザーが入力する
(d) そのパターンの略称をユーザーが入力する
(e) そのパターンの大きさ(縦・横のドット数)を表示する
(f) そのパターンに用いられている色の数を表示する
(g) そのパターンを編集画像にコピーする(貼り付け)
.]
.sp1

(a), (b) についてはすでに説明したとおりです。

(c) の機能は、パターンひとつひとつに名前をつけるための機能です。
名前を付けておくと、スプライトデータなどに変換したとき、
どのデータがどのパターンを表すのかがすぐ確認できます。
「パターン名」という表示の右の四角を左クリックすると、その中に
カーソルが現れるので、キーボードからパターン名を入力してください。

(d) の機能は、「パターンの本当の名前は長いけれど、パターンバッファ上では
短い略称で名前を表示したい」というときに使います。(c)の機能と同じ
要領で使用してください。

(g) の機能は、パターンを編集画像にコピーするという機能です。もちろん、COPY時演算や
描画濃度の設定が有効です。これは、「パターン登録」の逆の機能です。

\subsection{データ形式の変換}


パターン編集の機能の一端として、パターンデータをもとにして
スプライトデータや文字列データを作成することができます。

\TOWNS のスプライトには「16色スプライト」と「3万色スプライト」
の2種類ありますが、\ARTemis で作成できるスプライトデータは3万色スプライト
のものだけです。

一方、「文字列データ化」というのは、ようするに
パターンの色コードを文字列にして出力するだけの機能です。詳細は
後述します。

\subsubsection{スプライトデータ化}

スプライトデータは、C言語の配列データ、またはBASICのDATA文、あるいは
バイナリデータとしてファイルに出力する、というかたちで作成します。

まず、スプライトデータ化したいパターンを「選択された状態」にしてください。
そして、コマンドリストの「スプライトデータ化」のところを左クリック
してください。ファイルメニューが現れます。

ファイルメニューの操作法は、他の場面と全く同じです。ただ、スプライトデータ化コマンド
の場合、ファイル形式として\mbox{``C言語の配列''}, \mbox{``BASICのDATA''}, 
\mbox{``ベタ(情報なし)''},
\mbox{``ベタ(情報あり)''}
の4種類を選べます。

{\jem C言語の配列}というのは、スプライトデータを次のような形で出力することを
意味します。

.[- n10
static char sprite_32k[][512] = {
  /* myship */
  {  33, 10,129, 10,165, 20,231, 28,  0,128,  0,128,  0,128,  0,128,
     ...
                ...,  0,128,  0,128, 52, 70, 85, 74,133, 16,  0,128 },

  /* bomb */
  {   0,128,  0,128,  ...
  ...
};
.]
.sp1
ここで、各パターンデータのデータの前には、そのパターンの名前(サブメニューで
設定する)が
コメントとして出力されます。

{\jem BASICのDATA}というのは、スプライトデータを次のような形で出力することを
意味します。

.[- i+4 n8
10000 ' 32768色 スプライトパターンデータ
10010 '  myship
10020 DATA 8000,8000,8000,8000,8000,8000,8000,8000
10030 DATA 8000,8000,8000,8000,8000,8000,8000,8000
10040 DATA 8000,8000,8000,8000,8000,8000,8000,8000
10050 DATA 8000,8000,8000,8000,8000,8000,8000,8000
10060 DATA 8000,8000,8000,8000,8000,18c6,2d6b,2d6b
10070 DATA 2d6b,18c6,....
.] sp1
ここで、１つのパターンは32行のDATA文からなり、
各パターンデータのデータの前には、そのパターンの名前(サブメニューで
設定する)が
コメントとして出力されます。

{\jem ベタ}で出力する、というのは、スプライトデータをそのままファイルに
出力する、という意味です。この場合、
出力されるバイナリファイルの内容は次のようになります。

.[- ac sn
---------------------------------------------------------------
  オフセット(単位:バイト)  内容                              
---------------------------------------------------------------
  +  0 〜 + 511            1 個目のスプライトパターンのデータ
  +512 〜 +1023            2 個目のスプライトパターンのデータ
  ...                                                        
  +512(n-1) 〜 +(512n-1)   n 個目のスプライトパターンのデータ
  ...                                                        
---------------------------------------------------------------
.]
.sp1

{\jem ベタ(情報なし)}のファイル形式の場合、このバイナリファイル
だけが出力されます。

{\jem ベタ(情報あり)}のファイル形式の場合、このバイナリファイルに加え、
次のような「パターン名リストファイル」が拡張子 \verb+.SPI+ にて出力
されます。
.[- i+6
  0: AMOUEBA
  1: AMOUEBA2
  2: IKA
  ...
.]
.sp1
これは、バイナリファイルの中のパターンとパターン名(サブメニューで設定)
の対応をあらわすリストです。


\subsubsection{文字データ化}


これは、パターンを次のような形式で出力するコマンドです。

.[- i+4 n5
MYSHIP
0000 0000 0000 0000 0000 0000 0000 35ad 2529 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0842 4633 210a 0c63 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 1084 39d1 1ce8 1084 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 294a 4634 252a 0c63 ...
.]
.sp1
つまり、ドットの色コードを表す16進文字列を、縦・横にパターンの大きさ分だけ
ならべたデータを出力します。なお、各パターンデータの前には、
パターン名(サブメニューで設定)が出力されます。

このコマンドを実行する前にまず、
文字列化したいパターンを選択状態にしてください。
そして、コマンドリストの「文字データ化」のところを左クリック
してください。ファイルメニューが現れます。

ファイルメニューの操作法は、他の場面と全く同じです。ファイル名を指定して、
データを出力してください。

「こんなコマンドが一体何につかえるんだ」という疑問が起こって当然です。
このコマンドは、私が\ARTemis のアイコンをデザインするために用意したという、
非常に私的で特殊な機能ですから、ほとんど使い道はないと思います。
しかし、sed や awk などのテキスト変換ツールや、テキストエディタの
置換機能などを活用すれば、このパターンデータも
何らかの用途に使えるかもしれません。
なんて無責任な！



\subsection{順表示アニメ}


これは、選択状態にあるパターンを、パターン番号(各パターンの下に表示される番号)
の小さい方から順に表示していくだけのコマンドです。しかし、
パターンの動きの簡単なチェックには使えます。

順表示させたいパターンを選択状態にしてから、
コマンドリスト中の「順表示アニメ」ボタンを左クリックしてください。
パターン番号の小さい順に、順番に表示されていきます。一巡すると、また
パターン番号が最小のパターンにもどって表示されます。

マウスのボタンをクリックするとコマンドは終了します。

「パターン番号の小さい順に」ということに注意してください。これは
少し不便な制限です。しかし、パターン名をうまく工夫して、{\jem 名前順ソート}
コマンドを実行すれば、パターン番号を思いどおりに付け替えることができます。
