雑談で15個の話題からランダムに2つ選択肢を表示したい

カイぱち

ユーザー
【RPGツクールMZ】雑談でランダムに2つの話題を
選択肢として表示する方法について質問です。

■作りたいゲームの概要
・コマンド選択のみで進むゲーム(キャラクター移動なし)
・「雑談・特技・告白」の選択肢がループで表示される
・雑談を選ぶと、15個の話題の中からランダムに
 2つ選ばれて選択肢として表示される

■話題リスト(15個)
1.旅行 2.食べ物 3.好きなタイプ 4.好きな体位
5.野球拳 6.政治について 7.趣味は何? 8.ドラマ
9.お前も鬼にならないか? 10.エヴァに乗れ
11.一発芸 12.部活 13.文化祭 14.体育祭
15.デートするなら…
※友人に渡すようなので気にしないで下さい…

■使用している変数
#0001 親密度(初期値0)
#0002 警戒度(初期値50)
#0003 興奮度(初期値0)
#0004 傲慢度(初期値75)
#0005 雑談トピックA(乱数で話題番号を入れる)
#0006 雑談トピックB(乱数で話題番号を入れる)

■やりたいこと
・雑談を選んだとき、#0005と#0006に
 1〜15の乱数を入れる
・AとBが同じ番号にならないようにする
・その番号に対応した話題名を選択肢として表示する
・選んだ話題によってパラメータ(親密度等)が変化する
・余談ですが、後で出したいお題が出なかったときに、再抽選するコマンドも作りたいと考えています。

■質問
この仕組みを実現するための
正しいイベント構成を教えてください。
よろしくお願いします。

■現在のコード(雑談部分)

◆:雑談のとき
 ◆変数の操作:#0005 雑談トピックA = 定数 1(テスト用固定)
 ◆変数の操作:#0006 雑談トピックB = 定数 2(テスト用固定)
 ◆条件分岐:雑談トピックA = 雑談トピックB
  ◆変数の操作:#0006 雑談トピックB += 1
  ◆条件分岐:雑談トピックB > 15
   ◆変数の操作:#0006 雑談トピックB = 1
  ◆分岐終了
 ◆:それ以外のとき
 ◆分岐終了
 ◆条件分岐:雑談トピックA = 1
  ◆条件分岐:雑談トピックB = 2
   ◆選択肢:旅行, 食べ物
   ◆:旅行のとき
    ◆文章:たかし「あ」
   ◆:食べ物のとき
    ◆文章:たかし「い」
   ◆分岐終了
  ◆分岐終了
 ◆分岐終了

■現在の症状
・雑談を選ぶと何も起きずに最初の選択肢に戻る
・トピックAを定数1、トピックBを定数2に
 固定してもかわらず
・どこが間違っているか教えてください
 
ここだけ見た感じでは、特に間違ってはいないように思えます。
そもそもこの「雑談のとき」の分岐に来ているのか?が気になりますね。
よくやるのは、「雑談のとき」の直後にダミーのメッセージを表示させて、ここに到達しているか確認したり、
変数の操作後にメッセージで「\V[5] \V[6]」と表示させて変数の中身の値を確認したりします。
まずそれを確認してみてください。
怪しいのは、別の並列処理で同じ雑談トピックの変数を操作している、とかですが……。

ところで、このやり方だと15x14=210通りの分岐を書くことになって、
ゴリラ実装派の私でもさすがに工夫して実装しますが、
そこの対策は大丈夫な感じでしょうか?
 
ここだけ見た感じでは、特に間違ってはいないように思えます。
そもそもこの「雑談のとき」の分岐に来ているのか?が気になりますね。
よくやるのは、「雑談のとき」の直後にダミーのメッセージを表示させて、ここに到達しているか確認したり、
変数の操作後にメッセージで「\V[5] \V[6]」と表示させて変数の中身の値を確認したりします。
まずそれを確認してみてください。
怪しいのは、別の並列処理で同じ雑談トピックの変数を操作している、とかですが……。

ところで、このやり方だと15x14=210通りの分岐を書くことになって、
ゴリラ実装派の私でもさすがに工夫して実装しますが、
そこの対策は大丈夫な感じでしょうか?
ご返信ありがとうございます!
実はまったく対策出来てません…
もしかしてこれ、ちょー重労働?って思いはしたんですが、やっぱそうですよね…
本当に都合が良ければでいいので、これより良い効率かつ作りやすいやり方があれば、ご教授いただきたいです!!
ご迷惑をお掛けして、本当にすみません!!
 
やっぱり……w
いろいろやり方はあると思いますが、自分が標準機能だけで組むとしたらこんな感じですかね。

話題用アクターの作成:例えば21~35番のアクターを作成し、名前を話題名(旅行、食べ物 etc.)にする
#0007 選択した雑談トピック の変数を追加

雑談トピックA/Bに21~35の乱数を入れる(重複処理等は省略)
選択肢:\N[\V[5]]、\N[\V[6]](\V[5/6]が雑談トピックA/Bの値に変換され、さらにそのIDのアクター名になる)
 \N[\V[5]]のとき:「選択した雑談トピック」の変数に「雑談トピックA」の値を代入
 \N[\V[6]]のとき:「選択した雑談トピック」の変数に「雑談トピックB」の値を代入
あとは「選択した雑談トピック」の値に応じて分岐して、会話イベントやパラメータの変化などを実装すればOKです。

アクターではなく変数に文字列を代入するとか、隠しアイテムを使うとか、いくつか方法はあると思いますが、
正攻法で標準機能だけで実装するならこんな感じかと思います。
 
面白そうなので私も考えてみた。

>雑談を選ぶと、15個の話題の中からランダムに 2つ選ばれて選択肢として表示される

・話題用のアクターを2つ作成する。(AとBとする)
・雑談トピックAに、乱数を取得する(1~15)
・乱数が1の時、アクターAの名前を話題名に変更する条件分岐作成、以下全部で15個分
・雑談トピックBに、乱数を取得する(1~15)
・AとBが同じ数だったらの条件分岐は、貴方が考えたやつでいいと思う。
・以下Aと同じく、アクターBの名前を変更

・選択肢の表示、選択肢名はそれぞれアクターA、B
 Aの場合
  ・雑談トピックAが1の時、話題1のイベント実行する条件分岐、以下全部で15個分
    (条件分岐をコモンイベントまとめて、呼び出すのがお勧め)
 Bの場合
  ・雑談トピックBが1の時、話題1のイベント実行する条件分岐、以下全部で15個分
    (条件分岐をコモンイベントまとめて、呼び出すのがお勧め
    雑談トピックAに雑談トピックBの値を代入すれば
    BでもAと同じコモンイベントを呼び出せばいいと思う)

なんにしても、色々ややこしいイベントになるので、頑張ってね。
 
やっぱり……w
いろいろやり方はあると思いますが、自分が標準機能だけで組むとしたらこんな感じですかね。

話題用アクターの作成:例えば21~35番のアクターを作成し、名前を話題名(旅行、食べ物 etc.)にする
#0007 選択した雑談トピック の変数を追加

雑談トピックA/Bに21~35の乱数を入れる(重複処理等は省略)
選択肢:\N[\V[5]]、\N[\V[6]](\V[5/6]が雑談トピックA/Bの値に変換され、さらにそのIDのアクター名になる)
 \N[\V[5]]のとき:「選択した雑談トピック」の変数に「雑談トピックA」の値を代入
 \N[\V[6]]のとき:「選択した雑談トピック」の変数に「雑談トピックB」の値を代入
あとは「選択した雑談トピック」の値に応じて分岐して、会話イベントやパラメータの変化などを実装すればOKです。

アクターではなく変数に文字列を代入するとか、隠しアイテムを使うとか、いくつか方法はあると思いますが、
正攻法で標準機能だけで実装するならこんな感じかと思います。
先ほどご提案いただいた方法を試しましたが、
うまくいかなかったので追加で質問させてください。

■やったこと

①アクター21〜35番を作成
 21:旅行 22:食べ物 23:好きなタイプ 24:好きな体位
 25:野球拳 26:政治について 27:趣味は何? 28:ドラマ
 29:お前も鬼にならないか? 30:エヴァに乗れ
 31:一発芸 32:部活 33:文化祭 34:体育祭
 35:デートするなら…

②変数#0007「選択した雑談トピック」を追加

③雑談のときの中身を以下のように作成

◆:雑談のとき
 ◆変数の操作:#0005 雑談トピックA = 乱数 21〜35
 ◆変数の操作:#0006 雑談トピックB = 乱数 21〜35
 ◆条件分岐:雑談トピックA = 雑談トピックB
  ◆変数の操作:#0006 雑談トピックB += 1
  ◆条件分岐:雑談トピックB > 35
   ◆変数の操作:#0006 雑談トピックB = 21
  ◆分岐終了
 ◆分岐終了
 ◆選択肢:\N[\V[5]], \N[\V[6]]
 ◆:\N[\V[5]]のとき
  ◆変数の操作:#0007 選択した雑談トピック = #0005の値
 ◆:\N[\V[6]]のとき
  ◆変数の操作:#0007 選択した雑談トピック = #0006の値
 ◆分岐終了

■症状
雑談を選ぶと話題の選択肢が出ずに
「行動を選択しよう!」に戻ってしまう。

■質問
どこが間違っているか教えてください。
すみません、自分のやり方が間違っているとは思うんですが、何卒お願い致します!
 
最初にも書いた通り、これだけ見るとおそらく「雑談のとき」の分岐に正しくたどり着いていないように思います。
つまり、「雑談のとき」の中身の処理をいくら追っても、原因は判明しないかと。

もう1つのトピックも踏まえると、タイマー等を使って自動実行や並列処理のイベントがいくつか入っているようなので、
並列処理の方でスイッチのON/OFFなどがされた結果、行動選択に戻ってしまっているようにも思えます。
消し忘れの並列処理があったとか、操作しているスイッチや変数が違っていたなども、よくありがちなのでチェックしてみてください。
 
最初にも書いた通り、これだけ見るとおそらく「雑談のとき」の分岐に正しくたどり着いていないように思います。
つまり、「雑談のとき」の中身の処理をいくら追っても、原因は判明しないかと。

もう1つのトピックも踏まえると、タイマー等を使って自動実行や並列処理のイベントがいくつか入っているようなので、
並列処理の方でスイッチのON/OFFなどがされた結果、行動選択に戻ってしまっているようにも思えます。
消し忘れの並列処理があったとか、操作しているスイッチや変数が違っていたなども、よくありがちなのでチェックしてみてください。
すみません、追加で新しい情報が判明しました。

■新たにわかったこと
・雑談を何回か押すとたまに話題の選択肢が出ることがある
・また何回か押すと出る、を繰り返す
・全部の話題が一通り出たあたりから
 何回押しても話題が出なくなる

■現在の乱数・重複チェックの処理

◆変数の操作:#0005 雑談トピックA = 乱数 21〜35
◆変数の操作:#0006 雑談トピックB = 乱数 21〜35
◆条件分岐:雑談トピックA = 雑談トピックB
 ◆変数の操作:#0006 雑談トピックB += 1
 ◆条件分岐:雑談トピックB > 35
  ◆変数の操作:#0006 雑談トピックB = 21
 ◆分岐終了
◆分岐終了

この重複チェックの処理に問題があるでしょうか?
よろしくお願いします。
 
その現象を聞いて、やはり疑わしいのは他の並列処理などの影響です。
並列処理でスイッチなどを操作した結果イベントが正常に動作しておらず、
たまたまタイミングで問題なく動作する時だけ雑談の選択肢が出ている、という状況を疑っています。

メインイベントのページ3(行動選択させるイベント)が並列処理のままになっていたりしませんか?
あと、自動実行のイベントは、一連のイベントが終わってまだ条件を満たしていれば、再度自動実行されるので、ループにする必要はなかったはずです。
 
pandaさんに一票。

まず、pandaさんが疑問視している件について
はっきり検証するのが良いと思います。

他の並列処理を止める方法がわからないなら
ツクールは多重起動できるので
一度、新規作成したプロジェクトに選択肢表示のイベントページだけコピペして
他のイベントの影響のない状態で動作テストしてみてください。
それで動いていれば、他の何かしらの並列イベントが影響してるんでしょう。

コモンイベントをなにも使っていないなら
新規マップを作成して、選択肢表示のイベントページだけコピペしてテストするのでも
他のイベントの影響をカットできると思いますよ。

あと、パソコンのデータって、ツクールに限らずたまーに壊れるんですよ。
私も時々条件分岐や選択肢の内容が正しいはずなのにどうしても正常に動かなくて
一回、イベントを丸ごと削除して、最初から作り直すと動いた、ということがあります。
(実際は一からやり直すことで、自分で見つけられなかったおかしな点が修正されたのかもしれませんが)
 
ご連絡が遅くなってしまって大変申し訳ございません。お二人の意見も参考に色々と試行錯誤し、なんとかゲーム性を保てるやり方が見つかりました。

色々相談していたのに、音信不通となってしまい申し訳ございません。
本当に助かりました!ありがとうございます!!!
 
Back
トップ