Merge remote-tracking branch 'upstream/master' into decks
@@ -3,7 +3,7 @@
|
||||
<parent>
|
||||
<artifactId>forge</artifactId>
|
||||
<groupId>forge</groupId>
|
||||
<version>1.6.56-SNAPSHOT</version>
|
||||
<version>1.6.57-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<artifactId>forge</artifactId>
|
||||
<groupId>forge</groupId>
|
||||
<version>1.6.56-SNAPSHOT</version>
|
||||
<version>1.6.57-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>forge-ai</artifactId>
|
||||
|
||||
@@ -432,7 +432,7 @@ public class ComputerUtilCard {
|
||||
* @param list
|
||||
* @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) {
|
||||
return Iterables.get(list, 0);
|
||||
}
|
||||
|
||||
@@ -86,7 +86,7 @@ public class PlayerControllerAi extends PlayerController {
|
||||
|
||||
@Override
|
||||
public SpellAbility getAbilityToPlay(Card hostCard, List<SpellAbility> abilities, ITriggerEvent triggerEvent) {
|
||||
if (abilities.size() == 0) {
|
||||
if (abilities.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
return abilities.get(0);
|
||||
|
||||
@@ -32,6 +32,7 @@ public enum SpellApiToAi {
|
||||
.put(ApiType.BecomeMonarch, AlwaysPlayAi.class)
|
||||
.put(ApiType.BecomesBlocked, BecomesBlockedAi.class)
|
||||
.put(ApiType.BidLife, BidLifeAi.class)
|
||||
.put(ApiType.BlankLine, AlwaysPlayAi.class)
|
||||
.put(ApiType.Bond, BondAi.class)
|
||||
.put(ApiType.Branch, AlwaysPlayAi.class)
|
||||
.put(ApiType.Camouflage, ChooseCardAi.class)
|
||||
@@ -40,6 +41,7 @@ public enum SpellApiToAi {
|
||||
.put(ApiType.ChangeX, AlwaysPlayAi.class)
|
||||
.put(ApiType.ChangeZone, ChangeZoneAi.class)
|
||||
.put(ApiType.ChangeZoneAll, ChangeZoneAllAi.class)
|
||||
.put(ApiType.ChaosEnsues, AlwaysPlayAi.class)
|
||||
.put(ApiType.Charm, CharmAi.class)
|
||||
.put(ApiType.ChooseCard, ChooseCardAi.class)
|
||||
.put(ApiType.ChooseColor, ChooseColorAi.class)
|
||||
|
||||
@@ -1216,7 +1216,7 @@ public class ChangeZoneAi extends SpellAbilityAi {
|
||||
}
|
||||
}
|
||||
if (choice == null) { // can't find anything left
|
||||
if (sa.getTargets().size() == 0 || !sa.isTargetNumberValid()) {
|
||||
if (sa.getTargets().isEmpty() || !sa.isTargetNumberValid()) {
|
||||
if (!mandatory) {
|
||||
sa.resetTargets();
|
||||
}
|
||||
@@ -1432,7 +1432,7 @@ public class ChangeZoneAi extends SpellAbilityAi {
|
||||
final ZoneType destination = ZoneType.smartValueOf(sa.getParam("Destination"));
|
||||
final TargetRestrictions tgt = sa.getTargetRestrictions();
|
||||
|
||||
CardCollection list = new CardCollection(CardUtil.getValidCardsToTarget(tgt, sa));
|
||||
List<Card> list = CardUtil.getValidCardsToTarget(tgt, sa);
|
||||
|
||||
if (list.isEmpty()) {
|
||||
return false;
|
||||
|
||||
@@ -5,7 +5,6 @@ import java.util.Map;
|
||||
|
||||
import com.google.common.base.Predicates;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.ai.AiController;
|
||||
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
|
||||
// creatures are better in value
|
||||
if ((CardLists.getNotType(oppType, "Creature").size() == 0)
|
||||
&& (CardLists.getNotType(computerType, "Creature").size() == 0)) {
|
||||
if (CardLists.getNotType(oppType, "Creature").isEmpty() && CardLists.getNotType(computerType, "Creature").isEmpty()) {
|
||||
if (game.getCombat() != null && ComputerUtilCombat.lifeInSeriousDanger(ai, game.getCombat())) {
|
||||
if (game.getPhaseHandler().is(PhaseType.COMBAT_DECLARE_BLOCKERS)
|
||||
&& game.getPhaseHandler().getPlayerTurn().isOpponentOf(ai)) {
|
||||
@@ -225,17 +223,15 @@ public class ChangeZoneAllAi extends SpellAbilityAi {
|
||||
} else if (origin.equals(ZoneType.Graveyard)) {
|
||||
if (sa.usesTargeting()) {
|
||||
// search targetable Opponents
|
||||
final Iterable<Player> oppList = Iterables.filter(ai.getOpponents(),
|
||||
PlayerPredicates.isTargetableBy(sa));
|
||||
final PlayerCollection oppList = ai.getOpponents().filter(PlayerPredicates.isTargetableBy(sa));
|
||||
|
||||
if (Iterables.isEmpty(oppList)) {
|
||||
if (oppList.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// get the one with the most in graveyard
|
||||
// zone is visible so evaluate which would be hurt the most
|
||||
Player oppTarget = Collections.max(Lists.newArrayList(oppList),
|
||||
AiPlayerPredicates.compareByZoneValue(sa.getParam("ChangeType"), origin, sa));
|
||||
Player oppTarget = Collections.max(oppList, AiPlayerPredicates.compareByZoneValue(sa.getParam("ChangeType"), origin, sa));
|
||||
|
||||
// set the target
|
||||
if (!oppTarget.getCardsIn(ZoneType.Graveyard).isEmpty()) {
|
||||
@@ -270,18 +266,14 @@ public class ChangeZoneAllAi extends SpellAbilityAi {
|
||||
return (curHandSize + minAdv - 1 < numExiledWithSrc) || (!noDiscard && numExiledWithSrc >= ai.getMaxHandSize());
|
||||
}
|
||||
} else if (origin.equals(ZoneType.Stack)) {
|
||||
// time stop can do something like this:
|
||||
// Origin$ Stack | Destination$ Exile | SubAbility$ DBSkip
|
||||
// DBSKipToPhase | DB$SkipToPhase | Phase$ Cleanup
|
||||
// otherwise, this situation doesn't exist
|
||||
// TODO
|
||||
return false;
|
||||
}
|
||||
|
||||
if (destination.equals(ZoneType.Battlefield)) {
|
||||
if (sa.hasParam("GainControl")) {
|
||||
// Check if the cards are valuable enough
|
||||
if (CardLists.getNotType(oppType, "Creature").size() == 0
|
||||
&& CardLists.getNotType(computerType, "Creature").size() == 0) {
|
||||
if (CardLists.getNotType(oppType, "Creature").isEmpty() && CardLists.getNotType(computerType, "Creature").isEmpty()) {
|
||||
if ((ComputerUtilCard.evaluateCreatureList(computerType) + ComputerUtilCard
|
||||
.evaluateCreatureList(oppType)) < 400) {
|
||||
return false;
|
||||
@@ -294,8 +286,7 @@ public class ChangeZoneAllAi extends SpellAbilityAi {
|
||||
}
|
||||
} else {
|
||||
// don't activate if human gets more back than AI does
|
||||
if ((CardLists.getNotType(oppType, "Creature").size() == 0)
|
||||
&& (CardLists.getNotType(computerType, "Creature").size() == 0)) {
|
||||
if (CardLists.getNotType(oppType, "Creature").isEmpty() && CardLists.getNotType(computerType, "Creature").isEmpty()) {
|
||||
if (ComputerUtilCard.evaluateCreatureList(computerType) <= (ComputerUtilCard
|
||||
.evaluateCreatureList(oppType) + 100)) {
|
||||
return false;
|
||||
@@ -354,8 +345,7 @@ public class ChangeZoneAllAi extends SpellAbilityAi {
|
||||
return true;
|
||||
|
||||
// if AI creature is better than Human Creature
|
||||
return ComputerUtilCard.evaluateCreatureList(aiCards) >= ComputerUtilCard
|
||||
.evaluateCreatureList(humanCards);
|
||||
return ComputerUtilCard.evaluateCreatureList(aiCards) >= ComputerUtilCard.evaluateCreatureList(humanCards);
|
||||
}
|
||||
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 only creatures are affected evaluate both lists and pass only
|
||||
// if human creatures are more valuable
|
||||
if ((CardLists.getNotType(humanType, "Creature").isEmpty()) && (CardLists.getNotType(computerType, "Creature").isEmpty())) {
|
||||
if (ComputerUtilCard.evaluateCreatureList(computerType) >= ComputerUtilCard
|
||||
.evaluateCreatureList(humanType)) {
|
||||
if (CardLists.getNotType(humanType, "Creature").isEmpty() && CardLists.getNotType(computerType, "Creature").isEmpty()) {
|
||||
if (ComputerUtilCard.evaluateCreatureList(computerType) >= ComputerUtilCard.evaluateCreatureList(humanType)) {
|
||||
return false;
|
||||
}
|
||||
} // otherwise evaluate both lists by CMC and pass only if human
|
||||
// permanents are more valuable
|
||||
else if (ComputerUtilCard.evaluatePermanentList(computerType) >= ComputerUtilCard
|
||||
.evaluatePermanentList(humanType)) {
|
||||
else if (ComputerUtilCard.evaluatePermanentList(computerType) >= ComputerUtilCard.evaluatePermanentList(humanType)) {
|
||||
return false;
|
||||
}
|
||||
} 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.Stack)) {
|
||||
// time stop can do something like this:
|
||||
// Origin$ Stack | Destination$ Exile | SubAbility$ DBSkip
|
||||
// DBSKipToPhase | DB$SkipToPhase | Phase$ Cleanup
|
||||
// otherwise, this situation doesn't exist
|
||||
return false;
|
||||
// currently only exists indirectly (e.g. Summary Dismissal via PlayAi)
|
||||
}
|
||||
|
||||
if (destination.equals(ZoneType.Battlefield)) {
|
||||
@@ -469,25 +453,22 @@ public class ChangeZoneAllAi extends SpellAbilityAi {
|
||||
if (mandatory) {
|
||||
return true;
|
||||
}
|
||||
if (sa.getParam("GainControl") != null) {
|
||||
if (sa.hasParam("GainControl")) {
|
||||
// Check if the cards are valuable enough
|
||||
if ((CardLists.getNotType(humanType, "Creature").size() == 0) && (CardLists.getNotType(computerType, "Creature").size() == 0)) {
|
||||
return (ComputerUtilCard.evaluateCreatureList(computerType) + ComputerUtilCard
|
||||
.evaluateCreatureList(humanType)) >= 1;
|
||||
if (CardLists.getNotType(humanType, "Creature").isEmpty() && CardLists.getNotType(computerType, "Creature").isEmpty()) {
|
||||
return (ComputerUtilCard.evaluateCreatureList(computerType) + ComputerUtilCard.evaluateCreatureList(humanType)) >= 1;
|
||||
} // otherwise evaluate both lists by CMC and pass only if human
|
||||
// permanents are less valuable
|
||||
else return (ComputerUtilCard.evaluatePermanentList(computerType) + ComputerUtilCard
|
||||
return (ComputerUtilCard.evaluatePermanentList(computerType) + ComputerUtilCard
|
||||
.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);
|
||||
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);
|
||||
}
|
||||
return ComputerUtilCard.evaluatePermanentList(computerType) > ComputerUtilCard.evaluatePermanentList(humanType);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@@ -59,7 +59,7 @@ public class ClashAi extends SpellAbilityAi {
|
||||
@Override
|
||||
protected Player chooseSinglePlayer(Player ai, SpellAbility sa, Iterable<Player> options, Map<String, Object> params) {
|
||||
for (Player p : options) {
|
||||
if (p.getCardsIn(ZoneType.Library).size() == 0)
|
||||
if (p.getCardsIn(ZoneType.Library).isEmpty())
|
||||
return p;
|
||||
}
|
||||
|
||||
|
||||
@@ -64,8 +64,7 @@ public class CounterAi extends SpellAbilityAi {
|
||||
|
||||
if (sa.usesTargeting()) {
|
||||
final SpellAbility topSA = ComputerUtilAbility.getTopSpellAbilityOnStack(game, sa);
|
||||
if ((topSA.isSpell() && !CardFactoryUtil.isCounterableBy(topSA.getHostCard(), sa)) || topSA.getActivatingPlayer() == ai
|
||||
|| ai.getAllies().contains(topSA.getActivatingPlayer())) {
|
||||
if ((topSA.isSpell() && !CardFactoryUtil.isCounterableBy(topSA.getHostCard(), sa)) || ai.getYourTeam().contains(topSA.getActivatingPlayer())) {
|
||||
// might as well check for player's friendliness
|
||||
return false;
|
||||
} 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
|
||||
List<Card> targetables = CardLists.getTargetableCards(ai.getCardsIn(ZoneType.Battlefield), sa);
|
||||
|
||||
if (targetables.size() == 0) {
|
||||
if (targetables.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -153,11 +153,11 @@ public class RegenerateAi extends SpellAbilityAi {
|
||||
CardCollectionView targetables = CardLists.getTargetableCards(game.getCardsIn(ZoneType.Battlefield), sa);
|
||||
final List<Card> compTargetables = CardLists.filterControlledBy(targetables, ai);
|
||||
|
||||
if (targetables.size() == 0) {
|
||||
if (targetables.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!mandatory && compTargetables.size() == 0) {
|
||||
if (!mandatory && compTargetables.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ public class RegenerateAllAi extends SpellAbilityAi {
|
||||
list = CardLists.getValidCards(list, valid, hostCard.getController(), hostCard, sa);
|
||||
list = CardLists.filter(list, CardPredicates.isController(ai));
|
||||
|
||||
if (list.size() == 0) {
|
||||
if (list.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<artifactId>forge</artifactId>
|
||||
<groupId>forge</groupId>
|
||||
<version>1.6.56-SNAPSHOT</version>
|
||||
<version>1.6.57-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>forge-core</artifactId>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<artifactId>forge</artifactId>
|
||||
<groupId>forge</groupId>
|
||||
<version>1.6.56-SNAPSHOT</version>
|
||||
<version>1.6.57-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>forge-game</artifactId>
|
||||
|
||||
@@ -1439,6 +1439,8 @@ public class GameAction {
|
||||
}
|
||||
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()) {
|
||||
checkAgain = true;
|
||||
}
|
||||
|
||||
@@ -3580,6 +3580,18 @@ public class AbilityUtils {
|
||||
}
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -37,6 +37,7 @@ public enum ApiType {
|
||||
ChangeX (ChangeXEffect.class),
|
||||
ChangeZone (ChangeZoneEffect.class),
|
||||
ChangeZoneAll (ChangeZoneAllEffect.class),
|
||||
ChaosEnsues (ChaosEnsuesEffect.class),
|
||||
Charm (CharmEffect.class),
|
||||
ChooseCard (ChooseCardEffect.class),
|
||||
ChooseColor (ChooseColorEffect.class),
|
||||
@@ -189,7 +190,7 @@ public enum ApiType {
|
||||
Vote (VoteEffect.class),
|
||||
WinsGame (GameWinEffect.class),
|
||||
|
||||
|
||||
BlankLine (BlankLineEffect.class),
|
||||
DamageResolve (DamageResolveEffect.class),
|
||||
ChangeZoneResolve (ChangeZoneResolveEffect.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";
|
||||
|
||||
if (destination.equals(ZoneType.Battlefield)) {
|
||||
final boolean attacking = (sa.hasParam("Attacking"));
|
||||
final boolean attacking = sa.hasParam("Attacking");
|
||||
if (ZoneType.Graveyard.equals(origin)) {
|
||||
sb.append("Return").append(targetname).append(fromGraveyard).append(" to the battlefield");
|
||||
} 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 (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)) {
|
||||
// This only fizzles spells, not anything else.
|
||||
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,9 +13,15 @@ public class PlaneswalkEffect extends SpellAbilityEffect {
|
||||
public void resolve(SpellAbility sa) {
|
||||
Game game = sa.getActivatingPlayer().getGame();
|
||||
|
||||
if (game.getActivePlanes() == null) { // not a planechase game, nothing happens
|
||||
return;
|
||||
}
|
||||
|
||||
if (!sa.hasParam("DontPlaneswalkAway")) {
|
||||
for (Player p : game.getPlayers()) {
|
||||
p.leaveCurrentPlane();
|
||||
}
|
||||
}
|
||||
if (sa.hasParam("Defined")) {
|
||||
CardCollectionView destinations = AbilityUtils.getDefinedCards(sa.getHostCard(), sa.getParam("Defined"), sa);
|
||||
sa.getActivatingPlayer().planeswalkTo(sa, destinations);
|
||||
|
||||
@@ -68,6 +68,9 @@ public class RollDiceEffect extends SpellAbilityEffect {
|
||||
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) {
|
||||
if (amount == 0) {
|
||||
return 0;
|
||||
}
|
||||
int advantage = getRollAdvange(player);
|
||||
amount += advantage;
|
||||
int total = 0;
|
||||
|
||||
@@ -1,12 +1,6 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.game.PlanarDice;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.Card;
|
||||
@@ -16,17 +10,17 @@ import forge.game.trigger.Trigger;
|
||||
import forge.game.trigger.TriggerType;
|
||||
import forge.game.trigger.WrappedAbility;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class RunChaosEffect extends SpellAbilityEffect {
|
||||
|
||||
@Override
|
||||
public void resolve(SpellAbility sa) {
|
||||
Map<AbilityKey, Object> map = AbilityKey.mapFromPlayer(sa.getActivatingPlayer());
|
||||
map.put(AbilityKey.Result, PlanarDice.Chaos);
|
||||
|
||||
List<SpellAbility> validSA = Lists.newArrayList();
|
||||
for (final Card c : getTargetCards(sa)) {
|
||||
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());
|
||||
|
||||
Player decider = sa.getActivatingPlayer();
|
||||
@@ -44,5 +38,4 @@ public class RunChaosEffect extends SpellAbilityEffect {
|
||||
}
|
||||
sa.getActivatingPlayer().getController().orderAndPlaySimultaneousSa(validSA);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import forge.util.Lang;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.google.common.collect.ArrayListMultimap;
|
||||
@@ -35,13 +36,13 @@ public class VoteEffect extends SpellAbilityEffect {
|
||||
@Override
|
||||
protected String getStackDescription(final SpellAbility sa) {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
sb.append(StringUtils.join(getDefinedPlayersOrTargeted(sa), ", "));
|
||||
sb.append(" vote ");
|
||||
sb.append(Lang.joinHomogenous(getDefinedPlayersOrTargeted(sa))).append(" vote ");
|
||||
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")) {
|
||||
sb.append(sa.getParam("VoteMessage"));
|
||||
}
|
||||
sb.append(".");
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
|
||||
@@ -350,9 +350,17 @@ public class CardFactory {
|
||||
planesWalkTrigger.setOverridingAbility(AbilityFactory.getAbility(rolledWalk, card));
|
||||
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" +
|
||||
" | 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);
|
||||
planarRoll.setSVar("X", "Count$PlanarDiceSpecialActionThisTurn");
|
||||
|
||||
@@ -815,9 +815,9 @@ public class CardFactoryUtil {
|
||||
inst.addTrigger(trigger);
|
||||
} else if (keyword.equals("Ascend")) {
|
||||
// Ascend trigger only for Permanent
|
||||
if (card.isPermanent()) {
|
||||
final String trig = "Mode$ Always | TriggerZones$ Battlefield | Secondary$ True"
|
||||
+ " | Static$ True | Blessing$ False | IsPresent$ Permanent.YouCtrl | PresentCompare$ GE10 "
|
||||
if (card.isPermanent() || card.isPlane()) {
|
||||
final String trig = "Mode$ Always | TriggerZones$ " + (card.isPlane() ? "Command" : "Battlefield")
|
||||
+ " | Secondary$ True | Static$ True | Blessing$ False | IsPresent$ Permanent.YouCtrl | PresentCompare$ GE10"
|
||||
+ " | TriggerDescription$ Ascend (" + inst.getReminderText() + ")";
|
||||
|
||||
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
|
||||
final StringBuilder sbDies = new StringBuilder();
|
||||
sbDies.append("Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | TriggerZones$ Exile |");
|
||||
sbDies.append("ValidCard$ Creature.HauntedBy | Execute$ ").append(hauntSVarName);
|
||||
sbDies.append("Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | TriggerZones$ Exile");
|
||||
sbDies.append(" | ValidCard$ Creature.HauntedBy | Execute$ ").append(hauntSVarName);
|
||||
sbDies.append(" | TriggerDescription$ ").append(hauntDescription);
|
||||
|
||||
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
|
||||
final StringBuilder sbHaunter = new StringBuilder();
|
||||
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(" | 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 CardCollection currentPlanes = new CardCollection();
|
||||
private CardCollection planeswalkedToThisTurn = new CardCollection();
|
||||
|
||||
private PlayerStatistics stats = new PlayerStatistics();
|
||||
private PlayerController controller;
|
||||
@@ -1918,6 +1919,10 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
completedDungeons.clear();
|
||||
}
|
||||
|
||||
public final List<Card> getPlaneswalkedToThisTurn() {
|
||||
return planeswalkedToThisTurn;
|
||||
}
|
||||
|
||||
public final void altWinBySpellEffect(final String sourceName) {
|
||||
if (cantWin()) {
|
||||
System.out.println("Tried to win, but currently can't.");
|
||||
@@ -2458,6 +2463,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
setNumManaConversion(0);
|
||||
|
||||
damageReceivedThisTurn.clear();
|
||||
planeswalkedToThisTurn.clear();
|
||||
|
||||
// set last turn nr
|
||||
if (game.getPhaseHandler().isPlayerTurn(this)) {
|
||||
@@ -2617,7 +2623,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
* Then runs triggers.
|
||||
*/
|
||||
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);
|
||||
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.LastStateGraveyard, sa.getLastStateGraveyard());
|
||||
|
||||
for (Card c : currentPlanes) {
|
||||
for (Card c : destinations) {
|
||||
game.getAction().moveTo(ZoneType.Command, c, sa, moveParams);
|
||||
planeswalkedToThisTurn.add(c);
|
||||
//getZone(ZoneType.PlanarDeck).remove(c);
|
||||
//getZone(ZoneType.Command).add(c);
|
||||
}
|
||||
@@ -2634,7 +2641,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
game.setActivePlanes(currentPlanes);
|
||||
//Run PlaneswalkedTo triggers here.
|
||||
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||
runParams.put(AbilityKey.Cards, currentPlanes);
|
||||
runParams.put(AbilityKey.Cards, destinations);
|
||||
game.getTriggerHandler().runTrigger(TriggerType.PlaneswalkedTo, runParams, false);
|
||||
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)) {
|
||||
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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
private void collectTriggerForWaiting() {
|
||||
public void collectTriggerForWaiting() {
|
||||
for (final TriggerWaiting wt : waitingTriggers) {
|
||||
if (wt.getTriggers() != null)
|
||||
continue;
|
||||
|
||||
@@ -39,6 +39,7 @@ public enum TriggerType {
|
||||
ChangesController(TriggerChangesController.class),
|
||||
ChangesZone(TriggerChangesZone.class),
|
||||
ChangesZoneAll(TriggerChangesZoneAll.class),
|
||||
ChaosEnsues(TriggerChaosEnsues.class),
|
||||
Clashed(TriggerClashed.class),
|
||||
ClassLevelGained(TriggerClassLevelGained.class),
|
||||
ConjureAll(TriggerConjureAll.class),
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
<parent>
|
||||
<artifactId>forge</artifactId>
|
||||
<groupId>forge</groupId>
|
||||
<version>1.6.56-SNAPSHOT</version>
|
||||
<version>1.6.57-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>forge-gui-android</artifactId>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>forge</artifactId>
|
||||
<groupId>forge</groupId>
|
||||
<version>1.6.56-SNAPSHOT</version>
|
||||
<version>1.6.57-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>forge-gui-desktop</artifactId>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<parent>
|
||||
<artifactId>forge</artifactId>
|
||||
<groupId>forge</groupId>
|
||||
<version>1.6.56-SNAPSHOT</version>
|
||||
<version>1.6.57-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>forge-gui-ios</artifactId>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>forge</artifactId>
|
||||
<groupId>forge</groupId>
|
||||
<version>1.6.56-SNAPSHOT</version>
|
||||
<version>1.6.57-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>forge-gui-mobile-dev</artifactId>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>forge</artifactId>
|
||||
<groupId>forge</groupId>
|
||||
<version>1.6.56-SNAPSHOT</version>
|
||||
<version>1.6.57-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>forge-gui-mobile</artifactId>
|
||||
|
||||
@@ -19,4 +19,5 @@ public class SettingData {
|
||||
public Float rewardCardAdjLandscape;
|
||||
public Float cardTooltipAdjLandscape;
|
||||
public boolean dayNightBG;
|
||||
public boolean disableWinLose;
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ import forge.player.GamePlayerUtil;
|
||||
import forge.player.PlayerControllerHuman;
|
||||
import forge.screens.FScreen;
|
||||
import forge.screens.LoadingOverlay;
|
||||
import forge.screens.TransitionScreen;
|
||||
import forge.screens.match.MatchController;
|
||||
import forge.sound.MusicPlaylist;
|
||||
import forge.sound.SoundSystem;
|
||||
@@ -130,18 +131,20 @@ public class DuelScene extends ForgeScene {
|
||||
@Override
|
||||
public void run(Integer result) {
|
||||
if (result == 0) {
|
||||
afterGameEnd(enemyName, finalWinner, true, true);
|
||||
afterGameEnd(enemyName, finalWinner);
|
||||
if (Config.instance().getSettingData().disableWinLose)
|
||||
exitDuelScene();
|
||||
}
|
||||
fb.dispose();
|
||||
}
|
||||
}));
|
||||
} else {
|
||||
afterGameEnd(enemyName, winner, false, false);
|
||||
afterGameEnd(enemyName, winner);
|
||||
}
|
||||
}
|
||||
|
||||
void afterGameEnd(String enemyName, boolean winner, boolean showOverlay, boolean alternate) {
|
||||
Runnable runnable = () -> Gdx.app.postRunnable(()-> {
|
||||
Runnable endRunnable = null;
|
||||
void afterGameEnd(String enemyName, boolean winner) {
|
||||
endRunnable = () -> Gdx.app.postRunnable(()-> {
|
||||
if (GameScene.instance().isNotInWorldMap()) {
|
||||
SoundSystem.instance.pause();
|
||||
GameHUD.getInstance().playAudio();
|
||||
@@ -160,14 +163,9 @@ public class DuelScene extends ForgeScene {
|
||||
((IAfterMatch) last).setWinner(winner);
|
||||
}
|
||||
});
|
||||
if (showOverlay) {
|
||||
FThreads.invokeInEdtNowOrLater(() -> {
|
||||
matchOverlay = new LoadingOverlay(runnable, true, alternate);
|
||||
matchOverlay.show();
|
||||
});
|
||||
} else {
|
||||
runnable.run();
|
||||
}
|
||||
public void exitDuelScene() {
|
||||
Forge.setTransitionScreen(new TransitionScreen(endRunnable, Forge.takeScreenshot(), false, false));
|
||||
}
|
||||
|
||||
void addEffects(RegisteredPlayer player, Array<EffectData> effects) {
|
||||
|
||||
@@ -17,7 +17,6 @@ import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.time.LocalTime;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
@@ -203,7 +202,6 @@ public class SettingsScene extends UIScene {
|
||||
boolean value = ((CheckBox) actor).isChecked();
|
||||
Config.instance().getSettingData().fullScreen = value;
|
||||
Config.instance().saveSettings();
|
||||
setTargetTime(LocalTime.now().getHour());
|
||||
//update
|
||||
if (FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_FULLSCREEN_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);
|
||||
addSettingSlider(Forge.getLocalizer().getMessage("cbAdjustMusicVolume"), ForgePreferences.FPref.UI_VOL_MUSIC, 0, 100);
|
||||
addSettingSlider(Forge.getLocalizer().getMessage("cbAdjustSoundsVolume"), ForgePreferences.FPref.UI_VOL_SOUNDS, 0, 100);
|
||||
|
||||
@@ -335,13 +335,17 @@ public class GameHUD extends Stage {
|
||||
unloadAudio();
|
||||
SoundSystem.instance.resume(); // resume World BGM
|
||||
}
|
||||
//unequip and reequip abilities
|
||||
updateAbility();
|
||||
}
|
||||
|
||||
void updateAbility() {
|
||||
void clearAbility() {
|
||||
for (TextraButton button : abilityButtonMap) {
|
||||
button.remove();
|
||||
}
|
||||
abilityButtonMap.clear();
|
||||
}
|
||||
void updateAbility() {
|
||||
clearAbility();
|
||||
setAbilityButton(AdventurePlayer.current().getEquippedAbility1());
|
||||
setAbilityButton(AdventurePlayer.current().getEquippedAbility2());
|
||||
float x = Forge.isLandscapeMode() ? 426f : 216f;
|
||||
@@ -568,6 +572,14 @@ public class GameHUD extends Stage {
|
||||
}
|
||||
opacity = visible ? 1f : 0.4f;
|
||||
}
|
||||
void toggleConsole() {
|
||||
console.toggle();
|
||||
if (console.isVisible()) {
|
||||
clearAbility();
|
||||
} else {
|
||||
updateAbility();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean keyUp(int keycode) {
|
||||
@@ -582,12 +594,12 @@ public class GameHUD extends Stage {
|
||||
}
|
||||
ui.pressDown(keycode);
|
||||
if (keycode == Input.Keys.F9 || keycode == Input.Keys.F10) {
|
||||
console.toggle();
|
||||
toggleConsole();
|
||||
return true;
|
||||
}
|
||||
if (keycode == Input.Keys.BACK) {
|
||||
if (console.isVisible()) {
|
||||
console.toggle();
|
||||
toggleConsole();
|
||||
}
|
||||
}
|
||||
if (console.isVisible())
|
||||
@@ -699,7 +711,7 @@ public class GameHUD extends Stage {
|
||||
|
||||
@Override
|
||||
public boolean longPress(Actor actor, float x, float y) {
|
||||
console.toggle();
|
||||
toggleConsole();
|
||||
return super.longPress(actor, x, y);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,7 +350,7 @@ public class CardUtil {
|
||||
|
||||
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);
|
||||
if(data.mainDeck!=null)
|
||||
{
|
||||
|
||||
@@ -6,11 +6,11 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import forge.adventure.scene.DuelScene;
|
||||
import forge.adventure.util.Config;
|
||||
import forge.ai.GameState;
|
||||
import forge.deck.Deck;
|
||||
import forge.game.player.Player;
|
||||
import forge.item.IPaperCard;
|
||||
import forge.screens.TransitionScreen;
|
||||
import forge.util.collect.FCollection;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
@@ -312,15 +312,13 @@ public class MatchController extends AbstractGuiGame {
|
||||
@Override
|
||||
public void finishGame() {
|
||||
if (Forge.isMobileAdventureMode) {
|
||||
if (Config.instance().getSettingData().disableWinLose) {
|
||||
Forge.setCursor(null, "0");
|
||||
if (DuelScene.instance().hasCallbackExit())
|
||||
return;
|
||||
Forge.setTransitionScreen(new TransitionScreen(() -> {
|
||||
Forge.clearTransitionScreen();
|
||||
Forge.clearCurrentScreen();
|
||||
}, Forge.takeScreenshot(), false, false));
|
||||
if (!DuelScene.instance().hasCallbackExit())
|
||||
DuelScene.instance().exitDuelScene();
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (hasLocalPlayers() || getGameView().isMatchOver()) {
|
||||
view.setViewWinLose(new ViewWinLose(getGameView()));
|
||||
view.getViewWinLose().setVisible(true);
|
||||
|
||||
@@ -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());
|
||||
lblTitle.setText(composeTitle(game0));
|
||||
|
||||
if (Forge.isMobileAdventureMode)
|
||||
control = new AdventureWinLose(this, game0);
|
||||
|
||||
showGameOutcomeSummary();
|
||||
showPlayerScores();
|
||||
control.showRewards();
|
||||
@@ -152,6 +155,10 @@ public class ViewWinLose extends FOverlay implements IWinLoseView<FButton> {
|
||||
return this.btnQuit;
|
||||
}
|
||||
|
||||
public FLabel getLabelShowBattlefield() {
|
||||
return this.btnShowBattlefield;
|
||||
}
|
||||
|
||||
private void showGameOutcomeSummary() {
|
||||
for (GameLogEntry o : game.getGameLog().getLogEntriesExact(GameLogEntryType.GAME_OUTCOME)) {
|
||||
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;
|
||||
|
||||
h = height / 12;
|
||||
if (Forge.isMobileAdventureMode) {
|
||||
btnQuit.setBounds(x, y, w, h);
|
||||
y += h + dy;
|
||||
btnContinue.setVisible(false);
|
||||
btnRestart.setVisible(false);
|
||||
} 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;
|
||||
lblLog.setBounds(x, y, w, h);
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>forge</artifactId>
|
||||
<groupId>forge</groupId>
|
||||
<version>1.6.56-SNAPSHOT</version>
|
||||
<version>1.6.57-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>forge-gui</artifactId>
|
||||
|
||||
@@ -212,7 +212,7 @@
|
||||
"Brother's War",
|
||||
"Jumpstart 22",
|
||||
"Phyrexia: ONE",
|
||||
"March o.t Machine",
|
||||
"MOM",
|
||||
"(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":
|
||||
{
|
||||
"count":60,
|
||||
"colors":["White", "Black"],
|
||||
"colors":["White"],
|
||||
"tribe":"Phyrexian",
|
||||
"tribeCards":1.0,
|
||||
"tribeSynergyCards":0.5,
|
||||
|
||||
@@ -151,6 +151,7 @@
|
||||
"Challenger 20",
|
||||
"Challenger 21",
|
||||
"Challenger 22",
|
||||
"Copper Host Infector",
|
||||
"Dino",
|
||||
"Eldraine Faerie",
|
||||
"Elf",
|
||||
|
||||
@@ -137,6 +137,7 @@
|
||||
"Challenger 22",
|
||||
"Djinn",
|
||||
"Elemental",
|
||||
"Gitaxian Underling",
|
||||
"Merfolk",
|
||||
"Merfolk Avatar",
|
||||
"Merfolk Fighter",
|
||||
|
||||
@@ -136,6 +136,7 @@
|
||||
"Efreet",
|
||||
"Fire Elemental",
|
||||
"Flame Elemental",
|
||||
"Furnace Goblin",
|
||||
"Goblin",
|
||||
"Goblin Chief",
|
||||
"Goblin Warrior",
|
||||
|
||||
@@ -145,6 +145,7 @@
|
||||
"Human guard",
|
||||
"Knight",
|
||||
"Monk",
|
||||
"Orthodoxy Duelist",
|
||||
"White Dwarf",
|
||||
"White Wiz1",
|
||||
"White Wiz2",
|
||||
|
||||
@@ -67,6 +67,7 @@
|
||||
"Dark Knight",
|
||||
"Death Knight",
|
||||
"Demon",
|
||||
"Dross Gladiator",
|
||||
"Ghoul",
|
||||
"Ghost",
|
||||
"Harpy",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?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>
|
||||
<export target="wastetown..tmx" format="tmx"/>
|
||||
</editorsettings>
|
||||
@@ -13,7 +13,7 @@
|
||||
</layer>
|
||||
<layer id="1" name="Background" width="30" height="17">
|
||||
<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>
|
||||
</layer>
|
||||
<layer id="3" name="Clutter" width="30" height="17">
|
||||
@@ -26,7 +26,7 @@
|
||||
</layer>
|
||||
<layer id="2" name="Walls" width="30" height="17">
|
||||
<data encoding="base64" compression="zlib">
|
||||
eJzbwcPAsIMI3K6HGxOjXwYNE6OnD2g2PjCBCLtH7SUOT9eD4GlQN8zQQ4jRKn6R01Ub1N4OEtMZLcIZHaC7iV72TtDD5NPDXmzuGGr2TkfCIIDMxxau9PAvuj3z0NxJy3IDnU+v8goEZujhLkdoaS++8pIW9uLzJ6X2wsoeZAATI6deAABIX/aO
|
||||
eJzbwcPAsIMAbtNjYGjHgzv0CJshg4YJqQfhPqC5+MCEUXupYu80oLnToXgd1A0bkMRm0Mhe5HQ1D2rvAhLTGS3CGR3cxOIOetg7QQ+TTw97sbljKNl7CCntToe6AZm/DEu40sO/6PZcRHPnDDrZi60coaW9G/RwlyO0tBdfeUkLe88RUV6SY+8dpLIHGcDEbpNRPgMAC9v4YQ==
|
||||
</data>
|
||||
</layer>
|
||||
<layer id="8" name="Archway" width="30" height="17">
|
||||
@@ -79,25 +79,25 @@
|
||||
]</property>
|
||||
</properties>
|
||||
</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>
|
||||
<property name="reward">[
|
||||
{
|
||||
"editions": [ "ONE" ],
|
||||
"editions": [ "NPH","ONE","MOM" ],
|
||||
"type": "card",
|
||||
"count": 10,
|
||||
"rarity": [ "Common" ]
|
||||
"colors": [ "blue" ]
|
||||
},
|
||||
{
|
||||
"editions": [ "ONE" ],
|
||||
"editions": [ "NPH","ONE","MOM" ],
|
||||
"type": "card",
|
||||
"count": 3,
|
||||
"rarity": [ "Uncommon" ]
|
||||
"colors": [ "blue" ]
|
||||
},
|
||||
{
|
||||
"editions": [ "ONE" ],
|
||||
"editions": [ "NPH","ONE","MOM" ],
|
||||
"type": "card",
|
||||
"count": 1,
|
||||
"rarity": [ "Rare", "Mythic Rare" ]
|
||||
@@ -107,6 +107,7 @@
|
||||
</property>
|
||||
</properties>
|
||||
</object>
|
||||
<object id="76" template="../obj/treasure.tx" x="256" y="32"/>
|
||||
</objectgroup>
|
||||
<objectgroup id="7" name="Waypoints">
|
||||
<object id="64" template="../obj/waypoint.tx" x="273" y="145"/>
|
||||
|
||||
@@ -58,21 +58,21 @@
|
||||
<properties>
|
||||
<property name="reward">[
|
||||
{
|
||||
"editions": [ "ONE" ],
|
||||
"editions": [ "NPH","ONE","MOM" ],
|
||||
"type": "card",
|
||||
"count": 10,
|
||||
"rarity": [ "Common" ]
|
||||
"colors": [ "black" ]
|
||||
},
|
||||
{
|
||||
"editions": [ "ONE" ],
|
||||
"editions": [ "NPH","ONE","MOM" ],
|
||||
"type": "card",
|
||||
"count": 3,
|
||||
"rarity": [ "Uncommon" ]
|
||||
"colors": [ "black" ]
|
||||
},
|
||||
{
|
||||
"editions": [ "ONE" ],
|
||||
"editions": [ "NPH","ONE","MOM" ],
|
||||
"type": "card",
|
||||
"count": 1,
|
||||
"rarity": [ "Rare", "Mythic Rare" ]
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?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>
|
||||
<export format="tmx"/>
|
||||
</editorsettings>
|
||||
@@ -49,21 +49,21 @@
|
||||
<properties>
|
||||
<property name="reward">[
|
||||
{
|
||||
"editions": [ "ONE" ],
|
||||
"editions": [ "NPH","ONE","MOM" ],
|
||||
"type": "card",
|
||||
"count": 10,
|
||||
"rarity": [ "Common" ]
|
||||
"colors": [ "green" ]
|
||||
},
|
||||
{
|
||||
"editions": [ "ONE" ],
|
||||
"editions": [ "NPH","ONE","MOM" ],
|
||||
"type": "card",
|
||||
"count": 3,
|
||||
"rarity": [ "Uncommon" ]
|
||||
"colors": [ "green" ]
|
||||
},
|
||||
{
|
||||
"editions": [ "ONE" ],
|
||||
"editions": [ "NPH","ONE","MOM" ],
|
||||
"type": "card",
|
||||
"count": 1,
|
||||
"rarity": [ "Rare", "Mythic Rare" ]
|
||||
@@ -101,6 +101,7 @@
|
||||
<property name="waypoints" value=""/>
|
||||
</properties>
|
||||
</object>
|
||||
<object id="74" template="../obj/treasure.tx" x="217" y="71"/>
|
||||
</objectgroup>
|
||||
<objectgroup id="7" name="Waypoints">
|
||||
<object id="57" template="../obj/waypoint.tx" x="88.5" y="327.167"/>
|
||||
|
||||
@@ -46,7 +46,6 @@
|
||||
<properties>
|
||||
<property name="enemy" value="Furnace Tormentor"/>
|
||||
<property name="threatRange" value="20"/>
|
||||
<property name="waypoints" value="60,58,57,62,60,58,57,62,60,59,61,62"/>
|
||||
</properties>
|
||||
</object>
|
||||
<object id="78" template="../obj/enemy.tx" x="136.333" y="219.333">
|
||||
@@ -99,21 +98,21 @@
|
||||
<properties>
|
||||
<property name="reward">[
|
||||
{
|
||||
"editions": [ "ONE" ],
|
||||
"editions": [ "NPH","ONE","MOM" ],
|
||||
"type": "card",
|
||||
"count": 10,
|
||||
"rarity": [ "Common" ]
|
||||
"colors": [ "red" ]
|
||||
},
|
||||
{
|
||||
"editions": [ "ONE" ],
|
||||
"editions": [ "NPH","ONE","MOM" ],
|
||||
"type": "card",
|
||||
"count": 3,
|
||||
"rarity": [ "Uncommon" ]
|
||||
"colors": [ "red" ]
|
||||
},
|
||||
{
|
||||
"editions": [ "ONE" ],
|
||||
"editions": [ "NPH","ONE","MOM" ],
|
||||
"type": "card",
|
||||
"count": 1,
|
||||
"rarity": [ "Rare", "Mythic Rare" ]
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?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>
|
||||
<export format="tmx"/>
|
||||
</editorsettings>
|
||||
@@ -64,21 +64,21 @@
|
||||
<properties>
|
||||
<property name="reward">[
|
||||
{
|
||||
"editions": [ "ONE" ],
|
||||
"editions": [ "NPH","ONE","MOM" ],
|
||||
"type": "card",
|
||||
"count": 10,
|
||||
"rarity": [ "Common" ]
|
||||
"colors": [ "white" ]
|
||||
},
|
||||
{
|
||||
"editions": [ "ONE" ],
|
||||
"editions": [ "NPH","ONE","MOM" ],
|
||||
"type": "card",
|
||||
"count": 3,
|
||||
"rarity": [ "Uncommon" ]
|
||||
"colors": [ "white" ]
|
||||
},
|
||||
{
|
||||
"editions": [ "ONE" ],
|
||||
"editions": [ "NPH","ONE","MOM" ],
|
||||
"type": "card",
|
||||
"count": 1,
|
||||
"rarity": [ "Rare", "Mythic Rare" ]
|
||||
@@ -88,6 +88,7 @@
|
||||
</property>
|
||||
</properties>
|
||||
</object>
|
||||
<object id="78" template="../obj/treasure.tx" x="315" y="74"/>
|
||||
</objectgroup>
|
||||
<objectgroup id="8" name="Waypoints">
|
||||
<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 |
@@ -603,3 +603,63 @@ Werewolf_f
|
||||
Werewolf_f
|
||||
size: 16, 16
|
||||
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",
|
||||
"Death Knight",
|
||||
"Demon",
|
||||
"Dross Gladiator",
|
||||
"Eye",
|
||||
"Fungus",
|
||||
"Frog",
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
"Frog",
|
||||
"Frost Titan",
|
||||
"Geist",
|
||||
"Gitaxian Underling",
|
||||
"Horror",
|
||||
"Illusionist",
|
||||
"Jellyfish",
|
||||
|
||||
@@ -3366,7 +3366,7 @@
|
||||
"name": "Copper Host Brutalizer",
|
||||
"sprite": "sprites/copperhostbrutalizer.atlas",
|
||||
"deck": [
|
||||
"deckscopperhostbrutalizer.json"
|
||||
"decks/copperhostbrutalizer.dck"
|
||||
],
|
||||
"ai": "",
|
||||
"spawnRate": 1,
|
||||
@@ -4680,7 +4680,7 @@
|
||||
"name": "Dross Grimnarch",
|
||||
"sprite": "sprites/drossgrimnarch.atlas",
|
||||
"deck": [
|
||||
"decks/drossgrimnarch.json"
|
||||
"decks/drossgrimnarch.dck"
|
||||
],
|
||||
"spawnRate": 1,
|
||||
"difficulty": 0.1,
|
||||
@@ -6197,7 +6197,7 @@
|
||||
"name": "Furnace Tormentor",
|
||||
"sprite": "sprites/furnacetormentor.atlas",
|
||||
"deck": [
|
||||
"decks/furnacetormentor.json"
|
||||
"decks/furnacetormentor.dck"
|
||||
],
|
||||
"ai": "",
|
||||
"spawnRate": 1,
|
||||
@@ -6814,7 +6814,7 @@
|
||||
"name": "Gitaxian Scientist",
|
||||
"sprite": "sprites/gitaxianscientist.atlas",
|
||||
"deck": [
|
||||
"decks/gitaxianscientist.json"
|
||||
"decks/gitaxianscientist.dck"
|
||||
],
|
||||
"ai": "",
|
||||
"spawnRate": 1,
|
||||
@@ -11471,7 +11471,7 @@
|
||||
"name": "Orthodoxy Angel",
|
||||
"sprite": "sprites/phyrexianangel.atlas",
|
||||
"deck": [
|
||||
"decks/phyrexianangel.json"
|
||||
"decks/phyrexianangel.dck"
|
||||
],
|
||||
"spawnRate": 1,
|
||||
"difficulty": 0.1,
|
||||
@@ -12441,16 +12441,6 @@
|
||||
"scale": 0.4,
|
||||
"life": 40,
|
||||
"rewards": [
|
||||
{
|
||||
"type": "deckCard",
|
||||
"probability": 1,
|
||||
"count": 2,
|
||||
"addMaxCount": 4,
|
||||
"rarity": [
|
||||
"common",
|
||||
"uncommon"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "deckCard",
|
||||
"probability": 1,
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
"Challenger 20",
|
||||
"Challenger 21",
|
||||
"Challenger 22",
|
||||
"Copper Host Infector",
|
||||
"Dino",
|
||||
"Eldraine Faerie",
|
||||
"Elf",
|
||||
|
||||
@@ -70,6 +70,13 @@
|
||||
"male":"sprites/heroes/werewolf_m.atlas",
|
||||
"femaleAvatar":"Werewolf_f",
|
||||
"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",
|
||||
"Fire Elemental",
|
||||
"Flame Elemental",
|
||||
"Furnace Goblin",
|
||||
"Goblin",
|
||||
"Goblin Chief",
|
||||
"Goblin Warrior",
|
||||
|
||||
@@ -54,6 +54,7 @@
|
||||
"Knight",
|
||||
"Kor Warrior",
|
||||
"Monk",
|
||||
"Orthodoxy Duelist",
|
||||
"Owl",
|
||||
"Raven",
|
||||
"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")
|
||||
|
||||
# MOM Jumpstart
|
||||
MOM Mite-y 1: 1 wholeSheet("MOM Mite-y 1"), 1 RareMythic:fromSheet("MOM White Inserts")
|
||||
MOM Mite-y 2: 1 wholeSheet("MOM Mite-y 2"), 1 RareMythic:fromSheet("MOM White Inserts")
|
||||
MOM Progress 1: 1 wholeSheet("MOM Progress 1"), 1 RareMythic:fromSheet("MOM Blue Inserts")
|
||||
MOM Progress 2: 1 wholeSheet("MOM Progress 2"), 1 RareMythic:fromSheet("MOM Blue Inserts")
|
||||
MOM Corruption 1: 1 wholeSheet("MOM Corruption 1"), 1 RareMythic:fromSheet("MOM Black Inserts")
|
||||
MOM Corruption 2: 1 wholeSheet("MOM Corruption 2"), 1 RareMythic:fromSheet("MOM Black Inserts")
|
||||
MOM Rebellious 1: 1 wholeSheet("MOM Rebellious 1"), 1 RareMythic:fromSheet("MOM Red Inserts")
|
||||
MOM Rebellious 2: 1 wholeSheet("MOM Rebellious 2"), 1 RareMythic:fromSheet("MOM Red Inserts")
|
||||
MOM Toxic 1: 1 wholeSheet("MOM Toxic 1"), 1 RareMythic:fromSheet("MOM Green Inserts")
|
||||
MOM Toxic 2: 1 wholeSheet("MOM Toxic 2"), 1 RareMythic:fromSheet("MOM Green Inserts")
|
||||
MOM Brood 1: 1 wholeSheet("MOM Brood 1"), 1 RareMythic:fromSheet("MOM White Inserts")
|
||||
MOM Brood 2: 1 wholeSheet("MOM Brood 2"), 1 RareMythic:fromSheet("MOM White Inserts")
|
||||
MOM Overachiever 1: 1 wholeSheet("MOM Overachiever 1"), 1 RareMythic:fromSheet("MOM Blue Inserts")
|
||||
MOM Overachiever 2: 1 wholeSheet("MOM Overachiever 2"), 1 RareMythic:fromSheet("MOM Blue Inserts")
|
||||
MOM Expendable 1: 1 wholeSheet("MOM Expendable 1"), 1 RareMythic:fromSheet("MOM Black Inserts")
|
||||
MOM Expendable 2: 1 wholeSheet("MOM Expendable 2"), 1 RareMythic:fromSheet("MOM Black Inserts")
|
||||
MOM Reinforcement 1: 1 wholeSheet("MOM Reinforcement 1"), 1 RareMythic:fromSheet("MOM Red Inserts")
|
||||
MOM Reinforcement 2: 1 wholeSheet("MOM Reinforcement 2"), 1 RareMythic:fromSheet("MOM Red Inserts")
|
||||
MOM Buff 1: 1 wholeSheet("MOM Buff 1"), 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 Mondrak, Glory Dominus|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]
|
||||
|
||||
1 Essence of Orthodoxy|MOM
|
||||
1 Norn's Inquisitor|MOM
|
||||
1 Phyrexian Pegasus|MOM
|
||||
1 Alabaster Host Sanctifier|MOM
|
||||
1 Infected Defector|MOM
|
||||
1 Alabaster Host Intercessor|MOM
|
||||
1 Seedpod Caretaker|MOM
|
||||
1 Tiller of Flesh|MOM
|
||||
1 Sunder the Gateway|MOM
|
||||
1 Angelic Intervention|MOM
|
||||
1 Cut Short|MOM
|
||||
8 Plains|MOM
|
||||
1 Essence of Orthodoxy
|
||||
1 Norn's Inquisitor
|
||||
1 Phyrexian Pegasus
|
||||
1 Alabaster Host Sanctifier
|
||||
1 Infected Defector
|
||||
1 Alabaster Host Intercessor
|
||||
1 Seedpod Caretaker
|
||||
1 Tiller of Flesh
|
||||
1 Sunder the Gateway
|
||||
1 Angelic Intervention
|
||||
1 Cut Short
|
||||
8 Plains
|
||||
|
||||
[MOM Brood 2]
|
||||
|
||||
1 Essence of Orthodoxy|MOM
|
||||
1 Phyrexian Pegasus|MOM
|
||||
1 Seedpod Caretaker|MOM
|
||||
1 Norn's Inquisitor |MOM
|
||||
1 Alabaster Host Sanctifier|MOM
|
||||
1 Infected Defector|MOM
|
||||
1 Alabaster Host Intercessor|MOM
|
||||
1 Tiller of Flesh|MOM
|
||||
1 Aerial Boost|MOM
|
||||
1 Inspired Charge|MOM
|
||||
1 Seal from Existence|MOM
|
||||
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
|
||||
1 Essence of Orthodoxy
|
||||
1 Phyrexian Pegasus
|
||||
1 Seedpod Caretaker
|
||||
1 Norn's Inquisitor
|
||||
1 Alabaster Host Sanctifier
|
||||
1 Infected Defector
|
||||
1 Alabaster Host Intercessor
|
||||
1 Tiller of Flesh
|
||||
1 Aerial Boost
|
||||
1 Inspired Charge
|
||||
1 Seal from Existence
|
||||
8 Plains
|
||||
|
||||
[MOM Overachiever 1]
|
||||
|
||||
1 Zephyr Winder|MOM
|
||||
1 Expedition Lookout|MOM
|
||||
1 Preening Champion|MOM
|
||||
1 Thunderhead Squadron|MOM
|
||||
1 Tidal Terror|MOM
|
||||
1 Referee Squad|MOM
|
||||
1 Oracle of Tragedy|MOM
|
||||
1 Interdisciplinary Mascot|MOM
|
||||
1 Temporal Cleansing|MOM
|
||||
1 Ephara's Dispersal|MOM
|
||||
1 Meeting of Minds|MOM
|
||||
8 Island|MOM
|
||||
1 Zephyr Winder
|
||||
1 Expedition Lookout
|
||||
1 Preening Champion
|
||||
1 Thunderhead Squadron
|
||||
1 Tidal Terror
|
||||
1 Referee Squad
|
||||
1 Oracle of Tragedy
|
||||
1 Interdisciplinary Mascot
|
||||
1 Temporal Cleansing
|
||||
1 Ephara's Dispersal
|
||||
1 Meeting of Minds
|
||||
8 Island
|
||||
|
||||
[MOM Overachiever 2]
|
||||
|
||||
1 Zephyr Winder|MOM
|
||||
1 Expedition Lookout|MOM
|
||||
1 Xerex Strobe-Knight|MOM
|
||||
1 Thunderhead Squadron|MOM
|
||||
1 Tidal Terror|MOM
|
||||
1 Referee Squad|MOM
|
||||
1 Oracle of Tragedy|MOM
|
||||
1 Interdisciplinary Mascot|MOM
|
||||
1 Ephara's Dispersal|MOM
|
||||
1 Wicked Slumber|MOM
|
||||
1 Astral Wingspan|MOM
|
||||
8 Island|MOM
|
||||
1 Zephyr Winder
|
||||
1 Expedition Lookout
|
||||
1 Xerex Strobe-Knight
|
||||
1 Thunderhead Squadron
|
||||
1 Tidal Terror
|
||||
1 Referee Squad
|
||||
1 Oracle of Tragedy
|
||||
1 Interdisciplinary Mascot
|
||||
1 Ephara's Dispersal
|
||||
1 Wicked Slumber
|
||||
1 Astral Wingspan
|
||||
8 Island
|
||||
|
||||
[MOM Expendable 1]
|
||||
|
||||
1 Terror of Towashi|MOM
|
||||
1 Seer of Stolen Sight|MOM
|
||||
1 Injector Crocodile|MOM
|
||||
@@ -6194,7 +6067,6 @@ Kaya, Ghost Assassin|CN2|2
|
||||
8 Swamp|MOM
|
||||
|
||||
[MOM Expendable 2]
|
||||
|
||||
1 Terror of Towashi|MOM
|
||||
1 Injector Crocodile|MOM
|
||||
1 Seer of Stolen Sight|MOM
|
||||
@@ -6208,8 +6080,34 @@ Kaya, Ghost Assassin|CN2|2
|
||||
1 Gift of Compleation|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 Fairgrounds Trumpeter|MOM
|
||||
1 Ruins Recluse|MOM
|
||||
@@ -6221,10 +6119,9 @@ Kaya, Ghost Assassin|CN2|2
|
||||
1 Arachnoid Adaptation|MOM
|
||||
1 Cosmic Hunger|MOM
|
||||
1 Fertilid's Favor|MOM
|
||||
8 Forests|MOM
|
||||
8 Forest
|
||||
|
||||
[MOM Buff 2]
|
||||
|
||||
1 Surrak and Goreclaw|MOM
|
||||
1 Fairgrounds Trumpeter|MOM
|
||||
1 Placid Rottentail|MOM
|
||||
@@ -6236,71 +6133,90 @@ Kaya, Ghost Assassin|CN2|2
|
||||
1 Arachnoid Adaptation|MOM
|
||||
1 Tandem Takedown|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]
|
||||
1 Chrome Host Seedshark|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 Zephyr Singer|MOM
|
||||
1 Transcendent Message|MOM
|
||||
1 Interdisciplinary Mascot|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 Transcendent Message|MOM
|
||||
1 Zephyr Singer|MOM
|
||||
1 Invasion of Ravnica|MOM
|
||||
1 Jin-Gitaxias|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
|
||||
1 Sword of Once and Future|MOM
|
||||
|
||||
[MOM Green Inserts]
|
||||
1 Ancient Imperiosaur|MOM
|
||||
1 Deeproot Wayfinder|MOM
|
||||
1 Doomskar Warrior|MOM
|
||||
1 Glistening Dawn|MOM
|
||||
1 Invasion of Ikoria|MOM
|
||||
1 Invasion of Ixalan|MOM
|
||||
1 Ozolith, the Shattered Spire|MOM
|
||||
1 Tribute to the World Tree|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 Sword of Once and Future|MOM
|
||||
1 Vorinclex|MOM
|
||||
1 Wrenn and Realmbreaker|MOM
|
||||
1 Doomskar Warrior|MOM
|
||||
1 Deeproot Wayfinder|MOM
|
||||
1 Ancient Imperiosaur|MOM
|
||||
|
||||
[MOM Black Inserts]
|
||||
|
||||
1 Archpriest of Shadows|MOM
|
||||
1 Ayara, Widow of the Realm|MOM
|
||||
1 Bloated Processor|MOM
|
||||
1 Hoarding Broodlord|MOM
|
||||
1 Invasion of Fiora|MOM
|
||||
1 Grafted Butcher|MOM
|
||||
1 Breach the Multiverse|MOM
|
||||
1 Pile On|MOM
|
||||
1 Sheoldred|MOM
|
||||
1 Invasion of Innistrad|MOM
|
||||
[MOM Red Inserts]
|
||||
1 Bloodfeather Phoenix|MOM
|
||||
1 City on Fire|MOM
|
||||
1 Etali, Primal Conquerer|MOM
|
||||
1 Into the Fire|MOM
|
||||
1 Invasion of Kaladheim|MOM
|
||||
1 Invasion of Karsus|MOM
|
||||
1 Nahiri's Warcrafting|MOM
|
||||
1 Orthion, Hero of Lavabrink|MOM
|
||||
1 Rampaging Raptor|MOM
|
||||
1 Realmbreaker, the Invasion Tree|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]
|
||||
|
||||
1 Archangel Elspeth|MOM
|
||||
1 Elesh Norn|MOM
|
||||
1 Monastery Mentor|MOM
|
||||
1 Boon-Bringer Valkyrie|MOM
|
||||
1 Dusk Legion Duelist|MOM
|
||||
1 Essence of Orthodoxy|MOM
|
||||
1 Guardian of Ghirapur|MOM
|
||||
1 Heliod, the Radiant Dawn|MOM
|
||||
1 Invasion of Gobakhan|MOM
|
||||
1 Knight-Errant of Eos|MOM
|
||||
1 Invasion of Theros|MOM
|
||||
1 Sunfall|MOM
|
||||
1 Knight-Errant of Eos|MOM
|
||||
1 Realmbreaker, the Invasion Tree|MOM
|
||||
1 Progenitor Exarch|MOM
|
||||
1 Sunfall|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
|
||||
ManaCost:no cost
|
||||
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
|
||||
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll {CHAOS}, discard your hand.
|
||||
SVar:RolledChaos:DB$ Discard | Mode$ Hand | Defined$ You
|
||||
T:Mode$ ChaosEnsues | TriggerZones$ Command | Execute$ TrigDiscard | TriggerDescription$ Whenever chaos ensues, discard your hand.
|
||||
SVar:TrigDiscard:DB$ Discard | Mode$ Hand | Defined$ You
|
||||
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: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
|
||||
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: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: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
|
||||
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.
|
||||
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: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
|
||||
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
|
||||
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.
|
||||
SVar:RolledChaos:DB$ PutCounter | Defined$ Self | CounterType$ SCROLL | CounterNum$ 1 | SubAbility$ ScrollsOfKnowledge
|
||||
SVar:ScrollsOfKnowledge:DB$ Draw | Defined$ You | NumCards$ NumScrolls
|
||||
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:TrigPutCounter:DB$ PutCounter | CounterType$ SCROLL | SubAbility$ ScrollsOfKnowledge
|
||||
SVar:ScrollsOfKnowledge:DB$ Draw | NumCards$ NumScrolls
|
||||
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
|
||||
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.
|
||||
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll {CHAOS}, CARDNAME deals 2 damage to each creature.
|
||||
SVar:RolledChaos:DB$ DamageAll | NumDmg$ 2 | ValidCards$ Creature | ValidDescription$ 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
|
||||
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
|
||||
Types:Plane Alara
|
||||
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:DivineCharacter:DB$ Animate | Defined$ Targeted | staticAbilities$ IndestructibleAspect | Duration$ Permanent
|
||||
SVar:IndestructibleAspect:Mode$ Continuous | EffectZone$ Battlefield | Affected$ Card.Self+counters_GE1_DIVINITY | AddKeyword$ Indestructible
|
||||
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
|
||||
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
|
||||
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:RestorationReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Battlefield | GainControl$ 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
|
||||
ManaCost:4 B R
|
||||
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.
|
||||
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
|
||||
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:DBPump:DB$ Pump | Defined$ Remembered | KW$ Haste | SubAbility$ DBCleanup | StackDescription$ None
|
||||
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.)
|
||||
|
||||
@@ -2,11 +2,11 @@ Name:Celestine Reef
|
||||
ManaCost:no cost
|
||||
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.
|
||||
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.
|
||||
SVar:RolledChaos:DB$ Effect | Name$ Celestine Reef Effect | StaticAbilities$ STCantlose,STCantWin | Triggers$ TrigPlaneswalk | Duration$ Permanent
|
||||
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 | 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: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:DBCleanup:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile
|
||||
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$ 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
|
||||
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
|
||||
AI:RemoveDeck:All
|
||||
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
|
||||
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
|
||||
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: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
|
||||
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
|
||||
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll {CHAOS}, 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
|
||||
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 | 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:TrigPlaneswalk:Mode$ PlaneswalkedFrom | Execute$ ExileSelf | Static$ True
|
||||
SVar:ExileSelf:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile
|
||||
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
|
||||
ManaCost:3 U B
|
||||
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.
|
||||
SVar:DBChoose:DB$ ChooseCard | Defined$ You | Choices$ Creature | ChoiceZone$ Graveyard | Mandatory$ True | SubAbility$ DBReturn
|
||||
SVar:DBReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Defined$ ChosenCard | GainControl$ True
|
||||
A:SP$ Mill | NumCards$ 2 | Defined$ Player | SubAbility$ DBChoose | SpellDescription$ Each player mills two cards.
|
||||
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.
|
||||
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.
|
||||
|
||||
@@ -3,8 +3,8 @@ ManaCost:no cost
|
||||
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.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:Y:Targeted$CardManaCost
|
||||
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
|
||||
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
|
||||
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: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:DBLoseLife:DB$ LoseLife | Defined$ Targeted | LifeAmount$ 3 | ConditionDefined$ Remembered | ConditionPresent$ Land | ConditionCompare$ GE1 | SubAbility$ DBCleanup
|
||||
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: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
|
||||
Types:Plane Innistrad
|
||||
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: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.
|
||||
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.
|
||||
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
|
||||
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
|
||||
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
|
||||
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:DBCopy:DB$ CopyPermanent | Defined$ ParentTarget | Controller$ Remembered
|
||||
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
|
||||
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
|
||||
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: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:OssuaryX:TriggeredCard$CardPower
|
||||
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: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
|
||||
@@ -13,4 +13,4 @@ SVar:WalkAway:DB$ Planeswalk | SubAbility$ ClearImprinted
|
||||
SVar:ClearImprinted:DB$ Cleanup | ClearImprinted$ True
|
||||
SVar:OsX:ImprintedLKI$FilterControlledByRemembered_CardPower
|
||||
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
|
||||
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.)
|
||||
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: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.
|
||||
|
||||