マルチキャラクタ・多重人格。寝るモードとかもこれでできます。
具体的には、別の辞書フォルダをまるごと読み込むことによって実現する。
ghost/master/内に任意の名前のフォルダを用意し、変数を使って人格を切り替える。
*別人格 :別人格に切り替えます。 $辞書フォルダ【タブ】another
これで、『another』フォルダ内の辞書が読み込まれる。
『master』内の辞書は一旦破棄される。
replace.txtとsatori_savedeta.txtの内容は『another』フォルダへそのまま引継ぎされる。
別人格の数に制限はない。
また、交代直後の文章は同じフォルダにテキストを書きます。
この場合、masterフォルダ内に書くってことです。
*別人格 :別人格に切り替えます。 $辞書フォルダ【タブ】another >別人格の朝【タブ】(現在時)<9 別人格に切り替わりました。 #同じフォルダ内 *別人格の朝 :朝から別人格にかわりました。
辞書と一緒にデフォルトサーフェスを切り替えたい場合がほとんどだろう。
デフォルトサーフェスを同時に変更する場合は次のように書く。
*別人格 :別人格に切り替えます。 $辞書フォルダ【タブ】another $デフォルトサーフェス0【タブ】200 $デフォルトサーフェス1【タブ】300
これで、¥0側のデフォルトサーフェスが200に、¥1側のデフォルトサーフェスが300になる。
『デフォルトサーフィス』ではないのでちゅうい。
里々サンプルゴーストのポストも一緒に見てみよう。
$サーフェス加算値0【タブ】200
としてから(5)とすると、実際にはsurface205.pngが表示されます。
さくら側とうにゅう側で個別に設定できます。
うにゅう側はサーフェス加算値1で。
『サーフェス』です。サーフィスと書くと動きません。
サーフィス番号の割り当て方によっては、
$デフォルトサーフェス0【タブ】200 を使うよりも
こちらを使う方が楽な場合があるので覚えておくと便利。
通常サーフェスの衣装違いバージョンなどを同梱しておいて、
サーフェス加算値によって衣装替えをしてみるという事もできます。
サーフェス加算値を使うと、デフォルトサーフェスが
加算した値、上記でいえば200に設定されてしまう模様。
*別人格 :別人格に切り替えます。 $辞書フォルダ【タブ】another $サーフェス加算値0【タブ】200 $サーフェス加算値1【タブ】200 $デフォルトサーフェス0【タブ】200 $デフォルトサーフェス1【タブ】210
のように、サーフェス加算値を先に設定してあとからデフォルトサーフェスを設定すればOKです。
人格を戻す場合、次のように記述する。
$辞書フォルダ【タブ】.
$辞書フォルダ【タブ】masterと書いても戻ってくれない。
意味がわからない人は、とにかくこう書くと覚えておこう。
デフォルトサーフェスとサーフェス加算値を変更している場合は、
$サーフェス加算値0【タブ】0 $サーフェス加算値1【タブ】0 $デフォルトサーフェス0【タブ】0 $デフォルトサーフェス1【タブ】10
を記述する必要もある。
$辞書フォルダ【タブ】.,test1,test2
と記述すれば「master」「test1」「test2」三つのフォルダの辞書が読み込まれる。
ifによる条件分岐と組み合わせたり用途はいろいろ。
■イベント
別人格においてもネットワーク更新、時計あわせ、ヘッドラインなどを行わせる場合は、別人格の辞書にも対応するイベントを書く必要がある。
■satori_conf.txt
satori_conf.txt の「*初期化」で
$辞書フォルダ【タブ】
の定義をしない。
■サーフェス加算値とデフォルトサーフェス
サーフェス加算値を先に設定する。
makoto.dllを使わず、ゴースト側から制御する方法。*OnTranslateの応用。
*OnShellChanging $現在のシェル【タブ】(R0) :シェル変更します。 *OnShellChanged $りぷれいす【タブ】(現在のシェル) :シェル変更してきました。
ここで現在使われているシェルの名称を取得し、*OnTranslateで分岐させる為の「$りぷれいす」という変数に格納します。
現在のシェルが「男の子シェル」という名前のシェルだった場合*男の子モード に飛び、指定した単語を置き換えます。それ以外のシェルだった場合はそのまましゃべります。
*OnTranslate >男の子モード【タブ】(りぷれいす)==男の子シェル *男の子モード $話【タブ】(R0) $話【タブ】(replace(sprintf,%c,3)(話)(sprintf,%c,3)あたし(sprintf,%c,3)僕) $話【タブ】(replace(sprintf,%c,3)(話)(sprintf,%c,3)じゃないの(sprintf,%c,3)じゃないか) $話【タブ】(replace(sprintf,%c,3)(話)(sprintf,%c,3)のよ(sprintf,%c,3)んだよ) (話)
*OnSatoriLoad $引数区切り追加【タブ】(sprintf,%c,3)
引数区切りの追加を *OnSatoriLoadに記述します。 引数区切りに関してはこちらを参照。
*OnTranslateの記述に関しては*OnTranslateとssuのreplaceを参照。
セーブデータに「$りぷれいす」がないとエラーが出るので、それを防ぐ為に以下を記述しておきます。
*OnSatoriBoot >りぷれいすげっと【タブ】(変数「現在のシェル」の存在)==0 $りぷれいす【タブ】(現在のシェル) *りぷれいすげっと $りぷれいす【タブ】デフォルトシェル
変数「現在のシェル」が存在しなかった場合、仮に「$りぷれいす」に「デフォルトシェル」を格納します。
変数の名前などは適当なので、適宜書き換えてください。
*OnTranslate?の部分がごちゃごちゃしているので、見やすくしてみます。
*OnTranslate >男の子モード【タブ】(りぷれいす)==男の子シェル *男の子モード $話【タブ】(R0) $話【タブ】(replace(■)(話)(■)あたし(■)僕) $話【タブ】(replace(■)(話)(■)じゃないの(■)じゃないか) $話【タブ】(replace(■)(話)(■)のよ(■)んだよ) (話) @■ (sprintf,%c,3)
このように書き換えることで、見た目も簡単になってわかりやすく、書きやすくなります。
*OnTranslate?
>男の子モード【タブ】(りぷれいす)==男の子シェル *男の子モード $話【タブ】(R0) $話【タブ】(replace●(話)●あたし●僕) $話【タブ】(replace●(話)●じゃないの●じゃないか) $話【タブ】(replace●(話)●のよ●んだよ) (話)
引数区切りを以下のように書き換えます。
*OnSatoriLoad $引数区切り追加【タブ】●
「●」は任意の記号ですが、必ずトーク中に使用していない記号を使用してください。
見やすくする為だけに「●」を使っているので、(sprintf,%c,3)を使う場合と基本的には同じ。
引数区切りに追加すれば「【×】」や「[◆]」などでも使えます。
例えば起動した時ランダムで人格を変更、起動した時間帯や曜日によって人格を変更…など。
ここではメイン人格が「normal」フォルダ、別人格が「another」フォルダにあり、別人格のサーフェスが200番代で、起動時1/3の確率で別人格を出したい場合の例
(サーフェスを変更しない場合$デフォルトサーフェス~$サーフェス加算値~は省略)
もっといい方法があれば直してください。
*OnBoot >anotherモードへ【タブ】(乱数1~3)==1 >normalモードへ
*normalモードへ $サーフェス加算値0【タブ】0 $サーフェス加算値1【タブ】0 $デフォルトサーフェス0【タブ】0 $デフォルトサーフェス1【タブ】10 $辞書フォルダ【タブ】.,normal :normal起動トーク
*anotherモードへ $サーフェス加算値0【タブ】200 $サーフェス加算値0【タブ】200 $デフォルトサーフェス0【タブ】200 $デフォルトサーフェス1【タブ】210 $辞書フォルダ【タブ】.,another :another起動トーク
master/normalフォルダ内に通常モード用の、master/anotherフォルダ内にアナザー用の辞書ファイルを置き、起動トーク以外を記述。
各モードのフォルダとmasterフォルダ(.)も同時に読み込ませる…という方法。
masterフォルダには各モードごとの起動トークと、どのモードの時も共通して使う辞書を置く。
メイン人格が「master」フォルダ、別人格が「another」フォルダ。の完全分離の場合。
(動作確認はしましたが、まだバグがあるかもしれません)
anotherフォルダからmasterフォルダに戻る場合
!注意!
【ポスト】を自ゴーストの\0側の名前に書き換えてください。
その時、【】は不要です。
*OnSatoriClose >OSC2【タブ】(変数「(R0)」の存在)==0 >リロード開始【タブ】(R0)==【ポスト】 $サーフェス加算値0【タブ】0 $サーフェス加算値1【タブ】0 $デフォルトサーフェス0【タブ】0 $デフォルトサーフェス1【タブ】10 $辞書フォルダ【タブ】.
*OSC2 $サーフェス加算値0【タブ】0 $サーフェス加算値1【タブ】0 $デフォルトサーフェス0【タブ】0 $デフォルトサーフェス1【タブ】10 $辞書フォルダ【タブ】.
#トーク時にmaster時のサーフェスに戻ってしまうので、 #トークの前にサーフェスを指定します。 *OnClose :(100) :(200) :さようなら。 :バイバーイ。
#他のゴーストから変更 *OnGhostChanged >リロード終了【タブ】(R0)==【ポスト】 >起動
#*他のゴーストへ変更 *OnGhostChanging >リロード開始【タブ】(R0)==【ポスト】 :(100) :(200) :(R0)さんに代わるねー。 :あとはよろしくー。
*リロード開始 :リロードします。 *リロード終了 :リロード終わりました。
別人格(anotherフォルダ)の場合、交代や終了で元の人格(masterフォルダ)に戻ります。
もっといい方法があれば直しをお願いします。