#author("2023-11-11T07:25:03+09:00","default:post","post")
マルチキャラクタ・多重人格。寝るモードとかもこれでできます。

----
#contents
----
~

*基本 [#u8259317]
具体的には、別の辞書フォルダをまるごと読み込むことによって実現する。~
ghost/master/内に任意の名前のフォルダを用意し、変数を使って人格を切り替える。~

 *別人格
 :別人格に切り替えます。
 $辞書フォルダ【タブ】another

これで、『another』フォルダ内の辞書が読み込まれる。~
『master』内の辞書は一旦破棄される。~
replace.txtとsatori_savedeta.txtの内容は『another』フォルダへそのまま引継ぎされる。~
別人格の数に制限はない。~

また、交代直後の文章は同じフォルダにテキストを書きます。~
この場合、masterフォルダ内に書くってことです。~

 *別人格
 :別人格に切り替えます。
 $辞書フォルダ【タブ】another
 >別人格の朝【タブ】(現在時)<9
 別人格に切り替わりました。
 
 #同じフォルダ内 
 *別人格の朝
 :朝から別人格にかわりました。



*デフォルトサーフェスを変える [#e6327002]
辞書と一緒にデフォルトサーフェスを切り替えたい場合がほとんどだろう。~
デフォルトサーフェスを同時に変更する場合は次のように書く。~

 *別人格
 :別人格に切り替えます。
 $辞書フォルダ【タブ】another
 $デフォルトサーフェス0【タブ】200
 $デフォルトサーフェス1【タブ】300

これで、¥0側のデフォルトサーフェスが200に、¥1側のデフォルトサーフェスが300になる。~
『デフォルトサーフィス』ではないのでちゅうい。~
里々サンプルゴーストのポストも一緒に見てみよう。~



*サーフェス加算値 [#e10889eb]
 $サーフェス加算値0【タブ】200
としてから(5)とすると、実際にはsurface205.pngが表示されます。~
さくら側とうにゅう側で個別に設定できます。~
うにゅう側はサーフェス加算値1で。~
『サーフェス』です。サーフィスと書くと動きません。~

サーフィス番号の割り当て方によっては、~
$デフォルトサーフェス0【タブ】200 を使うよりも~
こちらを使う方が楽な場合があるので覚えておくと便利。~
通常サーフェスの衣装違いバージョンなどを同梱しておいて、~
サーフェス加算値によって衣装替えをしてみるという事もできます。~

サーフェス加算値を使うと、デフォルトサーフェスが~
加算した値、上記でいえば200に設定されてしまう模様。~

 *別人格
 :別人格に切り替えます。
 $辞書フォルダ【タブ】another
 $サーフェス加算値0【タブ】200
 $サーフェス加算値1【タブ】200
 $デフォルトサーフェス0【タブ】200
 $デフォルトサーフェス1【タブ】210

のように、サーフェス加算値を先に設定してあとからデフォルトサーフェスを設定すればOKです。



*master人格に戻す [#t38da2f7]
人格を戻す場合、次のように記述する。

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

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

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

を記述する必要もある。 



*複数の辞書フォルダを読み込む [#t6302268]
 $辞書フォルダ【タブ】.,test1,test2
と記述すれば「master」「test1」「test2」三つのフォルダの辞書が読み込まれる。~
ifによる条件分岐と組み合わせたり用途はいろいろ。~



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

-書かないとmasterフォルダが呼び出される 
--ヘッドライン 
-書かないとできない 
--ネットワーク更新
--時計あわせ(空バルーンのみ表示される) 
-書かなくても一応できる 
--ゴーストのインストール 

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

 $辞書フォルダ【タブ】

の定義をしない。

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





*TIPS [#r820a973]

**satori_conf.txtに「$辞書フォルダ」を定義するとどうなるか [#v0c863ac]

-一言で言えば、定義した辞書フォルダに加え里々のルートフォルダも含めて常に読み込まれるようになる。 
-起動中に辞書フォルダを読み込み直しても消すことはできない。 
-その際、セーブデータには痕跡が残らないので混乱の元になる。 
-参考リンク 
-[[レゴキチ/里々まとめ:http://emily.shillest.net/specwiki/index.php-%E3%83%AC%E3%82%B4%E3%82%AD%E3%83%81%2F%E9%87%8C%E3%80%85%E3%81%BE%E3%81%A8%E3%82%81#hbac9a45]]
-[[レゴキチ/里々まとめ:https://emily.shillest.net/specwiki/index.php-%E3%83%AC%E3%82%B4%E3%82%AD%E3%83%81%2F%E9%87%8C%E3%80%85%E3%81%BE%E3%81%A8%E3%82%81#hbac9a45]]




**シェルによって語尾を変化させる [#ea6cc5e4]
 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
 $りぷれいす【タブ】(現在のシェル)
 
 *りぷれいすげっと
 $りぷれいす【タブ】デフォルトシェル

変数「現在のシェル」が存在しなかった場合、仮に「$りぷれいす」に「デフォルトシェル」を格納します。 

変数の名前などは適当なので、適宜書き換えてください。 


***記述をシンプルにしてみる [#v5cd45a9]
*OnTranslate?の部分がごちゃごちゃしているので、見やすくしてみます。 

 *OnTranslate
 >男の子モード【タブ】(りぷれいす)==男の子シェル
 *男の子モード
 $話【タブ】(R0)
 $話【タブ】(replace(■)(話)(■)あたし(■)僕)
 $話【タブ】(replace(■)(話)(■)じゃないの(■)じゃないか)
 $話【タブ】(replace(■)(話)(■)のよ(■)んだよ)
 (話)
 
 @■
 (sprintf,%c,3)
 このように書き換えることで、見た目も簡単になってわかりやすく、書きやすくなります。 


***さらにシンプルにしてみる [#o89593cd]
*OnTranslate? 

 >男の子モード【タブ】(りぷれいす)==男の子シェル
 *男の子モード
 $話【タブ】(R0)
 $話【タブ】(replace●(話)●あたし●僕)
 $話【タブ】(replace●(話)●じゃないの●じゃないか)
 $話【タブ】(replace●(話)●のよ●んだよ)
 (話)

引数区切りを以下のように書き換えます。 

 *OnSatoriLoad
 $引数区切り追加【タブ】●

「●」は任意の記号ですが、必ずトーク中に使用していない記号を使用してください。~
見やすくする為だけに「●」を使っているので、(sprintf,%c,3)を使う場合と基本的には同じ。~
引数区切りに追加すれば「【×】」や「[◆]」などでも使えます。~





**起動する時複数人格から選んで起動 [#fca47971]
例えば起動した時ランダムで人格を変更、起動した時間帯や曜日によって人格を変更…など。

ここではメイン人格が「normal」フォルダ、別人格が「another」フォルダにあり、別人格のサーフェスが200番代で、起動時1/3の確率で別人格を出したい場合の例~
(サーフェスを変更しない場合$デフォルトサーフェス~$サーフェス加算値~は省略)
もっといい方法があれば直してください。

-masterフォルダ内dic~.txt

 *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人格に戻す [#q327cf1d]
メイン人格が「master」フォルダ、別人格が「another」フォルダ。の完全分離の場合。
(動作確認はしましたが、まだバグがあるかもしれません)~
anotherフォルダからmasterフォルダに戻る場合

-他のゴーストへ変更 
-終了 
anotherフォルダからmasterフォルダに戻らない場合

-$辞書リロード=実行 
-ゴーストメニューから自ゴーストへの交代(リロード)時 

!注意!~
【ポスト】を自ゴーストの\0側の名前に書き換えてください。~
その時、【】は不要です。~


~

-anotherフォルダ内dic~.txt 

 *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