Saturday, April 29, 2017

"NPCとの対話ウィンドウ"ではない選択肢表示ウィンドウ

これがあるの忘れてた。

Pillars of Eternityにあった、テキストと絵と選択肢だけで進む、アレみたいなウィンドウ。
これはまた、questTopicとは別枠で作った方が良さそう。
こっちの機能は、NPCとの会話に限らず、スクリプトの任意のタイミングで出せるので、ちょっと勝手が違う。あと、上半分の黒地で白文字の部分のデータ定義もあるので。

これを表示する関数の引数に、シーンIDを指定すれば、白文字部分・選択肢が全部表示される、というのがベストだけど…

Wednesday, April 26, 2017

AnswerTextについて

Genericな会話テキストの定義コード。画像の例は挨拶。

発話者の性別その他でフィルタリングした上で、その中からランダムな1個を表示する、ということをシステムがやっています。気にしないパラメータ(AllやNone)は省略可(デフォルト値としてAllやNoneが入るので)。

これはDialogue型というデータ枠ですが、AnswerText型で別枠に入れて、その枠の中をシステムが走査。このSceneの代わりに、EditorIDを指定できるようにすれば良いかなと思います。(EditorIDじゃなくてシーンIDと言った方が適切か)

噂話についても、発話テキストをstring型で定義するよりは、こういう型のEditorID(シーンID)を指定する方が、発話者ごとに微妙にテキストを変えられるので良いかも。Genericな噂ばなし用のRumor型という、似た処理をするものがあるので、それをシーンID指定できるようにすればok。

フィルタリング項目にFaction指定がまだ無いけど、Factionの名前かEditorIDを指定できれば良さそう。

NPCとの対話

しばらく前に書いたスクリプトイベントの、NPCとの対話で、PCがする発言の選択肢を表示する部分。(選択の結果については別のコールバックで処理)

現状は上の画像のような力技で書いていて、さすがにこれはダメなので、
  • 条件付きの選択肢テキストを定義しておけば、対話ウィンドウの表示時に、システムが勝手に選んで表示
  • 選んだ選択肢ごとの結果の処理も、選択肢テキストとカップリングで定義
できるようにしたいという感じ。

それで、自分の能力では、下の画像のようになら出来るかなあというイメージ。
このコードを、少なくとも対話ウィンドウが表示される前の、どこかのタイミングで走らせる。(タイミングはスクリプト書く側の自由。=これを走らせるコードをスクリプトに書く必要アリ)
  • ID: TESで言うEditorID
  • AnswerTextID: 対話の相手が、選択肢への返答として発する、テキストのEditorID
  • Condition: booleanを返すLuaコード
  • Answer: 選択肢を選択したら走らせるLuaコード*1
  • Result: 選択肢を選択したら走らせるLuaコード*2
全部string型になっちゃうので、ちょっと見難いけど。。

クエストspecificな噂テキスト(TESではConversationと言ってるぽい)も、こんな感じで定義できそう。(データ的には、ConditionとAnswerTextIDだけで良い)

AnswerTextについては、別の記事として書きます。

*1 AnswerじゃなくてResultですね。*2が正解です。

Friday, April 21, 2017

開設

とりあえず開設してみましたが、他に良い場所あれば移動もアリということで。:D