diff --git a/.gitattributes b/.gitattributes
index cfeccf80957..fbef06e730d 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -106,6 +106,7 @@ src/forge/CardFactory_Creatures.java -text svneol=native#text/plain
src/forge/CardFactory_Equipment.java -text svneol=native#text/plain
src/forge/CardFactory_Lands.java -text svneol=native#text/plain
src/forge/CardFactory_Planeswalkers.java -text svneol=native#text/plain
+src/forge/CardFilter.java -text svneol=native#text/plain
src/forge/CardList.java svneol=native#text/plain
src/forge/CardListFilter.java svneol=native#text/plain
src/forge/CardListUtil.java svneol=native#text/plain
@@ -143,6 +144,7 @@ src/forge/EndOfTurn.java svneol=native#text/plain
src/forge/ExternalPanel.java svneol=native#text/plain
src/forge/FileUtil.java -text svneol=native#text/plain
src/forge/GUI_Filter.java -text svneol=native#text/plain
+src/forge/GUI_Quest_Filter.java -text svneol=native#text/plain
src/forge/GameAction.java svneol=native#text/plain
src/forge/GameActionUtil.java svneol=native#text/plain
src/forge/GenerateConstructedDeck.java svneol=native#text/plain
diff --git a/res/cards.txt b/res/cards.txt
index a43fdb86efa..b797e6a942f 100644
--- a/res/cards.txt
+++ b/res/cards.txt
@@ -164,7 +164,7 @@ no text
Umezawa's Jitte
2
-Artifact Equipment
+Legendary Artifact Equipment
Whenever equipped creature deals combat damage, put two charge counters on Umezawa's Jitte.
Vendilion Clique
@@ -404,7 +404,7 @@ This card can't be the target of spells or abilities your opponents control.
Auramancer
2 W
-Creature Human
+Creature Human Wizard
When Auramancer enters the battlefield, you may return target card from your graveyard to your hand.
2/2
@@ -1407,7 +1407,7 @@ no text
tap: add U
Umara Raptor
-1 U
+2 U
Creature Bird Ally
Whenever Umara Raptor or another Ally enters the battlefield under your control, you may put a +1/+1 counter on Umara Raptor.
1/1
@@ -12071,8 +12071,8 @@ no cost
Land Creature Forest Dryad
no text
1/1
-tap: add G
Dryad Arbor is green.
+tap: add G
Sliversmith
2
diff --git a/res/gui/display_layout.xml b/res/gui/display_layout.xml
index 6e437ee922b..e65fdd2d83e 100644
--- a/res/gui/display_layout.xml
+++ b/res/gui/display_layout.xml
@@ -28,7 +28,7 @@
0
0
244
- 144
+ 143
@@ -47,7 +47,7 @@
@@ -62,9 +62,9 @@
diff --git a/res/main.properties b/res/main.properties
index c56af6b006c..6d9f7081e83 100644
--- a/res/main.properties
+++ b/res/main.properties
@@ -1,6 +1,6 @@
program/mail=mtgerror@yahoo.com
program/forum=http://www.slightlymagic.net/forum/viewforum.php?f=26
-program/version=MTG Forge -- official beta: 09/11/25, SVN revision: 102
+program/version=MTG Forge -- official beta: 09/11/25, SVN revision: 103
tokens--file=AllTokens.txt
@@ -23,4 +23,5 @@ quest--properties=quest/quest.properties
lang--transparent-properties=lang/lang.properties
-image/base--file=pics
\ No newline at end of file
+image/base--file=pics
+image/token--file=pics/tokens
\ No newline at end of file
diff --git a/src/forge/Ability_Mana.java b/src/forge/Ability_Mana.java
index 0e9bd08e6d7..fa5defa8f13 100644
--- a/src/forge/Ability_Mana.java
+++ b/src/forge/Ability_Mana.java
@@ -155,9 +155,12 @@ abstract public class Ability_Mana extends SpellAbility implements java.io.Seria
return !(card.hasSickness() && isTapAbility());
if(card.isCreature() && (!card.hasSickness() || !isTapAbility()))
- return true;
+ return true;
+ //Dryad Arbor, Mishra's Factory, Mutavault, ...
+ else if (card.isCreature() && card.isLand() && card.hasSickness())
+ return false;
else if(card.isArtifact() || card.isGlobalEnchantment() || card.isLand())
- return true;
+ return true;
}
return false;
}
diff --git a/src/forge/CardFactory.java b/src/forge/CardFactory.java
index 00daedc6860..fd85cd017d4 100644
--- a/src/forge/CardFactory.java
+++ b/src/forge/CardFactory.java
@@ -3307,8 +3307,10 @@ public class CardFactory implements NewConstants {
for(int i = 0; i < 7; i++)
AllZone.GameAction.drawCard(player);
- library.remove(card);
- grave.add(card);
+ if (card.getController().equals(player)) {
+ library.remove(card);
+ grave.add(card);
+ }
}
// Simple, If computer has two or less playable cards remaining in hand play Timetwister
@@ -5424,7 +5426,7 @@ public class CardFactory implements NewConstants {
PlayerZone library = AllZone.getZone(Constant.Zone.Library, card.getController());
return library.getCards().length != 0 && AllZone.Phase.getActivePlayer().equals(card.getController())
- && !AllZone.Phase.getPhase().equals("End of Turn");
+ && !AllZone.Phase.getPhase().equals("End of Turn") && super.canPlay();
}
public boolean canPlayAI()
{
diff --git a/src/forge/CardFactoryUtil.java b/src/forge/CardFactoryUtil.java
index d9c000d45e2..a28c0653fb1 100644
--- a/src/forge/CardFactoryUtil.java
+++ b/src/forge/CardFactoryUtil.java
@@ -1139,6 +1139,26 @@ public class CardFactoryUtil
Card rebel = (Card)o;
lib.remove(rebel);
play.add(rebel);
+ if (rebel.isAura())
+ {
+ Object obj = null;
+ if (rebel.getKeyword().contains("Enchant creature"))
+ {
+ PlayerZone oppPlay = AllZone.getZone(Constant.Zone.Play, Constant.Player.Computer);
+ CardList creats = new CardList(play.getCards());
+ creats.addAll(oppPlay.getCards());
+ creats = creats.getType("Creature");
+ obj = AllZone.Display.getChoiceOptional("Pick a creature to attach "+rebel.getName() + " to",creats.toArray() );
+ }
+ if (obj != null)
+ {
+ Card target = (Card)obj;
+ if(AllZone.GameAction.isCardInPlay(target)) {
+ rebel.enchantCard(target);
+ }
+ }
+
+ }
}
}
AllZone.GameAction.shuffle(sourceCard.getController());
diff --git a/src/forge/CardFactory_Creatures.java b/src/forge/CardFactory_Creatures.java
index a883926ba02..2c32a7221cc 100644
--- a/src/forge/CardFactory_Creatures.java
+++ b/src/forge/CardFactory_Creatures.java
@@ -14886,28 +14886,30 @@ public class CardFactory_Creatures {
{
public void resolve()
{
- boolean artifact = false;
- card.setBaseAttack(4);
- card.setBaseDefense(4);
-
- card.removeIntrinsicKeyword("Flying");
- card.removeIntrinsicKeyword("First Strike");
-
- if (card.isArtifact())
- artifact = true;
-
- card.setType(new ArrayList());
- if (artifact)
- card.addType("Artifact");
- card.addType("Creature");
- card.addType("Kithkin");
- card.addType("Spirit");
- card.addType("Warrior");
+ if (card.getType().contains("Spirit") || card.getKeyword().contains("Changeling")) {
+ boolean artifact = false;
+ card.setBaseAttack(4);
+ card.setBaseDefense(4);
+
+ card.removeIntrinsicKeyword("Flying");
+ card.removeIntrinsicKeyword("First Strike");
+
+ if (card.isArtifact())
+ artifact = true;
+
+ card.setType(new ArrayList());
+ if (artifact)
+ card.addType("Artifact");
+ card.addType("Creature");
+ card.addType("Kithkin");
+ card.addType("Spirit");
+ card.addType("Warrior");
+ }
}
public boolean canPlay()
{
- return card.getType().contains("Spirit");
+ return card.getType().contains("Spirit") || card.getKeyword().contains("Changeling");
}
public boolean canPlayAI()
@@ -14926,28 +14928,30 @@ public class CardFactory_Creatures {
{
public void resolve()
{
- boolean artifact = false;
- card.setBaseAttack(8);
- card.setBaseDefense(8);
-
- card.addIntrinsicKeyword("Flying");
- card.addIntrinsicKeyword("First Strike");
-
- if (card.isArtifact())
- artifact = true;
-
- card.setType(new ArrayList());
- if (artifact)
- card.addType("Artifact");
- card.addType("Creature");
- card.addType("Kithkin");
- card.addType("Spirit");
- card.addType("Warrior");
- card.addType("Avatar");
+ if (card.getType().contains("Warrior") || card.getKeyword().contains("Changeling")) {
+ boolean artifact = false;
+ card.setBaseAttack(8);
+ card.setBaseDefense(8);
+
+ card.addIntrinsicKeyword("Flying");
+ card.addIntrinsicKeyword("First Strike");
+
+ if (card.isArtifact())
+ artifact = true;
+
+ card.setType(new ArrayList());
+ if (artifact)
+ card.addType("Artifact");
+ card.addType("Creature");
+ card.addType("Kithkin");
+ card.addType("Spirit");
+ card.addType("Warrior");
+ card.addType("Avatar");
+ }
}
public boolean canPlay()
{
- return card.getType().contains("Warrior");
+ return card.getType().contains("Warrior") || card.getKeyword().contains("Changeling");
}
public boolean canPlayAI()
{
diff --git a/src/forge/CardFilter.java b/src/forge/CardFilter.java
new file mode 100644
index 00000000000..7582b71aba0
--- /dev/null
+++ b/src/forge/CardFilter.java
@@ -0,0 +1,197 @@
+package forge;
+
+public class CardFilter {
+
+
+ public CardList CardListNameFilter(CardList all, String name)
+ {
+ Card CardName = new Card();
+ String s;
+ s="";
+ CardList listFilter = new CardList();
+ for(int i=0;i=0)
+ {
+ listFilter.add(CardName);
+
+ }
+
+ }
+
+ return listFilter;
+ }
+
+ public CardList CardListTextFilter(CardList all, String name)
+ {
+ Card CardName = new Card();
+ String s;
+ s="";
+ CardList listFilter = new CardList();
+ for(int i=0;i=0)
+ {
+ listFilter.add(CardName);
+
+ }
+
+ }
+
+ return listFilter;
+ }
+
+
+ public CardList CardListColorFilter(CardList all, String name)
+ {
+ Card CardName = new Card();
+ CardList listFilter = new CardList();
+
+ if(name=="black"){
+ for(int i=0;i