Exemple #1
0
def bushido(value):
    if isinstance(value, int): txt="Bushido %d"%value
    else: txt = "Bushido X"
    def effects(controller, source):
        yield NoTarget()
        value = int(value)
        until_end_of_turn(source.augment_power_toughness(value, value))
        yield
    ability = TriggeredAbility([Trigger(BlockerDeclaredEvent(), sender_match), Trigger(AttackerBlockedEvent(), sender_match)], effects, txt=txt, keyword='bushido')
    ability.bushido_value = value
    return ability
Exemple #2
0
def fading(value):
    txt = "Fading %d" % value

    def enterBattlefieldWith(self):
        self.add_counters('fade', value)

    def fading_1(source):
        yield CiP(source, enterBattlefieldWith, txt=txt)

    fading_CiP = CiPAbility(fading_1, txt=txt, keyword='fading')

    def condition(source, player):
        return player == source.controller

    def fading_2(controller, source, player):
        target = yield NoTarget()
        if source.num_counters("fade") > 0:
            source.remove_counters("fade")
        else:
            controller.sacrifice(source)
        yield

    fading_Triggered = TriggeredAbility(PhaseTrigger(UpkeepStepEvent(),
                                                     condition=condition),
                                        effects=fading_2)
    return fading_CiP, fading_Triggered
def persist():
    def condition(source, card):
        return source_match(source, card) and card.num_counters("-1-1") == 0

    def enterWithCounters(self):
        self.add_counters(PowerToughnessCounter(-1, -1))

    def persist_effect(controller, source, card, newcard):
        yield NoTarget()
        if condition(source, card):
            expire = CiP(
                newcard,
                enterWithCounters,
                txt='%s - enter the battlefield with a -1/-1 counter' %
                newcard)
            # Now move to the battlefield
            newcard.move_to("battlefield")
            expire()
        yield

    return TriggeredAbility(EnterFromTrigger(from_zone="battlefield",
                                             to_zone="graveyard",
                                             condition=condition),
                            effects=persist_effect,
                            keyword="persist")
Exemple #4
0
def graft(value):
    txt = "Graft %d" % value

    def enterBattlefieldWith(self):
        self.add_counters(PowerToughnessCounter(1, 1), number=value)

    def graft_1(source):
        yield CiP(source, enterBattlefieldWith, txt=txt)

    graft_CiP = CiPAbility(graft_1, txt=txt, keyword='graft')

    def condition(source, card):
        return isCreature(
            card) and not source == card and source.num_counters("+1+1") > 0

    def graft_2(controller, source, card):
        yield NoTarget()
        if source.num_counters("+1+1") > 0:
            if controller.you_may("move a +1/+1 counter from %s to %s" %
                                  (source, card)):
                source.remove_counters(PowerToughnessCounter(1, 1))
                card.add_counters(PowerToughnessCounter(1, 1))
        yield

    graft_Triggered = TriggeredAbility(EnterTrigger("battlefield",
                                                    condition,
                                                    player="any"),
                                       effects=graft_2,
                                       txt=txt)
    return graft_CiP, graft_Triggered
Exemple #5
0
def cascade():
    def condition(source, spell):
        return source == spell

    def cascade_effects(source, controller, spell):
        target = yield NoTarget()
        cmc = source.converted_mana_cost
        exiled = []
        for card in controller.library:
            exile = card.move_to("exile")
            exiled.append(exile)
            if not exile.types == Land and exile.converted_mana_cost < cmc:
                break
        yield
        if exiled:
            controller.reveal_cards(exiled)
            exile = exiled[-1]
            if controller.you_may("cast %s without paying its mana cost?" %
                                  exile):
                exiled.remove(exile)
                exile.play_without_mana_cost(controller)
            # move exiled cards back to bottom of library in random order
            shuffle(exiled)
            for card in exiled:
                card.move_to("library", position='bottom')
                yield
        yield

    return TriggeredAbility(SpellPlayedTrigger(condition),
                            effects=cascade_effects,
                            zone="stack",
                            keyword="cascade")
Exemple #6
0
def modular(n):
    txt = "Modular %d" % n

    def enterBattlefieldWith(self):
        self.add_counters(PowerToughnessCounter(1, 1), number=n)

    def effects(source):
        yield CiP(source, enterBattlefieldWith, txt=txt)

    cip = CiPAbility(effects, txt=txt, keyword="modular")

    def effects(controller, source):
        target = yield Target(isArtifactCreature,
                              msg="Target Artifact Creature for %s" % source)
        if controller.you_may("move all +1/+1 counters from %s to target" %
                              source.name):
            target.add_counters(PowerToughnessCounter(1, 1),
                                number=source.num_counters("+1+1"))
        yield

    triggered = TriggeredAbility(EnterFromTrigger("graveyard",
                                                  "battlefield",
                                                  source_match,
                                                  player="any"),
                                 effects=effects,
                                 txt='')
    return (cip, triggered)
def bushido(value):
    if isinstance(value, int): txt = "Bushido %d" % value
    else: txt = "Bushido X"

    def effects(controller, source):
        yield NoTarget()
        value = int(value)
        until_end_of_turn(source.augment_power_toughness(value, value))
        yield

    ability = TriggeredAbility([
        Trigger(BlockerDeclaredEvent(), sender_match),
        Trigger(AttackerBlockedEvent(), sender_match)
    ],
                               effects,
                               txt=txt,
                               keyword='bushido')
    ability.bushido_value = value
    return ability
Exemple #8
0
def exalted():
    def condition(source, sender, attackers):
        return sender.active_player == source.controller and len(
            attackers) == 1

    def effects(controller, source, attackers):
        yield NoTarget()
        until_end_of_turn(attackers[0].augment_power_toughness(1, 1))
        yield

    return TriggeredAbility(Trigger(DeclareAttackersEvent(), condition),
                            effects,
                            zone="battlefield",
                            keyword='exalted')
def recover(cost):
    def condition(source, card):
        return isCreature(card)

    def effects(controller, source):
        target = yield NoTarget()
        if controller.you_may_pay(source, cost):
            source.move_to("hand")
        else:
            source.move_to("exile")
        yield

    return TriggeredAbility(EnterFromTrigger("graveyard", "battlefield", condition, player="you"),
            effects=effects,
            zone="graveyard",
            txt="Recover %s"%cost,
            keyword="recover")
def soulshift(n):
    def effects(controller, source):
        target = yield Target(isCard.with_condition(
            lambda c: c.subtypes == Spirit and c.converted_mana_cost <= n),
                              zone="graveyard",
                              player="you")
        # Code for effect
        if controller.you_may("return target to your hand"):
            target.move_to("hand")
        yield

    return TriggeredAbility(EnterFromTrigger("graveyard",
                                             "battlefield",
                                             source_match,
                                             player="you"),
                            effects=effects,
                            txt="Soulshift %s" % n)
 def wrap(ability):
     effects = ability()
     def condition(source, player):
         return source.controller == player
     return TriggeredAbility(PhaseTrigger(UpkeepStepEvent(), condition=condition), effects=effects, txt="Kinship - %s"%txt)
Exemple #12
0
 def make_triggered(ability):
     triggers, effects = ability()
     return TriggeredAbility(triggers, effects, zone=zone, txt=txt)