Re: #615

Issue #618 resolved
Former user created an issue

お忙しい中、お返事をありがとうございます。#617へのご回答も、仕様ということで納得いたしました。

私の手元で問題が発生したのはCWPy2.2です。テストプレイヤーさんの詳しい環境は不明ですが、シナリオ内で「@CardWirthPy Version.2.2」のチェックを行っておりますので、Py2.2以上であることは間違いありません。

自作のシナリオはCWPy2用のWsn.2シナリオですが、よそさまのCW1.50用のシナリオでも発生します。複数のシナリオで同様の現象が発生しました。

思い出したのですが、エディタで編集しながら、デバッガを表示しながら、動作確認をしていたときに、この現象がたびたび起きていました。

自作シナリオで依頼を引き受け、最初に「村」エリアを訪れたとき、「カード\選択肢」フラグを設定したメニューカードが表示されないという現象です。デバッガで変数の状態を確認したところ、非表示のままになっていました。必ず表示に切り替わるはずのツリー構造で、です。

このときは、エディタで編集しながらというのが原因だと思い、気にしておりませんでした。

ただ一度発生すると、F9後に貼紙を選び直しても発生しておりました。エンジンの再起動を行うか、デバッガで再読込を行ってからF9→貼紙選択で、一時的に発生しなくなりました。デバッグモードの解除では解消しませんでした。

また、よそさまのCW1.50用シナリオで発生したときにも、プレイ中に一度はデバッガを開いていたように思います。勉強のために、気になるイベントのツリーを見せていただいておりました。このときにエディタは開いておりませんし、イベントを停止するような操作も行っておりません。

CWPy2.2より古いバージョンで発生したことはありませんが、デバッガの使用が発生の条件になっているのだとしたら、私がシナリオを作り始め、デバッガを使うようになったのは最近のことなので、どの時点で発生するようになったのかはわかりません。

自作のシナリオはこちらにあります。 https://ux.getuploader.com/AzamiCW/

正確な再現条件がわかればお役に立てるのでしょうが、以前発生したシナリオで同じタイミングでデバッガを開いても、再現しない場合のほうが多く、困惑しております。

Comments (4)

  1. k4nagatsuki repo owner

    ありがとうございます。提供していただいたシナリオで現象を確認できました。

    これからどういう不具合なのかを調査しますので、今しばらくお待ち下さい。

  2. k4nagatsuki repo owner

    pull request #2100

    原因を特定して修正できたと思います。最新のテスト版をお試しください。

    このバグは11月14日のcommit(5139c16)で入ったもので、CWPy 2.2には存在しないと思われます。

    テスト版もまだ内部バージョンは2.2なので、問題の起きたバージョンが2.2であるかのように見えたのだと思います。


    以下は問題の内容です。少し専門的になります。

    CWPyにはスタートのコールをリンクへ置換する機能があります。これはイベントの呼び出し階層を節約して、処理を簡略化・高速化し、かつより多くの階層を実行できるようにするためのものです。

    コールをリンクに置換できるかの判断は、後続のイベントコンテントが存在するかどうかで行えます。後続コンテントの無いコールはリンクと同じというわけです。

    5139c16では、高速化のためにコールコンテントが初期化された時点で判定結果を保存するようにしたのですが、その結果問題が起きてしまいました。

    デバッガを開いていると、イベントツリーを表示するために、最初にイベントを実行したか表示した時点で各イベントコンテントが必ず初期化されます。

    そして「後続コンテントがあるかどうか」の判定式は、そのコンテントが実際に実行されるタイミングで行わないと正しくない結果を返す構造になっていました。

    その結果、実際にはリンクに置換できないコールがリンクに置換されてしまい、後続のイベントが実行されなくなってしまいました。

  3. Log in to comment