Re: Adding new cards with Groovy
Done.melvin wrote:Thanks! Card looks good, do submit on http://www.firemind.ch/card_script_submissions/new.ember hauler wrote:I made a Rusted Slasher card, but it has a strange behaviour.
High Quality Resources for Collectible Card Games and Home of the CCGHQ Team
https://www.slightlymagic.net/forum/
https://www.slightlymagic.net/forum/viewtopic.php?f=82&t=10323
Done.melvin wrote:Thanks! Card looks good, do submit on http://www.firemind.ch/card_script_submissions/new.ember hauler wrote:I made a Rusted Slasher card, but it has a strange behaviour.

name=Master Transmuter
url=http://magiccards.info/arc/en/7.html
image=http://magiccards.info/scans/en/arc/7.jpg
value=3.717
rarity=R
type=Artifact,Creature
subtype=Human,Artificer
cost={3}{U}
pt=1/2
timing=main
requires_groovy_code
[
new MagicPermanentActivation(
new MagicActivationHints(MagicTiming.Token),
"Put"
) {
@Override
public MagicEvent[] getCostEvent(final MagicPermanent source) {
return [
new MagicPayManaCostTapEvent(source, "{U}"),
new MagicBounceChosenPermanentEvent(source, MagicTargetChoice.ARTIFACT_YOU_CONTROL)
];
}
@Override
public MagicEvent getPermanentEvent(final MagicPermanent source,final MagicPayedCost payedCost) {
return new MagicEvent(
source,
MagicTargetChoice.ARTIFACT_CARD_FROM_HAND,
new MagicGraveyardTargetPicker(true),
this,
"PN puts an artifact card\$ from his or her hand onto the battlefield."
);
}
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
event.processTargetCard(game,new MagicCardAction() {
public void doAction(final MagicCard card) {
game.doAction(new MagicRemoveCardAction(card,MagicLocationType.OwnersHand));
game.doAction(new MagicPlayCardAction(card,event.getPlayer()));
}
});
}
}
]

name=Primordial Sage
url=http://magiccards.info/rav/en/177.html
image=http://magiccards.info/scans/en/rav/177.jpg
value=4.043
rarity=R
type=Creature
subtype=Spirit
cost={4}{G}{G}
pt=4/5
timing=fmain
requires_groovy_code[
new MagicWhenOtherSpellIsCastTrigger() {
@Override
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicCardOnStack spell) {
return (permanent.isFriend(spell) &&
spell.getCardDefinition().isCreature()) ?
new MagicEvent(
permanent,
new MagicSimpleMayChoice(
MagicSimpleMayChoice.DRAW_CARDS,
1,
MagicSimpleMayChoice.DEFAULT_NONE
),
this,
"PN may\$ draw a card."
):
MagicEvent.NONE;
}
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
if (event.isYes()) {
game.doAction(new MagicDrawAction(event.getPlayer()));
}
}
}
]
name=Regal Force
url=http://magiccards.info/eve/en/74.html
image=http://magiccards.info/scans/en/eve/74.jpg
value=4.241
rarity=R
type=Creature
subtype=Elemental
cost={4}{G}{G}{G}
pt=5/5
timing=main
requires_groovy_code[
new MagicWhenComesIntoPlayTrigger() {
@Override
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicPayedCost payedCost) {
return new MagicEvent(
permanent,
this,
"PN draws a cards for each green creature PN controls."
);
}
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicPlayer player=event.getPlayer();
final int amount = player.getNrOfPermanents(MagicTargetFilter.TARGET_GREEN_CREATURE_YOU_CONTROL);
game.doAction(new MagicDrawAction(player,amount));
}
}
]name=Bloodshot Cyclops
url=http://magiccards.info/8e/en/179.html
image=http://magiccards.info/scans/en/8e/179.jpg
value=3.851
rarity=R
type=Creature
subtype=Giant
cost={5}{R}
pt=4/4
timing=smain
requires_groovy_code[
new MagicPermanentActivation(
new MagicActivationHints(MagicTiming.Removal),
"Damage"
) {
@Override
public MagicEvent[] getCostEvent(final MagicPermanent source) {
// final MagicTargetFilter<MagicPermanent> targetFilter=new MagicOtherPermanentTargetFilter(
// MagicTargetFilter.TARGET_CREATURE_YOU_CONTROL,source);
// final MagicTargetChoice targetChoice=new MagicTargetChoice(
// targetFilter,false,MagicTargetHint.None,"a creature other than " + source + " to sacrifice");
return [
new MagicPayManaCostTapEvent(source,"{R}"),
new MagicSacrificePermanentEvent(source,targetChoice)
];
}
@Override
public MagicEvent getPermanentEvent(final MagicPermanent source,final MagicPayedCost payedCost) {
return new MagicEvent(
source,
MagicTargetChoice.NEG_TARGET_PLAYER,
payedCost.getTarget(),
this,
"SN deals damage equal to the power of RN to target player\$."
);
}
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
event.processTargetPlayer(game,new MagicPlayerAction() {
public void doAction(final MagicPlayer player) {
final MagicPermanent sacrificed=event.getRefPermanent();
final MagicDamage damage=new MagicDamage(event.getSource(),player,sacrificed.getPower());
game.doAction(new MagicDealDamageAction(damage));
}
});
}
}
]return [
new MagicPayManaCostTapEvent(source,"{R}"),
new MagicSacrificePermanentEvent(source,targetChoice)
];
return [
new MagicPayManaCostTapEvent(source,"{R}"),
new MagicSacrificePermanentEvent(source,MagicTargetChoice.SACRIFICE_CREATURE)
];

name=Bloodshot Cyclops
url=http://magiccards.info/8e/en/179.html
image=http://magiccards.info/scans/en/8e/179.jpg
value=3.851
rarity=R
type=Creature
subtype=Giant
cost={5}{R}
pt=4/4
timing=smain
requires_groovy_code [
new MagicPermanentActivation(
new MagicActivationHints(MagicTiming.Removal),
"Damage"
) {
@Override
public MagicEvent[] getCostEvent(final MagicPermanent source) {
return [
new MagicPayManaCostTapEvent(source,"{R}"),
new MagicSacrificePermanentEvent(source,MagicTargetChoice.SACRIFICE_CREATURE)
];
}
@Override
public MagicEvent getPermanentEvent(final MagicPermanent source,final MagicPayedCost payedCost) {
return new MagicEvent(
source,
MagicTargetChoice.NEG_TARGET_PLAYER,
payedCost.getTarget(),
this,
"SN deals damage equal to the power of RN to target player\$."
);
}
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
event.processTargetPlayer(game,new MagicPlayerAction() {
public void doAction(final MagicPlayer player) {
final MagicPermanent sacrificed=event.getRefPermanent();
final MagicDamage damage=new MagicDamage(event.getSource(),player,sacrificed.getPower());
game.doAction(new MagicDealDamageAction(damage));
}
});
}
}
]
name=Rampant Growth
url=http://magiccards.info/m12/en/190.html
image=http://magiccards.info/scans/en/m12/190.jpg
value=4.638
rarity=C
type=Sorcery
cost={1}{G}
timing=main
requires_groovy_code
[
new MagicSpellCardEvent() {
@Override
public MagicEvent getEvent(final MagicCardOnStack cardOnStack,final MagicPayedCost payedCost) {
return new MagicEvent(
cardOnStack,
this,
"PN searches his or her library for a basic land card and put that card onto the battlefield tapped. Then shuffle PN's library."
);
}
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.addEvent(new MagicEvent(
event.getSource(),
MagicTargetChoice.BASIC_LAND_CARD_FROM_LIBRARY,
{
final MagicGame G, final MagicEvent E ->
E.processTargetCard(G, {
final MagicCard card ->
G.doAction(new MagicRemoveCardAction(card,MagicLocationType.OwnersLibrary));
G.doAction(new MagicPlayCardAction(card,event.getPlayer(),MagicPlayMod.TAPPED));
G.doAction(new MagicShuffleLibraryAction(event.getPlayer()));
} as MagicCardAction);
} as MagicEventAction,
"Selected basic land card\$."
));
}
}
]

name=Farseek
url=http://magiccards.info/m13/en/170.html
image=http://magiccards.info/scans/en/m13/170.jpg
value=4.638
rarity=C
type=Sorcery
cost={1}{G}
timing=main
requires_groovy_code
[
new MagicSpellCardEvent() {
@Override
public MagicEvent getEvent(final MagicCardOnStack cardOnStack,final MagicPayedCost payedCost) {
return new MagicEvent(
cardOnStack,
this,
"PN searches his or her library for a Plains, Island, Swamp, or Mountain card and put that card onto the battlefield tapped. Then shuffle PN's library."
);
}
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.addEvent(new MagicEvent(
event.getSource(),
MagicTargetChoice.PLAINS_ISLAND_SWAMP_OR_MOUNTAIN_CARD_FROM_LIBRARY,
{
final MagicGame G, final MagicEvent E ->
E.processTargetCard(G, {
final MagicCard card ->
G.doAction(new MagicRemoveCardAction(card,MagicLocationType.OwnersLibrary));
G.doAction(new MagicPlayCardAction(card,E.getPlayer(),MagicPlayMod.TAPPED));
G.doAction(new MagicShuffleLibraryAction(E.getPlayer()));
} as MagicCardAction);
} as MagicEventAction,
"Selected card\$."
));
}
}
]

name=Farhaven Elf
url=http://magiccards.info/shm/en/113.html
image=http://magiccards.info/scans/en/shm/113.jpg
value=3.618
rarity=C
type=Creature
subtype=Elf,Druid
cost={2}{G}
pt=1/1
timing=main
requires_groovy_code[
new MagicWhenComesIntoPlayTrigger() {
@Override
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicPlayer upkeepPlayer) {
return new MagicEvent(
permanent,
this,
"PN searches his or her library for a basic land card and put that card onto the battlefield tapped. Then shuffle PN's library."
);
}
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.addEvent(new MagicEvent(
event.getSource(),
MagicTargetChoice.BASIC_LAND_CARD_FROM_LIBRARY,
{
final MagicGame G, final MagicEvent E ->
E.processTargetCard(G, {
final MagicCard card ->
G.doAction(new MagicRemoveCardAction(card,MagicLocationType.OwnersLibrary));
G.doAction(new MagicPlayCardAction(card,event.getPlayer(),MagicPlayMod.TAPPED));
G.doAction(new MagicShuffleLibraryAction(event.getPlayer()));
} as MagicCardAction);
} as MagicEventAction,
"Selected basic land card\$."
));
}
}
]
name=Ondu Giant
url=http://magiccards.info/pc2/en/71.html
image=http://magiccards.info/scans/en/pc2/71.jpg
value=3.033
rarity=C
type=Creature
subtype=Giant,Druid
cost={3}{G}
pt=2/4
timing=main
requires_groovy_code[
new MagicWhenComesIntoPlayTrigger() {
@Override
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicPlayer upkeepPlayer) {
return new MagicEvent(
permanent,
this,
"PN searches his or her library for a basic land card and put that card onto the battlefield tapped. Then shuffle PN's library."
);
}
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.addEvent(new MagicEvent(
event.getSource(),
MagicTargetChoice.BASIC_LAND_CARD_FROM_LIBRARY,
{
final MagicGame G, final MagicEvent E ->
E.processTargetCard(G, {
final MagicCard card ->
G.doAction(new MagicRemoveCardAction(card,MagicLocationType.OwnersLibrary));
G.doAction(new MagicPlayCardAction(card,event.getPlayer(),MagicPlayMod.TAPPED));
G.doAction(new MagicShuffleLibraryAction(event.getPlayer()));
} as MagicCardAction);
} as MagicEventAction,
"Selected basic land card\$."
));
}
}
]1.41, the August release which should be out next week. You can preview the upcoming version from https://buildhive.cloudbees.com/job/mel ... sfulBuild/hong yie wrote:these codes require Magarena version... ??