> [やりたいこと]
> 女神転生風のゲームを開発しようとしていて、敵キャラと会話して仲間にするというコモンイベントを作っていて、会話の状況が悪くなったり会話できない相手に話しかけるとこちらのターンに敵が割り込んで襲いかかってくるというものを作ろうとしています。
>
> [やってみたこと]
> そこでコモン#193を呼び出し、敵のAIのみを計算してからコモン#195 1ターンの処理を実行 を呼び出してこちらの行動を飛ばして敵だけが攻撃するようにしました。
>
> [やってみた結果、どううまくいかないか]
> このようにしてみたところ、こちらの行動が全て飛ばされ1ターン敵だけが攻撃してくるようになりましたが、敵の真下に味方欄が動いてしまったり(画像)、、敵だけが攻撃してきた次のターンに敵が二回行動になってしまいました。
>
> どうすれば、表示を崩さず、かつ敵の行動回数が増えたりせずに敵が割り込んで襲ってくるようになるでしょうか。
> どうか、識者の方にアドバイスを伺いたいです。
バグを再現するための詳しい設定方法(サンプルゲームからの設定方法)が書かれてなかったので、
「こんな感じの設定かな〜」と言った予測設定で、一応2ターン目に2回攻撃してくるバグの再現はできましたが、
主人公のステータス画面が動くバグの再現はできませんでした。
2ターン目に2回攻撃してくるバグについてですが、
現状の設定では多分「会話する」のようなコマンドがあり、
それを選択するとすぐに指定したコモンイベントが呼び出され、
その中にあるコモン[193]とコモン[195]を呼び出す設定が実行される感じでしょうか。
敵の攻撃が終わると2ターン目になりますが、実際にはまだ1ターン目の処理が続いており、
主人公の行動選択も1ターン目の行動選択になっています。
通常では次のターンになると、主人公と敵キャラの行動を記録する設定が初期化されますが、
「会話する」の攻撃の時には、敵の攻撃が終了しても1ターン目のままなので、
「会話する」の攻撃設定もそのまま残った状態になります。
そのあとで2ターン目(本当は1ターン目)を実行すると、
初期化されていない「会話する」の時の敵の攻撃がもう一度実行され、
さらに本来の1ターン目の敵の攻撃も実行されるので、
次のターンで敵が2回攻撃してくる状態になります。
以下は改善方法を記載したものです。
必ず作品データのバックアップを残してから設定してみて下さい。
なお、以下の設定を行って、ステータス画面が動くバグが直るかどうかは不明です。
「会話する」のコマンドがある主人公がパーティの1人目(先頭にいる主人公)ならば、
コモン[193]とコモン[195]による敵の攻撃後にコマンド登録を初期化するだけで良いでしょう。
■イベントの挿入[名]: ["X┃┗◆敵・味方AI計算"] <コモンEv 193> / 1:敵のAIのみ計算
■イベントの挿入[名]: ["X┣◆1ターンの処理を実行"] <コモンEv 195>
■イベントの挿入[名]: ["X[戦]コマンド登録"] <コモンEv 157> / 0 / 0 / -1:全初期化 / 0
WoditorEvCOMMAND_START
[300][3,1]<0>(0,1,1)("X┃┗◆敵・味方AI計算")
[300][2,1]<0>(0,0)("X┣◆1ターンの処理を実行")
[300][6,1]<0>(0,4,0,0,-1,0)("X[戦]コマンド登録")
WoditorEvCOMMAND_END
「会話する」のコマンドがある主人公がパーティの2人目以降になる可能性がある場合は、
通常変数[1:会話失敗]のような変数を用意し、会話に失敗した時には、
主人公の行動選択を強制的に終了させるような設定を行うと良いでしょう。
「会話する」の実行時に呼び出すコモンイベントの設定で
■イベントの挿入[名]: ["X┃┗◆敵・味方AI計算"] <コモンEv 193> / 1:敵のAIのみ計算
■イベントの挿入[名]: ["X┣◆1ターンの処理を実行"] <コモンEv 195>
を削除し、代わりに
■イベントの挿入[名]: ["X[戦]コマンド登録"] <コモンEv 157> / 0 / 0 / -1:全初期化 / 0
■変数操作: V1[会話失敗] = 1 + 0
を設定。
WoditorEvCOMMAND_START
[300][6,1]<0>(0,4,0,0,-1,0)("X[戦]コマンド登録")
[121][4,0]<0>(2000001,1,0,0)()
WoditorEvCOMMAND_END
コモン[192]の272行目に以下のイベントを追加。
■条件分岐(変数): 【1】 V1[会話失敗] が 1 と同じ
-◇分岐: 【1】 [ V1[会話失敗] が 1 と同じ ]の場合↓
|■イベント処理中断
|■
◇分岐終了◇
WoditorEvCOMMAND_START
[111][4,0]<0>(1,2000001,1,2)()
[401][1,0]<0>(1)()
[172][0,0]<1>()()
[0][0,0]<1>()()
[499][0,0]<0>()()
WoditorEvCOMMAND_END
コモン[191]の114行目に以下のイベントを追加。
■条件分岐(変数): 【1】 V1[会話失敗] が 1 と同じ
-◇分岐: 【1】 [ V1[会話失敗] が 1 と同じ ]の場合↓
|■変数操作: CSelf0[コマンドモード] = -1 + 0
|●ラベル「AI処理開始」に飛ぶ >>>>>>>>>>>>>>>>>>>>>>>>>
|■
◇分岐終了◇
WoditorEvCOMMAND_START
[111][4,0]<0>(1,2000001,1,2)()
[401][1,0]<0>(1)()
[121][4,0]<1>(1600000,-1,0,0)()
[213][0,1]<1>()("AI処理開始")
[0][0,0]<1>()()
[499][0,0]<0>()()
WoditorEvCOMMAND_END
コモン[188]の53行目に以下のイベントを追加。
■変数操作: V1[会話失敗] = 0 + 0
WoditorEvCOMMAND_START
[121][4,0]<0>(2000001,0,0,0)()
WoditorEvCOMMAND_END
以上で設定完了です。