mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 04:38:00 +00:00
- Fixed the crash that happens when destroying tokens.
- Fixed the Hunted creatures (tokens will be given to the opponent). - Academy Rector can now fetch Auras and attach them to creatures (or lands). - Fixed Crib Swap and Pongify.
This commit is contained in:
@@ -187,7 +187,7 @@ public class Card extends MyObservable
|
||||
return !hasFirstStrike() || (hasFirstStrike() && hasDoubleStrike());
|
||||
};
|
||||
|
||||
//for Planeswalker abilities and Effects (like Wither), Doubling Season gets ignored.
|
||||
//for Planeswalker abilities and Combat Damage (like Wither), Doubling Season gets ignored.
|
||||
public void addCounterFromNonEffect(Counters counterName, int n)
|
||||
{
|
||||
if(counters.containsKey(counterName))
|
||||
@@ -684,7 +684,7 @@ public class Card extends MyObservable
|
||||
public String getController(){return controller;}
|
||||
|
||||
public void setName(String s) {name = s; this.updateObservers();}
|
||||
public void setOwner(String player) {owner = player;}
|
||||
public void setOwner(String player) {owner = player; this.updateObservers();}
|
||||
public void setController(String player){controller = player; this.updateObservers();}
|
||||
|
||||
public ArrayList<Card> getEquippedBy()
|
||||
|
||||
@@ -4230,7 +4230,8 @@ public class CardFactory implements NewConstants {
|
||||
{
|
||||
if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canTarget(card,getTargetCard()) )
|
||||
{
|
||||
CardFactoryUtil.makeToken("Ape", "G 3 3 Ape", card, "G", new String[] {"Creature", "Ape"}, 3, 3, new String[] {""} );
|
||||
CardFactoryUtil.makeToken("Ape", "G 3 3 Ape", AllZone.GameAction.getOpponent(card.getController()), "G",
|
||||
new String[] {"Creature", "Ape"}, 3, 3, new String[] {""} );
|
||||
AllZone.GameAction.destroyNoRegeneration(getTargetCard());
|
||||
}
|
||||
}//resolve()
|
||||
@@ -5593,7 +5594,8 @@ public class CardFactory implements NewConstants {
|
||||
{
|
||||
if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canTarget(card, getTargetCard()) )
|
||||
{
|
||||
CardFactoryUtil.makeToken("Shapeshifter", "C 1 1 Shapeshifter", card, "", new String[] {"Creature", "Shapeshifter"}, 1, 1, new String[] {"Changeling"} );
|
||||
CardFactoryUtil.makeToken("Shapeshifter", "C 1 1 Shapeshifter", AllZone.GameAction.getOpponent(card.getController()), "",
|
||||
new String[] {"Creature", "Shapeshifter"}, 1, 1, new String[] {"Changeling"} );
|
||||
//remove card from play
|
||||
AllZone.GameAction.removeFromGame(getTargetCard());
|
||||
}
|
||||
@@ -17259,7 +17261,12 @@ return land.size() > 1 && CardFactoryUtil.AI_isMainPhase();
|
||||
c.setType(sim.getType());
|
||||
c.setText(sim.getSpellText());
|
||||
c.setManaCost(sim.getManaCost());
|
||||
|
||||
|
||||
if (!sim.getOwner().equals(""))
|
||||
c.setOwner(sim.getOwner());
|
||||
if (!sim.getController().equals(""))
|
||||
c.setController(sim.getController());
|
||||
|
||||
return c;
|
||||
}// copyStats()
|
||||
|
||||
|
||||
@@ -3185,8 +3185,8 @@ public class CardFactoryUtil
|
||||
c.setName(name);
|
||||
c.setImageName(imageName);
|
||||
|
||||
c.setOwner(source.getController());
|
||||
c.setController(source.getController());
|
||||
c.setOwner(source.getOwner());
|
||||
|
||||
c.setManaCost(manaCost);
|
||||
c.setToken(true);
|
||||
@@ -3217,6 +3217,45 @@ public class CardFactoryUtil
|
||||
|
||||
}
|
||||
|
||||
public static CardList makeToken(String name, String imageName, String controller, String manaCost, String[] types, int baseAttack, int baseDefense,
|
||||
String[] intrinsicKeywords)
|
||||
{
|
||||
CardList list = new CardList();
|
||||
Card c = new Card();
|
||||
c.setName(name);
|
||||
c.setImageName(imageName);
|
||||
|
||||
c.setController(controller);
|
||||
c.setOwner(controller);
|
||||
|
||||
c.setManaCost(manaCost);
|
||||
c.setToken(true);
|
||||
|
||||
for (String t : types)
|
||||
c.addType(t);
|
||||
|
||||
c.setBaseAttack(baseAttack);
|
||||
c.setBaseDefense(baseDefense);
|
||||
|
||||
for (String kw : intrinsicKeywords)
|
||||
c.addIntrinsicKeyword(kw);
|
||||
|
||||
PlayerZone play = AllZone.getZone(Constant.Zone.Play, controller);
|
||||
|
||||
int multiplier = 1;
|
||||
int doublingSeasons = CardFactoryUtil.getCards("Doubling Season", controller).size();
|
||||
if (doublingSeasons > 0)
|
||||
multiplier = (int) Math.pow(2, doublingSeasons);
|
||||
|
||||
for (int i=0;i<multiplier;i++) {
|
||||
Card temp = CardFactory.copyStats(c);
|
||||
temp.setToken(true);
|
||||
play.add(temp);
|
||||
list.add(temp);
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
//may return null
|
||||
static public Card getRandomCard(CardList list)
|
||||
{
|
||||
|
||||
@@ -1343,8 +1343,9 @@ public class CardFactory_Creatures {
|
||||
{
|
||||
public void resolve()
|
||||
{
|
||||
String opp = AllZone.GameAction.getOpponent(card.getController());
|
||||
for(int i = 0; i < 5; i++)
|
||||
CardFactoryUtil.makeToken("Goblin", "R 1 1 Goblin", card, "R", new String[]{"Creature", "Goblin"}, 1, 1, new String[] {""});
|
||||
CardFactoryUtil.makeToken("Goblin", "R 1 1 Goblin", opp, "R", new String[]{"Creature", "Goblin"}, 1, 1, new String[] {""});
|
||||
}
|
||||
};//SpellAbility
|
||||
|
||||
@@ -1369,8 +1370,9 @@ public class CardFactory_Creatures {
|
||||
{
|
||||
public void resolve()
|
||||
{
|
||||
String opp = AllZone.GameAction.getOpponent(card.getController());
|
||||
for(int i = 0; i < 2; i++)
|
||||
CardFactoryUtil.makeToken("Centaur", "G 3 3 Centaur", card, "G", new String[]{"Creature", "Centaur"}, 3, 3,
|
||||
CardFactoryUtil.makeToken("Centaur", "G 3 3 Centaur", opp, "G", new String[]{"Creature", "Centaur"}, 3, 3,
|
||||
new String[] {"Protection from black"});
|
||||
}
|
||||
};//SpellAbility
|
||||
@@ -1393,9 +1395,11 @@ public class CardFactory_Creatures {
|
||||
{
|
||||
final SpellAbility ability = new Ability(card, "0")
|
||||
{
|
||||
|
||||
public void resolve()
|
||||
{
|
||||
CardFactoryUtil.makeToken("Horror", "B 4 4 Horror", card, "B", new String[]{"Creature", "Horror"}, 4, 4, new String[] {""});
|
||||
String opp = AllZone.GameAction.getOpponent(card.getController());
|
||||
CardFactoryUtil.makeToken("Horror", "B 4 4 Horror", opp, "B", new String[]{"Creature", "Horror"}, 4, 4, new String[] {""});
|
||||
}
|
||||
};//SpellAbility
|
||||
|
||||
@@ -1420,8 +1424,9 @@ public class CardFactory_Creatures {
|
||||
{
|
||||
public void resolve()
|
||||
{
|
||||
String opp = AllZone.GameAction.getOpponent(card.getController());
|
||||
for(int i = 0; i < 3; i++)
|
||||
CardFactoryUtil.makeToken("Knight", "W 2 2 Knight", card, "W", new String[]{"Creature", "Knight"}, 2, 2, new String[] {"First Strike"});
|
||||
CardFactoryUtil.makeToken("Knight", "W 2 2 Knight", opp, "W", new String[]{"Creature", "Knight"}, 2, 2, new String[] {"First Strike"});
|
||||
}
|
||||
};//SpellAbility
|
||||
|
||||
@@ -1446,8 +1451,9 @@ public class CardFactory_Creatures {
|
||||
{
|
||||
public void resolve()
|
||||
{
|
||||
String opp = AllZone.GameAction.getOpponent(card.getController());
|
||||
for(int i = 0; i < 4; i++)
|
||||
CardFactoryUtil.makeToken("Faerie", "U 1 1 Faerie", card, "U", new String[]{"Creature", "Faerie"}, 1, 1, new String[] {"Flying"});
|
||||
CardFactoryUtil.makeToken("Faerie", "U 1 1 Faerie", opp, "U", new String[]{"Creature", "Faerie"}, 1, 1, new String[] {"Flying"});
|
||||
}
|
||||
};//SpellAbility
|
||||
|
||||
@@ -16238,9 +16244,37 @@ public class CardFactory_Creatures {
|
||||
if (o != null)
|
||||
{
|
||||
PlayerZone play = AllZone.getZone(Constant.Zone.Play, Constant.Player.Human);
|
||||
PlayerZone oppPlay = AllZone.getZone(Constant.Zone.Play, Constant.Player.Computer);
|
||||
Card c = (Card)o;
|
||||
lib.remove(c);
|
||||
play.add(c);
|
||||
|
||||
if (c.isAura())
|
||||
{
|
||||
Object obj = null;
|
||||
if (c.getKeyword().contains("Enchant creature"))
|
||||
{
|
||||
CardList creats = new CardList(play.getCards());
|
||||
creats.addAll(oppPlay.getCards());
|
||||
creats = creats.getType("Creature");
|
||||
obj = AllZone.Display.getChoiceOptional("Pick a creature to attach "+c.getName() + " to",creats.toArray() );
|
||||
}
|
||||
else if (c.getKeyword().contains("Enchant land") || c.getKeyword().contains("Enchant land you control"))
|
||||
{
|
||||
CardList lands = new CardList(play.getCards());
|
||||
//lands.addAll(oppPlay.getCards());
|
||||
lands = lands.getType("Land");
|
||||
if (lands.size() > 0)
|
||||
obj = AllZone.Display.getChoiceOptional("Pick a land to attach "+c.getName() + " to",lands.toArray() );
|
||||
}
|
||||
if (obj != null)
|
||||
{
|
||||
Card target = (Card)obj;
|
||||
if(AllZone.GameAction.isCardInPlay(target)) {
|
||||
c.enchantCard(target);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
AllZone.GameAction.removeFromGame(card);
|
||||
|
||||
@@ -1146,7 +1146,6 @@ public class CombatUtil
|
||||
crd.enchantCard(target);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
AllZone.GameAction.shuffle(c.getController());
|
||||
//we have to have cards like glorious anthem take effect immediately:
|
||||
|
||||
Reference in New Issue
Block a user