It is currently 24 Apr 2024, 10:50
   
Text Size

1.34 will support using Groovy to write card scripts

Moderators: ubeefx, beholder, melvin, ShawnieBoy, Lodici, CCGHQ Admins

1.34 will support using Groovy to write card scripts

Postby melvin » 06 Jan 2013, 09:59

Smoof wrote:Have you thought about using something like Groovy as a dynamic scripting language, so new cards with new card-logic could be added on the fly?
melvin wrote:Yes! Unfortunately I'm not familiar enough with Groovy to check if it can be used to create classes like those we use for card code. I suspect it can, but then I couldn't figure out how to have groovy load a script and get back a class. I'd appreciate any advice on this topic.
As part of work, I looked at Groovy again. One of our projects is using Gradle, the build system written in Groovy. I did some quick searches and came across http://groovy.codehaus.org/Embedding+Groovy The latest version of the Groovy language supports most of Java, so I did a quick integration. Imagine my surprise when I took one of the card code, rename it to .groovy and it worked without any modifications. I took the opportunity to simplify the Groovy version a little so it was easier to integrate and write.

Below is the card I tested with. Note that change in the last property from requires_card_code to requires_groovy_code. A preview of 1.34 with groovy scripting is available via our hourly build @ https://buildhive.cloudbees.com/job/mel ... a-1.34.zip

Thanks to smoof for reminding me about Groovy. Look forward to your comments/suggestions for this feature.

Magarena/scripts/Lord_of_Extinction.txt
Code: Select all
name=Lord of Extinction
url=http://magiccards.info/arb/en/91.html
image=http://magiccards.info/scans/en/arb/91.jpg
value=4.487
rarity=M
type=Creature
subtype=Elemental
cost={3}{B}{G}
timing=smain
requires_groovy_code
Magarena/scripts/Lord_of_Extinction.groovy
Code: Select all
import magic.model.MagicGame;
import magic.model.MagicPlayer;
import magic.model.MagicPowerToughness;
import magic.model.mstatic.MagicCDA;

// list of abilities
[
new MagicCDA() {
    @Override
    public void modPowerToughness(final MagicGame game,final MagicPlayer player,final MagicPowerToughness pt) {
        final int amount=game.getPlayer(0).getGraveyard().size()+game.getPlayer(1).getGraveyard().size();
        pt.set(amount,amount);
    }
}
]
As comparison, here is the original card code, src/magic/card/Lord_of_Extinction.java
Code: Select all
package magic.card;

import magic.model.MagicGame;
import magic.model.MagicPlayer;
import magic.model.MagicPowerToughness;
import magic.model.mstatic.MagicCDA;

public class Lord_of_Extinction {
    public static final MagicCDA CDA = new MagicCDA() {
        @Override
        public void modPowerToughness(final MagicGame game,final MagicPlayer player,final MagicPowerToughness pt) {
            final int amount=game.getPlayer(0).getGraveyard().size()+game.getPlayer(1).getGraveyard().size();
            pt.set(amount,amount);
        }
    };
}
User avatar
melvin
AI Programmer
 
Posts: 1062
Joined: 21 Mar 2010, 12:26
Location: Singapore
Has thanked: 36 times
Been thanked: 459 times

Re: 1.34 will support using Groovy to write card scripts

Postby mtgrares » 18 Jan 2013, 18:39

I picked up a Groovy book at the used bookstore and it looks awesome. Groovy is like Java minus the icky syntax and boilerplate code.
mtgrares
DEVELOPER
 
Posts: 1352
Joined: 08 Sep 2008, 22:10
Has thanked: 3 times
Been thanked: 12 times


Return to Magarena

Who is online

Users browsing this forum: No registered users and 20 guests


Who is online

In total there are 20 users online :: 0 registered, 0 hidden and 20 guests (based on users active over the past 10 minutes)
Most users ever online was 4143 on 23 Jan 2024, 08:21

Users browsing this forum: No registered users and 20 guests

Login Form