簡単なシェルの揚げ方

シェルの作成は里々の領分ではないので、ここでは自力で絵を描ける・編集できる人向けのサクッと作る手順を紹介。
参考情報/2023年11月時点。




シェルの仕様書は先人の努力の積み重ねもあって高機能だが、そのぶん複雑にもなっている。
新機能もどんどん追加されているので、マニュアルがまだ追い付いていないことも多い。
そこで、以下では現在の主流SSPを前提としたシンプルな手順を紹介。

なにはともあれまずはSSP公式仕様書へ。
着せ替えなどは解説が膨大になりやすいのでここでは割愛します。

シェル画像の用意

ゴースト名\shell\masterフォルダ内に画像を作る。
(フォルダの構成はファイル構成を参照)
過去の仕様も使えるので色々こんがらがるが、今は新機能によってpnaを用意したり背景を原色にする等は必要なくなった

ベース画像を描こう

画像形式はPNG32(32bit-PNG、アルファチャンネル透明度つきPNG)で保存しよう。
ファイル名は自分で覚えやすいもので。

surface_base.png

※ここではあくまで例としてAIさんに描いてもらいました。

差分画像を作ろう

表情などの差分はできるだけ透明部分(元絵の外縁部)を含めないように切り取るのがポイント。
解像度も変更しないのが吉。

surface_parts.png

同じく形式はPNG32(32bit-PNG、アルファチャンネル透明度つきPNG)で保存しよう。
こちらもファイル名は自分で覚えやすいもので。

当たり判定の画像を作ろう

なにそれ!?…と思った人もいると思うが、これを使うとかなり手間を省ける。
(当たり判定がいらない場合は下記はスルーして欲しい)

ゴーストの当たり判定については触った事があると思う。
従来はsurfaces.txtに書き込む情報なのだが、座標の数字を一つ一つ入力しなければならなかったため、これがまた非常に手間がかかるものだった。
しかし、現在ではこれを画像で代用できるようになり、絵を描けるならこの手間を省略できるようになった
具体的には、2値ペンなどを使い、こういうものを作る。

surface_region.png

画像形式はPNG。特に気にせずPNG32でよい。
ただし、塗った色情報(RGB)はきちんとメモに控えておくこと!
この画像の例では

RGB
頭(Head)が赤25500
顔(Face)が緑02550
胸(Bust)が紫2550255

という色の情報をメモしておこう。

作るときは下図のようなイメージで。
使っているお絵描きツールで上から新規レイヤーで塗っていくとやりやすい。

surface_region2.png

descript.txtを作る

ここからはテキスト編集作業。
メモ帳でもいいけど、なんかよさげなテキストエディタを選ぶと捗るはず。
descript.txtはゴーストの辞書本体側(ghost)にも同じ名前のファイルがあるので、混同しないように気を付けて!
こっちはシェル側のdescript.txt。

charset,UTF-8

craftmanw,作者名
type,shell
name,シェルの名前

seriko.use_self_alpha,1

どれも重要だが、「seriko.use_self_alpha,1」に注目。
これを書いておかないと用意したPNGの透明度が適用されない。
また、下のsurfaces.txtに共通して、「charset」はShift_JISかUTF-8の文字コードを指定しよう。
(今のwindowsで新規作成→テキストドキュメントで作った場合、文字コードはUTF-8になっているはず)
これが違うと全角文字が化けるので、逆に化けていたなら文字コードが間違っているとも言える。

surfaces.txtを作る

これさえ終わればシェルの最低限の体裁は整う。頑張って。

charset,UTF-8

descript
{
	version,1
}

surface0
{
	element0,base,ベース画像.png,0,0
	collisionex0,Head,region,当たり判定画像.png,255,0,0
	collisionex1,Face,region,当たり判定画像.png,0,255,0
	collisionex2,Bust,region,当たり判定画像.png,255,0,255
}

surface1
{
	element0,base,ベース画像.png,0,0
	element1,overlayfast,差分画像その1.png,0,0
	collisionex0,Head,region,当たり判定画像.png,255,0,0
	collisionex1,Face,region,当たり判定画像.png,0,255,0
	collisionex2,Bust,region,当たり判定画像.png,255,0,255
}

surface2
{
	element0,base,ベース画像.png,0,0
	element1,overlayfast,差分画像その2.png,0,0
	collisionex0,Head,region,当たり判定画像.png,255,0,0
	collisionex1,Face,region,当たり判定画像.png,0,255,0
	collisionex2,Bust,region,当たり判定画像.png,255,0,255
}

こんな感じで書いていけばサーフェス番号(0)と(1)と(2)が完成!

ざっくりな解説

なお、このままシェルにぶちこんだ場合、SSPに「Surface10が存在しないよ!」とエラーを言われるが、これは伺かが伝統的に0番と10番を最初のデフォルト立ち絵として呼び出すため(メインが0、相方が10)なので、10番を定義すれば解消するし、surface10.pngという名前の画像ファイルを用意する事でも解決する。
surface10.pngを用意する場合は1ドットの画像にしておくとよい。強制的に透明になる。

いずれにせよ致命的なエラーではないので安心しよう。

もっと記述量を減らしたい!

いちいちcollisionexの行をコピペしまくるのが面倒!
って感じたなら上の例は下のように書き換えられる。
これで記述する手間をかなり省けるはず。

charset,UTF-8

descript
{
	version,1
}

surface0-2
{
	element0,base,ベース画像.png,0,0
	collisionex0,Head,region,当たり判定画像.png,255,0,0
	collisionex1,Face,region,当たり判定画像.png,0,255,0
	collisionex2,Bust,region,当たり判定画像.png,255,0,255
}

surface.append1
{
	element1,overlayfast,差分画像その1.png,0,0
}

surface.append2
{
	element1,overlayfast,差分画像その2.png,0,0
}

なお、一つのサーフェス番号に対してsurfaceブレスは一度しか使えず、surface.appendブレスは何度でも使える仕様。
アニメーションの定義の時も省力化に活用できるので覚えておくと便利。

シェル制作TIPS

差分の組み合わせは何を選べばいい?という話

シェルの差分の組み合わせの方法は、大きく分類すると2パターンある。
ここでは上とは別のAI氏に描いてもらった絵を加工したものを例に解説。

パーツ分割タイプ

こちらはベースをのっぺらぼうにしておいて、上に目・口といった差分パーツを組み合わせる方法。

ex_parts1.png

まるごとタイプ

こちらは差分画像をパーツ周辺で切り取る、もしくはサーフェス毎にまるごと一枚絵にする方法。

ex_parts2.png

アニメーション

シェル(とSERIKOの仕様)ではそれぞれ独立した瞬き・口パクなどのアニメーションを行える。
これも詳細はUKADOCを参照、ここではさわりだけ解説。

以下の定義はサーフェス0番に瞬きを追加する例。

surface.append0
{
	animation0.interval,sometimes
	animation0.pattern0,overlayfast,100,0,0,0
	animation0.pattern1,overlayfast,102,50,0,0
	animation0.pattern2,overlayfast,101,50,0,0
	animation0.pattern3,overlayfast,100,50,0,0
}

// アニメーション用のサーフェス
surface100
{
	element0,base,blink1.png,0,0
}
surface101
{
	element0,base,blink2.png,0,0
}
surface102
{
	element0,base,blink3.png,0,0
}

アニメーションの定義方法は、SERIKOの新定義では以下のようになっている。

インターバルはこのアニメの発生するタイミングを指定する。詳しくはUKADOC。常に再生したり、トークに合わせて再生したりなどができる。
animation*はアニメ番号(さくらスクリプトの\i[番号]などで呼び出せる)。
pattern*はアニメのコマで0から通し番号。小さい順に再生される。
描画メソッドはelementのものと似ているが、より様々な指定方法がある。

そしてサーフェスIDについて、ここが注意点。
見ての通りelementと違って画像ファイル名の指定ではない
SERIKOによるアニメーションでは、サーフェスに別のサーフェスを重ねる形になるため。
上の例では100番、101番、102番にて画像ファイルのサーフェスを設定しており、
これを順次呼び出してパラパラマンガのように付け替えている。

ウェイトはそのコマを「描画するまで」の待ち時間で、単位はミリ秒。
X座標,Y座標は貼り付ける位置を数値分ずらすことができる。

なお画像による例では全てX座標・Y座標に0を指定しているが、これを行う場合は(画像内に不要な部分が多くても)画像サイズはそのままにしておくのがミソ。
画像の左上から切り取るようにしてもOK。


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-12-02 (土) 22:37:44