バグ:シナリオ内でセーブした後にゲームを終了し再開すると、宿に帰還した際に保存されているはずのスキンの状態変数が初期化されている。

Issue #923 resolved
加藤天 created an issue

CardWirthPy、日頃より楽しく使わせて頂いており感謝申し上げます。

この度、おそらくバグと思われる挙動を発見したのでご報告させていただきます。

[症状]
スキンの状態変数が初期化しない設定になっているにもかかわらず、ゲームの再開によって初期化される。

(文面上だといまいち分かりにくいかもしれませんが、再現方法に沿って一度試していただけると症状が理解できるかと存じます。)

[詳細]
SkinVariables.xmlでスキンの状態変数が確認できるはずですが、セーブ終了後にxmlを確認すると保存されている状態変数に不具合はありません。
アプリケーションを終了した後に、シナリオを再開し、宿に帰還すると初期化されるようです。

[再現方法]
0.初期化しない設定(initialize="None")の状態変数のあるスキンを使用する。(添付しました。)

1.どのような方法でもよいのでスキンの状態変数を初期値以外にする。
 (コンテントで変更しても--debug-skinを利用してデバッガから直接変更してもお好みで。)

2.適当なシナリオの張り紙を選択する。
 (02_Yado2.xmlの画面でセーブを行い、アプリケーションを終了、再度ゲームを起動した場合は上記の不具合は再現しません。)

3.シナリオ内で右クリック、キャンプ画面を開き、セーブを行う。
 (ここで冒険の中断を選択し、01_Yado.xmlの画面でセーブを行った場合は上記の不具合は再現しません。)

4.アプリケーションを終了する。

5.タイトルから宿を選択する、もしくは、"起動時の動作:最後に設定した拠点を開く"で自動的にゲームが再開される。

6.コンテントでシナリオを終了、あるいはF9による緊急避難で02_Yado2.xmlの画面に戻る。
 (右クリックでキャンプ画面を開き、冒険の中断を選択して01_Yado.xmlの画面からでもスキンの状態変数が確認できます。)

7.状態変数が初期化されているのを確認する。

[再現率など]
・こちらがテストした限りでは再現率100%です。
・現時点での最新版である、cardwirthpy_20200307_x64.zipにて再現を確認。
・それ以前のテスト版でも再現自体は確認しておりましたが、明確にいつのテスト版からまでは判りません。

[その他]
・わかりにくい部分がありましたらご質問ください。

・初投稿につき、至らぬ点ありましたらご容赦ください。

Comments (4)

  1. k4nagatsuki repo owner

    pull request #1

    ご報告ありがとうございます。詳細に書いていただいて助かりました。

    調べたところ、宿のロード中にシナリオ内のパーティが自動的に開かれる際に、普通にシナリオを開始したり冒険を再開したりした時と同じようにスキン状態変数のセーブが発生していました。それにより、

    1. シナリオ内のパーティを直接ロードしているのでスキン状態変数値はロードされず、内部的に初期値になる
    2. 初期値の状態変数がセーブされる(これがバグ)
    3. 次にシナリオから出た時に2.でセーブされた状態変数が読み込まれる

    といった事が起きていました。


    これではスキンの状態変数が使い物にならないので、バージョン4.3をリリースした方がよさそうです。来月頭のリリースを予定します。

  2. 加藤天 reporter

    調査と対応の程、ありがとうございます。

    cardwirthpy_20200321_x64.zipにて再現手順を実行、該当箇所の改善を確認致しました。

  3. Log in to comment