Merge remote-tracking branch 'upstream/master' into decks
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>forge</artifactId>
|
<artifactId>forge</artifactId>
|
||||||
<groupId>forge</groupId>
|
<groupId>forge</groupId>
|
||||||
<version>1.6.56-SNAPSHOT</version>
|
<version>1.6.57-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>forge</artifactId>
|
<artifactId>forge</artifactId>
|
||||||
<groupId>forge</groupId>
|
<groupId>forge</groupId>
|
||||||
<version>1.6.56-SNAPSHOT</version>
|
<version>1.6.57-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>forge-ai</artifactId>
|
<artifactId>forge-ai</artifactId>
|
||||||
|
|||||||
@@ -432,7 +432,7 @@ public class ComputerUtilCard {
|
|||||||
* @param list
|
* @param list
|
||||||
* @return a {@link forge.game.card.Card} object.
|
* @return a {@link forge.game.card.Card} object.
|
||||||
*/
|
*/
|
||||||
public static Card getBestCreatureToBounceAI(final CardCollectionView list) {
|
public static Card getBestCreatureToBounceAI(final Iterable<Card> list) {
|
||||||
if (Iterables.size(list) == 1) {
|
if (Iterables.size(list) == 1) {
|
||||||
return Iterables.get(list, 0);
|
return Iterables.get(list, 0);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ public class PlayerControllerAi extends PlayerController {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SpellAbility getAbilityToPlay(Card hostCard, List<SpellAbility> abilities, ITriggerEvent triggerEvent) {
|
public SpellAbility getAbilityToPlay(Card hostCard, List<SpellAbility> abilities, ITriggerEvent triggerEvent) {
|
||||||
if (abilities.size() == 0) {
|
if (abilities.isEmpty()) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return abilities.get(0);
|
return abilities.get(0);
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ public enum SpellApiToAi {
|
|||||||
.put(ApiType.BecomeMonarch, AlwaysPlayAi.class)
|
.put(ApiType.BecomeMonarch, AlwaysPlayAi.class)
|
||||||
.put(ApiType.BecomesBlocked, BecomesBlockedAi.class)
|
.put(ApiType.BecomesBlocked, BecomesBlockedAi.class)
|
||||||
.put(ApiType.BidLife, BidLifeAi.class)
|
.put(ApiType.BidLife, BidLifeAi.class)
|
||||||
|
.put(ApiType.BlankLine, AlwaysPlayAi.class)
|
||||||
.put(ApiType.Bond, BondAi.class)
|
.put(ApiType.Bond, BondAi.class)
|
||||||
.put(ApiType.Branch, AlwaysPlayAi.class)
|
.put(ApiType.Branch, AlwaysPlayAi.class)
|
||||||
.put(ApiType.Camouflage, ChooseCardAi.class)
|
.put(ApiType.Camouflage, ChooseCardAi.class)
|
||||||
@@ -40,6 +41,7 @@ public enum SpellApiToAi {
|
|||||||
.put(ApiType.ChangeX, AlwaysPlayAi.class)
|
.put(ApiType.ChangeX, AlwaysPlayAi.class)
|
||||||
.put(ApiType.ChangeZone, ChangeZoneAi.class)
|
.put(ApiType.ChangeZone, ChangeZoneAi.class)
|
||||||
.put(ApiType.ChangeZoneAll, ChangeZoneAllAi.class)
|
.put(ApiType.ChangeZoneAll, ChangeZoneAllAi.class)
|
||||||
|
.put(ApiType.ChaosEnsues, AlwaysPlayAi.class)
|
||||||
.put(ApiType.Charm, CharmAi.class)
|
.put(ApiType.Charm, CharmAi.class)
|
||||||
.put(ApiType.ChooseCard, ChooseCardAi.class)
|
.put(ApiType.ChooseCard, ChooseCardAi.class)
|
||||||
.put(ApiType.ChooseColor, ChooseColorAi.class)
|
.put(ApiType.ChooseColor, ChooseColorAi.class)
|
||||||
|
|||||||
@@ -1216,7 +1216,7 @@ public class ChangeZoneAi extends SpellAbilityAi {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (choice == null) { // can't find anything left
|
if (choice == null) { // can't find anything left
|
||||||
if (sa.getTargets().size() == 0 || !sa.isTargetNumberValid()) {
|
if (sa.getTargets().isEmpty() || !sa.isTargetNumberValid()) {
|
||||||
if (!mandatory) {
|
if (!mandatory) {
|
||||||
sa.resetTargets();
|
sa.resetTargets();
|
||||||
}
|
}
|
||||||
@@ -1432,7 +1432,7 @@ public class ChangeZoneAi extends SpellAbilityAi {
|
|||||||
final ZoneType destination = ZoneType.smartValueOf(sa.getParam("Destination"));
|
final ZoneType destination = ZoneType.smartValueOf(sa.getParam("Destination"));
|
||||||
final TargetRestrictions tgt = sa.getTargetRestrictions();
|
final TargetRestrictions tgt = sa.getTargetRestrictions();
|
||||||
|
|
||||||
CardCollection list = new CardCollection(CardUtil.getValidCardsToTarget(tgt, sa));
|
List<Card> list = CardUtil.getValidCardsToTarget(tgt, sa);
|
||||||
|
|
||||||
if (list.isEmpty()) {
|
if (list.isEmpty()) {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import java.util.Map;
|
|||||||
|
|
||||||
import com.google.common.base.Predicates;
|
import com.google.common.base.Predicates;
|
||||||
import com.google.common.collect.Iterables;
|
import com.google.common.collect.Iterables;
|
||||||
import com.google.common.collect.Lists;
|
|
||||||
|
|
||||||
import forge.ai.AiController;
|
import forge.ai.AiController;
|
||||||
import forge.ai.AiPlayerPredicates;
|
import forge.ai.AiPlayerPredicates;
|
||||||
@@ -197,8 +196,7 @@ public class ChangeZoneAllAi extends SpellAbilityAi {
|
|||||||
|
|
||||||
// mass zone change for creatures: if in dire danger, do it; otherwise, only do it if the opponent's
|
// mass zone change for creatures: if in dire danger, do it; otherwise, only do it if the opponent's
|
||||||
// creatures are better in value
|
// creatures are better in value
|
||||||
if ((CardLists.getNotType(oppType, "Creature").size() == 0)
|
if (CardLists.getNotType(oppType, "Creature").isEmpty() && CardLists.getNotType(computerType, "Creature").isEmpty()) {
|
||||||
&& (CardLists.getNotType(computerType, "Creature").size() == 0)) {
|
|
||||||
if (game.getCombat() != null && ComputerUtilCombat.lifeInSeriousDanger(ai, game.getCombat())) {
|
if (game.getCombat() != null && ComputerUtilCombat.lifeInSeriousDanger(ai, game.getCombat())) {
|
||||||
if (game.getPhaseHandler().is(PhaseType.COMBAT_DECLARE_BLOCKERS)
|
if (game.getPhaseHandler().is(PhaseType.COMBAT_DECLARE_BLOCKERS)
|
||||||
&& game.getPhaseHandler().getPlayerTurn().isOpponentOf(ai)) {
|
&& game.getPhaseHandler().getPlayerTurn().isOpponentOf(ai)) {
|
||||||
@@ -225,17 +223,15 @@ public class ChangeZoneAllAi extends SpellAbilityAi {
|
|||||||
} else if (origin.equals(ZoneType.Graveyard)) {
|
} else if (origin.equals(ZoneType.Graveyard)) {
|
||||||
if (sa.usesTargeting()) {
|
if (sa.usesTargeting()) {
|
||||||
// search targetable Opponents
|
// search targetable Opponents
|
||||||
final Iterable<Player> oppList = Iterables.filter(ai.getOpponents(),
|
final PlayerCollection oppList = ai.getOpponents().filter(PlayerPredicates.isTargetableBy(sa));
|
||||||
PlayerPredicates.isTargetableBy(sa));
|
|
||||||
|
|
||||||
if (Iterables.isEmpty(oppList)) {
|
if (oppList.isEmpty()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// get the one with the most in graveyard
|
// get the one with the most in graveyard
|
||||||
// zone is visible so evaluate which would be hurt the most
|
// zone is visible so evaluate which would be hurt the most
|
||||||
Player oppTarget = Collections.max(Lists.newArrayList(oppList),
|
Player oppTarget = Collections.max(oppList, AiPlayerPredicates.compareByZoneValue(sa.getParam("ChangeType"), origin, sa));
|
||||||
AiPlayerPredicates.compareByZoneValue(sa.getParam("ChangeType"), origin, sa));
|
|
||||||
|
|
||||||
// set the target
|
// set the target
|
||||||
if (!oppTarget.getCardsIn(ZoneType.Graveyard).isEmpty()) {
|
if (!oppTarget.getCardsIn(ZoneType.Graveyard).isEmpty()) {
|
||||||
@@ -270,18 +266,14 @@ public class ChangeZoneAllAi extends SpellAbilityAi {
|
|||||||
return (curHandSize + minAdv - 1 < numExiledWithSrc) || (!noDiscard && numExiledWithSrc >= ai.getMaxHandSize());
|
return (curHandSize + minAdv - 1 < numExiledWithSrc) || (!noDiscard && numExiledWithSrc >= ai.getMaxHandSize());
|
||||||
}
|
}
|
||||||
} else if (origin.equals(ZoneType.Stack)) {
|
} else if (origin.equals(ZoneType.Stack)) {
|
||||||
// time stop can do something like this:
|
// TODO
|
||||||
// Origin$ Stack | Destination$ Exile | SubAbility$ DBSkip
|
|
||||||
// DBSKipToPhase | DB$SkipToPhase | Phase$ Cleanup
|
|
||||||
// otherwise, this situation doesn't exist
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (destination.equals(ZoneType.Battlefield)) {
|
if (destination.equals(ZoneType.Battlefield)) {
|
||||||
if (sa.hasParam("GainControl")) {
|
if (sa.hasParam("GainControl")) {
|
||||||
// Check if the cards are valuable enough
|
// Check if the cards are valuable enough
|
||||||
if (CardLists.getNotType(oppType, "Creature").size() == 0
|
if (CardLists.getNotType(oppType, "Creature").isEmpty() && CardLists.getNotType(computerType, "Creature").isEmpty()) {
|
||||||
&& CardLists.getNotType(computerType, "Creature").size() == 0) {
|
|
||||||
if ((ComputerUtilCard.evaluateCreatureList(computerType) + ComputerUtilCard
|
if ((ComputerUtilCard.evaluateCreatureList(computerType) + ComputerUtilCard
|
||||||
.evaluateCreatureList(oppType)) < 400) {
|
.evaluateCreatureList(oppType)) < 400) {
|
||||||
return false;
|
return false;
|
||||||
@@ -294,8 +286,7 @@ public class ChangeZoneAllAi extends SpellAbilityAi {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// don't activate if human gets more back than AI does
|
// don't activate if human gets more back than AI does
|
||||||
if ((CardLists.getNotType(oppType, "Creature").size() == 0)
|
if (CardLists.getNotType(oppType, "Creature").isEmpty() && CardLists.getNotType(computerType, "Creature").isEmpty()) {
|
||||||
&& (CardLists.getNotType(computerType, "Creature").size() == 0)) {
|
|
||||||
if (ComputerUtilCard.evaluateCreatureList(computerType) <= (ComputerUtilCard
|
if (ComputerUtilCard.evaluateCreatureList(computerType) <= (ComputerUtilCard
|
||||||
.evaluateCreatureList(oppType) + 100)) {
|
.evaluateCreatureList(oppType) + 100)) {
|
||||||
return false;
|
return false;
|
||||||
@@ -354,8 +345,7 @@ public class ChangeZoneAllAi extends SpellAbilityAi {
|
|||||||
return true;
|
return true;
|
||||||
|
|
||||||
// if AI creature is better than Human Creature
|
// if AI creature is better than Human Creature
|
||||||
return ComputerUtilCard.evaluateCreatureList(aiCards) >= ComputerUtilCard
|
return ComputerUtilCard.evaluateCreatureList(aiCards) >= ComputerUtilCard.evaluateCreatureList(humanCards);
|
||||||
.evaluateCreatureList(humanCards);
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -416,15 +406,13 @@ public class ChangeZoneAllAi extends SpellAbilityAi {
|
|||||||
// if the AI is using it defensively, then something else needs to occur
|
// if the AI is using it defensively, then something else needs to occur
|
||||||
// if only creatures are affected evaluate both lists and pass only
|
// if only creatures are affected evaluate both lists and pass only
|
||||||
// if human creatures are more valuable
|
// if human creatures are more valuable
|
||||||
if ((CardLists.getNotType(humanType, "Creature").isEmpty()) && (CardLists.getNotType(computerType, "Creature").isEmpty())) {
|
if (CardLists.getNotType(humanType, "Creature").isEmpty() && CardLists.getNotType(computerType, "Creature").isEmpty()) {
|
||||||
if (ComputerUtilCard.evaluateCreatureList(computerType) >= ComputerUtilCard
|
if (ComputerUtilCard.evaluateCreatureList(computerType) >= ComputerUtilCard.evaluateCreatureList(humanType)) {
|
||||||
.evaluateCreatureList(humanType)) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} // otherwise evaluate both lists by CMC and pass only if human
|
} // otherwise evaluate both lists by CMC and pass only if human
|
||||||
// permanents are more valuable
|
// permanents are more valuable
|
||||||
else if (ComputerUtilCard.evaluatePermanentList(computerType) >= ComputerUtilCard
|
else if (ComputerUtilCard.evaluatePermanentList(computerType) >= ComputerUtilCard.evaluatePermanentList(humanType)) {
|
||||||
.evaluatePermanentList(humanType)) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else if (origin.equals(ZoneType.Graveyard)) {
|
} else if (origin.equals(ZoneType.Graveyard)) {
|
||||||
@@ -457,11 +445,7 @@ public class ChangeZoneAllAi extends SpellAbilityAi {
|
|||||||
} else if (origin.equals(ZoneType.Exile)) {
|
} else if (origin.equals(ZoneType.Exile)) {
|
||||||
|
|
||||||
} else if (origin.equals(ZoneType.Stack)) {
|
} else if (origin.equals(ZoneType.Stack)) {
|
||||||
// time stop can do something like this:
|
// currently only exists indirectly (e.g. Summary Dismissal via PlayAi)
|
||||||
// Origin$ Stack | Destination$ Exile | SubAbility$ DBSkip
|
|
||||||
// DBSKipToPhase | DB$SkipToPhase | Phase$ Cleanup
|
|
||||||
// otherwise, this situation doesn't exist
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (destination.equals(ZoneType.Battlefield)) {
|
if (destination.equals(ZoneType.Battlefield)) {
|
||||||
@@ -469,25 +453,22 @@ public class ChangeZoneAllAi extends SpellAbilityAi {
|
|||||||
if (mandatory) {
|
if (mandatory) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (sa.getParam("GainControl") != null) {
|
if (sa.hasParam("GainControl")) {
|
||||||
// Check if the cards are valuable enough
|
// Check if the cards are valuable enough
|
||||||
if ((CardLists.getNotType(humanType, "Creature").size() == 0) && (CardLists.getNotType(computerType, "Creature").size() == 0)) {
|
if (CardLists.getNotType(humanType, "Creature").isEmpty() && CardLists.getNotType(computerType, "Creature").isEmpty()) {
|
||||||
return (ComputerUtilCard.evaluateCreatureList(computerType) + ComputerUtilCard
|
return (ComputerUtilCard.evaluateCreatureList(computerType) + ComputerUtilCard.evaluateCreatureList(humanType)) >= 1;
|
||||||
.evaluateCreatureList(humanType)) >= 1;
|
|
||||||
} // otherwise evaluate both lists by CMC and pass only if human
|
} // otherwise evaluate both lists by CMC and pass only if human
|
||||||
// permanents are less valuable
|
// permanents are less valuable
|
||||||
else return (ComputerUtilCard.evaluatePermanentList(computerType) + ComputerUtilCard
|
return (ComputerUtilCard.evaluatePermanentList(computerType) + ComputerUtilCard
|
||||||
.evaluatePermanentList(humanType)) >= 1;
|
.evaluatePermanentList(humanType)) >= 1;
|
||||||
} else {
|
|
||||||
// don't activate if human gets more back than AI does
|
|
||||||
if ((CardLists.getNotType(humanType, "Creature").isEmpty()) && (CardLists.getNotType(computerType, "Creature").isEmpty())) {
|
|
||||||
return ComputerUtilCard.evaluateCreatureList(computerType) > ComputerUtilCard
|
|
||||||
.evaluateCreatureList(humanType);
|
|
||||||
} // otherwise evaluate both lists by CMC and pass only if human
|
|
||||||
// permanents are less valuable
|
|
||||||
else return ComputerUtilCard.evaluatePermanentList(computerType) > ComputerUtilCard
|
|
||||||
.evaluatePermanentList(humanType);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// don't activate if human gets more back than AI does
|
||||||
|
if (CardLists.getNotType(humanType, "Creature").isEmpty() && CardLists.getNotType(computerType, "Creature").isEmpty()) {
|
||||||
|
return ComputerUtilCard.evaluateCreatureList(computerType) > ComputerUtilCard.evaluateCreatureList(humanType);
|
||||||
|
} // otherwise evaluate both lists by CMC and pass only if human
|
||||||
|
// permanents are less valuable
|
||||||
|
return ComputerUtilCard.evaluatePermanentList(computerType) > ComputerUtilCard.evaluatePermanentList(humanType);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ public class ClashAi extends SpellAbilityAi {
|
|||||||
@Override
|
@Override
|
||||||
protected Player chooseSinglePlayer(Player ai, SpellAbility sa, Iterable<Player> options, Map<String, Object> params) {
|
protected Player chooseSinglePlayer(Player ai, SpellAbility sa, Iterable<Player> options, Map<String, Object> params) {
|
||||||
for (Player p : options) {
|
for (Player p : options) {
|
||||||
if (p.getCardsIn(ZoneType.Library).size() == 0)
|
if (p.getCardsIn(ZoneType.Library).isEmpty())
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -64,8 +64,7 @@ public class CounterAi extends SpellAbilityAi {
|
|||||||
|
|
||||||
if (sa.usesTargeting()) {
|
if (sa.usesTargeting()) {
|
||||||
final SpellAbility topSA = ComputerUtilAbility.getTopSpellAbilityOnStack(game, sa);
|
final SpellAbility topSA = ComputerUtilAbility.getTopSpellAbilityOnStack(game, sa);
|
||||||
if ((topSA.isSpell() && !CardFactoryUtil.isCounterableBy(topSA.getHostCard(), sa)) || topSA.getActivatingPlayer() == ai
|
if ((topSA.isSpell() && !CardFactoryUtil.isCounterableBy(topSA.getHostCard(), sa)) || ai.getYourTeam().contains(topSA.getActivatingPlayer())) {
|
||||||
|| ai.getAllies().contains(topSA.getActivatingPlayer())) {
|
|
||||||
// might as well check for player's friendliness
|
// might as well check for player's friendliness
|
||||||
return false;
|
return false;
|
||||||
} else if (sa.hasParam("ConditionWouldDestroy") && !CounterEffect.checkForConditionWouldDestroy(sa, topSA)) {
|
} else if (sa.hasParam("ConditionWouldDestroy") && !CounterEffect.checkForConditionWouldDestroy(sa, topSA)) {
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ public class RegenerateAi extends SpellAbilityAi {
|
|||||||
// filter AIs battlefield by what I can target
|
// filter AIs battlefield by what I can target
|
||||||
List<Card> targetables = CardLists.getTargetableCards(ai.getCardsIn(ZoneType.Battlefield), sa);
|
List<Card> targetables = CardLists.getTargetableCards(ai.getCardsIn(ZoneType.Battlefield), sa);
|
||||||
|
|
||||||
if (targetables.size() == 0) {
|
if (targetables.isEmpty()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -153,11 +153,11 @@ public class RegenerateAi extends SpellAbilityAi {
|
|||||||
CardCollectionView targetables = CardLists.getTargetableCards(game.getCardsIn(ZoneType.Battlefield), sa);
|
CardCollectionView targetables = CardLists.getTargetableCards(game.getCardsIn(ZoneType.Battlefield), sa);
|
||||||
final List<Card> compTargetables = CardLists.filterControlledBy(targetables, ai);
|
final List<Card> compTargetables = CardLists.filterControlledBy(targetables, ai);
|
||||||
|
|
||||||
if (targetables.size() == 0) {
|
if (targetables.isEmpty()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mandatory && compTargetables.size() == 0) {
|
if (!mandatory && compTargetables.isEmpty()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ public class RegenerateAllAi extends SpellAbilityAi {
|
|||||||
list = CardLists.getValidCards(list, valid, hostCard.getController(), hostCard, sa);
|
list = CardLists.getValidCards(list, valid, hostCard.getController(), hostCard, sa);
|
||||||
list = CardLists.filter(list, CardPredicates.isController(ai));
|
list = CardLists.filter(list, CardPredicates.isController(ai));
|
||||||
|
|
||||||
if (list.size() == 0) {
|
if (list.isEmpty()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>forge</artifactId>
|
<artifactId>forge</artifactId>
|
||||||
<groupId>forge</groupId>
|
<groupId>forge</groupId>
|
||||||
<version>1.6.56-SNAPSHOT</version>
|
<version>1.6.57-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>forge-core</artifactId>
|
<artifactId>forge-core</artifactId>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>forge</artifactId>
|
<artifactId>forge</artifactId>
|
||||||
<groupId>forge</groupId>
|
<groupId>forge</groupId>
|
||||||
<version>1.6.56-SNAPSHOT</version>
|
<version>1.6.57-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>forge-game</artifactId>
|
<artifactId>forge-game</artifactId>
|
||||||
|
|||||||
@@ -1439,6 +1439,8 @@ public class GameAction {
|
|||||||
}
|
}
|
||||||
setHoldCheckingStaticAbilities(false);
|
setHoldCheckingStaticAbilities(false);
|
||||||
|
|
||||||
|
// important to collect first otherwise if a static fires it will mess up registered ones from LKI
|
||||||
|
game.getTriggerHandler().collectTriggerForWaiting();
|
||||||
if (game.getTriggerHandler().runWaitingTriggers()) {
|
if (game.getTriggerHandler().runWaitingTriggers()) {
|
||||||
checkAgain = true;
|
checkAgain = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3580,6 +3580,18 @@ public class AbilityUtils {
|
|||||||
}
|
}
|
||||||
return doXMath(amount, m, source, ctb);
|
return doXMath(amount, m, source, ctb);
|
||||||
}
|
}
|
||||||
|
if (value.startsWith("PlaneswalkedToThisTurn")) {
|
||||||
|
int found = 0;
|
||||||
|
String name = value.split(" ")[1];
|
||||||
|
List<Card> pwTo = player.getPlaneswalkedToThisTurn();
|
||||||
|
for (Card c : pwTo) {
|
||||||
|
if (c.getName().equals(name)) {
|
||||||
|
found++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return doXMath(found, m, source, ctb);
|
||||||
|
}
|
||||||
|
|
||||||
return doXMath(0, m, source, ctb);
|
return doXMath(0, m, source, ctb);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ public enum ApiType {
|
|||||||
ChangeX (ChangeXEffect.class),
|
ChangeX (ChangeXEffect.class),
|
||||||
ChangeZone (ChangeZoneEffect.class),
|
ChangeZone (ChangeZoneEffect.class),
|
||||||
ChangeZoneAll (ChangeZoneAllEffect.class),
|
ChangeZoneAll (ChangeZoneAllEffect.class),
|
||||||
|
ChaosEnsues (ChaosEnsuesEffect.class),
|
||||||
Charm (CharmEffect.class),
|
Charm (CharmEffect.class),
|
||||||
ChooseCard (ChooseCardEffect.class),
|
ChooseCard (ChooseCardEffect.class),
|
||||||
ChooseColor (ChooseColorEffect.class),
|
ChooseColor (ChooseColorEffect.class),
|
||||||
@@ -189,7 +190,7 @@ public enum ApiType {
|
|||||||
Vote (VoteEffect.class),
|
Vote (VoteEffect.class),
|
||||||
WinsGame (GameWinEffect.class),
|
WinsGame (GameWinEffect.class),
|
||||||
|
|
||||||
|
BlankLine (BlankLineEffect.class),
|
||||||
DamageResolve (DamageResolveEffect.class),
|
DamageResolve (DamageResolveEffect.class),
|
||||||
ChangeZoneResolve (ChangeZoneResolveEffect.class),
|
ChangeZoneResolve (ChangeZoneResolveEffect.class),
|
||||||
InternalLegendaryRule (CharmEffect.class),
|
InternalLegendaryRule (CharmEffect.class),
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package forge.game.ability.effects;
|
||||||
|
|
||||||
|
import forge.game.ability.SpellAbilityEffect;
|
||||||
|
import forge.game.spellability.SpellAbility;
|
||||||
|
|
||||||
|
public class BlankLineEffect extends SpellAbilityEffect {
|
||||||
|
@Override
|
||||||
|
protected String getStackDescription(SpellAbility sa) {
|
||||||
|
return "\r\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void resolve(SpellAbility sa) {
|
||||||
|
// this "effect" just allows spacing to look better for certain card displays
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -339,7 +339,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
|||||||
final String fromGraveyard = " from the graveyard";
|
final String fromGraveyard = " from the graveyard";
|
||||||
|
|
||||||
if (destination.equals(ZoneType.Battlefield)) {
|
if (destination.equals(ZoneType.Battlefield)) {
|
||||||
final boolean attacking = (sa.hasParam("Attacking"));
|
final boolean attacking = sa.hasParam("Attacking");
|
||||||
if (ZoneType.Graveyard.equals(origin)) {
|
if (ZoneType.Graveyard.equals(origin)) {
|
||||||
sb.append("Return").append(targetname).append(fromGraveyard).append(" to the battlefield");
|
sb.append("Return").append(targetname).append(fromGraveyard).append(" to the battlefield");
|
||||||
} else {
|
} else {
|
||||||
@@ -565,6 +565,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
|||||||
|
|
||||||
// If a card is moved to library from the stack, remove its spells from the stack
|
// If a card is moved to library from the stack, remove its spells from the stack
|
||||||
if (sa.hasParam("Fizzle")) {
|
if (sa.hasParam("Fizzle")) {
|
||||||
|
// TODO only AI still targets as card, try to remove it
|
||||||
if (gameCard.isInZone(ZoneType.Exile) || gameCard.isInZone(ZoneType.Hand) || gameCard.isInZone(ZoneType.Stack)) {
|
if (gameCard.isInZone(ZoneType.Exile) || gameCard.isInZone(ZoneType.Hand) || gameCard.isInZone(ZoneType.Stack)) {
|
||||||
// This only fizzles spells, not anything else.
|
// This only fizzles spells, not anything else.
|
||||||
game.getStack().remove(gameCard);
|
game.getStack().remove(gameCard);
|
||||||
|
|||||||
@@ -0,0 +1,74 @@
|
|||||||
|
package forge.game.ability.effects;
|
||||||
|
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
import forge.game.Game;
|
||||||
|
import forge.game.ability.AbilityKey;
|
||||||
|
import forge.game.ability.AbilityUtils;
|
||||||
|
import forge.game.ability.SpellAbilityEffect;
|
||||||
|
import forge.game.card.Card;
|
||||||
|
import forge.game.player.Player;
|
||||||
|
import forge.game.spellability.SpellAbility;
|
||||||
|
import forge.game.trigger.Trigger;
|
||||||
|
import forge.game.trigger.TriggerType;
|
||||||
|
import forge.game.zone.ZoneType;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class ChaosEnsuesEffect extends SpellAbilityEffect {
|
||||||
|
/** 311.7. Each plane card has a triggered ability that triggers “Whenever chaos ensues.” These are called
|
||||||
|
chaos abilities. Each one is indicated by a chaos symbol to the left of the ability, though the symbol
|
||||||
|
itself has no special rules meaning. This ability triggers if the chaos symbol is rolled on the planar
|
||||||
|
die (see rule 901.9b), if a resolving spell or ability says that chaos ensues, or if a resolving spell or
|
||||||
|
ability states that chaos ensues for a particular object. In the last case, the chaos ability can trigger
|
||||||
|
even if that plane card is still in the planar deck but revealed. A chaos ability is controlled by the
|
||||||
|
current planar controller. **/
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void resolve(SpellAbility sa) {
|
||||||
|
final Card host = sa.getHostCard();
|
||||||
|
final Player activator = sa.getActivatingPlayer();
|
||||||
|
final Game game = activator.getGame();
|
||||||
|
|
||||||
|
if (game.getActivePlanes() == null) { // not a planechase game, nothing happens
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<AbilityKey, Object> runParams = AbilityKey.mapFromPlayer(activator);
|
||||||
|
Map<Integer, EnumSet<ZoneType>> tweakedTrigs = new HashMap<>();
|
||||||
|
|
||||||
|
List<Card> affected = Lists.newArrayList();
|
||||||
|
if (sa.hasParam("Defined")) {
|
||||||
|
for (final Card c : AbilityUtils.getDefinedCards(host, sa.getParam("Defined"), sa)) {
|
||||||
|
for (Trigger t : c.getTriggers()) {
|
||||||
|
if (t.getMode() == TriggerType.ChaosEnsues) { // also allow current zone for any Defined
|
||||||
|
//String zones = t.getParam("TriggerZones");
|
||||||
|
//t.putParam("TriggerZones", zones + "," + c.getZone().getZoneType().toString());
|
||||||
|
EnumSet<ZoneType> zones = (EnumSet<ZoneType>) t.getActiveZone();
|
||||||
|
tweakedTrigs.put(t.getId(), zones);
|
||||||
|
zones.add(c.getZone().getZoneType());
|
||||||
|
t.setActiveZone(zones);
|
||||||
|
affected.add(c);
|
||||||
|
game.getTriggerHandler().registerOneTrigger(t);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
runParams.put(AbilityKey.Affected, affected);
|
||||||
|
if (affected.isEmpty()) { // if no Defined has chaos ability, don't trigger non Defined
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
game.getTriggerHandler().runTrigger(TriggerType.ChaosEnsues, runParams,false);
|
||||||
|
|
||||||
|
for (Map.Entry<Integer, EnumSet<ZoneType>> e : tweakedTrigs.entrySet()) {
|
||||||
|
for (Card c : affected) {
|
||||||
|
for (Trigger t : c.getTriggers()) {
|
||||||
|
if (t.getId() == e.getKey()) {
|
||||||
|
EnumSet<ZoneType> zones = e.getValue();
|
||||||
|
t.setActiveZone(zones);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,8 +13,14 @@ public class PlaneswalkEffect extends SpellAbilityEffect {
|
|||||||
public void resolve(SpellAbility sa) {
|
public void resolve(SpellAbility sa) {
|
||||||
Game game = sa.getActivatingPlayer().getGame();
|
Game game = sa.getActivatingPlayer().getGame();
|
||||||
|
|
||||||
for (Player p : game.getPlayers()) {
|
if (game.getActivePlanes() == null) { // not a planechase game, nothing happens
|
||||||
p.leaveCurrentPlane();
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!sa.hasParam("DontPlaneswalkAway")) {
|
||||||
|
for (Player p : game.getPlayers()) {
|
||||||
|
p.leaveCurrentPlane();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (sa.hasParam("Defined")) {
|
if (sa.hasParam("Defined")) {
|
||||||
CardCollectionView destinations = AbilityUtils.getDefinedCards(sa.getHostCard(), sa.getParam("Defined"), sa);
|
CardCollectionView destinations = AbilityUtils.getDefinedCards(sa.getHostCard(), sa.getParam("Defined"), sa);
|
||||||
|
|||||||
@@ -68,6 +68,9 @@ public class RollDiceEffect extends SpellAbilityEffect {
|
|||||||
return rollDiceForPlayer(sa, player, amount, sides, 0, 0, null);
|
return rollDiceForPlayer(sa, player, amount, sides, 0, 0, null);
|
||||||
}
|
}
|
||||||
private static int rollDiceForPlayer(SpellAbility sa, Player player, int amount, int sides, int ignore, int modifier, List<Integer> rollsResult) {
|
private static int rollDiceForPlayer(SpellAbility sa, Player player, int amount, int sides, int ignore, int modifier, List<Integer> rollsResult) {
|
||||||
|
if (amount == 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
int advantage = getRollAdvange(player);
|
int advantage = getRollAdvange(player);
|
||||||
amount += advantage;
|
amount += advantage;
|
||||||
int total = 0;
|
int total = 0;
|
||||||
|
|||||||
@@ -1,12 +1,6 @@
|
|||||||
package forge.game.ability.effects;
|
package forge.game.ability.effects;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
import forge.game.PlanarDice;
|
|
||||||
import forge.game.ability.AbilityKey;
|
|
||||||
import forge.game.ability.AbilityUtils;
|
import forge.game.ability.AbilityUtils;
|
||||||
import forge.game.ability.SpellAbilityEffect;
|
import forge.game.ability.SpellAbilityEffect;
|
||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
@@ -16,17 +10,17 @@ import forge.game.trigger.Trigger;
|
|||||||
import forge.game.trigger.TriggerType;
|
import forge.game.trigger.TriggerType;
|
||||||
import forge.game.trigger.WrappedAbility;
|
import forge.game.trigger.WrappedAbility;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class RunChaosEffect extends SpellAbilityEffect {
|
public class RunChaosEffect extends SpellAbilityEffect {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void resolve(SpellAbility sa) {
|
public void resolve(SpellAbility sa) {
|
||||||
Map<AbilityKey, Object> map = AbilityKey.mapFromPlayer(sa.getActivatingPlayer());
|
|
||||||
map.put(AbilityKey.Result, PlanarDice.Chaos);
|
|
||||||
|
|
||||||
List<SpellAbility> validSA = Lists.newArrayList();
|
List<SpellAbility> validSA = Lists.newArrayList();
|
||||||
for (final Card c : getTargetCards(sa)) {
|
for (final Card c : getTargetCards(sa)) {
|
||||||
for (Trigger t : c.getTriggers()) {
|
for (Trigger t : c.getTriggers()) {
|
||||||
if (TriggerType.PlanarDice.equals(t.getMode()) && t.performTest(map)) {
|
if (t.getMode() == TriggerType.ChaosEnsues) {
|
||||||
SpellAbility triggerSA = t.ensureAbility().copy(sa.getActivatingPlayer());
|
SpellAbility triggerSA = t.ensureAbility().copy(sa.getActivatingPlayer());
|
||||||
|
|
||||||
Player decider = sa.getActivatingPlayer();
|
Player decider = sa.getActivatingPlayer();
|
||||||
@@ -44,5 +38,4 @@ public class RunChaosEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
sa.getActivatingPlayer().getController().orderAndPlaySimultaneousSa(validSA);
|
sa.getActivatingPlayer().getController().orderAndPlaySimultaneousSa(validSA);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import java.util.Collections;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import forge.util.Lang;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
import com.google.common.collect.ArrayListMultimap;
|
import com.google.common.collect.ArrayListMultimap;
|
||||||
@@ -35,13 +36,13 @@ public class VoteEffect extends SpellAbilityEffect {
|
|||||||
@Override
|
@Override
|
||||||
protected String getStackDescription(final SpellAbility sa) {
|
protected String getStackDescription(final SpellAbility sa) {
|
||||||
final StringBuilder sb = new StringBuilder();
|
final StringBuilder sb = new StringBuilder();
|
||||||
sb.append(StringUtils.join(getDefinedPlayersOrTargeted(sa), ", "));
|
sb.append(Lang.joinHomogenous(getDefinedPlayersOrTargeted(sa))).append(" vote ");
|
||||||
sb.append(" vote ");
|
|
||||||
if (sa.hasParam("VoteType")) {
|
if (sa.hasParam("VoteType")) {
|
||||||
sb.append(StringUtils.join(sa.getParam("VoteType").split(","), " or "));
|
sb.append("for ").append(StringUtils.join(sa.getParam("VoteType").split(","), " or "));
|
||||||
} else if (sa.hasParam("VoteMessage")) {
|
} else if (sa.hasParam("VoteMessage")) {
|
||||||
sb.append(sa.getParam("VoteMessage"));
|
sb.append(sa.getParam("VoteMessage"));
|
||||||
}
|
}
|
||||||
|
sb.append(".");
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -350,9 +350,17 @@ public class CardFactory {
|
|||||||
planesWalkTrigger.setOverridingAbility(AbilityFactory.getAbility(rolledWalk, card));
|
planesWalkTrigger.setOverridingAbility(AbilityFactory.getAbility(rolledWalk, card));
|
||||||
card.addTrigger(planesWalkTrigger);
|
card.addTrigger(planesWalkTrigger);
|
||||||
|
|
||||||
|
String chaosTrig = "Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Static$ True";
|
||||||
|
|
||||||
|
String rolledChaos = "DB$ ChaosEnsues";
|
||||||
|
|
||||||
|
Trigger chaosTrigger = TriggerHandler.parseTrigger(chaosTrig, card, true);
|
||||||
|
chaosTrigger.setOverridingAbility(AbilityFactory.getAbility(rolledChaos, card));
|
||||||
|
card.addTrigger(chaosTrigger);
|
||||||
|
|
||||||
String specialA = "ST$ RollPlanarDice | Cost$ X | SorcerySpeed$ True | Activator$ Player | SpecialAction$ True" +
|
String specialA = "ST$ RollPlanarDice | Cost$ X | SorcerySpeed$ True | Activator$ Player | SpecialAction$ True" +
|
||||||
" | ActivationZone$ Command | SpellDescription$ Roll the planar dice. X is equal to the number of " +
|
" | ActivationZone$ Command | SpellDescription$ Roll the planar dice. X is equal to the number of " +
|
||||||
"times you have previously taken this action this turn.";
|
"times you have previously taken this action this turn. | CostDesc$ {X}: ";
|
||||||
|
|
||||||
SpellAbility planarRoll = AbilityFactory.getAbility(specialA, card);
|
SpellAbility planarRoll = AbilityFactory.getAbility(specialA, card);
|
||||||
planarRoll.setSVar("X", "Count$PlanarDiceSpecialActionThisTurn");
|
planarRoll.setSVar("X", "Count$PlanarDiceSpecialActionThisTurn");
|
||||||
|
|||||||
@@ -815,9 +815,9 @@ public class CardFactoryUtil {
|
|||||||
inst.addTrigger(trigger);
|
inst.addTrigger(trigger);
|
||||||
} else if (keyword.equals("Ascend")) {
|
} else if (keyword.equals("Ascend")) {
|
||||||
// Ascend trigger only for Permanent
|
// Ascend trigger only for Permanent
|
||||||
if (card.isPermanent()) {
|
if (card.isPermanent() || card.isPlane()) {
|
||||||
final String trig = "Mode$ Always | TriggerZones$ Battlefield | Secondary$ True"
|
final String trig = "Mode$ Always | TriggerZones$ " + (card.isPlane() ? "Command" : "Battlefield")
|
||||||
+ " | Static$ True | Blessing$ False | IsPresent$ Permanent.YouCtrl | PresentCompare$ GE10 "
|
+ " | Secondary$ True | Static$ True | Blessing$ False | IsPresent$ Permanent.YouCtrl | PresentCompare$ GE10"
|
||||||
+ " | TriggerDescription$ Ascend (" + inst.getReminderText() + ")";
|
+ " | TriggerDescription$ Ascend (" + inst.getReminderText() + ")";
|
||||||
|
|
||||||
final String effect = "DB$ Ascend | Defined$ You";
|
final String effect = "DB$ Ascend | Defined$ You";
|
||||||
@@ -1318,8 +1318,8 @@ public class CardFactoryUtil {
|
|||||||
|
|
||||||
// Second, create the trigger that runs when the haunted creature dies
|
// Second, create the trigger that runs when the haunted creature dies
|
||||||
final StringBuilder sbDies = new StringBuilder();
|
final StringBuilder sbDies = new StringBuilder();
|
||||||
sbDies.append("Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | TriggerZones$ Exile |");
|
sbDies.append("Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | TriggerZones$ Exile");
|
||||||
sbDies.append("ValidCard$ Creature.HauntedBy | Execute$ ").append(hauntSVarName);
|
sbDies.append(" | ValidCard$ Creature.HauntedBy | Execute$ ").append(hauntSVarName);
|
||||||
sbDies.append(" | TriggerDescription$ ").append(hauntDescription);
|
sbDies.append(" | TriggerDescription$ ").append(hauntDescription);
|
||||||
|
|
||||||
final Trigger hauntedDies = TriggerHandler.parseTrigger(sbDies.toString(), card, intrinsic);
|
final Trigger hauntedDies = TriggerHandler.parseTrigger(sbDies.toString(), card, intrinsic);
|
||||||
@@ -1369,7 +1369,7 @@ public class CardFactoryUtil {
|
|||||||
// First, create trigger that runs when the haunter goes to the graveyard
|
// First, create trigger that runs when the haunter goes to the graveyard
|
||||||
final StringBuilder sbHaunter = new StringBuilder();
|
final StringBuilder sbHaunter = new StringBuilder();
|
||||||
sbHaunter.append("Mode$ ChangesZone | Origin$ ");
|
sbHaunter.append("Mode$ ChangesZone | Origin$ ");
|
||||||
sbHaunter.append(card.isCreature() ? "Battlefield" : "Stack | ResolvedCard$ True");
|
sbHaunter.append(card.isCreature() ? "Battlefield" : "Stack | Fizzle$ False");
|
||||||
sbHaunter.append(" | Destination$ Graveyard | ValidCard$ Card.Self");
|
sbHaunter.append(" | Destination$ Graveyard | ValidCard$ Card.Self");
|
||||||
sbHaunter.append(" | Secondary$ True | TriggerDescription$ Haunt (").append(inst.getReminderText()).append(")");
|
sbHaunter.append(" | Secondary$ True | TriggerDescription$ Haunt (").append(inst.getReminderText()).append(")");
|
||||||
|
|
||||||
|
|||||||
@@ -209,6 +209,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
private Map<Card, Card> maingameCardsMap = Maps.newHashMap();
|
private Map<Card, Card> maingameCardsMap = Maps.newHashMap();
|
||||||
|
|
||||||
private CardCollection currentPlanes = new CardCollection();
|
private CardCollection currentPlanes = new CardCollection();
|
||||||
|
private CardCollection planeswalkedToThisTurn = new CardCollection();
|
||||||
|
|
||||||
private PlayerStatistics stats = new PlayerStatistics();
|
private PlayerStatistics stats = new PlayerStatistics();
|
||||||
private PlayerController controller;
|
private PlayerController controller;
|
||||||
@@ -1918,6 +1919,10 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
completedDungeons.clear();
|
completedDungeons.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final List<Card> getPlaneswalkedToThisTurn() {
|
||||||
|
return planeswalkedToThisTurn;
|
||||||
|
}
|
||||||
|
|
||||||
public final void altWinBySpellEffect(final String sourceName) {
|
public final void altWinBySpellEffect(final String sourceName) {
|
||||||
if (cantWin()) {
|
if (cantWin()) {
|
||||||
System.out.println("Tried to win, but currently can't.");
|
System.out.println("Tried to win, but currently can't.");
|
||||||
@@ -2458,6 +2463,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
setNumManaConversion(0);
|
setNumManaConversion(0);
|
||||||
|
|
||||||
damageReceivedThisTurn.clear();
|
damageReceivedThisTurn.clear();
|
||||||
|
planeswalkedToThisTurn.clear();
|
||||||
|
|
||||||
// set last turn nr
|
// set last turn nr
|
||||||
if (game.getPhaseHandler().isPlayerTurn(this)) {
|
if (game.getPhaseHandler().isPlayerTurn(this)) {
|
||||||
@@ -2617,7 +2623,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
* Then runs triggers.
|
* Then runs triggers.
|
||||||
*/
|
*/
|
||||||
public void planeswalkTo(SpellAbility sa, final CardCollectionView destinations) {
|
public void planeswalkTo(SpellAbility sa, final CardCollectionView destinations) {
|
||||||
System.out.println(getName() + ": planeswalk to " + destinations.toString());
|
System.out.println(getName() + " planeswalks to " + destinations.toString());
|
||||||
currentPlanes.addAll(destinations);
|
currentPlanes.addAll(destinations);
|
||||||
game.getView().updatePlanarPlayer(getView());
|
game.getView().updatePlanarPlayer(getView());
|
||||||
|
|
||||||
@@ -2625,8 +2631,9 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
moveParams.put(AbilityKey.LastStateBattlefield, sa.getLastStateBattlefield());
|
moveParams.put(AbilityKey.LastStateBattlefield, sa.getLastStateBattlefield());
|
||||||
moveParams.put(AbilityKey.LastStateGraveyard, sa.getLastStateGraveyard());
|
moveParams.put(AbilityKey.LastStateGraveyard, sa.getLastStateGraveyard());
|
||||||
|
|
||||||
for (Card c : currentPlanes) {
|
for (Card c : destinations) {
|
||||||
game.getAction().moveTo(ZoneType.Command, c, sa, moveParams);
|
game.getAction().moveTo(ZoneType.Command, c, sa, moveParams);
|
||||||
|
planeswalkedToThisTurn.add(c);
|
||||||
//getZone(ZoneType.PlanarDeck).remove(c);
|
//getZone(ZoneType.PlanarDeck).remove(c);
|
||||||
//getZone(ZoneType.Command).add(c);
|
//getZone(ZoneType.Command).add(c);
|
||||||
}
|
}
|
||||||
@@ -2634,7 +2641,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
game.setActivePlanes(currentPlanes);
|
game.setActivePlanes(currentPlanes);
|
||||||
//Run PlaneswalkedTo triggers here.
|
//Run PlaneswalkedTo triggers here.
|
||||||
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||||
runParams.put(AbilityKey.Cards, currentPlanes);
|
runParams.put(AbilityKey.Cards, destinations);
|
||||||
game.getTriggerHandler().runTrigger(TriggerType.PlaneswalkedTo, runParams, false);
|
game.getTriggerHandler().runTrigger(TriggerType.PlaneswalkedTo, runParams, false);
|
||||||
view.updateCurrentPlaneName(currentPlanes.toString().replaceAll(" \\(.*","").replace("[",""));
|
view.updateCurrentPlaneName(currentPlanes.toString().replaceAll(" \\(.*","").replace("[",""));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -135,10 +135,14 @@ public class TriggerChangesZone extends Trigger {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hasParam("ResolvedCard")) {
|
if (hasParam("Fizzle")) {
|
||||||
if (!runParams.containsKey(AbilityKey.Fizzle)) {
|
if (!runParams.containsKey(AbilityKey.Fizzle)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
Boolean val = (Boolean) runParams.get(AbilityKey.Fizzle);
|
||||||
|
if ("True".equals(getParam("Fizzle")) != val) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check number of lands ETB this turn on triggered card's controller
|
// Check number of lands ETB this turn on triggered card's controller
|
||||||
|
|||||||
@@ -0,0 +1,63 @@
|
|||||||
|
package forge.game.trigger;
|
||||||
|
|
||||||
|
import forge.game.GameObject;
|
||||||
|
import forge.game.ability.AbilityKey;
|
||||||
|
import forge.game.card.Card;
|
||||||
|
import forge.game.spellability.SpellAbility;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class TriggerChaosEnsues extends Trigger {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* Constructor for Trigger_ChaosEnsues
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @param params
|
||||||
|
* a {@link java.util.HashMap} object.
|
||||||
|
* @param host
|
||||||
|
* a {@link forge.game.card.Card} object.
|
||||||
|
* @param intrinsic
|
||||||
|
* the intrinsic
|
||||||
|
*/
|
||||||
|
public TriggerChaosEnsues(final Map<String, String> params, final Card host, final boolean intrinsic) {
|
||||||
|
super(params, host, intrinsic);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.card.trigger.Trigger#performTest(java.util.Map)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public boolean performTest(Map<AbilityKey, Object> runParams) {
|
||||||
|
if (!matchesValidParam("ValidPlayer", runParams.get(AbilityKey.Player))) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (runParams.containsKey(AbilityKey.Affected)) {
|
||||||
|
final Object o = runParams.get(AbilityKey.Affected);
|
||||||
|
if (o instanceof GameObject) {
|
||||||
|
final GameObject c = (GameObject) o;
|
||||||
|
if (!c.equals(this.getHostCard())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (o instanceof Iterable<?>) {
|
||||||
|
for (Object o2 : (Iterable<?>) o) {
|
||||||
|
if (!o2.equals(this.getHostCard())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setTriggeringObjects(SpellAbility sa, Map<AbilityKey, Object> runParams) {
|
||||||
|
sa.setTriggeringObjectsFrom(runParams, AbilityKey.Player);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getImportantStackObjects(SpellAbility sa) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -180,7 +180,7 @@ public class TriggerHandler {
|
|||||||
return FileSection.parseToMap(trigParse, FileSection.DOLLAR_SIGN_KV_SEPARATOR);
|
return FileSection.parseToMap(trigParse, FileSection.DOLLAR_SIGN_KV_SEPARATOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void collectTriggerForWaiting() {
|
public void collectTriggerForWaiting() {
|
||||||
for (final TriggerWaiting wt : waitingTriggers) {
|
for (final TriggerWaiting wt : waitingTriggers) {
|
||||||
if (wt.getTriggers() != null)
|
if (wt.getTriggers() != null)
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ public enum TriggerType {
|
|||||||
ChangesController(TriggerChangesController.class),
|
ChangesController(TriggerChangesController.class),
|
||||||
ChangesZone(TriggerChangesZone.class),
|
ChangesZone(TriggerChangesZone.class),
|
||||||
ChangesZoneAll(TriggerChangesZoneAll.class),
|
ChangesZoneAll(TriggerChangesZoneAll.class),
|
||||||
|
ChaosEnsues(TriggerChaosEnsues.class),
|
||||||
Clashed(TriggerClashed.class),
|
Clashed(TriggerClashed.class),
|
||||||
ClassLevelGained(TriggerClassLevelGained.class),
|
ClassLevelGained(TriggerClassLevelGained.class),
|
||||||
ConjureAll(TriggerConjureAll.class),
|
ConjureAll(TriggerConjureAll.class),
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>forge</artifactId>
|
<artifactId>forge</artifactId>
|
||||||
<groupId>forge</groupId>
|
<groupId>forge</groupId>
|
||||||
<version>1.6.56-SNAPSHOT</version>
|
<version>1.6.57-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>forge-gui-android</artifactId>
|
<artifactId>forge-gui-android</artifactId>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>forge</artifactId>
|
<artifactId>forge</artifactId>
|
||||||
<groupId>forge</groupId>
|
<groupId>forge</groupId>
|
||||||
<version>1.6.56-SNAPSHOT</version>
|
<version>1.6.57-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>forge-gui-desktop</artifactId>
|
<artifactId>forge-gui-desktop</artifactId>
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>forge</artifactId>
|
<artifactId>forge</artifactId>
|
||||||
<groupId>forge</groupId>
|
<groupId>forge</groupId>
|
||||||
<version>1.6.56-SNAPSHOT</version>
|
<version>1.6.57-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>forge-gui-ios</artifactId>
|
<artifactId>forge-gui-ios</artifactId>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>forge</artifactId>
|
<artifactId>forge</artifactId>
|
||||||
<groupId>forge</groupId>
|
<groupId>forge</groupId>
|
||||||
<version>1.6.56-SNAPSHOT</version>
|
<version>1.6.57-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>forge-gui-mobile-dev</artifactId>
|
<artifactId>forge-gui-mobile-dev</artifactId>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>forge</artifactId>
|
<artifactId>forge</artifactId>
|
||||||
<groupId>forge</groupId>
|
<groupId>forge</groupId>
|
||||||
<version>1.6.56-SNAPSHOT</version>
|
<version>1.6.57-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>forge-gui-mobile</artifactId>
|
<artifactId>forge-gui-mobile</artifactId>
|
||||||
|
|||||||
@@ -19,4 +19,5 @@ public class SettingData {
|
|||||||
public Float rewardCardAdjLandscape;
|
public Float rewardCardAdjLandscape;
|
||||||
public Float cardTooltipAdjLandscape;
|
public Float cardTooltipAdjLandscape;
|
||||||
public boolean dayNightBG;
|
public boolean dayNightBG;
|
||||||
|
public boolean disableWinLose;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ import forge.player.GamePlayerUtil;
|
|||||||
import forge.player.PlayerControllerHuman;
|
import forge.player.PlayerControllerHuman;
|
||||||
import forge.screens.FScreen;
|
import forge.screens.FScreen;
|
||||||
import forge.screens.LoadingOverlay;
|
import forge.screens.LoadingOverlay;
|
||||||
|
import forge.screens.TransitionScreen;
|
||||||
import forge.screens.match.MatchController;
|
import forge.screens.match.MatchController;
|
||||||
import forge.sound.MusicPlaylist;
|
import forge.sound.MusicPlaylist;
|
||||||
import forge.sound.SoundSystem;
|
import forge.sound.SoundSystem;
|
||||||
@@ -130,18 +131,20 @@ public class DuelScene extends ForgeScene {
|
|||||||
@Override
|
@Override
|
||||||
public void run(Integer result) {
|
public void run(Integer result) {
|
||||||
if (result == 0) {
|
if (result == 0) {
|
||||||
afterGameEnd(enemyName, finalWinner, true, true);
|
afterGameEnd(enemyName, finalWinner);
|
||||||
|
if (Config.instance().getSettingData().disableWinLose)
|
||||||
|
exitDuelScene();
|
||||||
}
|
}
|
||||||
fb.dispose();
|
fb.dispose();
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
} else {
|
} else {
|
||||||
afterGameEnd(enemyName, winner, false, false);
|
afterGameEnd(enemyName, winner);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Runnable endRunnable = null;
|
||||||
void afterGameEnd(String enemyName, boolean winner, boolean showOverlay, boolean alternate) {
|
void afterGameEnd(String enemyName, boolean winner) {
|
||||||
Runnable runnable = () -> Gdx.app.postRunnable(()-> {
|
endRunnable = () -> Gdx.app.postRunnable(()-> {
|
||||||
if (GameScene.instance().isNotInWorldMap()) {
|
if (GameScene.instance().isNotInWorldMap()) {
|
||||||
SoundSystem.instance.pause();
|
SoundSystem.instance.pause();
|
||||||
GameHUD.getInstance().playAudio();
|
GameHUD.getInstance().playAudio();
|
||||||
@@ -160,14 +163,9 @@ public class DuelScene extends ForgeScene {
|
|||||||
((IAfterMatch) last).setWinner(winner);
|
((IAfterMatch) last).setWinner(winner);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (showOverlay) {
|
}
|
||||||
FThreads.invokeInEdtNowOrLater(() -> {
|
public void exitDuelScene() {
|
||||||
matchOverlay = new LoadingOverlay(runnable, true, alternate);
|
Forge.setTransitionScreen(new TransitionScreen(endRunnable, Forge.takeScreenshot(), false, false));
|
||||||
matchOverlay.show();
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
runnable.run();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void addEffects(RegisteredPlayer player, Array<EffectData> effects) {
|
void addEffects(RegisteredPlayer player, Array<EffectData> effects) {
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ import java.io.IOException;
|
|||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.time.LocalTime;
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
@@ -203,7 +202,6 @@ public class SettingsScene extends UIScene {
|
|||||||
boolean value = ((CheckBox) actor).isChecked();
|
boolean value = ((CheckBox) actor).isChecked();
|
||||||
Config.instance().getSettingData().fullScreen = value;
|
Config.instance().getSettingData().fullScreen = value;
|
||||||
Config.instance().saveSettings();
|
Config.instance().saveSettings();
|
||||||
setTargetTime(LocalTime.now().getHour());
|
|
||||||
//update
|
//update
|
||||||
if (FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_FULLSCREEN_MODE) != value) {
|
if (FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_FULLSCREEN_MODE) != value) {
|
||||||
FModel.getPreferences().setPref(ForgePreferences.FPref.UI_LANDSCAPE_MODE, value);
|
FModel.getPreferences().setPref(ForgePreferences.FPref.UI_LANDSCAPE_MODE, value);
|
||||||
@@ -223,6 +221,14 @@ public class SettingsScene extends UIScene {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
addSettingField(Forge.getLocalizer().getMessage("lblDisableWinLose"), Config.instance().getSettingData().disableWinLose, new ChangeListener() {
|
||||||
|
@Override
|
||||||
|
public void changed(ChangeEvent event, Actor actor) {
|
||||||
|
boolean value = ((CheckBox) actor).isChecked();
|
||||||
|
Config.instance().getSettingData().disableWinLose = value;
|
||||||
|
Config.instance().saveSettings();
|
||||||
|
}
|
||||||
|
});
|
||||||
addCheckBox(Forge.getLocalizer().getMessage("lblCardName"), ForgePreferences.FPref.UI_OVERLAY_CARD_NAME);
|
addCheckBox(Forge.getLocalizer().getMessage("lblCardName"), ForgePreferences.FPref.UI_OVERLAY_CARD_NAME);
|
||||||
addSettingSlider(Forge.getLocalizer().getMessage("cbAdjustMusicVolume"), ForgePreferences.FPref.UI_VOL_MUSIC, 0, 100);
|
addSettingSlider(Forge.getLocalizer().getMessage("cbAdjustMusicVolume"), ForgePreferences.FPref.UI_VOL_MUSIC, 0, 100);
|
||||||
addSettingSlider(Forge.getLocalizer().getMessage("cbAdjustSoundsVolume"), ForgePreferences.FPref.UI_VOL_SOUNDS, 0, 100);
|
addSettingSlider(Forge.getLocalizer().getMessage("cbAdjustSoundsVolume"), ForgePreferences.FPref.UI_VOL_SOUNDS, 0, 100);
|
||||||
|
|||||||
@@ -335,13 +335,17 @@ public class GameHUD extends Stage {
|
|||||||
unloadAudio();
|
unloadAudio();
|
||||||
SoundSystem.instance.resume(); // resume World BGM
|
SoundSystem.instance.resume(); // resume World BGM
|
||||||
}
|
}
|
||||||
|
//unequip and reequip abilities
|
||||||
|
updateAbility();
|
||||||
}
|
}
|
||||||
|
void clearAbility() {
|
||||||
void updateAbility() {
|
|
||||||
for (TextraButton button : abilityButtonMap) {
|
for (TextraButton button : abilityButtonMap) {
|
||||||
button.remove();
|
button.remove();
|
||||||
}
|
}
|
||||||
abilityButtonMap.clear();
|
abilityButtonMap.clear();
|
||||||
|
}
|
||||||
|
void updateAbility() {
|
||||||
|
clearAbility();
|
||||||
setAbilityButton(AdventurePlayer.current().getEquippedAbility1());
|
setAbilityButton(AdventurePlayer.current().getEquippedAbility1());
|
||||||
setAbilityButton(AdventurePlayer.current().getEquippedAbility2());
|
setAbilityButton(AdventurePlayer.current().getEquippedAbility2());
|
||||||
float x = Forge.isLandscapeMode() ? 426f : 216f;
|
float x = Forge.isLandscapeMode() ? 426f : 216f;
|
||||||
@@ -568,6 +572,14 @@ public class GameHUD extends Stage {
|
|||||||
}
|
}
|
||||||
opacity = visible ? 1f : 0.4f;
|
opacity = visible ? 1f : 0.4f;
|
||||||
}
|
}
|
||||||
|
void toggleConsole() {
|
||||||
|
console.toggle();
|
||||||
|
if (console.isVisible()) {
|
||||||
|
clearAbility();
|
||||||
|
} else {
|
||||||
|
updateAbility();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean keyUp(int keycode) {
|
public boolean keyUp(int keycode) {
|
||||||
@@ -582,12 +594,12 @@ public class GameHUD extends Stage {
|
|||||||
}
|
}
|
||||||
ui.pressDown(keycode);
|
ui.pressDown(keycode);
|
||||||
if (keycode == Input.Keys.F9 || keycode == Input.Keys.F10) {
|
if (keycode == Input.Keys.F9 || keycode == Input.Keys.F10) {
|
||||||
console.toggle();
|
toggleConsole();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (keycode == Input.Keys.BACK) {
|
if (keycode == Input.Keys.BACK) {
|
||||||
if (console.isVisible()) {
|
if (console.isVisible()) {
|
||||||
console.toggle();
|
toggleConsole();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (console.isVisible())
|
if (console.isVisible())
|
||||||
@@ -699,7 +711,7 @@ public class GameHUD extends Stage {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean longPress(Actor actor, float x, float y) {
|
public boolean longPress(Actor actor, float x, float y) {
|
||||||
console.toggle();
|
toggleConsole();
|
||||||
return super.longPress(actor, x, y);
|
return super.longPress(actor, x, y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -350,7 +350,7 @@ public class CardUtil {
|
|||||||
|
|
||||||
public static Deck generateDeck(GeneratedDeckData data, CardEdition starterEdition, boolean discourageDuplicates)
|
public static Deck generateDeck(GeneratedDeckData data, CardEdition starterEdition, boolean discourageDuplicates)
|
||||||
{
|
{
|
||||||
List<String> editionCodes = (starterEdition != null)?Arrays.asList(starterEdition.getCode(), starterEdition.getCode2()):Arrays.asList("JMP", "J22", "DMU","BRO");
|
List<String> editionCodes = (starterEdition != null)?Arrays.asList(starterEdition.getCode(), starterEdition.getCode2()):Arrays.asList("JMP", "J22", "DMU", "BRO", "ONE", "MOM");
|
||||||
Deck deck= new Deck(data.name);
|
Deck deck= new Deck(data.name);
|
||||||
if(data.mainDeck!=null)
|
if(data.mainDeck!=null)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -6,11 +6,11 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import forge.adventure.scene.DuelScene;
|
import forge.adventure.scene.DuelScene;
|
||||||
|
import forge.adventure.util.Config;
|
||||||
import forge.ai.GameState;
|
import forge.ai.GameState;
|
||||||
import forge.deck.Deck;
|
import forge.deck.Deck;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.item.IPaperCard;
|
import forge.item.IPaperCard;
|
||||||
import forge.screens.TransitionScreen;
|
|
||||||
import forge.util.collect.FCollection;
|
import forge.util.collect.FCollection;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
@@ -312,14 +312,12 @@ public class MatchController extends AbstractGuiGame {
|
|||||||
@Override
|
@Override
|
||||||
public void finishGame() {
|
public void finishGame() {
|
||||||
if (Forge.isMobileAdventureMode) {
|
if (Forge.isMobileAdventureMode) {
|
||||||
Forge.setCursor(null, "0");
|
if (Config.instance().getSettingData().disableWinLose) {
|
||||||
if (DuelScene.instance().hasCallbackExit())
|
Forge.setCursor(null, "0");
|
||||||
|
if (!DuelScene.instance().hasCallbackExit())
|
||||||
|
DuelScene.instance().exitDuelScene();
|
||||||
return;
|
return;
|
||||||
Forge.setTransitionScreen(new TransitionScreen(() -> {
|
}
|
||||||
Forge.clearTransitionScreen();
|
|
||||||
Forge.clearCurrentScreen();
|
|
||||||
}, Forge.takeScreenshot(), false, false));
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
if (hasLocalPlayers() || getGameView().isMatchOver()) {
|
if (hasLocalPlayers() || getGameView().isMatchOver()) {
|
||||||
view.setViewWinLose(new ViewWinLose(getGameView()));
|
view.setViewWinLose(new ViewWinLose(getGameView()));
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
package forge.screens.match.winlose;
|
||||||
|
|
||||||
|
import forge.Forge;
|
||||||
|
import forge.adventure.scene.DuelScene;
|
||||||
|
import forge.game.GameView;
|
||||||
|
|
||||||
|
public class AdventureWinLose extends ControlWinLose {
|
||||||
|
/**
|
||||||
|
* @param v   ViewWinLose
|
||||||
|
* @param game
|
||||||
|
*/
|
||||||
|
public AdventureWinLose(ViewWinLose v, GameView game) {
|
||||||
|
super(v, game);
|
||||||
|
v.getBtnContinue().setVisible(false);
|
||||||
|
v.getBtnRestart().setVisible(false);
|
||||||
|
v.getLabelShowBattlefield().setVisible(false);
|
||||||
|
v.getBtnQuit().setText(Forge.getLocalizer().getMessage("lblBackToAdventure"));
|
||||||
|
Forge.setCursor(null, "0");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actionOnContinue() {
|
||||||
|
//Do Nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actionOnRestart() {
|
||||||
|
//Do Nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actionOnQuit() {
|
||||||
|
getView().hide();
|
||||||
|
DuelScene.instance().exitDuelScene();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void saveOptions() {
|
||||||
|
//Do Nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void showRewards() {
|
||||||
|
//Do Nothing
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -123,6 +123,9 @@ public class ViewWinLose extends FOverlay implements IWinLoseView<FButton> {
|
|||||||
}).build());
|
}).build());
|
||||||
lblTitle.setText(composeTitle(game0));
|
lblTitle.setText(composeTitle(game0));
|
||||||
|
|
||||||
|
if (Forge.isMobileAdventureMode)
|
||||||
|
control = new AdventureWinLose(this, game0);
|
||||||
|
|
||||||
showGameOutcomeSummary();
|
showGameOutcomeSummary();
|
||||||
showPlayerScores();
|
showPlayerScores();
|
||||||
control.showRewards();
|
control.showRewards();
|
||||||
@@ -152,6 +155,10 @@ public class ViewWinLose extends FOverlay implements IWinLoseView<FButton> {
|
|||||||
return this.btnQuit;
|
return this.btnQuit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public FLabel getLabelShowBattlefield() {
|
||||||
|
return this.btnShowBattlefield;
|
||||||
|
}
|
||||||
|
|
||||||
private void showGameOutcomeSummary() {
|
private void showGameOutcomeSummary() {
|
||||||
for (GameLogEntry o : game.getGameLog().getLogEntriesExact(GameLogEntryType.GAME_OUTCOME)) {
|
for (GameLogEntry o : game.getGameLog().getLogEntriesExact(GameLogEntryType.GAME_OUTCOME)) {
|
||||||
pnlOutcomes.add(new FLabel.Builder().text(o.message).font(FSkinFont.get(14)).build());
|
pnlOutcomes.add(new FLabel.Builder().text(o.message).font(FSkinFont.get(14)).build());
|
||||||
@@ -191,12 +198,20 @@ public class ViewWinLose extends FOverlay implements IWinLoseView<FButton> {
|
|||||||
y += h + dy;
|
y += h + dy;
|
||||||
|
|
||||||
h = height / 12;
|
h = height / 12;
|
||||||
btnContinue.setBounds(x, y, w, h);
|
if (Forge.isMobileAdventureMode) {
|
||||||
y += h + dy;
|
btnQuit.setBounds(x, y, w, h);
|
||||||
btnRestart.setBounds(x, y, w, h);
|
y += h + dy;
|
||||||
y += h + dy;
|
btnContinue.setVisible(false);
|
||||||
btnQuit.setBounds(x, y, w, h);
|
btnRestart.setVisible(false);
|
||||||
y += h + dy;
|
} else {
|
||||||
|
btnContinue.setBounds(x, y, w, h);
|
||||||
|
y += h + dy;
|
||||||
|
btnRestart.setBounds(x, y, w, h);
|
||||||
|
y += h + dy;
|
||||||
|
btnQuit.setBounds(x, y, w, h);
|
||||||
|
y += h + dy;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
h = lblLog.getAutoSizeBounds().height + dy;
|
h = lblLog.getAutoSizeBounds().height + dy;
|
||||||
lblLog.setBounds(x, y, w, h);
|
lblLog.setBounds(x, y, w, h);
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>forge</artifactId>
|
<artifactId>forge</artifactId>
|
||||||
<groupId>forge</groupId>
|
<groupId>forge</groupId>
|
||||||
<version>1.6.56-SNAPSHOT</version>
|
<version>1.6.57-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>forge-gui</artifactId>
|
<artifactId>forge-gui</artifactId>
|
||||||
|
|||||||
@@ -84,8 +84,8 @@
|
|||||||
"pileDecks": {
|
"pileDecks": {
|
||||||
"W":"decks/starter/pile_white_e.json",
|
"W":"decks/starter/pile_white_e.json",
|
||||||
"B":"decks/starter/pile_black_e.json",
|
"B":"decks/starter/pile_black_e.json",
|
||||||
"U":"decks/starter/pile_blue_e.json",
|
"U":"decks/starter/pile_blue_e.json",
|
||||||
"R":"decks/starter/pile_red_e.json",
|
"R":"decks/starter/pile_red_e.json",
|
||||||
"G":"decks/starter/pile_green_e.json"
|
"G":"decks/starter/pile_green_e.json"
|
||||||
},
|
},
|
||||||
"startItems": [
|
"startItems": [
|
||||||
@@ -122,8 +122,8 @@
|
|||||||
"pileDecks": {
|
"pileDecks": {
|
||||||
"W":"decks/starter/pile_white_n.json",
|
"W":"decks/starter/pile_white_n.json",
|
||||||
"B":"decks/starter/pile_black_n.json",
|
"B":"decks/starter/pile_black_n.json",
|
||||||
"U":"decks/starter/pile_blue_n.json",
|
"U":"decks/starter/pile_blue_n.json",
|
||||||
"R":"decks/starter/pile_red_n.json",
|
"R":"decks/starter/pile_red_n.json",
|
||||||
"G":"decks/starter/pile_green_n.json"
|
"G":"decks/starter/pile_green_n.json"
|
||||||
},
|
},
|
||||||
"startItems": [
|
"startItems": [
|
||||||
@@ -191,8 +191,8 @@
|
|||||||
"pileDecks": {
|
"pileDecks": {
|
||||||
"W":"decks/starter/pile_white_h.json",
|
"W":"decks/starter/pile_white_h.json",
|
||||||
"B":"decks/starter/pile_black_h.json",
|
"B":"decks/starter/pile_black_h.json",
|
||||||
"U":"decks/starter/pile_blue_h.json",
|
"U":"decks/starter/pile_blue_h.json",
|
||||||
"R":"decks/starter/pile_red_h.json",
|
"R":"decks/starter/pile_red_h.json",
|
||||||
"G":"decks/starter/pile_green_h.json"
|
"G":"decks/starter/pile_green_h.json"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -212,7 +212,7 @@
|
|||||||
"Brother's War",
|
"Brother's War",
|
||||||
"Jumpstart 22",
|
"Jumpstart 22",
|
||||||
"Phyrexia: ONE",
|
"Phyrexia: ONE",
|
||||||
"March o.t Machine",
|
"MOM",
|
||||||
"(All)"
|
"(All)"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,43 @@
|
|||||||
|
[metadata]
|
||||||
|
Name=copperhostbrutalizer
|
||||||
|
[Avatar]
|
||||||
|
|
||||||
|
[Main]
|
||||||
|
2 Blighted Burgeoning|MOM|1
|
||||||
|
1 Bloated Contaminator|ONE|1
|
||||||
|
1 Bloated Contaminator|ONE|2
|
||||||
|
1 Bloated Processor|MOM|1
|
||||||
|
1 Bloated Processor|MOM|2
|
||||||
|
2 Converter Beast|MOM|1
|
||||||
|
2 Drown in Ichor|ONE|1
|
||||||
|
4 Elvish Vatkeeper|MOM|1
|
||||||
|
2 Expand the Sphere|ONE|1
|
||||||
|
1 Forest|ONE|1
|
||||||
|
5 Forest|ONE|2
|
||||||
|
6 Forest|ONE|3
|
||||||
|
2 Gift of Compleation|MOM|1
|
||||||
|
2 Glistening Dawn|MOM|2
|
||||||
|
1 Grafted Butcher|MOM|1
|
||||||
|
1 Grafted Butcher|MOM|2
|
||||||
|
2 Gulping Scraptrap|ONE|1
|
||||||
|
2 Ichor Drinker|MOM|1
|
||||||
|
4 Jungle Hollow|MOM|1
|
||||||
|
3 Swamp|ONE|1
|
||||||
|
1 Swamp|ONE|2
|
||||||
|
3 Swamp|ONE|3
|
||||||
|
1 Swamp|ONE|4
|
||||||
|
2 Tangled Skyline|MOM|1
|
||||||
|
2 Traumatic Revelation|MOM|1
|
||||||
|
2 Vat Emergence|ONE|1
|
||||||
|
2 Vat of Rebirth|ONE|1
|
||||||
|
2 Venomous Brutalizer|ONE|1
|
||||||
|
[Sideboard]
|
||||||
|
|
||||||
|
[Planes]
|
||||||
|
|
||||||
|
[Schemes]
|
||||||
|
|
||||||
|
[Conspiracy]
|
||||||
|
|
||||||
|
[Dungeon]
|
||||||
|
|
||||||
47
forge-gui/res/adventure/Shandalar/decks/drossgrimnarch.dck
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
[metadata]
|
||||||
|
Name=drossgrimnarch
|
||||||
|
[Avatar]
|
||||||
|
|
||||||
|
[Main]
|
||||||
|
2 Annihilating Glare|ONE|1
|
||||||
|
2 Bilious Skulldweller|ONE|1
|
||||||
|
2 Blightwing Whelp|YONE|1
|
||||||
|
2 Chittering Skitterling|ONE|1
|
||||||
|
2 Darkslick Shores|ONE|1
|
||||||
|
4 Dismal Backwater|MOM|1
|
||||||
|
2 Distorted Curiosity|ONE|1
|
||||||
|
2 Drown in Ichor|ONE|1
|
||||||
|
1 Experimental Augury|ONE|1
|
||||||
|
1 Experimental Augury|ONE|2
|
||||||
|
1 Grafted Butcher|MOM|1
|
||||||
|
1 Grafted Butcher|MOM|2
|
||||||
|
2 Grim Affliction|NPH|1
|
||||||
|
2 Gulping Scraptrap|ONE|1
|
||||||
|
2 Infectious Inquiry|ONE|1
|
||||||
|
2 Island|MOM|1
|
||||||
|
3 Island|MOM|2
|
||||||
|
1 Island|MOM|3
|
||||||
|
1 Mercurial Spelldancer|ONE|1
|
||||||
|
1 Mercurial Spelldancer|ONE|2
|
||||||
|
1 Myr Convert|ONE|1
|
||||||
|
1 Myr Convert|ONE|2
|
||||||
|
2 Necrogen Communion|ONE|1
|
||||||
|
2 Pestilent Syphoner|ONE|1
|
||||||
|
2 Quicksilver Servitor|YONE|1
|
||||||
|
2 Sheoldred's Headcleaver|ONE|1
|
||||||
|
5 Swamp|MOM|1
|
||||||
|
1 Swamp|MOM|2
|
||||||
|
4 Swamp|MOM|3
|
||||||
|
1 Thrummingbird|ONE|1
|
||||||
|
1 Thrummingbird|ONE|2
|
||||||
|
2 Viral Drake|NPH|1
|
||||||
|
[Sideboard]
|
||||||
|
|
||||||
|
[Planes]
|
||||||
|
|
||||||
|
[Schemes]
|
||||||
|
|
||||||
|
[Conspiracy]
|
||||||
|
|
||||||
|
[Dungeon]
|
||||||
|
|
||||||
45
forge-gui/res/adventure/Shandalar/decks/furnacetormentor.dck
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
[metadata]
|
||||||
|
Name=furnacetormentor
|
||||||
|
[Avatar]
|
||||||
|
|
||||||
|
[Main]
|
||||||
|
1 All Will Be One|ONE|1
|
||||||
|
1 All Will Be One|ONE|2
|
||||||
|
2 Armored Scrapgorger|ONE|1
|
||||||
|
2 Axiom Engraver|ONE|1
|
||||||
|
2 Blighted Burgeoning|MOM|1
|
||||||
|
2 Churning Reservoir|ONE|1
|
||||||
|
2 Cinderslash Ravager|ONE|1
|
||||||
|
2 Converter Beast|MOM|1
|
||||||
|
2 Copperline Gorge|ONE|1
|
||||||
|
2 Copperline Gorge|ONE|2
|
||||||
|
2 Evolving Adaptive|ONE|1
|
||||||
|
2 Expand the Sphere|ONE|1
|
||||||
|
2 Exuberant Fuseling|ONE|1
|
||||||
|
1 Forest|ONE|1
|
||||||
|
1 Forest|ONE|2
|
||||||
|
1 Forest|ONE|3
|
||||||
|
4 Forest|ONE|4
|
||||||
|
4 Magmatic Sprinter|ONE|1
|
||||||
|
3 Mountain|ONE|1
|
||||||
|
3 Mountain|ONE|2
|
||||||
|
2 Mountain|ONE|3
|
||||||
|
5 Mountain|ONE|4
|
||||||
|
2 Nahiri's Warcrafting|MOM|1
|
||||||
|
2 Thrill of Possibility|ONE|1
|
||||||
|
1 Urabrask's Anointer|ONE|1
|
||||||
|
1 Urabrask's Anointer|ONE|2
|
||||||
|
2 Urabrask's Forge|ONE|1
|
||||||
|
2 Urabrask's Forge|ONE|2
|
||||||
|
1 Vindictive Flamestoker|ONE|1
|
||||||
|
1 Vindictive Flamestoker|ONE|2
|
||||||
|
[Sideboard]
|
||||||
|
|
||||||
|
[Planes]
|
||||||
|
|
||||||
|
[Schemes]
|
||||||
|
|
||||||
|
[Conspiracy]
|
||||||
|
|
||||||
|
[Dungeon]
|
||||||
|
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
[metadata]
|
||||||
|
Name=gitaxianscientist
|
||||||
|
[Avatar]
|
||||||
|
|
||||||
|
[Main]
|
||||||
|
2 Blighted Agent|NPH|1
|
||||||
|
2 Bloated Contaminator|ONE|2
|
||||||
|
2 Contagious Vorrac|ONE|1
|
||||||
|
4 Distorted Curiosity|ONE|1
|
||||||
|
1 Experimental Augury|ONE|1
|
||||||
|
1 Experimental Augury|ONE|2
|
||||||
|
2 Forest|ONE|1
|
||||||
|
2 Forest|ONE|2
|
||||||
|
3 Forest|ONE|3
|
||||||
|
1 Forest|ONE|4
|
||||||
|
2 Glistener Seer|ONE|1
|
||||||
|
2 Ichorspit Basilisk|ONE|1
|
||||||
|
2 Infectious Bite|ONE|1
|
||||||
|
6 Island|ONE|1
|
||||||
|
3 Island|ONE|2
|
||||||
|
2 Island|ONE|3
|
||||||
|
3 Island|ONE|4
|
||||||
|
1 Mindsplice Apparatus|ONE|1
|
||||||
|
1 Mindsplice Apparatus|ONE|2
|
||||||
|
1 Myr Convert|ONE|1
|
||||||
|
1 Myr Convert|ONE|2
|
||||||
|
2 Serum Snare|ONE|1
|
||||||
|
2 Tainted Observer|ONE|1
|
||||||
|
2 The Seedcore|ONE|2
|
||||||
|
2 Thrummingbird|ONE|1
|
||||||
|
2 Thrummingbird|ONE|2
|
||||||
|
4 Viral Drake|NPH|1
|
||||||
|
2 Vivisurgeon's Insight|ONE|1
|
||||||
|
[Sideboard]
|
||||||
|
|
||||||
|
[Planes]
|
||||||
|
|
||||||
|
[Schemes]
|
||||||
|
|
||||||
|
[Conspiracy]
|
||||||
|
|
||||||
|
[Dungeon]
|
||||||
|
|
||||||
45
forge-gui/res/adventure/Shandalar/decks/phyrexianangel.dck
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
[metadata]
|
||||||
|
Name=phyrexianangel
|
||||||
|
[Avatar]
|
||||||
|
|
||||||
|
[Main]
|
||||||
|
2 Apostle of Invasion|ONE|1
|
||||||
|
2 Bloated Contaminator|ONE|1
|
||||||
|
2 Blossoming Sands|MOM|1
|
||||||
|
2 Charge of the Mites|ONE|1
|
||||||
|
4 Crawling Chorus|ONE|1
|
||||||
|
2 Duelist of Deep Faith|ONE|1
|
||||||
|
2 Flensing Raptor|ONE|1
|
||||||
|
3 Forest|ONE|3
|
||||||
|
3 Forest|ONE|4
|
||||||
|
2 Infectious Bite|ONE|1
|
||||||
|
2 Infested Fleshcutter|ONE|1
|
||||||
|
2 Mite Overseer|ONE|2
|
||||||
|
1 Myr Convert|ONE|1
|
||||||
|
1 Myr Convert|ONE|2
|
||||||
|
2 Norn's Wellspring|ONE|1
|
||||||
|
1 Ossification|ONE|1
|
||||||
|
1 Ossification|ONE|2
|
||||||
|
2 Phyrexia's Core|NPH|1
|
||||||
|
2 Plague Nurse|ONE|1
|
||||||
|
3 Plains|ONE|1
|
||||||
|
2 Plains|ONE|2
|
||||||
|
1 Plains|ONE|3
|
||||||
|
4 Plains|ONE|4
|
||||||
|
2 Razorverge Thicket|ONE|2
|
||||||
|
1 Sinew Dancer|ONE|1
|
||||||
|
1 Sinew Dancer|ONE|2
|
||||||
|
2 Slaughter Singer|ONE|1
|
||||||
|
2 Slaughter Singer|ONE|2
|
||||||
|
2 The Seedcore|ONE|1
|
||||||
|
2 Venerated Rotpriest|ONE|1
|
||||||
|
[Sideboard]
|
||||||
|
|
||||||
|
[Planes]
|
||||||
|
|
||||||
|
[Schemes]
|
||||||
|
|
||||||
|
[Conspiracy]
|
||||||
|
|
||||||
|
[Dungeon]
|
||||||
|
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
"template":
|
"template":
|
||||||
{
|
{
|
||||||
"count":60,
|
"count":60,
|
||||||
"colors":["White", "Black"],
|
"colors":["White"],
|
||||||
"tribe":"Phyrexian",
|
"tribe":"Phyrexian",
|
||||||
"tribeCards":1.0,
|
"tribeCards":1.0,
|
||||||
"tribeSynergyCards":0.5,
|
"tribeSynergyCards":0.5,
|
||||||
|
|||||||
@@ -151,6 +151,7 @@
|
|||||||
"Challenger 20",
|
"Challenger 20",
|
||||||
"Challenger 21",
|
"Challenger 21",
|
||||||
"Challenger 22",
|
"Challenger 22",
|
||||||
|
"Copper Host Infector",
|
||||||
"Dino",
|
"Dino",
|
||||||
"Eldraine Faerie",
|
"Eldraine Faerie",
|
||||||
"Elf",
|
"Elf",
|
||||||
|
|||||||
@@ -137,6 +137,7 @@
|
|||||||
"Challenger 22",
|
"Challenger 22",
|
||||||
"Djinn",
|
"Djinn",
|
||||||
"Elemental",
|
"Elemental",
|
||||||
|
"Gitaxian Underling",
|
||||||
"Merfolk",
|
"Merfolk",
|
||||||
"Merfolk Avatar",
|
"Merfolk Avatar",
|
||||||
"Merfolk Fighter",
|
"Merfolk Fighter",
|
||||||
|
|||||||
@@ -136,6 +136,7 @@
|
|||||||
"Efreet",
|
"Efreet",
|
||||||
"Fire Elemental",
|
"Fire Elemental",
|
||||||
"Flame Elemental",
|
"Flame Elemental",
|
||||||
|
"Furnace Goblin",
|
||||||
"Goblin",
|
"Goblin",
|
||||||
"Goblin Chief",
|
"Goblin Chief",
|
||||||
"Goblin Warrior",
|
"Goblin Warrior",
|
||||||
|
|||||||
@@ -145,6 +145,7 @@
|
|||||||
"Human guard",
|
"Human guard",
|
||||||
"Knight",
|
"Knight",
|
||||||
"Monk",
|
"Monk",
|
||||||
|
"Orthodoxy Duelist",
|
||||||
"White Dwarf",
|
"White Dwarf",
|
||||||
"White Wiz1",
|
"White Wiz1",
|
||||||
"White Wiz2",
|
"White Wiz2",
|
||||||
|
|||||||
@@ -67,6 +67,7 @@
|
|||||||
"Dark Knight",
|
"Dark Knight",
|
||||||
"Death Knight",
|
"Death Knight",
|
||||||
"Demon",
|
"Demon",
|
||||||
|
"Dross Gladiator",
|
||||||
"Ghoul",
|
"Ghoul",
|
||||||
"Ghost",
|
"Ghost",
|
||||||
"Harpy",
|
"Harpy",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<map version="1.9" tiledversion="1.9.2" orientation="orthogonal" renderorder="right-down" width="30" height="17" tilewidth="16" tileheight="16" infinite="0" nextlayerid="9" nextobjectid="76">
|
<map version="1.9" tiledversion="1.9.2" orientation="orthogonal" renderorder="right-down" width="30" height="17" tilewidth="16" tileheight="16" infinite="0" nextlayerid="9" nextobjectid="77">
|
||||||
<editorsettings>
|
<editorsettings>
|
||||||
<export target="wastetown..tmx" format="tmx"/>
|
<export target="wastetown..tmx" format="tmx"/>
|
||||||
</editorsettings>
|
</editorsettings>
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
</layer>
|
</layer>
|
||||||
<layer id="1" name="Background" width="30" height="17">
|
<layer id="1" name="Background" width="30" height="17">
|
||||||
<data encoding="base64" compression="zlib">
|
<data encoding="base64" compression="zlib">
|
||||||
eJy1lVEOhCAMRP01epYeYw9mun94H4+3IbFhtrYKFkgaIAiPMgNuyzRtFfGZ/aiZ/zYSldjpvz+KeayFx2eN7Tw+istnbkzXPfTm4nqoZ+Za+vbiW1zR2vJa/j7iM2vfieriS4Xf6nmPy6BvUnrfRYQrdwf99MTnDtyavEZwUT+dLz/kHeXqs9Uh49pXLX7GIncW3ym9D2xH7nEuUgvX83RSeUaYwpX3wdJO96Nc69y9f9EInsX1zrd1zR/ubyqt
|
eJy1lVEOhCAMRP3duGfhGB7MdP/Y++zxDIkTx24rCJVkAgTD67SA6zxNa0XLq021fXqU06FvOs85tkjm733wZO95XNbBjubK7k3SfwzR+WYfrGywisr3EWyLi1pb8YxywfPO1ZU+6cy/E4fHFapvVvW+0ggXd4fPU40vAdwWX09wuX7ar1R8j3J1brWwPnKuuOHO8jul4+CxFXerSkMPrnems+Gzlwku3gerdnoObq9XK+/evyjCZwvXy+/dPTf2kSWe
|
||||||
</data>
|
</data>
|
||||||
</layer>
|
</layer>
|
||||||
<layer id="3" name="Clutter" width="30" height="17">
|
<layer id="3" name="Clutter" width="30" height="17">
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
</layer>
|
</layer>
|
||||||
<layer id="2" name="Walls" width="30" height="17">
|
<layer id="2" name="Walls" width="30" height="17">
|
||||||
<data encoding="base64" compression="zlib">
|
<data encoding="base64" compression="zlib">
|
||||||
eJzbwcPAsIMI3K6HGxOjXwYNE6OnD2g2PjCBCLtH7SUOT9eD4GlQN8zQQ4jRKn6R01Ub1N4OEtMZLcIZHaC7iV72TtDD5NPDXmzuGGr2TkfCIIDMxxau9PAvuj3z0NxJy3IDnU+v8goEZujhLkdoaS++8pIW9uLzJ6X2wsoeZAATI6deAABIX/aO
|
eJzbwcPAsIMAbtNjYGjHgzv0CJshg4YJqQfhPqC5+MCEUXupYu80oLnToXgd1A0bkMRm0Mhe5HQ1D2rvAhLTGS3CGR3cxOIOetg7QQ+TTw97sbljKNl7CCntToe6AZm/DEu40sO/6PZcRHPnDDrZi60coaW9G/RwlyO0tBdfeUkLe88RUV6SY+8dpLIHGcDEbpNRPgMAC9v4YQ==
|
||||||
</data>
|
</data>
|
||||||
</layer>
|
</layer>
|
||||||
<layer id="8" name="Archway" width="30" height="17">
|
<layer id="8" name="Archway" width="30" height="17">
|
||||||
@@ -79,25 +79,25 @@
|
|||||||
]</property>
|
]</property>
|
||||||
</properties>
|
</properties>
|
||||||
</object>
|
</object>
|
||||||
<object id="75" template="../obj/booster.tx" x="254.75" y="33.5">
|
<object id="75" template="../obj/booster.tx" x="216.75" y="32.8333">
|
||||||
<properties>
|
<properties>
|
||||||
<property name="reward">[
|
<property name="reward">[
|
||||||
{
|
{
|
||||||
"editions": [ "ONE" ],
|
"editions": [ "NPH","ONE","MOM" ],
|
||||||
"type": "card",
|
"type": "card",
|
||||||
"count": 10,
|
"count": 10,
|
||||||
"rarity": [ "Common" ]
|
"rarity": [ "Common" ]
|
||||||
"colors": [ "blue" ]
|
"colors": [ "blue" ]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"editions": [ "ONE" ],
|
"editions": [ "NPH","ONE","MOM" ],
|
||||||
"type": "card",
|
"type": "card",
|
||||||
"count": 3,
|
"count": 3,
|
||||||
"rarity": [ "Uncommon" ]
|
"rarity": [ "Uncommon" ]
|
||||||
"colors": [ "blue" ]
|
"colors": [ "blue" ]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"editions": [ "ONE" ],
|
"editions": [ "NPH","ONE","MOM" ],
|
||||||
"type": "card",
|
"type": "card",
|
||||||
"count": 1,
|
"count": 1,
|
||||||
"rarity": [ "Rare", "Mythic Rare" ]
|
"rarity": [ "Rare", "Mythic Rare" ]
|
||||||
@@ -107,6 +107,7 @@
|
|||||||
</property>
|
</property>
|
||||||
</properties>
|
</properties>
|
||||||
</object>
|
</object>
|
||||||
|
<object id="76" template="../obj/treasure.tx" x="256" y="32"/>
|
||||||
</objectgroup>
|
</objectgroup>
|
||||||
<objectgroup id="7" name="Waypoints">
|
<objectgroup id="7" name="Waypoints">
|
||||||
<object id="64" template="../obj/waypoint.tx" x="273" y="145"/>
|
<object id="64" template="../obj/waypoint.tx" x="273" y="145"/>
|
||||||
|
|||||||
@@ -58,21 +58,21 @@
|
|||||||
<properties>
|
<properties>
|
||||||
<property name="reward">[
|
<property name="reward">[
|
||||||
{
|
{
|
||||||
"editions": [ "ONE" ],
|
"editions": [ "NPH","ONE","MOM" ],
|
||||||
"type": "card",
|
"type": "card",
|
||||||
"count": 10,
|
"count": 10,
|
||||||
"rarity": [ "Common" ]
|
"rarity": [ "Common" ]
|
||||||
"colors": [ "black" ]
|
"colors": [ "black" ]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"editions": [ "ONE" ],
|
"editions": [ "NPH","ONE","MOM" ],
|
||||||
"type": "card",
|
"type": "card",
|
||||||
"count": 3,
|
"count": 3,
|
||||||
"rarity": [ "Uncommon" ]
|
"rarity": [ "Uncommon" ]
|
||||||
"colors": [ "black" ]
|
"colors": [ "black" ]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"editions": [ "ONE" ],
|
"editions": [ "NPH","ONE","MOM" ],
|
||||||
"type": "card",
|
"type": "card",
|
||||||
"count": 1,
|
"count": 1,
|
||||||
"rarity": [ "Rare", "Mythic Rare" ]
|
"rarity": [ "Rare", "Mythic Rare" ]
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<map version="1.9" tiledversion="1.9.2" orientation="orthogonal" renderorder="right-down" width="29" height="34" tilewidth="16" tileheight="16" infinite="0" nextlayerid="8" nextobjectid="74">
|
<map version="1.9" tiledversion="1.9.2" orientation="orthogonal" renderorder="right-down" width="29" height="34" tilewidth="16" tileheight="16" infinite="0" nextlayerid="8" nextobjectid="75">
|
||||||
<editorsettings>
|
<editorsettings>
|
||||||
<export format="tmx"/>
|
<export format="tmx"/>
|
||||||
</editorsettings>
|
</editorsettings>
|
||||||
@@ -49,21 +49,21 @@
|
|||||||
<properties>
|
<properties>
|
||||||
<property name="reward">[
|
<property name="reward">[
|
||||||
{
|
{
|
||||||
"editions": [ "ONE" ],
|
"editions": [ "NPH","ONE","MOM" ],
|
||||||
"type": "card",
|
"type": "card",
|
||||||
"count": 10,
|
"count": 10,
|
||||||
"rarity": [ "Common" ]
|
"rarity": [ "Common" ]
|
||||||
"colors": [ "green" ]
|
"colors": [ "green" ]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"editions": [ "ONE" ],
|
"editions": [ "NPH","ONE","MOM" ],
|
||||||
"type": "card",
|
"type": "card",
|
||||||
"count": 3,
|
"count": 3,
|
||||||
"rarity": [ "Uncommon" ]
|
"rarity": [ "Uncommon" ]
|
||||||
"colors": [ "green" ]
|
"colors": [ "green" ]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"editions": [ "ONE" ],
|
"editions": [ "NPH","ONE","MOM" ],
|
||||||
"type": "card",
|
"type": "card",
|
||||||
"count": 1,
|
"count": 1,
|
||||||
"rarity": [ "Rare", "Mythic Rare" ]
|
"rarity": [ "Rare", "Mythic Rare" ]
|
||||||
@@ -101,6 +101,7 @@
|
|||||||
<property name="waypoints" value=""/>
|
<property name="waypoints" value=""/>
|
||||||
</properties>
|
</properties>
|
||||||
</object>
|
</object>
|
||||||
|
<object id="74" template="../obj/treasure.tx" x="217" y="71"/>
|
||||||
</objectgroup>
|
</objectgroup>
|
||||||
<objectgroup id="7" name="Waypoints">
|
<objectgroup id="7" name="Waypoints">
|
||||||
<object id="57" template="../obj/waypoint.tx" x="88.5" y="327.167"/>
|
<object id="57" template="../obj/waypoint.tx" x="88.5" y="327.167"/>
|
||||||
|
|||||||
@@ -46,7 +46,6 @@
|
|||||||
<properties>
|
<properties>
|
||||||
<property name="enemy" value="Furnace Tormentor"/>
|
<property name="enemy" value="Furnace Tormentor"/>
|
||||||
<property name="threatRange" value="20"/>
|
<property name="threatRange" value="20"/>
|
||||||
<property name="waypoints" value="60,58,57,62,60,58,57,62,60,59,61,62"/>
|
|
||||||
</properties>
|
</properties>
|
||||||
</object>
|
</object>
|
||||||
<object id="78" template="../obj/enemy.tx" x="136.333" y="219.333">
|
<object id="78" template="../obj/enemy.tx" x="136.333" y="219.333">
|
||||||
@@ -99,21 +98,21 @@
|
|||||||
<properties>
|
<properties>
|
||||||
<property name="reward">[
|
<property name="reward">[
|
||||||
{
|
{
|
||||||
"editions": [ "ONE" ],
|
"editions": [ "NPH","ONE","MOM" ],
|
||||||
"type": "card",
|
"type": "card",
|
||||||
"count": 10,
|
"count": 10,
|
||||||
"rarity": [ "Common" ]
|
"rarity": [ "Common" ]
|
||||||
"colors": [ "red" ]
|
"colors": [ "red" ]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"editions": [ "ONE" ],
|
"editions": [ "NPH","ONE","MOM" ],
|
||||||
"type": "card",
|
"type": "card",
|
||||||
"count": 3,
|
"count": 3,
|
||||||
"rarity": [ "Uncommon" ]
|
"rarity": [ "Uncommon" ]
|
||||||
"colors": [ "red" ]
|
"colors": [ "red" ]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"editions": [ "ONE" ],
|
"editions": [ "NPH","ONE","MOM" ],
|
||||||
"type": "card",
|
"type": "card",
|
||||||
"count": 1,
|
"count": 1,
|
||||||
"rarity": [ "Rare", "Mythic Rare" ]
|
"rarity": [ "Rare", "Mythic Rare" ]
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<map version="1.9" tiledversion="1.9.2" orientation="orthogonal" renderorder="right-down" width="30" height="17" tilewidth="16" tileheight="16" infinite="0" nextlayerid="9" nextobjectid="78">
|
<map version="1.9" tiledversion="1.9.2" orientation="orthogonal" renderorder="right-down" width="30" height="17" tilewidth="16" tileheight="16" infinite="0" nextlayerid="9" nextobjectid="79">
|
||||||
<editorsettings>
|
<editorsettings>
|
||||||
<export format="tmx"/>
|
<export format="tmx"/>
|
||||||
</editorsettings>
|
</editorsettings>
|
||||||
@@ -64,21 +64,21 @@
|
|||||||
<properties>
|
<properties>
|
||||||
<property name="reward">[
|
<property name="reward">[
|
||||||
{
|
{
|
||||||
"editions": [ "ONE" ],
|
"editions": [ "NPH","ONE","MOM" ],
|
||||||
"type": "card",
|
"type": "card",
|
||||||
"count": 10,
|
"count": 10,
|
||||||
"rarity": [ "Common" ]
|
"rarity": [ "Common" ]
|
||||||
"colors": [ "white" ]
|
"colors": [ "white" ]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"editions": [ "ONE" ],
|
"editions": [ "NPH","ONE","MOM" ],
|
||||||
"type": "card",
|
"type": "card",
|
||||||
"count": 3,
|
"count": 3,
|
||||||
"rarity": [ "Uncommon" ]
|
"rarity": [ "Uncommon" ]
|
||||||
"colors": [ "white" ]
|
"colors": [ "white" ]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"editions": [ "ONE" ],
|
"editions": [ "NPH","ONE","MOM" ],
|
||||||
"type": "card",
|
"type": "card",
|
||||||
"count": 1,
|
"count": 1,
|
||||||
"rarity": [ "Rare", "Mythic Rare" ]
|
"rarity": [ "Rare", "Mythic Rare" ]
|
||||||
@@ -88,6 +88,7 @@
|
|||||||
</property>
|
</property>
|
||||||
</properties>
|
</properties>
|
||||||
</object>
|
</object>
|
||||||
|
<object id="78" template="../obj/treasure.tx" x="315" y="74"/>
|
||||||
</objectgroup>
|
</objectgroup>
|
||||||
<objectgroup id="8" name="Waypoints">
|
<objectgroup id="8" name="Waypoints">
|
||||||
<object id="70" template="../obj/waypoint.tx" x="144" y="176"/>
|
<object id="70" template="../obj/waypoint.tx" x="144" y="176"/>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 5.4 KiB |
@@ -602,4 +602,64 @@ Werewolf_f
|
|||||||
size: 16, 16
|
size: 16, 16
|
||||||
Werewolf_f
|
Werewolf_f
|
||||||
size: 16, 16
|
size: 16, 16
|
||||||
xy: 144, 304
|
xy: 144, 304
|
||||||
|
Leonin_m
|
||||||
|
xy: 0, 320
|
||||||
|
size: 16, 16
|
||||||
|
Leonin_m
|
||||||
|
xy: 16, 320
|
||||||
|
size: 16, 16
|
||||||
|
Leonin_m
|
||||||
|
xy: 32, 320
|
||||||
|
size: 16, 16
|
||||||
|
Leonin_m
|
||||||
|
xy: 48, 320
|
||||||
|
size: 16, 16
|
||||||
|
Leonin_m
|
||||||
|
xy: 64, 320
|
||||||
|
size: 16, 16
|
||||||
|
Leonin_m
|
||||||
|
xy: 80, 320
|
||||||
|
size: 16, 16
|
||||||
|
Leonin_m
|
||||||
|
xy: 96, 320
|
||||||
|
size: 16, 16
|
||||||
|
Leonin_m
|
||||||
|
xy: 112, 320
|
||||||
|
size: 16, 16
|
||||||
|
Leonin_m
|
||||||
|
xy: 128, 320
|
||||||
|
size: 16, 16
|
||||||
|
Leonin_m
|
||||||
|
xy: 144, 320
|
||||||
|
size: 16, 16
|
||||||
|
Leonin_f
|
||||||
|
xy: 0, 336
|
||||||
|
size: 16, 16
|
||||||
|
Leonin_f
|
||||||
|
xy: 16, 336
|
||||||
|
size: 16, 16
|
||||||
|
Leonin_f
|
||||||
|
xy: 32, 336
|
||||||
|
size: 16, 16
|
||||||
|
Leonin_f
|
||||||
|
xy: 48, 336
|
||||||
|
size: 16, 16
|
||||||
|
Leonin_f
|
||||||
|
xy: 64, 336
|
||||||
|
size: 16, 16
|
||||||
|
Leonin_f
|
||||||
|
xy: 80, 336
|
||||||
|
size: 16, 16
|
||||||
|
Leonin_f
|
||||||
|
xy: 96, 336
|
||||||
|
size: 16, 16
|
||||||
|
Leonin_f
|
||||||
|
xy: 112, 336
|
||||||
|
size: 16, 16
|
||||||
|
Leonin_f
|
||||||
|
xy: 128, 336
|
||||||
|
size: 16, 16
|
||||||
|
Leonin_f
|
||||||
|
size: 16, 16
|
||||||
|
xy: 144, 336
|
||||||
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 54 KiB |
485
forge-gui/res/adventure/Shandalar/sprites/heroes/leonin_f.atlas
Normal file
@@ -0,0 +1,485 @@
|
|||||||
|
leonin_f.png
|
||||||
|
size: 64,96
|
||||||
|
format: RGBA8888
|
||||||
|
filter: Nearest,Nearest
|
||||||
|
repeat: none
|
||||||
|
IdleRight
|
||||||
|
xy: 0, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleRight
|
||||||
|
xy: 16, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleRight
|
||||||
|
xy: 32, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleRight
|
||||||
|
xy: 48, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleRightDown
|
||||||
|
xy: 64, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleRightDown
|
||||||
|
xy: 80, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleRightDown
|
||||||
|
xy: 96, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleRightDown
|
||||||
|
xy: 112, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleDown
|
||||||
|
xy: 128, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleDown
|
||||||
|
xy: 144, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleDown
|
||||||
|
xy: 160, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleDown
|
||||||
|
xy: 176, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleLeftDown
|
||||||
|
xy: 192, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleLeftDown
|
||||||
|
xy: 208, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleLeftDown
|
||||||
|
xy: 224, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleLeftDown
|
||||||
|
xy: 240, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleLeft
|
||||||
|
xy: 256, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleLeft
|
||||||
|
xy: 272, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleLeft
|
||||||
|
xy: 288, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleLeft
|
||||||
|
xy: 304, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleLeftUp
|
||||||
|
xy: 320, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleLeftUp
|
||||||
|
xy: 336, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleLeftUp
|
||||||
|
xy: 352, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleLeftUp
|
||||||
|
xy: 368, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleUp
|
||||||
|
xy: 384, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleUp
|
||||||
|
xy: 400, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleUp
|
||||||
|
xy: 416, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleUp
|
||||||
|
xy: 432, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleRightUp
|
||||||
|
xy: 448, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleRightUp
|
||||||
|
xy: 464, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleRightUp
|
||||||
|
xy: 480, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleRightUp
|
||||||
|
xy: 496, 0
|
||||||
|
size: 16, 16
|
||||||
|
WalkRight
|
||||||
|
xy: 0, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkRight
|
||||||
|
xy: 16, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkRight
|
||||||
|
xy: 32, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkRight
|
||||||
|
xy: 48, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkRightDown
|
||||||
|
xy: 64, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkRightDown
|
||||||
|
xy: 80, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkRightDown
|
||||||
|
xy: 96, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkRightDown
|
||||||
|
xy: 112, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkDown
|
||||||
|
xy: 128, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkDown
|
||||||
|
xy: 144, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkDown
|
||||||
|
xy: 160, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkDown
|
||||||
|
xy: 176, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkLeftDown
|
||||||
|
xy: 192, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkLeftDown
|
||||||
|
xy: 208, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkLeftDown
|
||||||
|
xy: 224, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkLeftDown
|
||||||
|
xy: 240, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkLeft
|
||||||
|
xy: 256, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkLeft
|
||||||
|
xy: 272, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkLeft
|
||||||
|
xy: 288, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkLeft
|
||||||
|
xy: 304, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkLeftUp
|
||||||
|
xy: 320, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkLeftUp
|
||||||
|
xy: 336, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkLeftUp
|
||||||
|
xy: 352, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkLeftUp
|
||||||
|
xy: 368, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkUp
|
||||||
|
xy: 384, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkUp
|
||||||
|
xy: 400, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkUp
|
||||||
|
xy: 416, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkUp
|
||||||
|
xy: 432, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkRightUp
|
||||||
|
xy: 448, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkRightUp
|
||||||
|
xy: 464, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkRightUp
|
||||||
|
xy: 480, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkRightUp
|
||||||
|
xy: 496, 16
|
||||||
|
size: 16, 16
|
||||||
|
AttackRight
|
||||||
|
xy: 0, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackRight
|
||||||
|
xy: 16, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackRight
|
||||||
|
xy: 32, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackRight
|
||||||
|
xy: 48, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackRightDown
|
||||||
|
xy: 64, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackRightDown
|
||||||
|
xy: 80, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackRightDown
|
||||||
|
xy: 96, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackRightDown
|
||||||
|
xy: 112, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackDown
|
||||||
|
xy: 128, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackDown
|
||||||
|
xy: 144, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackDown
|
||||||
|
xy: 160, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackDown
|
||||||
|
xy: 176, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackLeftDown
|
||||||
|
xy: 192, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackLeftDown
|
||||||
|
xy: 208, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackLeftDown
|
||||||
|
xy: 224, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackLeftDown
|
||||||
|
xy: 240, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackLeft
|
||||||
|
xy: 256, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackLeft
|
||||||
|
xy: 272, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackLeft
|
||||||
|
xy: 288, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackLeft
|
||||||
|
xy: 304, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackLeftUp
|
||||||
|
xy: 320, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackLeftUp
|
||||||
|
xy: 336, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackLeftUp
|
||||||
|
xy: 352, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackLeftUp
|
||||||
|
xy: 368, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackUp
|
||||||
|
xy: 384, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackUp
|
||||||
|
xy: 400, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackUp
|
||||||
|
xy: 416, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackUp
|
||||||
|
xy: 432, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackRightUp
|
||||||
|
xy: 448, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackRightUp
|
||||||
|
xy: 464, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackRightUp
|
||||||
|
xy: 480, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackRightUp
|
||||||
|
xy: 496, 32
|
||||||
|
size: 16, 16
|
||||||
|
HitRight
|
||||||
|
xy: 0, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitRight
|
||||||
|
xy: 16, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitRight
|
||||||
|
xy: 32, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitRight
|
||||||
|
xy: 48, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitRightDown
|
||||||
|
xy: 64, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitRightDown
|
||||||
|
xy: 80, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitRightDown
|
||||||
|
xy: 96, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitRightDown
|
||||||
|
xy: 112, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitDown
|
||||||
|
xy: 128, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitDown
|
||||||
|
xy: 144, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitDown
|
||||||
|
xy: 160, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitDown
|
||||||
|
xy: 176, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitLeftDown
|
||||||
|
xy: 192, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitLeftDown
|
||||||
|
xy: 208, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitLeftDown
|
||||||
|
xy: 224, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitLeftDown
|
||||||
|
xy: 240, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitLeft
|
||||||
|
xy: 256, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitLeft
|
||||||
|
xy: 272, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitLeft
|
||||||
|
xy: 288, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitLeft
|
||||||
|
xy: 304, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitLeftUp
|
||||||
|
xy: 320, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitLeftUp
|
||||||
|
xy: 336, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitLeftUp
|
||||||
|
xy: 352, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitLeftUp
|
||||||
|
xy: 368, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitUp
|
||||||
|
xy: 384, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitUp
|
||||||
|
xy: 400, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitUp
|
||||||
|
xy: 416, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitUp
|
||||||
|
xy: 432, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitRightUp
|
||||||
|
xy: 448, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitRightUp
|
||||||
|
xy: 464, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitRightUp
|
||||||
|
xy: 480, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitRightUp
|
||||||
|
xy: 496, 48
|
||||||
|
size: 16, 16
|
||||||
|
DeathRight
|
||||||
|
xy: 0, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathRight
|
||||||
|
xy: 16, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathRight
|
||||||
|
xy: 32, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathRight
|
||||||
|
xy: 48, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathRightDown
|
||||||
|
xy: 64, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathRightDown
|
||||||
|
xy: 80, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathRightDown
|
||||||
|
xy: 96, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathRightDown
|
||||||
|
xy: 112, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathDown
|
||||||
|
xy: 128, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathDown
|
||||||
|
xy: 144, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathDown
|
||||||
|
xy: 160, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathDown
|
||||||
|
xy: 176, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathLeftDown
|
||||||
|
xy: 192, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathLeftDown
|
||||||
|
xy: 208, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathLeftDown
|
||||||
|
xy: 224, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathLeftDown
|
||||||
|
xy: 240, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathLeft
|
||||||
|
xy: 256, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathLeft
|
||||||
|
xy: 272, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathLeft
|
||||||
|
xy: 288, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathLeft
|
||||||
|
xy: 304, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathLeftUp
|
||||||
|
xy: 320, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathLeftUp
|
||||||
|
xy: 336, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathLeftUp
|
||||||
|
xy: 352, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathLeftUp
|
||||||
|
xy: 368, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathUp
|
||||||
|
xy: 384, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathUp
|
||||||
|
xy: 400, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathUp
|
||||||
|
xy: 416, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathUp
|
||||||
|
xy: 432, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathRightUp
|
||||||
|
xy: 448, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathRightUp
|
||||||
|
xy: 464, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathRightUp
|
||||||
|
xy: 480, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathRightUp
|
||||||
|
xy: 496, 64
|
||||||
|
size: 16, 16
|
||||||
BIN
forge-gui/res/adventure/Shandalar/sprites/heroes/leonin_f.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
485
forge-gui/res/adventure/Shandalar/sprites/heroes/leonin_m.atlas
Normal file
@@ -0,0 +1,485 @@
|
|||||||
|
leonin_m.png
|
||||||
|
size: 64,96
|
||||||
|
format: RGBA8888
|
||||||
|
filter: Nearest,Nearest
|
||||||
|
repeat: none
|
||||||
|
IdleRight
|
||||||
|
xy: 0, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleRight
|
||||||
|
xy: 16, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleRight
|
||||||
|
xy: 32, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleRight
|
||||||
|
xy: 48, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleRightDown
|
||||||
|
xy: 64, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleRightDown
|
||||||
|
xy: 80, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleRightDown
|
||||||
|
xy: 96, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleRightDown
|
||||||
|
xy: 112, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleDown
|
||||||
|
xy: 128, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleDown
|
||||||
|
xy: 144, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleDown
|
||||||
|
xy: 160, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleDown
|
||||||
|
xy: 176, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleLeftDown
|
||||||
|
xy: 192, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleLeftDown
|
||||||
|
xy: 208, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleLeftDown
|
||||||
|
xy: 224, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleLeftDown
|
||||||
|
xy: 240, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleLeft
|
||||||
|
xy: 256, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleLeft
|
||||||
|
xy: 272, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleLeft
|
||||||
|
xy: 288, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleLeft
|
||||||
|
xy: 304, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleLeftUp
|
||||||
|
xy: 320, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleLeftUp
|
||||||
|
xy: 336, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleLeftUp
|
||||||
|
xy: 352, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleLeftUp
|
||||||
|
xy: 368, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleUp
|
||||||
|
xy: 384, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleUp
|
||||||
|
xy: 400, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleUp
|
||||||
|
xy: 416, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleUp
|
||||||
|
xy: 432, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleRightUp
|
||||||
|
xy: 448, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleRightUp
|
||||||
|
xy: 464, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleRightUp
|
||||||
|
xy: 480, 0
|
||||||
|
size: 16, 16
|
||||||
|
IdleRightUp
|
||||||
|
xy: 496, 0
|
||||||
|
size: 16, 16
|
||||||
|
WalkRight
|
||||||
|
xy: 0, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkRight
|
||||||
|
xy: 16, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkRight
|
||||||
|
xy: 32, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkRight
|
||||||
|
xy: 48, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkRightDown
|
||||||
|
xy: 64, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkRightDown
|
||||||
|
xy: 80, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkRightDown
|
||||||
|
xy: 96, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkRightDown
|
||||||
|
xy: 112, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkDown
|
||||||
|
xy: 128, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkDown
|
||||||
|
xy: 144, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkDown
|
||||||
|
xy: 160, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkDown
|
||||||
|
xy: 176, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkLeftDown
|
||||||
|
xy: 192, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkLeftDown
|
||||||
|
xy: 208, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkLeftDown
|
||||||
|
xy: 224, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkLeftDown
|
||||||
|
xy: 240, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkLeft
|
||||||
|
xy: 256, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkLeft
|
||||||
|
xy: 272, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkLeft
|
||||||
|
xy: 288, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkLeft
|
||||||
|
xy: 304, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkLeftUp
|
||||||
|
xy: 320, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkLeftUp
|
||||||
|
xy: 336, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkLeftUp
|
||||||
|
xy: 352, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkLeftUp
|
||||||
|
xy: 368, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkUp
|
||||||
|
xy: 384, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkUp
|
||||||
|
xy: 400, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkUp
|
||||||
|
xy: 416, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkUp
|
||||||
|
xy: 432, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkRightUp
|
||||||
|
xy: 448, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkRightUp
|
||||||
|
xy: 464, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkRightUp
|
||||||
|
xy: 480, 16
|
||||||
|
size: 16, 16
|
||||||
|
WalkRightUp
|
||||||
|
xy: 496, 16
|
||||||
|
size: 16, 16
|
||||||
|
AttackRight
|
||||||
|
xy: 0, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackRight
|
||||||
|
xy: 16, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackRight
|
||||||
|
xy: 32, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackRight
|
||||||
|
xy: 48, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackRightDown
|
||||||
|
xy: 64, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackRightDown
|
||||||
|
xy: 80, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackRightDown
|
||||||
|
xy: 96, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackRightDown
|
||||||
|
xy: 112, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackDown
|
||||||
|
xy: 128, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackDown
|
||||||
|
xy: 144, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackDown
|
||||||
|
xy: 160, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackDown
|
||||||
|
xy: 176, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackLeftDown
|
||||||
|
xy: 192, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackLeftDown
|
||||||
|
xy: 208, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackLeftDown
|
||||||
|
xy: 224, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackLeftDown
|
||||||
|
xy: 240, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackLeft
|
||||||
|
xy: 256, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackLeft
|
||||||
|
xy: 272, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackLeft
|
||||||
|
xy: 288, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackLeft
|
||||||
|
xy: 304, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackLeftUp
|
||||||
|
xy: 320, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackLeftUp
|
||||||
|
xy: 336, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackLeftUp
|
||||||
|
xy: 352, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackLeftUp
|
||||||
|
xy: 368, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackUp
|
||||||
|
xy: 384, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackUp
|
||||||
|
xy: 400, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackUp
|
||||||
|
xy: 416, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackUp
|
||||||
|
xy: 432, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackRightUp
|
||||||
|
xy: 448, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackRightUp
|
||||||
|
xy: 464, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackRightUp
|
||||||
|
xy: 480, 32
|
||||||
|
size: 16, 16
|
||||||
|
AttackRightUp
|
||||||
|
xy: 496, 32
|
||||||
|
size: 16, 16
|
||||||
|
HitRight
|
||||||
|
xy: 0, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitRight
|
||||||
|
xy: 16, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitRight
|
||||||
|
xy: 32, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitRight
|
||||||
|
xy: 48, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitRightDown
|
||||||
|
xy: 64, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitRightDown
|
||||||
|
xy: 80, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitRightDown
|
||||||
|
xy: 96, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitRightDown
|
||||||
|
xy: 112, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitDown
|
||||||
|
xy: 128, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitDown
|
||||||
|
xy: 144, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitDown
|
||||||
|
xy: 160, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitDown
|
||||||
|
xy: 176, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitLeftDown
|
||||||
|
xy: 192, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitLeftDown
|
||||||
|
xy: 208, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitLeftDown
|
||||||
|
xy: 224, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitLeftDown
|
||||||
|
xy: 240, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitLeft
|
||||||
|
xy: 256, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitLeft
|
||||||
|
xy: 272, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitLeft
|
||||||
|
xy: 288, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitLeft
|
||||||
|
xy: 304, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitLeftUp
|
||||||
|
xy: 320, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitLeftUp
|
||||||
|
xy: 336, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitLeftUp
|
||||||
|
xy: 352, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitLeftUp
|
||||||
|
xy: 368, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitUp
|
||||||
|
xy: 384, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitUp
|
||||||
|
xy: 400, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitUp
|
||||||
|
xy: 416, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitUp
|
||||||
|
xy: 432, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitRightUp
|
||||||
|
xy: 448, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitRightUp
|
||||||
|
xy: 464, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitRightUp
|
||||||
|
xy: 480, 48
|
||||||
|
size: 16, 16
|
||||||
|
HitRightUp
|
||||||
|
xy: 496, 48
|
||||||
|
size: 16, 16
|
||||||
|
DeathRight
|
||||||
|
xy: 0, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathRight
|
||||||
|
xy: 16, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathRight
|
||||||
|
xy: 32, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathRight
|
||||||
|
xy: 48, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathRightDown
|
||||||
|
xy: 64, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathRightDown
|
||||||
|
xy: 80, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathRightDown
|
||||||
|
xy: 96, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathRightDown
|
||||||
|
xy: 112, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathDown
|
||||||
|
xy: 128, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathDown
|
||||||
|
xy: 144, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathDown
|
||||||
|
xy: 160, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathDown
|
||||||
|
xy: 176, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathLeftDown
|
||||||
|
xy: 192, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathLeftDown
|
||||||
|
xy: 208, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathLeftDown
|
||||||
|
xy: 224, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathLeftDown
|
||||||
|
xy: 240, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathLeft
|
||||||
|
xy: 256, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathLeft
|
||||||
|
xy: 272, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathLeft
|
||||||
|
xy: 288, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathLeft
|
||||||
|
xy: 304, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathLeftUp
|
||||||
|
xy: 320, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathLeftUp
|
||||||
|
xy: 336, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathLeftUp
|
||||||
|
xy: 352, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathLeftUp
|
||||||
|
xy: 368, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathUp
|
||||||
|
xy: 384, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathUp
|
||||||
|
xy: 400, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathUp
|
||||||
|
xy: 416, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathUp
|
||||||
|
xy: 432, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathRightUp
|
||||||
|
xy: 448, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathRightUp
|
||||||
|
xy: 464, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathRightUp
|
||||||
|
xy: 480, 64
|
||||||
|
size: 16, 16
|
||||||
|
DeathRightUp
|
||||||
|
xy: 496, 64
|
||||||
|
size: 16, 16
|
||||||
BIN
forge-gui/res/adventure/Shandalar/sprites/heroes/leonin_m.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.0 KiB |
@@ -47,6 +47,7 @@
|
|||||||
"Dark Knight",
|
"Dark Knight",
|
||||||
"Death Knight",
|
"Death Knight",
|
||||||
"Demon",
|
"Demon",
|
||||||
|
"Dross Gladiator",
|
||||||
"Eye",
|
"Eye",
|
||||||
"Fungus",
|
"Fungus",
|
||||||
"Frog",
|
"Frog",
|
||||||
|
|||||||
@@ -43,6 +43,7 @@
|
|||||||
"Frog",
|
"Frog",
|
||||||
"Frost Titan",
|
"Frost Titan",
|
||||||
"Geist",
|
"Geist",
|
||||||
|
"Gitaxian Underling",
|
||||||
"Horror",
|
"Horror",
|
||||||
"Illusionist",
|
"Illusionist",
|
||||||
"Jellyfish",
|
"Jellyfish",
|
||||||
|
|||||||
@@ -3366,7 +3366,7 @@
|
|||||||
"name": "Copper Host Brutalizer",
|
"name": "Copper Host Brutalizer",
|
||||||
"sprite": "sprites/copperhostbrutalizer.atlas",
|
"sprite": "sprites/copperhostbrutalizer.atlas",
|
||||||
"deck": [
|
"deck": [
|
||||||
"deckscopperhostbrutalizer.json"
|
"decks/copperhostbrutalizer.dck"
|
||||||
],
|
],
|
||||||
"ai": "",
|
"ai": "",
|
||||||
"spawnRate": 1,
|
"spawnRate": 1,
|
||||||
@@ -4680,7 +4680,7 @@
|
|||||||
"name": "Dross Grimnarch",
|
"name": "Dross Grimnarch",
|
||||||
"sprite": "sprites/drossgrimnarch.atlas",
|
"sprite": "sprites/drossgrimnarch.atlas",
|
||||||
"deck": [
|
"deck": [
|
||||||
"decks/drossgrimnarch.json"
|
"decks/drossgrimnarch.dck"
|
||||||
],
|
],
|
||||||
"spawnRate": 1,
|
"spawnRate": 1,
|
||||||
"difficulty": 0.1,
|
"difficulty": 0.1,
|
||||||
@@ -6197,7 +6197,7 @@
|
|||||||
"name": "Furnace Tormentor",
|
"name": "Furnace Tormentor",
|
||||||
"sprite": "sprites/furnacetormentor.atlas",
|
"sprite": "sprites/furnacetormentor.atlas",
|
||||||
"deck": [
|
"deck": [
|
||||||
"decks/furnacetormentor.json"
|
"decks/furnacetormentor.dck"
|
||||||
],
|
],
|
||||||
"ai": "",
|
"ai": "",
|
||||||
"spawnRate": 1,
|
"spawnRate": 1,
|
||||||
@@ -6814,7 +6814,7 @@
|
|||||||
"name": "Gitaxian Scientist",
|
"name": "Gitaxian Scientist",
|
||||||
"sprite": "sprites/gitaxianscientist.atlas",
|
"sprite": "sprites/gitaxianscientist.atlas",
|
||||||
"deck": [
|
"deck": [
|
||||||
"decks/gitaxianscientist.json"
|
"decks/gitaxianscientist.dck"
|
||||||
],
|
],
|
||||||
"ai": "",
|
"ai": "",
|
||||||
"spawnRate": 1,
|
"spawnRate": 1,
|
||||||
@@ -11471,7 +11471,7 @@
|
|||||||
"name": "Orthodoxy Angel",
|
"name": "Orthodoxy Angel",
|
||||||
"sprite": "sprites/phyrexianangel.atlas",
|
"sprite": "sprites/phyrexianangel.atlas",
|
||||||
"deck": [
|
"deck": [
|
||||||
"decks/phyrexianangel.json"
|
"decks/phyrexianangel.dck"
|
||||||
],
|
],
|
||||||
"spawnRate": 1,
|
"spawnRate": 1,
|
||||||
"difficulty": 0.1,
|
"difficulty": 0.1,
|
||||||
@@ -12441,16 +12441,6 @@
|
|||||||
"scale": 0.4,
|
"scale": 0.4,
|
||||||
"life": 40,
|
"life": 40,
|
||||||
"rewards": [
|
"rewards": [
|
||||||
{
|
|
||||||
"type": "deckCard",
|
|
||||||
"probability": 1,
|
|
||||||
"count": 2,
|
|
||||||
"addMaxCount": 4,
|
|
||||||
"rarity": [
|
|
||||||
"common",
|
|
||||||
"uncommon"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"type": "deckCard",
|
"type": "deckCard",
|
||||||
"probability": 1,
|
"probability": 1,
|
||||||
|
|||||||
@@ -42,6 +42,7 @@
|
|||||||
"Challenger 20",
|
"Challenger 20",
|
||||||
"Challenger 21",
|
"Challenger 21",
|
||||||
"Challenger 22",
|
"Challenger 22",
|
||||||
|
"Copper Host Infector",
|
||||||
"Dino",
|
"Dino",
|
||||||
"Eldraine Faerie",
|
"Eldraine Faerie",
|
||||||
"Elf",
|
"Elf",
|
||||||
|
|||||||
@@ -70,7 +70,14 @@
|
|||||||
"male":"sprites/heroes/werewolf_m.atlas",
|
"male":"sprites/heroes/werewolf_m.atlas",
|
||||||
"femaleAvatar":"Werewolf_f",
|
"femaleAvatar":"Werewolf_f",
|
||||||
"maleAvatar":"Werewolf_m"
|
"maleAvatar":"Werewolf_m"
|
||||||
}
|
},
|
||||||
|
{
|
||||||
|
"name":"Leonin",
|
||||||
|
"female":"sprites/heroes/leonin_f.atlas",
|
||||||
|
"male":"sprites/heroes/leonin_m.atlas",
|
||||||
|
"femaleAvatar":"Leonin_f",
|
||||||
|
"maleAvatar":"Leonin_m"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -47,6 +47,7 @@
|
|||||||
"Efreet",
|
"Efreet",
|
||||||
"Fire Elemental",
|
"Fire Elemental",
|
||||||
"Flame Elemental",
|
"Flame Elemental",
|
||||||
|
"Furnace Goblin",
|
||||||
"Goblin",
|
"Goblin",
|
||||||
"Goblin Chief",
|
"Goblin Chief",
|
||||||
"Goblin Warrior",
|
"Goblin Warrior",
|
||||||
|
|||||||
@@ -54,6 +54,7 @@
|
|||||||
"Knight",
|
"Knight",
|
||||||
"Kor Warrior",
|
"Kor Warrior",
|
||||||
"Monk",
|
"Monk",
|
||||||
|
"Orthodoxy Duelist",
|
||||||
"Owl",
|
"Owl",
|
||||||
"Raven",
|
"Raven",
|
||||||
"Scorpion",
|
"Scorpion",
|
||||||
|
|||||||
@@ -312,13 +312,13 @@ ONE Toxic 1: 1 wholeSheet("ONE Toxic 1"), 1 RareMythic:fromSheet("ONE Green Inse
|
|||||||
ONE Toxic 2: 1 wholeSheet("ONE Toxic 2"), 1 RareMythic:fromSheet("ONE Green Inserts")
|
ONE Toxic 2: 1 wholeSheet("ONE Toxic 2"), 1 RareMythic:fromSheet("ONE Green Inserts")
|
||||||
|
|
||||||
# MOM Jumpstart
|
# MOM Jumpstart
|
||||||
MOM Mite-y 1: 1 wholeSheet("MOM Mite-y 1"), 1 RareMythic:fromSheet("MOM White Inserts")
|
MOM Brood 1: 1 wholeSheet("MOM Brood 1"), 1 RareMythic:fromSheet("MOM White Inserts")
|
||||||
MOM Mite-y 2: 1 wholeSheet("MOM Mite-y 2"), 1 RareMythic:fromSheet("MOM White Inserts")
|
MOM Brood 2: 1 wholeSheet("MOM Brood 2"), 1 RareMythic:fromSheet("MOM White Inserts")
|
||||||
MOM Progress 1: 1 wholeSheet("MOM Progress 1"), 1 RareMythic:fromSheet("MOM Blue Inserts")
|
MOM Overachiever 1: 1 wholeSheet("MOM Overachiever 1"), 1 RareMythic:fromSheet("MOM Blue Inserts")
|
||||||
MOM Progress 2: 1 wholeSheet("MOM Progress 2"), 1 RareMythic:fromSheet("MOM Blue Inserts")
|
MOM Overachiever 2: 1 wholeSheet("MOM Overachiever 2"), 1 RareMythic:fromSheet("MOM Blue Inserts")
|
||||||
MOM Corruption 1: 1 wholeSheet("MOM Corruption 1"), 1 RareMythic:fromSheet("MOM Black Inserts")
|
MOM Expendable 1: 1 wholeSheet("MOM Expendable 1"), 1 RareMythic:fromSheet("MOM Black Inserts")
|
||||||
MOM Corruption 2: 1 wholeSheet("MOM Corruption 2"), 1 RareMythic:fromSheet("MOM Black Inserts")
|
MOM Expendable 2: 1 wholeSheet("MOM Expendable 2"), 1 RareMythic:fromSheet("MOM Black Inserts")
|
||||||
MOM Rebellious 1: 1 wholeSheet("MOM Rebellious 1"), 1 RareMythic:fromSheet("MOM Red Inserts")
|
MOM Reinforcement 1: 1 wholeSheet("MOM Reinforcement 1"), 1 RareMythic:fromSheet("MOM Red Inserts")
|
||||||
MOM Rebellious 2: 1 wholeSheet("MOM Rebellious 2"), 1 RareMythic:fromSheet("MOM Red Inserts")
|
MOM Reinforcement 2: 1 wholeSheet("MOM Reinforcement 2"), 1 RareMythic:fromSheet("MOM Red Inserts")
|
||||||
MOM Toxic 1: 1 wholeSheet("MOM Toxic 1"), 1 RareMythic:fromSheet("MOM Green Inserts")
|
MOM Buff 1: 1 wholeSheet("MOM Buff 1"), 1 RareMythic:fromSheet("MOM Green Inserts")
|
||||||
MOM Toxic 2: 1 wholeSheet("MOM Toxic 2"), 1 RareMythic:fromSheet("MOM Green Inserts")
|
MOM Buff 2: 1 wholeSheet("MOM Buff 2"), 1 RareMythic:fromSheet("MOM Green Inserts")
|
||||||
@@ -5995,191 +5995,64 @@ Kaya, Ghost Assassin|CN2|2
|
|||||||
1 Elesh Norn, Mother of Machines|ONE
|
1 Elesh Norn, Mother of Machines|ONE
|
||||||
1 Mondrak, Glory Dominus|ONE
|
1 Mondrak, Glory Dominus|ONE
|
||||||
1 Phyrexian Vindicator|ONE
|
1 Phyrexian Vindicator|ONE
|
||||||
[ONE Mite-y 1]
|
|
||||||
|
|
||||||
1 Mite Overseer|ONE
|
|
||||||
1 Bladed Ambassador|ONE
|
|
||||||
1 Sinew Dancer|ONE
|
|
||||||
1 Duelist of Deep Faith|ONE
|
|
||||||
1 Basilica Shepherd|ONE
|
|
||||||
1 Annex Sentry|ONE
|
|
||||||
1 Porcelain Zealot|ONE
|
|
||||||
1 Planar Disruption|ONE
|
|
||||||
1 Charge of the Mites|ONE
|
|
||||||
1 Vanish into Eternity|ONE
|
|
||||||
1 Infested Fleshcutter|ONE
|
|
||||||
7 Plains|ONE
|
|
||||||
1 The Fair Basilica|ONE
|
|
||||||
|
|
||||||
[ONE Mite-y 2]
|
|
||||||
|
|
||||||
1 Mite Overseer|ONE
|
|
||||||
1 Bladed Ambassador|ONE
|
|
||||||
1 Crawling Chorus|ONE
|
|
||||||
1 Mandible Justiciar|ONE
|
|
||||||
1 Duelist of Deep Faith|ONE
|
|
||||||
1 Porcelain Zealot|ONE
|
|
||||||
1 Apostle of Invasion|ONE
|
|
||||||
1 Zealot's Conviction|ONE
|
|
||||||
1 Ossification|ONE
|
|
||||||
1 Compleat Devotion|ONE
|
|
||||||
1 Vanish into Eternity|ONE
|
|
||||||
7 Plains|ONE
|
|
||||||
1 The Fair Basilica|ONE
|
|
||||||
|
|
||||||
[ONE Progress 1]
|
|
||||||
|
|
||||||
1 Serum Sovereign|ONE
|
|
||||||
1 Glistener Seer|ONE
|
|
||||||
1 Ichor Synthesizer|ONE
|
|
||||||
1 Chrome Prowler|ONE
|
|
||||||
1 Meldweb Curator|ONE
|
|
||||||
1 Quicksilver Fisher|ONE
|
|
||||||
1 Mesmerizing Dose|ONE
|
|
||||||
1 Serum Snare|ONE
|
|
||||||
1 Tamiyo's Immobilizer|ONE
|
|
||||||
1 Distorted Curiosity|ONE
|
|
||||||
1 The Surgical Bay|ONE
|
|
||||||
7 Islands|ONE
|
|
||||||
|
|
||||||
[ONE Progress 2]
|
|
||||||
|
|
||||||
1 Serum Sovereign|ONE
|
|
||||||
1 Chrome Prowler|ONE
|
|
||||||
1 Atmosphere Surgeon|ONE
|
|
||||||
1 Trawler Drake|ONE
|
|
||||||
1 Myr Custodian|ONE
|
|
||||||
1 Experimental Augury|ONE
|
|
||||||
1 Bring the Ending|ONE
|
|
||||||
1 Mesmerizing Dose|ONE
|
|
||||||
1 Distorted Curiosity|ONE
|
|
||||||
1 Surgical Skullbomb|ONE
|
|
||||||
1 The Surgical Bay|ONE
|
|
||||||
7 Islands|ONE
|
|
||||||
|
|
||||||
[ONE Corruption 1]
|
|
||||||
|
|
||||||
1 Kinzu of the Bleak Coven|ONE
|
|
||||||
1 Bonepicker Skirge|ONE
|
|
||||||
1 Pestilent Syphoner|ONE
|
|
||||||
1 Testament Bearer|ONE
|
|
||||||
1 Ambulatory Edifice|ONE
|
|
||||||
1 Nimraiser Paladin|ONE
|
|
||||||
1 Annihilating Glare|ONE
|
|
||||||
1 Drown in Ichor|ONE
|
|
||||||
1 Feed the Infection|ONE
|
|
||||||
1 Anoint with Affliction|ONE
|
|
||||||
1 Dross Skullbomb|ONE
|
|
||||||
1 The Dross Pits|ONE
|
|
||||||
7 Swamps|ONE
|
|
||||||
|
|
||||||
[ONE Corruption 2]
|
|
||||||
|
|
||||||
1 Kinzu of the Bleak Coven|ONE
|
|
||||||
1 Bonepicker Skirge|ONE
|
|
||||||
1 Stinging Hivemaster|ONE
|
|
||||||
1 Testament Bearer|ONE
|
|
||||||
1 Bilious Skulldweller|ONE
|
|
||||||
1 Chittering Skitterling|ONE
|
|
||||||
1 Nimraiser Paladin|ONE
|
|
||||||
1 Offer Immortality|ONE
|
|
||||||
1 Vraska's Fall|ONE
|
|
||||||
1 Infectious Inquiry|ONE
|
|
||||||
1 Necrogen Communion|ONE
|
|
||||||
1 The Dross Pits|ONE
|
|
||||||
7 Swamps|ONE
|
|
||||||
|
|
||||||
[MOM Brood 1]
|
[MOM Brood 1]
|
||||||
|
1 Essence of Orthodoxy
|
||||||
1 Essence of Orthodoxy|MOM
|
1 Norn's Inquisitor
|
||||||
1 Norn's Inquisitor|MOM
|
1 Phyrexian Pegasus
|
||||||
1 Phyrexian Pegasus|MOM
|
1 Alabaster Host Sanctifier
|
||||||
1 Alabaster Host Sanctifier|MOM
|
1 Infected Defector
|
||||||
1 Infected Defector|MOM
|
1 Alabaster Host Intercessor
|
||||||
1 Alabaster Host Intercessor|MOM
|
1 Seedpod Caretaker
|
||||||
1 Seedpod Caretaker|MOM
|
1 Tiller of Flesh
|
||||||
1 Tiller of Flesh|MOM
|
1 Sunder the Gateway
|
||||||
1 Sunder the Gateway|MOM
|
1 Angelic Intervention
|
||||||
1 Angelic Intervention|MOM
|
1 Cut Short
|
||||||
1 Cut Short|MOM
|
8 Plains
|
||||||
8 Plains|MOM
|
|
||||||
|
|
||||||
[MOM Brood 2]
|
[MOM Brood 2]
|
||||||
|
1 Essence of Orthodoxy
|
||||||
1 Essence of Orthodoxy|MOM
|
1 Phyrexian Pegasus
|
||||||
1 Phyrexian Pegasus|MOM
|
1 Seedpod Caretaker
|
||||||
1 Seedpod Caretaker|MOM
|
1 Norn's Inquisitor
|
||||||
1 Norn's Inquisitor |MOM
|
1 Alabaster Host Sanctifier
|
||||||
1 Alabaster Host Sanctifier|MOM
|
1 Infected Defector
|
||||||
1 Infected Defector|MOM
|
1 Alabaster Host Intercessor
|
||||||
1 Alabaster Host Intercessor|MOM
|
1 Tiller of Flesh
|
||||||
1 Tiller of Flesh|MOM
|
1 Aerial Boost
|
||||||
1 Aerial Boost|MOM
|
1 Inspired Charge
|
||||||
1 Inspired Charge|MOM
|
1 Seal from Existence
|
||||||
1 Seal from Existence|MOM
|
8 Plains
|
||||||
8 Plains|MOM
|
|
||||||
|
|
||||||
[MOM Reinforcement 1]
|
|
||||||
|
|
||||||
1 Orthion, Hero of Lavabrink|MOM
|
|
||||||
1 Axgard Artisan|MOM
|
|
||||||
1 Cragsmasher Yeti|MOM
|
|
||||||
1 Fearless Skald|MOM
|
|
||||||
1 Karsus Depthguard|MOM
|
|
||||||
1 Hangar Scrounger|MOM
|
|
||||||
1 Redcap Heelslasher|MOM
|
|
||||||
1 Ral's Reinforcements|MOM
|
|
||||||
1 Coming In Hot|MOM
|
|
||||||
1 Volcanic Spite|MOM
|
|
||||||
8 Mountain|MOM
|
|
||||||
|
|
||||||
[MOM Reinforcement 2]
|
|
||||||
|
|
||||||
1 Orthion, Hero of Lavabrink|MOM
|
|
||||||
1 Axgard Artisan|MOM
|
|
||||||
1 Cragsmasher Yeti|MOM
|
|
||||||
1 Trailblazing Historian|MOM
|
|
||||||
1 Karsus Depthguard|MOM
|
|
||||||
1 Hangar Scrounger|MOM
|
|
||||||
1 Redcap Heelslasher|MOM
|
|
||||||
1 Fearless Skald|MOM
|
|
||||||
1 Mirran Banesplitter|MOM
|
|
||||||
1 Volcanic Spite|MOM
|
|
||||||
1 Shatter the Source|MOM
|
|
||||||
8 Mountain|MOM
|
|
||||||
|
|
||||||
[MOM Overachiever 1]
|
[MOM Overachiever 1]
|
||||||
|
1 Zephyr Winder
|
||||||
1 Zephyr Winder|MOM
|
1 Expedition Lookout
|
||||||
1 Expedition Lookout|MOM
|
1 Preening Champion
|
||||||
1 Preening Champion|MOM
|
1 Thunderhead Squadron
|
||||||
1 Thunderhead Squadron|MOM
|
1 Tidal Terror
|
||||||
1 Tidal Terror|MOM
|
1 Referee Squad
|
||||||
1 Referee Squad|MOM
|
1 Oracle of Tragedy
|
||||||
1 Oracle of Tragedy|MOM
|
1 Interdisciplinary Mascot
|
||||||
1 Interdisciplinary Mascot|MOM
|
1 Temporal Cleansing
|
||||||
1 Temporal Cleansing|MOM
|
1 Ephara's Dispersal
|
||||||
1 Ephara's Dispersal|MOM
|
1 Meeting of Minds
|
||||||
1 Meeting of Minds|MOM
|
8 Island
|
||||||
8 Island|MOM
|
|
||||||
|
|
||||||
[MOM Overachiever 2]
|
[MOM Overachiever 2]
|
||||||
|
1 Zephyr Winder
|
||||||
1 Zephyr Winder|MOM
|
1 Expedition Lookout
|
||||||
1 Expedition Lookout|MOM
|
1 Xerex Strobe-Knight
|
||||||
1 Xerex Strobe-Knight|MOM
|
1 Thunderhead Squadron
|
||||||
1 Thunderhead Squadron|MOM
|
1 Tidal Terror
|
||||||
1 Tidal Terror|MOM
|
1 Referee Squad
|
||||||
1 Referee Squad|MOM
|
1 Oracle of Tragedy
|
||||||
1 Oracle of Tragedy|MOM
|
1 Interdisciplinary Mascot
|
||||||
1 Interdisciplinary Mascot|MOM
|
1 Ephara's Dispersal
|
||||||
1 Ephara's Dispersal|MOM
|
1 Wicked Slumber
|
||||||
1 Wicked Slumber|MOM
|
1 Astral Wingspan
|
||||||
1 Astral Wingspan|MOM
|
8 Island
|
||||||
8 Island|MOM
|
|
||||||
|
|
||||||
[MOM Expendable 1]
|
[MOM Expendable 1]
|
||||||
|
|
||||||
1 Terror of Towashi|MOM
|
1 Terror of Towashi|MOM
|
||||||
1 Seer of Stolen Sight|MOM
|
1 Seer of Stolen Sight|MOM
|
||||||
1 Injector Crocodile|MOM
|
1 Injector Crocodile|MOM
|
||||||
@@ -6187,14 +6060,13 @@ Kaya, Ghost Assassin|CN2|2
|
|||||||
1 Etched Familiar|MOM
|
1 Etched Familiar|MOM
|
||||||
1 Ichor Shade|MOM
|
1 Ichor Shade|MOM
|
||||||
1 Scorn-Blade Berserker|MOM
|
1 Scorn-Blade Berserker|MOM
|
||||||
1 Final Flourish|MOM
|
1 Final Flourish|MOM
|
||||||
1 Unseal the Necropolis|MOM
|
1 Unseal the Necropolis|MOM
|
||||||
1 Deadly Derision|MOM
|
1 Deadly Derision|MOM
|
||||||
1 Gift of Compleation|MOM
|
1 Gift of Compleation|MOM
|
||||||
8 Swamp|MOM
|
8 Swamp|MOM
|
||||||
|
|
||||||
[MOM Expendable 2]
|
[MOM Expendable 2]
|
||||||
|
|
||||||
1 Terror of Towashi|MOM
|
1 Terror of Towashi|MOM
|
||||||
1 Injector Crocodile|MOM
|
1 Injector Crocodile|MOM
|
||||||
1 Seer of Stolen Sight|MOM
|
1 Seer of Stolen Sight|MOM
|
||||||
@@ -6208,8 +6080,34 @@ Kaya, Ghost Assassin|CN2|2
|
|||||||
1 Gift of Compleation|MOM
|
1 Gift of Compleation|MOM
|
||||||
8 Swamp|MOM
|
8 Swamp|MOM
|
||||||
|
|
||||||
[MOM Buff 1]
|
[MOM Reinforcement 1]
|
||||||
|
1 Orthion, Hero of Lavabrink|MOM
|
||||||
|
1 Axgard Artisan|MOM
|
||||||
|
1 Cragsmasher Yeti|MOM
|
||||||
|
1 Fearless Skald|MOM
|
||||||
|
1 Karsus Depthguard|MOM
|
||||||
|
1 Hangar Scrounger|MOM
|
||||||
|
1 Redcap Heelslasher|MOM
|
||||||
|
1 Ral's Reinforcements|MOM
|
||||||
|
1 Coming In Hot|MOM
|
||||||
|
1 Volcanic Spite|MOM
|
||||||
|
8 Mountain|MOM
|
||||||
|
|
||||||
|
[MOM Reinforcement 2]
|
||||||
|
1 Orthion, Hero of Lavabrink|MOM
|
||||||
|
1 Axgard Artisan|MOM
|
||||||
|
1 Cragsmasher Yeti|MOM
|
||||||
|
1 Trailblazing Historian|MOM
|
||||||
|
1 Karsus Depthguard|MOM
|
||||||
|
1 Hangar Scrounger|MOM
|
||||||
|
1 Redcap Heelslasher|MOM
|
||||||
|
1 Fearless Skald|MOM
|
||||||
|
1 Mirran Banesplitter|MOM
|
||||||
|
1 Volcanic Spite|MOM
|
||||||
|
1 Shatter the Source|MOM
|
||||||
|
8 Mountain|MOM
|
||||||
|
|
||||||
|
[MOM Buff 1]
|
||||||
1 Surrak and Goreclaw|MOM
|
1 Surrak and Goreclaw|MOM
|
||||||
1 Fairgrounds Trumpeter|MOM
|
1 Fairgrounds Trumpeter|MOM
|
||||||
1 Ruins Recluse|MOM
|
1 Ruins Recluse|MOM
|
||||||
@@ -6221,10 +6119,9 @@ Kaya, Ghost Assassin|CN2|2
|
|||||||
1 Arachnoid Adaptation|MOM
|
1 Arachnoid Adaptation|MOM
|
||||||
1 Cosmic Hunger|MOM
|
1 Cosmic Hunger|MOM
|
||||||
1 Fertilid's Favor|MOM
|
1 Fertilid's Favor|MOM
|
||||||
8 Forests|MOM
|
8 Forest
|
||||||
|
|
||||||
[MOM Buff 2]
|
[MOM Buff 2]
|
||||||
|
|
||||||
1 Surrak and Goreclaw|MOM
|
1 Surrak and Goreclaw|MOM
|
||||||
1 Fairgrounds Trumpeter|MOM
|
1 Fairgrounds Trumpeter|MOM
|
||||||
1 Placid Rottentail|MOM
|
1 Placid Rottentail|MOM
|
||||||
@@ -6236,71 +6133,90 @@ Kaya, Ghost Assassin|CN2|2
|
|||||||
1 Arachnoid Adaptation|MOM
|
1 Arachnoid Adaptation|MOM
|
||||||
1 Tandem Takedown|MOM
|
1 Tandem Takedown|MOM
|
||||||
1 Blighted Burgeoning|MOM
|
1 Blighted Burgeoning|MOM
|
||||||
8 Forests|MOM
|
8 Forest|MOM
|
||||||
|
|
||||||
|
[MOM Black Inserts]
|
||||||
|
1 Archpriest of Shadows|MOM
|
||||||
|
1 Ayara, Widow of the Realm|MOM
|
||||||
|
1 Bloated Processor|MOM
|
||||||
|
1 Breach the Multiverse|MOM
|
||||||
|
1 Grafted Butcher|MOM
|
||||||
|
1 Hoarding Broodlord|MOM
|
||||||
|
1 Invasion of Fiora|MOM
|
||||||
|
1 Pile On|MOM
|
||||||
|
1 Realmbreaker, the Invasion Tree|MOM
|
||||||
|
1 Terror of Towashi|MOM
|
||||||
|
1 Invasion of Innistrad|MOM
|
||||||
|
1 Invasion of Ravnica|MOM
|
||||||
|
1 Sheoldred|MOM
|
||||||
|
1 Sword of Once and Future|MOM
|
||||||
|
|
||||||
[MOM Blue Inserts]
|
[MOM Blue Inserts]
|
||||||
1 Chrome Host Seedshark|MOM
|
1 Chrome Host Seedshark|MOM
|
||||||
1 Complete the Circuit|MOM
|
1 Complete the Circuit|MOM
|
||||||
1 Rona, Herald of Invasion|MOM
|
|
||||||
1 Invasion of Segovia|MOM
|
|
||||||
1 Invasion of Arcavios|MOM
|
|
||||||
1 Faerie Mastermind|MOM
|
1 Faerie Mastermind|MOM
|
||||||
1 Zephyr Singer|MOM
|
1 Interdisciplinary Mascot|MOM
|
||||||
1 Transcendent Message|MOM
|
1 Invasion of Arcavios|MOM
|
||||||
|
1 Invasion of Segovia|MOM
|
||||||
|
1 Realmbreaker, the Invasion Tree|MOM
|
||||||
|
1 Rona, Herald of Invasion|MOM
|
||||||
1 See Double|MOM
|
1 See Double|MOM
|
||||||
|
1 Transcendent Message|MOM
|
||||||
|
1 Zephyr Singer|MOM
|
||||||
|
1 Invasion of Ravnica|MOM
|
||||||
1 Jin-Gitaxias|MOM
|
1 Jin-Gitaxias|MOM
|
||||||
|
1 Sword of Once and Future|MOM
|
||||||
[MOM Red Inserts]
|
|
||||||
1 Chandra, Hope's Beacon|MOM
|
|
||||||
1 Invasion of Tarkir|MOM
|
|
||||||
1 Urabrask|MOM
|
|
||||||
1 Bloodfeather Phoenix|MOM
|
|
||||||
1 Into the Fire|MOM
|
|
||||||
1 City on Fire|MOM
|
|
||||||
1 Etali, Primal Conqueror|MOM
|
|
||||||
1 Invasion of Kaldheim|MOM
|
|
||||||
1 Nahiri's Warcrafting|MOM
|
|
||||||
1 Voldaren Thrillseeker|MOM
|
|
||||||
1 Rampaging Raptor|MOM
|
|
||||||
|
|
||||||
[MOM Green Inserts]
|
[MOM Green Inserts]
|
||||||
|
1 Ancient Imperiosaur|MOM
|
||||||
|
1 Deeproot Wayfinder|MOM
|
||||||
|
1 Doomskar Warrior|MOM
|
||||||
1 Glistening Dawn|MOM
|
1 Glistening Dawn|MOM
|
||||||
1 Invasion of Ikoria|MOM
|
1 Invasion of Ikoria|MOM
|
||||||
1 Invasion of Ixalan|MOM
|
1 Invasion of Ixalan|MOM
|
||||||
1 Ozolith, the Shattered Spire|MOM
|
1 Ozolith, the Shattered Spire|MOM
|
||||||
1 Tribute to the World Tree|MOM
|
|
||||||
1 Polukranos Reborn|MOM
|
1 Polukranos Reborn|MOM
|
||||||
|
1 Realmbreaker, the Invasion Tree|MOM
|
||||||
|
1 Surrak and Goreclaw|MOM
|
||||||
|
1 Tribute to the World Tree|MOM
|
||||||
|
1 Invasion of Ravnica|MOM
|
||||||
1 Invasion of Shandalar|MOM
|
1 Invasion of Shandalar|MOM
|
||||||
|
1 Sword of Once and Future|MOM
|
||||||
1 Vorinclex|MOM
|
1 Vorinclex|MOM
|
||||||
1 Wrenn and Realmbreaker|MOM
|
1 Wrenn and Realmbreaker|MOM
|
||||||
1 Doomskar Warrior|MOM
|
|
||||||
1 Deeproot Wayfinder|MOM
|
|
||||||
1 Ancient Imperiosaur|MOM
|
|
||||||
|
|
||||||
[MOM Black Inserts]
|
[MOM Red Inserts]
|
||||||
|
1 Bloodfeather Phoenix|MOM
|
||||||
1 Archpriest of Shadows|MOM
|
1 City on Fire|MOM
|
||||||
1 Ayara, Widow of the Realm|MOM
|
1 Etali, Primal Conquerer|MOM
|
||||||
1 Bloated Processor|MOM
|
1 Into the Fire|MOM
|
||||||
1 Hoarding Broodlord|MOM
|
1 Invasion of Kaladheim|MOM
|
||||||
1 Invasion of Fiora|MOM
|
1 Invasion of Karsus|MOM
|
||||||
1 Grafted Butcher|MOM
|
1 Nahiri's Warcrafting|MOM
|
||||||
1 Breach the Multiverse|MOM
|
1 Orthion, Hero of Lavabrink|MOM
|
||||||
1 Pile On|MOM
|
1 Rampaging Raptor|MOM
|
||||||
1 Sheoldred|MOM
|
1 Realmbreaker, the Invasion Tree|MOM
|
||||||
1 Invasion of Innistrad|MOM
|
1 Voldaren Thrillseeker|MOM
|
||||||
|
1 Chandra, Hope's Beacon|MOM
|
||||||
|
1 Invasion of Ravnica|MOM
|
||||||
|
1 Invasion of Tarkir|MOM
|
||||||
|
1 Sword of Once and Future|MOM
|
||||||
|
1 Urabrask|MOM
|
||||||
|
|
||||||
[MOM White Inserts]
|
[MOM White Inserts]
|
||||||
|
|
||||||
1 Archangel Elspeth|MOM
|
|
||||||
1 Elesh Norn|MOM
|
|
||||||
1 Monastery Mentor|MOM
|
|
||||||
1 Boon-Bringer Valkyrie|MOM
|
1 Boon-Bringer Valkyrie|MOM
|
||||||
1 Dusk Legion Duelist|MOM
|
1 Dusk Legion Duelist|MOM
|
||||||
|
1 Essence of Orthodoxy|MOM
|
||||||
1 Guardian of Ghirapur|MOM
|
1 Guardian of Ghirapur|MOM
|
||||||
1 Heliod, the Radiant Dawn|MOM
|
1 Heliod, the Radiant Dawn|MOM
|
||||||
1 Invasion of Gobakhan|MOM
|
1 Invasion of Gobakhan|MOM
|
||||||
1 Knight-Errant of Eos|MOM
|
|
||||||
1 Invasion of Theros|MOM
|
1 Invasion of Theros|MOM
|
||||||
|
1 Knight-Errant of Eos|MOM
|
||||||
|
1 Realmbreaker, the Invasion Tree|MOM
|
||||||
|
1 Progenitor Exarch|MOM
|
||||||
1 Sunfall|MOM
|
1 Sunfall|MOM
|
||||||
1 Progenitor Exarch|MOM
|
1 Archangel Elspeth|MOM
|
||||||
|
1 Elesh Norn|MOM
|
||||||
|
1 Invasion of Ravnica|MOM
|
||||||
|
1 Monastery Mentor|MOM
|
||||||
|
1 Sword of Once and Future|MOM
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
Name:Academy at Tolaria West
|
Name:Academy at Tolaria West
|
||||||
ManaCost:no cost
|
ManaCost:no cost
|
||||||
Types:Plane Dominaria
|
Types:Plane Dominaria
|
||||||
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Command | IsPresent$ Card.YouCtrl | PresentZone$ Hand | PresentCompare$ EQ0 | Execute$ AcademicDraw | TriggerDescription$ At the beginning of your end step, if you have no cards in hand, draw seven cards.
|
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Command | IsPresent$ Card.YouOwn | PresentZone$ Hand | PresentCompare$ EQ0 | Execute$ AcademicDraw | TriggerDescription$ At the beginning of your end step, if you have no cards in hand, draw seven cards.
|
||||||
SVar:AcademicDraw:DB$ Draw | Defined$ You | NumCards$ 7
|
SVar:AcademicDraw:DB$ Draw | Defined$ You | NumCards$ 7
|
||||||
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll {CHAOS}, discard your hand.
|
T:Mode$ ChaosEnsues | TriggerZones$ Command | Execute$ TrigDiscard | TriggerDescription$ Whenever chaos ensues, discard your hand.
|
||||||
SVar:RolledChaos:DB$ Discard | Mode$ Hand | Defined$ You
|
SVar:TrigDiscard:DB$ Discard | Mode$ Hand | Defined$ You
|
||||||
SVar:AIRollPlanarDieParams:Mode$ Always | LowPriority$ True | CardsInHandLE$ 2
|
SVar:AIRollPlanarDieParams:Mode$ Always | LowPriority$ True | CardsInHandLE$ 2
|
||||||
Oracle:At the beginning of your end step, if you have no cards in hand, draw seven cards.\nWhenever you roll {CHAOS}, discard your hand.
|
Deckhas:Ability$Discard
|
||||||
|
Oracle:At the beginning of your end step, if you have no cards in hand, draw seven cards.\nWhenever chaos ensues, discard your hand.
|
||||||
|
|||||||
@@ -10,9 +10,9 @@ T:Mode$ ChangesZone | ValidCard$ Creature.nonWhite | Origin$ Battlefield | Desti
|
|||||||
SVar:TrigDelay2:DB$ Effect | Name$ Agyrem Effect For non-White Creatures | Triggers$ TrigEOT2 | RememberObjects$ TriggeredCard | Duration$ Permanent
|
SVar:TrigDelay2:DB$ Effect | Name$ Agyrem Effect For non-White Creatures | Triggers$ TrigEOT2 | RememberObjects$ TriggeredCard | Duration$ Permanent
|
||||||
SVar:TrigEOT2:Mode$ Phase | Phase$ End of Turn | Execute$ AgyremReturn2 | TriggerDescription$ Return creature to its owner's hand at the beginning of the next end step.
|
SVar:TrigEOT2:Mode$ Phase | Phase$ End of Turn | Execute$ AgyremReturn2 | TriggerDescription$ Return creature to its owner's hand at the beginning of the next end step.
|
||||||
SVar:AgyremReturn2:DB$ ChangeZone | Defined$ Remembered | Origin$ Graveyard | Destination$ Hand | SubAbility$ AgyremCleanup
|
SVar:AgyremReturn2:DB$ ChangeZone | Defined$ Remembered | Origin$ Graveyard | Destination$ Hand | SubAbility$ AgyremCleanup
|
||||||
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll {CHAOS}, creatures can't attack you until a player planeswalks.
|
T:Mode$ ChaosEnsues | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever chaos ensues, creatures can't attack you until a player planeswalks.
|
||||||
SVar:RolledChaos:DB$ Effect | Name$ Agyrem Effect - Can't Attack | StaticAbilities$ STCantAttack | Triggers$ TrigPlaneswalk | Duration$ Permanent
|
SVar:RolledChaos:DB$ Effect | Name$ Agyrem Effect - Can't Attack | StaticAbilities$ STCantAttack | Triggers$ TrigPlaneswalk | Duration$ Permanent
|
||||||
SVar:STCantAttack:Mode$ CantAttack | EffectZone$ Command | ValidCard$ Creature | Target$ You | Description$ Creatures can't attack you until a player planeswalks.
|
SVar:STCantAttack:Mode$ CantAttack | EffectZone$ Command | ValidCard$ Creature | Target$ You | Description$ Creatures can't attack you until a player planeswalks.
|
||||||
SVar:TrigPlaneswalk:Mode$ PlaneswalkedFrom | Execute$ AgyremCleanup | Static$ True
|
SVar:TrigPlaneswalk:Mode$ PlaneswalkedFrom | Execute$ AgyremCleanup | Static$ True
|
||||||
SVar:AIRollPlanarDieParams:Mode$ Always
|
SVar:AIRollPlanarDieParams:Mode$ Always
|
||||||
Oracle:Whenever a white creature dies, return it to the battlefield under its owner's control at the beginning of the next end step.\nWhenever a nonwhite creature dies, return it to its owner's hand at the beginning of the next end step.\nWhenever you roll {CHAOS}, creatures can't attack you until a player planeswalks.
|
Oracle:Whenever a white creature dies, return it to the battlefield under its owner's control at the beginning of the next end step.\nWhenever a nonwhite creature dies, return it to its owner's hand at the beginning of the next end step.\nWhenever chaos ensues, creatures can't attack you until a player planeswalks.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ Name:Akoum
|
|||||||
ManaCost:no cost
|
ManaCost:no cost
|
||||||
Types:Plane Zendikar
|
Types:Plane Zendikar
|
||||||
S:Mode$ CastWithFlash | ValidCard$ Enchantment | ValidSA$ Spell | EffectZone$ Command | Caster$ Player | Description$ Players may cast enchantment spells as though they had flash.
|
S:Mode$ CastWithFlash | ValidCard$ Enchantment | ValidSA$ Spell | EffectZone$ Command | Caster$ Player | Description$ Players may cast enchantment spells as though they had flash.
|
||||||
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll {CHAOS}, destroy target creature that isn't enchanted.
|
T:Mode$ ChaosEnsues | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever chaos ensues, destroy target creature that isn't enchanted.
|
||||||
SVar:RolledChaos:DB$ Destroy | ValidTgts$ Creature.unenchanted | TgtPrompt$ Select target creature that isn't enchanted
|
SVar:RolledChaos:DB$ Destroy | ValidTgts$ Creature.unenchanted | TgtPrompt$ Select target creature that isn't enchanted
|
||||||
SVar:AIRollPlanarDieParams:Mode$ Always | OppHasCreatureInPlay$ True | RollInMain1$ True
|
SVar:AIRollPlanarDieParams:Mode$ Always | OppHasCreatureInPlay$ True | RollInMain1$ True
|
||||||
Oracle:Players may cast enchantment spells as though they had flash.\nWhenever you roll {CHAOS}, destroy target creature that isn't enchanted.
|
Oracle:Players may cast enchantment spells as though they had flash.\nWhenever chaos ensues, destroy target creature that isn't enchanted.
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ SVar:ScrollsOfLife:DB$ GainLife | Defined$ You | LifeAmount$ NumScrolls
|
|||||||
SVar:NumScrolls:Count$CardCounters.SCROLL
|
SVar:NumScrolls:Count$CardCounters.SCROLL
|
||||||
T:Mode$ Always | TriggerZones$ Command | CheckSVar$ NumScrolls | SVarCompare$ GE10 | Execute$ RolledWalk | TriggerDescription$ When CARDNAME has ten or more scroll counters on it, planeswalk.
|
T:Mode$ Always | TriggerZones$ Command | CheckSVar$ NumScrolls | SVarCompare$ GE10 | Execute$ RolledWalk | TriggerDescription$ When CARDNAME has ten or more scroll counters on it, planeswalk.
|
||||||
SVar:RolledWalk:DB$ Planeswalk
|
SVar:RolledWalk:DB$ Planeswalk
|
||||||
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll {CHAOS}, put a scroll counter on CARDNAME, then draw cards equal to the number of scroll counters on it.
|
T:Mode$ ChaosEnsues | TriggerZones$ Command | Execute$ TrigPutCounter | TriggerDescription$ Whenever chaos ensues, put a scroll counter on CARDNAME, then draw cards equal to the number of scroll counters on it.
|
||||||
SVar:RolledChaos:DB$ PutCounter | Defined$ Self | CounterType$ SCROLL | CounterNum$ 1 | SubAbility$ ScrollsOfKnowledge
|
SVar:TrigPutCounter:DB$ PutCounter | CounterType$ SCROLL | SubAbility$ ScrollsOfKnowledge
|
||||||
SVar:ScrollsOfKnowledge:DB$ Draw | Defined$ You | NumCards$ NumScrolls
|
SVar:ScrollsOfKnowledge:DB$ Draw | NumCards$ NumScrolls
|
||||||
SVar:AIRollPlanarDieParams:Mode$ Always | LowPriority$ True | MaxRollsPerTurn$ 9
|
SVar:AIRollPlanarDieParams:Mode$ Always | LowPriority$ True | MaxRollsPerTurn$ 9
|
||||||
Oracle:When you planeswalk to Aretopolis or at the beginning of your upkeep, put a scroll counter on Aretopolis, then you gain life equal to the number of scroll counters on it.\nWhen Aretopolis has ten or more scroll counters on it, planeswalk.\nWhenever you roll {CHAOS}, put a scroll counter on Aretopolis, then draw cards equal to the number of scroll counters on it.
|
Oracle:When you planeswalk to Aretopolis or at the beginning of your upkeep, put a scroll counter on Aretopolis, then you gain life equal to the number of scroll counters on it.\nWhen Aretopolis has ten or more scroll counters on it, planeswalk.\nWhenever chaos ensues, put a scroll counter on Aretopolis, then draw cards equal to the number of scroll counters on it.
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ ManaCost:no cost
|
|||||||
Types:Plane Kolbahan
|
Types:Plane Kolbahan
|
||||||
S:Mode$ AttackRestrict | EffectZone$ Command | MaxAttackers$ 1 | Description$ No more than one creature can attack each combat.
|
S:Mode$ AttackRestrict | EffectZone$ Command | MaxAttackers$ 1 | Description$ No more than one creature can attack each combat.
|
||||||
S:Mode$ Continuous | EffectZone$ Command | GlobalRule$ No more than one creature can block each combat. | Description$ No more than one creature can block each combat.
|
S:Mode$ Continuous | EffectZone$ Command | GlobalRule$ No more than one creature can block each combat. | Description$ No more than one creature can block each combat.
|
||||||
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll {CHAOS}, CARDNAME deals 2 damage to each creature.
|
T:Mode$ ChaosEnsues | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever chaos ensues, CARDNAME deals 2 damage to each creature.
|
||||||
SVar:RolledChaos:DB$ DamageAll | NumDmg$ 2 | ValidCards$ Creature | ValidDescription$ each creature.
|
SVar:RolledChaos:DB$ DamageAll | NumDmg$ 2 | ValidCards$ Creature
|
||||||
SVar:AIRollPlanarDieParams:Mode$ Random | MinTurn$ 5
|
SVar:AIRollPlanarDieParams:Mode$ Random | MinTurn$ 5
|
||||||
Oracle:No more than one creature can attack each combat.\nNo more than one creature can block each combat.\nWhenever you roll {CHAOS}, Astral Arena deals 2 damage to each creature.
|
Oracle:No more than one creature can attack each combat.\nNo more than one creature can block each combat.\nWhenever chaos ensues, Astral Arena deals 2 damage to each creature.
|
||||||
|
|||||||
@@ -2,9 +2,9 @@ Name:Bant
|
|||||||
ManaCost:no cost
|
ManaCost:no cost
|
||||||
Types:Plane Alara
|
Types:Plane Alara
|
||||||
S:Mode$ Continuous | EffectZone$ Command | Affected$ Creature | AddKeyword$ Exalted | Description$ All creatures have exalted.
|
S:Mode$ Continuous | EffectZone$ Command | Affected$ Creature | AddKeyword$ Exalted | Description$ All creatures have exalted.
|
||||||
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll {CHAOS}, put a divinity counter on target green, white, or blue creature. That creature has indestructible for as long as it has a divinity counter on it.
|
T:Mode$ ChaosEnsues | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever chaos ensues, put a divinity counter on target green, white, or blue creature. That creature has indestructible for as long as it has a divinity counter on it.
|
||||||
SVar:RolledChaos:DB$ PutCounter | ValidTgts$ Creature.Green,Creature.White,Creature.Blue | CounterType$ DIVINITY | CounterNum$ 1 | SubAbility$ DivineCharacter
|
SVar:RolledChaos:DB$ PutCounter | ValidTgts$ Creature.Green,Creature.White,Creature.Blue | CounterType$ DIVINITY | CounterNum$ 1 | SubAbility$ DivineCharacter
|
||||||
SVar:DivineCharacter:DB$ Animate | Defined$ Targeted | staticAbilities$ IndestructibleAspect | Duration$ Permanent
|
SVar:DivineCharacter:DB$ Animate | Defined$ Targeted | staticAbilities$ IndestructibleAspect | Duration$ Permanent
|
||||||
SVar:IndestructibleAspect:Mode$ Continuous | EffectZone$ Battlefield | Affected$ Card.Self+counters_GE1_DIVINITY | AddKeyword$ Indestructible
|
SVar:IndestructibleAspect:Mode$ Continuous | EffectZone$ Battlefield | Affected$ Card.Self+counters_GE1_DIVINITY | AddKeyword$ Indestructible
|
||||||
SVar:AIRollPlanarDieParams:Mode$ Always | HasColorCreatureInPlay$ GWU
|
SVar:AIRollPlanarDieParams:Mode$ Always | HasColorCreatureInPlay$ GWU
|
||||||
Oracle:All creatures have exalted. (Whenever a creature attacks alone, it gets +1/+1 until end of turn for each instance of exalted among permanents its controller controls.)\nWhenever you roll {CHAOS}, put a divinity counter on target green, white, or blue creature. That creature has indestructible for as long as it has a divinity counter on it.
|
Oracle:All creatures have exalted. (Whenever a creature attacks alone, it gets +1/+1 until end of turn for each instance of exalted among permanents its controller controls.)\nWhenever chaos ensues, put a divinity counter on target green, white, or blue creature. That creature has indestructible for as long as it has a divinity counter on it.
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ ManaCost:no cost
|
|||||||
Types:Plane Equilor
|
Types:Plane Equilor
|
||||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | TriggerZones$ Command | ValidCard$ Creature | Execute$ TrigPump | TriggerDescription$ Whenever a creature enters the battlefield, it gains double strike and haste until end of turn.
|
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | TriggerZones$ Command | ValidCard$ Creature | Execute$ TrigPump | TriggerDescription$ Whenever a creature enters the battlefield, it gains double strike and haste until end of turn.
|
||||||
SVar:TrigPump:DB$ Pump | Defined$ TriggeredCard | KW$ Double Strike & Haste
|
SVar:TrigPump:DB$ Pump | Defined$ TriggeredCard | KW$ Double Strike & Haste
|
||||||
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll {CHAOS}, exile target nontoken creature you control, then return it to the battlefield under your control.
|
T:Mode$ ChaosEnsues | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever chaos ensues, exile target nontoken creature you control, then return it to the battlefield under your control.
|
||||||
SVar:RolledChaos:DB$ ChangeZone | ValidTgts$ Creature.nonToken+YouCtrl | TgtPrompt$ Select target non-Token creature you control | Origin$ Battlefield | Destination$ Exile | RememberTargets$ True | ForgetOtherTargets$ True | SubAbility$ RestorationReturn
|
SVar:RolledChaos:DB$ ChangeZone | ValidTgts$ Creature.nonToken+YouCtrl | TgtPrompt$ Select target non-Token creature you control | Origin$ Battlefield | Destination$ Exile | RememberTargets$ True | ForgetOtherTargets$ True | SubAbility$ RestorationReturn
|
||||||
SVar:RestorationReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Battlefield | GainControl$ True
|
SVar:RestorationReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Battlefield | GainControl$ True
|
||||||
SVar:AIRollPlanarDieParams:Mode$ Always | MinTurn$ 3 | RollInMain1$ True
|
SVar:AIRollPlanarDieParams:Mode$ Always | MinTurn$ 3 | RollInMain1$ True
|
||||||
Oracle:Whenever a creature enters the battlefield, it gains double strike and haste until end of turn.\nWhenever you roll {CHAOS}, exile target nontoken creature you control, then return it to the battlefield under your control.
|
Oracle:Whenever a creature enters the battlefield, it gains double strike and haste until end of turn.\nWhenever chaos ensues, exile target nontoken creature you control, then return it to the battlefield under your control.
|
||||||
|
|||||||
@@ -11,8 +11,7 @@ ALTERNATE
|
|||||||
Name:Entering
|
Name:Entering
|
||||||
ManaCost:4 B R
|
ManaCost:4 B R
|
||||||
Types:Sorcery
|
Types:Sorcery
|
||||||
A:SP$ ChooseCard | Cost$ 4 B R | Choices$ Creature | ChoiceZone$ Graveyard | Amount$ 1 | SubAbility$ DBChangeZone | SpellDescription$ Put a creature card from a graveyard onto the battlefield under your control. It gains haste until end of turn.
|
A:SP$ ChangeZone | ChangeType$ Creature | Origin$ Graveyard | Destination$ Battlefield | GainControl$ True | Hidden$ True | RememberChanged$ True | SubAbility$ DBPump | SpellDescription$ Put a creature card from a graveyard onto the battlefield under your control. It gains haste until end of turn.
|
||||||
SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Defined$ ChosenCard | GainControl$ True | RememberChanged$ True | SubAbility$ DBPump
|
SVar:DBPump:DB$ Pump | Defined$ Remembered | KW$ Haste | SubAbility$ DBCleanup | StackDescription$ None
|
||||||
SVar:DBPump:DB$ Pump | Defined$ Remembered | KW$ Haste | SubAbility$ DBCleanup
|
|
||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
Oracle:Put a creature card from a graveyard onto the battlefield under your control. It gains haste until end of turn.\nFuse (You may cast one or both halves of this card from your hand.)
|
Oracle:Put a creature card from a graveyard onto the battlefield under your control. It gains haste until end of turn.\nFuse (You may cast one or both halves of this card from your hand.)
|
||||||
|
|||||||
@@ -2,11 +2,11 @@ Name:Celestine Reef
|
|||||||
ManaCost:no cost
|
ManaCost:no cost
|
||||||
Types:Plane Luvion
|
Types:Plane Luvion
|
||||||
S:Mode$ Continuous | EffectZone$ Command | Affected$ Creature.withoutFlying+withoutIslandwalk | AddHiddenKeyword$ CARDNAME can't attack. | Description$ Creatures without flying or islandwalk can't attack.
|
S:Mode$ Continuous | EffectZone$ Command | Affected$ Creature.withoutFlying+withoutIslandwalk | AddHiddenKeyword$ CARDNAME can't attack. | Description$ Creatures without flying or islandwalk can't attack.
|
||||||
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll {CHAOS}, until a player planeswalks, you can't lose the game and your opponents can't win the game.
|
T:Mode$ ChaosEnsues | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever chaos ensues, until a player planeswalks, you can't lose the game and your opponents can't win the game.
|
||||||
SVar:RolledChaos:DB$ Effect | Name$ Celestine Reef Effect | StaticAbilities$ STCantlose,STCantWin | Triggers$ TrigPlaneswalk | Duration$ Permanent
|
SVar:RolledChaos:DB$ Effect | StaticAbilities$ STCantlose,STCantWin | Triggers$ TrigPlaneswalk | Duration$ Permanent
|
||||||
SVar:STCantlose:Mode$ Continuous | EffectZone$ Command | Affected$ You | AddKeyword$ You can't lose the game. | Description$ Until a player planeswalks, you can't lose the game and your opponents can't win the game.
|
SVar:STCantlose:Mode$ Continuous | EffectZone$ Command | Affected$ You | AddKeyword$ You can't lose the game. | Description$ Until a player planeswalks, you can't lose the game and your opponents can't win the game.
|
||||||
SVar:STCantWin:Mode$ Continuous | EffectZone$ Command | Affected$ Player.Opponent | AddKeyword$ You can't win the game.
|
SVar:STCantWin:Mode$ Continuous | EffectZone$ Command | Affected$ Opponent | AddKeyword$ You can't win the game.
|
||||||
SVar:TrigPlaneswalk:Mode$ PlaneswalkedFrom | Execute$ DBCleanup | Static$ True
|
SVar:TrigPlaneswalk:Mode$ PlaneswalkedFrom | Execute$ DBCleanup | Static$ True
|
||||||
SVar:DBCleanup:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile
|
SVar:DBCleanup:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile
|
||||||
SVar:AIRollPlanarDieParams:Mode$ Always
|
SVar:AIRollPlanarDieParams:Mode$ Always
|
||||||
Oracle:Creatures without flying or islandwalk can't attack.\nWhenever you roll {CHAOS}, until a player planeswalks, you can't lose the game and your opponents can't win the game.
|
Oracle:Creatures without flying or islandwalk can't attack.\nWhenever chaos ensues, until a player planeswalks, you can't lose the game and your opponents can't win the game.
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ Types:Plane Mercadia
|
|||||||
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ TrigLife | OptionalDecider$ You | TriggerDescription$ When you planeswalk to CARDNAME or at the beginning of your upkeep, you may exchange life totals with target player.
|
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ TrigLife | OptionalDecider$ You | TriggerDescription$ When you planeswalk to CARDNAME or at the beginning of your upkeep, you may exchange life totals with target player.
|
||||||
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ TrigLife | TriggerZones$ Command | Secondary$ True | OptionalDecider$ You | TriggerDescription$ When you planeswalk to CARDNAME or at the beginning of your upkeep, you may exchange life totals with target player.
|
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ TrigLife | TriggerZones$ Command | Secondary$ True | OptionalDecider$ You | TriggerDescription$ When you planeswalk to CARDNAME or at the beginning of your upkeep, you may exchange life totals with target player.
|
||||||
SVar:TrigLife:DB$ ExchangeLife | Optional$ True | ValidTgts$ Player | TgtPrompt$ Select target player to exchange life totals with
|
SVar:TrigLife:DB$ ExchangeLife | Optional$ True | ValidTgts$ Player | TgtPrompt$ Select target player to exchange life totals with
|
||||||
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll {CHAOS}, exchange control of two target permanents that share a card type.
|
T:Mode$ ChaosEnsues | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever chaos ensues, exchange control of two target permanents that share a card type.
|
||||||
SVar:RolledChaos:DB$ ExchangeControl | TargetMin$ 2 | TargetMax$ 2 | ValidTgts$ Permanent | TgtPrompt$ Select target permanents that share a permanent type | TargetsWithSameCardType$ True
|
SVar:RolledChaos:DB$ ExchangeControl | TargetMin$ 2 | TargetMax$ 2 | ValidTgts$ Permanent | TgtPrompt$ Select target permanents that share a permanent type | TargetsWithSameCardType$ True
|
||||||
AI:RemoveDeck:All
|
AI:RemoveDeck:All
|
||||||
AI:RemoveDeck:Random
|
AI:RemoveDeck:Random
|
||||||
Oracle:When you planeswalk to Cliffside Market or at the beginning of your upkeep, you may exchange life totals with target player.\nWhenever you roll {CHAOS}, exchange control of two target permanents that share a card type.
|
Oracle:When you planeswalk to Cliffside Market or at the beginning of your upkeep, you may exchange life totals with target player.\nWhenever chaos ensues, exchange control of two target permanents that share a card type.
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ ManaCost:no cost
|
|||||||
Types:Plane Belenon
|
Types:Plane Belenon
|
||||||
R:Event$ Untap | ActiveZones$ Command | ValidCard$ Creature.YouCtrl | ReplaceWith$ RepPutCounter | UntapStep$ True | Description$ If a creature you control would untap during your untap step, put two +1/+1 counters on it instead.
|
R:Event$ Untap | ActiveZones$ Command | ValidCard$ Creature.YouCtrl | ReplaceWith$ RepPutCounter | UntapStep$ True | Description$ If a creature you control would untap during your untap step, put two +1/+1 counters on it instead.
|
||||||
SVar:RepPutCounter:DB$ PutCounter | Defined$ ReplacedCard | CounterType$ P1P1 | CounterNum$ 2
|
SVar:RepPutCounter:DB$ PutCounter | Defined$ ReplacedCard | CounterType$ P1P1 | CounterNum$ 2
|
||||||
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll {CHAOS}, untap each creature you control.
|
T:Mode$ ChaosEnsues | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever chaos ensues, untap each creature you control.
|
||||||
SVar:RolledChaos:DB$ UntapAll | ValidCards$ Creature.YouCtrl
|
SVar:RolledChaos:DB$ UntapAll | ValidCards$ Creature.YouCtrl
|
||||||
SVar:AIRollPlanarDieParams:Mode$ Always | HasCreatureInPlay$ True
|
SVar:AIRollPlanarDieParams:Mode$ Always | HasCreatureInPlay$ True
|
||||||
Oracle:If a creature you control would untap during your untap step, put two +1/+1 counters on it instead.\nWhenever you roll {CHAOS}, untap each creature you control.
|
Oracle:If a creature you control would untap during your untap step, put two +1/+1 counters on it instead.\nWhenever chaos ensues, untap each creature you control.
|
||||||
|
|||||||
@@ -3,10 +3,10 @@ ManaCost:no cost
|
|||||||
Types:Plane Shandalar
|
Types:Plane Shandalar
|
||||||
T:Mode$ TapsForMana | ValidCard$ Permanent | Execute$ TrigMana | TriggerZones$ Command | Static$ True | TriggerDescription$ Whenever a player taps a permanent for mana, that player adds one mana of any type that permanent produced.
|
T:Mode$ TapsForMana | ValidCard$ Permanent | Execute$ TrigMana | TriggerZones$ Command | Static$ True | TriggerDescription$ Whenever a player taps a permanent for mana, that player adds one mana of any type that permanent produced.
|
||||||
SVar:TrigMana:DB$ ManaReflected | ColorOrType$ Type | ReflectProperty$ Produced | Defined$ TriggeredActivator
|
SVar:TrigMana:DB$ ManaReflected | ColorOrType$ Type | ReflectProperty$ Produced | Defined$ TriggeredActivator
|
||||||
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll {CHAOS}, target player can't cast spells until a player planeswalks.
|
T:Mode$ ChaosEnsues | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever chaos ensues, target player can't cast spells until a player planeswalks.
|
||||||
SVar:RolledChaos:DB$ Effect | ValidTgts$ Player | IsCurse$ True | Name$ Eloren Wilds Effect | StaticAbilities$ STCantCast | Triggers$ TrigPlaneswalk | RememberObjects$ Targeted | Duration$ Permanent
|
SVar:RolledChaos:DB$ Effect | ValidTgts$ Player | IsCurse$ True | StaticAbilities$ STCantCast | Triggers$ TrigPlaneswalk | RememberObjects$ Targeted | Duration$ Permanent
|
||||||
SVar:STCantCast:Mode$ CantBeCast | EffectZone$ Command | ValidCard$ Card | Caster$ Player.IsRemembered | Description$ Target player can't cast spells until a player planeswalks.
|
SVar:STCantCast:Mode$ CantBeCast | EffectZone$ Command | ValidCard$ Card | Caster$ Player.IsRemembered | Description$ Target player can't cast spells until a player planeswalks.
|
||||||
SVar:TrigPlaneswalk:Mode$ PlaneswalkedFrom | Execute$ ExileSelf | Static$ True
|
SVar:TrigPlaneswalk:Mode$ PlaneswalkedFrom | Execute$ ExileSelf | Static$ True
|
||||||
SVar:ExileSelf:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile
|
SVar:ExileSelf:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile
|
||||||
SVar:AIRollPlanarDieParams:Mode$ Always
|
SVar:AIRollPlanarDieParams:Mode$ Always
|
||||||
Oracle:Whenever a player taps a permanent for mana, that player adds one mana of any type that permanent produced.\nWhenever you roll {CHAOS}, target player can't cast spells until a player planeswalks.
|
Oracle:Whenever a player taps a permanent for mana, that player adds one mana of any type that permanent produced.\nWhenever chaos ensues, target player can't cast spells until a player planeswalks.
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
Name:Extract from Darkness
|
Name:Extract from Darkness
|
||||||
ManaCost:3 U B
|
ManaCost:3 U B
|
||||||
Types:Sorcery
|
Types:Sorcery
|
||||||
A:SP$ Mill | Cost$ 3 U B | NumCards$ 2 | Defined$ Player | SubAbility$ DBChoose | SpellDescription$ Each player mills two cards. Then you put a creature card from a graveyard onto the battlefield under your control.
|
A:SP$ Mill | NumCards$ 2 | Defined$ Player | SubAbility$ DBChoose | SpellDescription$ Each player mills two cards.
|
||||||
SVar:DBChoose:DB$ ChooseCard | Defined$ You | Choices$ Creature | ChoiceZone$ Graveyard | Mandatory$ True | SubAbility$ DBReturn
|
SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Creature | ChangeNum$ 1 | Mandatory$ True | GainControl$ True | SelectPrompt$ Select a creature card to return to the battlefield | Hidden$ True | StackDescription$ SpellDescription | SpellDescription$ Then you put a creature card from a graveyard onto the battlefield under your control.
|
||||||
SVar:DBReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Defined$ ChosenCard | GainControl$ True
|
|
||||||
AI:RemoveDeck:Random
|
AI:RemoveDeck:Random
|
||||||
DeckHas:Ability$Graveyard
|
DeckHas:Ability$Mill|Graveyard
|
||||||
Oracle:Each player mills two cards. Then you put a creature card from a graveyard onto the battlefield under your control.
|
Oracle:Each player mills two cards. Then you put a creature card from a graveyard onto the battlefield under your control.
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ ManaCost:no cost
|
|||||||
Types:Plane Muraganda
|
Types:Plane Muraganda
|
||||||
S:Mode$ ReduceCost | EffectZone$ Command | ValidCard$ Card.Green | Type$ Spell | Amount$ 1 | Description$ Green spells cost {1} less to cast.
|
S:Mode$ ReduceCost | EffectZone$ Command | ValidCard$ Card.Green | Type$ Spell | Amount$ 1 | Description$ Green spells cost {1} less to cast.
|
||||||
S:Mode$ ReduceCost | EffectZone$ Command | ValidCard$ Card.Red | Type$ Spell | Amount$ 1 | Description$ Red spells cost {1} less to cast.
|
S:Mode$ ReduceCost | EffectZone$ Command | ValidCard$ Card.Red | Type$ Spell | Amount$ 1 | Description$ Red spells cost {1} less to cast.
|
||||||
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ DBPutCounter | TriggerDescription$ Whenever you roll {CHAOS}, put X +1/+1 counters on target creature, where X is that creature's mana value.
|
T:Mode$ ChaosEnsues | TriggerZones$ Command | Execute$ DBPutCounter | TriggerDescription$ Whenever chaos ensues, put X +1/+1 counters on target creature, where X is that creature's mana value.
|
||||||
SVar:DBPutCounter:DB$ PutCounter | ValidTgts$ Creature | TgtPrompt$ Select target creature | CounterType$ P1P1 | CounterNum$ Y
|
SVar:DBPutCounter:DB$ PutCounter | ValidTgts$ Creature | TgtPrompt$ Select target creature | CounterType$ P1P1 | CounterNum$ Y
|
||||||
SVar:Y:Targeted$CardManaCost
|
SVar:Y:Targeted$CardManaCost
|
||||||
SVar:AIRollPlanarDieParams:Mode$ Always | HasCreatureInPlay$ True
|
SVar:AIRollPlanarDieParams:Mode$ Always | HasCreatureInPlay$ True
|
||||||
Oracle:Red spells cost {1} less to cast.\nGreen spells cost {1} less to cast.\nWhenever you roll {CHAOS}, put X +1/+1 counters on target creature, where X is that creature's mana value.
|
Oracle:Red spells cost {1} less to cast.\nGreen spells cost {1} less to cast.\nWhenever chaos ensues, put X +1/+1 counters on target creature, where X is that creature's mana value.
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ ManaCost:no cost
|
|||||||
Types:Plane Moag
|
Types:Plane Moag
|
||||||
T:Mode$ SpellCast | OptionalDecider$ TriggeredPlayer | TriggerZones$ Command | Execute$ LifeSummer | TriggerDescription$ Whenever a player casts a spell, that player may gain 2 life.
|
T:Mode$ SpellCast | OptionalDecider$ TriggeredPlayer | TriggerZones$ Command | Execute$ LifeSummer | TriggerDescription$ Whenever a player casts a spell, that player may gain 2 life.
|
||||||
SVar:LifeSummer:DB$ GainLife | Defined$ TriggeredPlayer | LifeAmount$ 2
|
SVar:LifeSummer:DB$ GainLife | Defined$ TriggeredPlayer | LifeAmount$ 2
|
||||||
T:Mode$ PlanarDice | Result$ Chaos | OptionalDecider$ You | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll {CHAOS}, you may gain 10 life.
|
T:Mode$ ChaosEnsues | TriggerZones$ Command | OptionalDecider$ You | Execute$ RolledChaos | TriggerDescription$ Whenever chaos ensues, you may gain 10 life.
|
||||||
SVar:RolledChaos:DB$ GainLife | LifeAmount$ 10 | Defined$ You
|
SVar:RolledChaos:DB$ GainLife | LifeAmount$ 10 | Defined$ You
|
||||||
SVar:AIRollPlanarDieParams:Mode$ Always | LowPriority$ True | MaxRollsPerTurn$ 9
|
SVar:AIRollPlanarDieParams:Mode$ Always | LowPriority$ True | MaxRollsPerTurn$ 9
|
||||||
Oracle:Whenever a player casts a spell, that player may gain 2 life.\nWhenever you roll {CHAOS}, you may gain 10 life.
|
Oracle:Whenever a player casts a spell, that player may gain 2 life.\nWhenever chaos ensues, you may gain 10 life.
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ FurnaceDiscard | Tri
|
|||||||
SVar:FurnaceDiscard:DB$ Discard | ValidTgts$ Player | TargetsAtRandom$ True | NumCards$ 1 | Mode$ TgtChoose | RememberDiscarded$ True | SubAbility$ DBLoseLife
|
SVar:FurnaceDiscard:DB$ Discard | ValidTgts$ Player | TargetsAtRandom$ True | NumCards$ 1 | Mode$ TgtChoose | RememberDiscarded$ True | SubAbility$ DBLoseLife
|
||||||
SVar:DBLoseLife:DB$ LoseLife | Defined$ Targeted | LifeAmount$ 3 | ConditionDefined$ Remembered | ConditionPresent$ Land | ConditionCompare$ GE1 | SubAbility$ DBCleanup
|
SVar:DBLoseLife:DB$ LoseLife | Defined$ Targeted | LifeAmount$ 3 | ConditionDefined$ Remembered | ConditionPresent$ Land | ConditionCompare$ GE1 | SubAbility$ DBCleanup
|
||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | OptionalDecider$ You | TriggerDescription$ Whenever you roll {CHAOS}, you may destroy target nonland permanent.
|
T:Mode$ ChaosEnsues | TriggerZones$ Command | Execute$ RolledChaos | OptionalDecider$ You | TriggerDescription$ Whenever chaos ensues, you may destroy target nonland permanent.
|
||||||
SVar:RolledChaos:DB$ Destroy | ValidTgts$ Permanent.nonLand | TgtPrompt$ Select target nonland permanent to destroy
|
SVar:RolledChaos:DB$ Destroy | ValidTgts$ Permanent.nonLand | TgtPrompt$ Select target nonland permanent to destroy
|
||||||
SVar:AIRollPlanarDieParams:Mode$ Always | MinTurn$ 3 | LowPriority$ True | MaxRollsPerTurn$ 9
|
SVar:AIRollPlanarDieParams:Mode$ Always | MinTurn$ 3 | LowPriority$ True | MaxRollsPerTurn$ 9
|
||||||
Oracle:When you planeswalk to Furnace Layer or at the beginning of your upkeep, select target player at random. That player discards a card. If that player discards a land card this way, they lose 3 life.\nWhenever you roll {CHAOS}, you may destroy target nonland permanent.
|
Oracle:When you planeswalk to Furnace Layer or at the beginning of your upkeep, select target player at random. That player discards a card. If that player discards a land card this way, they lose 3 life.\nWhenever chaos ensues, you may destroy target nonland permanent.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ Name:Gavony
|
|||||||
ManaCost:no cost
|
ManaCost:no cost
|
||||||
Types:Plane Innistrad
|
Types:Plane Innistrad
|
||||||
S:Mode$ Continuous | EffectZone$ Command | Affected$ Creature | AddKeyword$ Vigilance | Description$ All creatures have vigilance.
|
S:Mode$ Continuous | EffectZone$ Command | Affected$ Creature | AddKeyword$ Vigilance | Description$ All creatures have vigilance.
|
||||||
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll {CHAOS}, creatures you control gain indestructible until end of turn.
|
T:Mode$ ChaosEnsues | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever chaos ensues, creatures you control gain indestructible until end of turn.
|
||||||
SVar:RolledChaos:DB$ PumpAll | ValidCards$ Creature.YouCtrl | KW$ Indestructible
|
SVar:RolledChaos:DB$ PumpAll | ValidCards$ Creature.YouCtrl | KW$ Indestructible
|
||||||
SVar:AIRollPlanarDieParams:Mode$ Always
|
SVar:AIRollPlanarDieParams:Mode$ Always
|
||||||
Oracle:All creatures have vigilance.\nWhenever you roll {CHAOS}, creatures you control gain indestructible until end of turn.
|
Oracle:All creatures have vigilance.\nWhenever chaos ensues, creatures you control gain indestructible until end of turn.
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ Types:Plane Lorwyn
|
|||||||
T:Mode$ Phase | Phase$ EndCombat | ValidPlayer$ You | TriggerZones$ Command | OptionalDecider$ You | Execute$ TrigExchange | TriggerDescription$ At end of combat, you may exchange control of target creature you control that dealt combat damage to a player this combat and target creature that player controls.
|
T:Mode$ Phase | Phase$ EndCombat | ValidPlayer$ You | TriggerZones$ Command | OptionalDecider$ You | Execute$ TrigExchange | TriggerDescription$ At end of combat, you may exchange control of target creature you control that dealt combat damage to a player this combat and target creature that player controls.
|
||||||
SVar:TrigExchange:DB$ Pump | ValidTgts$ Creature.YouCtrl+dealtCombatDamageThisCombat | TgtPrompt$ Select target creature you control that dealt combat damage to a player | SubAbility$ DBExchange
|
SVar:TrigExchange:DB$ Pump | ValidTgts$ Creature.YouCtrl+dealtCombatDamageThisCombat | TgtPrompt$ Select target creature you control that dealt combat damage to a player | SubAbility$ DBExchange
|
||||||
SVar:DBExchange:DB$ ExchangeControl | Defined$ ParentTarget | ValidTgts$ Creature.ControlledBy Player.wasDealtCombatDamageThisCombatBy ParentTarget | TgtPrompt$ Select target creature that player controls.
|
SVar:DBExchange:DB$ ExchangeControl | Defined$ ParentTarget | ValidTgts$ Creature.ControlledBy Player.wasDealtCombatDamageThisCombatBy ParentTarget | TgtPrompt$ Select target creature that player controls.
|
||||||
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll {CHAOS}, gain control of target creature you own.
|
T:Mode$ ChaosEnsues | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever chaos ensues, gain control of target creature you own.
|
||||||
SVar:RolledChaos:DB$ GainControl | ValidTgts$ Creature.YouOwn | TgtPrompt$ Select target creature you own to gain control of
|
SVar:RolledChaos:DB$ GainControl | ValidTgts$ Creature.YouOwn | TgtPrompt$ Select target creature you own to gain control of
|
||||||
AI:RemoveDeck:All
|
AI:RemoveDeck:All
|
||||||
Oracle:At end of combat, you may exchange control of target creature you control that dealt combat damage to a player this combat and target creature that player controls.\nWhenever you roll {CHAOS}, gain control of target creature you own.
|
Oracle:At end of combat, you may exchange control of target creature you control that dealt combat damage to a player this combat and target creature that player controls.\nWhenever chaos ensues, gain control of target creature you own.
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ ManaCost:no cost
|
|||||||
Types:Plane Mirrodin
|
Types:Plane Mirrodin
|
||||||
T:Mode$ SpellCast | ValidSA$ Instant.singleTarget,Sorcery.singleTarget | Execute$ TrigCopy | TriggerZones$ Command | TriggerDescription$ Whenever a player casts an instant or sorcery spell with a single target, that player copies that spell for each other spell, permanent, card not on the battlefield, and/or player the spell could target. Each copy targets a different one of them.
|
T:Mode$ SpellCast | ValidSA$ Instant.singleTarget,Sorcery.singleTarget | Execute$ TrigCopy | TriggerZones$ Command | TriggerDescription$ Whenever a player casts an instant or sorcery spell with a single target, that player copies that spell for each other spell, permanent, card not on the battlefield, and/or player the spell could target. Each copy targets a different one of them.
|
||||||
SVar:TrigCopy:DB$ CopySpellAbility | Defined$ TriggeredSpellAbility | Controller$ TriggeredActivator | CopyForEachCanTarget$ Spell,Permanent,Card,Player
|
SVar:TrigCopy:DB$ CopySpellAbility | Defined$ TriggeredSpellAbility | Controller$ TriggeredActivator | CopyForEachCanTarget$ Spell,Permanent,Card,Player
|
||||||
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll {CHAOS}, choose target creature. Each player except that creature's controller creates a token that's a copy of that creature.
|
T:Mode$ ChaosEnsues | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever chaos ensues, choose target creature. Each player except that creature's controller creates a token that's a copy of that creature.
|
||||||
SVar:RolledChaos:DB$ RepeatEach | RepeatPlayers$ NonTargetedController | RepeatSubAbility$ DBCopy | ValidTgts$ Creature | TgtPrompt$ Select target creature | ChangeZoneTable$ True
|
SVar:RolledChaos:DB$ RepeatEach | RepeatPlayers$ NonTargetedController | RepeatSubAbility$ DBCopy | ValidTgts$ Creature | TgtPrompt$ Select target creature | ChangeZoneTable$ True
|
||||||
SVar:DBCopy:DB$ CopyPermanent | Defined$ ParentTarget | Controller$ Remembered
|
SVar:DBCopy:DB$ CopyPermanent | Defined$ ParentTarget | Controller$ Remembered
|
||||||
AI:RemoveDeck:All
|
AI:RemoveDeck:All
|
||||||
Oracle:Whenever a player casts an instant or sorcery spell with a single target, that player copies that spell for each other spell, permanent, card not on the battlefield, and/or player the spell could target. Each copy targets a different one of them.\nWhenever you roll {CHAOS}, choose target creature. Each player except that creature's controller creates a token that's a copy of that creature.
|
Oracle:Whenever a player casts an instant or sorcery spell with a single target, that player copies that spell for each other spell, permanent, card not on the battlefield, and/or player the spell could target. Each copy targets a different one of them.\nWhenever chaos ensues, choose target creature. Each player except that creature's controller creates a token that's a copy of that creature.
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ ManaCost:no cost
|
|||||||
Types:Plane Lorwyn
|
Types:Plane Lorwyn
|
||||||
T:Mode$ ChangesZone | ValidCard$ Land | Destination$ Battlefield | Execute$ TripleGoat | TriggerZones$ Command | TriggerDescription$ Whenever a land enters the battlefield, that land's controller creates three 0/1 white Goat creature tokens.
|
T:Mode$ ChangesZone | ValidCard$ Land | Destination$ Battlefield | Execute$ TripleGoat | TriggerZones$ Command | TriggerDescription$ Whenever a land enters the battlefield, that land's controller creates three 0/1 white Goat creature tokens.
|
||||||
SVar:TripleGoat:DB$ Token | TokenScript$ w_0_1_goat | TokenOwner$ TriggeredCardController | TokenAmount$ 3
|
SVar:TripleGoat:DB$ Token | TokenScript$ w_0_1_goat | TokenOwner$ TriggeredCardController | TokenAmount$ 3
|
||||||
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll {CHAOS}, create a 0/1 white Goat creature token.
|
T:Mode$ ChaosEnsues | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever chaos ensues, create a 0/1 white Goat creature token.
|
||||||
SVar:RolledChaos:DB$ Token | TokenScript$ w_0_1_goat | TokenOwner$ You | TokenAmount$ 1
|
SVar:RolledChaos:DB$ Token | TokenScript$ w_0_1_goat | TokenOwner$ You | TokenAmount$ 1
|
||||||
SVar:AIRollPlanarDieParams:Mode$ Always | LowPriority$ True | MaxRollsPerTurn$ 9
|
SVar:AIRollPlanarDieParams:Mode$ Always | LowPriority$ True | MaxRollsPerTurn$ 9
|
||||||
Oracle:Whenever a land enters the battlefield, that land's controller creates three 0/1 white Goat creature tokens.\nWhenever you roll {CHAOS}, create a 0/1 white Goat creature token.
|
Oracle:Whenever a land enters the battlefield, that land's controller creates three 0/1 white Goat creature tokens.\nWhenever chaos ensues, create a 0/1 white Goat creature token.
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$
|
|||||||
SVar:OssuaryCounters:DB$ PutCounter | ValidTgts$ Creature | TargetsWithDefinedController$ TriggeredCardController | TargetingPlayer$ TriggeredCardController | TgtPrompt$ Select target creature you control to distribute counters to | CounterType$ P1P1 | CounterNum$ OssuaryX | TargetMin$ 1 | TargetMax$ MaxTgts | DividedAsYouChoose$ OssuaryX
|
SVar:OssuaryCounters:DB$ PutCounter | ValidTgts$ Creature | TargetsWithDefinedController$ TriggeredCardController | TargetingPlayer$ TriggeredCardController | TgtPrompt$ Select target creature you control to distribute counters to | CounterType$ P1P1 | CounterNum$ OssuaryX | TargetMin$ 1 | TargetMax$ MaxTgts | DividedAsYouChoose$ OssuaryX
|
||||||
SVar:OssuaryX:TriggeredCard$CardPower
|
SVar:OssuaryX:TriggeredCard$CardPower
|
||||||
SVar:MaxTgts:TriggeredCardController$Valid Creature.YouCtrl
|
SVar:MaxTgts:TriggeredCardController$Valid Creature.YouCtrl
|
||||||
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll {CHAOS}, each player exiles all creatures they control and creates X 1/1 green Saproling creature tokens, where X is the total power of the creatures they exiled this way. Then planeswalk.
|
T:Mode$ ChaosEnsues | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever chaos ensues, each player exiles all creatures they control and creates X 1/1 green Saproling creature tokens, where X is the total power of the creatures they exiled this way. Then planeswalk.
|
||||||
SVar:RolledChaos:DB$ ChangeZoneAll | ChangeType$ Creature | Imprint$ True | Origin$ Battlefield | Destination$ Exile | SubAbility$ OssuaryRepeat
|
SVar:RolledChaos:DB$ ChangeZoneAll | ChangeType$ Creature | Imprint$ True | Origin$ Battlefield | Destination$ Exile | SubAbility$ OssuaryRepeat
|
||||||
SVar:OssuaryRepeat:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ OssuaryTokens | SubAbility$ WalkAway | ChangeZoneTable$ True
|
SVar:OssuaryRepeat:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ OssuaryTokens | SubAbility$ WalkAway | ChangeZoneTable$ True
|
||||||
SVar:OssuaryTokens:DB$ Token | TokenAmount$ OsX | TokenScript$ g_1_1_saproling | TokenOwner$ Player.IsRemembered
|
SVar:OssuaryTokens:DB$ Token | TokenAmount$ OsX | TokenScript$ g_1_1_saproling | TokenOwner$ Player.IsRemembered
|
||||||
@@ -13,4 +13,4 @@ SVar:WalkAway:DB$ Planeswalk | SubAbility$ ClearImprinted
|
|||||||
SVar:ClearImprinted:DB$ Cleanup | ClearImprinted$ True
|
SVar:ClearImprinted:DB$ Cleanup | ClearImprinted$ True
|
||||||
SVar:OsX:ImprintedLKI$FilterControlledByRemembered_CardPower
|
SVar:OsX:ImprintedLKI$FilterControlledByRemembered_CardPower
|
||||||
SVar:AIRollPlanarDieParams:Mode$ Random | MinTurn$ 5
|
SVar:AIRollPlanarDieParams:Mode$ Random | MinTurn$ 5
|
||||||
Oracle:Whenever a creature dies, its controller distributes a number of +1/+1 counters equal to its power among any number of target creatures they control.\nWhenever you roll {CHAOS}, each player exiles all creatures they control and creates X 1/1 green Saproling creature tokens, where X is the total power of the creatures they exiled this way. Then planeswalk.
|
Oracle:Whenever a creature dies, its controller distributes a number of +1/+1 counters equal to its power among any number of target creatures they control.\nWhenever chaos ensues, each player exiles all creatures they control and creates X 1/1 green Saproling creature tokens, where X is the total power of the creatures they exiled this way. Then planeswalk.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ Name:Grixis
|
|||||||
ManaCost:no cost
|
ManaCost:no cost
|
||||||
Types:Plane Alara
|
Types:Plane Alara
|
||||||
S:Mode$ Continuous | EffectZone$ Command | AffectedZone$ Graveyard | Affected$ Creature.YouOwn+Blue,Creature.YouOwn+Red,Creature.YouOwn+Black | AddKeyword$ Unearth:CardManaCost | Description$ Blue, black, and/or red creature cards in your graveyard have unearth. The unearth cost is equal to the card's mana cost. (Pay the card's mana cost: Return it to the battlefield. The creature gains haste. Exile it at the beginning of the next end step or if it would leave the battlefield. Unearth only as a sorcery.)
|
S:Mode$ Continuous | EffectZone$ Command | AffectedZone$ Graveyard | Affected$ Creature.YouOwn+Blue,Creature.YouOwn+Red,Creature.YouOwn+Black | AddKeyword$ Unearth:CardManaCost | Description$ Blue, black, and/or red creature cards in your graveyard have unearth. The unearth cost is equal to the card's mana cost. (Pay the card's mana cost: Return it to the battlefield. The creature gains haste. Exile it at the beginning of the next end step or if it would leave the battlefield. Unearth only as a sorcery.)
|
||||||
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll {CHAOS}, put target creature card from a graveyard onto the battlefield under your control.
|
T:Mode$ ChaosEnsues | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever chaos ensues, put target creature card from a graveyard onto the battlefield under your control.
|
||||||
SVar:RolledChaos:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | GainControl$ True | TgtPrompt$ Choose target creature card in a graveyard | ValidTgts$ Creature
|
SVar:RolledChaos:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | GainControl$ True | TgtPrompt$ Choose target creature card in a graveyard | ValidTgts$ Creature
|
||||||
SVar:AIRollPlanarDieParams:Mode$ Always | MinTurn$ 3 | LowPriority$ True | MaxRollsPerTurn$ 9
|
SVar:AIRollPlanarDieParams:Mode$ Always | MinTurn$ 3 | LowPriority$ True | MaxRollsPerTurn$ 9
|
||||||
Oracle:Blue, black, and/or red creature cards in your graveyard have unearth. The unearth cost is equal to the card's mana cost. (Pay the card's mana cost: Return it to the battlefield. The creature gains haste. Exile it at the beginning of the next end step or if it would leave the battlefield. Unearth only as a sorcery.)\nWhenever you roll {CHAOS}, put target creature card from a graveyard onto the battlefield under your control.
|
Oracle:Blue, black, and/or red creature cards in your graveyard have unearth. The unearth cost is equal to the card's mana cost. (Pay the card's mana cost: Return it to the battlefield. The creature gains haste. Exile it at the beginning of the next end step or if it would leave the battlefield. Unearth only as a sorcery.)\nWhenever chaos ensues, put target creature card from a graveyard onto the battlefield under your control.
|
||||||
|
|||||||