バグ?:技能により召喚された召喚獣のカードイメージが消える

Issue #461 resolved
gorfrog created an issue

すみません、また同じ要件で恐縮なのですが、新たに条件を限定する事ができたので報告します。エディタのPyのexe、外部プログラムのクラシックエンジン、代替エンジンの設定もちゃんとして、シナリオへの画像の格納も試したのですが、同じ事が起こったのです。今回はそれが特定の条件下で起こる事を確認しました。ただ、バグである確証は無いので、こちら側に改善すべき点がある場合は教えてください。

私が確認した条件は以下の二つです。第一に、直前に起動したシナリオで戦闘している事。第二に、直前に起動し、且つ戦闘イベントを経たシナリオを別のフォルダに移動している事。その際、シナリオ選択ダイアログからフォルダを開いており、その後ダイアログを閉じずに次のシナリオを選択しています。

前提条件としては、スキンタイプ別にシナリオ選択の開始地点を変えていない事、当該技能及び召喚獣カードはデバッグ機能の手札配布・更新機能で1回以上更新している事、XエディタとバリアントなどPy以外のエンジンがPyのexeより上の階層のフォルダにある事、外付けHDDから起動している事、OSがWin10である事、ノートパソコンである事です。

私は未消化のシナリオを別のフォルダに分け、プレイした後に整理しているので、最近編集したシナリオの召喚獣のカードイメージが消える現象が起こったのかも知れないと思ったのです。再現できなければ教えてください。こちらの問題かも知れません。

Comments (36)

  1. 暗黒 騎士

    第一に、直前に起動したシナリオで戦闘している事。 第二に、直前に起動し、且つ戦闘イベントを経たシナリオを別のフォルダに移動している事。

    戦闘シナリオで戦闘中火精召喚を使用、サラマンダーを召喚し、済印を付けずに終了後そのシナリオをゴミ箱へ移動、 別の戦闘シナリオで戦闘中召喚してみましたが自分の環境では再現できませんでした。

    確認させて頂きたいのですが、この現象はYatsugatakeさんがXEditorで特に編集していないシナリオの技能カードでも起こり、それは再起動などでは改善されず、そのセーブデータではデバッグモードで更新などしない場合、永続的に表示されなくなるという理解でよいでしょうか?

    キャラクターが持っている召喚技能カードは Yado\(宿名)\Adventurer\(キャラクター名).xml に記録されているかと思いますので、その召喚獣の<ImagePath>(画像ファイルの場所)を見ると消える原因のヒントになるかもしれません。

  2. gorfrog reporter

    すみません、助言ありがとうございます。本当に助かりました。お陰様で、原因らしきものに辿り着きました。多分これは、こちら側の問題です。大変ご迷惑をかけ、申し訳ありません。

    冒険者のxmlを確認した所、Pathに異常はありませんでした。Materialの該当画像をペイントで保存し直してみたりしたのですが、やはり同じ現象が起きました。同じ現象が起きた時、Materialの該当フォルダを確認すると、何故か該当画像ファイルが消えていました。

    以前、「exeの存在するフォルダ名を変えた」事は申し上げたと思いますが、一旦終了して再度起動した時に、xmlファイルを閉じ忘れていて、エラーが出たのです。その時ログを確認してみると、Pyは以前のフォルダ名のまま中身を探していました。その際の不具合で画像が消えたのだと思います。消えた画像は、どれもフォルダ名変更以後に編集した技能でした。多分、技能による召喚獣「喪失」する際に起こっている事だと思います。

    これは憶測ですが、xmlを確認した所、冒険者の情報に上の階層のフォルダ名の指定はありませんでした。だから「付帯能力でない召喚獣」の画像はシナリオ終了時に消去される。しかし技能の画像を探す時のパスは以前のフォルダ名のままなので消えた画像の補完ができず呼び出せなくなってしまうという事なのかなと。間違っていたらすみません。

    結局、逆変換できないカードもあったので、フォルダ名を元に戻すという処置で対処しました。あれから何度かシナリオを起動しましたが、同じ現象は起こっていません。まだ何があるかわかりませんが。

  3. k4nagatsuki repo owner

    反応が遅れて申し訳ありません。

    この現象はどうも奇妙です。素材が削除されるという事なのですが、CWの宿フォルダから素材を消す処理は、それを参照しているカードが破棄される時だけです。エンジンの場所の設定など、関係ないはずです。

    以前、「exeの存在するフォルダ名を変えた」事は申し上げたと思いますが、一旦終了して再度起動した時に、xmlファイルを閉じ忘れていて、エラーが出たのです。その時ログを確認してみると、Pyは以前のフォルダ名のまま中身を探していました。

    ここのところがどうも分かりません。閉じ忘れていたのはどのファイルでしょうか。CWPyはData/Temp以下に一時フォルダを作ります。その中のファイルが削除できなければエラーになりますが、その事でしょうか。

    「以前のフォルダ名のまま」というのもよく分かりません。CWPyで扱うパスは(ショートカット先のシナリオなどの例外を除いて)実行フォルダ等からの相対パスですから、本体を移動させてもパスは変わらないはずです。本体だけ移動させてYadoDataなどのフォルダを移動させないというパターンもありますが、その場合はそもそも起動できなかったり、宿を開けなかったりするはずです。

    また、宿内の素材参照は、宿のフォルダからの相対パスになるはずです。Yado/<各宿>の中身を個別に移動させたりすると参照は崩れますが、各宿のフォルダをまるごと移動させたり名前を変更する限りは問題ないはずです。

    問題が起きた際に何をしたのか具体的に教えていただけないでしょうか。

  4. gorfrog reporter

    すみません、解決していませんでした。フォルダ名を戻しても同じ問題が発生しています。すみません、確認不足でした。

    あと、移動ではなく、Py一式が入ったフォルダの「名前を変更」しただけなので、移動とは違うかも知れません。いえ、知識は無いのですが。すみません。

    ところで、最も頻繁にしている行為を一つ忘れていました。「セーブ」です。ついさっき、「更新」ではなく「配布」で技能を入れ替え、念入りに何度も何度もシナリオを起動して召喚を繰り返していたのですが、件の現象が起こらない事を確認し、一安心して「セーブ」した所、次に召喚した時には画像が消失していました。

    それ以外には、「最近編集したシナリオ」である事と、「デバッグ機能で更新した」事以外、共通点は無いと思います。最近起こり始めた現象で、私も訳がわからず困っています。

  5. k4nagatsuki repo owner

    ありがとうございます。

    セーブによってファイルが一時フォルダから正規のフォルダへ移動したりといった処理が走るので、それで問題が起きる事は(良し悪しはともかく)納得できます。

    また、デバッガのカード編集ダイアログからの編集は非常に怪しいです。シナリオの正規ルートとは別のルートでカードを配っていますし、複数のカードを一括して処理していたりします。

    カードの更新の時に複数まとめて更新すると複数の召喚獣で素材が共有されてしまうのかな、と思い、以下のように試してみたのですが、問題の現象は再現できずじまいでした。

    1. リューンで「風精召喚」を購入
    2. 別のシナリオで「シルフィード」を2枚召喚
    3. カード編集ダイアログで2枚の「シルフィード」を一括して更新
    4. 1枚を使い切って破棄する
    5. セーブする
    6. ロードする
    7. スキンを変更する

    シナリオの編集が関係あるのでしょうか。カード編集ダイアログでの「更新」は、カードの破棄と再配布の組み合わせなので、編集前でも編集後でもやっている結果は変わらないはずです。しかしバグがあればそれも断言できません。

    確実な手順が見つかれば、原因も特定できるはずです。バグがあるのは確実なようですので、引き続き探してみます。

  6. k4nagatsuki repo owner

    すみません、まだ再現できていません。

    • 購入した召喚技能を他のシナリオへ持ち込む
      • 召喚獣を複数召喚してからセーブし、その後一部を破棄する
      • 複数の召喚獣を破棄してからセーブする
      • 召喚獣をカード編集ダイアログから更新してから破棄する
      • 元シナリオで召喚獣を更新し、カード編集ダイアログで更新してから一部を破棄する
    • カード編集ダイアログから他のシナリオの召喚獣を複数配布する
      • カード編集ダイアログからカードを更新し、セーブせずに一部を破棄する
      • カード編集ダイアログからカードを更新し、セーブして一部を破棄する
    • カード編集ダイアログから他のシナリオの召喚技能を配布する
      • 召喚獣を複数召喚してからセーブせずに一部を破棄する
      • 召喚獣を複数召喚してからセーブして一部を破棄する

    このような操作では問題は発生しないようです。@Bolocさんの手許では頻繁に発生しているわけですが、見落としている単一の操作に原因があるのか、ある個人特有の連続した操作が原因になっているのか、それも見当がついていません。


    CWPy本体のバージョンを確認するのを忘れていました。設定ダイアログで下のほうのボタンの間に表示されているバージョン情報をコピーして貼り付けていただけないでしょうか。

  7. gorfrog reporter

    CardWirthPy 2.0 Alpha 2 Build: 2017-02-17 23:59:02

    更新、召喚、シナリオ終了、セーブ、また召喚の手順で同じ現象が発生しました。

    自作シナリオの技能の調整の為にエディタでかなりの回数編集してその度に更新してを繰り返しているうちに起こった事なので、すぐには再現できないかも知れません。

    念の為確認したのですが、自作シナリオで購入イベントを組んで技能を入手しても同じ事が起こりました。しかしXエディタで編集していない昔のシナリオの召喚技能は何度試しても無事でした。Xエディタも何か関係しているのかも知れません。

    あともう一つ共通点を。黄金鎧召喚とか精霊のピアスとか、自作技能の他にも、二重三重以上のスタートのコール機能を多用したり複数の召喚獣を扱えたり、複雑な召喚技能で起こりやすいような気がします。厳密に確かめた訳ではありませんが、デバッグ機能でその手の自作技能を何度も更新したのも悪かったのかも知れません。

  8. k4nagatsuki repo owner

    CardWirthPy 2.0 Alpha 2 Build: 2017-02-17 23:59:02

    更新、召喚、シナリオ終了、セーブ、また召喚の手順で同じ現象が発生しました。

    ありがとうございます。いくつか確認させてください。

    • その手順を繰り返しても毎回再現するわけではないのでしょうか。
    • 発生時には必ずシナリオの編集が行われているのでしょうか。それとも編集なしでも発生するのでしょうか。
    • 更新する対象はイメージが失われる召喚獣自体ではなく、それを召喚する側のカードという事でよいでしょうか。
    • クラシックなシナリオのカードで発生するという事でしたが、WSN形式での発生は確認されていないと考えてよいでしょうか。

    また、他にこの現象が発生している方はいらっしゃらないでしょうか。

  9. gorfrog reporter

    最初は時々でしたが、今はほぼ毎回です。少なくとも、私のXエディタで編集したシナリオ以外では確認されていません。更新の対象は技能やアイテムカードで召喚獣自体ではありません。ただ、WSNシナリオはまだ組んだ事がないので、まだ確認できていません。すみません。

    それと、Materialのフォルダを開いたまま召喚して確認したのですが、召喚、シナリオ終了、セーブ、そして次の召喚技能のカードを選択し、使用した瞬間に消えていました。このタイミングに何かが起こっているようです。

  10. k4nagatsuki repo owner

    すみません、可能であれば問題の発生するカードのシナリオを提供していただけないでしょうか。設計上なかなか考えられない事ですが、問題がカードの構造に起因していないとはいい切れません。

    編集の有無というのは、現象が発生した時にどこかのタイミングでシナリオの編集を行ったか否かという事です。

    また、セーブのタイミングですが、召喚を行うために他のシナリオに入った前・後のどちらでしょうか。

  11. gorfrog reporter

    8.1女にアップロードしましたので、御確認下さい。確認のコメントを頂き次第削除させて頂きます。パスワードは「bugsample」です。

    セーブのタイミングですが、シナリオを終了した後です。その後またシナリオ内で召喚すると例のバグが起こります。セーブの後入るシナリオは同じシナリオでも違うシナリオでも同様です。

  12. k4nagatsuki repo owner

    ありがとうございます。ダウンロードしました。

    これから試してみます。

  13. k4nagatsuki repo owner

    現象の再現を確認しました。しかし一体全体どういうメカニズムでこんな事が起きるんだろう?

    これから原因を調べてみます。

  14. k4nagatsuki repo owner

    pull request #1778

    ここが原因だろう、という所に手を入れました。これで直った……と言いたいところですがテスト中に摩訶不思議な事が起きました。

    問題の原因は、おそらくシナリオ離脱時の召喚獣が削除される処理にあります。カードが破棄されると、そこから参照されている素材が削除されますが、付帯能力でない召喚獣が参照している素材は削除されるべきではありません。それは別のカードに属しており、何度でも復活するカードだからです。

    ところが、実際には付帯能力でない召喚獣かどうかという判断にミスがあり、参照素材の削除処理が走っていました。召喚獣のイメージが削除されたのは、おそらくこの時です。

    ですから判断ミスを正せば問題は無くなる、と思われます。

    が、実際には、クラシックなシナリオのカードのイメージは、格納イメージです。削除される素材ファイルは存在しません。これではイメージが削除される事が説明できません。

    この辺りが不可解で処理を追っていたのですが、不思議な事に、これまで問題を再現できていた手順を繰り返しても、再現しなくなってしまいました。これは超常現象です。C言語などならアクセス違反でメモリを破壊している事を考えるような事例ですが、Pythonなので考えづらいです。

    というわけで、問題は解決したと思われるが、実際にはよく分からない、という状態になってしまっています。解決すらしていないかもしれません。

    とりあえず、最新のテスト版をお試しください。

  15. gorfrog reporter

    確認しました。私の方でも例の現象は発生しなくなっています。私の拙い検証に長々お付き合い下さりありがとうございます。

    しかし摩訶不思議の超常現象で解決というのが気になりますね。そもそも私一人だけという時点で既に超常現象ですし。原因がわからないというのが恐いですが、取り敢えず同じ事が起こらなくなったようで良かったです。本当に助かりました。ありがとうございます。

  16. k4nagatsuki repo owner

    そういえば前にも、ある時を境にいきなりダイアログ上のカードイメージが正常に表示されなくなるという現象が起きた事がありました。たしか正常だったはずの過去のバージョンで試しても同じ現象が起きていたような。

    してみると、Pythonには起動した時期によって処理結果が変わったりする所があるんですかね?(そんなバカな)

    何はともあれ一旦解決できたようでよかったです。長々とおつきあいいただき、本当にありがとうございました。また、お待たせして申し訳ありませんでした。

    このIssueですが、根本的によく分からない所が残っているので、今すぐにはクローズせずにおこうかと思います。バージョン2がリリースされる頃までに再発しないようでしたら、クローズします。

  17. gorfrog reporter

    Pyの中に残ったログとか、キャッシュとか、その類のものが影響しているのでしょうか?正常だった筈の物に同じ事が起こるのは恐いですね。

  18. k4nagatsuki repo owner

    私の環境で再現しなくなった件には、そっちの方が可能性があると思います(と思って別の宿で試したのにダメだったけど)。

    見つけたバグには起きた現象を説明できるだけの説得力がありますし、たぶん本当に直っているんだろうな、とは思ってます。

  19. gorfrog reporter

    すみません、長月さんに渡したシナリオの中にある鍋と瓶の技能なのですが、「更新」したら画像が全て消えていて、「配布」したら正常だったという事が起こりました。やはり「更新」も一因なのでしょうか?これからは使わないようにしようと思います。

  20. k4nagatsuki repo owner

    申し訳ありません。どうもカード編集ダイアログに問題がありそうです。

    再現手順を教えていただけないでしょうか。

  21. gorfrog reporter

    魔女二人と子供と荷物袋に該当カードがあり、黒魔女がパーティーに、白魔女と子供は宿帳に、そして該当カードを「検索」して「更新」です。一括で。すると何故か召喚獣も含め真っ白になっており、しかしMaterialは消えていませんでした。

  22. k4nagatsuki repo owner

    すみません、ちょっと分かりません。

    • 「鍋と瓶の技能」はID:8の技能の事でいいですか?
    • 魔女はID:2とID:6の人の事でいいですか?
    • それぞれのキャラクターを一旦宿へ連れ込み、当該技能を持たせたという事でよいでしょうか。
    • その状態でセーブやロードは行ったでしょうか。
    • 検索して更新する操作は宿で行ったのでしょうか、それとも当該シナリオの中でしょうか、あるいは他のシナリオの中でしょうか。
    • 更新後セーブやロードは行ったでしょうか。
    • 問題に再現性はあるでしょうか。
  23. gorfrog reporter

    すみません、一旦削除して再配布したので、以前のカードで確認できないのですが、配布したものを更新するのは別に問題ありませんでした。何故かはよくわからないのですが。セーブは更新の前にしたと思います。

  24. k4nagatsuki repo owner

    うーん、以前配布されたカードの状態がおかしくなっていたという事でしょうか。

    私の方でも時々カードを更新して現象が起きないか見てみます。

  25. gorfrog reporter

    そう言えば過去に二度ほど、一度真っ白になったけどもう一度更新すると正常に戻ったという経験があります。多分関係あると思います。

  26. k4nagatsuki repo owner

    Material以下が残っているという事は、イメージの表示のみが失敗しており、ロードすると復元された可能性もあるでしょうか?

    再現方法が分かったらお知らせください。

  27. 暗黒 騎士

    真っ白というのでデバッガのメニューバーの方で「シナリオ(S)>エリア/戦闘中断」のアイコンが真っ白になっているのを思い出しました。これはdebugger.pydef _refresh_areaname内のSetBitmap(bmp)でアイコンが二重に描画されているせいだと思うのですが(自分の方では直せなかったのでコメントアウトしました)、それと似たような現象なのかなと。

  28. k4nagatsuki repo owner

    カードのイメージとツールバーのアイコンは別物なので、たぶん関係ないのではないでしょうか。

    すみませんが、すぐに調べて直す作業ができそうもないので、お手数をおかけしますが別件でIssueを立てていただけないでしょうか。

  29. 暗黒 騎士

    去年末ぐらいに気付いていたことですが、特に実害はないと思って報告しませんでしたので報告扱いで対処して頂く必要はないです。お忙しいようですしお構いなく。 画像イメージは残っていて真っ白になるなら、両方WXだし、理屈としてはそれと同じ特定条件下で二重描画になってしまうパターンがあるのではないかと思っただけなので。

  30. k4nagatsuki repo owner

    いえ、バグはバグなので、急がないにせよ直す必要はあります。Issueを立てておかないと忘れ去られるおそれがあります。

    とりあえず私の方で立てておきます。しかしいつの間にバグったんだろう?

  31. Log in to comment