CW1.30/1.50新機能代替サンプル内の特定のPC【A】が別のPC【B】の名前を呼ぶサンプルが、Pyでは上手く動かないという某所での会話から、セリフコンテントの、と言うかその後方の選択肢の扱いがエンジンによって異なることが判明しました。
時間が無い方のために、結論だけ先に書いておきます。
話者が持つ称号がコンテント内に含まれるセリフパターンの称号条件のいずれにも一致しない時、
- セリフの表示が飛ばされるのは各エンジン共通だが、セリフ後方の分岐(選択肢として表示される部分)の扱いが異なる。
- CW1.20~1.50/Next1.60では必ず分岐の一番上の枝に自動で処理が進むが、Py0.12.2では何らかの文字列が設定された選択肢が1つ以下の場合のみ一番上に自動で処理が進む。
何言ってるのか良く分からんと言う方は、以下の例をご覧いただくと分かると思います。
例えば、
セリフ(誰も持っていない称号が条件)「うんたらかんたら」
├【】→メッセージ「1」
├【2に進む】→メッセージ「2」
└【3に進む】→メッセージ「3」
というイベントがあったとします。【】の中は選択肢ラベル(OKとかYesとかNoとか入っているあれ)です。
これをCW1.50、CWNext1.60、CWPy0.12.2でそれぞれ実行すると、
●CW1.50/Next1.60
・セリフ「うんたらかんたら」は表示されず、メッセージ「1」が表示される。
●Py0.12.2
・セリフ「うんたらかんたら」は表示されず、[どれか一つを選択してください。] 2に進む/3に進む との選択肢が出現。
と実行の結果が異なりました。
正規版やNextではセリフは表示されずに1番上の分岐に進みましたが、Pyでは空のセリフ+選択肢と同じ扱いになっています。
そこでもう1つ、以下のようなイベントを試してみました。
セリフ(誰も持っていない称号が条件)「うんたらかんたら」
├【】→メッセージ「1」
├【2に進む】→メッセージ「2」
└【】→メッセージ「3」
前のと何が違うかというと、3番目の選択肢ラベルが空白になり、文字列が設定された選択肢が1つに減っています。そして、このイベントを実行した場合は、どのエンジンでもメッセージ「1」のみ表示されるのです。
今度は、Pyでもセリフ後方の分岐構造が無視されました。
Pyでは、表示が行われなかったセリフ後方に意味のある選択肢が存在しない時(=何らかの文字列が設定された選択肢が1つ以下の時)は分岐が無視され、そうでない時はメッセージなしの選択肢として扱われます。
他のエンジンでは、後方がどうなっていようと、全ての場合で分岐が無視されます。
そこで、冒頭の結論部分です。
話者が持つ称号がコンテント内に含まれるセリフパターンの称号条件のいずれにも一致しない時、
- セリフの表示が飛ばされるのは各エンジン共通だが、セリフ後方の分岐(選択肢として表示される部分)の扱いが異なる。
- CW1.20~1.50/Next1.60では必ず分岐の一番上の枝に自動で処理が進むが、Py0.12.2では何らかの文字列が設定された選択肢が1つ以下の場合のみ一番上に自動で処理が進む。
と、なってました。
某所での会話に参加していた方が、Pyの開発者さんにこの現象を報告されるそうなので、いずれ修正されるかもされないかもしれません。
なお、特定のPC【A】が別のPC【B】の名前を呼ぶサンプル(CW1.30/1.50新機能代替サンプル内)ですが、名前を呼ぶセリフ直後の選択肢で、何かの文字列が設定されたものを1つにすれば問題なく動きます。
↑の言い方で分かり辛ければ、セリフが表示される時に選択肢がつかないようにする、とお考えください。
※※※
なぜこうなっているかを考えると、たぶん、シナリオ作成者が明らかに選択肢作りたかったんだろうなという時に選択肢表示してくれる親切機能の結果というのが、最も妥当な推測だと思います。仕様である可能性が高く、影響も特殊な条件下に限られるので、私は報告する決断に至れなかったかもしれませんね。。
ともあれ、今後別の何かを発見した時のために、余裕のある時にBitbucketに登録しておきますか。
(5/26追記)
この件について、メモ箱の私家版エンジン情報に追加しました。