Pyエンジン側機能追加案:カード名でクーポン分岐が機能する

Issue #541 new
Num_400 created an issue

課題名の通りです。かつて1.28がカード名でキーコードを発火したように
クーポン分岐もカード名で選択させることは可能でしょうか。

このような課題作成を考えた背景は、Pyでドラゴンキラーっぽい武器を作ろうとしてた時です。
@効果対象クーポンで選択して、その敵がドラゴンや竜クーポンを持っていれば威力倍増、みたいなものを作ろうと考えたのですが、そもそも過去の作品で敵キャラに種族クーポンが付いているとは限りません。どちらかといえば少ないでしょう。

しかしカード名であればカバーできる範囲が大幅に広がります。
ドラゴンキラーならリザードマンもバッサリできるはず。
それならクーポンよりカード名で判別出来た方が確実だと考えました。

Comments (9)

  1. Num_400 reporter

    追記ですが、この課題名はWSN案ではなく、エンジン側の機能追加案としています。
    理由は(_隠蔽)や(@システム)のようなカード名判別用の特殊クーポンを作って
    今はPy環境でのみ機能する、という仕組みなら、WSN形式にする必要はないだろうという考えからこの題名にしました。

  2. k4nagatsuki repo owner

    ご提案ありがとうございます。

    面白いアイデアだと思いますし、使用時イベント等で有用だと思います。が、これはシナリオの仕様として導入するべきで、エンジンの機能として全てのクーポン分岐をそのように動かす事には問題があります。

    まず前提として、この機能は誤判定を避けられません。たとえば「ドラゴン」や「ウルフ」という通り名を持つキャラクターが存在していると(そのようなキャラクターは漫画などに実際に登場しています)、竜や狼を相手にしようとした時に誤って選択されています。

    ここまでは妥協すべき問題として受け入れるしかありませんが、全てのクーポン分岐でこの機能が動作するようにすると、過去に作られたものも含む全てのシナリオ・全てのプレイヤーが誤判定問題に直面するという恐るべき事態に発展してしまいます。

    そのような事態は避けなければなりません。また、そのような問題がある以上、クーポン分岐が従来通りに動く方法も残すべきです。

    ですからこの機能はWSN仕様の一部として取り込み、クーポン分岐の新しいオプションがONになっている時に限り動くようにするべきです。

  3. Num_400 reporter

    返信ありがとうございます。
    ただ誤解されている部分があるようですので、私の意見をもう少し書きます。  

    私も過去のクーポン分岐全てでカード名前を判別するのは困ります。
    もう少し詳細に実装例を書くと「Num400」というカード名を判定する際は「_N:Num400」と書くこと。
    つまり過去の時限クーポンのように「_N:」みたいな前置きがある場合のみカード名がクーポン分岐対象になるという仕様です。
    この案だと1.50の店シナ作者でもPy向けの機能も付けられるのと、クーポン検索で実装場所が特定し易いという利点があります。

    私はこの仕様で過去のクーポン分岐の99%はカード名を判定しないと勝手に思っていますが、実装側としてはそうは問屋が卸さない代物だったりするのでしょうか?

  4. k4nagatsuki repo owner

    そういうアイデアでしたか。それならば、で始まる新しいシステムクーポンを定義すれば、既存のシナリオでの事故はほとんど0%になると思います

    とはいえ依然として問題はあります。シナリオ作者の無知や誤解によって、CWPyでは動くが1.50では動かない、というようなイベントを簡単に作れてしまう事です。cwxeditorで警告を出しているPNGイメージの格納による事故ですら何件も起きているくらいですから、これはもう絶対に作られてしまいます。

    WSN仕様の中で、そのまま過去のWSNバージョンや1.50形式も対象にできそうな機能が何件かあるものの、実際には使えるようにしていない事にはそのような理由があります。シナリオは安全に作れるべきですし、シナリオ作者に過去のいくつものエンジンでテストさせるような事をするべきではありません(今は安全だという意味ではなく、その方向を目指すべきだという意味です)。

    参照素材の持ち帰りなど、この原則に反する機能もあるのですが、正直に言ってしまうとあれは軽率な行いで、本来はWSN仕様としてやるべきでした。とはいえ積んでしまったものを外すわけにもいきません。慎重になっている理由はその辺りにもあります。

  5. Num_400 reporter

    確かにシステムクーポンがPy専用だと言うことを告知しても、それが正しく伝わらない可能性は高いですね。良いご指摘ありがとうございます。

    あとissueを立ててなんですが、私自身はこの機能をすぐに必要としていませんので、細かい仕様は他の賛同者が二、三人現れてからでいい気がしています。
    ご相談に乗って頂きありがとうございました。

  6. k4nagatsuki repo owner

    中身を見せていただきましたが、文字列内の検索がアクロバティックですね。こういうやり方があるとは思いも寄りませんでした。

    無理なく実現するには検索関数が必要そうなので、issue #791を立てました。

  7. k4nagatsuki repo owner

    完全に話がそれてしまいますが、この処理はステップを使えば簡単に対応する名前を増やせそうです。ステップに探索対象の名前を詰める事で、順繰りに判定に使う事ができます。

    start "名前探索"
        brvar 'FINDGOSSIP("_きなこ名前判定:" ~ STEPTEXT("\Local\ドラゴン名")) > 0'
        if true
            gostart "倍打"
        elif false
            brstept "\Local\ドラゴン名", 2
            sif false
            stepup "\Local\ドラゴン名"
            gostart "名前探索"
        fi
    

    ステップの定義はこんな感じです。

    <?xml version="1.0"?>
    <FlagsAndSteps rootId="" path="\Local\">
    <Steps>
    <Step default="0" initialize="EventExit">
    <Name>\Local\ドラゴン名</Name>
    <Value>*ドラゴン*</Value>
    <Value>*ドラゴン*</Value>
    <Value>*[龍竜]*</Value>
    </Step>
    </Steps>
    </FlagsAndSteps>
    
  8. tachi gigas

    対応ありがとうございました。FIND関数を導入しました。シナリオの場所は変更ありません。コモン変数は省略できそうですが、試作なので見やすさ重視です。

  9. Log in to comment