内部エラー発生報告

Issue #995 resolved
sonofthesoil created an issue

かがち様のシナリオ「海溝の洞窟」のプレイ中に内部エラーが発生しましたので報告します。

エリア「最初の洞窟」で、シナリオを終了して宿に帰還するためのメニューカード「帰還用泡装置」をクリックしたところ、内部エラーが発生しました。

プレイログは添付ファイルのとおり、ビルド番号は 2020-11-08 22:21:49、プレイ環境はWin10 Pro(64bit)、メモリ8GBです。スキンは我々様の「Enlightenment」を使用していました。

Comments (15)

  1. k4nagatsuki repo owner

    ご報告ありがとうございます。

    どうも特定のカードを宿へ持ち帰る際の画像ファイル書き出し処理で問題が起きているようなのですが、もし覚えていたらシナリオ内でどのようなカードを入手したか教えていただけないでしょうか?

  2. k4nagatsuki repo owner

    「海溝の洞窟」2019/07/06版にある全てのカードを持ち帰ってみましたが、同じ問題は発生しませんでした。

    シナリオのバージョン違いによって出たり出なかったりするか、あるいは私の予想(特定のカードのイメージデータが不正になるケースがある)がまったく外れて未知の現象が起きているのかもしれません。再現性がなければ後者だと思いますが、そうなると調査が難しそうです。

  3. sonofthesoil reporter

    返信が遅くなり、申し訳ありません。

    シナリオバージョンは、2019/07/06版です。シナリオ開始時には持っておらず、終了時に持ち帰ろうとしていたカードは、天使羽×3、天使黒羽×3、エンゲルケイン×1、綺麗な水×1です。

    再現性の有無については、これから再確認してみます。

  4. sonofthesoil reporter

    同じ条件でエラーの再現を試みたところ、やはりエラーが発生しました。ログは上記レスに添付してあります。

  5. k4nagatsuki repo owner

    なぜかこちらでは再現しないので(エンゼルケインは簡単に入手できなかったのでデバッガで配ったものの)、何か設定等の条件があるのかもしれません。

    以下に該当処理の実行時にいくらか情報を出力するバージョンを作りました。

    https://drive.google.com/file/d/1JND56m3MWOk5v_kK4VKab5oR9XFbRx_5/view?usp=sharing

    これを実行すると以下のようなエラーログが出ます:

    Version : 4.3 (64-bit) / 2020-11-15 17:09:24
    DateTime: 2020-11-15 17:12:01
    card   : 天使羽
    imgpath: 28162 chars. data: binaryimage://Qk12Ug ... 
    result : OK
    card   : 天使黒羽
    imgpath: 28162 chars. data: binaryimage://Qk12Ug ... 
    result : OK
    card   : ヨモツヘグリ
    imgpath: 2806 chars. data: binaryimage://Qk0sCA ... 
    result : OK
    card   : 泡沫抱き
    imgpath: 28162 chars. data: binaryimage://Qk12Ug ... 
    result : OK
    

    お手数をおかけしますが、これで現象を再現して、ログを見せていただけないでしょうか。

  6. k4nagatsuki repo owner

    ありがとうございます。

    エンゲルケインの使用時イベントに含まれるイメージがよくないようです(しかもデバッガからの配付では再現しない)。

    再現できたので調べてみます。お待ちください。

  7. k4nagatsuki repo owner

    調べてみたんですが、これは思ったより不可解な問題で時間がかかりそうです。全然関係なさそうな分岐コンテントを削っただけで再現しなくなったりします。クラシックなシナリオのデータのロードに問題があるのかもしれません。

    解明までゆっくりお待ちいただければと思います。

  8. sonofthesoil reporter

    ご対応ありがとうございます。

    時節柄、どうぞご自愛ください。

  9. k4nagatsuki repo owner

    pull request #152

    修正できました。以下は不具合の詳細です(技術的な内容になります)。

    前提として、CWPyはデータをXMLで表現しており、クラシックなシナリオも内部的にXMLに変換しています。XMLにはバイナリを含める事ができないので、イメージはBase64に変換してImagePath等の要素のテキストにしています。

    CWPyがXMLデータを逐次的に読み込むとき、テキストが見つかったら、最後に開かれた要素のテキストとしてオブジェクトに付加するようにしていました。この時、CWPyのデータの特性上、テキストは一要素に一つだけ来るはずなので、万が一二つ以上テキストが来たら無視するようにしていました。

    ところが実際には、おそらく読込キャッシュのサイズの都合で、一つのテキストが二つ以上に分割されて読み込まれるケースがありました。今回のエンゲルケインは大量の召喚獣のイメージが含まれているので、サイズの問題によりその分割が発生し、分割位置は高い確率でイメージデータの途中になりました。そのため、Base64でエンコードされたイメージデータが途中で切れてしまう事になり、デコードに失敗する、という現象が発生していました。


    ところでずっとシナリオの名前を「海溝の洞窟」と書いていましたが正しくは「海溝の洞穴」でした(エンゲルケインはエンゼルケインと書いてるし)……。失礼しました。

  10. k4nagatsuki repo owner

    余計なスペースが混入したデータの自動的な修正は難しいかと思っていたのですが、データ構造について考えたところ可能そうに思えてきたので、自動修正するツールを作りました。

    https://bitbucket.org/k4nagatsuki/fix_unnecessary_space/downloads/fix_unnecessary_space.zip

    よろしければREADME.txtをよく読んだうえでご利用ください。

    この不具合は2020年11月16日から2021年1月6日にかけてのデイリービルドに含まれています。この期間のデイリービルドを使用していない方にはデータ修正は不要だと思われます。

  11. k4nagatsuki repo owner

    とはいえ結構長く不具合が存在していたので、wikiの先頭ページにも告知を書いておきます。

  12. Log in to comment