Adding new cards with Groovy
by ubeefx
Moderators: ubeefx, beholder, melvin, ShawnieBoy, Lodici, CCGHQ Admins
Re: Adding new cards with Groovy
by melvin » 15 Aug 2013, 02:51
We represent them as two separate static ability as they apply in different layers. The +0/+1 should be as follows, note the layer is ModPT instead of Ability.
- Code: Select all
new MagicStatic(
MagicLayer.ModPT,
MagicTargetFilter.TARGET_CREATURE_YOU_CONTROL) {
@Override
public void modPowerToughness(final MagicPermanent source,final MagicPermanent permanent,final MagicPowerToughness pt) {
pt.add(0,1);
}
}
-
melvin - AI Programmer
- Posts: 1062
- Joined: 21 Mar 2010, 12:26
- Location: Singapore
- Has thanked: 36 times
- Been thanked: 459 times
Re: Adding new cards with Groovy
by drooone » 15 Aug 2013, 15:04
Does Magarena support the "Convoke" ability?
- drooone
- Posts: 2
- Joined: 15 Aug 2013, 15:00
- Has thanked: 0 time
- Been thanked: 0 time
Re: Adding new cards with Groovy
by hong yie » 15 Aug 2013, 21:32
Spidersilk code updated

Spidersilk_Armor.txt

Spidersilk_Armor.txt
- Code: Select all
name=Spidersilk Armor
url=http://magiccards.info/ddg/en/32.html
image=http://magiccards.info/scans/en/ddg/32.jpg
value=4.262
rarity=C
type=Enchantment
cost={2}{G}
static=player
timing=enchantment
requires_groovy_code
- Code: Select all
[
new MagicStatic(
MagicLayer.Ability,
MagicTargetFilter.TARGET_CREATURE_YOU_CONTROL) {
@Override
public void modAbilityFlags(final MagicPermanent source,final MagicPermanent permanent,final Set<MagicAbility> flags) {
flags.add(MagicAbility.Reach);
}
},
new MagicStatic(
MagicLayer.ModPT,
MagicTargetFilter.TARGET_CREATURE_YOU_CONTROL) {
@Override
public void modPowerToughness(final MagicPermanent source,final MagicPermanent permanent,final MagicPowerToughness pt) {
pt.add(0,1);
}
}
]
-
hong yie - Programmer
- Posts: 216
- Joined: 10 Mar 2013, 06:44
- Location: Jakarta
- Has thanked: 75 times
- Been thanked: 9 times
Re: Adding new cards with Groovy
by hong yie » 17 Aug 2013, 09:58
i need to use "otherPermanent.isBeast" in this code, and the crashlog shows that such property is not available, yet ? anyone can help with this?

- Code: Select all
[
new MagicWhenOtherComesIntoPlayTrigger() {
@Override
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicPermanent otherPermanent) {
return (otherPermanent.isCreature() && otherPermanent.isBeast) ?
new MagicEvent(
permanent,
new MagicSimpleMayChoice(
MagicSimpleMayChoice.DRAW_CARDS,
1,
MagicSimpleMayChoice.DEFAULT_NONE
),
this,
"PN may\$ draw a card."
) :
MagicEvent.NONE;
}
}
]
-
hong yie - Programmer
- Posts: 216
- Joined: 10 Mar 2013, 06:44
- Location: Jakarta
- Has thanked: 75 times
- Been thanked: 9 times
Re: Adding new cards with Groovy
by melvin » 17 Aug 2013, 10:04
Use otherPermanent.hasSubType(MagicSubType.Beast) instead, see https://code.google.com/p/magarena/sour ... ont.groovy
-
melvin - AI Programmer
- Posts: 1062
- Joined: 21 Mar 2010, 12:26
- Location: Singapore
- Has thanked: 36 times
- Been thanked: 459 times
Re: Adding new cards with Groovy
by hong yie » 17 Aug 2013, 14:14
i have completed testing of "wirewood savage" card script, and has posted it to firemind.ch, when can i post a deck with it?
-
hong yie - Programmer
- Posts: 216
- Joined: 10 Mar 2013, 06:44
- Location: Jakarta
- Has thanked: 75 times
- Been thanked: 9 times
Re: Adding new cards with Groovy
by melvin » 17 Aug 2013, 14:22
Thanks! You can post it anytime, but add a note that it is for the upcoming release of version 1.41.hong yie wrote:i have completed testing of "wirewood savage" card script, and has posted it to firemind.ch, when can i post a deck with it?
-
melvin - AI Programmer
- Posts: 1062
- Joined: 21 Mar 2010, 12:26
- Location: Singapore
- Has thanked: 36 times
- Been thanked: 459 times
Re: Adding new cards with Groovy
by melvin » 18 Aug 2013, 03:27
No, btw welcome to the forum, drooonedrooone wrote:Does Magarena support the "Convoke" ability?

Thanks for submitting cards on firemind.ch, I've merged your Millennial Gargoyle and it will be part of the August release.
-
melvin - AI Programmer
- Posts: 1062
- Joined: 21 Mar 2010, 12:26
- Location: Singapore
- Has thanked: 36 times
- Been thanked: 459 times
Re: Adding new cards with Groovy
by hong yie » 18 Aug 2013, 05:05

ajani_s_chosen.txt
- Code: Select all
name=Ajani's Chosen
url=http://magiccards.info/m14/en/2.html
image=http://magiccards.info/scans/en/m14/2.jpg
value=3.833
rarity=R
type=Creature
subtype=Cat,Soldier
cost={2}{W}{W}
pt=3/3
timing=fmain
requires_groovy_code
- Code: Select all
[
new MagicWhenOtherComesIntoPlayTrigger() {
@Override
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicPermanent otherPermanent) {
return (otherPermanent.isEnchantment() ) ?
new MagicEvent(
permanent,
this,
"PN puts a 2/2 white Cat creature token onto the battlefield."
) :
MagicEvent.NONE;
}
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.doAction(new MagicPlayTokensAction(
event.getPlayer(),
TokenCardDefinitions.get("Cat2"), 1));
}
}
]

-
hong yie - Programmer
- Posts: 216
- Joined: 10 Mar 2013, 06:44
- Location: Jakarta
- Has thanked: 75 times
- Been thanked: 9 times
Re: Adding new cards with Groovy
by hong yie » 18 Aug 2013, 09:35
tried to submit these to firemind.ch, it can't accept empty script for the token, so i will put it here first.

Soldier_RW.txt

Assemble_the_Legion.txt

Soldier_RW.txt
- Code: Select all
name=Soldier RW
token=Soldier
image=http://media.wizards.com/images/magic/daily/arcana/1138_league_hm688e7km6.jpg
value=1
ability=haste
type=Creature
subtype=Soldier
color=rw
cost={0}
pt=1/1

Assemble_the_Legion.txt
- Code: Select all
name=Assemble the Legion
url=http://magiccards.info/gtc/en/142.html
image=http://magiccards.info/scans/en/gtc/142.jpg
value=3.687
rarity=R
type=Enchantment
cost={3}{R}{W}
timing=enchantment
requires_groovy_code
- Code: Select all
[
new MagicAtUpkeepTrigger() {
@Override
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicPlayer upkeepPlayer) {
return permanent.isController(upkeepPlayer) ?
new MagicEvent(
permanent,
this,
"PN puts a muster counter on SN."
):
MagicEvent.NONE;
}
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.doAction(new MagicChangeCountersAction(event.getPermanent(),MagicCounterType.Charge,1,true));
final MagicPermanent source = event.getPermanent()
final int amount = source.getCounters(MagicCounterType.Charge);
game.doAction(new MagicPlayTokensAction(event.getPlayer(),TokenCardDefinitions.get("Soldier RW"), amount));
}
}
]
-
hong yie - Programmer
- Posts: 216
- Joined: 10 Mar 2013, 06:44
- Location: Jakarta
- Has thanked: 75 times
- Been thanked: 9 times
Re: Adding new cards with Groovy
by melvin » 18 Aug 2013, 10:18
Turns out it is not implementable as there is no way to attach an Aura after it enters the battlefield. I've fixed it by changing MagicAttachEquipmentAction to MagicAttachAction that also works for Auras. The complete version is as follows, it has been integrated into the development version of the game.hong yie wrote:the groovy code for this card is almost finish, except the final word stating "If that enchantment is an Aura, you may attach it to the token." time to need some help,
Magarena/scripts/Ajani_s_Chosen.groovy
- Code: Select all
[
new MagicWhenOtherComesIntoPlayTrigger() {
@Override
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicPermanent otherPermanent) {
return otherPermanent.isEnchantment() && otherPermanent.isFriend(permanent) ?
new MagicEvent(
permanent,
otherPermanent,
this,
"PN puts a 2/2 white Cat creature token onto the battlefield."
):
MagicEvent.NONE;
}
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicPlayTokenAction act = new MagicPlayTokenAction(
event.getPlayer(),
TokenCardDefinitions.get("Cat2")
);
game.doAction(act);
final MagicPermanent token = act.getPermanent();
final MagicPermanent enchantment = event.getRefPermanent();
if (enchantment.isAura()) {
game.addEvent(new MagicEvent(
enchantment,
new MagicMayChoice("Attach ${enchantment} to ${token}?"),
token,
{
final MagicGame G, final MagicEvent E ->
G.doAction(new MagicAttachAction(
E.getPermanent(),
E.getRefPermanent()
));
} as MagicEventAction,
"You may\$ attach SN to RN."
));
}
}
}
]
-
melvin - AI Programmer
- Posts: 1062
- Joined: 21 Mar 2010, 12:26
- Location: Singapore
- Has thanked: 36 times
- Been thanked: 459 times
Re: Adding new cards with Groovy
by ember hauler » 18 Aug 2013, 12:54
Hi,
I made a Rusted Slasher card, but it has a strange behaviour.
This is the code:
The card works fine, except Magarena doesn't offer to regenerate any copy on the battlefield except the first one.
Is this the card or the game problem?
I made a Rusted Slasher card, but it has a strange behaviour.
This is the code:
- Code: Select all
name=Rusted Slasher
url=http://magiccards.info/mbs/en/128.html
image=http://magiccards.info/scans/en/mbs/128.jpg
value=2.125
rarity=C
type=Artifact,Creature
subtype=Horror
cost={4}
pt=4/1
timing=main
requires_groovy_code
- Code: Select all
[
new MagicPermanentActivation(
new MagicActivationHints(MagicTiming.Pump),
"Regen"
) {
@Override
public MagicEvent[] getCostEvent(final MagicPermanent source) {
return [
new MagicSacrificePermanentEvent(
source,
MagicTargetChoice.SACRIFICE_ARTIFACT
),
new MagicRegenerationConditionsEvent(source,this)
];
}
@Override
public MagicEvent getPermanentEvent(final MagicPermanent source,final MagicPayedCost payedCost) {
return new MagicEvent(
source,
this,
"Regenerate SN."
);
}
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.doAction(new MagicRegenerateAction(event.getPermanent()));
}
}
]
The card works fine, except Magarena doesn't offer to regenerate any copy on the battlefield except the first one.
Is this the card or the game problem?
- ember hauler
- Posts: 79
- Joined: 14 Aug 2013, 08:13
- Has thanked: 27 times
- Been thanked: 14 times
Re: Adding new cards with Groovy
by melvin » 18 Aug 2013, 13:11
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.
It is a game problem, specially this issue https://code.google.com/p/magarena/issues/detail?id=379. It is fixed for next release.ember hauler wrote:The card works fine, except Magarena doesn't offer to regenerate any copy on the battlefield except the first one. Is this the card or the game problem?
-
melvin - AI Programmer
- Posts: 1062
- Joined: 21 Mar 2010, 12:26
- Location: Singapore
- Has thanked: 36 times
- Been thanked: 459 times
Re: Adding new cards with Groovy
by melvin » 18 Aug 2013, 13:55

Magarena/scripts/Manaweft_Sliver.txt
- Code: Select all
name=Manaweft Sliver
url=http://magiccards.info/m14/en/184.html
image=http://magiccards.info/scans/en/m14/184.jpg
value=2.70
rarity=U
type=Creature
subtype=Sliver
cost={1}{G}
pt=1/1
static=player
timing=main
requires_groovy_code
- Code: Select all
def TapAddAny = new MagicTapManaActivation(MagicManaType.ALL_TYPES);
[
new MagicStatic(
MagicLayer.Ability,
MagicTargetFilter.TARGET_SLIVER_YOU_CONTROL
) {
@Override
public void modAbilityFlags(final MagicPermanent source,final MagicPermanent permanent,final Set<MagicAbility> flags) {
permanent.addAbility(TapAddAny);
}
}
]
-
melvin - AI Programmer
- Posts: 1062
- Joined: 21 Mar 2010, 12:26
- Location: Singapore
- Has thanked: 36 times
- Been thanked: 459 times
Re: Adding new cards with Groovy
by melvin » 18 Aug 2013, 13:57

Magarena/scripts/Thorncaster_Sliver.txt
- Code: Select all
name=Thorncaster Sliver
url=http://magiccards.info/m14/en/158.html
image=http://magiccards.info/scans/en/m14/158.jpg
value=2.70
rarity=R
type=Creature
subtype=Sliver
cost={4}{R}
pt=2/2
static=player
timing=main
requires_groovy_code
- Code: Select all
def AttacksPing = new MagicWhenAttacksTrigger() {
@Override
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicPermanent creature) {
return (permanent==creature) ?
new MagicEvent(
permanent,
MagicTargetChoice.NEG_TARGET_CREATURE_OR_PLAYER,
new MagicDamageTargetPicker(1),
this,
"SN deals 1 damage to target creature or player\$."
):
MagicEvent.NONE;
}
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
event.processTarget(game,new MagicTargetAction() {
public void doAction(final MagicTarget target) {
game.doAction(new MagicDealDamageAction(
new MagicDamage(
event.getPermanent(),
target,
1
)
));
}
});
}
};
[
new MagicStatic(
MagicLayer.Ability,
MagicTargetFilter.TARGET_SLIVER_YOU_CONTROL
) {
@Override
public void modAbilityFlags(final MagicPermanent source,final MagicPermanent permanent,final Set<MagicAbility> flags) {
permanent.addAbility(AttacksPing);
}
}
]
-
melvin - AI Programmer
- Posts: 1062
- Joined: 21 Mar 2010, 12:26
- Location: Singapore
- Has thanked: 36 times
- Been thanked: 459 times
Who is online
Users browsing this forum: No registered users and 1 guest