Beispiel #1
0
 def _enable(self):
     super(SimpleStaticAbility, self)._enable()
     self.effect_tracking = [
         combine(*removal_func)
         if isinstance(removal_func, tuple) else removal_func
         for removal_func in self.effect_generator(self.source)
     ]
Beispiel #2
0
 def add_effects(self, card):
     self.effect_tracking[
         card] = True  # this is to prevent recursion when the effect is called
     self.effect_tracking[card] = [
         combine(*removal_func)
         if isinstance(removal_func, tuple) else removal_func
         for removal_func in self.effect_generator(self.source, card)
     ]
Beispiel #3
0
 def new_controller(self, original):
     for remove in self.effect_tracking:
         remove()
     self.effect_tracking = [
         combine(*removal_func)
         if isinstance(removal_func, tuple) else removal_func
         for removal_func in self.effect_generator(self.source)
     ]
def detain(controller, card):
    do_until(
        combine(
            do_override(card, "canAttack", lambda self: False),
            do_override(card, "canBlock", lambda self: False),
            do_override(ActivatedAbility, "playable", lambda self: not self.source == card),
        ),
        NewTurnEvent(),
        lambda player: player == controller,
    )
Beispiel #5
0
 def _enable(self):
     super(CardStaticAbility, self)._enable()
     self.control_changed.setup_trigger(self.source,
                                        self.new_controller,
                                        priority=CONTINUOUS_PRIORITY)
     self.effect_tracking = [
         combine(*removal_func)
         if isinstance(removal_func, tuple) else removal_func
         for removal_func in self.effect_generator(self.source)
     ]
Beispiel #6
0
def prevent_all_noncombat_damage():
    def condition(self, amt, source, combat=False):
        return not combat

    msg = "~ - prevent all noncombat damage"
    return combine(
        do_replace(CreatureType,
                   "assignDamage",
                   preventAll,
                   msg=msg,
                   condition=condition),
        do_replace(Player,
                   "assignDamage",
                   preventAll,
                   msg=msg,
                   condition=condition),
        do_replace(PlaneswalkerType,
                   "assignDamage",
                   preventAll,
                   msg=msg,
                   condition=condition))
Beispiel #7
0
def prevent_all_damage():
    msg = "~ - prevent all damage"
    return combine(do_replace(CreatureType, "assignDamage", preventAll, msg=msg),
            do_replace(Player, "assignDamage", preventAll, msg=msg),
            do_replace(PlaneswalkerType, "assignDamage", preventAll, msg=msg))
Beispiel #8
0
 def new_controller(self, original):
     for remove in self.effect_tracking: remove()
     self.effect_tracking = [combine(*removal_func) if isinstance(removal_func, tuple) else removal_func for removal_func in self.effect_generator(self.source)]
Beispiel #9
0
 def add_effects(self, card):
     self.effect_tracking[card] = True  # this is to prevent recursion when the effect is called
     self.effect_tracking[card] = [combine(*removal_func) if isinstance(removal_func, tuple) 
             else removal_func for removal_func in self.effect_generator(self.source, card)]
Beispiel #10
0
 def effects(target):
     yield combine(*[do_override(target, func_name, mk_override(cond)) for func_name, cond in [("canBeAttachedBy", lambda o: not o==aura and condition(o)), ("canBeBlockedBy", condition), ("canBeTargetedBy", condition)]]+[prevent_damage(target, -1, txt="Protection effect", condition=prevent_condition)])
Beispiel #11
0
 def protection_effect(target):
     yield combine(prevent_damage(target, -1, txt="Protection effect", condition=prevent_condition),
                   do_override(target, "canBeAttachedBy", canBeAttachedBy),
                   do_override(target, "canBeBlockedBy", canBeBlockedBy),
                   do_override(target, "canBeTargetedBy", canBeTargetedBy))
Beispiel #12
0
def prevent_all_noncombat_damage_by(dmgsource):
    def condition(self, amt, source, combat=False): return source == dmgsource and not combat
    msg = "~ - prevent all noncombat damage by %s"%dmgsource.name
    return combine(do_replace(CreatureType, "assignDamage", preventAll, msg=msg, condition=condition),
            do_replace(Player, "assignDamage", preventAll, msg=msg, condition=condition),
            do_replace(PlaneswalkerType, "assignDamage", preventAll, msg=msg, condition=condition))
Beispiel #13
0
def prevent_all_noncombat_damage():
    def condition(self, amt, source, combat=False): return not combat
    msg = "~ - prevent all noncombat damage"
    return combine(do_replace(CreatureType, "assignDamage", preventAll, msg=msg, condition=condition),
            do_replace(Player, "assignDamage", preventAll, msg=msg, condition=condition),
            do_replace(PlaneswalkerType, "assignDamage", preventAll, msg=msg, condition=condition))
Beispiel #14
0
 def _enable(self):
     super(CardStaticAbility, self)._enable()
     self.control_changed.setup_trigger(self.source, self.new_controller, priority=CONTINUOUS_PRIORITY)
     self.effect_tracking = [combine(*removal_func) if isinstance(removal_func, tuple) else removal_func for removal_func in self.effect_generator(self.source)]
Beispiel #15
0
def prevent_all_damage():
    msg = "~ - prevent all damage"
    return combine(
        do_replace(CreatureType, "assignDamage", preventAll, msg=msg),
        do_replace(Player, "assignDamage", preventAll, msg=msg),
        do_replace(PlaneswalkerType, "assignDamage", preventAll, msg=msg))
Beispiel #16
0
def indestructible(target):
    def shouldDestroy(self): return False
    def destroy(self, regenerate=True): return False
    return combine(do_override(target, "shouldDestroy", shouldDestroy), do_override(target, "destroy", destroy))
Beispiel #17
0
 def _enable(self):
     super(SimpleStaticAbility, self)._enable()
     self.effect_tracking = [combine(*removal_func) if isinstance(removal_func, tuple) else removal_func for removal_func in self.effect_generator(self.source)]