Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

シェルを自分の絵にする

クローディア(冷笑)

借り物の立ち絵を着せたままでは、せっかくのゴーストも他人の顔をしているようなものですわね。

アンソニー(素)

見本の絵には、どこまで手を入れてよろしいのでございますか。

クローディア(したり顔)

どこまででも。この頁では、見本のシェルを自分の絵にする、表情を足す、触れる場所を足す――その三つを、わたくしが順にお見せしますわ。


この章の前提

この章は、入門ガイドの準備の章 ゴーストの最小一式を置く を終え、hello-pasta の見本のシェルを自分のゴーストの shell/master/ に写した人に向けて書く。 見本のシェルに入っているファイルの種類と見本の絵 2 枚は、準備の章の節 シェルの中身 にある。 この章で「見本のシェル」と書いたら、その写した shell/master/ を指す。

辞書とシェルの接点

辞書とシェルが触れ合う所は、次の 3 つである。

辞書の側シェルの側決めるもの
アクター辞書の表情名(@表情名:\s[サーフェス番号])surfaces.txt のサーフェスの定義と、その番号の画像台詞のときに出る絵
触った場所の名前が入る $r4surfaces.txt の当たり判定の行$r4 に入る名前
pasta.toml のアクターの spotdescript.txt の吹き出しの位置の行台詞を出す吹き出しの位置
  • pasta.dll は、シェルのファイルを読まない
  • 絵を出す・当たり判定を決める・吹き出しを置くのは、ベースウェアの SSP である

サーフェス番号と表情名

見本のシェルのサーフェス番号は、女の子が 0〜8、男の子が 10〜18 である。 9 番のサーフェスは無い。 3 段目のアクター辞書は、これらの番号に次の表情名を付けている。

表情名女の子のサーフェス番号男の子のサーフェス番号
@笑顔010
@通常111
@照れ212
@驚き313
@泣き414
@困惑515
@キラキラ616
@眠い717
@怒り818

当たり判定の名前と $r4

見本のシェルの当たり判定の名前は、Face・Head・Body の 3 つである。 立ち絵をつついたり撫でたりすると、触った場所の当たり判定の名前が、部位の名前としてイベントの Reference4 に入る。 この名前を、つつき・撫でのシーンの名前の末尾に付ける(*つっつき反応女の子Head など)。$r4 でも取り出せる。 次の表は、SSP の実機でダブルクリックして確かめた、名前が返る場所である。

名前女の子で返る場所男の子で返る場所
Face顔の中央顔
Head頬の横の髪コック帽と横の髪
Body胴胴

吹き出しとアクターの 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[サーフェス番号])

番号の選び方

  • 見本のシェルは、女の子に 0〜8、男の子に 10〜18 を使っている。新しい表情には、これらと重ならない番号を選ぶ
  • UKADOC の シェルの作成 によれば、サーフェス番号は 0 以上の数で、surface0 と surface10 の 2 つは基本的に必須である
  • 番号の決まりの正本は、UKADOC のこのページである

新しいサーフェスの当たり判定

当たり判定は、サーフェスの定義ごとに書く。 新しいサーフェスの定義に当たり判定の行を書かなければ、その表情を出しているあいだは、立ち絵を触っても $r4 に部位名が入らない。 当たり判定の行の書き方は、当たり判定を足す・直す にある。

足した表情を確かめる

  1. 辞書の台詞で、足した表情名を @表情名 の形で呼ぶ。呼び方は 台詞の中で表情を呼ぶ にある
  2. 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* の項である

名前は部位の名前になる

重なった所では先に書いた定義が返る

  • 当たり判定が重なった所を触ると、先に書いた定義の名前が返る
  • 見本では Face の行を Head の行より先に書いてあり、顔の真ん中では Face が、髪と帽子では Head が返る
  • 見本の surfaces.txt には、判定の順を決める collision-sort の行が無い。順の決まりの正本は、UKADOC の collision-sort の項である

当たり判定はサーフェスごとに替わる

  • 当たり判定は、サーフェスの定義ごとに要る。表情が替わると、当たり判定もそのサーフェスの定義に書いたものに替わる
  • 表情を足すときの当たり判定は、新しいサーフェスの当たり判定 にある

足した当たり判定を確かめる

  1. 8 段目の確かめ方 と同じく、8 段目の辞書のまま SSP を起動する
  2. 足した・直した場所をダブルクリックし、台詞に入る部位名を見る
  • 成功の目印: 触った場所の当たり判定の名前が、台詞に入る
  • 当たり判定の枠は、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 で表示して確かめる

クローディア(照れ)

……べ、別に、あなたの描いた顔が見たいわけではありませんのよ。でも一枚差し替えたら、わたくしにも見せてくださいまし。

アンソニー(素)

まずは一枚から、でございますね。