幻日幻月環

作成した伺かの更新情報などをつぶやくところ

ソロゴーストむけスクリプト

2017/07/17
シェル変更時に問題が起こる可能性があるため、対処法を追記
2016/08/16
下記SSP2.4以降の機能がSSP2.3.77から使えるようになったため、スクリプトが正常動作することを確認
2016/06/01
SSP2.4以降で使える簡単な方法を追加
2015/12/12 00:53
里々サンプルに使う時の注意を追加
2015/03/09 00:43
説明を加筆修正

----
\0しかキャラクターのいないソロゴーストであっても、\1側のバルーンを使用することは多いと思います。
例えば以下がありえるでしょうか。
・選択肢の表示
・ユーザーをキャラクターと見立てた時の心情描写

ただ、ソロゴーストだと、\1は透明サーフェスなどを用いるため、バルーンの移動が面倒です。
例えば、画面位置を移動させて利用していると、\1側バルーンが離れたところに出てくるという事態が起こります。
これを解決するために、\0のドラッグ移動終了時にバルーンが追跡するさくらスクリプトを紹介します。
普通にソロゴーストをドラッグ移動すると、下記画像のように\1側バルーンがその位置に留まるため、手動で移動する必要があります。

\0のドラッグ移動終了時にバルーンが追跡するさくらスクリプトを紹介します。
この処理の関係上、重なり処理は必ず削除しておいてください。ソロゴーストであれば不要なはずです。

----
SSP2.3.77以降の場合
----
SSP2.3.77以降で、キャラクターを同期させる(ドラッグ移動時についてくる)さくらスクリプト、\![set,sticky-window,ID,ID...]が追加されています。
今回の\0と\1を一体化させる例であれば、以下のように出来るでしょう。
\1\![set,alignmenttodesktop,free]\![move,0,0,0,0,left.top,left.top]\![set,sticky-window,1,0]

これを、起動時のイベント(OnFirstBoot、OnBoot、OnGhostChanged、OnGhostCalled、OnVanishedのうち辞書内にあるもの)で呼び出せば良いです。
●スクリプト
里々の例
----
@一体化
\1\![set,alignmenttodesktop,free]\![move,0,0,0,0,left.top,left.top]\![set,sticky-window,1,0]

*OnBoot
(一体化)(起動)
*起動
こんにちは。

*OnGhostChanged
(一体化)(交代)
*交代
>(R0)から交代
>通常交代
----
●解説
やっていることは、「\1を\0と重ねた後、一体化させる」という動作です。
\![set,alignmenttodesktop,free]と\![move,0,0,0,0,left.top,left.top]の解説は、2.3.76までの解説を見てください。
\![set,sticky-window,1,0]が新しく追加されたもので、IDで指定したスコープが常に一体化して動きます。
一度設定すればゴースト終了まで有効となりますが、起動時のたびに設定する必要があります。
起動時に指定だけ行えば、あとは常に一体化するため、見た目にもこちらの方が良いでしょう。
ただし、新しい機能のため、SSPのバージョンをあげないユーザさんも多いことを考えると、配布ページでの2.3.77以前では起動しないことを解説するなどが必要となります。

●注意点
シェルが1つのみの場合は問題ないですが、新しいシェルをインストールして最初の変更時に位置がおかしくなることがあります。
そのために、シェル変更前に一体化を解除し、シェル変更後に再度一体化させます。
----
@一体化
\1\![set,alignmenttodesktop,free]\![move,0,0,0,0,left.top,left.top]\![set,sticky-window,1,0]
@一体化解除
\![reset,sticky-window]

*OnBoot
(一体化)(起動)
*起動
こんにちは。

*OnGhostChanged
(一体化)(交代)
*交代
>(R0)から交代
>通常交代

*OnShellChanging
(一体化解除)(シェル変更前トーク)
*シェル変更前トーク
:今の(R1)ってシェルから、(R0)ってシェルへ変更するよ。

*OnShellChanged
(一体化)(シェル変更後トーク)
*シェル変更後トーク
:(R0)ってシェルに変わったよ。
----

----
SSP2.3.76までの場合
----
●スクリプト
以下は里々で書いた例です。適当な辞書に、以下の2行をコピーして貼り付ければ動きます。
----
@OnMouseDragEnd
\C\1\![set,alignmenttodesktop,free]\![move,0,0,0,0,left.top,left.top]\e
----
「@」で書くのが気持ち悪い方は、以下を使ってください。
----
*OnMouseDragEnd
$スクリプトの一番頭【タブ】\C
\![set,alignmenttodesktop,free]\![move,0,0,0,0,left.top,left.top]
----
以下はYAYAで書いた例です。
----
OnMouseDragEnd
{
'\C\1\![set,alignmenttodesktop,free]\![move,0,0,0,0,left.top,left.top]\e'
}
----

●解説
やっていることは、「\1を\0と重ねる」という動作です。
バルーンを移動させるのではなく、\1を移動させることで結果的にバルーンを移動させています。
surface10.pngなど\1デフォルトサーフェスを見える画像にすると、\0を移動させた時に\1が瞬間移動して飛んでくるのが分かると思います。

\![set,alignmenttodesktop,free]はシェルの自由移動を許可するさくらスクリプトです。
シェルの移動の自由度はもともとゴーストのdescript.txtに記述するもので、記述がない場合は\![set,alignmenttodesktop,bottom]が指定された状態となっています。
bottomが指定されている場合、シェルのy軸が固定され、画面下部に張り付きます。
いちいち余分なスクリプトが走るのが鬱陶しい場合は、ゴーストのdescript.txtに以下を書くことで省略できます。
----
kero.seriko.alignmenttodesktop,free
----
ただし、シェル側の記述が優先されるため、シェルのdescript.txtに別の記述がある場合は上書きされてしまいます。
追加シェルが存在するゴーストの場合は、さくらスクリプトで毎回設定した方が安全です。

\![move,0,0,0,0,left.top,left.top]はキャラクターの移動を行うスクリプトです。
\![move,相対x座標,相対y座標,移動にかける時間(ミリ秒),移動の基準とするキャラクター,移動するキャラのx座標の基準.y座標の基準,移動先のキャラのx座標の基準.y座標の基準]という書き方です。
例えば、「相対x座標」に「-200」を入れると、\0の200ドット左側に移動します。
「移動の基準とするキャラクター」はキャラクターのIDです。\0なら0、\1は1、\p[2]なら2です。今回は\0に重ねるために0を指定しています。
「x座標の基準」と「y座標の基準」は、両方とも「left.top」を指定しているので、\1サーフェス画像の左上を、\0サーフェス画像の左上に合わせます。
この基準座標に対して、「相対x座標」「相対y座標」だけずらした位置に\1が移動します。
「相対x座標」と「相対y座標」は、Ctrl + Shift + F12でシェル位置初期化、Ctrl + Shift + F10でバルーン位置を初期化した後、少しドラッグ移動で動かした時、ベストな位置に移動するよう探って入力してください。

バルーンの初期位置指定については、デフォルトであれば、サーフェス画像(透過部分含む)の左上と、バルーン画像(透過部分含む)の右上がくっつくように表示されます。
これがさらに、シェル側のballoonofsetによって位置が補正されています。
例えば、里々のサンプルゴースト「Rポストと狛犬」では、masterシェルのdescript.txtに以下が設定してあります。
sakura.balloon.offsetx,20
sakura.balloon.offsety,70
これにより、前記の位置から、右へ20pixel、下へ70pixelの位置が基準になっています。
詳しくは、バルーン右下の座標の謎: mra8ukadocのshell/descript.txtを参照してください。

記述量が少ない割に、使い勝手が格段に上がるので、ソロゴーストを作成している開発者の方は導入をご検討くださると嬉しいです。
PageTop

コメント


管理者にだけ表示を許可する