戦闘中に敵に能力変化がかけた後に中断再戦すると能力変化が引き継がれる
Issue #546
resolved
恐れ入ります。
タイトル通りの問題を確認しました。サンプルシナリオを添付しましたので、再現が確認できると思います。
調べてみたところ、エネミーカードの初期化(cw\sprite\card.py
の991行目)でも能力変化が引き継がれた状態でして、
cw\character.py
のset_enhance_act
等の処理にてエレメントにself.data.edit
で値を書き込んでいるのが原因と分かりました。
もっと調べてみると、0.12の頃からそうなっていたようで、 もし原因を排除したとして、どのような影響が考えられるか自信がありません。 というのも、呪縛や沈黙等もほぼ同様の処理なのに引き継がれないのが、調べても分からないのです。
これ以上は自分の力量ではギブなので、内容を見て頂けませんでしょうか。よろしくお願いしますorz
CardWirthPy 2.0 Beta 3 Build: 2017-07-19 22:04:13
Comments (2)
-
repo owner -
reporter - changed status to resolved
ご回答・ご対応ありがとうございました。
そのお話は全くの初耳でした。道理でいつも通りの見当違いな解決案を出すわけですね。失礼しました。
- Log in to comment
pull request #1961
ご報告・調査ありがとうございます。
CWPyでは、処理量を節約するため、カードデータはメモリ上にキャッシングし、キャストのような変化を伴うものはコピーして使うようにしているのですが、さらにコピーとデータ量をケチるために一部のデータはコピーしない仕組になっています。たとえばイベントツリーは格納された召喚獣カードのデータを除いてコピーは不要です。
今回のバグの原因は、能力修正を示す
Enhance
要素はコピー不要と判断してしまっていた事です。これはスキルカード等では真ですが、キャストでは違います。これが今まで発見されていなかったのは意外ですが、たぶんキャストは意識不明になってから退場する事が多いので、倒れると同時に能力修正も消え去っていた、というパターンがほとんどだったのでしょう。