シェルの各種定義を行うためのファイル。基本的に全て省略可。必要なものだけ書く。
例えば各サーフェス(表情・パーツ・コマ・着せ替えパーツ)へのアニメーション、当り判定、画像の合成などの設定はここで行う。
またサーフェスIDに対して別名(エイリアス)を与えたい場合もここで設定できる。
SSPではその他にも、当り判定にカーソルを乗せ続けた時に表示されるツールチップや、カーソル表示の変更などの設定も行える。
一方で、シェル名、シェル作者名などのシェルの基本情報に関する設定や、着せ替えのオーナードローメニュー(右クリックメニュー)の表示設定などはここではなくdescript.txtで行うので注意。
基本的にほとんどの設定が省略可能であり、必要に応じて各設定を行えばよい。
設定は、書くとすれば必ず一行目に書く必要があるcharsetの他は、それぞれ「{」と「}」で囲まれた各ブレス内に記述する(各ブレスについてはこのページ内のそれぞれの項目参照)。
「{」および「}」はそれのみが書かれた行として存在する必要があり、例えば「surface1 {」のようにブレス名に続けて書く事はできない。
ブレス名
{
// 設定内容
}
ブレス名、{}、各設定として認識されない行はすべてコメント行として扱われる。慣例的には行頭を「//」から始める。
各行インデント可。
SSPのみ「surfaces***.txt(***は任意の文字列)」という名前のテキストファイルは全て読み込まれ、surfaces.txtと同様に扱われる。読み込み対象となるファイルが複数ある場合、読み込まれる順序はファイル名順となる。
なお、複数のsurfaces***.txtを用意した場合、descriptブレスの設定(およびcharset)はそれぞれのファイルに設定する必要がある(逆に言うとそれぞれのファイルで異なる設定が可能)。
charset,Shift_JIS
descript
{
version,1
}
surface0
{
animation0.interval,sometimes
animation0.pattern0,overlay,101,100,168,67
animation0.pattern1,overlay,100,100,168,67
animation0.pattern2,overlay,101,100,168,67
animation0.pattern3,overlay,-1,100,168,67
}
surface1
{
element0,overlay,body0.png,0,0
element1,overlay,face1.png,0,0
}
surface10
{
collision0,40,56,95,90,Head
sakura.balloon.offsetx,80
sakura.balloon.offsety,-100
kero.balloon.offsetx,-30
kero.balloon.offsety,20
}
// SSPのみで有効な記法 ←このようにコメント行は//から始める
surface.append0-9
{
collision0,188,25,252,63,Head
collision1,190,92,236,118,Face
collision2,180,191,220,222,Bust
collision3,154,311,248,362,Skirt
}
表示する文字コード。旧い環境との互換性を考慮する場合はShift_JIS、それ以外はUTF-8を推奨。
SSPにおいて複数のsurfaces***.txtを用意した場合はそれぞれのファイルに設定する必要がある(逆に言うとそれぞれのファイルで異なる設定が可能)。
(OSの標準設定またはSSP->国際化->省略時の文字コード->テキスト定義)
SSPで複数のsurfaces***.txtを用意した場合はそれぞれのファイルに設定する必要がある(逆に言うとそれぞれのファイルで異なる設定が可能)。
descript
{
version,1
collision-sort,ascend
animation-sort,ascend
}
使用するSERIKO定義の書式のバージョン指定。0でSERIKO/1.x系書式(旧定義)、1でSERIKO/2.0書式。
0
※SSPでは自動的に検出されるためこの情報は利用されない。
サーフェスの最大幅。単位はピクセル。重なり判定などで利用される。
定義なし/SSPでは実際のsurface定義における最大横幅
当たり判定の判定順ソート。手前から奥にどの順で表示するか。
ascendで昇順(1,2,3...) descendで降順(10,9,8...)
none(IDによらず先に書かれている方が手前)
アニメーションID表示順ソート。手前から奥にどの順で表示するか。
ascendで昇順(1,2,3...) descendで降順(10,9,8...)
descend
surface1
{
element0,overlay,body0.png,0,0
element1,overlay,face0.png,0,0
collision0,188,25,252,63,Head
collision1,190,92,236,118,Face
collision2,180,191,220,222,Bust
collision3,154,311,248,362,Skirt
animation0.interval,sometimes
animation0.pattern0,overlay,101,100,168,67
animation0.pattern1,overlay,100,100,168,67
animation0.pattern2,overlay,101,100,168,67
animation0.pattern3,overlay,-1,100,168,67
}
SSPのみ追加指定(すでに定義済みのものに対してさらに定義を後付けする)用記法surace.appendがある。
詳細は後述。
surface.append1-9,20-29
{
// 略(ふつうのsurfaceブレスと同様)
}
surface(.append)*の*部分に、サーフェスIDとなる数字を指定。複数指定、範囲指定が可能(後述)。
なおそれ以外の各行の数字部分については各定義の説明参照。
伺かのシェルはアニメーション機能を持つ。これは静止画像であるコマを連続的に描画することによって動画的表現を行うものである。
アニメーションは各サーフェスに対して設定される。そしてアニメーションの各コマとして用いる画像もまた別のサーフェスである。このときコマとして参照された側がまたさらにアニメーション定義を持っていたとしても、普通それは無視される(ただしSSPに限り、多重着せ替えと言う仕組みがある。着せ替えの節参照)。
各サーフェスへの設定では、アニメーション自体をいつ開始するか、各コマにどのサーフェスを使い、どのような方法・時間間隔で描画するかといった内容を定義する必要がある。
なお、surfaces.txtにおける一連のアニメーションに関する仕様にはSERIKOという名前が与えられている。
surface0
{
// 瞬き
animation0.interval,rarely
animation0.pattern0,overlay,101,700,200,100
animation0.pattern1,overlay,102,700,200,100
animation0.pattern2,overlay,101,700,200,100
animation0.pattern3,overlay,-1,700,0,0
// トークに合わせて口を動かす
animation10.interval,talk,2
animation10.pattern0,overlay,200,700,200,120
animation10.pattern1,overlay,201,700,200,120
animation10.pattern2,overlay,202,700,200,120
animation10.pattern3,overlay,-1,700,0,0
}
surfaces.txtにおけるアニメーションの定義は、例えば以上のようになる。
上記では、surface0に対して「瞬き」「トークに合わせて口を動かす」の2つアニメーションを定義している。
全てのアニメーション定義はinterval定義とpattern定義を含んでいる。他にオプション定義や、SSPの場合はアニメーション専用の触り判定定義もあるが、それらが省略可能なのに対して、interval定義は省略不能であり、また一連のアニメーション定義の先頭に出現する必要がある。pattern定義も少なくとも一つは存在する必要がある。
interval定義はアニメーションがいつ再生されるかの設定である。上例では「rarely」「talk」「never」の三種類の指定が登場している。詳細はアニメーションインターバルの節を参照されたいが、大意として「瞬き」アニメーションはときどき再生され、「トークに合わせて口を動かす」アニメーションはキャラクターが2文字喋るごとに再生されるようになっている。
pattern定義はアニメーションの各「コマ」の設定である。そのコマの描画メソッド(描画メソッドの節参照)、表示するまでの待ち時間、そのコマを下のコマに対してどれだけ位置をずらして描画するかについて設定を行う。pattern定義はコマが必要なだけ用意すればよい。pattern*の*にある数字は、0から始まる連番である。
全てのアニメーションにはIDが与えられる(具体的な指定はanimation*.intervalの節参照)。
IDは単一のサーフェス内で重複が許されず、また異なるサーフェス間において同じIDをもつアニメーションは同じ意味を持つことが期待される。例えばキャラクターが正面を向いているsurface0と、横を向いているsurface1があったときに、その両方に「瞬き」のアニメーションを設定するとする。この時、キャラクターの姿勢の違いから実際に瞬きを表現するコマにあたる画像は違うものになるはずであるが、それにもかかわらず両方のサーフェスで同じアニメーションIDが与えられるべきである。特に後述の着せ替えにおいてはこのIDと意味との関連付けは必須となる。
全ての異なるアニメーションは基本的に独立しており、非同期的に開始・終了する。
例えば瞬きをするアニメーションと、トークに合わせて口元が動くアニメーションは、互いに他方が動いていようがいまいが気にせず開始・終了すべきであろうし、実際IDの異なるアニメーションとして定義されている限りはそのように動作する。
しかしその一方で、startやalternativestartなどの、他のアニメーションを実行するための特殊な描画メソッドによって、アニメーション自体を他のアニメーションを実行するトリガとする仕組みも用意されている。
また、exclusiveオプションの指定により、排他的なアニメーションを実行することも可能である。
伺かのシェルは、着せ替えと呼ばれる仕組みを持つ。これは単一のシェル内で、複数の衣装などのパーツの表示・非表示や種類の切り替えを行うためのものである。
伺かのシェルにおける着せ替えは、アニメーションの一種として位置づけられる。
ただし他のアニメーションのようにコマ送りされず、アニメーションの開始時に即時全てのコマ(pattern)およびベースのサーフェスが合成されて、以後静止画として扱われる点が特徴である(従ってpattern定義のウェイトパラメータは無視される)。
この「描画があたかもベースサーフェスと一体化したかのように振舞う」という性質は、衣服のようなものを表現する目的に良く適う。
着せ替えのアニメーションとしての開始・終了は、主にオーナードローメニューの着せ替えメニューからスイッチする事で制御される。SSPの場合はそれに加えて、さくらスクリプトの\![bind]タグを用いたゴースト側からの制御が可能である。
オーナードローメニュー側の設定は、surfaces.txtではなくdescript.txtで行うので、そちらのページを参照。
なお、surfaces.txtにおける一連のアニメーションに関する仕様にはMAYUNAという名前が与えられている。
surface0
{
// 服1の定義 アニメーションIDは0
animation0.interval,bind
animation0.pattern0,add,500,0,50,100
// 服2の定義 アニメーションIDは1
animation1.interval,bind
animation1.pattern0,add,501,0,50,100
}
//--- 以下着せ替えパーツ定義 ---
// 服1
surface500
{
element0,overlay,dress1.png,0,0
}
// 服2
surface501
{
element0,overlay,dress2.png,0,0
}
surfaces.txtにおける着せ替えの定義は、例えば以上のようになる。
上記では、surface0に対して「服1」と「服2」の二つの着せ替えを定義している。
通常のアニメーション定義同様、interval定義とpattern定義が必要である。interval定義にbindを指定する事で、そのアニメーションが着せ替えの定義である事を示す。
アニメーションの場合pattern定義はコマの数だけ行うが、着せ替えの場合は静止画仕様であるので、コマというよりはパーツを必要なだけ合成することになる。例のように着せ替えを構成するパーツが一つで済むならば、pattern行は1行のみになる。また着せ替えの場合各パーツは即時合成されるので、ウェイトパラメータは無視される。
pattern定義の描画メソッドについては後述。
MATERIA(本家伺か)においては、着せ替えのために用意された4つのメソッド、すなわち「bind」「add」「reduce」「insert」が利用可能であった。このうちbindは旧仕様で、addが上位互換にあたる。
SSPにおいては、普通のアニメーション描画メソッドとして用意されたものの一部が着せ替えでも利用可能である。
具体的に着せ替えで利用できる描画メソッドなどの詳細については描画メソッドの節参照。
SSPにおいては、アニメーションインターバルの節で触れているように、インターバルの組み合わせ指定が可能である。
組み合わせ指定の中にbindを含めた場合のアニメーションは、bind単体であれば本来持っていた静止画仕様であるという性質は失う(pattern定義のウェイトパラメータが無視されなくなる)。しかしアニメーションの寿命は変わらないので、例えばbind+runonceのような組み合わせ指定の場合、すべてのpatternの描画が終わった時点の表示が、以後ベースサーフェスの変更または着せ替え状態の変化があるまで継続し続けることになる。
従って、bindを含むインターバル組み合わせ指定では、pattern定義の最終行においてアニメーションの終了を行わず、静止画として残したい描画を合成しておくべきである。
アニメーションのコマとして参照した先のsurfaceに、そのsurfaceのアニメーションが定義されていた場合、通常それらは無視される。
しかしSSPではintervalがbindのアニメーション(=着せ替え)のみ無視されず反映されるようになっている。
これによって、着せ替えの影響を受けるような構造のアニメーションについて、アニメーションのコマ側で着せ替えに応じた定義を行う事が可能である。
なお多重着せ替えを入れ子にする事も可能であるが、循環的な参照は無視される。
本家伺か(MATERIA)の開発末期のバージョンで、surfaces.txtへのSERIKO(アニメーション)に関する設定書式に変更がありました。
これについて本家仕様書にあるSERIKO/1.x系の従来書式の事を旧定義、対する公式にドキュメント化されないままとなった新たな書式(SERIKO/2.0)のことを新定義と呼ぶ事があります。
なお、これとは全く別に、MATERIA開発終了後にSSPなどがsufraces.txtの書式について独自に追加した記法などがあります(例えばsurface.appendや、surface1-9といった範囲指定)。
これを含めて新定義と呼ぶ人や文献があるかもしれませんが、少なくともukadocで言う新旧定義はあくまでそのような用法ではなく、SERIKOの書式についての言葉である点に注意してください。
新定義における書式の変更点は以下の四つです。
これに加え、descriptブレスを設けて「version,1」の定義を行うことが必要です。
以下は同じ定義内容の旧定義と新定義の例です。
// 旧定義
surface1
{
0interval,rarely
0pattern0,0,0,alternativestart,[1,2]
1interval,never
1pattern0,101,70,overlay,200,100
1pattern1,102,70,overlay,200,100
1pattern2,101,70,overlay,200,100
1pattern3,-1,70,overlay,0,0
2interval,never
2pattern0,101,70,overlay,200,100
2pattern1,102,70,overlay,200,100
2pattern2,101,70,overlay,200,100
2pattern3,-1,70,overlay,0,0
2pattern4,101,70,overlay,200,100
2pattern5,102,70,overlay,200,100
2pattern6,101,70,overlay,0,0
2pattern7,-1,70,overlay,0,0
}
// 新定義
surface1
{
animation0.interval,rarely
animation0.pattern0,alternativestart,(1,2)
animation1.interval,never
animation1.pattern0,overlay,101,700,200,100
animation1.pattern1,overlay,102,700,200,100
animation1.pattern2,overlay,101,700,200,100
animation1.pattern3,overlay,-1,700,0,0
animation2.interval,never
animation2.pattern0,overlay,101,700,200,100
animation2.pattern1,overlay,102,700,200,100
animation2.pattern2,overlay,101,700,200,100
animation2.pattern3,overlay,-1,700,0,0
animation2.pattern4,overlay,101,700,200,100
animation2.pattern5,overlay,102,700,200,100
animation2.pattern6,overlay,101,700,200,100
animation2.pattern7,overlay,-1,700,0,0
}
先頭が「animation」から始まるようになった他、ウェイトの数値が10倍になっていること、描画メソッドの指定がパラメータの先頭に移動したことに注意してください。
またalternativestartは[]が()に変更されているほか、alternativestartの場合無視されるパラメータである「サーフェスID」「ウェイト」について、旧定義ではダミーの数値0を書いていたのに対し、新定義では描画メソッドが先頭に移動した関係から、「合成位置x,y」含めて丸ごと省略できていることもわかるかと思います。
以上のような点にメリットを感じない場合、SSPのみでの対応を考えるなら必ずしも移行する意味はないかもしれません。
なお、UKADOCでは基本的にSERIKOに関しては新定義で記述を行っているため、旧定義の記述で書きたい場合は上記を参考に適宜読み替えてください。
以下の各記法は併用可能。いずれもSSP専用。
surface1,3,4,6,12
{
// 略
}
のように「,」区切りでIDを指定することで、複数のサーフェスに対して同じ内容で定義することが可能。
surface1-12
{
// 略
}
のように「-」を用いてIDを指定する事で、番号が連続する範囲の(例の場合surface1から12まで)複数のサーフェスに対して同じ内容で定義することが可能。
surface1-30,!15,!20-25
{
// 略
}
のように、「!」に続けて単独または範囲指定したIDは、その定義の対象から除外される(例の場合結局surface1-14,16-19,26-30などとした場合と同義)。materia本来の仕様では、以下のようなsurface付での列挙指定のみ許される。
surface1,surface3,surface4
{
// 略
}
surface.appendによる定義は、「既に(surfaceブレス、またはsuface*.pngの存在によって)ある定義」に対してのみ付け加えられる。
従って例えば、
surface1,3
{
collision0,188,25,252,63,Head
collision1,180,191,220,222,Bust
}
の後に、追加定義のつもりで
surface1-3
{
animation0.interval,sometimes
animation0.pattern0,overlay,101,100,168,67
animation0.pattern1,overlay,100,100,168,67
animation0.pattern2,overlay,101,100,168,67
animation0.pattern3,overlay,-1,100,168,67
}
などとすると、本来定義するつもりのない「surface2」が新設されて、定義が行われてしまう。
このため、appendを使わない範囲指定の追加定義は「覚えのない重複定義エラー」などの原因になり得る。しかし、
surface.append1-3
{
// 略
}
とした場合は、既に定義のある「surface1」および「surface3」のみにappendで追加した定義が加わり、予め存在しない「surface2」は内部的にも新設されない。
なお、この関係から、surfaceブレスは定義ファイル(surfaces.txtなど)内でsurface.appendブレスより先に書く必要がある事に注意。
各surfaceの基本的状態となる、アニメーションが合成される前の画像をベースサーフェスと呼ぶ。
アニメーションは通常ベースサーフェスの上位(画面手前側)に描画されることとなる。
あるsurfaceのベースサーフェスは、IDに対応するsurface*.pngと、IDに対応するsurfaceブレスでのelement指定で定義される。
surface*.pngがあるサーフェスでは、その画像がsurface*のベースサーフェスとなる。ただし同時にelement0が定義されている場合、surface*.pngの内容は破棄されelement0の定義内容で置き換わる(これは互換性確保のための仕様である)。
element1以降の定義がある場合は、それらの上に積み重なる形で順次合成され、最終的な合成結果がベースサーフェスとして扱われる。
以下画面手前側を上位、画面奥側を下位として表現する。
elementおよび着せ替え(インターバルがbindのアニメーション)では、それぞれelementID・patternIDが小さい方が下位、大きい方が上位となる。
ベースサーフェスは基本的にすべての合成の最下位に置かれる画像だが、SSPのbackgroundオプションが指定されたアニメーションは、ベースサーフェスより下位に(裏に)合成される。
着せ替えを含む各アニメーション間の上下構造は、通常アニメーションIDの大きい方から降順で上位となる(番号が大きい方から画面手前側に配置される)。ただしSSPではdescriptブレスでanimation-sort定義を行えば、昇順にもできる。
あるサーフェスの当たり判定は、基本的にsurfaces.txtにおいて先に登場したcollision定義が上位となる。ただしSSPではdescriptブレスでcollision-sort定義を行えば、collisionIDを基準として昇順・降順にも設定できる。
またSSPではanimation*.collisionの設定によって、特定のアニメーションが表示されている場合にのみ有効な当たり判定が設定できる。この場合はまず各アニメーションの上下構造が考慮された上で、それぞれアニメーション・ベースサーフェスの当たり判定が通常どおりの順序で評価される。
animation-sortの設定がdescendの場合を例としてまとめると、上位から下位へ順に
となる(ここでいうアニメーションには着せ替えも含む)。
どんな表情・内容にどのサーフェスIDを割り振るかは、基本的に自由。
ただしsurface0,surface10はそれぞれデフォルトサーフェスとして必須とされ、たとえ相方側のないゴーストであってもsurface10として透明な画像などを用意する必要がある(SSPに限っては、必須とまではされない。またdescriptなどの設定でデフォルトサーフェスの変更も可能)。
また、一応の「事実上の標準」のようなIDの割り振りがあるので以下に示す。あくまで以下の割り振りは(0,10以外は)必須ではなく参考程度のもので、基本的には自由。
sakura側
kero側
なお、MATERIAではsurfaceIDにつかえる数字は0から8192までという制限がある。
ベースサーフェスの合成。
複数の画像を合成し、その合成結果をベースサーフェスとして一枚の画像のように扱う仕組み。
サーフェスに対応するsurface*.pngという画像がある場合、element0が定義されていると元のsurface*.pngの内容が破棄されて、element0で置き換えられる
element1以降は、その上に順次合成されていく。
SSP2.3.53からは、element定義されたサーフェスをアニメーションパーツとして用いた場合も、一枚の画像のように振る舞う(以前は未定義)。
*の部分(elementID)は同じsurface内で一貫した、0から始まる通し番号。
描画メソッドは下記の描画メソッド参照。
挙動なし
アニメーションが開始するタイミング(周期)の定義。
インターバルは下記のアニメーションインターバル参照。SSPのみ+区切りで列挙する事で組み合わせ指定が可能。
*の部分(animationID)は任意の数字。そのスコープ内(\0、\1、...)の全surfaceで、共通して同じIDのアニメーションが同じ意味(例えば「瞬き」「口パク」「同じ服の着せ替え」など)を持つようにする。
interval定義はそのIDのアニメーション定義全体の始点を示し、一連のanimation定義の中で必ず最初に記述されなければならない。
アニメーションの重なり方とIDの順序の関係はanimation-sort参照。
旧定義:*interval,インターバル
挙動なし
アニメーションの各コマの定義。各コマは通常それ以前のコマをリセットして新たにベースサーフェスに合成される形で描画される(厳密には描画メソッドによる)。
animationに続く*の部分はanimationID(animation*.intervalの*と同一)。
patternに次ぐ*の部分(パターンID)は、一連のanimation*.pattern定義において0から始まる通し番号。materiaでは127が上限。番号の小さい方から積み重なる形で描画される。
描画メソッドは下記の描画メソッド参照。
ウェイトはそのコマを描画するまでの待ち時間。単位はミリ秒。SSPのみ「最小ウェイト-最大ウェイト」とマイナス文字で区切った書き方もでき、その場合は最小~最大間でランダムに選択される。
X座標、Y座標はそのコマをベース(そのコマまでの描画結果)に対してどれだけずらして表示するかの指定。
サーフェスIDに-1でそのアニメーションの停止、-2で現在実行中の他の全てのアニメーションを停止する事ができる。いずれの場合も描画メソッドやX座標、Y座標は無視される。
旧定義:*pattern*,サーフェスID,ウェイト,描画メソッド,X座標,Y座標
挙動なし
アニメーションの排他的実行オプション。
即ちexclusiveオプションが指定されたアニメーションが実行された時点で、他のすべてのアニメーションが停止し、またexclusiveオプションのアニメーションの終了まで、他のいかなるアニメーションも新たに開始されない。
animationに続く*の部分はanimationID(animation*.intervalの*と同一)。
なおintervalがbindのアニメーションについてはこの指定は未定義である。
SSPのみ、animation*.option,exclusive,(1,3,5)のようにすると、指定IDのアニメーションに対してのみ限定的に排他制御することができる。
旧定義:*option,exclusive
挙動なし
アニメーションの背面実行オプション。
backgroundオプションが指定されたアニメーションはベースサーフェスの後ろ(画面奥側)で実行される。
animationに続く*の部分はanimationID(animation*.intervalの*と同一)。
挙動なし
exclusive・background・shared-indexオプションは同時指定可能で、+区切りで複数オプション可。例:exclusive+background
animationに続く*の部分はanimationID(animation*.intervalの*と同一)。
animation*.option,exclusive+background,(1,3,5) のようにすると、exclusiveのみ影響を受ける。
なおintervalがbindのアニメーションについてはexclusive指定はそもそも未定義である。
挙動なし
通常のcollisionやcollisionexのアニメーション動作中限定の定義。インターバルbindにも有効。
animationに続く*の部分はanimationID(animation*.intervalの*と同一)。
collisionに次ぐ*の部分は、一連のanimation*.collision定義内で重複しない番号。
挙動なし
当たり判定。囲まれた範囲がIDの領域となる。
*の部分(collisionID)は、同じsurface内で重複しない通し番号。
当たり判定の重なり方とIDの順序の関係はcollision-sort参照。
挙動なし
不定形当たり判定。
*の部分(collisionID)は、同じsurface内で重複しない通し番号。
タイプは以下の通り。
挙動なし
そのサーフェスでのみの本体側バルーン位置X座標。
通常:バルーンの左右端と、サーフェスの右左端が揃う位置
align=top/bottom:サーフェスの中央
そのサーフェスでのみの本体側バルーン位置Y座標。
通常:バルーンの上端と、サーフェスの上端が揃う位置
align=top/bottom:バルーンの上下端と、サーフェスの下上端が揃う位置
そのサーフェスでのみの相方側バルーン位置X座標。
通常:バルーンの左右端と、サーフェスの右左端が揃う位置
align=top/bottom:サーフェスの中央
そのサーフェスでのみの相方側バルーン位置Y座標。
通常:バルーンの上端と、サーフェスの上端が揃う位置
align=top/bottom:バルーンの上下端と、サーフェスの下上端が揃う位置
そのサーフェスでのみのバルーン位置X座標(本体・相方問わず)。
offset.xとも記述可能。
通常:バルーンの左右端と、サーフェスの右左端が揃う位置
align=top/bottom:サーフェスの中央
そのサーフェスでのみのバルーン位置Y座標(本体・相方問わず)。
offset.yとも記述可能。
通常:バルーンの上端と、サーフェスの上端が揃う位置
align=top/bottom:バルーンの上下端と、サーフェスの下上端が揃う位置
サーフェスの中心X座標。
通常は使用されないが、Sakura APIなど外部から取得可能。
サーフィスの中心(幅÷2)
サーフェスの中心Y座標。
通常は使用されないが、Sakura APIなど外部から取得可能。
サーフェスの中心(高さ÷2)
きのこの生えるX座標。
サーフェスの中心(幅÷2)
きのこの生えるY座標。
サーフェスの上端+20ピクセル下(SSP)
ウインドウを初期配置・位置保存する際の基準位置のX座標。
異なるサーフェスサイズの画像に切り替えた際の位置ずれなどを調整することができる。
サーフェスの中心(幅÷2)
ウインドウを初期配置・位置保存する際の基準位置のY座標です。
異なるサーフェスサイズの画像に切り替えた際の位置ずれなどを調整することができる。
サーフェスの下端
animation*.intervalにおいて指定される、アニメーションが動作する周期・タイミング(トリガー)の指定。
SSPの場合、アニメーションインターバルは「+」区切りで列挙する事で複数の指定を組み合わせた指定をする事ができる。元来bindに対して指定する事が想定された仕様のため、bindなしでの指定については動いているとしても要注意。
以下に組み合わせの例を挙げる。
bindに対して+区切りで他の指定をした場合、bindインターバルが本来持つ「pattern定義のウェイトパラメータが無視されて静止画としてベースサーフェスと一体化する」といった性質は失われる。
また、random・periodic・talkのようなパラメータが必要な指定では、パラメータは組み合わせ指定の場合も末尾に書く。
以下は誤り。
animation0.interval,random,5+bind
以下は正しい。
animation1.interval,bind+random,5
パラメータのあるインターバル指定同士を組み合わせるのは不可。
そのサーフェスである間毎秒2分の1の確率で再生。
そのサーフェスである間毎秒4分の1の確率で再生。
そのサーフェスである間毎秒数値分の1の確率で再生。
そのサーフェスである間数値秒間隔で定期的に再生。
そのサーフェスである間ループ再生。
サーフェスに切り替わった瞬間に1回のみ再生。
自動では実行されない。他のアニメーションからのstartメソッドやalternativestartメソッドなどによる呼びだしか、さくらスクリプトの\i[*]などによる命令以外では再生しないアニメーションに対して指定する。
そのサーフェスで\eが来た時に実行。
そのサーフェスでバルーン内にテキストが表示されていく時に実行。
数値分の文字がくるごとにアニメーションする。
そのアニメーションをサーフェスの着せ替えとして定義する。
animationパターン定義およびelement定義における、各コマ(パーツ)の合成・描画方法。
画像の合成ではなく、ベースサーフェスの置き換え(base)、ベースサーフェスの移動(move)や他のアニメーションの挿入・実行(insert、start、stop、alternativestart、alternativestop)といった様々な役割のメソッドが存在する。
着せ替え定義中では、画像の合成でないメソッド(move、insert、start、stop、alternativestart、alternativestop)は無効である(overlayとして扱われる)。ただしbaseは一番最初のpatternに使用した場合のみ有効であり、その着せ替えがONになっている場合のみベースサーフェスを置き換えるような仕組みが実現できる。
着せ替え用のメソッドとして実装されているaddとbindは、実装上はoverlayと同義である。着せ替えにおいてこの三つはどれを指定しても結局同じ効果となる。
element定義中では、画像の合成でないメソッド(base、move、insert、start、stop、alternativestart、alternativestop)は無効である(overlayとして扱われる)。
その他着せ替え用のメソッドadd、bindも無効である(が、SSPの現実装において無効な指定はoverlayと読み替えられるため、結果的に指定どおりの描画にはなる)。
自明ではあるが、最初のelement(element0、surface*.pngが存在しない場合のはそれ以降の場合もある)で指定された描画メソッドはほとんどのものがbaseと同義になる。ただしasisメソッドで透過色がそのまま表示される点は有効である。
なお、element合成されたサーフェスがアニメーションパーツとして用いられた場合、element合成の結果が一枚の画像のように扱われる。ただしこの実装はSSP2.3.53からのもので、それ以前は未定義であった事に注意。
合成系のメソッドの意味合いは、element・アニメーション・着せ替えのそれぞれで異なってくる。
element定義は、ベースサーフェスとなる一枚の静止画を得ることが目的である。element定義では、直前までの合成結果に対してさらに次の合成が繰り返されてゆき、最終的な合成結果として一枚の静止画を得る。
着せ替え定義もelement定義と同様に、静止画を得るための仕組みであるので、描画メソッドの解決の流れはelement定義とよく似ている。着せ替えのpattern定義では、最初のpatternがベースサーフェスに対して合成され、以後直前までの合成結果に対してさらに次の合成が繰り返されてゆき、最終的な合成結果として得られた一枚の静止画を得る。従って、着せ替えはベースサーフェスと一体化したように振る舞うことになる。
対して着せ替えでない通常のアニメーションは、動画的表現であるので、前二者とは流れが大きく異なる。アニメーションの各pattern定義は、あくまでもアニメーションを構成する各コマの定義であり、それぞれ独立している。各pattern定義はベースサーフェスと新たな画像の二つを合成して新たなコマを作り出すので、前のpattern定義(前のコマ)での合成結果は次のコマには影響しない。そうして次々と新しいコマを描画することで、動画的な表現が実現される。
しかしながらいずれの場合も、合成系メソッドは「元の画像」と「新たな画像」の二つ画像を合成する機能を担う点は共通している。そこでukadocでは、便宜上描画メソッドの説明において、「元の画像」をベースレイヤ、後者の「新たな画像」を新規レイヤと呼ぶことにする。
この二語を用いて言い換えると、アニメーションの各pattern定義は、ベースサーフェスをベースレイヤとして新規レイヤを合成することでコマを作り出すものである。対して着せ替え及びelement合成は、直前までの合成結果をベースレイヤとして新規レイヤを合成してゆく繰り返しの結果として、一枚の静止画を得るものである。
画像の左上隅1ピクセルの色が透過色として扱われ、実際の表示上は同色の部分が透過されるのは、pattern定義に使われるsurfaceや、element定義に使われる画像についても同様である。
この時合成される各画像の透過色のRGB値は、特に統一されている必要はない。
なお各描画メソッドは、透過色の扱いについてそれぞれ特徴があるため、各項目を参照されたい。
(画像サイズまたは位置の関係で)ベースレイヤの外側の領域に新規レイヤを合成した場合の挙動は、ベースウェアの実装に委ねられている。
MATERIAではベースレイヤの外にはみ出た部分は単に表示されない。
CROWではベースレイヤの外にはみ出るような合成を行うと、正しく描画されなくなる。
SSPにおいてはベースレイヤの外にはみ出るような新規レイヤの合成が許されており、新規レイヤがはみ出なくなるだけベースレイヤに全透明領域が補われるような挙動となる。
また逆に新規レイヤの外側の領域は、全透明領域とは異なる空の領域であり、合成に際して何も起こらず、ベースレイヤの内容がそのまま残る。この事は、特に新規レイヤの全透明領域が合成結果に影響するreplaceメソッドおよびreduceメソッドを理解する上で注意すべき前提である。
ベースサーフェスを新規レイヤで完全に置き換える。collisionもコマのサーフェスに定義されたものに更新される。
このメソッドのパターンを重ねると、サーフェス全面を描画し直すことによるアニメーション(いわばパラパラ漫画)が実現される。
この描画メソッドが指定されたpattern定義では、XY座標は無視される。
着せ替えおよびelementでは、baseメソッドは最初(element0、pattern0)にしか用いることができない。それ以外はoverlayに読み変えられる。
ベースレイヤの不透明度に応じて、新規レイヤを重ねる。
ベースレイヤの半透明部分では、透明度が低い部分ほど濃く新規レイヤを合成し、不透明であれば完全に合成し、全透明であれば一切合成しない。
interpolateメソッドの対になるメソッド。
着せ替え・elementでも使用できる。
ベースレイヤの不透明度に応じて、新規レイヤを乗算合成で重ねる。
挙動はoverlayfastと同様で外形は変わらないが、上書きの代わりに現在のサーフェスに対して乗算合成処理を行う。
着せ替え・elementでも使用できる。
ベースレイヤの一部を新規レイヤで置き換える。
透過色部分や、透明度情報があり半透明になっている部分についても、ベースレイヤの情報を残さずに上書きする。
なお新規レイヤの範囲外は、あくまで空の領域であって透明度100%の領域としては扱われない。この領域では何も合成が行われず、ベースレイヤの描画が単にそのまま残る。
着せ替え・elementでも使用できる。
ベースレイヤの透明度に応じて新規レイヤを重ねる。
ベースレイヤの半透明部分では、透明度が高い部分ほど濃く新規レイヤを合成し、全透明であれば完全に合成し、不透明であれば一切合成しない。
overlayfastメソッドの対になるメソッド。
着せ替え・elementでも使用できる。
overlayに近いが、新規レイヤの透過(透過色および、pna・またはseriko.use_self_alphaが設定されている場合は画像自体のアルファチャンネル)を無視して重ねる。
着せ替え・elementでも使用できる。
なおelement合成されたサーフェスを他のサーフェスのアニメーションパーツとしてasisメソッドで合成した場合の表示は未定義であるが、Windows上では普通、透過領域は画像本来の透過色に関係なく黒(#000000)で表示されるだろう。
ベースレイヤの表示位置を、元の表示位置から指定座標分ずらす。
moveによる表示位置の変更は瞬間的なもので、連続的な移動ではない。
x軸方向は右側が正、y軸方向は下側が正である。
この描画メソッドが指定されたpattern定義では、サーフェスIDは無視される。
着せ替え・elementでは使用不可。
新規レイヤを着せ替えパーツとする。
着せ替えパーツとして単純に一つのサーフェスを重ねることしか出来なかった頃の唯一のメソッドで、現在はaddが互換。
処理の内容はoverlayと同義。
着せ替えでないアニメーション・elementでの使用は未定義。
ベースレイヤに新規レイヤを着せ替えパーツとして重ねる。
処理の内容はoverlayと同義。
着せ替えでないアニメーション・elementでの使用は未定義。
ベースレイヤと新規レイヤの透過の合成。新規レイヤの透明度情報でベースレイヤを「切り抜く」イメージ。
ベースレイヤと新規レイヤの不透明度が乗算される(有効な透過色は完全に透明な領域として扱われる)。
例えばベースレイヤが不透明度40%・新規レイヤが不透明度60%の領域は、合成後は不透明度24%=透明度76%の領域となる。
透明度以外の情報(RGB値)は単に無視される。
なお新規レイヤの範囲外は透明相当として扱われる。
着せ替え用に用意されたメソッドだが、着せ替えでないアニメーション・elementでも使用可能。
指定したID(animation*の*の番号)の着せ替えグループ(intervalがbindのアニメーション)をその位置に挿入する。
着せ替え用に用意されたメソッドで、着せ替えでないアニメーション・elementでの使用は未定義。
例えばある着せ替えAが、他の着せ替えBよりも部分的に前・部分的に後ろといった位置関係の構造を持つ場合に、着せ替えAの後ろになる部分のコマと前になる部分のコマとの間に着せ替えBをinsertで挿入する事によって、自然な前後関係の表示が実現される。この時、着せ替えBの表示・非表示の状態に関わらず表示の完全性が維持される。
insert先でのinsert(入れ子)も可能。
ただし、あくまでも着せ替えAとBの表示順を予約するだけで、強制的に着せ替えBを表示するものではない。
実際に着せ替えBを表示するか否かは、着せ替えBの有効/無効状態に依存する。
指定したID(animation*の*の番号)のアニメーションを再生させる。
この描画メソッドが指定されたpattern定義では、サーフェスID、ウェイト、XY座標は無視される。
着せ替え・elementでの使用不可。
指定したID(animation*の*の数字)のアニメーションを停止させる。
この描画メソッドが指定されたpattern定義では、サーフェスID、ウェイト、XY座標は無視される。
着せ替え・elementでの使用不可。
指定した複数のID(animation*の*の数字)の内どれかのアニメーションを再生させる。
この描画メソッドが指定されたpattern定義では、サーフェスID、ウェイト、XY座標は無視される。
SSPの場合括弧が[]、区切りが「,」でなく「.」でも読み込まれる。
着せ替え・elementでの使用不可。
旧定義:alternativestart,[ID1,ID2...]
指定した複数のID(animation*の*の数字)の内どれかのアニメーションを停止させる。
この描画メソッドが指定されたpattern定義では、サーフェスID、ウェイト、XY座標は無視される。
SSPの場合括弧が[]、区切りが「,」でなく「.」でも読み込まれる。
着せ替え・elementでの使用不可。
指定した複数のID(animation*の*の数字)のすべてのアニメーションを再生させる。
この描画メソッドが指定されたpattern定義では、サーフェスID、ウェイト、XY座標は無視される。
SSPの場合括弧が[]、区切りが「,」でなく「.」でも読み込まれる。
着せ替え・elementでの使用不可。
指定した複数のID(animation*の*の数字)のすべてのアニメーションを停止させる。
この描画メソッドが指定されたpattern定義では、サーフェスID、ウェイト、XY座標は無視される。
SSPの場合括弧が[]、区切りが「,」でなく「.」でも読み込まれる。
着せ替え・elementでの使用不可。
sakura.surface.alias
{
素,[0]
照れ,[1,101,201]
驚き,[2]
}
相方側の設定はkero.surface.alias、char*.surface.alias(char*はSSPのみ)と書き変える。
aliasブレスは、MATERIA period453まではsurfaces.txtでなくalias.txtという専用のファイルに記述される仕様であった。
現在では記述はsurfaces.txtに統合されているが、CROW・SSP共に互換性が保たれているため、別途alias.txtを用意する事も可能である。
サーフェスIDに対して任意のエイリアスIDを設定する。
例えば驚き,[2]とすれば、\s[驚き]で\s[2]と同じ意味となる。
また、1,[1,11,21]などとカンマ区切りで複数のサーフェスを指定することもでき、
この場合\s[1]で1,11,21からランダムで選ばれる。
挙動なし
sakura.cursor
{
mouseup0,Head,system:hand
mousedown0,Head,system:finger
mouseup1,Bust,system:hand
mousedown1,Bust,system:grip
}
相方側の設定はkero.cursor、char*.cursor
当たり判定の上に乗った時表示するカーソルファイルを設定。
*部分は同じスコープのmouseup定義で重複しない番号。
当り判定名はcollision定義で設定した名前。
ファイル名にはカーソルファイル名(cur/ani)を指定。ファイル名の変わりに、後述のシステムカーソル指定が使用可能。
system:finger(当たり判定名がbustの場合のみsystem:hand)
当たり判定の上でマウスボタンを押した時に表示するカーソルファイルを設定。
*部分は同じスコープのmousedown定義で重複しない番号。
当り判定名はcollision定義で設定した名前。
ファイル名にはカーソルファイル名(cur/ani)を指定。ファイル名の変わりに、後述のシステムカーソル指定が使用可能。
system:finger(当たり判定名がbustの場合のみsystem:grip)
当たり判定の上でマウス右ボタンを押した時に表示するカーソルファイルを設定。
*部分は同じスコープのmouserightdown定義で重複しない番号。
当り判定名はcollision定義で設定した名前。
ファイル名にはカーソルファイル名(cur/ani)を指定。ファイル名の変わりに、後述のシステムカーソル指定が使用可能。
system:finger
当たり判定の上でマウスホイールを回した時に表示するカーソルファイルを設定。
*部分は同じスコープのmousewheel定義で重複しない番号。
当り判定名はcollision定義で設定した名前。
ファイル名にはカーソルファイル名(cur/ani)を指定。ファイル名の変わりに、後述のシステムカーソル指定が使用可能。
system:arrow
当たり判定の上でマウスをしばらく動かさない時に表示するカーソルファイルを設定。
*部分は同じスコープのmousehover定義で重複しない番号。
当り判定名はcollision定義で設定した名前。
ファイル名にはカーソルファイル名(cur/ani)を指定。ファイル名の変わりに、後述のシステムカーソル指定が使用可能。
system:arrow
カーソルファイルの変わりに指定すると現在使われているカーソルの変形が表示ができます。
矢印
十字
禁止
手
つかんだ手
指差し
時計
I
移動
?
sakura.tooltips
{
Bust,怒ります。
Head,つつかれると痛いです。
Shoulder,つつくとコミュニケートボックスを表示します。
}
相方側の設定はkero.tooltips、char*.tooltips
当たり判定の上に来た時に表示するツールチップのテキストを設定。
挙動なし