Merge pull request #5865 from tool4ever/uphill

Fix Uphill Battle
This commit is contained in:
tool4ever
2024-08-11 20:26:46 +02:00
committed by GitHub
13 changed files with 15 additions and 47 deletions

View File

@@ -842,7 +842,6 @@ public class GameAction {
}
if (zoneTo.is(ZoneType.Stack)) {
// zoneFrom maybe null if the spell is cast from "Ouside the game", ex. ability of Garth One-Eye
c.setCastFrom(zoneFrom);
if (cause != null && cause.isSpell() && c.equals(cause.getHostCard())) {
c.setCastSA(cause);

View File

@@ -854,7 +854,7 @@ public final class GameActionUtil {
return;
}
if (fromZone != null) { // and not a copy
if (fromZone != null && !fromZone.is(ZoneType.None)) { // and not a copy
// might have been an alternative lki host
oldCard = ability.getCardState().getCard();

View File

@@ -21,12 +21,6 @@ import forge.util.Localizer;
public class PhasesEffect extends SpellAbilityEffect {
// ******************************************
// ************** Phases ********************
// ******************************************
// Phases generally Phase Out. Time and Tide is the only card that can force
// Phased Out cards in.
/* (non-Javadoc)
* @see forge.card.abilityfactory.SpellEffect#resolve(java.util.Map, forge.card.spellability.SpellAbility)
*/
@@ -56,10 +50,8 @@ public class PhasesEffect extends SpellAbilityEffect {
tgtCards = game.getCardsIn(ZoneType.Battlefield);
}
tgtCards = AbilityUtils.filterListByType(tgtCards, sa.getParam("AllValid"), sa);
} else if (sa.hasParam("Defined")) {
tgtCards = AbilityUtils.getDefinedCards(source, sa.getParam("Defined"), sa);
} else {
tgtCards = getTargetCards(sa);
tgtCards = getDefinedCardsOrTargeted(sa);
}
if (sa.hasParam("AnyNumber")) {
tgtCards = activator.getController().chooseCardsForEffect(tgtCards, sa,

View File

@@ -169,6 +169,7 @@ public class PlayEffect extends SpellAbilityEffect {
// so it gets added to stack
card.setCopiedPermanent(card);
card.setToken(true);
card.setZone(controller.getZone(ZoneType.None));
tgtCards = new CardCollection(card);
} else {
tgtCards = new CardCollection();

View File

@@ -1700,7 +1700,7 @@ public class CardFactoryUtil {
final String[] k = keyword.split(":");
String renownTrig = "Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player"
+ " | IsPresent$ Card.Self+IsNotRenowned | CombatDamage$ True | Secondary$ True"
+ " | IsPresent$ Card.Self+!IsRenowned | CombatDamage$ True | Secondary$ True"
+ " | TriggerDescription$ Renown " + k[1] +" (" + inst.getReminderText() + ")";
final String effect = "DB$ PutCounter | Defined$ Self | "
@@ -3229,7 +3229,7 @@ public class CardFactoryUtil {
String desc = "Monstrosity " + magnitude;
String effect = "AB$ PutCounter | Cost$ " + manacost + " | ConditionPresent$ "
+ "Card.Self+IsNotMonstrous | Monstrosity$ True | CounterNum$ " + magnitude
+ "Card.Self+!IsMonstrous | Monstrosity$ True | CounterNum$ " + magnitude
+ " | CounterType$ P1P1 | StackDescription$ SpellDescription";
if (reduceCost != null) {
effect += "| ReduceCost$ " + reduceCost;
@@ -4149,7 +4149,7 @@ public class CardFactoryUtil {
SpellAbility saExile = AbilityFactory.getAbility(abExile, card);
String abEffect = "DB$ Effect | RememberObjects$ Self | StaticAbilities$ Play | ForgetOnMoved$ Exile | Duration$ Permanent | ConditionDefined$ Self | ConditionPresent$ Card.nonCopiedSpell+nonToken";
String abEffect = "DB$ Effect | RememberObjects$ Self | StaticAbilities$ Play | ForgetOnMoved$ Exile | Duration$ Permanent | ConditionDefined$ Self | ConditionPresent$ Card.!copiedSpell+nonToken";
AbilitySub saEffect = (AbilitySub)AbilityFactory.getAbility(abEffect, card);
StringBuilder sbPlay = new StringBuilder();

View File

@@ -1456,10 +1456,6 @@ public class CardProperty {
if (!card.isCopiedSpell()) {
return false;
}
} else if (property.startsWith("nonCopiedSpell")) {
if (card.isCopiedSpell()) {
return false;
}
} else if (property.startsWith("hasXCost")) {
ManaCost cost = card.getManaCost();
if (cost == null || cost.countX() <= 0) {
@@ -1481,10 +1477,6 @@ public class CardProperty {
if (!source.getExploited().contains(card)) {
return false;
}
} else if (property.startsWith("unequalPT")) {
if (card.getNetPower() == card.getNetToughness()) {
return false;
}
} else if (property.startsWith("equalPT")) {
if (card.getNetPower() != card.getNetToughness()) {
return false;
@@ -1899,18 +1891,10 @@ public class CardProperty {
if (card.getDevouredCards().isEmpty()) {
return false;
}
} else if (property.equals("HasNotDevoured")) {
if (!card.getDevouredCards().isEmpty()) {
return false;
}
} else if (property.equals("IsMonstrous")) {
if (!card.isMonstrous()) {
return false;
}
} else if (property.equals("IsNotMonstrous")) {
if (card.isMonstrous()) {
return false;
}
} else if (property.equals("IsUnearthed")) {
if (!card.isUnearthed()) {
return false;
@@ -1919,10 +1903,6 @@ public class CardProperty {
if (!card.isRenowned()) {
return false;
}
} else if (property.equals("IsNotRenowned")) {
if (card.isRenowned()) {
return false;
}
} else if (property.equals("IsSolved")) {
if (!card.isSolved()) {
return false;
@@ -1945,10 +1925,6 @@ public class CardProperty {
if (!card.isSuspected()) {
return false;
}
} else if (property.equals("IsUnsuspected")) {
if (card.isSuspected()) {
return false;
}
} else if (property.equals("IsRemembered")) {
if (!source.isRemembered(card)) {
return false;