逃走イベントでバトルを呼び出したとき時間経過が発生しない(CWと異なる)

Create issue
Issue #378 resolved
Liar_cw NA created an issue

逃走イベントでバトルを呼び出したときの挙動がCW1.50と異なります。
その他のバージョンでは検証は行っていません。

  • CW1.50:時間経過が発生した。(行動力増加などの持続時間が減少、中毒ダメージが発生)
  • CWPy:時間経過は発生しない。(持続時間の減少や中毒ダメージが起こらない)
cardwirthpy_20160504c
CardWirthPy 1.0 Beta 1
Build: 2016-05-04 11:47:19

Comments (20)

  1. k4nagatsuki repo owner

    pull request #1454

    ありがとうございます。対応しました。逃走だけではなく、バトル中のイベント全体がこの問題に該当するようです。

    1.20ではバトル終了時の時間経過が発生しないのですが、この件に関してもそのようでした。既存の互換動作コードでそのまま対応できています。

    予想できていた事ですが、1.50でバトル開始中に次のバトルを開始するとエラーが発生します。これもちゃんと動くとしたら時間経過するのが妥当でしょう。

  2. Liar_cw NA reporter

    バトル中の逃走イベントで次のバトルを呼び出したとき、時間経過が発生することを確認しました。しかし、

    予想できていた事ですが、1.50でバトル開始中に次のバトルを開始するとエラーが発生します。これもちゃんと動くとしたら時間経過するのが妥当でしょう。

    こちらでも一応検証しておいた方が良いと考えてテストを行ってみたのですが、 CW1.50ではバトル開始イベント(システム発火)で別のバトルを開始したとき時間経過は発生しませんでした。こんな変な組み方を想定する必要があるのかどうか問われたらなんとも言えませんが……。

    • CW1.50:バトルAのバトル開始イベントでバトルBを呼び出し。呼び出し回数はA→B 1回のみ。時間経過・エラー共に発生せず。
    • CWPy:バトル開始イベントで別のバトルを呼び出したとき、時間経過が発生。
    cardwirthpy_20160504d
    CardWirthPy 1.0 Beta 1
    Build: 2016-05-04 13:28:02
    
  3. k4nagatsuki repo owner

    確認してみましたが、どうもエネミーの存在しないバトルをバトル開始イベント中に呼び出すとエラーになるというもう少し複雑な問題のようです。エネミーがいる場合は動作します。

    一応合わせて、時間経過をしないようにしておきましょう。

  4. k4nagatsuki repo owner

    pull request #1455

    対応しました。

    1.50でもエリア移動は時間経過が発生するようです。もっとも1.50ではその際に致命的な問題が発生するので、原則してはいけない事になりますが。

  5. Liar_cw NA reporter

    バトル開始イベント中に他のバトルが開始しても時間経過が発生しないことを確認しました。

    1.50のエラーの原因はエネミーの有無だったのですね。こちらでテストを行ったときはエネミーを 1体配置していました。エネミー無しのバトルの検証は行っていませんが、1.50ではエラーが起きる場面ではCWPyが何かデバッグメッセージ(警告・回避手段)を返すようにされるとユーザ側の助けになるかもしれません。(1.50では環境設定の勝手が悪いのでCWPyでテストプレイを行う方もいらっしゃるかと思います)


    よく分からない妙な挙動を見ると、報告を行う側も困惑してしまいますね……。 バトル中のエリア移動はしてはいけないとの事なので試してみたのですが、 CWPyと1.50でバトル開始イベントでエリア移動を行ったときの挙動が異なりました。

    • 1.50:バトル開始イベントですぐにエリア移動(イベントのない空エリア)を行ってもバトルが継続した。時間経過も発生。ラウンド2発火のイベントでエリア移動を行ってみたところ同エリアか別のエリアかを問わず、バトルが終了した。(同時に時間経過も発生した? 移動には空エリアを使い回し)
    • CWPy:バトル開始イベントですぐにエリア移動を行うとバトルが終了、中断された。時間経過を確認。

    これ以外の検証は行っていません。ここまで合わせていただく必要があるのかは本当に疑問ですが、挙動が異なっているということで一応の報告をさせていただきました。

    cardwirthpy_20160504e
    CardWirthPy 1.0 Beta 1
    Build: 2016-05-04 14:17:45
    
  6. k4nagatsuki repo owner

    はい、エリア移動をしてはいけません。バトル開始中にシナリオ終了でバトル中の手札が残ってしまうという問題はエリア移動でも発生するからです。そのままセーブすると致命的な事態になるかと思います。

    これはCWPyよりはエディタ、もっと言えば1.50の配布サイトや解説サイトで警告するべき事だと思います。手札が残る問題が発覚した時に警告されていませんでしたっけ。

  7. Liar_cw NA reporter

    運が良いのか悪いのか、上記手順では手札が残ったままということにはなりませんでした。エリア到着と同時にシナリオ終了を行っても問題は出ず。(1.50)  さすがにそのままセーブを行うほどの勇気はありませんが……。

    • groupAsk official fansiteを調べてみたところ、バトル開始中にシナリオ終了で手札が残る問題についてはニュースの項目に告知がありました。

    考えてみれば1.50の尻拭い(フォロー)をCWPy側が行うというのもおかしな話ですね。 本当に何なんでしょうかね、1.50のバトル開始時におけるエリア移動のあの挙動は。

    さて、元々の問題である時間経過に関する問題は解決されたと思いますし、 これ以上はまた別の話となってしまうので このIssueはクローズして問題ないと思います。

  8. k4nagatsuki repo owner

    バトル開始は元々CWにあったイベントフローの外側にもう一つのフローを付け加えたものなので、そのために問題が発生してしまったのでしょう。それが正式リリース前のテストで発覚しなかったのは不運です。

    このバグはユーザのデータを破壊するのでダウンロードページに書くくらいの事はしていいと思うのですが、そこは愛護協会が判断した事なので、私が横から口を出すのは憚られます。

    cwxeditorで警告するのは(パッケージが絡むと限界がありますが)、やっておいてよさそうです。折を見て誤り検索で出てくるようにしておきます。

    では、本題は解決したのでこのIssueはクローズさせてただきます。

  9. k4nagatsuki repo owner

    あっとすいません、入れ違いですね。エリア移動は抜けていましたか。

    それなら新規に見つかった問題という事になるのでメールを……と思って再確認してみたのですが、再現しなくなってしまいました。あれ?

    何か見間違えたんでしょうか……それともまた何かエネミーが配置されていない時みたいな条件がある?

    ちょっと追加で調べる必要がありそうです。

  10. k4nagatsuki repo owner

    @Liar_cwさんの見た、エリア移動が発生しないという現象が起きました。手札が残るというのは私の勘違いかもしれません(バトルが続いているのを見てエリア移動が終わったと勘違いし、手札が残っていると思ったか?)。

    どっちにしろこの挙動はバグですね。対応するとしたら、互換モードが必要そうです。CWNextではエリア移動できるようです。

  11. 暗黒 騎士

    手札に残るというのがどうも再現しないので色々試行錯誤していたら先をこされてしまいました。自分もエリア移動が発生しない(NEXTでは発生する)のを確認しました。1.50ではその時点では移動はしないのですが、勝利または逃走すると指定した移動先のエリアに行くようです。

  12. k4nagatsuki repo owner

    私の勘違いと思ってよさそうです。申し訳ないです。

    いずれにせよ、1.50でバトル開始中にイベントフローを変えるようなあれこれを行うのは、危険です。しない方がいいです(シナリオの終了は「してはいけません」)。

    ところでCWNextではバトル開始中に他のバトルを開始するとラウンドが経過するようなのですが、これはどうしたものでしょう? こちらの方が妥当な挙動に思えるのですが、しかしCWPyの仕様合わせは今のところ1.50が基本です。シナリオの問題が起きないなら多少は変えても構わないとは考えてはいるのですが、何か問題が起きるかどうか。

  13. 暗黒 騎士

    あまりにも特殊な状況なのでどちらでも構わないかと思います。時間経過の正否で問題となるのは毒による全滅ぐらいですし、ピンポイントで問題が起こるとは思えません。ASKが設定したものであればバグも含めて合わせるべきかと思いますが、開始イベントはLyna氏による策定かと思いますので、Lyna氏がNEXTでそのようにしたのであればそちらが正しいのでしょう。

    なんにせよ結論は変わらないですし、結果的に話をかき回してしまったようですいません。 クローズしてOKです。

  14. Liar_cw NA reporter

    1.50でバトル開始時にエリア移動を行うとバトルを継続したままエリア移動はするものの(インスペクタにて確認)、バトルに勝利などすると到着イベントは実行されないようです。 バトルを継続したまま再度エリア移動を行うと(ラウンド数指定の発火などで確認)、到着イベントが実行されました。

    確かにこんな意味不明な挙動は、してはいけませんね……。 データ破壊等を避けるのは当然ですが、少し頭が痛くなってきました。

    私個人の考えとしては、正式エンジンではないCWNextのシナリオを再生できない内は無理にそれに合わせる必要はないと思います。 それに時間経過コンテント等を用いることで同様の結果を得られるはずです。 (事実、拙作シナリオでは今回の挙動違いを報告する以前から独自の対処を行い、CW1.50の挙動へと近づけていました。)

  15. k4nagatsuki repo owner

    シナリオ側でそこまでやると将来互換性問題になりそうですが、仕方ない事である気もします。

    分かりました。では、現状のままで完了としてクローズします。

  16. Liar_cw NA reporter

    余談になりますが。もちろん合理的な意見があれば反対を取り消します。 ただ急いで変更する理由がないと思っただけですので。 今回の場合ですと先ほどの通り、現状ではCWNextのシナリオを再生できないからですね。

  17. 暗黒 騎士

    時限クーポン;の挙動も少し変?なようです。

    バトル開始イベントで称号分岐【;時限を誰か一人が所有していない】→【全員が;時限を獲得】→戦闘開始コンテント(同じバトル)という無限ループを作ると1.50では2回で抜けられます。(;は消えない)

    Pyでは無限ループし(;が消えている)、NEXTでは異常発生と表示されモジュール違反が起こりました。

  18. k4nagatsuki repo owner

    ラウンド1で別のバトルを開始するとバトル中時限クーポンは消えますね。

    これは消えるのが本当だと思います。それが一番真っ当です。CWPyの挙動が正しいと思いますし、他のエンジンの挙動は合わせる事で却って危険になる類のバグです。これは、合わせたくないです。

    というか、1.50でバトル開始中に同じバトルを開始すると前の敵が消えずに新しく敵が配置されるように見えますね。内部的には前のバトルが終了していないから時限クーポンも消えないのでしょうか? だから時間経過もしないのかも。

  19. Log in to comment