荷物袋のページ送りをしていたら入力を受け付けなくなりゲームが続行不可能になる

Issue #1112 open
1122 ct created an issue

https://bitbucket.org/k4nagatsuki/cardwirthpy-reboot/issues/1110/-------------------------------

の続きです。

ご案内いただいたとおりcardwirthpy_20240212_x64.zipを5.2に上書きしてプレイしていたら以下のような経緯でエラーが発生しました。

クリックかマウスホイールで荷物袋のページ送りをしていたら、ページを切り替えても表示されているカードの種類が切り替わらない。
その後荷物袋ウィンドウを閉じたところ、ゲームの操作が不能になりゲーム続行不可能になる。
CWを終了するとエラーログが生成された。

生成されたエラーログを添付します。(コメントでファイルを添付できるか分からなかったのと、別カテゴリのエラーかもしれないので一応新しく課題を作成しました)

カードクリックで操作不能になるエラーと同様にPy5.2で以前からこういう現象が起きていた気もしますが、記憶が曖昧なので何とも言えないところです。

制作中の自作シナリオ内で荷物袋を開いているうちに発生したエラーですが、リューンのようなシンプルな店シナリオなのでシナリオ依存のバグではないかもしれません。とりあえずエラーログだけでもお送りします。

Comments (8)

  1. 1122 ct reporter

    その後、新たにプレイを続けているとシナリオ中に冒険者のカードを右クリックしたら操作を受け付けなくなりゲームが続行不可能になりました。
    前述した自作シナリオのテスト中でした。

    荷物袋のエラーとは微妙に違いますが同根のバグかもしれないので報告しておきます。

    エラーごとに課題を分ければいいのか、エラーログは長文になった場合新規に課題を作成して添付ファイルにするべきなのか、同じような不具合でもとりあえずエラーログが出たら報告する意義があるのか、その辺りの作法が分かっていないので無駄に煩雑になっていたらすみません。

    これもとりあえずエラーログだけでも貼っておきます。

    Version : 5.2 (64-bit) / 2024-02-12 17:44:32
    DateTime: 2024-02-16 01:52:27
    Traceback (most recent call last):
      File ".\cw\dialog\charainfo.py", line 81, in __init__
      File "C:\Program Files\Python38\lib\site-packages\wx\lib\agw\aui\auibook.py", line 3051, in __init__
      File "C:\Program Files\Python38\lib\site-packages\wx\lib\agw\aui\auibook.py", line 3133, in InitNotebook
      File "C:\Program Files\Python38\lib\site-packages\wx\lib\agw\aui\tabart.py", line 157, in __init__
      File "C:\Program Files\Python38\lib\site-packages\wx\lib\agw\aui\aui_utilities.py", line 158, in BitmapFromBits
    wx._core.wxAssertionError: C++ assertion ""hbmp"" failed at ..\..\src\msw\dib.cpp(134) in wxDIB::Create(): wxDIB::Create(): invalid bitmap
    
    Traceback (most recent call last):
      File ".\cw\dialog\charainfo.py", line 81, in __init__
      File "C:\Program Files\Python38\lib\site-packages\wx\lib\agw\aui\auibook.py", line 3048, in __init__
      File "C:\Program Files\Python38\lib\site-packages\wx\lib\agw\aui\framemanager.py", line 4144, in __init__
      File "C:\Program Files\Python38\lib\site-packages\wx\lib\agw\aui\dockart.py", line 163, in __init__
      File "C:\Program Files\Python38\lib\site-packages\wx\lib\agw\aui\dockart.py", line 854, in SetDefaultPaneBitmaps
      File "C:\Program Files\Python38\lib\site-packages\wx\lib\agw\aui\aui_utilities.py", line 159, in BitmapFromBits
    wx._core.wxAssertionError: C++ assertion ""IsOk()"" failed at ..\..\src\common\image.cpp(1717) in wxImage::Replace(): invalid image
    
    Traceback (most recent call last):
      File ".\cw\dialog\charainfo.py", line 81, in __init__
      File "C:\Program Files\Python38\lib\site-packages\wx\lib\agw\aui\auibook.py", line 3048, in __init__
      File "C:\Program Files\Python38\lib\site-packages\wx\lib\agw\aui\framemanager.py", line 4144, in __init__
      File "C:\Program Files\Python38\lib\site-packages\wx\lib\agw\aui\dockart.py", line 163, in __init__
      File "C:\Program Files\Python38\lib\site-packages\wx\lib\agw\aui\dockart.py", line 854, in SetDefaultPaneBitmaps
      File "C:\Program Files\Python38\lib\site-packages\wx\lib\agw\aui\aui_utilities.py", line 159, in BitmapFromBits
    wx._core.wxAssertionError: C++ assertion ""IsOk()"" failed at ..\..\src\common\image.cpp(1717) in wxImage::Replace(): invalid image
    
    Traceback (most recent call last):
      File ".\cw\dialog\charainfo.py", line 81, in __init__
      File "C:\Program Files\Python38\lib\site-packages\wx\lib\agw\aui\auibook.py", line 3048, in __init__
      File "C:\Program Files\Python38\lib\site-packages\wx\lib\agw\aui\framemanager.py", line 4144, in __init__
      File "C:\Program Files\Python38\lib\site-packages\wx\lib\agw\aui\dockart.py", line 163, in __init__
      File "C:\Program Files\Python38\lib\site-packages\wx\lib\agw\aui\dockart.py", line 854, in SetDefaultPaneBitmaps
      File "C:\Program Files\Python38\lib\site-packages\wx\lib\agw\aui\aui_utilities.py", line 159, in BitmapFromBits
    wx._core.wxAssertionError: C++ assertion ""IsOk()"" failed at ..\..\src\common\image.cpp(1717) in wxImage::Replace(): invalid image
    
    Traceback (most recent call last):
      File ".\cw\dialog\charainfo.py", line 81, in __init__
      File "C:\Program Files\Python38\lib\site-packages\wx\lib\agw\aui\auibook.py", line 3048, in __init__
      File "C:\Program Files\Python38\lib\site-packages\wx\lib\agw\aui\framemanager.py", line 4144, in __init__
      File "C:\Program Files\Python38\lib\site-packages\wx\lib\agw\aui\dockart.py", line 163, in __init__
      File "C:\Program Files\Python38\lib\site-packages\wx\lib\agw\aui\dockart.py", line 854, in SetDefaultPaneBitmaps
      File "C:\Program Files\Python38\lib\site-packages\wx\lib\agw\aui\aui_utilities.py", line 159, in BitmapFromBits
    wx._core.wxAssertionError: C++ assertion ""IsOk()"" failed at ..\..\src\common\image.cpp(1717) in wxImage::Replace(): invalid image
    
    Traceback (most recent call last):
      File ".\cw\frame.py", line 1092, in OnCHARAINFO
      File ".\cw\dialog\charainfo.py", line 590, in __init__
      File ".\cw\dialog\charainfo.py", line 81, in __init__
      File "C:\Program Files\Python38\lib\site-packages\wx\lib\agw\aui\auibook.py", line 3048, in __init__
      File "C:\Program Files\Python38\lib\site-packages\wx\lib\agw\aui\framemanager.py", line 4144, in __init__
      File "C:\Program Files\Python38\lib\site-packages\wx\lib\agw\aui\dockart.py", line 163, in __init__
      File "C:\Program Files\Python38\lib\site-packages\wx\lib\agw\aui\dockart.py", line 854, in SetDefaultPaneBitmaps
      File "C:\Program Files\Python38\lib\site-packages\wx\lib\agw\aui\aui_utilities.py", line 159, in BitmapFromBits
    wx._core.wxAssertionError: C++ assertion ""IsOk()"" failed at ..\..\src\common\image.cpp(1717) in wxImage::Replace(): invalid image
    _imageretouch.c(1181): CreateCompatibleDC, ErrCode: 0
    _imageretouch.c(1181): CreateCompatibleDC, ErrCode: 87
    _imageretouch.c(1181): CreateCompatibleDC, ErrCode: 87
    _imageretouch.c(1181): CreateCompatibleDC, ErrCode: 87
    _imageretouch.c(1441): TabbedTextOutW, ErrCode: 6
    Traceback (most recent call last):
      File ".\cw\thread.py", line 981, in run
      File ".\cw\thread.py", line 1034, in _run
      File ".\cw\thread.py", line 1050, in main_loop
      File ".\cw\eventhandler.py", line 118, in run
      File ".\cw\eventhandler.py", line 430, in rclick_event
      File ".\cw\sprite\card.py", line 941, in rclick_event
      File ".\cw\thread.py", line 2060, in call_modaldlg
      File ".\cw\thread.py", line 1050, in main_loop
      File ".\cw\eventhandler.py", line 126, in run
      File ".\cw\eventhandler.py", line 838, in wheel_event
      File ".\cw\eventhandler.py", line 827, in change_volume
      File ".\cw\sprite\statusbar.py", line 320, in update_volumebar
      File ".\cw\sprite\statusbar.py", line 425, in update_scale
      File ".\cw\imageretouch.py", line 1178, in render
      File ".\cw\imageretouch.py", line 1232, in _render_impl
    SystemError: <built-in function font_render> returned NULL without setting an error
    
    _imageretouch.c(1181): CreateCompatibleDC, ErrCode: 0
    _imageretouch.c(1181): CreateCompatibleDC, ErrCode: 0
    _imageretouch.c(1181): CreateCompatibleDC, ErrCode: 0
    _imageretouch.c(1181): CreateCompatibleDC, ErrCode: 0
    _imageretouch.c(1181): CreateCompatibleDC, ErrCode: 0
    _imageretouch.c(1441): TabbedTextOutW, ErrCode: 6
    Exception in thread Thread-1:
    Traceback (most recent call last):
      File ".\cw\thread.py", line 981, in run
      File ".\cw\thread.py", line 1034, in _run
      File ".\cw\thread.py", line 1050, in main_loop
      File ".\cw\eventhandler.py", line 118, in run
      File ".\cw\eventhandler.py", line 430, in rclick_event
      File ".\cw\sprite\card.py", line 941, in rclick_event
      File ".\cw\thread.py", line 2060, in call_modaldlg
      File ".\cw\thread.py", line 1050, in main_loop
      File ".\cw\eventhandler.py", line 126, in run
      File ".\cw\eventhandler.py", line 838, in wheel_event
      File ".\cw\eventhandler.py", line 827, in change_volume
      File ".\cw\sprite\statusbar.py", line 320, in update_volumebar
      File ".\cw\sprite\statusbar.py", line 425, in update_scale
      File ".\cw\imageretouch.py", line 1178, in render
      File ".\cw\imageretouch.py", line 1232, in _render_impl
    SystemError: <built-in function font_render> returned NULL without setting an error
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "C:\Program Files\Python38\lib\threading.py", line 932, in _bootstrap_inner
      File ".\cw\thread.py", line 1009, in run
      File ".\cw\imageretouch.py", line 1178, in render
      File ".\cw\imageretouch.py", line 1232, in _render_impl
    SystemError: <built-in function font_render> returned NULL without setting an error
    
    DateTime: 2024-02-16 01:52:41
    Traceback (most recent call last):
      File ".\cw\frame.py", line 778, in OnCloseFromFrame
      File ".\cw\frame.py", line 802, in OnCLOSE
      File ".\cw\dialog\message.py", line 162, in __init__
      File ".\cw\dialog\message.py", line 36, in __init__
    wx._core.wxAssertionError: C++ assertion "x > (double)(-2147483647 - 1) - 0.5 && x < (double)2147483647 + 0.5" failed at C:\PROJECTS\bb2\dist-win64-py38\build\ext\wxWidgets\include\wx/math.h(140) in wxRound(): argument out of supported range
    

  2. k4nagatsuki repo owner
    • changed status to open

    ご確認ありがとうございます。

    前回の対応はやはり効果が無かったようです。また、どうも起きている現象が通常起こりえないタイプのようで、CWPyの環境自体が壊れているような印象を受けます。32-bit版と64-bit版のファイルが混ざっていたりするのでしょうか?

    次の手順で比較的真っ新な5.2環境に戻した方がいいかもしれません(以下の作業を行ってもシナリオ・宿・設定は削除されませんが、心配ならバックアップを取ってください)。

    1. CardWirthPy\libCardWirthPy\x64フォルダを削除する
    2. 5.2を再ダウンロードし、フォルダごと上書きする

    エラーログはファイルで読んでも課題上に張りつけても読める事は同じなので、都合のよい方を選択していただければと思います。

  3. 1122 ct reporter

    返信ありがとうございます。

    32-bit版と64-bit版を混在させた記憶はないのですが、しばらく前のことなので曖昧です。とにかく指示いただいたとおりの手順で環境を再構築してみました。この状態でしばらくプレイしてみますね。

  4. 1122 ct reporter

    上記のとおりの環境でプレイしていたところまたエラーが発生したので報告です。

    戦闘中に冒険者だったか敵キャストだったかを左クリック(右クリックだったかも)したら、操作を受け付けなくなりゲームが続行不能になりました。

    自作シナリオのテスト中に発生したもので、他のシナリオでも発生するかは不明です。

    エラーログは以下のとおりです。

    Version : 5.2 (64-bit) / 2023-12-10 10:40:46
    DateTime: 2024-02-19 21:52:12
    Traceback (most recent call last):
      File ".\cw\frame.py", line 1092, in OnCHARAINFO
      File ".\cw\dialog\charainfo.py", line 565, in __init__
      File ".\cw\dialog\charainfo.py", line 64, in __init__
      File "C:\Program Files\Python38\lib\site-packages\wx\lib\agw\aui\auibook.py", line 3051, in __init__
      File "C:\Program Files\Python38\lib\site-packages\wx\lib\agw\aui\auibook.py", line 3133, in InitNotebook
      File "C:\Program Files\Python38\lib\site-packages\wx\lib\agw\aui\tabart.py", line 156, in __init__
      File "C:\Program Files\Python38\lib\site-packages\wx\lib\agw\aui\aui_utilities.py", line 159, in BitmapFromBits
    wx._core.wxAssertionError: C++ assertion ""IsOk()"" failed at ..\..\src\common\image.cpp(1717) in wxImage::Replace(): invalid image
    
    DateTime: 2024-02-19 21:52:23
    Traceback (most recent call last):
      File ".\cw\frame.py", line 550, in OnEXECFUNC
      File ".\cw\frame.py", line 1512, in func
      File ".\cw\frame.py", line 1543, in _put_dlgscreenshots
    wx._core.wxAssertionError: C++ assertion ""Assert failure"" failed at ..\..\src\msw\dcmemory.cpp(131) in wxMemoryDCImpl::DoSelect(): Couldn't select a bitmap into wxMemoryDC
    

    また、エラーログが生成されたというダイアログが出た後、普段は見たことのないダイアログが出ました(下記添付ファイルのとおり)。とりあえずはいを押しておきました。

  5. k4nagatsuki repo owner

    ご報告ありがとうございます。ダイアログが出るなど結果は異なりますが、エラーが起きている箇所と内容は最初のご報告と同じようです。

    不思議なのは、これはビットマップイメージが不正な状態にあるというエラーなのですが、当の不正ビットマップは当該処理の直前にメモリ上に生成されたものであり、極度のメモリ不足やOSのリソース不足などの理由が無ければ不正になり得ず、今時のマシンでそのような状況が発生する事はまず考えられないという事です。また発生頻度の割に同様の報告を受けた事が無く、他の環境では起こっていないように思われます。その上エラー発生個所はCWPyより遥かに広く使われるライブラリの内部です。

    この手の不可解なエラーで疑い得る、というか過去実際に原因となったのは、Windowsのバージョン違いによるAPIの不具合(Win10の特定バージョンでだけ描画文字列の幅がランダムに変動したという事例あり)、それとアンチウィルスソフトウェアの介入による障害です。もし標準以外のアンチウィルスソフトを使用しているのであれば、試しにCWPy全体を検知対象から除外してみていただけないでしょうか。

  6. 1122 ct reporter

    セキュリティソフトは入れた記憶がなく、設定→更新とセキュリティ→Windowsセキュリティで確認してみましたがサードパーティ製アプリは入っていないようでした。「プログラムと機能」を確認してもセキュリティソフトは見当たらず。
    入っているのは「Windows Defender ファイアウォール」のみだと思います。

    度々対応していただいておりますが、私の環境でのみ起こる現象であれば仕方なさそうですね。
    本家とliteも5.2にした途端頻繁に落ちた、というツイートを1件見かけたことはありますが、複数件は確認していないので環境依存なのかもしれません。それともエラーが多数起きても報告されないだけなのか……自分は他のPyユーザとあまり交流がある方ではないので情報収集できず何とも言えませんが。

  7. k4nagatsuki repo owner

    Windows Defenderが原因ならもっと多くの環境で問題が起きそうなので、考えづらいですね。Windowsの細かいバージョンを訊ねたところでできる事は無いでしょうし、そうなると申し訳ないのですがちょっと手詰まりです。

    他に同じようなエラーが発生している方はいらっしゃらないでしょうか。

  8. 1122 ct reporter

    とりあえずこの環境のまま、経過を見守りつつプレイしていこうと思います。なにか進展があったらまた報告します。

    度々対応いただきありがとうございました。

  9. Log in to comment