マルチキャラクタ・多重人格。寝るモードとかもこれでできます。




基本

具体的には、別の辞書フォルダをまるごと読み込むことによって実現する。
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人格に戻す

人格を戻す場合、次のように記述する。

$辞書フォルダ【タブ】.

$辞書フォルダ【タブ】masterと書いても戻ってくれない。
意味がわからない人は、とにかくこう書くと覚えておこう。
デフォルトサーフェスとサーフェス加算値を変更している場合は、

$サーフェス加算値0【タブ】0
$サーフェス加算値1【タブ】0
$デフォルトサーフェス0【タブ】0
$デフォルトサーフェス1【タブ】10

を記述する必要もある。

複数の辞書フォルダを読み込む

$辞書フォルダ【タブ】.,test1,test2

と記述すれば「master」「test1」「test2」三つのフォルダの辞書が読み込まれる。
ifによる条件分岐と組み合わせたり用途はいろいろ。

使用の際の注意

■イベント
 別人格においてもネットワーク更新、時計あわせ、ヘッドラインなどを行わせる場合は、別人格の辞書にも対応するイベントを書く必要がある。

■satori_conf.txt
 satori_conf.txt の「*初期化」で

$辞書フォルダ【タブ】

の定義をしない。

■サーフェス加算値とデフォルトサーフェス
 サーフェス加算値を先に設定する。

TIPS

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人格に戻す

メイン人格が「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フォルダ)に戻ります。

もっといい方法があれば直しをお願いします。


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