カードの効果に関する考察 - aharalabMeiji/fireplaceAharaLab GitHub Wiki
関連ページへのリンク:
secret , deathrattle, play, event, update, discover
GameAction:on()
TargetedAction:ExtraAttack,
researches
cant be frozen casts when drawn
#前書き
「このミニオンの コピーを1体召喚する。」は
play = Summon(CONTROLLER, Copy(SELF))
と書かれる。この文法についてわかることを整理したいと思う。
左辺のplayは親クラスからのオーバーライドだと思われる。play,events, deathrattle, dormant, awaken, update, outcast, requirements, activate, などがある。
play ハンドにあるカードを出すときの効果 ,
events カードが場に出ているときに継続する効果(発動条件が必要、条件さえ整えば繰り返し実行される),
activate ヒロパの効果,
update カードのスタッツを変更する効果,
deathrattle 死ぬときの効果(),
dormant 眠るターン数
awaken 目が覚めた時の効果
outcast 異端のときの効果
requirements カードをプレイできる条件、ターゲットが必要な場合には必要。
上よっつの区別が難しい。
requirements
requirements = {PlayReq.REQ_NUM_MINION_SLOTS: 1}# 場にミニオンを出す余裕がある。
activate
ヒロパの効果はactivateで表現される。
activate = Summon(CONTROLLER, "BRMA09_2t") * 3 #'BRMA09_2t'を3体召喚する *3は3回実行するの意味
activate = Destroy(RANDOM_ENEMY_MINION)#ランダムな敵ミニオンを破壊する
events
何かのタイミングで効果が発動するときに使う。したがって、条件付けが必要である。また、そのミニオンがあるかぎり、条件がそろえば何度でも発動する
events = OWN_TURN_END.on(Find(FRIENDLY_SECRETS) & Buff(SELF, "EX1_274e"))#自分のターンの終了時に秘策が準備されている場合+2/+2を獲得する。
events = OWN_SPELL_PLAY.on(Give(CONTROLLER, "CS2_029"))#自分が呪文を使う度「ファイアーボール」1枚を手札に追加する。
events = OWN_TURN_BEGIN.on(Morph(RANDOM_MINION, "Mekka4t"))#自分のターンの開始時ランダムなミニオン1体を1/1のニワトリに変身させる。
events = OWN_SPELL_PLAY.on(Buff(SELF, "NEW1_012o"))#自分が呪文を使う度攻撃力+1を獲得する。
events = SELF_DAMAGE.on(Draw(CONTROLLER))#このミニオンがダメージを受ける度 カードを1枚引く。
ちなみに「NEW1_012o = buff(atk=1)」である。
注意すべき点としては、「events = OWN_SPELL_PLAY.on」は呪文を唱えるたびに、であって魔法活性(一度だけ効果が発生する)とは違うところである。
deathrattle
deathrattle = Shuffle(CONTROLLER, "BT_210t") #’BT_210t’を自分のデッキに混ぜる
deathrattle = Hit(RANDOM_ENEMY_CHARACTER, 1) * ATK(SELF) #このミニオンの攻撃力に等しい合計ダメージを敵にランダムに振り分ける。(ダメージ1の攻撃をATK(SELF)回行う、の意味。)
play
カードをプレイした瞬間に実行される。完全に検証はできていないが、一度だけ発動する。条件付き文を書いたときには、そのミニオンがいる間、一度だけ発動する。
play = Buff(キャラ、効果)#キャラに効果(カード)を付与する。 効果はずっと続く
play = Destroy(RANDOM_ENEMY_MINION)#ランダムな敵ミニオンを破壊する
play = Heal(キャラ、数)#体力を復活する
play = Summon(プレーヤー、ミニオン)#プレーヤーにミニオンを召喚する
play = Buff(SELF,**)
と書くと、カード(ミニオン)に「バフ=タグ変更」が張り付き、play = Buff(CONTROLLER,**)
と書くとプレーヤ(エージェント)に「バフ」が張り付く。単にスタッツを書き換えるだけなら前者がよい。カード周りの一時的なイベントを張り付けたいときには後者を用いる。
update
いわゆる「オーラバフ」を設定するときに使う。普通のバフとの違いは、普通のバフが「一度付けたらつけっぱなし」であることに対し、オーラバフは「リアタイで、つけるかつけないかを決める」ようなバフのことである。南海の船長がわかりやすいと思うが、南海の船長が場に出ているときには場に出ているほかのカードにバフがつく。一方で、南海の船長が戦闘中に死んだり、またはプレーヤーが外したり(これはバトグラのとき)するときに、そのバフが同時的に解除される。このようなバフにはオーラバフが用いられ、
update=Refresh(条件、バフ)
の文法で書かれる。
update = Refresh(FRIENDLY_HAND + SPELL, {GameTag.COST: 1}) # 自分の呪文カードをコスト1にする
update = Refresh(FRIENDLY + LIBRAMS, {GameTag.COST: -1})#自分の聖典のコストを1減らす
update = Refresh(ALL_CHARACTERS, {GameTag.IGNORE_TAUNT: True})#すべてのキャラがtauntを無視できるようにする。(ケーンサーファリーですな。)
update = Refresh(FRIENDLY_MINIONS + BEAST, buff="DS1_178e")#自分以外の獣のミニオンに対して効果「DS1_175e」(この場合は突撃)をつける
ちなみに
DS1_178e = buff(charge=True)
のように書く。第4例のように、buffをほかのクラスに託すこともできるし、上3例のように直接タグの値を変更してもよい。オーラバフをつけたり外したりする原理についてはリンク先を参照のこと。