merged cards by Pablo Castellazzi
commit
6e478cb7d4
15
.hgignore
15
.hgignore
|
@ -5,7 +5,14 @@ build/*
|
|||
ref/*
|
||||
launch4j/*
|
||||
decks/*
|
||||
release/Magarena/cards/*
|
||||
release/Magarena/texts/*
|
||||
release/Magarena/tokens/*
|
||||
release/Magarena/symbols/*
|
||||
tags
|
||||
release/Magarena/cards
|
||||
release/Magarena/texts
|
||||
release/Magarena/tokens
|
||||
release/Magarena/symbols
|
||||
release/Magarena/*.cfg
|
||||
release/Magarena/*.hist
|
||||
release/Magarena/*.log
|
||||
release/Magarena/*.txt
|
||||
release/Magarena.exe
|
||||
release/Magarena.jar
|
||||
|
|
22
Makefile
22
Makefile
|
@ -1,10 +1,10 @@
|
|||
JAVAEA=java -ea -Xms256M -Xmx256M -Ddebug=true
|
||||
JAVAEA=java -ea -Xms256M -Xmx256M -Ddebug=true
|
||||
LIBS=.:lib/annotations.jar:lib/jsr305.jar
|
||||
JAVA=${JAVAEA} -Dcom.sun.management.jmxremote -cp $(LIBS):release/Magarena.jar
|
||||
JAVA=${JAVAEA} -Dcom.sun.management.jmxremote -cp $(LIBS):release/Magarena.jar
|
||||
SHELL=/bin/bash
|
||||
BUILD=build
|
||||
JOPTS=-Xlint:all -d $(BUILD) -cp $(LIBS):$(BUILD):.
|
||||
SRC=$(shell find src -iname *.java)
|
||||
SRC=$(shell find src -iname *.java)
|
||||
MAG:=release/Magarena.jar
|
||||
EXE:=release/Magarena.exe
|
||||
|
||||
|
@ -41,7 +41,7 @@ cards_diff: $(MAG)
|
|||
code_to_remove: $(MAG)
|
||||
cat src/magic/card/*.java | sed 's/\s\+//g' | sed 's/(.*)/(...)/g' | sort | uniq -c | sort -n | grep publicstaticfinal | grep ");" > $@
|
||||
|
||||
casts: $(MAG)
|
||||
casts: $(MAG)
|
||||
grep -n "([A-Z]\+[a-z]\+[A-Za-z]*)" -r src/ | flip -u > $@
|
||||
|
||||
warnings_H.txt: warnings.txt
|
||||
|
@ -148,9 +148,9 @@ M1.%: clean $(EXE) cubes release/Magarena/mods/felt_theme.zip
|
|||
cp -r Magarena.app Magarena-1.$*.app
|
||||
cd Magarena-1.$*.app/Contents/Resources; ln -s ../../../Magarena-1.$* Java
|
||||
chmod a+x Magarena-1.$*.app/Contents/MacOS/JavaApplicationStub
|
||||
-zip -r Magarena-1.$*.app.zip Magarena-1.$*.app
|
||||
-zip -r Magarena-1.$*.app.zip Magarena-1.$*.app
|
||||
|
||||
$(MAG): $(SRC)
|
||||
$(MAG): $(SRC)
|
||||
ant -f build.xml
|
||||
|
||||
class: $(BUILD)/javac.last
|
||||
|
@ -161,7 +161,7 @@ $(BUILD)/javac.last: $(SRC)
|
|||
cp -r resources/* $(BUILD)
|
||||
touch $@
|
||||
|
||||
tags: $(SRC)
|
||||
tags: $(SRC)
|
||||
ctags -R src
|
||||
|
||||
Test%.run: $(MAG)
|
||||
|
@ -172,8 +172,8 @@ $(EXE): $(MAG)
|
|||
|
||||
clean:
|
||||
-ant clean
|
||||
-rm $(BUILD)/javac.last
|
||||
-rm $(MAG)
|
||||
-rm -f $(BUILD)/javac.last
|
||||
-rm -f $(MAG)
|
||||
|
||||
jar: $(MAG)
|
||||
$(JAVA) -jar $^
|
||||
|
@ -195,7 +195,7 @@ test: $(MAG)
|
|||
$(JAVA) magic.DeckStrCal --deck1 release/decks/LSK_B.dec --deck2 release/decks/LSK_G.dec --ai1 $* --ai2 $* --games 100
|
||||
|
||||
exp/%.log: $(MAG)
|
||||
scripts/evaluate_ai.sh $* > $@
|
||||
scripts/evaluate_ai.sh $* > $@
|
||||
|
||||
decks/dd:
|
||||
for i in `curl http://www.wizards.com/magic/magazine/archive.aspx?tag=dailydeck | grep -o mtg/daily/deck/[0-9]* | cut -d'/' -f4`; do make decks/dd_$$i.dec; done
|
||||
|
@ -203,7 +203,7 @@ decks/dd:
|
|||
decks/dd_%.dec: scripts/dailyhtml2dec.awk
|
||||
curl "http://www.wizards.com/Magic/Magazine/Article.aspx?x=mtg/daily/deck/$*" | awk -f $^ > $@
|
||||
|
||||
decks/ml_%.dec: scripts/apprentice2dec.awk
|
||||
decks/ml_%.dec: scripts/apprentice2dec.awk
|
||||
wget "http://www.magic-league.com/decks/download.php?deck=$*&index=1" -O - | flip -u - | awk -f $^ > $@
|
||||
|
||||
# Mike Flores 1 - 212
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
name=Burning Inquiry
|
||||
url=http://magiccards.info/m10/en/128.html
|
||||
image=http://magiccards.info/scans/en/m10/128.jpg
|
||||
value=2
|
||||
rarity=C
|
||||
type=Sorcery
|
||||
color=r
|
||||
converted=1
|
||||
cost={R}
|
||||
timing=removal
|
||||
requires_card_code
|
|
@ -0,0 +1,13 @@
|
|||
name=Hound of Griselbrand
|
||||
url=http://magiccards.info/avr/en/141.html
|
||||
image=http://magiccards.info/scans/en/avr/141.jpg
|
||||
value=3
|
||||
rarity=R
|
||||
type=Creature
|
||||
subtype=Elemental,Hound
|
||||
color=r
|
||||
converted=4
|
||||
cost={2}{R}{R}
|
||||
pt=2/2
|
||||
ability=double strike,undying
|
||||
timing=main
|
|
@ -0,0 +1,12 @@
|
|||
name=Human Frailty
|
||||
url=http://magiccards.info/avr/en/109.html
|
||||
image=http://magiccards.info/scans/en/avr/109.jpg
|
||||
value=2
|
||||
removal=2
|
||||
rarity=U
|
||||
type=Instant
|
||||
color=b
|
||||
converted=1
|
||||
cost={B}
|
||||
timing=removal
|
||||
requires_card_code
|
|
@ -6,7 +6,7 @@ removal=1
|
|||
rarity=U
|
||||
type=Instant
|
||||
color=b
|
||||
converted=1
|
||||
converted=2
|
||||
cost={1}{B}
|
||||
timing=mustattack
|
||||
requires_card_code
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
name=Joint Assault
|
||||
url=http://magiccards.info/avr/en/183.html
|
||||
image=http://magiccards.info/scans/en/avr/183.jpg
|
||||
value=2
|
||||
rarity=C
|
||||
type=Instant
|
||||
color=g
|
||||
converted=1
|
||||
cost={G}
|
||||
timing=pump
|
||||
requires_card_code
|
|
@ -0,0 +1,13 @@
|
|||
name=Kessig Malcontents
|
||||
url=http://magiccards.info/avr/en/142.html
|
||||
image=http://magiccards.info/scans/en/avr/142.jpg
|
||||
value=3
|
||||
rarity=U
|
||||
type=Creature
|
||||
subtype=Human,Warrior
|
||||
color=r
|
||||
converted=3
|
||||
cost={2}{R}
|
||||
pt=3/1
|
||||
timing=main
|
||||
requires_card_code
|
|
@ -0,0 +1,11 @@
|
|||
name=Phyrexian Walker
|
||||
url=http://magiccards.info/vi/en/152.html
|
||||
image=http://magiccards.info/scans/en/vi/152.jpg
|
||||
value=1
|
||||
rarity=C
|
||||
type=Artifact,Creature
|
||||
subtype=Construct
|
||||
converted=0
|
||||
cost={0}
|
||||
pt=0/3
|
||||
timing=main
|
|
@ -0,0 +1,13 @@
|
|||
name=Wall of Blossoms
|
||||
url=http://magiccards.info/sh/en/75.html
|
||||
image=http://magiccards.info/scans/en/sh/75.jpg
|
||||
value=2
|
||||
rarity=U
|
||||
type=Creature
|
||||
subtype=Plant,Wall
|
||||
color=g
|
||||
converted=2
|
||||
cost={1}{G}
|
||||
pt=0/4
|
||||
ability=defender,enters draw card
|
||||
timing=main
|
|
@ -0,0 +1,11 @@
|
|||
name=Wheel of Fortune
|
||||
url=http://magiccards.info/rv/en/184.html
|
||||
image=http://magiccards.info/scans/en/rv/184.jpg
|
||||
value=2
|
||||
rarity=C
|
||||
type=Sorcery
|
||||
color=r
|
||||
converted=3
|
||||
cost={2}{R}
|
||||
timing=removal
|
||||
requires_card_code
|
|
@ -0,0 +1,50 @@
|
|||
package magic.card;
|
||||
|
||||
import magic.model.MagicGame;
|
||||
import magic.model.MagicPayedCost;
|
||||
import magic.model.MagicPlayer;
|
||||
import magic.model.action.MagicDrawAction;
|
||||
import magic.model.action.MagicMoveCardAction;
|
||||
import magic.model.event.MagicEvent;
|
||||
import magic.model.event.MagicDiscardEvent;
|
||||
import magic.model.event.MagicSpellCardEvent;
|
||||
import magic.model.stack.MagicCardOnStack;
|
||||
|
||||
|
||||
public class Burning_Inquiry {
|
||||
public static final MagicSpellCardEvent S = new MagicSpellCardEvent() {
|
||||
@Override
|
||||
public MagicEvent getEvent(
|
||||
final MagicCardOnStack cardOnStack,
|
||||
final MagicPayedCost payedCost)
|
||||
{
|
||||
final MagicPlayer player = cardOnStack.getController();
|
||||
|
||||
return new MagicEvent(
|
||||
cardOnStack.getCard(),
|
||||
player,
|
||||
new Object[]{cardOnStack},
|
||||
this,
|
||||
"Each player draw three cards then discard three cards."
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void executeEvent(
|
||||
final MagicGame game,
|
||||
final MagicEvent event,
|
||||
final Object[] data,
|
||||
final Object[] choiceResults)
|
||||
{
|
||||
final MagicCardOnStack cardOnStack = (MagicCardOnStack)data[0];
|
||||
|
||||
game.doAction(new MagicMoveCardAction(cardOnStack));
|
||||
|
||||
for (final MagicPlayer player : game.getPlayers()) {
|
||||
game.doAction(new MagicDrawAction(player, 3));
|
||||
game.addEvent(new MagicDiscardEvent(
|
||||
cardOnStack.getCard(), player, 3, true));
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
package magic.card;
|
||||
|
||||
import magic.model.MagicGame;
|
||||
import magic.model.MagicPayedCost;
|
||||
import magic.model.MagicPermanent;
|
||||
import magic.model.action.MagicDestroyAction;
|
||||
import magic.model.action.MagicMoveCardAction;
|
||||
import magic.model.action.MagicPermanentAction;
|
||||
import magic.model.choice.MagicTargetChoice;
|
||||
import magic.model.event.MagicEvent;
|
||||
import magic.model.event.MagicSpellCardEvent;
|
||||
import magic.model.stack.MagicCardOnStack;
|
||||
import magic.model.target.MagicDestroyTargetPicker;
|
||||
|
||||
public class Human_Frailty {
|
||||
public static final MagicSpellCardEvent S = new MagicSpellCardEvent() {
|
||||
@Override
|
||||
public MagicEvent getEvent(
|
||||
final MagicCardOnStack cardOnStack,
|
||||
final MagicPayedCost payedCost) {
|
||||
return new MagicEvent(
|
||||
cardOnStack.getCard(),
|
||||
cardOnStack.getController(),
|
||||
MagicTargetChoice.NEG_TARGET_HUMAN_CREATURE,
|
||||
new MagicDestroyTargetPicker(false),
|
||||
new Object[]{cardOnStack},
|
||||
this,
|
||||
"Destroy target Human creature$.");
|
||||
}
|
||||
@Override
|
||||
public void executeEvent(
|
||||
final MagicGame game,
|
||||
final MagicEvent event,
|
||||
final Object[] data,
|
||||
final Object[] choiceResults) {
|
||||
game.doAction(new MagicMoveCardAction((MagicCardOnStack)data[0]));
|
||||
event.processTargetPermanent(game,choiceResults,0,new MagicPermanentAction() {
|
||||
public void doAction(final MagicPermanent creature) {
|
||||
game.doAction(new MagicDestroyAction(creature));
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
package magic.card;
|
||||
|
||||
import magic.model.MagicGame;
|
||||
import magic.model.MagicPayedCost;
|
||||
import magic.model.MagicPermanent;
|
||||
import magic.model.action.MagicChangeTurnPTAction;
|
||||
import magic.model.action.MagicMoveCardAction;
|
||||
import magic.model.action.MagicPermanentAction;
|
||||
import magic.model.choice.MagicTargetChoice;
|
||||
import magic.model.event.MagicEvent;
|
||||
import magic.model.event.MagicSpellCardEvent;
|
||||
import magic.model.stack.MagicCardOnStack;
|
||||
import magic.model.target.MagicPumpTargetPicker;
|
||||
|
||||
public class Joint_Assault {
|
||||
public static final MagicSpellCardEvent S = new MagicSpellCardEvent() {
|
||||
@Override
|
||||
public MagicEvent getEvent(
|
||||
final MagicCardOnStack cardOnStack,
|
||||
final MagicPayedCost payedCost) {
|
||||
return new MagicEvent(
|
||||
cardOnStack.getCard(),
|
||||
cardOnStack.getController(),
|
||||
MagicTargetChoice.POS_TARGET_CREATURE,
|
||||
MagicPumpTargetPicker.create(),
|
||||
new Object[]{cardOnStack},
|
||||
this,
|
||||
"Target creature$ gets +2/+2 until end of turn. " +
|
||||
"If it's paired with a creature, that creature " +
|
||||
"also gets +2/+2 until end of turn.");
|
||||
}
|
||||
@Override
|
||||
public void executeEvent(
|
||||
final MagicGame game,
|
||||
final MagicEvent event,
|
||||
final Object[] data,
|
||||
final Object[] choiceResults) {
|
||||
game.doAction(new MagicMoveCardAction((MagicCardOnStack)data[0]));
|
||||
event.processTargetPermanent(game,choiceResults,0,new MagicPermanentAction() {
|
||||
public void doAction(final MagicPermanent creature) {
|
||||
game.doAction(new MagicChangeTurnPTAction(creature,2,2));
|
||||
if (creature.isPaired()) {
|
||||
game.doAction(new MagicChangeTurnPTAction(
|
||||
creature.getPairedCreature(),
|
||||
2,
|
||||
2));
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
package magic.card;
|
||||
|
||||
import magic.model.MagicDamage;
|
||||
import magic.model.MagicGame;
|
||||
import magic.model.MagicPermanent;
|
||||
import magic.model.MagicPlayer;
|
||||
import magic.model.MagicSubType;
|
||||
import magic.model.action.MagicDealDamageAction;
|
||||
import magic.model.action.MagicPlayerAction;
|
||||
import magic.model.choice.MagicTargetChoice;
|
||||
import magic.model.event.MagicEvent;
|
||||
import magic.model.target.MagicDamageTargetPicker;
|
||||
import magic.model.trigger.MagicWhenComesIntoPlayTrigger;
|
||||
|
||||
|
||||
public class Kessig_Malcontents {
|
||||
public static final MagicWhenComesIntoPlayTrigger T = new MagicWhenComesIntoPlayTrigger() {
|
||||
@Override
|
||||
public MagicEvent executeTrigger(
|
||||
final MagicGame game,
|
||||
final MagicPermanent permanent,
|
||||
final MagicPlayer player) {
|
||||
final int amount = player.getNrOfPermanentsWithSubType(MagicSubType.Human);
|
||||
return new MagicEvent(
|
||||
permanent,
|
||||
player,
|
||||
MagicTargetChoice.NEG_TARGET_PLAYER,
|
||||
new MagicDamageTargetPicker(amount),
|
||||
new Object[]{permanent},
|
||||
this,
|
||||
permanent + " deals damage to target player$ " +
|
||||
"equal to the number of Humans " + player + " controls.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void executeEvent(
|
||||
final MagicGame game,
|
||||
final MagicEvent event,
|
||||
final Object data[],
|
||||
final Object[] choiceResults) {
|
||||
event.processTargetPlayer(game,choiceResults,0,new MagicPlayerAction() {
|
||||
public void doAction(final MagicPlayer player) {
|
||||
final int amount = event.getPlayer().getNrOfPermanentsWithSubType(MagicSubType.Human);
|
||||
final MagicDamage damage = new MagicDamage(
|
||||
event.getSource(),
|
||||
player,
|
||||
amount,
|
||||
false);
|
||||
game.doAction(new MagicDealDamageAction(damage));
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
package magic.card;
|
||||
|
||||
import magic.model.MagicCard;
|
||||
import magic.model.MagicCardList;
|
||||
import magic.model.MagicGame;
|
||||
import magic.model.MagicPayedCost;
|
||||
import magic.model.MagicPlayer;
|
||||
import magic.model.action.MagicDrawAction;
|
||||
import magic.model.action.MagicMoveCardAction;
|
||||
import magic.model.action.MagicPlayerAction;
|
||||
import magic.model.event.MagicEvent;
|
||||
import magic.model.event.MagicDiscardEvent;
|
||||
import magic.model.event.MagicSpellCardEvent;
|
||||
import magic.model.stack.MagicCardOnStack;
|
||||
|
||||
|
||||
public class Wheel_of_Fortune {
|
||||
public static final MagicSpellCardEvent S = new MagicSpellCardEvent() {
|
||||
@Override
|
||||
public MagicEvent getEvent(final MagicCardOnStack cardOnStack, final MagicPayedCost payedCost) {
|
||||
return new MagicEvent(
|
||||
cardOnStack.getCard(),
|
||||
cardOnStack.getController(),
|
||||
new Object[]{cardOnStack},
|
||||
this,
|
||||
"Each player discards his or her hand and draws seven cards."
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void executeEvent(final MagicGame game, final MagicEvent event, final Object[] data, final Object[] choiceResults) {
|
||||
final MagicCardOnStack cardOnStack = (MagicCardOnStack)data[0];
|
||||
|
||||
game.doAction(new MagicMoveCardAction(cardOnStack));
|
||||
|
||||
for (final MagicPlayer player : game.getPlayers()) {
|
||||
game.addEvent(new MagicDiscardEvent(cardOnStack.getCard(), player, player.getHandSize(), true));
|
||||
game.doAction(new MagicDrawAction(player, 7));
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -265,6 +265,9 @@ public class MagicTargetChoice extends MagicChoice {
|
|||
public static final MagicTargetChoice POS_TARGET_SAMURAI =
|
||||
new MagicTargetChoice(MagicTargetFilter.TARGET_SAMURAI,true,MagicTargetHint.Positive,
|
||||
"target Samurai");
|
||||
public static final MagicTargetChoice NEG_TARGET_HUMAN_CREATURE =
|
||||
new MagicTargetChoice(MagicTargetFilter.TARGET_HUMAN,true,MagicTargetHint.Negative,
|
||||
"target Human creature");
|
||||
public static final MagicTargetChoice SACRIFICE_PERMANENT =
|
||||
new MagicTargetChoice(MagicTargetFilter.TARGET_PERMANENT_YOU_CONTROL,false,MagicTargetHint.None,"a permanent to sacrifice");
|
||||
public static final MagicTargetChoice SACRIFICE_CREATURE=
|
||||
|
|
Loading…
Reference in New Issue