今回の目的
今後カードを実装する為に必要な関数、必要なリソース、必要なイベントを洗い上げる。
目的への取り組み
まず、カード効果をぱっと読んだところ、【】という効果を分かりやすくする記号があると分かった。それについて調べてみることにした。
現行のすべてのカードの効果テキストを書き写し、それらを分析する。
書き写した、エクセルは以上にリンクがある。
以上の表の、effect行をすべて、コピペし、
まず、【】内を、【】を含めてすべて教えてくれとChatGptに頼んだ。
以下の効果の列から、【】内の部分を、【】付きで抜き出してください。重複してもかまいません。(ここに、コピペした効果列を張り付けた。)
以下の【】付きの部分を抜き出しました:
【Fゾーンにいる時】
【Sゾーンにいる時】
【攻撃するとき】
【自分のターン】
【攻撃時】
【手札から場に出た時】
【相手のターン】
【ナイト・リンク】
【X:TREME MODE/攻撃時】
【Fゾーンにいるとき】
【手札から発動時】
【X:SKILL】
【ガード時】
【撤退時】
【場に出した時】
【場に出た時】
【X:TREME MODE】
【X:TREME MODE/バトル時】
【Sゾーンにある時/自分のターン】
【Sゾーンにある時】
【Sゾーンにいる時/破壊時】
【X:TREME MODE/ガード時】
【X:TREME MODE/場に出した時】
【ブランファイター】
【X:リターン】
【Xゾーンにある時】
【Xゾーンにある時/自分のターン】
【Xライジング】
【X:TREME MODE/手札】
【攻撃する時】
【破壊時】
【相手ファイター攻撃時】
【召喚時】重複してもよいとのことでしたので、リストとしてまとめました。もし特定の形式やソート順が必要でしたら、お知らせください!
これを重複するものを抜かし、【Xゾーンでオープン時】が無かったのでそれを足して、
【Sゾーンにいる時】
【攻撃するとき】
【自分のターン】
【攻撃時】
【手札から場に出た時】
【相手のターン】
【ナイト・リンク】
【X:TREME MODE/攻撃時】
【Fゾーンにいるとき】
【手札から発動時】
【X:SKILL】
【ガード時】
【撤退時】
【X:TREME MODE】
【X:TREME MODE/バトル時】
【Sゾーンにある時/自分のターン】
【Sゾーンにある時】
【Sゾーンにいる時/破壊時】
【X:TREME MODE/ガード時】
【X:TREME MODE/場に出した時】
【ブランファイター】
【X:リターン】
【Xゾーンにある時】
【Xゾーンにある時/自分のターン】
【Xライジング】
【X:TREME MODE/手札】
【破壊時】
【相手ファイター攻撃時】
【召喚時】
【Xゾーンでオープン時】
以上の条件が基本的なイベントやステートで対応べき内容であることが分かった。
これには、
自身の位置を参照する必要がある。 次に、【召喚時】というイベントが必要である。撤退時というイベントとかコンポーネントの付与が必要である。
【X:TREME MODE】は、Xゾーンの枚数数えれば良さそう。 それはリソースにしてもよさそう
【破壊時】というのは難しそう 召喚時撤退時破壊時は、それぞれ特定のエンティティを指定しないといけないから、結構難しい。
【場に出した】と召喚について
完全に同じです。「召喚した時」と「場に出した時」は同じ意味を持ちます。
中略
タクティクスカードは、「発動条件」が満たせなかったり、「効果対象」のカードがゾーンになければ発動できない。
ただ、効果の条件文はこれでないことが分かっている。

【Fゾーンにいる時】自分の他のファイターが場に出た時、このファイターをSゾーンにに置く。【Sゾーンにいる時】このファイターのエナジーを+1 というハームゥの効果があるが、自分の他のファイターが場に出た時、という部分の抜出を以上の操作では、完了できなかった。そのため、もう少し、詳しくやりたいと思う。また、引用した文の様に【手札から発動時】効果を持つタクティクスカードの効果対象そのものも、条件になることに気付きタクティクスカードの対象にも注目した。
先ほどの、効果列に以下の作業も施してほしいです。【】の中身は基本的に、効果の条件を示しますが、そのあとに地の文で条件文が続くときがあります。そこも含めて抜き出してほしいのです。例えば、
「【Fゾーンにいる時】自分の他のファイターが場に出た時、このファイターをSゾーンにに置く。【Sゾーンにいる時】このファイターのエナジーを+1」の部分から、「【Fゾーンにいる時】自分の他のファイターが場に出た時、」を抜き出してください。
沢山あると思いますが、お願いします!!
以上のようにやったら、全然過不足なく抜いてくれなくてうまくいかなかった。
そのため、手動で行った。
【Fゾーンにいる時】自分の他のファイターが場に出た時、
【攻撃時】このファイターはSゾーンを攻撃するとき、
【Fゾーンにいるとき】このファイターは攻撃した後、
【手札から場に出た時】自分のSゾーンのカードが全て緑のカードなら、
【相手のターン】相手のファイターの攻撃時、自分のFゾーンのこのファイターを自分のSゾーンにスピンした状態で移動させて発動できる。
《ナイト・リンク》このファイターがバトルに勝利した時、自分の他の#ダウィの騎士団のファイター1体を選ぶ。
【手札から発動時】自分のXゾーンで裏側のカード1枚を表側にすることで、相手のスピンされているファイター1体を破壊し墓地に置く。表側にしたカードが#ダウィの騎士団のファイターなら、
【手札から発動時】相手のFゾーンの軽量級ファイター1体をスピン状態にする。さらに自分のSゾーンの#ワンダー・ライブラリのファイター1体をスピンさせることで、
【手札から発動時】相手のSゾーンにあるタクティクスカード1枚を破壊する。自分のSゾーンに#ワンダー・ライブラリのファイターがいれば、
【場に出した時】次の相手のターン
【手札から場に出した時】自分のXゾーンで裏側のカード1枚を表側にすることで、
【X:TREME MODE】このファイターが相手のSゾーンを攻撃して破壊した時、。
【相手のターン】自分のXゾーンのカードが、相手のXゾーンのカードよりも多ければ、
【X:TREME MODE/ガード時】このファイターがバトルに勝利した時、このファイターをリスピンする。バトルした相手ファイターが重量級ファイターなら、
【手札から発動時】このターンの終わりまで、
【手札から発動時】次の相手のターン、
【手札から発動時】自分のSゾーンにある赤のファイターを1枚手札に戻す。このターン、手札に戻したそのファイターのコストは-2される。
【手札から発動時】このターンの間、
【発動時】次の自分ターン、このカードがSゾーンにあれば
【場に出た時】相手のFゾーンのファイター1体を選ぶ。そのファイターはこのファイターがFゾーンにいる間、
【Sゾーンにいる時】このカードが相手ファイターの攻撃で破壊された時、
【Sゾーンにいる時】このファイター以外の自分のSゾーンのカードが相手の攻撃で破壊された時、
【手札】自分のSゾーンのカードの枚数が、相手のSゾーンのカードの枚数よりも多い時、
【手札/相手のターン】相手のファイターの"【場に出た時】"の効果が発動した時、その効果発動後に、
【手札】自分のSゾーンに「サーペント・シーカー アルファ」がいれば、
【場に出した時】自分のSゾーンの「ユラゲル」と名のあるカード1枚につき、
【手札】相手のターン、相手の重量級ファイターが攻撃した時、そのバトル終了後に
【X:TREME MODE】【手札】自分のFゾーンの青のファイター2体を破壊し墓地に置くことで、
【手札/自分のターン】自分のSゾーンの「サーペント・シーカー」と名のあるファイターを2体以上墓地に送ることで、
【Sゾーンにある時】自分のFゾーンのからSゾーンにファイターが移動した時、
【手札から発動時】自分のSゾーンの中量級以下のファイター1体をスピンさせることで、
【X:SKILL】自分のXゾーンで裏側のカード1枚をオープンする。そのカードが【手札から発動時】効果を持つタクティクスカードなら、
【攻撃時】バトル終了時、
【Sゾーンにいる時】このカードが相手の攻撃によって破壊された時、
【Sゾーンにいる時】このカードをコストにして、#冥府首都高のファイターを場に出した時、
【破壊時】Fゾーンにいるこのファイターがカードの効果で破壊された時、
【Sゾーンにいる時】自分のFゾーンの#冥府首都高ののファイターが相手のSゾーンを攻撃して破壊した時、
【場に出した時】自分の墓地から#冥府首都高のエナジー2以下のファイター1体を自分のFゾーンに出す。
【攻撃時】相手のSゾーンのタクティクスカードを攻撃するとき、
【手札】自分のターン、自分のFゾーンの軽量級ファイター2体を破壊し墓地に置くことで、
【攻撃時】このファイターが相手のファイターとのバトルに勝利した時、
【自分のターン】相手のSゾーンののカードが破壊された時、
【墓地】自分のSゾーンの紫のカードが相手の攻撃によって破壊された時、
【攻撃する時】バトル終了時、
【攻撃する時】自分のXゾーンの裏側のカードを1枚表側にする事で、
【Sゾーンにいる時】自分のFゾーンの紫のファイターが破壊された時、
【Sゾーンにある時】自分のターン、
【Sゾーンにある時】自分の#冥府首都高のファイターがバトルに敗北し破壊された時、
【手札から発動時】自分のFゾーンの#冥府首都高の軽量級ファイター1体を破壊することで、
【手札から発動時】自分のFゾーンの#冥府首都高のファイター1体を破壊し墓地に置くことで、
【相手のターン】自分のSゾーンのカードが相手の攻撃によって破壊された時、
(これが一弾の条件文である。)
【Sゾーンにいる時】自分のFゾーンの#ダウィの騎士団または#ワンダー・ライブラリのファイターを破壊する相手ファイターの効果が発動した時、
【攻撃時】自分のFゾーンにスピン状態の「三剣士のトランスロ」と「三剣士のソードホーク」がいれば、
【攻撃時】このファイターが相手のSゾーンのファイターを攻撃して破壊した時、
・このカードは発動後に墓地に置かれる。【手札から発動時】自分の墓地から「若き英雄ナポ」1枚を手札に戻す。自分が【X:TREME MODE】で、自分のXゾーンのカードが全て表側なら
【Sゾーンにある時/自分のターン】ターンに1度だけ、
・このカードは自分のFゾーンに「疾風の騎士ゴート・パラディン」がいる時に発動でき、
【攻撃時】このファイターが相手の中量級以上のファイターをバトルで破壊した時、
【Sゾーンにいる時】自分のFゾーンの#岩頑武神の重量級ファイターファイターが相手によって破壊される時、
【Fゾーンにいる時】自分のFゾーンの「大龍将グレン・ブレイド」が相手のSゾーンを攻撃して破壊した時、
【Fゾーンにいる時】自分が#岩頑武神の重量級ファイターを召喚した時、
【手札から発動時】自分のXゾーンのカードが3枚以上なら、
【手札から発動時】自分の墓地から#岩頑武神の重量級ファイター1体を手札に戻す。
【Sゾーンにある時】このカードをコストにして#岩頑武神の重量級ファイターを自分のFゾーンに召喚した時、
・このカードは自分のXゾーンにカードがなければ発動できない。【手札から発動時】相手のXゾーンで表側になっているファイター1体を選ぶ。
【Fゾーンにいる時】このファイター以外の自分の「サーペント・シーカー」と名のあるファイターが攻撃する時、
【場に出した時】自分の手札から「サーペント・シーカー」と名のあるファイター1体を自分のSゾーンにスピン状態で置いてもよい。/【Sゾーンにいる時】このファイターのエナジーは1になる。
【X:TREME MODE/場に出た時】このターンエンドまで、
【手札から発動時】自分のFゾーンの「サーペント・シーカー」と名のあるファイター1体を選ぶ。
【手札から発動時】自分のXゾーンで裏側のカード1枚を手札に戻し、
【手札から発動時】自分の墓地から「サーペント・シーカー」と名のあるファイター1体を手札に戻す。
【場に出した時】自分のFゾーンのこのファイター以外の「ハイネスダーク」と名のあるファイター1体を破壊することで、相手のスピンされているファイター1体を破壊する。
【自分のターン】相手の手札のファイターの効果が発動した時、
【自分のターン】相手のSゾーンのファイターの効果が発動した時、
【相手のターン】最初に攻撃をした相手ファイター1体を
【手札から発動時】このターンエンドまで、自分の紫の軽量級ファイターが破壊された時、
【X:TREME MODE/手札から発動時】相手のFゾーンのファイター1体を破壊する。
【手札から発動時】自分の#冥府首都高の軽量級ファイター1体を選ぶ。
【場に出した時】自分の墓地から「片翼の騎士ファントム・パラディン」1体を手札に戻す。この効果を発動した時、
(第三弾)
【Fゾーンにいる時】このファイターは自分のSゾーンに「ツウシン・スズムシ」がいなければ
【攻撃時】自分のSゾーンの#ファーブルの狩場のファイター1体をスピンさせることで、
【Sゾーンにある時】自分のターンに一度、自分のFゾーンの#ファーブルの狩場の軽量級ファイター3体を墓地に置くことで、
【X:TREME MODE】【破壊時】このファイターが相手のカードの効果で破壊された時、
【X:TREME MODE】【攻撃時】このファイターが相手Sゾーンの軽量級ファイターを攻撃して破壊した時
【X:TREME MODE】【Fゾーンにいる時】自分のFゾーンの#ファーブルの狩場のファイターが攻撃する時、
【攻撃時】このファイターが相手Fゾーンのファイターをバトルで破壊した時、
【X: リターン】このカードがXゾーンでオープンした時、また、このファイターが相手のFゾーンのファイターを攻撃して破壊した時、
【X:TREME MODE】【攻撃時】このファイターが相手Sゾーンのスピンされていないファイターを攻撃して破壊した時、
【攻撃時】攻撃終了時までこのファイターをパワー+2000する。
【X: リターン】このカードがXゾーンでオープンした時、
【X:TREME MODE】【攻撃時】このファイターが相手Fゾーンのファイターをバトルで破壊した時、
【手札から発動時】自分の山札からエナジー2のファイター1体を手札に加える。
【手札から発動時】自分のSゾーンの#ダウィの騎士団のファイター1体を自分のFゾーンに移動させる。/【Xゾーンにある時】このカードのエナジー+2。
【手札から発動時】自分のSゾーンのファイター1体を自分の山札に戻しシャッフルする。
【手札から発動時】自分のFゾーンのファイター1体を選ぶ。このターンエンドまでそのファイターのパワー+2000/【Xゾーンにある時】このカードがスピンした時、自分は山札から1枚引く。
【手札から発動時】自分の手札を3枚墓地におくことで、
【手札から発動時】このターンエンドまで
【Fゾーンにいる時】このファイターは自分のSゾーンにタクティクスカードが無ければ攻撃と撤退が出来ない。
【相手のターン】このファイターがスピン状態の時、
【攻撃時】このファイターが相手Sゾーンのファイターを攻撃して破壊した時、
【X: リターン】このカードがXゾーンでオープンした時、
【召喚時】自分のFゾーンのこのファイター以外の赤のファイター1体を自分のXゾーンに表側で置くことで、
【Fゾーンにいる時/相手のターン】自分このファイターがスピン状態の時に相手のFゾーンのファイターがカードの効果でリスピンしたのなら、
【召喚時】自分の墓地から「龍脈」と名のあるタクティクスカード1枚を手札に戻す。/【Fゾーンにいる時】このファイターは攻撃できない。
【召喚時】自分のSゾーンに「龍脈」と名のあるタクティクスカードがあれば、相手のFゾーンの中量級以下のファイターは次の相手ターン攻撃できない。/【Fゾーンにいる時】このファイターは攻撃できない。
【Fゾーンにいる時】このファイターは自分のSゾーンの「龍脈」と名のあるタクティクスカード1枚を墓地に送らなければ攻撃とガードができない。
【Fゾーンにいる時】このファイターは自分のSゾーンの「龍脈」と名のあるタクティクスカード1枚を墓地に送らなければ攻撃とガードができない。
【Fゾーンにいる時】このファイターは自分のSゾーンの「龍脈」と名のあるタクティクスカード1枚を墓地に送らなければ攻撃とガードができない。
【Sゾーンにある時】このカードが#レイジー・ドラゴンのファイターの効果で墓地に送られたターン、そのターンエンドまで自分のFゾーンの#レイジー・ドラゴンのファイターが相手のF/Sゾーンのカードをバトルで破壊した時、
【破壊時】このカードが相手の攻撃によって破壊された時、
【手札から発動時】相手のSゾーンにカードが4枚以上ある時、
【手札】自分の手札がこのカードのみの場合、
【手札から発動時】発動時からこのターンエンドまで、自分の#フレイムノックアウトのファイターの攻撃によって相手のFゾーンのファイターが合計3体以上破壊された時、
【Sゾーンにある時】自分のFゾーンの#フレイムノックアウトのファイターが攻撃する時、
【Sゾーンにある時】相手のFゾーンのエナジーが4以下のファイターが自分のSゾーンを攻撃する時、
【X: リターン】このカードがXゾーンでオープンした時、このファイターをノーコストで自分のFゾーンに召喚し、以下の効果をはつどうする。●自分の手札を1枚自分のXゾーンに置き、自分のXゾーンのカード1枚を手札に加える。/【攻撃時】攻撃終了時、
【手札】自分のFゾーンに青のファイターがコストを支払って召喚された時、
【手札】相手がカードの効果で手札を増やした時、自分のSゾーンに青のカードがあれば、
・自分の山札にあるこのカードは「サーペント・シーカー ベータ」としても扱う。【手札/相手のターン】自分のFゾーンの「サーペント・シーカー」がガードした時、
・自分の山札にある子のカードは「サーペント・シーカー アルファ」としても扱う。 【手札/自分のターン】自分のFゾーンの「サーペント・シーカー」が相手F/Sゾーンのカードをバトルで破壊した時、
・このファイターはカードの効果以外の方法で召喚できない。 【手札】自分のSゾーンに#コーラル☆スターズのカードが2枚以上ある場合に、相手のFゾーンにエナジー4以上のファイターが召喚された時、
【Fゾーンにいる時】このファイターは攻撃できない。/【Sゾーンにある時】このファイターは相手ファイターから攻撃されない。
【召喚時】この召喚のコストとしてスピンしたカードがすべて#コーラル☆スターズのカードなら、このファイターをスピンさせることで、相手のFゾーンでスピン状態のファイター1体を選ぶ。
【Xゾーンにいる時】自分のFゾーンの#コーラル☆スターズのファイターが破壊された時、Xゾーンのこのファイターを裏側にすることで、
【手札】相手ファイターが攻撃した時、その攻撃終了時に、自分のSゾーンの#コーラル☆スターズのファイター1体を自分のXゾーンに表側で置くことで、
【召喚時】自分のSゾーンに#コーラル☆スターズのタクティクスカードが3枚以上あれば。
【F/Sゾーンにいる時】自分のSゾーンに#コーラル☆スターズのタクティクスカードが4枚以上ある時、
【手札から発動時】自分のFゾーンの#コーラル☆スターズのファイター1体を選ぶ。
【手札から発動時】相手のFゾーンの中量級以下のファイター1体を選ぶ。
【手札から発動時】自分のFゾーンの#コーラル☆スターズのファイター1体を選ぶ。
【手札から発動時】自分のSゾーンの合計エナジーより相手のSゾーンの合計エナジーの方が多ければ、
【手札から発動時】自分の手札から#ハードカイルドレポートのファイター1体ノーコストで召喚し、相手のFゾーンの中量級以下のファイター1体をスピンさせる。/【手札/相手のターン】自分のSゾーンの#ハードカイルドレポートのファイターがバトルで破壊された時、
【手札から発動時】自分のFゾーンの#ハードカイルドレポートのファイター1体を自分のXゾーンに裏側で置くことで、
【手札から発動時】相手のFゾーンのパワー3000以下のファイター1体を手札に戻す。/【Xゾーンにある時】自分のFゾーンの「ユラゲル」と名のあるファイターが相手ファイターの効果で破壊された時、
【墓地】相手ファイターが自分のSゾーンを攻撃する時、
【召喚時】このファイターの【召喚時】にコストとしてスピンしたカードがすべて#ナイトメアガレージのカードなら、そのカードをすべてリスピンする。/【X:TREME MODE】【墓地】相手ファイターの【召喚時】効果が発動した時、
【Xゾーンでオープン時】このカードをオープンさせたカードの効果発動後、自分の山札の上から5枚を墓地に置く。
【手札】自分のXゾーンに表側のカードが3枚以上なければ、
【X: リターン】このカードがXゾーンでオープンした時、
【墓地】相手がカードの効果で手札を増やした時、
【Fゾーンにいる時】自分のSゾーンに緑のタクティクスカードが2枚以上あれば、
【Sゾーンにある時】自分の紫のタクティクスカードが攻撃されXゾーンに置かれる時、
【Xゾーンにある時/自分のターン】自分のXゾーンに他の#ドウコクノホノオのファイターが表側で置かれた、またはオープンした時、
【召喚時】自分の墓地の#ドウコクノホノオのカード1枚を自分のXゾーンに表側で置くことで、
【Fゾーンにいる時/相手のターン】相手の攻撃によって自分のXゾーンにカードが置かれた時、
【手札から発動時】自分のF/Xゾーンに#ドウコクノホノオのファイターがいれば、
【Sゾーンにある時】自分のFゾーンの#ドウコクノホノオ/#現生龍のファイターはファイターの効果で破壊されない。【X:TREME MODE】【Sゾーンにある時/自分のターン】ターンに一度だけ、自分のFゾーンの「ドウコクノタネ」1体を破壊することで、相手のFゾーンのパワー0のファイター1体を自分のFゾーンに移動させる。そのファイターが自分のFゾーンを離れる時、相手の墓地に置く。
【相手のターン】相手がそのターンで2枚目のタクティクスカードを発動した時、
【手札から発動時】お互いに手札がある時、
【手札から発動時】自分のFゾーンの「パラディン」と名のあるファイター1体を自分のXゾーンに裏側で置くことで、
【手札から発動時】このカードをスピンし、自分の墓地のライジングでないファイター1体を選ぶ。
【Xライジング】指定「若き英雄ナポ」×1【召喚時】自分のFゾーンの#ダウィの騎士団の軽量級ファイターすべて墓地に置くことで、
【Xライジング】指定「三剣士のトランスロ」×1【Fゾーンにいる時】このカードは「三剣士のトランスロ」としても扱い、≪ナイト・リンク≫を得る。【ガード時】相手のFゾーンの中量級以下のファイター1体スピンさせる。
【Xライジング】エナジー2以上の軽量級ファイター×1 【攻撃時】このファイターが相手Sゾーンのファイターを攻撃して破壊した時、
【Xライジング】指定「アビス・プレデター」×1 【召喚時】自分は山札から2枚引く。/【X:TREME MODE】【攻撃時】攻撃終了時、
【Xライジング】エナジーが奇数(1/3/5/7/9)のファイター×1 【X:TREME MODE】【召喚時】自分か相手のXゾーンのファイター1体選ぶ。このファイターは選んだファイターと同じ名前・タグ・クラスになる。「エージェント・ダゴン」でライジングしたなら、選んだファイターをスピンしてもよい。
【Xライジング】指定「走り屋ヴァンキッシュ」×1 【Fゾーンにいる時】自分の#冥府首都高のファイターがバトルで破壊された時、
【Xライジング】このターン、墓地から召喚した#冥府首都高のファイター×1
【Xライジング】エナジー2のファイター×1 【召喚時】自分のSゾーンの合計エナジーが8位以下なら、
【Xライジング】「パラディン」と名のある重量級ファイター×1 【X:TREME MODE】【召喚時】自分の墓地から
【X:SKILL】このカードをスピンして発動する。自分のXゾーンのカード2枚をオープンする。そのカードがどちらも同じ色のカードなら、
【X:SKILL】自分のXゾーンのカード1枚をオープンする。そのカードがファイターなら、
・自分のXゾーンに裏側のカードが無い時、このカードのエナジーは2になる。・自分のXゾーンに裏側のカードが3枚ある時、このカードのエナジーは4になる。
そして、これを読んでいったとき、どのようにゲームに実装するかという事を考えた。
まず、この条件を監視するシステムを作らなければならないと考えた。
そして、そのシステムに必要な引数としては、ゲーム内の情報であると考えた。
テキストから、必要な情報を分析した。
次に、走らせるステートの違いを確認した。
たとえば、
【攻撃時】このファイターが相手の中量級以上のファイターをバトルで破壊した時、
このようなファイターはまず、エナジーさえあれば、出すことはできます。なので、条件を満たすかどうか監視する関数を、該当するタイミングで動かせばいいのではないかと思います。
【手札から発動時】自分のXゾーンで裏側のカード1枚を表側にすることで、相手のスピンされているファイター1体を破壊し墓地に置く。表側にしたカードが#ダウィの騎士団のファイターなら、
このような、対象が無いと発動できないタクティクスは、メインステートのフリー状態の間に確認するようにします。
内容の違いを考える。
第一弾分の発動条件のあるテキストで取得が必要なものを、先ほどの抜き出した文章に→記号を用いて書き出した。
【Fゾーンにいる時】自分の他のファイターが場に出た時、 →なんでもいいファイターの【召喚時】イベント
【攻撃時】このファイターはSゾーンを攻撃するとき、 →自身が攻撃したというイベント、攻撃対象
【Fゾーンにいるとき】このファイターは攻撃した後、 →自身の攻撃終了後のイベント
【手札から場に出た時】自分のSゾーンのカードが全て緑のカードなら、 →ターンプレイヤーのSゾーンのカードすべての色
【相手のターン】相手のファイターの攻撃時、自分のFゾーンのこのファイターを自分のSゾーンにスピンした状態で移動させて発動できる。 →相手ファイターの攻撃イベント、
《ナイト・リンク》このファイターがバトルに勝利した時、自分の他の#ダウィの騎士団のファイター1体を選ぶ。必要な者、自身のバトル勝利情報 →自身のバトル勝利イベント、 ターンプレイヤーのFゾーンのファイター
【手札から発動時】自分のXゾーンで裏側のカード1枚を表側にすることで、相手のスピンされているファイター1体を破壊し墓地に置く。表側にしたカードが#ダウィの騎士団のファイターなら、 →Xゾーンのカードに裏側のカードがあるかという情報、対象としたカード1枚のタグとタイプ
【手札から発動時】相手のFゾーンの軽量級ファイター1体をスピン状態にする。さらに自分のSゾーンの#ワンダー・ライブラリのファイター1体をスピンさせることで、 →相手のFゾーンのファイターのクラス(発動条件)、自分のSゾーンのファイターのタグ
【手札から発動時】相手のSゾーンにあるタクティクスカード1枚を破壊する。自分のSゾーンに#ワンダー・ライブラリのファイターがいれば、→相手のSゾーンのカードのタイプ(発動条件)、自分のSゾーンのカードのタグ
【場に出した時】次の相手のターン →ステート情報(適用される期間)
【手札から場に出した時】自分のXゾーンで裏側のカード1枚を表側にすることで、 →ターンプレイヤーのXゾーンのカードの状態(発動条件)
【X:TREME MODE】このファイターが相手のSゾーンを攻撃して破壊した時、→自身の攻撃イベント、攻撃対象
【相手のターン】自分のXゾーンのカードが、相手のXゾーンのカードよりも多ければ、→ターンプレイヤーと非ターンプレイヤーのXゾーンの枚数
【X:TREME MODE/ガード時】このファイターがバトルに勝利した時、このファイターをリスピンする。バトルした相手ファイターが重量級ファイターなら、→自身がバトルに勝利したイベント、バトルに敗北した相手ファイターのクラス
【手札から発動時】このターンの終わりまで、自分の#岩頑武神のファイターの【ガード時】の効果は【攻撃時】に発動する。 →ステートの情報、自身のカードの効果のテキスト?
【手札から発動時】自分のSゾーンにある赤のファイターを1枚手札に戻す。このターン、手札に戻したそのファイターのコストは-2される。→Sゾーンのカードのエレメント(発動条件)
【手札から発動時】このターンの間、→ステート情報
【手札から発動時】自分の手札の重量級のファイター1枚を墓地に置き、自分は山札から2枚引く。→手札のファイターのタグ(発動条件)
【発動時】次の自分ターン、このカードがSゾーンにあれば→次の自分ターンのこのカードの状態
【場に出た時】相手のFゾーンのファイター1体を選ぶ。そのファイターはこのファイターがFゾーンにいる間、→相手のFゾーンのファイター
【Sゾーンにいる時】このカードが相手ファイターの攻撃で破壊された時、 →相手の攻撃でカードを破壊したイベント、相手の攻撃対象
【Sゾーンにいる時】このファイター以外の自分のSゾーンのカードが相手の攻撃で破壊された時、→相手の攻撃でカードが破壊されたイベント、相手の攻撃対象、
【手札】自分のSゾーンのカードの枚数が、相手のSゾーンのカードの枚数よりも多い時、→お互いのSゾーンのカード枚数
【手札/相手のターン】相手のファイターの"【場に出た時】"の効果が発動した時、その効果発動後に、→【召喚時】の効果処理後イベント
【手札】自分のSゾーンに「サーペント・シーカー アルファ」がいれば、→Sゾーンにあるカードの名称
【場に出した時】自分のSゾーンの「ユラゲル」と名のあるカード1枚につき、→Sゾーンにあるカードの名称
【手札】相手のターン、相手の重量級ファイターが攻撃した時、そのバトル終了後に →相手の攻撃ファイターのバトル終了後イベント、その攻撃ファイターのクラス
【X:TREME MODE】【手札】自分のFゾーンの青のファイター2体を破壊し墓地に置くことで、→関係ない
【手札/自分のターン】自分のSゾーンの「サーペント・シーカー」と名のあるファイターを2体以上墓地に送ることで、→関係ない
【Sゾーンにある時】自分のFゾーンのからSゾーンにファイターが移動した時、→ファイターの移動イベント
【手札から発動時】自分のSゾーンの中量級以下のファイター1体をスピンさせることで、→Sゾーンにあるカードのクラス
【手札から発動時】お互いのFゾーンのパワー2000以下のファイターすべてを持ち主の手札に戻す。→お互いのFゾーンのファイターのパワー
【手札から発動時】自分は手札を1枚捨てる。相手のF/Sゾーンのファイター1体を選ぶ。→相手のF/Sゾーンのファイターの数、プレイヤーの手札の枚数
【X:SKILL】自分のXゾーンで裏側のカード1枚をオープンする。そのカードが【手札から発動時】効果を持つタクティクスカードなら、→特定のカードをオープンした時のイベント、カードのタイプ、テキスト
【攻撃時】バトル終了時、→適用ステート
【Sゾーンにいる時】このカードが相手の攻撃によって破壊された時、→相手の攻撃イベント、相手の攻撃対象
【Sゾーンにいる時】このカードをコストにして、#冥府首都高のファイターを場に出した時、→【召喚時】イベント、コストにされたというイベント
【破壊時】Fゾーンにいるこのファイターがカードの効果で破壊された時、→カードの効果で破壊されたイベント
【Sゾーンにいる時】自分のFゾーンの#冥府首都高ののファイターが相手のSゾーンを攻撃して破壊した時、→攻撃して破壊したイベント、攻撃ファイターのタグ
【場に出した時】自分の墓地から#冥府首都高のエナジー2以下のファイター1体を自分のFゾーンに出す。→墓地のカードのタグとエナジー
【攻撃時】相手のSゾーンのタクティクスカードを攻撃するとき、→【攻撃時】イベント、攻撃先
【手札】自分のターン、自分のFゾーンの軽量級ファイター2体を破壊し墓地に置くことで、→ステート情報、Fゾーンのファイターのクラス
【攻撃時】このファイターが相手のファイターとのバトルに勝利した時、→バトル勝利イベント、攻撃先の情報
【自分のターン】相手のSゾーンののカードが破壊された時、→カード破壊イベント
【墓地】自分のSゾーンの紫のカードが相手の攻撃によって破壊された時、→攻撃破壊イベント 攻撃対象のエレメント
【攻撃する時】バトル終了時、→バトル終了イベント
【攻撃する時】自分のXゾーンの裏側のカードを1枚表側にする事で、→Xゾーンのカードの状態、
【Sゾーンにいる時】自分のFゾーンの紫のファイターが破壊された時、→破壊イベント、破壊されたファイターのエレメント
【Sゾーンにある時】自分のターン、→ステート情報
【Sゾーンにある時】自分の#冥府首都高のファイターがバトルに敗北し破壊された時、→バトル破壊イベント、破壊されたファイターのタグ
【手札から発動時】自分のFゾーンの#冥府首都高の軽量級ファイター1体を破壊することで、→Fゾーンのファイターのタグとクラス
【手札から発動時】自分のFゾーンの#冥府首都高のファイター1体を破壊し墓地に置くことで、→Fゾーンのファイターのタグ
【相手のターン】自分のSゾーンのカードが相手の攻撃によって破壊された時、→攻撃破壊イベント、攻撃対象
これをチャットGPTにいれて、→矢印の部分を抜き出してもらう。
- なんでもいいファイターの【召喚時】イベント
- 自身が攻撃したというイベント、攻撃対象
- 自身の攻撃終了後のイベント
- ターンプレイヤーのSゾーンのカードすべての色
- 相手ファイターの攻撃イベント、
- 自身のバトル勝利イベント、ターンプレイヤーのFゾーンのファイター
- Xゾーンのカードに裏側のカードがあるかという情報、対象としたカード1枚のタグとタイプ
- 相手のFゾーンのファイターのクラス(発動条件)、自分のSゾーンのファイターのタグ
- 相手のSゾーンのカードのタイプ(発動条件)、自分のSゾーンのカードのタグ
- ステート情報(適用される期間)
- ターンプレイヤーのXゾーンのカードの状態(発動条件)
- 自身の攻撃イベント、攻撃対象
- ターンプレイヤーと非ターンプレイヤーのXゾーンの枚数
- 自身がバトルに勝利したイベント、バトルに敗北した相手ファイターのクラス
- ステートの情報、自身のカードの効果のテキスト?
- Sゾーンのカードのエレメント(発動条件)
- ステート情報
- 手札のファイターのタグ(発動条件)
- 次の自分ターンのこのカードの状態
- 相手のFゾーンのファイター
- 相手の攻撃でカードを破壊したイベント、相手の攻撃対象
- 相手の攻撃でカードが破壊されたイベント、相手の攻撃対象、
- お互いのSゾーンのカード枚数
- 【召喚時】の効果処理後イベント
- Sゾーンにあるカードの名称
- Sゾーンにあるカードの名称
- 相手の攻撃ファイターのバトル終了後イベント、その攻撃ファイターのクラス
- 関係ない
- 関係ない
- ファイターの移動イベント
- Sゾーンにあるカードのクラス
- お互いのFゾーンのファイターのパワー
- 相手のF/Sゾーンのファイターの数、プレイヤーの手札の枚数
- 特定のカードをオープンした時のイベント、カードのタイプ、テキスト
- 適用ステート
- 相手の攻撃イベント、相手の攻撃対象
- 【召喚時】イベント、コストにされたというイベント
- カードの効果で破壊されたイベント
- 攻撃して破粋したイベント、攻撃ファイターのタグ
- 墓地のカードのタグとエナジー
- 【攻撃時】イベント、攻撃先
- ステート情報、Fゾーンのファイターのクラス
- バトル勝利イベント、攻撃先の情報
- カード破壊イベント
- 攻撃破壊イベント、攻撃対象のエレメント
- バトル終了イベント
- Xゾーンのカードの状態、
- 破壊イベント、破壊されたファイターのエレメント
- ステート情報
- バトル破壊イベント、破壊されたファイターのタグ
- Fゾーンのファイターのタグとクラス
- Fゾーンのファイターのタグ
- 攻撃破壊イベント、攻撃対象
すると以上の結果を得られました。
攻撃に関するイベントは細かく必要だということが分かりました。
カードの効果の対象に取られたり、条件の一部になっているカードをエンティティとして指定して、そのカードのクエリを得る事が必要だということが分かりました。
さらに、テキストや効果の文字検索もしくは別個のタグ付けも必要であることが分かりました。
また、各ゾーンの枚数などもすぐに参照できるようなリソースにしておいた方がいいのかもしれません。
また、ゾーンを指定して、そこのカードのクエリも取得できるようにしておかないといけない。
多分既にゾーンにあるカードの情報を得るのは、どのゾーンにいるかというコンポーネントをエンティティに与えれば、Withを使って簡単なんだけど、今現在攻撃ファイターのクエリを取得するには、方法が考え付かない特定の一つを対象にしないといけない。
ポインタみたいなのを使うのは、ECSなんだからあんまりよくないよね...
多分コンポーネントで攻撃している状態であったり、現在の状況を追加するっていうのは合ってもいいかもね。
ただ、ベッケンみたいに、冥府首都高のファイターを召喚時という情報と、このカードをコストにして出したという情報が必要な場合、
【召喚時】に、その召喚したファイターの情報を取得したい、また、コストになったこのカードのエンティティを指定したい。どうすればええの??

暫定の評価
今回分かったことは、攻撃や攻撃対象
さまざまな効果をみていると、今現在の知識では難しそうなものもある。
たとえば、このカードがコストになった、このカードが対象に取られたなどの、特定のエンティティを指定するようなカードでは、Withではない指定方法が必要である。それの解決方法を探らなければならないことが分かった。ポインタはECSにはらいしい、
また、効果の条件を監視する関数に焦点を当てて考えたが、効果によって実際に変わる数値や、ゾーンの移動など効果の述語部分はまだ評価が進んでいない。
技術的な課題がいくつか見えてきたので、まずは、効果をすべて無くした状態で、名称、タイプ、エナジー、パワー、必要エナジーだけで、ゲームを作ってみる。