This commit is contained in:
Grimm
2021-12-07 23:04:03 +01:00
16 changed files with 46 additions and 16 deletions

View File

@@ -1967,7 +1967,6 @@ public class GameAction {
}
// If pl has Backup Plan as a Conspiracy draw that many extra hands
}
// Choose starting hand for each player with multiple hands

View File

@@ -69,7 +69,6 @@ public class MustBlockEffect extends SpellAbilityEffect {
}
}
}
} // mustBlockResolve()
@Override

View File

@@ -38,17 +38,26 @@ public class RestartGameEffect extends SpellAbilityEffect {
forge.game.trigger.Trigger.resetIDs();
TriggerHandler trigHandler = game.getTriggerHandler();
trigHandler.clearDelayedTrigger();
trigHandler.clearPlayerDefinedDelayedTrigger();
trigHandler.suppressMode(TriggerType.ChangesZone);
// Avoid Psychic Surgery trigger in new game
trigHandler.suppressMode(TriggerType.Shuffled);
game.getPhaseHandler().resetExtra();
game.getPhaseHandler().setPlayerDeclaresAttackers(null);
game.getPhaseHandler().setPlayerDeclaresBlockers(null);
game.getUntap().clearCommands();
game.getUpkeep().clearCommands();
game.getEndOfCombat().clearCommands();
game.getEndOfTurn().clearCommands();
game.getCleanup().clearCommands();
game.getStack().reset();
game.clearCounterAddedThisTurn();
game.resetPlayersAttackedOnNextTurn();
game.resetPlayersAttackedOnNextTurn();
game.setMonarch(null);
game.setDayTime(null);
GameAction action = game.getAction();
for (Player p: players) {
@@ -57,9 +66,13 @@ public class RestartGameEffect extends SpellAbilityEffect {
p.resetSpellCastThisGame();
p.onCleanupPhase();
p.setLandsPlayedLastTurn(0);
p.setSpellsCastLastTurn(0);
p.setLifeLostLastTurn(0);
p.resetCommanderStats();
p.resetCompletedDungeons();
p.setBlessing(false);
p.clearController();
p.setMustAttackEntity(null);
CardCollection newLibrary = new CardCollection(p.getCardsIn(restartZones, false));
List<Card> filteredCards = null;

View File

@@ -6157,7 +6157,9 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
}
public void onCleanupPhase(final Player turn) {
if (!this.hasKeyword("Damage isn't removed from CARDNAME during cleanup steps.")) {
setDamage(0);
}
setHasBeenDealtDeathtouchDamage(false);
resetReceivedDamageFromThisTurn();
setRegeneratedThisTurn(0);

View File

@@ -51,6 +51,14 @@ public class Phase implements java.io.Serializable {
private final HashMap<Player, ArrayList<GameCommand>> untilEndMap = new HashMap<>();
private final HashMap<Player, ArrayList<GameCommand>> registerMap = new HashMap<>();
public void clearCommands() {
at.clear();
until.clear();
untilMap.clear();
untilEndMap.clear();
registerMap.clear();
}
/**
* <p>
* Add a hardcoded trigger that will execute "at <phase>".

View File

@@ -67,6 +67,7 @@ public class LandAbility extends Ability {
return p.canPlayLand(land, false, this);
}
@Override
public void resolve() {
getHostCard().setSplitStateToPlayAbility(this);
@@ -81,6 +82,7 @@ public class LandAbility extends Ability {
result.setState(CardStateName.Original, true);
}
}
@Override
public String toUnsuppressedString() {
StringBuilder sb = new StringBuilder("Play land");

View File

@@ -132,7 +132,6 @@ public abstract class Spell extends SpellAbility implements java.io.Serializable
@Override
public boolean isAbility() { return false; }
/**
* @return the castFaceDown
*/

View File

@@ -230,7 +230,6 @@ public class SpellAbilityCondition extends SpellAbilityVariables {
if (params.containsKey("ConditionTargetsSingleTarget")) {
this.setTargetsSingleTarget(true);
}
} // setConditions
/**
@@ -390,8 +389,7 @@ public class SpellAbilityCondition extends SpellAbilityVariables {
int life = 1;
if (this.getLifeTotal().equals("OpponentSmallest")) {
life = activator.getOpponentsSmallestLifeTotal();
}
else {
} else {
life = AbilityUtils.getDefinedPlayers(host, this.getLifeTotal(), sa).getFirst().getLife();
}
@@ -432,7 +430,6 @@ public class SpellAbilityCondition extends SpellAbilityVariables {
if (matchTgt == null || matchTgt.getFirstTargetedSpell() == null
|| matchTgt.getFirstTargetedSpell().getTargets() == null) {
return false;
}
Set<GameObject> targets = new HashSet<>();

View File

@@ -604,7 +604,7 @@ public class SpellAbilityRestriction extends SpellAbilityVariables {
int activationLimit = AbilityUtils.calculateAmount(c, limit, sa);
this.setActivationLimit(activationLimit);
if ((this.getActivationLimit() != -1) && (sa.getActivationsThisTurn() >= this.getActivationLimit())) {
if (this.getActivationLimit() != -1 && sa.getActivationsThisTurn() >= this.getActivationLimit()) {
return false;
}
}
@@ -614,7 +614,7 @@ public class SpellAbilityRestriction extends SpellAbilityVariables {
int gameActivationLimit = AbilityUtils.calculateAmount(c, limit, sa);
this.setGameActivationLimit(gameActivationLimit);
if ((this.getGameActivationLimit() != -1) && (sa.getActivationsThisGame() >= this.getGameActivationLimit())) {
if (this.getGameActivationLimit() != -1 && sa.getActivationsThisGame() >= this.getGameActivationLimit()) {
return false;
}
}

View File

@@ -57,7 +57,6 @@ public class SpellPermanent extends SpellApiBased {
if (this.getPayCosts().getTotalMana().countX() > 0 && StringUtils.isNotBlank(getHostCard().getSVar("X"))) {
this.setSVar("X", this.getHostCard().getSVar("X"));
}
} // Spell_Permanent()
}

View File

@@ -93,6 +93,10 @@ public class TriggerHandler {
playerDefinedDelayedTriggers.put(player, trig);
}
public final void clearPlayerDefinedDelayedTrigger() {
playerDefinedDelayedTriggers.clear();
}
public final void handlePlayerDefinedDelTriggers(final Player player) {
delayedTriggers.addAll(playerDefinedDelayedTriggers.removeAll(player));
}

View File

@@ -0,0 +1,8 @@
Name:Patient Zero
ManaCost:1 B
Types:Creature Zombie
PT:2/2
K:Lifelink
S:Mode$ Continuous | Affected$ Creature.OppCtrl | AddHiddenKeyword$ Damage isn't removed from CARDNAME during cleanup steps. | Description$ Damage isn't removed from creatures your opponents control during cleanup steps.
DeckHas:Ability$LifeGain
Oracle:Lifelink\nDamage isn't removed from creatures your opponents control during cleanup steps.