シェルを自分の絵にする
借り物の立ち絵を着せたままでは、せっかくのゴーストも他人の顔をしているようなものですわね。
見本の絵には、どこまで手を入れてよろしいのでございますか。
どこまででも。この頁では、見本のシェルを自分の絵にする、表情を足す、触れる場所を足す――その三つを、わたくしが順にお見せしますわ。
この章の前提
この章は、入門ガイドの準備の章 ゴーストの最小一式を置く を終え、hello-pasta の見本のシェルを自分のゴーストの shell/master/ に写した人に向けて書く。
見本のシェルに入っているファイルの種類と見本の絵 2 枚は、準備の章の節 シェルの中身 にある。
この章で「見本のシェル」と書いたら、その写した shell/master/ を指す。
辞書とシェルの接点
辞書とシェルが触れ合う所は、次の 3 つである。
| 辞書の側 | シェルの側 | 決めるもの |
|---|---|---|
アクター辞書の表情名(@表情名:\s[サーフェス番号]) | surfaces.txt のサーフェスの定義と、その番号の画像 | 台詞のときに出る絵 |
触った場所の名前が入る $r4 | surfaces.txt の当たり判定の行 | $r4 に入る名前 |
pasta.toml のアクターの spot | descript.txt の吹き出しの位置の行 | 台詞を出す吹き出しの位置 |
pasta.dllは、シェルのファイルを読まない- 絵を出す・当たり判定を決める・吹き出しを置くのは、ベースウェアの SSP である
サーフェス番号と表情名
見本のシェルのサーフェス番号は、女の子が 0〜8、男の子が 10〜18 である。 9 番のサーフェスは無い。 3 段目のアクター辞書は、これらの番号に次の表情名を付けている。
| 表情名 | 女の子のサーフェス番号 | 男の子のサーフェス番号 |
|---|---|---|
@笑顔 | 0 | 10 |
@通常 | 1 | 11 |
@照れ | 2 | 12 |
@驚き | 3 | 13 |
@泣き | 4 | 14 |
@困惑 | 5 | 15 |
@キラキラ | 6 | 16 |
@眠い | 7 | 17 |
@怒り | 8 | 18 |
- 表情名の付け方の正本は、3 段目:表情を変えたい と アクター辞書 である
当たり判定の名前と $r4
見本のシェルの当たり判定の名前は、Face・Head・Body の 3 つである。
立ち絵をつついたり撫でたりすると、触った場所の当たり判定の名前が、部位の名前としてイベントの Reference4 に入る。
この名前を、つつき・撫でのシーンの名前の末尾に付ける(*つっつき反応女の子Head など)。$r4 でも取り出せる。
次の表は、SSP の実機でダブルクリックして確かめた、名前が返る場所である。
| 名前 | 女の子で返る場所 | 男の子で返る場所 |
|---|---|---|
Face | 顔の中央 | 顔 |
Head | 頬の横の髪 | コック帽と横の髪 |
Body | 胴 | 胴 |
- 当たり判定の無い所(首の隙間・靴・足元)を触ると、部位の名前は空になる。部位の名前を付けたシーンは探されない
- シーンの名前の付け方は、8 段目:触ったら反応してほしい と つつき・撫でのショートカット にある。
$r4の取り出し方は、リクエスト変数 にある
吹き出しとアクターの spot
どのアクターの台詞がどちらの吹き出しに出るかは、pasta.toml のアクターの spot で決まる。
spot | 台詞を出す側 | 吹き出しの位置を決める descript.txt の行 | 見本のアクター |
|---|---|---|---|
0 | メイン(sakura 側) | sakura.balloon.offsetx・sakura.balloon.offsety | 女の子 |
1 | サブ(kero 側) | kero.balloon.offsetx・kero.balloon.offsety | 男の子 |
spotは、pasta.tomlの[actor."名前"]に書く。書き方はspotにある- 立ち位置と台詞の出力先の関係は、バルーン連携 にある
- シェル(立ち絵)の無い相手役も、シェルのあるアクターと同じ
spotに置けば、同じ吹き出しで交代に話す。書き方は 1 つのスポットを複数のアクターで共有する にある - 同じ吹き出しに出る台詞を誰のものか見分けるには、アクターに文字の色などの装いを付ける。書き方は 装い(font) にある
辞書とシェルが食い違ったとき
- 表情名がシェルに無い番号を指していても、pasta はそれを検出しない。
pasta.dllはシェルを読まず、表情名の値の\s[番号]をそのまま出す - そのとき SSP は、前の絵を出したまま台詞を続ける。立ち絵は消えない
- ふだんの設定では、エラーも出ない。気づく手がかりは、表情が替わらないことだけである
- 前の絵のまま台詞が続くことと、エラーが出ないことは、SSP 2.9.11 の実機で確かめた振る舞いである
- 部位の名前には、シェルが当たり判定に付けた名前がそのまま入る。pasta は名前を変換しない。つつき・撫でのシーンの名前とは、そのままの名前で完全一致で照合する
- 名前の大文字と小文字も、シェルに書いたとおりのまま入る。シーンの名前も、シェルと同じ大文字・小文字で書く
絵を差し替える
サーフェス番号と同じ番号のファイル名(surfaceN.png)の画像を自分の絵に置き換えれば、辞書を書き換えずに絵が替わる。
辞書が指すのはサーフェス番号であり、番号からファイル名を引くのは surfaces.txt のサーフェスの定義だからである。
- 見本の絵は、333×500 の透過 PNG で、女の子 9 枚(
surface0.png〜surface8.png)・男の子 9 枚(surface10.png〜surface18.png)である。差し替えるときの目安にする - 見本のシェルの
descript.txtにはseriko.use_self_alpha,1の行があり、画像のアルファチャンネルが透明度として使われる - 画像の大きさや立ち位置を変えたときは、当たり判定の座標(当たり判定を足す・直す)と、吹き出しの位置の行(吹き出し(バルーン))も見直す対象になる
- 画像の形式・透過・ファイル名の決まりの正本は、UKADOC の シェルの作成 と
seriko.use_self_alphaである
ファイル名や番号が合わないとき
ファイル名や番号が surfaces.txt の指定と合っているかは、次の 3 つを突き合わせて確かめる。
- 画像のファイル名
surfaces.txtのサーフェスの定義の見出し(surface0など)- その定義の中の
element0の行に書かれたファイル名
element0 の行の形は、当たり判定を足す・直す の抜き出しにある。
見本のシェルでは、どの定義も element0 の行が 1 行で、surfaceN の定義が surfaceN.png を指している。
element0 の行の書き方の正本は、UKADOC の element* の項である。
見本の絵のライセンス
- 見本の絵は Unlicense で公開している。自分の絵の土台にしてよい
- 絵の出どころの記録とライセンスの原文は、リポジトリの
crates/pasta_sample_ghost/art/README.mdにある - この記録は、配布物の
.narには入っていない
表情を足す
表情を 1 つ足すときに触る所は、次の 3 つである。
| 触る所 | 足すもの |
|---|---|
| 画像 | 新しいサーフェス番号のファイル(surfaceN.png) |
surfaces.txt | そのサーフェスの定義(surfaceN の見出しと、element0 の行と、当たり判定の行) |
| アクター辞書 | 新しい番号を指す表情名の行(@表情名:\s[サーフェス番号]) |
- サーフェスの定義の形は、当たり判定を足す・直す の抜き出しにある
- 表情名の書き方の正本は、3 段目:表情を変えたい と アクター辞書 である
番号の選び方
- 見本のシェルは、女の子に 0〜8、男の子に 10〜18 を使っている。新しい表情には、これらと重ならない番号を選ぶ
- UKADOC の シェルの作成 によれば、サーフェス番号は 0 以上の数で、
surface0とsurface10の 2 つは基本的に必須である - 番号の決まりの正本は、UKADOC のこのページである
新しいサーフェスの当たり判定
当たり判定は、サーフェスの定義ごとに書く。
新しいサーフェスの定義に当たり判定の行を書かなければ、その表情を出しているあいだは、立ち絵を触っても $r4 に部位名が入らない。
当たり判定の行の書き方は、当たり判定を足す・直す にある。
足した表情を確かめる
- 辞書の台詞で、足した表情名を
@表情名の形で呼ぶ。呼び方は 台詞の中で表情を呼ぶ にある - 3 段目の確かめ方 と同じ手順で、SSP でその台詞を出す
- 成功の目印: その台詞のときに、足した絵が出る
- 絵が替わらないときは、辞書とシェルが食い違ったとき と ファイル名や番号が合わないとき を見る
当たり判定を足す・直す
当たり判定は、surfaces.txt のサーフェスの定義の中に書く。
次は、見本のシェルの surfaces.txt から、女の子の surface0 の定義を抜き出したものである。
surface0
{
element0,overlay,surface0.png,0,0
collisionex0,Face,rect,124,130,204,200
collisionex1,Head,rect,96,84,233,201
collisionex2,Body,rect,110,218,221,403
}
collisionexで始まる 1 行が、当たり判定を 1 つ決める。行に書くのは、名前・形・座標である(collisionexN,名前,形,座標)- 見本の行の形は、どれも矩形の
rectで、座標は左・上・右・下の順に並ぶ - 男の子のサーフェス(10〜18)も同じ形で、座標が違う
- 使える形の種類と座標の書き方の正本は、UKADOC の
collisionex*の項である
名前は部位の名前になる
- 行に書いた名前が、立ち絵を触ったときの部位の名前になる。見本の名前と返る場所は、当たり判定の名前と $r4 にある
- 部位の名前をシーンの名前に付ける書き方は、8 段目:触ったら反応してほしい にある。
$r4の取り出し方は、リクエスト変数 にある
重なった所では先に書いた定義が返る
- 当たり判定が重なった所を触ると、先に書いた定義の名前が返る
- 見本では
Faceの行をHeadの行より先に書いてあり、顔の真ん中ではFaceが、髪と帽子ではHeadが返る - 見本の
surfaces.txtには、判定の順を決めるcollision-sortの行が無い。順の決まりの正本は、UKADOC のcollision-sortの項である
当たり判定はサーフェスごとに替わる
- 当たり判定は、サーフェスの定義ごとに要る。表情が替わると、当たり判定もそのサーフェスの定義に書いたものに替わる
- 表情を足すときの当たり判定は、新しいサーフェスの当たり判定 にある
足した当たり判定を確かめる
- 8 段目の確かめ方 と同じく、8 段目の辞書のまま SSP を起動する
- 足した・直した場所をダブルクリックし、台詞に入る部位名を見る
- 成功の目印: 触った場所の当たり判定の名前が、台詞に入る
- 当たり判定の枠は、SSP の開発用パレットの「当たり判定を表示」で目で見られる。開発用パレットの開き方は、UKADOC の シェルの作成 にある
吹き出し(バルーン)
見本のゴーストには、バルーンが入っていない。
台詞は、SSP で選ばれているバルーンに出る。
吹き出しの位置は、シェルの descript.txt の次の 4 行で決まる。
sakura.balloon.offsetx,100
sakura.balloon.offsety,-105
kero.balloon.offsetx,50
kero.balloon.offsety,120
sakura.balloonの 2 行がメイン側の、kero.balloonの 2 行がサブ側の吹き出しの位置を決めるoffsetxの値は、+にするほど吹き出しがシェルに近づく。offsetyの値は、+にするほど吹き出しが下へ動く- 書き方の正本は、UKADOC の
sakura.balloon.offsetxの項である - 見本の値は、SSP の既定のバルーンの大きさを前提に決めてある。背の高いバルーンを選ぶと、吹き出しが相方の絵にかかることがある
- どのアクターの台詞がどちらの吹き出しに出るかは、
pasta.tomlのspotで決まる。対応は 吹き出しとアクターの spot にある
バルーンをゴーストと一緒に配りたいとき
この章では、バルーンを同梱する手順は扱わない。 同梱のしかたの正本は、次の 2 つである。
この章で扱わないこと
- シェルには、着せ替えやアニメーションなどの機能もある。読み先は、UKADOC の アニメーション/着せ替えの設定 である
- そうした機能を使っても、辞書との接点(サーフェス番号・当たり判定の名前・
spot)は変わらない。接点は 辞書とシェルの接点 にある - pasta は、シェルの書き間違いを検査する道具を持たない。シェルを直したら、SSP で表示して確かめる
……べ、別に、あなたの描いた顔が見たいわけではありませんのよ。でも一枚差し替えたら、わたくしにも見せてくださいまし。
まずは一枚から、でございますね。