bmp 画像しかないスキンに png 画像を混ぜるとフリーズ

Issue #124 resolved
takuto_cw created an issue

次のβを作成するとのことなので、その前に未解決バグを放流します。自分では間に合わないそうにないので、余裕がありましたら手伝っていただけないでしょうか…?

WinXP SP3 + cardwirthpy_20140305b で確認いたしました。

bmp 画像しかないスキンに png 画像を混ぜると、画像が表示される場面でフリーズします。BEAST.png なら、キャラクター所持カードや荷物袋を開こうとするとフリーズ。

なお、変更前の画像をとっておきたくて「BEAST_backup.bmp」というファイル名にしてフォルダに残したままにしておいても、やはりフリーズします。こちらは CWPy 起動時に固まります。拡張子を変えて BEAST.old 等にしてしまえば平気です。

Skin.xml に 「image=".png"」などと記載があるので、そもそも混ぜることを想定していないのかも?と考えましたが……

プレイヤーにしてみると、「元の画像に戻したいから classic スキンからコピー」「後から戻せるようにファイル名を変えて元画像を残しておく」というのは十分ありうる行動だと思ったので、issue 立てておきました。

どうぞよろしくお願いします。

Comments (10)

  1. k4nagatsuki repo owner

    これは表示できるようにすると仕様の変更になるので、そうする場合は仕様から考える必要があると思います。

    ただ、フリーズは妥当な挙動ではありません。単に表示できないのが妥当なはずです。少し調べてみます。

  2. k4nagatsuki repo owner

    pull request #183

    リソースのファイル名から標準サイズを取る処理があるのですが、その処理の中で未知のファイル名のリソースがあるとエラーになっていました。つまり余計なファイルがあるとそれだけでエラーになります。

    このままマージします。確認して問題が残っている場合はIssueを閉じずにコメントしてください。

  3. takuto_cw reporter

    ありがとうございます!

    「余計なファイルがあるとき」はフリーズしなくなったのですが、「必要なファイルがないとき」(BEAST.bmp を削除し BEAST.png を新たに入れると、「BEAST.bmp が見つかりません」とエラーが出る)は、まだフリーズしてしまいます。

    Traceback (most recent call last):
     File "E:_cwpy-fortest\cw\frame.py", line 393, in OnCARDPOCKET
      dlg = cw.dialog.cardcontrol.CardHolder(self, "CARDPOCKET")
     File "E:_cwpy-fortest\cw\dialog\cardcontrol.py", line 584, in init
      bmp = cw.cwpy.rsrc.buttons["BEAST"]
    KeyError: 'BEAST'

    フリーズでなく画像が出ないだけで済むように、変更していただくことは可能でしょうか…?

  4. k4nagatsuki repo owner

    確認ありがとうございます。これを直すにはcw.cwpy.rsrc.buttonscw.cwpy.rsrc.dialogsなどからリソースを取得する箇所全てに手を入れる必要がありそうです(辞書のget()メソッドを使うように直す必要があります)。

    ファイルがないからといってエラーで止まるのは不正なので直しますが(それか直してもらえるとありがたいのですが)、影響範囲が大きそうなので次のβリリースの後にさせてください。

  5. takuto_cw reporter

    コメントありがとうございます。

    それか直してもらえるとありがたいのですが

    そうですね、最近おまかせしてばっかりだし、辞書のget()メソッドというヒントもいただいたし、このままだとどんどんやり方を忘れていきそうなので自分でやってみます。例によって時間をとれるのが夕方になってからなので、気長にお待ちください。

  6. k4nagatsuki repo owner

    押し付けてしまってすいません。

    get()は辞書内にキーがなかった場合は呼び出し時に指定した別のものを返すというメソッドなのですが、空の画像を返すべきかNoneを返すべきかは状況によって異なると思います。

    リソースの辞書には次のものがあります。

    • cw.cwpy.rsrc.buttons
    • cw.cwpy.rsrc.cardbgs
    • cw.cwpy.rsrc.dialogs
    • cw.cwpy.rsrc.debugs
    • cw.cwpy.rsrc.statuses
    • cw.cwpy.rsrc.stones
    • cw.cwpy.rsrc.wxstones

    これらはcw.setting.Resourceのコンストラクタで定義されています。

    よろしくお願いします。

  7. takuto_cw reporter

    ああっと、怒っているように見えたならごめんなさい。押し付けだなんて思いません。

    「時間がない」を言い訳にしていたら、ここ1ヶ月以上まともにコードに触れていなくて。リハビリ始めるなら今だぞと言い聞かせておかないと、またズルズルと人任せになりそうだったものですから。しゃきっとせい自分。

    詳しい解説までつけていただいて、ありがとうございます。テストプレイが終わったら作業に入ります。

  8. k4nagatsuki repo owner

    そんな風には見えてませんので大丈夫です。いつも助けていただいてありがたく思っています。

    押し付けと言いつつも、やはり人に作業してもらえると嬉しいなーと思う事はこの頃多いです。明日・明後日を乗り切れば時間が取れるようになるはずですが……。「これは××がやらなきゃ」なんてルールは無いので、気が向きましたら、どんどん作業を取っていってください。

    作業が重複して無駄にならないよう、Issue等で連絡だけはしっかり取っていきましょう。

  9. k4nagatsuki repo owner

    別件に対応したpull request #802によってこの問題は解消されました。アレンジパックの新しいバージョンがPNG・BMP混じりのリソースを使用していたためです。現状ではPNG→BMP→GIF……といった順に対応している拡張子のファイルを全て探しに行きます。

    問題がなくなってしまったので、このIssueはクローズします。しっかり連絡を……といいつつ気付かず黙って対応する形になってしまい申し訳ありません。

  10. Log in to comment