mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 19:28:01 +00:00
Merge branch 'fixXonCancel' into 'master'
GameAction: refactor setting CastSA Closes #1320 See merge request core-developers/forge!2585
This commit is contained in:
@@ -91,9 +91,6 @@ public class ComputerUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
source.setCastSA(sa);
|
|
||||||
sa.setLastStateBattlefield(game.getLastStateBattlefield());
|
|
||||||
sa.setLastStateGraveyard(game.getLastStateGraveyard());
|
|
||||||
sa.setHostCard(game.getAction().moveToStack(source, sa));
|
sa.setHostCard(game.getAction().moveToStack(source, sa));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -219,9 +216,6 @@ public class ComputerUtil {
|
|||||||
|
|
||||||
final Card source = sa.getHostCard();
|
final Card source = sa.getHostCard();
|
||||||
if (sa.isSpell() && !source.isCopiedSpell()) {
|
if (sa.isSpell() && !source.isCopiedSpell()) {
|
||||||
source.setCastSA(sa);
|
|
||||||
sa.setLastStateBattlefield(game.getLastStateBattlefield());
|
|
||||||
sa.setLastStateGraveyard(game.getLastStateGraveyard());
|
|
||||||
sa.setHostCard(game.getAction().moveToStack(source, sa));
|
sa.setHostCard(game.getAction().moveToStack(source, sa));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -246,9 +240,6 @@ public class ComputerUtil {
|
|||||||
|
|
||||||
final Card source = sa.getHostCard();
|
final Card source = sa.getHostCard();
|
||||||
if (sa.isSpell() && !source.isCopiedSpell()) {
|
if (sa.isSpell() && !source.isCopiedSpell()) {
|
||||||
source.setCastSA(sa);
|
|
||||||
sa.setLastStateBattlefield(game.getLastStateBattlefield());
|
|
||||||
sa.setLastStateGraveyard(game.getLastStateGraveyard());
|
|
||||||
sa.setHostCard(game.getAction().moveToStack(source, sa));
|
sa.setHostCard(game.getAction().moveToStack(source, sa));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -267,9 +258,6 @@ public class ComputerUtil {
|
|||||||
|
|
||||||
final Card source = newSA.getHostCard();
|
final Card source = newSA.getHostCard();
|
||||||
if (newSA.isSpell() && !source.isCopiedSpell()) {
|
if (newSA.isSpell() && !source.isCopiedSpell()) {
|
||||||
source.setCastSA(newSA);
|
|
||||||
sa.setLastStateBattlefield(game.getLastStateBattlefield());
|
|
||||||
sa.setLastStateGraveyard(game.getLastStateGraveyard());
|
|
||||||
newSA.setHostCard(game.getAction().moveToStack(source, sa));
|
newSA.setHostCard(game.getAction().moveToStack(source, sa));
|
||||||
|
|
||||||
if (newSA.getApi() == ApiType.Charm && !newSA.isWrapper()) {
|
if (newSA.getApi() == ApiType.Charm && !newSA.isWrapper()) {
|
||||||
@@ -290,9 +278,6 @@ public class ComputerUtil {
|
|||||||
if (ComputerUtilCost.canPayCost(sa, ai)) {
|
if (ComputerUtilCost.canPayCost(sa, ai)) {
|
||||||
final Card source = sa.getHostCard();
|
final Card source = sa.getHostCard();
|
||||||
if (sa.isSpell() && !source.isCopiedSpell()) {
|
if (sa.isSpell() && !source.isCopiedSpell()) {
|
||||||
source.setCastSA(sa);
|
|
||||||
sa.setLastStateBattlefield(game.getLastStateBattlefield());
|
|
||||||
sa.setLastStateGraveyard(game.getLastStateGraveyard());
|
|
||||||
sa.setHostCard(game.getAction().moveToStack(source, sa));
|
sa.setHostCard(game.getAction().moveToStack(source, sa));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -547,6 +547,13 @@ public class GameAction {
|
|||||||
c.setCastSA(null);
|
c.setCastSA(null);
|
||||||
} else if (zoneTo.is(ZoneType.Stack)) {
|
} else if (zoneTo.is(ZoneType.Stack)) {
|
||||||
c.setCastFrom(zoneFrom.getZoneType());
|
c.setCastFrom(zoneFrom.getZoneType());
|
||||||
|
if (cause != null && cause.isSpell() && c.equals(cause.getHostCard()) && !c.isCopiedSpell()) {
|
||||||
|
cause.setLastStateBattlefield(game.getLastStateBattlefield());
|
||||||
|
cause.setLastStateGraveyard(game.getLastStateGraveyard());
|
||||||
|
c.setCastSA(cause);
|
||||||
|
} else {
|
||||||
|
c.setCastSA(null);
|
||||||
|
}
|
||||||
} else if (!(zoneTo.is(ZoneType.Battlefield) && zoneFrom.is(ZoneType.Stack))) {
|
} else if (!(zoneTo.is(ZoneType.Battlefield) && zoneFrom.is(ZoneType.Stack))) {
|
||||||
c.setCastFrom(null);
|
c.setCastFrom(null);
|
||||||
c.setCastSA(null);
|
c.setCastSA(null);
|
||||||
|
|||||||
@@ -6353,6 +6353,10 @@ public class Card extends GameEntity implements Comparable<Card> {
|
|||||||
removeSVar("PayX"); // Temporary AI X announcement variable
|
removeSVar("PayX"); // Temporary AI X announcement variable
|
||||||
removeSVar("IsCastFromPlayEffect"); // Temporary SVar indicating that the spell is cast indirectly via AF Play
|
removeSVar("IsCastFromPlayEffect"); // Temporary SVar indicating that the spell is cast indirectly via AF Play
|
||||||
setSunburstValue(0); // Sunburst
|
setSunburstValue(0); // Sunburst
|
||||||
|
setXManaCostPaid(0);
|
||||||
|
setXManaCostPaidByColor(null);
|
||||||
|
setKickerMagnitude(0);
|
||||||
|
setPseudoMultiKickerMagnitude(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final int getFinalChapterNr() {
|
public final int getFinalChapterNr() {
|
||||||
|
|||||||
@@ -882,6 +882,10 @@ public class Combat {
|
|||||||
return true; // is blocking something at the moment
|
return true; // is blocking something at the moment
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!blocker.isLKI()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
CombatLki lki = lkiCache.get(blocker);
|
CombatLki lki = lkiCache.get(blocker);
|
||||||
return null != lki && !lki.isAttacker; // was blocking something anyway
|
return null != lki && !lki.isAttacker; // was blocking something anyway
|
||||||
}
|
}
|
||||||
@@ -893,6 +897,10 @@ public class Combat {
|
|||||||
return true; // is blocking the attacker's band at the moment
|
return true; // is blocking the attacker's band at the moment
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!blocker.isLKI()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
CombatLki lki = lkiCache.get(blocker);
|
CombatLki lki = lkiCache.get(blocker);
|
||||||
return null != lki && !lki.isAttacker && lki.relatedBands.contains(ab); // was blocking that very band
|
return null != lki && !lki.isAttacker && lki.relatedBands.contains(ab); // was blocking that very band
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1299,6 +1299,7 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
|
|||||||
String announce = getParam("Announce");
|
String announce = getParam("Announce");
|
||||||
if (StringUtils.isBlank(announce)) {
|
if (StringUtils.isBlank(announce)) {
|
||||||
mapParams.put("Announce", variable);
|
mapParams.put("Announce", variable);
|
||||||
|
originalMapParams.put("Announce", variable);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String[] announcedOnes = TextUtil.split(announce, ',');
|
String[] announcedOnes = TextUtil.split(announce, ',');
|
||||||
@@ -1308,6 +1309,7 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
mapParams.put("Announce", announce + ";" + variable);
|
mapParams.put("Announce", announce + ";" + variable);
|
||||||
|
originalMapParams.put("Announce", announce + ";" + variable);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isXCost() {
|
public boolean isXCost() {
|
||||||
|
|||||||
@@ -105,10 +105,7 @@ public class HumanPlaySpellAbility {
|
|||||||
if (ability.isSpell() && !ability.isCastFaceDown() && fromState == CardStateName.FaceDown) {
|
if (ability.isSpell() && !ability.isCastFaceDown() && fromState == CardStateName.FaceDown) {
|
||||||
c.turnFaceUp();
|
c.turnFaceUp();
|
||||||
}
|
}
|
||||||
c.setCastSA(ability);
|
ability.setHostCard(game.getAction().moveToStack(c, ability));
|
||||||
ability.setLastStateBattlefield(game.getLastStateBattlefield());
|
|
||||||
ability.setLastStateGraveyard(game.getLastStateGraveyard());
|
|
||||||
ability.setHostCard(game.getAction().moveToStack(c, null));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ability.isCopied()) {
|
if (!ability.isCopied()) {
|
||||||
|
|||||||
Reference in New Issue
Block a user