WSN追加案: 効果対象と使用者に一時クーポンをつける

Issue #303 resolved
k4nagatsuki repo owner created an issue

カードの使用中、効果対象と使用者に一時クーポンをつける事を検討します。

それらのクーポンは使用時イベントの開始と共に発生し、フィールドキーコードイベント・カード毎のキーコードイベントを経て、実際に効果が発生する直前に消滅する事になります。

文言は@効果対象 @使用者辺りでしょうか。これは他形式で異なる文言が使用されていたとしても、形式変換時に変換する事が可能なので、衝突の危険無く決定できます(ただしクーポンである事が必要)。

@効果対象については、イベント中につけたり消したりする事で、実際にカード効果となる対象を柔軟に差し替えるような事もしたいところです。例えば過去のシナリオには、ボスを庇うキャストや、敵がPCを身代わりにして攻撃を受けさせたりするイベントが存在しますが、そうしたイベントで擬似的にではなく本当にカード効果を肩代わりさせる事ができるようになります。他にも様々な応用があるはずです。

Comments (55)

  1. k4nagatsuki reporter

    @効果対象は(この文言にするかはさておき)、そのラウンドで新規に現れたキャラクターは対象にできないようにした方がいいかもしれません。

    CWでは新しく出現したキャラクターは全体攻撃などの対象になりません。それを前提にしたシナリオもいくらかあったように記憶しているので、使用時イベントなどで@効果対象をつける事ができてしまうと不具合発生の原因になります。

  2. crowstar

    @効果対象はカード効果を受けるキャラ、@使用者はカード効果の威力決定キャラということでよろしいでしょうか?
    もしそうであれば、@使用者が複数となった場合どういった挙動を取るか考えておいた方が良いかもしれません。
    個人的には合体技のように各キャラで威力を出してそれを合算するという方法が良さそうだと思います。

    新しく現れたキャラは対象とならないように

    それはそうしておいた方が良いかもしれませんね。

  3. k4nagatsuki reporter

    @使用者の付け替えは考えていなかったのですが、できた方が面白そうではありますね。どんな問題が発生しうるかはよく考えなくてはいけません。

    ただ、複数設定できるのはちょっと怖い気がします。まずは誰かに付け替えたら元の使用者からは剥奪されるようにした方がいい気がします。

  4. 暗黒 騎士

    イメージがよく掴めていないのですが、

    イベント中につけたり消したりする事

    というのは通常のクーポンGet/Lostコンテントで操作するのではなく、 結果的に@クーポンを付け変えられる新コンテントを作るみたいな感じなのでしょうか?

  5. k4nagatsuki reporter

    いえ、普通の称号と同じように操作できたほうがいいだろうと考えています。

    CWの称号は、元々システムデータの格納に流用されてきました。遺伝子やレベル上限などです。1.28で追加された隠蔽クーポン:Rもその例に該当します。このようになっている理由には、データ構造を変更せずにデータを増やせるという開発側も都合があると思いますが、操作のために新しいイベントコンテントを増やさずに済むという点もあるのではないかと思っています。ただひとつの、そこまで使用頻度の高くない操作のために新しいイベントコンテントを設けるのは、すでに存在しているコンテントの数から考えてもあまりいい考えではありません。

    普通で始まるシステムクーポンは操作できませんが、特定の称号を特定の場面に限って操作できるようにするのは簡単です。


    ところで新規に出現したキャラクターには@効果対象をつけられないようにした方がいいという考えは、問題がありそうです。例えばフィールド上の全員を対象に処理したい時、@効果対象をつけてもつかないキャラクターがいると、イベントの作り方次第でいつまでも処理が終わらない事になります。しかもその問題はレアケースでしか発生しないため発覚しづらいものとなるはずです。新規登場者にも@効果対象はつけられるが実際に効果対象にはならない、という風にした方がおそらくよいでしょう。


    @使用者の付け替えもちょっと難しい所があります。シナリオ作者はたまに任意のPCの動きを止める事があります。しかしカード使用時イベントで@使用者が変化すると、シナリオ作者から見て絶対に動かないはずのPCが動いてしまう事態が発生します。これはシナリオのバグの元になりそうです。

  6. Liar_cw NA

    @効果対象について気になったことがあります。 発言するまでもない事だとは思うのですが、 カード使用以前に@効果対象等が付けられていた場合は誤作動を防ぐために、 それ等は全て初期化(消去)された方が良いと思います。 (初期化後に一時クーポン配布)


    @crowstarさんの@使用者の付け替え案については、 名前を@身体適性参照@精神適性参照等として 名前通りに値を参照するだけのものに限定して考えるのはどうでしょうか。

    複数存在する場合はその合計値もしくは平均値、または最大値を出すなど。 これならばカード使用者を変えることなく目的を達成できるものと思います。

  7. k4nagatsuki reporter

    これらのクーポンはイベント中だけ出現するべきですね。使用前よりも、イベントが終了し、効果対象が特定された瞬間に一掃されるべきです。

    個人的には、@使用者の変更は仕様決めの難しさのわりに使い出があまりなさそうな気がしているのですが、どうなんでしょう。対象の変更は、例えば特定の特徴を持った敵だけを攻撃するとか特定のアイテムを使ったPCだけにターゲッティングが集中するとか、色々応用を思いつくのですが。

  8. Num_400

    @効果対象は色々できそうですねぇ
    カード対象をシナリオ側で任意で決められるようなので、
    完全なPC VS PC が実現できますかね?

    @使用者で実現できそうな事はちょっと考え付きませんでした。

  9. Liar_cw NA

    これらのクーポンはイベント中だけ出現するべきですね。使用前よりも、イベントが終了し、効果対象が特定された瞬間に一掃されるべきです。

    故意的な例ではありますが、連れ込みキャストにたまにある@Gクーポン設定のように、 エディター側でキャストカードそのものにクーポンを設定できてしまう問題があります。 @レベル上限などの設定は個性を出すために利用することもできますが……。 (この場合は、@Gを複数持ったキャストが誕生してしまう。デバッグモードでも増やせます)

    こういった例外への対策をと思いまして、発言させていただきました。


    @使用者そのものの変更は思いつくとしたら、

    • 使用者を誰か分からなくする。
    • ターン制RPGによくある複数回行動(の演出)。
    • キャスト所有カードの上限数の無視。
    • 麻痺や呪縛など行動不能なキャストを無理矢理動かす。

    ……辺りでしょうか?  (こういうのは また別の機能として考えたほうがよさそうですね。ややこしい。)

    しかし付け替え可能にした場合、 @使用者が外されて所有者が誰も居ない場合は どうするかなどを考える必要もありそうですね。

  10. crowstar

    うーん、@使用者を変更・追加する理由で個人的に思いつくのは合体技やカードの適正判定者の変更、
    あとは吸収攻撃で回復する対象を変更するくらいでしょうか?
    いまいち使い道がないのであれば@効果対象だけを実装しても良いかもしれません。

  11. k4nagatsuki reporter

    一応、表題の機能を考え出して具体化しはじめた私の中の経緯について説明しておきます。

    元々は、色々なイベントの中で、そのイベントの対象となっているキャラクターを特定したいという発想でした。使用時イベントにおけるカードの使用者と対象などを特定する必要があるとなると、選択メンバの仕組みでは明らかに足りません。これまでは、使用時イベント中で本来のカード対象に効果コンテントで何かする、などという事はできませんでした。称号選択分岐でフィールド全体を選べるようになった今、それをできるようにするには、該当者に一時クーポンがつくようにすれば充分です。

    そこでカード効果の対象者に一時クーポンをつけるとなると、今度はこれを変更できたら便利そうだと思えてきました。そこの辺りまで具体的に踏み込んで提案したのは、ここまでしても案外仕様の衝突の危険は少ないのではないかと思えたからです(確信しているわけではないですが)。一時クーポンの文言は一対一で変換できますし、たとえ他仕様が一時クーポン以外の方法を選んだとしても、それを称号関係のイベントコンテントに変換する事だってできます。後はそのクーポンが着脱されるタイミングくらいですが、カード使用時イベントであれば、イベントの開始直前と終了直後以外には考えられません(イベント終了後にはカードの実際の効果対象者の反転描画が始まります)。

    こうした考えで来ているので、使用者の方を変更するというのは完全に想像の外でした。こちらの方は、おそらく効果対象よりもずっと衝突問題が大きいように思えますし、利用範囲も比較的小さそうですし、:Rのように、他シナリオに持ち出した時の不具合の原因にもなりそうです。リスクを負ってまで手を出したくないなぁというのが正直な所です。

    使用者にせよ効果対象にせよ、最初はイベント中の称号出現だけの実装から始めるのがよいと思います。付け替えは、その次の段階になるでしょう。


    故意的な例ではありますが、連れ込みキャストにたまにある@Gクーポン設定のように、 エディター側でキャストカードそのものに@クーポンを設定できてしまう問題があります。

    そういえばそうですね。新しい称号についてはイベント開始前に一掃するなどすればいいとして、遺伝子やら隠蔽クーポンやらはどうなるか試して、対応が必要ならしておく必要がありそうです。

  12. Liar_cw NA

    >@k4nagatsukiさん、@crowstarさん

    @使用者の付け替えについて いくつか提案しておいてなんですが、 今のところ希望やら想像は出されていますが 具体的な処理方法ほか利点等は出されていません。 (言い方は悪いですが)現状 無計画と言えますし、 まずは基礎となる部分から実装されることに賛成します。

    中立的な意見のつもりで使い道を考えてみましたが、 個人的には複雑な機能になる(機能を持たせたい)場合は また別のものとして考えた方が良いと思います。 (無理に一時クーポンに拘る必要があるとは思えない)

  13. k4nagatsuki reporter

    適当な時期を見計らって以下のシステムクーポンを実装して、使用例なども作ってみようかと思います。

    @使用者

    イベントの発火要因となった行動をしたキャラクターにイベント開始時に付与。付け替えは不可。イベント終了時に剥奪。

    @効果対象

    カードの効果対象に付与。出現タイミングはカードの使用時で、剥奪タイミングは実際に効果が適用された時。付け替え可。付け替えた場合、カード対象の効果(色反転)に反映される。使用時イベント・フィールドキーコードイベント中に付け替えた場合は、色反転するカード=@効果対象の持ち主、となる。

    上の方に書いた、そのラウンドに出現したキャラクターをどうするかを考える必要があるが、今でもクーポン所持分岐やランダム選択などでそのラウンド中に出現したキャラクターを対象にあれこれする事はできてしまうので、問題として取り上げるのは今更かもしれない。なのでさしあたってその点は考えずに実装する。この問題はいっそ互換モードなどで対応するべきか?

    @イベント対象

    新提案になるが、あると便利そうなシステムクーポン。死亡イベントにおいての死亡者・キーコードイベントにおいてのイベント所有キャストに付与し、それらのイベント終了後に剥奪。付け替え不可。

    このシステムクーポンは、使用時イベントにキーコード発火条件をつけてカウンター処理とか、エリアやバトルでPCに対してキーコードイベントを指定して発火、みたいな新機能と組み合わせる事で威力を発揮する事を見込んでいます。


    仕様衝突の問題について。もし他の仕様で類似の機能が実装され、微妙に付与・剥奪タイミングが異なるなどの事になった場合、それらの機能を全て並立させるのが唯一の仕様マージ手段となるかもしれません。さらにクーポン名が被るなどして変換時に文言を換える必要が生じることなども考えられます。

    これは混乱を招くので避けたい事態ですが、これらのシステムクーポンは非常に広い応用範囲が考えられるので、そのリスクを負っても実装した方がいいんじゃないかなぁ、と私は考えています。

    実装してみてからそうでもなさそうだとなった時には、改めて取りやめにします。

  14. k4nagatsuki reporter

    簡単な機能テストシナリオです。

    攻撃から味方をかばうイベント・死亡時に誰かを身代わりにするイベント・攻撃や魔法を反射するイベント・同じ対象が意識不明になるまで攻撃され続けるイベントを入れています。

  15. Iraka.T

    「叩くと絶対死ぬマン」に回復効果とダメージ(または吸収)効果を持つ攻撃キーコードをぶつけると、無限ループします。(回復効果でダメージ調整を行っているカードは多数存在します)

    これはシナリオのバグと言えるでしょうが、ユーザーが陥りやすい罠だと思います。

    また、この無限ループ中にF9を押すと、ループは停止しますがシナリオが終了しません。再度F9を押しても効かなくなります。行動の選択は行なえますが、戦闘を続行することもできません。

  16. k4nagatsuki reporter

    ありがとうございます。

    攻撃キーコードがついてるけどダメージの無いカードは考えましたが、そういえばとどめを刺さないカードもありましたね。今回はフェイントと攪乱を通すだけにしてしまいましたが、これはちゃんとやるなら回数制限などの工夫をするべきイベントです。たぶん作っている人は途中で気づくでしょう(たぶん……)。

    F9の方はpull request #1568で修正しました。

  17. 暗黒 騎士

    サンプルの名前が…(笑)

    これが実装されるとなるとWsn2は格段に出来ることが広がりますね。 ついでですが#279は使用時イベントで「@効果対象」を剥奪すればいいので閉じてもいいのではないでしょうか。自動選択への影響があるので全く同一というわけではないですが、 仕様衝突のリスクと天秤にかけてこれと同時実装するほどメリットはなくなったように思えます。

  18. k4nagatsuki reporter

    たしかにできるのですが、issue #279の完全な解決となるとそうはいきません。

    • 対象選択後に自分自身にも矢印が表示されてしまう。
    • 自分以外全員回復のカードを、自分だけが負傷している状況で使ってしまうような事が起こる

    ただ、これらに関してはまったく別の問題の解決が必要ですし(動的に対象が変わるカードと行動選択の兼ね合いをどうするか)、ほとんど実現できるようになったので無理にやるまでもなくなった、というのはその通りですね。

  19. tachi gigas

    恐れ入ります。

    その使用時イベントにおいての「@効果対象」がクーポン削除の対象外になっている(content.pyの2394行あたり)のは何らかの誤動作の可能性があるのでしょうか。ちょっと自分では思いつきませんが、お暇がよろしければご教示下さい。

    ちなみに使用時イベントでの「@効果対象」の編集が実現すれば、当方の悲願であったレベル3フレアが実現可能になります。

  20. k4nagatsuki reporter

    それは逆で、システムクーポンの中で@効果対象だけが追加・削除が可能になっています。そのためのコードです。

    もしそれが正しく動いていないとしたら別の問題がある可能性があります。例えばシナリオのWSNバージョンが2以降になっていない時は@効果対象も操作する事はできません。

  21. Iraka.T
    start "使用時イベント"
        brcoupon M, "@効果対象"
        if true
            losecoupon M, "@効果対象"
            brcoupon M, "@効果対象"
            if true
                se "システム・エラー.wav", 0, 0, 100, 1
            elif false
                se "システム・シグナル.wav", 0, 0, 100, 1
            fi
        elif false
            se "システム・エラー.wav", 0, 0, 100, 1
            wait 2
            se "システム・エラー.wav", 0, 0, 100, 1
        fi
    

    このような使用時イベントを持つ使用者を対象とするカードを作ってみたのですが、WSN2シナリオではエラー音が1回(@効果対象の削除に失敗)、それ以外のシナリオではエラー音が2回(@効果対象が存在しない)という結果になります。

    この挙動は意図されたものでしょうか?(@効果対象の削除に失敗しているのは、おそらくバグだと思いますが)

    WSN2シナリオ以外で使用時イベントでこれらのクーポンを利用できないのは、問題ではないかと思います。

  22. k4nagatsuki reporter

    はい、バグですね。すいません。いつの間にか使用時イベント中には機能しなくなっていました。

    pull request #1573で修正しました。

  23. tachi gigas

    舌足らずで大変失礼しました。上記の申し出はIraka.T様のご指摘と重複するものです。申し訳ございません。

    というわけで、申し上げたサンプルスキルが完成したので添付します。スキルバランス等を熟考する必要が出てきますね…。

  24. Iraka.T

    WSN2シナリオにおいて使用時イベントでの@効果対象付け替えが正常に働くことを確認しました。

    ただし、WSN2シナリオであれば、クラシックシナリオで獲得したカードでも@使用者@効果対象を利用できるようになっています。

    逆に、WSN2シナリオで獲得したカードであっても、クラシックシナリオやWSN1シナリオでは@使用者@効果対象を利用できません。

    実験段階の仕様ではありますが、これは非常にまずいと思います。バランスの調整も困難ですし、仕様の問題点についての検証できません。

  25. k4nagatsuki reporter

    カードデータ自体にデータバージョンを持たせなければなりませんが、これはエディタの方の修正が必要ですね。

    修正はできますが、ちょっと今は無理です。しばらくお待ちください。

  26. k4nagatsuki reporter

    pull request #1575で(他の作業の間に挟まってますが)修正しました。お試しください。

  27. Iraka.T

    修正対応ありがとうございます。シナリオ外に持ち出したカードも正常に使用時イベントが働きました。

  28. k4nagatsuki reporter

    問題を一つ。

    PCが使用するカードにキーコード発火条件をつける機能などが増えた時、魔法の反射などのイベントで問題が生じるかもしれません。というのは、PC側に反射された効果によって敵のキーコードイベントが発火し、その敵が魔法を反射した場合にPC側でまた反射が起き……という無限ループパターンが発生してしまう可能性があるからです(ちなみに@使用者を反射対象に選んだ場合は色々複雑な経過をたどって最終的に@使用者が効果を受けます)。

    これは、私が上げたデモシナリオで起きうる無限ループパターンよりは現実的な問題になりえます。カードやシナリオの作者が注意すれば回避できますが、その注意を徹底する事は不可能と思われます。

    対処方法を色々考えたのですが、その中で一番ましそうなのは以下のようなものです。

    • @効果対象を剥奪されたキャラクターは、そのイベントの間だけ@効果対象外というクーポンがつく
    • @効果対象外を持つキャラクターは@効果対象を付与しようとしても失敗する

    将来的には@効果対象外をシナリオ側から剥奪できるようにしてもいいかもしれませんが、とりあえず剥奪できないようにした方が安全でしょう。

    他にいい案を思いついた方はお教えください。

  29. k4nagatsuki reporter

    無限ループの例です。

    これは意図的ですが、たぶん実際にはシナリオ側のイベントと持ち込んだカード側のイベントの両方が絡んだ微妙な状況で発生するでしょう。

  30. Iraka.T

    @効果対象を一度でも剥奪すると、一連のイベントの中では再度付与することができなくなるということでしょうか。

    代案は思い浮かばないのですが、現状、@効果対象を一度も剥奪せずに全員に同じ処理をする(対象とするかどうかを検査する)ことができないはずなので、この機能の汎用性を著しく損なうと思います。

    フィールド全体を対象とした評価選択や、クーポン所持者全員に処理を行うスタートやパッケージの呼び出しができれば、概ね解決できるでしょうか。

  31. 暗黒 騎士

    例については、キーコードイベントで目標を反らしているのに、反らした先のキーコードイベントも発火させているのが問題に思えます。エネミーカードに対する事前キーコード発火イベント時点で「そのカードに対する事前キーコード発火フェーズ」は終了しているのですから、その後は死亡時イベント・キーコード成否(○×)イベント以外を二度も見る必要はないように思います。(キーコード発火イベントによる反射はシナリオ側の操作なので反射で違うエネミーのキーコードを貫通してもシナリオ作者が仕様を把握していれば問題ないですし)

    ただ「PCが使用するカードにキーコード発火条件をつける」が実装された場合はキーコード発火無し反射には問題があるので両陣営で見る必要があると思います。(PCが使用カード発火起点で敵の魔法をリフレクした場合、キーコード発火するようにし、再リフレクについては防げない)

  32. 暗黒 騎士

    すいません、よく考えると@効果対象外で問題ないですね。

    剥奪された時というか、キーコードイベントが終了した時にそのイベントが終了するまで@効果発動済みが付けばいいでしょうか。

  33. k4nagatsuki reporter

    代案は思い浮かばないのですが、現状、@効果対象を一度も剥奪せずに全員に同じ処理をする(対象とするかどうかを検査する)ことができないはずなので、この機能の汎用性を著しく損なうと思います。

    これは確かに問題ですね……他の方法でも不可能ではないのでは、と思って考えてみましたが、思いつかない程度には難しいようです。

    となると、@akkwさんの仰るようにキーコードイベント発火か終了時に@効果適用済み(「発動」より「適用」の方がいいと思った)のような称号をつけて、その称号を持つ者には@効果対象がつけられなくなる(つまりシステム側でつけられたものを剥奪すると二度とつけられない)、などがよさそうでしょうか。

    夜中に考えているので何か穴がありそうです。もうしばらく考えてみます。

  34. k4nagatsuki reporter

    穴がありました。いわゆる「かばう」イベントの時、「かばう人」が「かばわれる人」より先に全体攻撃を受けると、かばった時のダメージが消滅してしまいます。

    最初の案の変形として、使用時イベントやエリアイベントの時を避けて、本当に各ターゲットに対して効果が表れ始めた時から@効果対象外が発生するようになる、というのはどうでしょう。

  35. k4nagatsuki reporter

    まだ妙案は出ていなさそうですので、とりあえず実際に効果が現れ始めた段階(ターゲットの色反転が生じる段階)で@効果対象外が発生する方法を実装してみます。

    もっといい方法が見つかったらそちらに替えます。

  36. k4nagatsuki reporter

    pull request #1596

    実装しました。この方法はターゲットが移された時に移された先で効果が消滅してしまう問題がありますが、面倒な状況で無限ループが発生するよりはおそらくましです。

  37. k4nagatsuki reporter

    pull request #1653

    試してみたら案の定#428の効果コンテントから動かした時に正しく機能しなかったので修正。

  38. tachi gigas

    恐れ入ります。

    添付のLv3フレア又は波紋を他のシナリオに持ち出して敵に使用した時、 エラーを吐いてフリーズする事を確認しました。下記ログはLv3フレアのものです。

    Version : 1.1 / 2015-10-10 01:45:31
    DateTime: 2016-12-30 14:06:20
    Traceback (most recent call last):
      File "******\cwpy\cw\thread.py", line 704, in run
        self._run()
      File "******\cwpy\cw\thread.py", line 734, in _run
        self.main_loop(True)
      File "******\cwpy\cw\thread.py", line 743, in main_loop
        self.eventhandler.run()   # 繧、繝吶Φ繝医ワ繝ウ繝峨Λ
      File "******\cwpy\cw\eventhandler.py", line 100, in run
        self.rclick_event()
      File "******\cwpy\cw\eventhandler.py", line 309, in rclick_event
        self.background_event()
      File "******\cwpy\cw\eventhandler.py", line 364, in background_event
        cw.cwpy.call_modaldlg("BATTLECOMMAND")
      File "******\cwpy\cw\thread.py", line 1426, in call_modaldlg
        self.main_loop(False)
      File "******\cwpy\cw\thread.py", line 743, in main_loop
        self.eventhandler.run()   # 繧、繝吶Φ繝医ワ繝ウ繝峨Λ
      File "******\cwpy\cw\eventhandler.py", line 113, in run
        self.executing_event(event)
      File "******\cwpy\cw\eventhandler.py", line 618, in executing_event
        func(*event.args, **event.kwargs)
      File "******\cwpy\cw\battle.py", line 88, in start
        self.run()
      File "******\cwpy\cw\battle.py", line 157, in run
        member.action()
      File "******\cwpy\cw\character.py", line 977, in action
        self.use_card(targets, header)
      File "******\cwpy\cw\character.py", line 903, in use_card
        cw.event.CardEvent(e, header, self, targets).start()
      File "******\cwpy\cw\event.py", line 1253, in start
        Event.start(self)
      File "******\cwpy\cw\event.py", line 736, in start
        self.run()
      File "******\cwpy\cw\event.py", line 807, in run
        self.run_exit()
      File "******\cwpy\cw\event.py", line 1266, in run_exit
        self.clear_eventcoupons()
      File "******\cwpy\cw\event.py", line 1118, in clear_eventcoupons
        self.update_targets()
      File "******\cwpy\cw\event.py", line 1140, in update_targets
        if ccard.has_coupon(u"・蜉ケ譫懷ッセ雎。"):
      File "******\cwpy\cw\util.py", line 3467, in acquire
        return f(*args, **kw)
      File "******\cwpy\cw\character.py", line 1607, in has_coupon
        return self._has_coupon(coupon)
      File "******\cwpy\cw\character.py", line 1610, in _has_coupon
        return coupon in self.coupons
    AttributeError: 'EnemyCard' object has no attribute 'coupons'
    

    EnemyCardCharacterのサブクラスですので、 ソースを見る限りはどう考えてもself.couponsは持っている様に思うのですが…? Pythonへの理解が浅いためか、手詰まりとなってしまいました。 大変お手数ですが、ご教示をお願いします。

    というか前の添付ファイルTypoがありますね。浅学失礼しました。

  39. k4nagatsuki reporter

    Pythonでは、親クラスのコンストラクタの呼び出しは、明示的に書かなければ発生しません。

    この場合はcharacter.Enemy.__init__()が呼び出されるタイミングでCharacterのコンストラクタが実行され、その中でself.couponsが作られる事になりますが、この呼び出しはオブジェクトが作られた時点ではなくEnemyCard.initialize()の実行タイミングで起きています。

    なぜEnemyCardの作成時点で初期化するのではなく別メソッドを用意しているのかというと、バトルエリアには当初からフラグがオフになっている非表示カードがあり、それら全ての初期化が走ると馬鹿にならないパフォーマンス問題が発生するからです。

    今回のバグは、その初期化が行われていない(つまりまだ表示されていない)カードも効果範囲処理の対象に入ってしまっている事が原因のようです。これは実装した私のミスです。cw.cwpy.get_mcards("unreversed")で、非表示も含めた全てのエネミーカードが取得できてしまっているのでしょう。

    この辺のカードの一覧取得関係はもっと問題がありそうな気がします。ちょっと調査して修正してみます。

  40. k4nagatsuki reporter

    pull request #1685

    たぶんこれでいいと思うのですが、レビューをお願いします。

    それにしてもこれらのスキル、アイデア豊富で凄い。

  41. tachi gigas

    対応ありがとうございました。用事で遅くなりましたが、正常な動作を確認しました。そう言えばPythonはインスタンスの初期化は任意のタイミングで行えましたね。失念しておりました。

    ゴブリンパンチの仕様は今も悩み中です。

  42. k4nagatsuki reporter

    マージしました。ありがとうございます。

    ゴブリンパンチの仕様は今も悩み中です。

    召喚獣を付与する辺りが特に悩ましいですね。付帯能力と召喚獣をうまいこと区分けして敵に召喚獣付与というものが常に機能するようにできないかな、と時々思うのですが、どうやっても現在の挙動を壊してしまいそうです。

  43. k4nagatsuki reporter

    Wsn.2の新機能ページにスクリーンショットを載せようと思っているのですが、それに@tachi_gigasさんのレベル3フレアを使用してよろしいでしょうか。見た目にとても分かりやすいサンプルだと思います。

  44. tachi gigas

    お疲れ様です。

    本心を言いますと実は店シナとして完成させるつもりで、まぁまだシナリオの構想中なのですが、正直な所α版が出て焦っている所でした。他にもやりたいことあるのに……。

    ご事情はそんな思惑とは全く別だと思うので、紹介頂くことは構いません。ありがとうございます。

  45. k4nagatsuki reporter

    お返事ありがとうございます。無理を言ってすみません。

    さしあたりサンプルとしてスクリーンショットを出させていただくとしても、店シナリオの完成などで適切なものではなくなる事も考えられますね。たかだかスクリーンショット1枚ですので、別のものに差し替える事はいつでもできます。気が変わったら仰ってください。別のサンプルをすぐ用意できるならそっちを使った方がいいよ、と仰っていただいてもかまわないです。

    あと、今までの傾向からすると、おそらくα版の期間はそこそこ長くなるはずです。数ヶ月はかかるでしょう。急がなくても大丈夫だと思います。

  46. tachi gigas

    どういたしまして。

    ほぼオフトピで恐縮ですが、取り急ぎスキル画像と敵画像を埋めたバージョンを下に公開しました。スクリーンショットは全てPublic Domainの画像で埋まるはずです。

    https://bitbucket.org/tachi_gigas/cardwirthpy-reboot-lessor/downloads/blue_magic_wsn2.wsn

    はて、スキル画像の上5ピクセルを空ける常識(?)はPyでは通用しないですね。でも癖でやってますし、分けるのも面倒ですが。

  47. k4nagatsuki reporter

    お手数をおかけしました。ありがとうございます。スクリーンショットを差し替えました。

    いっそのこと、Wsn.1の時と同じように、機能の実例としてこのシナリオへリンクを張れるとさらに嬉しいのですが、いかがでしょう。もちろん、お断りいただいて構いません。

    高解像度化対応もされていますが、繊細なイメージが多いので効果が劇的ですね。実に美しいです。

    はて、スキル画像の上5ピクセルを空ける常識(?)はPyでは通用しないですね。

    フォントを変えてしまうとそうなりますね。デフォルトで使用する割合を考えると、意味がなくなるわけでもないと思いますが。

  48. 暗黒 騎士

    そういえば、image.py515行前後のif wx.VERSION[0] <= 3:で効果系カード名のサイズを1大きくする処理が加わっており、 これによってメニューカード名より効果系カード名が大きくなっていますね。基本的に長月さんは文字が大きい方が好みなようなので自分の方で直すようにして報告はしていませんでしたが、サイズが変更できるフォントで反映されるサイズが一定していないというのはおかしいので、カーソルのようにWXの仕様変更に合わせてその後直ってしまった可能性も…?

  49. k4nagatsuki reporter

    うわ……どうして気づかなかったんだろう?

    wxPythonのピクセルサイズ指定によるフォント生成にはおかしなところがあって、wxPython 2系だと3系より1ピクセル小さな文字になってしまいます。かなり前に、それに対処するためのコードをあちこちに入れたのですが、条件式のミスで誤爆してしまっています。もちろん正解はif wx.VERSION[0] < 3:です。wxではなく私のミスです。申し訳ない。

    pull request #1713で修正しました。

  50. tachi gigas

    恐れ入ります。紹介して頂く分には未完成でよければ構わないと思います。しかし最低でも、これから使用する素材次第ですが、シナリオ自体のライセンスを考える必要がありますが。いずれにせよ時間をください。

  51. k4nagatsuki reporter

    ありがとうございます。何度もご迷惑をおかけして申し訳ありません。

    急ぐような話ではないので、ゆっくり決めていただければと思います。

  52. Log in to comment