def vigilance(): keyword = "vigilance" def setAttacking(self): self.setCombat(True) self.attacking = True self.send(AttackerDeclaredEvent()) return False return CardStaticAbility(effects=override_effect("setAttacking", setAttacking), keyword=keyword)
def horsemanship(): keyword = "horsemanship" return CardStaticAbility(effects=override_effect("canBeBlockedBy", lambda self, blocker: keyword in blocker.abilities), keyword=keyword)
def shroud(): keyword = "shroud" def canBeTargetedBy(self, targetter): return False return CardStaticAbility(effects=override_effect("canBeTargetedBy", canBeTargetedBy), keyword=keyword)
def defender(): keyword = "defender" def canAttack(self): return False return CardStaticAbility(effects=override_effect("canAttack", canAttack), keyword=keyword)
def haste(): keyword = "haste" def continuouslyOnBattlefield(self): return True return CardStaticAbility(effects=override_effect("continuouslyOnBattlefield", continuouslyOnBattlefield), keyword=keyword)
def flying(): keyword = "flying" def canBeBlockedBy(self, blocker): return ("flying" in blocker.abilities or "reach" in blocker.abilities) return CardStaticAbility(effects=override_effect("canBeBlockedBy", canBeBlockedBy), keyword=keyword)
def landwalk(condition, keyword): def canBeBlocked(self): if isPlayer(self.opponent): other_battlefield = self.opponent.battlefield else: other_battlefield = self.opponent.controller.battlefield # planeswalker return len(other_battlefield.get(isLand.with_condition(condition))) == 0 return CardStaticAbility(effects=override_effect("canBeBlocked", canBeBlocked), keyword=keyword)
def this_card_can_only_block(keyword): def canBlockAttacker(self, attacker): return keyword in attacker.abilities return CardStaticAbility(effects=override_effect("canBlockAttacker", canBlockAttacker), txt="~ can only block creatures with %s."%keyword)
def this_card_cant_block(): def canBlock(self): return False return CardStaticAbility(effects=override_effect("canBlock", canBlock), txt="~ can't block.")
def this_card_must_attack(): def checkAttack(self, attackers, not_attacking): return self in attackers or not self.canAttack() return CardStaticAbility(effects=override_effect("checkAttack", checkAttack), txt="~ must attack each turn if able.")
def fear(): keyword = "fear" def canBeBlockedBy(self, blocker): return (blocker.color == Black or (blocker.types == Artifact and blocker.types == Creature)) return CardStaticAbility(effects=override_effect("canBeBlockedBy", canBeBlockedBy), keyword=keyword)
def intimidate(): keyword = "intimidate" def canBeBlockedBy(self, blocker): return (any([blocker.color == color for color in self.color]) or (blocker.types == Artifact and blocker.types == Creature)) return CardStaticAbility(effects=override_effect("canBeBlockedBy", canBeBlockedBy), keyword=keyword)
def this_card_doesnt_untap(): return CardStaticAbility(effects=override_effect("canUntapDuringUntapStep", lambda self: False), txt="~ doesn't untap during your untap step.")
def doesntUntapAbility(txt): return CardStaticAbility(effects=override_effect("canUntapDuringUntapStep", lambda self: False), txt=txt)
def hexproof(): keyword = "hexproof" def canBeTargetedBy(self, targetter): return not targetter.controller in self.controller.opponents return CardStaticAbility(effects=override_effect("canBeTargetedBy", canBeTargetedBy), keyword=keyword)