mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-14 17:58:01 +00:00
Compare commits
11 Commits
mayhemVisu
...
adv-draft-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
35edd16a7e | ||
|
|
31c2686307 | ||
|
|
04f454ae83 | ||
|
|
5b2a56bd4d | ||
|
|
5bbc86c1a1 | ||
|
|
a5765905d8 | ||
|
|
c4a3b5c545 | ||
|
|
81e1306cd7 | ||
|
|
39f6377f33 | ||
|
|
0af4be42c4 | ||
|
|
da8b77acf7 |
@@ -12,15 +12,13 @@ import forge.game.spellability.SpellAbility;
|
|||||||
public class FlipACoinAi extends SpellAbilityAi {
|
public class FlipACoinAi extends SpellAbilityAi {
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility)
|
* @see forge.card.abilityfactory.SpellAiLogic#checkApiLogic(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility)
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected AiAbilityDecision canPlay(Player ai, SpellAbility sa) {
|
protected AiAbilityDecision checkApiLogic(Player ai, SpellAbility sa) {
|
||||||
if (sa.hasParam("AILogic")) {
|
if (sa.hasParam("AILogic")) {
|
||||||
String ailogic = sa.getParam("AILogic");
|
String ailogic = sa.getParam("AILogic");
|
||||||
if (ailogic.equals("Never")) {
|
if (ailogic.equals("PhaseOut")) {
|
||||||
return new AiAbilityDecision(0, AiPlayDecision.CantPlayAi);
|
|
||||||
} else if (ailogic.equals("PhaseOut")) {
|
|
||||||
if (!ComputerUtil.predictThreatenedObjects(sa.getActivatingPlayer(), sa).contains(sa.getHostCard())) {
|
if (!ComputerUtil.predictThreatenedObjects(sa.getActivatingPlayer(), sa).contains(sa.getHostCard())) {
|
||||||
return new AiAbilityDecision(0, AiPlayDecision.CantPlayAi);
|
return new AiAbilityDecision(0, AiPlayDecision.CantPlayAi);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -522,6 +522,8 @@ public class AbilityUtils {
|
|||||||
}
|
}
|
||||||
} else if (calcX[0].equals("OriginalHost")) {
|
} else if (calcX[0].equals("OriginalHost")) {
|
||||||
val = xCount(ability.getOriginalHost(), calcX[1], ability);
|
val = xCount(ability.getOriginalHost(), calcX[1], ability);
|
||||||
|
} else if (calcX[0].equals("DungeonsCompleted")) {
|
||||||
|
val = handlePaid(player.getCompletedDungeons(), calcX[1], card, ability);
|
||||||
} else if (calcX[0].startsWith("ExiledWith")) {
|
} else if (calcX[0].startsWith("ExiledWith")) {
|
||||||
val = handlePaid(card.getExiledCards(), calcX[1], card, ability);
|
val = handlePaid(card.getExiledCards(), calcX[1], card, ability);
|
||||||
} else if (calcX[0].startsWith("Convoked")) {
|
} else if (calcX[0].startsWith("Convoked")) {
|
||||||
@@ -3421,6 +3423,7 @@ public class AbilityUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static int playerXProperty(final Player player, final String s, final Card source, CardTraitBase ctb) {
|
public static int playerXProperty(final Player player, final String s, final Card source, CardTraitBase ctb) {
|
||||||
|
|
||||||
final String[] l = s.split("/");
|
final String[] l = s.split("/");
|
||||||
final String m = CardFactoryUtil.extractOperators(s);
|
final String m = CardFactoryUtil.extractOperators(s);
|
||||||
|
|
||||||
@@ -3607,46 +3610,10 @@ public class AbilityUtils {
|
|||||||
return doXMath(player.hasBeenDealtCombatDamageSinceLastTurn() ? 1 : 0, m, source, ctb);
|
return doXMath(player.hasBeenDealtCombatDamageSinceLastTurn() ? 1 : 0, m, source, ctb);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (value.equals("DungeonsCompleted")) {
|
|
||||||
return doXMath(player.getCompletedDungeons().size(), m, source, ctb);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (value.equals("RingTemptedYou")) {
|
if (value.equals("RingTemptedYou")) {
|
||||||
return doXMath(player.getNumRingTemptedYou(), m, source, ctb);
|
return doXMath(player.getNumRingTemptedYou(), m, source, ctb);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (value.startsWith("DungeonCompletedNamed")) {
|
|
||||||
String [] full = value.split("_");
|
|
||||||
String name = full[1];
|
|
||||||
int completed = 0;
|
|
||||||
List<Card> dungeons = player.getCompletedDungeons();
|
|
||||||
for (Card c : dungeons) {
|
|
||||||
if (c.getName().equals(name)) {
|
|
||||||
++completed;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return doXMath(completed, m, source, ctb);
|
|
||||||
}
|
|
||||||
if (value.equals("DifferentlyNamedDungeonsCompleted")) {
|
|
||||||
int amount = 0;
|
|
||||||
List<Card> dungeons = player.getCompletedDungeons();
|
|
||||||
for (int i = 0; i < dungeons.size(); ++i) {
|
|
||||||
Card d1 = dungeons.get(i);
|
|
||||||
boolean hasSameName = false;
|
|
||||||
for (int j = i - 1; j >= 0; --j) {
|
|
||||||
Card d2 = dungeons.get(j);
|
|
||||||
if (d1.getName().equals(d2.getName())) {
|
|
||||||
hasSameName = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!hasSameName) {
|
|
||||||
++amount;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return doXMath(amount, m, source, ctb);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (value.equals("AttractionsVisitedThisTurn")) {
|
if (value.equals("AttractionsVisitedThisTurn")) {
|
||||||
return doXMath(player.getAttractionsVisitedThisTurn(), m, source, ctb);
|
return doXMath(player.getAttractionsVisitedThisTurn(), m, source, ctb);
|
||||||
}
|
}
|
||||||
@@ -3733,8 +3700,8 @@ public class AbilityUtils {
|
|||||||
return CardUtil.getColorsFromCards(paidList).countColors();
|
return CardUtil.getColorsFromCards(paidList).countColors();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (string.equals("DifferentCardNames")) {
|
if (string.startsWith("DifferentCardNames")) {
|
||||||
return CardLists.getDifferentNamesCount(paidList);
|
return doXMath(CardLists.getDifferentNamesCount(paidList), CardFactoryUtil.extractOperators(string), source, ctb);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (string.equals("DifferentColorPair")) {
|
if (string.equals("DifferentColorPair")) {
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ public class PlayerZone extends Zone {
|
|||||||
|
|
||||||
boolean graveyardCastable = c.hasKeyword(Keyword.FLASHBACK) ||
|
boolean graveyardCastable = c.hasKeyword(Keyword.FLASHBACK) ||
|
||||||
c.hasKeyword(Keyword.RETRACE) || c.hasKeyword(Keyword.JUMP_START) || c.hasKeyword(Keyword.ESCAPE) ||
|
c.hasKeyword(Keyword.RETRACE) || c.hasKeyword(Keyword.JUMP_START) || c.hasKeyword(Keyword.ESCAPE) ||
|
||||||
c.hasKeyword(Keyword.DISTURB) || c.hasKeyword(Keyword.MAYHEM);
|
c.hasKeyword(Keyword.DISTURB);
|
||||||
boolean exileCastable = c.isForetold() || c.isOnAdventure();
|
boolean exileCastable = c.isForetold() || c.isOnAdventure();
|
||||||
for (final SpellAbility sa : c.getSpellAbilities()) {
|
for (final SpellAbility sa : c.getSpellAbilities()) {
|
||||||
final ZoneType restrictZone = sa.getRestrictions().getZone();
|
final ZoneType restrictZone = sa.getRestrictions().getZone();
|
||||||
|
|||||||
@@ -147,10 +147,13 @@ public class AdventureEventData implements Serializable {
|
|||||||
return draft;
|
return draft;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final Predicate<CardEdition> filterPioneer = FModel.getFormats().getPioneer().editionLegalPredicate;
|
|
||||||
private static final Predicate<CardEdition> filterModern = FModel.getFormats().getModern().editionLegalPredicate;
|
|
||||||
private static final Predicate<CardEdition> filterVintage = FModel.getFormats().getVintage().editionLegalPredicate;
|
|
||||||
private static final Predicate<CardEdition> filterStandard = FModel.getFormats().getStandard().editionLegalPredicate;
|
private static final Predicate<CardEdition> filterStandard = FModel.getFormats().getStandard().editionLegalPredicate;
|
||||||
|
private static final Predicate<CardEdition> filterPioneer =
|
||||||
|
FModel.getFormats().getPioneer().editionLegalPredicate.and(filterStandard.negate());
|
||||||
|
private static final Predicate<CardEdition> filterModern =
|
||||||
|
FModel.getFormats().getModern().editionLegalPredicate.and(FModel.getFormats().getPioneer().editionLegalPredicate.negate());
|
||||||
|
private static final Predicate<CardEdition> filterVintage =
|
||||||
|
FModel.getFormats().getVintage().editionLegalPredicate.and(FModel.getFormats().getModern().editionLegalPredicate.negate());
|
||||||
|
|
||||||
public static Predicate<CardEdition> selectSetPool() {
|
public static Predicate<CardEdition> selectSetPool() {
|
||||||
// Should we negate any of these to avoid overlap?
|
// Should we negate any of these to avoid overlap?
|
||||||
|
|||||||
@@ -224,17 +224,17 @@ public class VStack extends FDropDown {
|
|||||||
activeItem.getLeft() + VStack.CARD_WIDTH * FCardPanel.TARGET_ORIGIN_FACTOR_X + VStack.PADDING + VStack.BORDER_THICKNESS,
|
activeItem.getLeft() + VStack.CARD_WIDTH * FCardPanel.TARGET_ORIGIN_FACTOR_X + VStack.PADDING + VStack.BORDER_THICKNESS,
|
||||||
activeItem.getTop() + VStack.CARD_HEIGHT * FCardPanel.TARGET_ORIGIN_FACTOR_Y + VStack.PADDING + VStack.BORDER_THICKNESS);
|
activeItem.getTop() + VStack.CARD_HEIGHT * FCardPanel.TARGET_ORIGIN_FACTOR_Y + VStack.PADDING + VStack.BORDER_THICKNESS);
|
||||||
|
|
||||||
PlayerView activator = activeStackInstance.getActivatingPlayer();
|
PlayerView activator = activeStackInstance == null ? null : activeStackInstance.getActivatingPlayer();
|
||||||
arrowOrigin = arrowOrigin.add(screenPos.x, screenPos.y);
|
arrowOrigin = arrowOrigin.add(screenPos.x, screenPos.y);
|
||||||
|
|
||||||
StackItemView instance = activeStackInstance;
|
StackItemView instance = activeStackInstance;
|
||||||
while (instance != null) {
|
while (instance != null) {
|
||||||
for (CardView c : instance.getTargetCards()) {
|
for (CardView c : instance.getTargetCards()) {
|
||||||
TargetingOverlay.ArcConnection conn = activator.isOpponentOf(c.getController()) ? TargetingOverlay.ArcConnection.FoesStackTargeting : TargetingOverlay.ArcConnection.FriendsStackTargeting;
|
TargetingOverlay.ArcConnection conn = activator != null && activator.isOpponentOf(c.getController()) ? TargetingOverlay.ArcConnection.FoesStackTargeting : TargetingOverlay.ArcConnection.FriendsStackTargeting;
|
||||||
TargetingOverlay.drawArrow(g, arrowOrigin, VCardDisplayArea.CardAreaPanel.get(c).getTargetingArrowOrigin(), conn);
|
TargetingOverlay.drawArrow(g, arrowOrigin, VCardDisplayArea.CardAreaPanel.get(c).getTargetingArrowOrigin(), conn);
|
||||||
}
|
}
|
||||||
for (PlayerView p : instance.getTargetPlayers()) {
|
for (PlayerView p : instance.getTargetPlayers()) {
|
||||||
TargetingOverlay.ArcConnection conn = activator.isOpponentOf(p) ? TargetingOverlay.ArcConnection.FoesStackTargeting : TargetingOverlay.ArcConnection.FriendsStackTargeting;
|
TargetingOverlay.ArcConnection conn = activator != null && activator.isOpponentOf(p) ? TargetingOverlay.ArcConnection.FoesStackTargeting : TargetingOverlay.ArcConnection.FriendsStackTargeting;
|
||||||
TargetingOverlay.drawArrow(g, arrowOrigin, MatchScreen.getPlayerPanel(p).getAvatar().getTargetingArrowOrigin(), conn);
|
TargetingOverlay.drawArrow(g, arrowOrigin, MatchScreen.getPlayerPanel(p).getAvatar().getTargetingArrowOrigin(), conn);
|
||||||
}
|
}
|
||||||
instance = instance.getSubInstance();
|
instance = instance.getSubInstance();
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ PT:5/5
|
|||||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | CheckSVar$ X | SVarCompare$ LT1 | Execute$ TrigBounce | TriggerDescription$ When CARDNAME enters, if you haven't completed Tomb of Annihilation, return CARDNAME to its owner's hand and venture into the dungeon.
|
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | CheckSVar$ X | SVarCompare$ LT1 | Execute$ TrigBounce | TriggerDescription$ When CARDNAME enters, if you haven't completed Tomb of Annihilation, return CARDNAME to its owner's hand and venture into the dungeon.
|
||||||
SVar:TrigBounce:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | SubAbility$ DBVenture
|
SVar:TrigBounce:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | SubAbility$ DBVenture
|
||||||
SVar:DBVenture:DB$ Venture
|
SVar:DBVenture:DB$ Venture
|
||||||
SVar:X:PlayerCountPropertyYou$DungeonCompletedNamed_Tomb of Annihilation
|
SVar:X:DungeonsCompleted$Valid Card.namedTomb of Annihilation
|
||||||
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigRepeat | TriggerDescription$ Whenever CARDNAME attacks, for each opponent, you create a 2/2 black Zombie creature token unless that player sacrifices a creature.
|
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigRepeat | TriggerDescription$ Whenever CARDNAME attacks, for each opponent, you create a 2/2 black Zombie creature token unless that player sacrifices a creature.
|
||||||
SVar:TrigRepeat:DB$ RepeatEach | RepeatPlayers$ Opponent | RepeatSubAbility$ DBToken
|
SVar:TrigRepeat:DB$ RepeatEach | RepeatPlayers$ Opponent | RepeatSubAbility$ DBToken
|
||||||
SVar:DBToken:DB$ Token | TokenScript$ b_2_2_zombie | UnlessCost$ Sac<1/Creature> | UnlessPayer$ Player.IsRemembered
|
SVar:DBToken:DB$ Token | TokenScript$ b_2_2_zombie | UnlessCost$ Sac<1/Creature> | UnlessPayer$ Player.IsRemembered
|
||||||
|
|||||||
@@ -19,9 +19,9 @@ Types:Legendary Creature Avatar Ally
|
|||||||
PT:6/6
|
PT:6/6
|
||||||
K:Flying
|
K:Flying
|
||||||
S:Mode$ ReduceCost | ValidCard$ Card | Type$ Spell | Activator$ You | Amount$ 1 | Color$ W U B R G | Description$ Spells you cast cost {W}{U}{B}{R}{G} less to cast. (This can reduce generic costs.)
|
S:Mode$ ReduceCost | ValidCard$ Card | Type$ Spell | Activator$ You | Amount$ 1 | Color$ W U B R G | Description$ Spells you cast cost {W}{U}{B}{R}{G} less to cast. (This can reduce generic costs.)
|
||||||
T:Mode$ Phase | Phase$ Upkeep | TriggerZones$ Battlefield | Execute$ TrigToken | OptionalDecider$ You | TriggerDescription$ At the beginning of each upkeep, you may transform CARDNAME. If you do, you gain 4 life, draw four cards, put four +1/+1 counters on him, and he deals 4 damage to each opponent.
|
T:Mode$ Phase | Phase$ Upkeep | TriggerZones$ Battlefield | Execute$ TrigTransform | OptionalDecider$ You | TriggerDescription$ At the beginning of each upkeep, you may transform CARDNAME. If you do, you gain 4 life, draw four cards, put four +1/+1 counters on him, and he deals 4 damage to each opponent.
|
||||||
SVar:DBTransform:DB$ SetState | Defined$ Self | Mode$ Transform | RememberChanged$ True | SubAbility$ DBGainLife
|
SVar:TrigTransform:DB$ SetState | Defined$ Self | Mode$ Transform | RememberChanged$ True | SubAbility$ DBGainLife
|
||||||
SVar:TrigGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 4 | ConditionDefined$ Remembered | ConditionPresent$ Card | SubAbility$ DBDraw
|
SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 4 | ConditionDefined$ Remembered | ConditionPresent$ Card | SubAbility$ DBDraw
|
||||||
SVar:DBDraw:DB$ Draw | NumCards$ 4 | ConditionDefined$ Remembered | ConditionPresent$ Card | SubAbility$ DBPutCounter
|
SVar:DBDraw:DB$ Draw | NumCards$ 4 | ConditionDefined$ Remembered | ConditionPresent$ Card | SubAbility$ DBPutCounter
|
||||||
SVar:DBPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 4 | ConditionDefined$ Remembered | ConditionPresent$ Card | SubAbility$ DBDamage
|
SVar:DBPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 4 | ConditionDefined$ Remembered | ConditionPresent$ Card | SubAbility$ DBDamage
|
||||||
SVar:DBDamage:DB$ DealDamage | Defined$ Player.Opponent | NumDmg$ 4 | CounterNum$ 4 | ConditionDefined$ Remembered | ConditionPresent$ Card | SubAbility$ DBCleanup
|
SVar:DBDamage:DB$ DealDamage | Defined$ Player.Opponent | NumDmg$ 4 | CounterNum$ 4 | ConditionDefined$ Remembered | ConditionPresent$ Card | SubAbility$ DBCleanup
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S
|
|||||||
T:Mode$ Attacks | ValidCard$ Card.Self | CheckSVar$ X | SVarCompare$ GE1 | Execute$ DBChangeZone | TriggerDescription$ Whenever CARDNAME attacks, return up to one creature card with mana value 3 or less from your graveyard to the battlefield if you've completed a dungeon.
|
T:Mode$ Attacks | ValidCard$ Card.Self | CheckSVar$ X | SVarCompare$ GE1 | Execute$ DBChangeZone | TriggerDescription$ Whenever CARDNAME attacks, return up to one creature card with mana value 3 or less from your graveyard to the battlefield if you've completed a dungeon.
|
||||||
SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Hidden$ True | ChangeType$ Creature.YouOwn+cmcLE3
|
SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Hidden$ True | ChangeType$ Creature.YouOwn+cmcLE3
|
||||||
SVar:DBVenture:DB$ Venture | Defined$ You
|
SVar:DBVenture:DB$ Venture | Defined$ You
|
||||||
SVar:X:PlayerCountPropertyYou$DungeonsCompleted
|
SVar:X:DungeonsCompleted$Amount
|
||||||
DeckHints:Ability$Mill|Discard
|
DeckHints:Ability$Mill|Discard
|
||||||
DeckHas:Ability$Graveyard
|
DeckHas:Ability$Graveyard
|
||||||
Oracle:When Barrowin of Clan Undurr enters, venture into the dungeon. (Enter the first room or advance to the next room.)\nWhenever Barrowin of Clan Undurr attacks, return up to one creature card with mana value 3 or less from your graveyard to the battlefield if you've completed a dungeon.
|
Oracle:When Barrowin of Clan Undurr enters, venture into the dungeon. (Enter the first room or advance to the next room.)\nWhenever Barrowin of Clan Undurr attacks, return up to one creature card with mana value 3 or less from your graveyard to the battlefield if you've completed a dungeon.
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ ManaCost:no cost
|
|||||||
Types:Land Desert
|
Types:Land Desert
|
||||||
A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}.
|
A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}.
|
||||||
A:AB$ Mana | Cost$ T | Produced$ Any | Amount$ 1 | RestrictValid$ Spell.Mount | SpellDescription$ Add one mana of any color. Spend this mana only to cast a Mount spell.
|
A:AB$ Mana | Cost$ T | Produced$ Any | Amount$ 1 | RestrictValid$ Spell.Mount | SpellDescription$ Add one mana of any color. Spend this mana only to cast a Mount spell.
|
||||||
A:AB$ PeekAndReveal | Cost$ 3 T | PeekAmount$ 1 | RevealValid$ Card.Mount | RevealOptional$ True | RememberRevealed$ True | SubAbility$ DBChangeZone | SpellDescription$ Look at the top card of your library. If it's a Mount card, you may reveal it and put it into your hand. If you don't put it into your hand, you may put it on the bottom of your library.
|
A:AB$ PeekAndReveal | Cost$ 3 T | PeekAmount$ 1 | RevealValid$ Card.Mount | RevealOptional$ True | RememberRevealed$ True | SubAbility$ DBChangeZone | AILogic$ AtOppEOT | SpellDescription$ Look at the top card of your library. If it's a Mount card, you may reveal it and put it into your hand. If you don't put it into your hand, you may put it on the bottom of your library.
|
||||||
SVar:DBChangeZone:DB$ ChangeZone | Defined$ Remembered | Origin$ Library | Destination$ Hand | SubAbility$ DBChangeZone2
|
SVar:DBChangeZone:DB$ ChangeZone | Defined$ Remembered | Origin$ Library | Destination$ Hand | SubAbility$ DBChangeZone2
|
||||||
SVar:DBChangeZone2:DB$ ChangeZone | Optional$ True | Defined$ TopOfLibrary | Origin$ Library | Destination$ Library | LibraryPosition$ -1 | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ EQ0 | SubAbility$ DBCleanup
|
SVar:DBChangeZone2:DB$ ChangeZone | Optional$ True | Defined$ TopOfLibrary | Origin$ Library | Destination$ Library | LibraryPosition$ -1 | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ EQ0 | SubAbility$ DBCleanup
|
||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
|
|||||||
@@ -13,6 +13,6 @@ SVar:STPlay2:Mode$ Continuous | MayPlay$ True | MayPlayWithoutManaCost$ True | A
|
|||||||
SVar:DBEffect:DB$ Effect | StaticAbilities$ STPlay | RememberObjects$ Remembered | ForgetOnMoved$ Exile
|
SVar:DBEffect:DB$ Effect | StaticAbilities$ STPlay | RememberObjects$ Remembered | ForgetOnMoved$ Exile
|
||||||
SVar:STPlay:Mode$ Continuous | MayPlay$ True | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ You may play that card this turn.
|
SVar:STPlay:Mode$ Continuous | MayPlay$ True | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ You may play that card this turn.
|
||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
SVar:X:PlayerCountPropertyYou$DungeonsCompleted
|
SVar:X:DungeonsCompleted$Amount
|
||||||
SVar:HasAttackEffect:TRUE
|
SVar:HasAttackEffect:TRUE
|
||||||
Oracle:Trample\nWhen Caves of Chaos Adventurer enters, you take the initiative.\nWhenever Caves of Chaos Adventurer attacks, exile the top card of your library. If you've completed a dungeon, you may play that card this turn without paying its mana cost. Otherwise, you may play that card this turn.
|
Oracle:Trample\nWhen Caves of Chaos Adventurer enters, you take the initiative.\nWhenever Caves of Chaos Adventurer attacks, exile the top card of your library. If you've completed a dungeon, you may play that card this turn without paying its mana cost. Otherwise, you may play that card this turn.
|
||||||
|
|||||||
@@ -5,5 +5,5 @@ PT:0/4
|
|||||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBVenture | TriggerDescription$ When CARDNAME enters, venture into the dungeon. (Enter the first room or advance to the next room.)
|
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBVenture | TriggerDescription$ When CARDNAME enters, venture into the dungeon. (Enter the first room or advance to the next room.)
|
||||||
SVar:DBVenture:DB$ Venture | Defined$ You
|
SVar:DBVenture:DB$ Venture | Defined$ You
|
||||||
S:Mode$ Continuous | Affected$ Card.Self | AddPower$ 3 | AddKeyword$ Flying | CheckSVar$ X | SVarCompare$ GE1 | Description$ As long as you've completed a dungeon, CARDNAME gets +3/+0 and has flying.
|
S:Mode$ Continuous | Affected$ Card.Self | AddPower$ 3 | AddKeyword$ Flying | CheckSVar$ X | SVarCompare$ GE1 | Description$ As long as you've completed a dungeon, CARDNAME gets +3/+0 and has flying.
|
||||||
SVar:X:PlayerCountPropertyYou$DungeonsCompleted
|
SVar:X:DungeonsCompleted$Amount
|
||||||
Oracle:When Cloister Gargoyle enters, venture into the dungeon. (Enter the first room or advance to the next room.)\nAs long as you've completed a dungeon, Cloister Gargoyle gets +3/+0 and has flying.
|
Oracle:When Cloister Gargoyle enters, venture into the dungeon. (Enter the first room or advance to the next room.)\nAs long as you've completed a dungeon, Cloister Gargoyle gets +3/+0 and has flying.
|
||||||
|
|||||||
@@ -7,5 +7,5 @@ T:Mode$ ChangesZone | ValidCard$ Card.Self | Destination$ Battlefield | Execute$
|
|||||||
SVar:TrigVenture:DB$ Venture
|
SVar:TrigVenture:DB$ Venture
|
||||||
T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | CheckSVar$ X | Execute$ TrigAnimate | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of combat on your turn, if you've completed a dungeon, up to one target creature becomes a Bird with base power and toughness 1/1 and flying until end of turn.
|
T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | CheckSVar$ X | Execute$ TrigAnimate | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of combat on your turn, if you've completed a dungeon, up to one target creature becomes a Bird with base power and toughness 1/1 and flying until end of turn.
|
||||||
SVar:TrigAnimate:DB$ Animate | ValidTgts$ Creature | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select up to one target creature | Power$ 1 | Toughness$ 1 | Types$ Bird | RemoveCreatureTypes$ True | Keywords$ Flying
|
SVar:TrigAnimate:DB$ Animate | ValidTgts$ Creature | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select up to one target creature | Power$ 1 | Toughness$ 1 | Types$ Bird | RemoveCreatureTypes$ True | Keywords$ Flying
|
||||||
SVar:X:PlayerCountPropertyYou$DungeonsCompleted
|
SVar:X:DungeonsCompleted$Amount
|
||||||
Oracle:Flying\nWhen Eccentric Apprentice enters, venture into the dungeon. (Enter the first room or advance to the next room.)\nAt the beginning of combat on your turn, if you've completed a dungeon, up to one target creature becomes a Bird with base power and toughness 1/1 and flying until end of turn.
|
Oracle:Flying\nWhen Eccentric Apprentice enters, venture into the dungeon. (Enter the first room or advance to the next room.)\nAt the beginning of combat on your turn, if you've completed a dungeon, up to one target creature becomes a Bird with base power and toughness 1/1 and flying until end of turn.
|
||||||
|
|||||||
@@ -9,5 +9,5 @@ SVar:IsLegendary:Count$ValidHand Creature.Legendary+IsRemembered
|
|||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
A:AB$ Effect | Cost$ SubCounter<7/LOYALTY> | Planeswalker$ True | Ultimate$ True | Name$ Emblem — Ellywick Tumblestrum | Image$ emblem_ellywick_tumblestrum | StaticAbilities$ STOverrun | Duration$ Permanent | AILogic$ Always | SpellDescription$ You get an emblem with "Creatures you control have trample and haste and get +2/+2 for each differently named dungeon you've completed."
|
A:AB$ Effect | Cost$ SubCounter<7/LOYALTY> | Planeswalker$ True | Ultimate$ True | Name$ Emblem — Ellywick Tumblestrum | Image$ emblem_ellywick_tumblestrum | StaticAbilities$ STOverrun | Duration$ Permanent | AILogic$ Always | SpellDescription$ You get an emblem with "Creatures you control have trample and haste and get +2/+2 for each differently named dungeon you've completed."
|
||||||
SVar:STOverrun:Mode$ Continuous | Affected$ Creature.YouCtrl | AffectedZone$ Battlefield | AddPower$ X | AddToughness$ X | AddKeyword$ Trample & Haste | Description$ Creatures you control have trample and haste and get +2/+2 for each differently named dungeon you've completed.
|
SVar:STOverrun:Mode$ Continuous | Affected$ Creature.YouCtrl | AffectedZone$ Battlefield | AddPower$ X | AddToughness$ X | AddKeyword$ Trample & Haste | Description$ Creatures you control have trample and haste and get +2/+2 for each differently named dungeon you've completed.
|
||||||
SVar:X:PlayerCountPropertyYou$DifferentlyNamedDungeonsCompleted/Twice
|
SVar:X:DungeonsCompleted$DifferentCardNames/Twice
|
||||||
Oracle:[+1]: Venture into the dungeon. (Enter the first room or advance to the next room.)\n[-2]: Look at the top six cards of your library. You may reveal a creature card from among them and put it into your hand. If it's legendary, you gain 3 life. Put the rest on the bottom of your library in a random order.\n[-7]: You get an emblem with "Creatures you control have trample and haste and get +2/+2 for each differently named dungeon you've completed."
|
Oracle:[+1]: Venture into the dungeon. (Enter the first room or advance to the next room.)\n[-2]: Look at the top six cards of your library. You may reveal a creature card from among them and put it into your hand. If it's legendary, you gain 3 life. Put the rest on the bottom of your library in a random order.\n[-7]: You get an emblem with "Creatures you control have trample and haste and get +2/+2 for each differently named dungeon you've completed."
|
||||||
|
|||||||
@@ -3,5 +3,5 @@ ManaCost:2 W
|
|||||||
Types:Creature Dwarf Ranger
|
Types:Creature Dwarf Ranger
|
||||||
PT:2/3
|
PT:2/3
|
||||||
S:Mode$ Continuous | Affected$ Card.Self | AddKeyword$ Double Strike | CheckSVar$ X | SVarCompare$ GE1 | Description$ As long as you've completed a dungeon, CARDNAME has double strike.
|
S:Mode$ Continuous | Affected$ Card.Self | AddKeyword$ Double Strike | CheckSVar$ X | SVarCompare$ GE1 | Description$ As long as you've completed a dungeon, CARDNAME has double strike.
|
||||||
SVar:X:PlayerCountPropertyYou$DungeonsCompleted
|
SVar:X:DungeonsCompleted$Amount
|
||||||
Oracle:As long as you've completed a dungeon, Gloom Stalker has double strike.
|
Oracle:As long as you've completed a dungeon, Gloom Stalker has double strike.
|
||||||
|
|||||||
@@ -7,5 +7,5 @@ T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefiel
|
|||||||
SVar:TrigDraw:DB$ Draw | SubAbility$ DBDraw
|
SVar:TrigDraw:DB$ Draw | SubAbility$ DBDraw
|
||||||
SVar:DBDraw:DB$ Draw | ConditionCheckSVar$ X
|
SVar:DBDraw:DB$ Draw | ConditionCheckSVar$ X
|
||||||
K:Choose a Background
|
K:Choose a Background
|
||||||
SVar:X:PlayerCountPropertyYou$DungeonsCompleted
|
SVar:X:DungeonsCompleted$Amount
|
||||||
Oracle:Ward {2} (Whenever this creature becomes the target of a spell or ability an opponent controls, counter it unless that player pays {2}.)\nAt the beginning of your end step, if you have the initiative, draw a card. Draw another card if you've completed a dungeon.\nChoose a Background (You can have a Background as a second commander.)
|
Oracle:Ward {2} (Whenever this creature becomes the target of a spell or ability an opponent controls, counter it unless that player pays {2}.)\nAt the beginning of your end step, if you have the initiative, draw a card. Draw another card if you've completed a dungeon.\nChoose a Background (You can have a Background as a second commander.)
|
||||||
|
|||||||
@@ -7,5 +7,5 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S
|
|||||||
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ DBVenture | Secondary$ True | TriggerDescription$ Whenever CARDNAME enters or attacks, venture into the dungeon. (Enter the first room or advance to the next room.)
|
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ DBVenture | Secondary$ True | TriggerDescription$ Whenever CARDNAME enters or attacks, venture into the dungeon. (Enter the first room or advance to the next room.)
|
||||||
SVar:DBVenture:DB$ Venture | Defined$ You
|
SVar:DBVenture:DB$ Venture | Defined$ You
|
||||||
S:Mode$ Continuous | Affected$ Creature.YouCtrl+Other | AddPower$ 1 | AddToughness$ 1 | CheckSVar$ X | SVarCompare$ GE1 | Description$ Other creatures you control get +1/+1 as long as you've completed a dungeon.
|
S:Mode$ Continuous | Affected$ Creature.YouCtrl+Other | AddPower$ 1 | AddToughness$ 1 | CheckSVar$ X | SVarCompare$ GE1 | Description$ Other creatures you control get +1/+1 as long as you've completed a dungeon.
|
||||||
SVar:X:PlayerCountPropertyYou$DungeonsCompleted
|
SVar:X:DungeonsCompleted$Amount
|
||||||
Oracle:Vigilance\nWhenever Nadaar, Selfless Paladin enters or attacks, venture into the dungeon. (Enter the first room or advance to the next room.)\nOther creatures you control get +1/+1 as long as you've completed a dungeon.
|
Oracle:Vigilance\nWhenever Nadaar, Selfless Paladin enters or attacks, venture into the dungeon. (Enter the first room or advance to the next room.)\nOther creatures you control get +1/+1 as long as you've completed a dungeon.
|
||||||
|
|||||||
@@ -7,5 +7,5 @@ T:Mode$ ChangesZone | ValidCard$ Card.Self | Destination$ Battlefield | Execute$
|
|||||||
SVar:TrigVenture:DB$ Venture
|
SVar:TrigVenture:DB$ Venture
|
||||||
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ -X | AddToughness$ -X | Description$ Enchanted creature gets -2/-2. It gets -5/-5 instead as long as you've completed a dungeon.
|
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ -X | AddToughness$ -X | Description$ Enchanted creature gets -2/-2. It gets -5/-5 instead as long as you've completed a dungeon.
|
||||||
SVar:X:Count$Compare Y GE1.5.2
|
SVar:X:Count$Compare Y GE1.5.2
|
||||||
SVar:Y:PlayerCountPropertyYou$DungeonsCompleted
|
SVar:Y:DungeonsCompleted$Amount
|
||||||
Oracle:Enchant creature\nWhen Precipitous Drop enters, venture into the dungeon. (Enter the first room or advance to the next room.)\nEnchanted creature gets -2/-2. It gets -5/-5 instead as long as you've completed a dungeon.
|
Oracle:Enchant creature\nWhen Precipitous Drop enters, venture into the dungeon. (Enter the first room or advance to the next room.)\nEnchanted creature gets -2/-2. It gets -5/-5 instead as long as you've completed a dungeon.
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ SVar:DBPutCounter:DB$ PutCounter | Defined$ Remembered | CounterType$ HIT | SubA
|
|||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigLoseLife | CheckSVar$ X | TriggerDescription$ Whenever CARDNAME attacks, if you've completed a dungeon, defending player loses 1 life for each card they own in exile with a hit counter on it.
|
T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigLoseLife | CheckSVar$ X | TriggerDescription$ Whenever CARDNAME attacks, if you've completed a dungeon, defending player loses 1 life for each card they own in exile with a hit counter on it.
|
||||||
SVar:TrigLoseLife:DB$ LoseLife | Defined$ TriggeredDefendingPlayer | LifeAmount$ Y
|
SVar:TrigLoseLife:DB$ LoseLife | Defined$ TriggeredDefendingPlayer | LifeAmount$ Y
|
||||||
SVar:X:PlayerCountPropertyYou$DungeonsCompleted
|
SVar:X:DungeonsCompleted$Amount
|
||||||
SVar:Y:TriggeredDefendingPlayer$ValidExile Card.YouOwn+counters_GE1_HIT
|
SVar:Y:TriggeredDefendingPlayer$ValidExile Card.YouOwn+counters_GE1_HIT
|
||||||
SVar:HasAttackEffect:TRUE
|
SVar:HasAttackEffect:TRUE
|
||||||
DeckHints:Name$Etrata, the Silencer|Mari, the Killing Quill
|
DeckHints:Name$Etrata, the Silencer|Mari, the Killing Quill
|
||||||
|
|||||||
@@ -8,5 +8,5 @@ SVar:TrigInitiative:DB$ TakeInitiative
|
|||||||
T:Mode$ AttackersDeclared | AttackingPlayer$ You | Execute$ TrigPump | TriggerZones$ Battlefield | TriggerDescription$ Whenever you attack, target attacking creature gains deathtouch until end of turn. If you've completed a dungeon, that creature also gets +5/+0 and gains first strike and menace until end of turn.
|
T:Mode$ AttackersDeclared | AttackingPlayer$ You | Execute$ TrigPump | TriggerZones$ Battlefield | TriggerDescription$ Whenever you attack, target attacking creature gains deathtouch until end of turn. If you've completed a dungeon, that creature also gets +5/+0 and gains first strike and menace until end of turn.
|
||||||
SVar:TrigPump:DB$ Pump | KW$ Deathtouch | TgtPrompt$ Select target attacking creature | ValidTgts$ Creature.attacking | SubAbility$ DBPump
|
SVar:TrigPump:DB$ Pump | KW$ Deathtouch | TgtPrompt$ Select target attacking creature | ValidTgts$ Creature.attacking | SubAbility$ DBPump
|
||||||
SVar:DBPump:DB$ Pump | ConditionCheckSVar$ X | NumAtt$ +5 | KW$ First Strike & Menace | Defined$ Targeted
|
SVar:DBPump:DB$ Pump | ConditionCheckSVar$ X | NumAtt$ +5 | KW$ First Strike & Menace | Defined$ Targeted
|
||||||
SVar:X:PlayerCountPropertyYou$DungeonsCompleted
|
SVar:X:DungeonsCompleted$Amount
|
||||||
Oracle:Deathtouch\nWhen Rilsa Rael, Kingpin enters, you take the initiative.\nWhenever you attack, target attacking creature gains deathtouch until end of turn. If you've completed a dungeon, that creature also gets +5/+0 and gains first strike and menace until end of turn.
|
Oracle:Deathtouch\nWhen Rilsa Rael, Kingpin enters, you take the initiative.\nWhenever you attack, target attacking creature gains deathtouch until end of turn. If you've completed a dungeon, that creature also gets +5/+0 and gains first strike and menace until end of turn.
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ PT:5/5
|
|||||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | CheckSVar$ X | SVarCompare$ LT1 | Execute$ TrigBounce | TriggerDescription$ When CARDNAME enters, if you haven't completed Tomb of Annihilation, return CARDNAME to its owner's hand and venture into the dungeon.
|
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | CheckSVar$ X | SVarCompare$ LT1 | Execute$ TrigBounce | TriggerDescription$ When CARDNAME enters, if you haven't completed Tomb of Annihilation, return CARDNAME to its owner's hand and venture into the dungeon.
|
||||||
SVar:TrigBounce:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | SubAbility$ DBVenture
|
SVar:TrigBounce:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | SubAbility$ DBVenture
|
||||||
SVar:DBVenture:DB$ Venture
|
SVar:DBVenture:DB$ Venture
|
||||||
SVar:X:PlayerCountPropertyYou$DungeonCompletedNamed_Tomb of Annihilation
|
SVar:X:DungeonsCompleted$Valid Card.namedTomb of Annihilation
|
||||||
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ Whenever CARDNAME attacks, create a number of 2/2 black Zombie creature tokens equal to the number of opponents you have.
|
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ Whenever CARDNAME attacks, create a number of 2/2 black Zombie creature tokens equal to the number of opponents you have.
|
||||||
SVar:TrigToken:DB$ Token | TokenAmount$ Y | TokenScript$ b_2_2_zombie | TokenOwner$ You
|
SVar:TrigToken:DB$ Token | TokenAmount$ Y | TokenScript$ b_2_2_zombie | TokenOwner$ You
|
||||||
SVar:Y:PlayerCountOpponents$Amount
|
SVar:Y:PlayerCountOpponents$Amount
|
||||||
|
|||||||
@@ -5,5 +5,5 @@ PT:0/3
|
|||||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBVenture | TriggerDescription$ When CARDNAME enters, venture into the dungeon.
|
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBVenture | TriggerDescription$ When CARDNAME enters, venture into the dungeon.
|
||||||
SVar:DBVenture:DB$ Venture | Defined$ You
|
SVar:DBVenture:DB$ Venture | Defined$ You
|
||||||
S:Mode$ Continuous | Affected$ Card.Self | AddPower$ 3 | AddKeyword$ Flying | CheckSVar$ X | SVarCompare$ GE1 | Description$ As long as you've completed a dungeon, CARDNAME gets +3/+0 and has flying.
|
S:Mode$ Continuous | Affected$ Card.Self | AddPower$ 3 | AddKeyword$ Flying | CheckSVar$ X | SVarCompare$ GE1 | Description$ As long as you've completed a dungeon, CARDNAME gets +3/+0 and has flying.
|
||||||
SVar:X:PlayerCountPropertyYou$DungeonsCompleted
|
SVar:X:DungeonsCompleted$Amount
|
||||||
Oracle:When Cloister Gargoyle enters, venture into the dungeon.\nAs long as you've completed a dungeon, Cloister Gargoyle gets +3/+0 and has flying.
|
Oracle:When Cloister Gargoyle enters, venture into the dungeon.\nAs long as you've completed a dungeon, Cloister Gargoyle gets +3/+0 and has flying.
|
||||||
|
|||||||
@@ -9,5 +9,5 @@ SVar:IsLegendary:Count$ValidHand Creature.Legendary+IsRemembered
|
|||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
A:AB$ Effect | Cost$ SubCounter<6/LOYALTY> | Planeswalker$ True | Ultimate$ True | Name$ Emblem — Ellywick Tumblestrum | Image$ emblem_ellywick_tumblestrum | StaticAbilities$ STOverrun | Duration$ Permanent | AILogic$ Always | SpellDescription$ You get an emblem with "Creatures you control have trample and haste and get +2/+2 for each differently named dungeon you've completed."
|
A:AB$ Effect | Cost$ SubCounter<6/LOYALTY> | Planeswalker$ True | Ultimate$ True | Name$ Emblem — Ellywick Tumblestrum | Image$ emblem_ellywick_tumblestrum | StaticAbilities$ STOverrun | Duration$ Permanent | AILogic$ Always | SpellDescription$ You get an emblem with "Creatures you control have trample and haste and get +2/+2 for each differently named dungeon you've completed."
|
||||||
SVar:STOverrun:Mode$ Continuous | Affected$ Creature.YouCtrl | AffectedZone$ Battlefield | AddPower$ X | AddToughness$ X | AddKeyword$ Trample & Haste | Description$ Creatures you control have trample and haste and get +2/+2 for each differently named dungeon you've completed.
|
SVar:STOverrun:Mode$ Continuous | Affected$ Creature.YouCtrl | AffectedZone$ Battlefield | AddPower$ X | AddToughness$ X | AddKeyword$ Trample & Haste | Description$ Creatures you control have trample and haste and get +2/+2 for each differently named dungeon you've completed.
|
||||||
SVar:X:PlayerCountPropertyYou$DifferentlyNamedDungeonsCompleted/Twice
|
SVar:X:DungeonsCompleted$DifferentCardNames/Twice
|
||||||
Oracle:[+1]: Venture into the dungeon.\n[-2]: Look at the top six cards of your library. You may reveal a creature card from among them and put it into your hand. If it's legendary, you gain 3 life. Put the rest on the bottom of your library in a random order.\n[-6]: You get an emblem with "Creatures you control have trample and haste and get +2/+2 for each differently named dungeon you've completed."
|
Oracle:[+1]: Venture into the dungeon.\n[-2]: Look at the top six cards of your library. You may reveal a creature card from among them and put it into your hand. If it's legendary, you gain 3 life. Put the rest on the bottom of your library in a random order.\n[-6]: You get an emblem with "Creatures you control have trample and haste and get +2/+2 for each differently named dungeon you've completed."
|
||||||
|
|||||||
@@ -7,5 +7,5 @@ T:Mode$ ChangesZone | ValidCard$ Card.Self | Destination$ Battlefield | Execute$
|
|||||||
SVar:TrigVenture:DB$ Venture
|
SVar:TrigVenture:DB$ Venture
|
||||||
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ -X | AddToughness$ -X | Description$ Enchanted creature gets -2/-2. It gets -5/-5 instead as long as you've completed a dungeon.
|
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ -X | AddToughness$ -X | Description$ Enchanted creature gets -2/-2. It gets -5/-5 instead as long as you've completed a dungeon.
|
||||||
SVar:X:Count$Compare Y GE1.5.2
|
SVar:X:Count$Compare Y GE1.5.2
|
||||||
SVar:Y:PlayerCountPropertyYou$DungeonsCompleted
|
SVar:Y:DungeonsCompleted$Amount
|
||||||
Oracle:Enchant creature\nWhen Precipitous Drop enters, venture into the dungeon.\nEnchanted creature gets -2/-2. It gets -5/-5 instead as long as you've completed a dungeon.
|
Oracle:Enchant creature\nWhen Precipitous Drop enters, venture into the dungeon.\nEnchanted creature gets -2/-2. It gets -5/-5 instead as long as you've completed a dungeon.
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ K:Menace
|
|||||||
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | CheckDefinedPlayer$ You.hasInitiative | Execute$ TrigTreasure | TriggerDescription$ At the beginning of your end step, if you have the initiative, create a Treasure token. If you've completed a dungeon, create three of those tokens instead.
|
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | CheckDefinedPlayer$ You.hasInitiative | Execute$ TrigTreasure | TriggerDescription$ At the beginning of your end step, if you have the initiative, create a Treasure token. If you've completed a dungeon, create three of those tokens instead.
|
||||||
SVar:TrigTreasure:DB$ Token | TokenAmount$ X | TokenScript$ c_a_treasure_sac
|
SVar:TrigTreasure:DB$ Token | TokenAmount$ X | TokenScript$ c_a_treasure_sac
|
||||||
SVar:X:Count$Compare Y GE1.3.1
|
SVar:X:Count$Compare Y GE1.3.1
|
||||||
SVar:Y:PlayerCountPropertyYou$DungeonsCompleted
|
SVar:Y:DungeonsCompleted$Amount
|
||||||
K:Choose a Background
|
K:Choose a Background
|
||||||
AI:RemoveDeck:Random
|
AI:RemoveDeck:Random
|
||||||
DeckHas:Ability$Token|Sacrifice & Type$Artifact|Treasure
|
DeckHas:Ability$Token|Sacrifice & Type$Artifact|Treasure
|
||||||
|
|||||||
@@ -8,5 +8,5 @@ SVar:X:Count$Initiative.2.1
|
|||||||
A:AB$ DigUntil | Cost$ 3 T | Valid$ Card.nonLand | ValidDescription$ nonland | FoundDestination$ Exile | RevealedDestination$ Exile | RememberFound$ True | SubAbility$ DBPlay | CheckSVar$ Y | NoPutDesc$ True | SpellDescription$ Exile cards from the top of your library until you exile a nonland card. You may cast that card without paying its mana cost. Activate only if you've completed a dungeon.
|
A:AB$ DigUntil | Cost$ 3 T | Valid$ Card.nonLand | ValidDescription$ nonland | FoundDestination$ Exile | RevealedDestination$ Exile | RememberFound$ True | SubAbility$ DBPlay | CheckSVar$ Y | NoPutDesc$ True | SpellDescription$ Exile cards from the top of your library until you exile a nonland card. You may cast that card without paying its mana cost. Activate only if you've completed a dungeon.
|
||||||
SVar:DBPlay:DB$ Play | Defined$ Remembered | DefinedDesc$ that card | ValidSA$ Spell | WithoutManaCost$ True | Optional$ True | SubAbility$ DBCleanup
|
SVar:DBPlay:DB$ Play | Defined$ Remembered | DefinedDesc$ that card | ValidSA$ Spell | WithoutManaCost$ True | Optional$ True | SubAbility$ DBCleanup
|
||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
SVar:Y:PlayerCountPropertyYou$DungeonsCompleted
|
SVar:Y:DungeonsCompleted$Amount
|
||||||
Oracle:When Sarevok's Tome enters, you take the initiative.\n{T}: Add {C}. If you have the initiative, add {C}{C} instead.\n{3}, {T}: Exile cards from the top of your library until you exile a nonland card. You may cast that card without paying its mana cost. Activate only if you've completed a dungeon.
|
Oracle:When Sarevok's Tome enters, you take the initiative.\n{T}: Add {C}. If you have the initiative, add {C}{C} instead.\n{3}, {T}: Exile cards from the top of your library until you exile a nonland card. You may cast that card without paying its mana cost. Activate only if you've completed a dungeon.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ Name:The Gold Saucer
|
|||||||
ManaCost:no cost
|
ManaCost:no cost
|
||||||
Types:Land Town
|
Types:Land Town
|
||||||
A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}.
|
A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}.
|
||||||
A:AB$ FlipACoin | Cost$ 2 T | WinSubAbility$ DBToken | SpellDescription$ Flip a coin. If you win the flip, create a Treasure token.
|
A:AB$ FlipACoin | Cost$ 2 T | WinSubAbility$ DBToken | AILogic$ AtOppEOT | SpellDescription$ Flip a coin. If you win the flip, create a Treasure token.
|
||||||
SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_treasure_sac | TokenOwner$ You
|
SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_treasure_sac | TokenOwner$ You
|
||||||
A:AB$ Draw | Cost$ 3 T Sac<2/Artifact> | SpellDescription$ Draw a card.
|
A:AB$ Draw | Cost$ 3 T Sac<2/Artifact> | SpellDescription$ Draw a card.
|
||||||
DeckHas:Ability$Token
|
DeckHas:Ability$Token
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ SVar:DBExile:DB$ ChangeZone | ValidTgts$ Opponent | ChangeType$ Card.NamedCard |
|
|||||||
SVar:DBTransform:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | SubAbility$ DBReturn | SpellDescription$ Exile this Saga, then return it to the battlefield transformed under your control.
|
SVar:DBTransform:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | SubAbility$ DBReturn | SpellDescription$ Exile this Saga, then return it to the battlefield transformed under your control.
|
||||||
SVar:DBReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Battlefield | Transformed$ True | GainControl$ True | SubAbility$ DBCleanup
|
SVar:DBReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Battlefield | Transformed$ True | GainControl$ True | SubAbility$ DBCleanup
|
||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
|
AlternateMode:DoubleFaced
|
||||||
Oracle:(As this Saga enters and after your draw step, add a lore counter.)\nI — Destroy all creatures.\nII — Choose a card name. Search target opponent's graveyard, hand, and library for up to four cards with that name and exile them. Then that player shuffles.\nIII — Exile this Saga, then return it to the battlefield transformed under your control.
|
Oracle:(As this Saga enters and after your draw step, add a lore counter.)\nI — Destroy all creatures.\nII — Choose a card name. Search target opponent's graveyard, hand, and library for up to four cards with that name and exile them. Then that player shuffles.\nIII — Exile this Saga, then return it to the battlefield transformed under your control.
|
||||||
|
|
||||||
ALTERNATE
|
ALTERNATE
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S
|
|||||||
SVar:TrigInitiative:DB$ TakeInitiative
|
SVar:TrigInitiative:DB$ TakeInitiative
|
||||||
T:Mode$ SpellCast | ValidCard$ Card.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigCopy | ActivatorThisTurnCast$ EQ2 | ValidActivatingPlayer$ You | TriggerDescription$ Whenever you cast your second spell each turn, copy it. If you've completed a dungeon, copy that spell twice instead. You may choose new targets for the copies. (A copy of a permanent spell becomes a token.)
|
T:Mode$ SpellCast | ValidCard$ Card.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigCopy | ActivatorThisTurnCast$ EQ2 | ValidActivatingPlayer$ You | TriggerDescription$ Whenever you cast your second spell each turn, copy it. If you've completed a dungeon, copy that spell twice instead. You may choose new targets for the copies. (A copy of a permanent spell becomes a token.)
|
||||||
SVar:TrigCopy:DB$ CopySpellAbility | Amount$ Y | Defined$ TriggeredSpellAbility | MayChooseTarget$ True
|
SVar:TrigCopy:DB$ CopySpellAbility | Amount$ Y | Defined$ TriggeredSpellAbility | MayChooseTarget$ True
|
||||||
SVar:X:PlayerCountPropertyYou$DungeonsCompleted
|
SVar:X:DungeonsCompleted$Amount
|
||||||
SVar:Y:Count$Compare X GE1.2.1
|
SVar:Y:Count$Compare X GE1.2.1
|
||||||
DeckHas:Ability$Token
|
DeckHas:Ability$Token
|
||||||
Oracle:When Tomb of Horrors Adventurer enters, you take the initiative.\nWhenever you cast your second spell each turn, copy it. If you've completed a dungeon, copy that spell twice instead. You may choose new targets for the copies. (A copy of a permanent spell becomes a token.)
|
Oracle:When Tomb of Horrors Adventurer enters, you take the initiative.\nWhenever you cast your second spell each turn, copy it. If you've completed a dungeon, copy that spell twice instead. You may choose new targets for the copies. (A copy of a permanent spell becomes a token.)
|
||||||
|
|||||||
@@ -6,6 +6,6 @@ K:Vigilance
|
|||||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigInitiative | TriggerDescription$ When CARDNAME enters, you take the initiative.
|
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigInitiative | TriggerDescription$ When CARDNAME enters, you take the initiative.
|
||||||
SVar:TrigInitiative:DB$ TakeInitiative
|
SVar:TrigInitiative:DB$ TakeInitiative
|
||||||
A:AB$ Mana | Cost$ T | Produced$ G | Amount$ Y | SpellDescription$ Add {G}{G}. If you've completed a dungeon, add six {G} instead.
|
A:AB$ Mana | Cost$ T | Produced$ G | Amount$ Y | SpellDescription$ Add {G}{G}. If you've completed a dungeon, add six {G} instead.
|
||||||
SVar:X:PlayerCountPropertyYou$DungeonsCompleted
|
SVar:X:DungeonsCompleted$Amount
|
||||||
SVar:Y:Count$Compare X GE1.6.2
|
SVar:Y:Count$Compare X GE1.6.2
|
||||||
Oracle:Vigilance\nWhen Undermountain Adventurer enters, you take the initiative.\n{T}: Add {G}{G}. If you've completed a dungeon, add six {G} instead.
|
Oracle:Vigilance\nWhen Undermountain Adventurer enters, you take the initiative.\n{T}: Add {G}{G}. If you've completed a dungeon, add six {G} instead.
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ Name:Garland, Royal Kidnapper
|
|||||||
ManaCost:2 U B
|
ManaCost:2 U B
|
||||||
Types:Legendary Creature Human Knight
|
Types:Legendary Creature Human Knight
|
||||||
PT:3/4
|
PT:3/4
|
||||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigMonarch | TriggerDescription$ When NICKNAME enters, you become the monarch.
|
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigMonarch | TriggerDescription$ When NICKNAME enters, target opponent becomes the monarch.
|
||||||
SVar:TrigMonarch:DB$ BecomeMonarch | Defined$ You
|
SVar:TrigMonarch:DB$ BecomeMonarch | ValidTgts$ Opponent
|
||||||
T:Mode$ BecomeMonarch | ValidPlayer$ Opponent | TriggerZones$ Battlefield | Execute$ TrigEffect | TriggerDescription$ Whenever an opponent becomes the monarch, gain control of target creature that player controls for as long as they're the monarch.
|
T:Mode$ BecomeMonarch | ValidPlayer$ Opponent | TriggerZones$ Battlefield | Execute$ TrigEffect | TriggerDescription$ Whenever an opponent becomes the monarch, gain control of target creature that player controls for as long as they're the monarch.
|
||||||
SVar:TrigEffect:DB$ Effect | ImprintCards$ Targeted | ValidTgts$ Creature.ControlledBy TriggeredPlayer | TgtPrompt$ Choose target creature that player controls | RememberObjects$ TriggeredPlayer | Triggers$ ExileMe | StaticAbilities$ GainControl | Duration$ Permanent
|
SVar:TrigEffect:DB$ Effect | ImprintCards$ Targeted | ValidTgts$ Creature.ControlledBy TriggeredPlayer | TgtPrompt$ Choose target creature that player controls | RememberObjects$ TriggeredPlayer | Triggers$ ExileMe | StaticAbilities$ GainControl | Duration$ Permanent
|
||||||
SVar:GainControl:Mode$ Continuous | Affected$ Card.IsImprinted | CheckSVar$ X | SVarCompare$ EQ1 | GainControl$ You | Description$ You gain control of that creature for as long as that player is the monarch.
|
SVar:GainControl:Mode$ Continuous | Affected$ Card.IsImprinted | CheckSVar$ X | SVarCompare$ EQ1 | GainControl$ You | Description$ You gain control of that creature for as long as that player is the monarch.
|
||||||
@@ -12,4 +12,4 @@ SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$
|
|||||||
SVar:X:PlayerCountRememberedPlayer$HasPropertyisMonarch
|
SVar:X:PlayerCountRememberedPlayer$HasPropertyisMonarch
|
||||||
S:Mode$ Continuous | Affected$ Creature.YouCtrl+YouDontOwn| AddPower$ 2 | AddToughness$ 2 | Description$ Creatures you control but don't own get +2/+2 and can't be sacrificed.
|
S:Mode$ Continuous | Affected$ Creature.YouCtrl+YouDontOwn| AddPower$ 2 | AddToughness$ 2 | Description$ Creatures you control but don't own get +2/+2 and can't be sacrificed.
|
||||||
S:Mode$ CantSacrifice | ValidCard$ Creature.YouCtrl+YouDontOwn | Secondary$ True | SpellDescription$ Creatures you control but don't own get +2/+2 and can't be sacrificed.
|
S:Mode$ CantSacrifice | ValidCard$ Creature.YouCtrl+YouDontOwn | Secondary$ True | SpellDescription$ Creatures you control but don't own get +2/+2 and can't be sacrificed.
|
||||||
Oracle:When Garland enters, you become the monarch.\nWhenever an opponent becomes the monarch, gain control of target creature that player controls for as long as they're the monarch.\nCreatures you control but don't own get +2/+2 and can't be sacrificed.
|
Oracle:When Garland enters, target opponent becomes the monarch.\nWhenever an opponent becomes the monarch, gain control of target creature that player controls for as long as they're the monarch.\nCreatures you control but don't own get +2/+2 and can't be sacrificed.
|
||||||
|
|||||||
@@ -8,5 +8,5 @@ T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Opponent | TriggerZones$ Battlefiel
|
|||||||
SVar:TrigBranch:DB$ Branch | BranchConditionSVar$ X | TrueSubAbility$ DBUntapAll | FalseSubAbility$ DBUntap
|
SVar:TrigBranch:DB$ Branch | BranchConditionSVar$ X | TrueSubAbility$ DBUntapAll | FalseSubAbility$ DBUntap
|
||||||
SVar:DBUntapAll:DB$ UntapAll | ValidCards$ Creature.YouCtrl
|
SVar:DBUntapAll:DB$ UntapAll | ValidCards$ Creature.YouCtrl
|
||||||
SVar:DBUntap:DB$ Untap | UntapExactly$ True | UntapType$ Creature.YouCtrl+tapped | Amount$ 1
|
SVar:DBUntap:DB$ Untap | UntapExactly$ True | UntapType$ Creature.YouCtrl+tapped | Amount$ 1
|
||||||
SVar:X:PlayerCountPropertyYou$DungeonsCompleted
|
SVar:X:DungeonsCompleted$Amount
|
||||||
Oracle:When White Plume Adventurer enters battlefield, you take the initiative.\nAt the beginning of each opponent's upkeep, untap a creature you control. If you've completed a dungeon, untap all creatures you control instead.
|
Oracle:When White Plume Adventurer enters battlefield, you take the initiative.\nAt the beginning of each opponent's upkeep, untap a creature you control. If you've completed a dungeon, untap all creatures you control instead.
|
||||||
|
|||||||
@@ -99,7 +99,10 @@ public final class BoosterUtils {
|
|||||||
|
|
||||||
if (userPrefs != null && userPrefs.getPoolType() == StartingPoolPreferences.PoolType.BOOSTERS) {
|
if (userPrefs != null && userPrefs.getPoolType() == StartingPoolPreferences.PoolType.BOOSTERS) {
|
||||||
|
|
||||||
for (InventoryItem inventoryItem : generateRandomBoosterPacks(userPrefs.getNumberOfBoosters(), formatStartingPool.editionLegalPredicate)) {
|
Predicate<CardEdition> editionLegalPredicate = formatStartingPool == null
|
||||||
|
? cardEdition -> true
|
||||||
|
: formatStartingPool.editionLegalPredicate;
|
||||||
|
for (InventoryItem inventoryItem : generateRandomBoosterPacks(userPrefs.getNumberOfBoosters(), editionLegalPredicate)) {
|
||||||
cards.addAll(((BoosterPack) inventoryItem).getCards());
|
cards.addAll(((BoosterPack) inventoryItem).getCards());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -62,7 +62,6 @@ import forge.util.storage.IStorage;
|
|||||||
public class QuestEventDraft implements IQuestEvent {
|
public class QuestEventDraft implements IQuestEvent {
|
||||||
|
|
||||||
public static class QuestDraftPrizes {
|
public static class QuestDraftPrizes {
|
||||||
|
|
||||||
public int credits;
|
public int credits;
|
||||||
public List<BoosterPack> boosterPacks;
|
public List<BoosterPack> boosterPacks;
|
||||||
public List<PaperCard> individualCards;
|
public List<PaperCard> individualCards;
|
||||||
@@ -85,7 +84,6 @@ public class QuestEventDraft implements IQuestEvent {
|
|||||||
public void addSelectedCard(final PaperCard card) {
|
public void addSelectedCard(final PaperCard card) {
|
||||||
FModel.getQuest().getCards().addSingleCard(card, 1);
|
FModel.getQuest().getCards().addSingleCard(card, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final String UNDETERMINED = "quest_draft_undetermined_place";
|
public static final String UNDETERMINED = "quest_draft_undetermined_place";
|
||||||
@@ -233,7 +231,6 @@ public class QuestEventDraft implements IQuestEvent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setWinner(final String playerName) {
|
public void setWinner(final String playerName) {
|
||||||
|
|
||||||
if (QuestDraftUtils.TOURNAMENT_TOGGLE) {
|
if (QuestDraftUtils.TOURNAMENT_TOGGLE) {
|
||||||
TournamentPairing pairing = bracket.getNextPairing();
|
TournamentPairing pairing = bracket.getNextPairing();
|
||||||
for(TournamentPlayer player : pairing.getPairedPlayers()) {
|
for(TournamentPlayer player : pairing.getPairedPlayers()) {
|
||||||
@@ -290,7 +287,6 @@ public class QuestEventDraft implements IQuestEvent {
|
|||||||
* Generates the prizes for the player and saves them to the current quest.
|
* Generates the prizes for the player and saves them to the current quest.
|
||||||
*/
|
*/
|
||||||
public QuestDraftPrizes collectPrizes() {
|
public QuestDraftPrizes collectPrizes() {
|
||||||
|
|
||||||
final int place = getPlayerPlacement();
|
final int place = getPlayerPlacement();
|
||||||
int prizePool = entryFee * 9;
|
int prizePool = entryFee * 9;
|
||||||
|
|
||||||
@@ -345,11 +341,9 @@ public class QuestEventDraft implements IQuestEvent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private QuestDraftPrizes generateFirstPlacePrizes(final int prizePool) {
|
private QuestDraftPrizes generateFirstPlacePrizes(final int prizePool) {
|
||||||
|
|
||||||
int credits = 2 * (prizePool / 3); //First place gets 2/3 the total prize pool
|
int credits = 2 * (prizePool / 3); //First place gets 2/3 the total prize pool
|
||||||
final List<PaperCard> cards = new ArrayList<>();
|
final List<PaperCard> cards = new ArrayList<>();
|
||||||
final List<BoosterPack> boosters = new ArrayList<>();
|
final List<BoosterPack> boosters = new ArrayList<>();
|
||||||
@@ -366,11 +360,9 @@ public class QuestEventDraft implements IQuestEvent {
|
|||||||
awardSelectedRare(prizes);
|
awardSelectedRare(prizes);
|
||||||
|
|
||||||
return prizes;
|
return prizes;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private QuestDraftPrizes generateSecondPlacePrizes(final int prizePool) {
|
private QuestDraftPrizes generateSecondPlacePrizes(final int prizePool) {
|
||||||
|
|
||||||
int credits = prizePool / 3; //Second place gets 1/3 the total prize pool
|
int credits = prizePool / 3; //Second place gets 1/3 the total prize pool
|
||||||
final List<PaperCard> cards = new ArrayList<>();
|
final List<PaperCard> cards = new ArrayList<>();
|
||||||
final List<BoosterPack> boosters = new ArrayList<>();
|
final List<BoosterPack> boosters = new ArrayList<>();
|
||||||
@@ -388,11 +380,9 @@ public class QuestEventDraft implements IQuestEvent {
|
|||||||
awardSelectedRare(prizes);
|
awardSelectedRare(prizes);
|
||||||
|
|
||||||
return prizes;
|
return prizes;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private QuestDraftPrizes generateThirdPlacePrizes() {
|
private QuestDraftPrizes generateThirdPlacePrizes() {
|
||||||
|
|
||||||
final int credits = 0;
|
final int credits = 0;
|
||||||
final List<PaperCard> cards = new ArrayList<>();
|
final List<PaperCard> cards = new ArrayList<>();
|
||||||
|
|
||||||
@@ -407,11 +397,9 @@ public class QuestEventDraft implements IQuestEvent {
|
|||||||
prizes.individualCards = cards;
|
prizes.individualCards = cards;
|
||||||
|
|
||||||
return prizes;
|
return prizes;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private QuestDraftPrizes generateFourthPlacePrizes() {
|
private QuestDraftPrizes generateFourthPlacePrizes() {
|
||||||
|
|
||||||
final int credits = 0;
|
final int credits = 0;
|
||||||
final List<PaperCard> cards = new ArrayList<>();
|
final List<PaperCard> cards = new ArrayList<>();
|
||||||
|
|
||||||
@@ -440,7 +428,6 @@ public class QuestEventDraft implements IQuestEvent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void awardSelectedRare(final QuestDraftPrizes prizes) {
|
private void awardSelectedRare(final QuestDraftPrizes prizes) {
|
||||||
|
|
||||||
final List<PaperCard> possibleCards = new ArrayList<>();
|
final List<PaperCard> possibleCards = new ArrayList<>();
|
||||||
final List<String> cardNames = new ArrayList<>();
|
final List<String> cardNames = new ArrayList<>();
|
||||||
|
|
||||||
@@ -466,7 +453,6 @@ public class QuestEventDraft implements IQuestEvent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private PaperCard getPromoCard() {
|
private PaperCard getPromoCard() {
|
||||||
|
|
||||||
final CardEdition randomEdition = getRandomEdition();
|
final CardEdition randomEdition = getRandomEdition();
|
||||||
final List<EditionEntry> cardsInEdition = new ArrayList<>();
|
final List<EditionEntry> cardsInEdition = new ArrayList<>();
|
||||||
final List<String> cardNames = new ArrayList<>();
|
final List<String> cardNames = new ArrayList<>();
|
||||||
@@ -480,6 +466,11 @@ public class QuestEventDraft implements IQuestEvent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// For sets such as MB1 that only have cards from PLST.
|
||||||
|
if (cardsInEdition.isEmpty()) {
|
||||||
|
return FModel.getQuest().getCards().addRandomRare();
|
||||||
|
}
|
||||||
|
|
||||||
EditionEntry randomCard;
|
EditionEntry randomCard;
|
||||||
PaperCard promo = null;
|
PaperCard promo = null;
|
||||||
|
|
||||||
@@ -495,7 +486,6 @@ public class QuestEventDraft implements IQuestEvent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return promo;
|
return promo;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private CardEdition getRandomEdition() {
|
private CardEdition getRandomEdition() {
|
||||||
@@ -506,7 +496,6 @@ public class QuestEventDraft implements IQuestEvent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return editions.get((int) (MyRandom.getRandom().nextDouble() * editions.size()));
|
return editions.get((int) (MyRandom.getRandom().nextDouble() * editions.size()));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Set<CardEdition> getAllEditions() {
|
private Set<CardEdition> getAllEditions() {
|
||||||
@@ -517,7 +506,6 @@ public class QuestEventDraft implements IQuestEvent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return editions;
|
return editions;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int getBoosterPrice(final BoosterPack booster) {
|
private static int getBoosterPrice(final BoosterPack booster) {
|
||||||
@@ -528,11 +516,9 @@ public class QuestEventDraft implements IQuestEvent {
|
|||||||
value = MAP_PRICES.getOrDefault(boosterName, 395);
|
value = MAP_PRICES.getOrDefault(boosterName, 395);
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean playerHasMatchesLeft() {
|
public boolean playerHasMatchesLeft() {
|
||||||
|
|
||||||
if (QuestDraftUtils.TOURNAMENT_TOGGLE) {
|
if (QuestDraftUtils.TOURNAMENT_TOGGLE) {
|
||||||
return !bracket.isTournamentOver() && bracket.isPlayerRemaining(-1);
|
return !bracket.isTournamentOver() && bracket.isPlayerRemaining(-1);
|
||||||
}
|
}
|
||||||
@@ -585,7 +571,6 @@ public class QuestEventDraft implements IQuestEvent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return nextMatchIndex != -1 && standings[nextMatchIndex].equals(UNDETERMINED);
|
return nextMatchIndex != -1 && standings[nextMatchIndex].equals(UNDETERMINED);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getPlayerPlacement() {
|
public int getPlayerPlacement() {
|
||||||
@@ -622,11 +607,9 @@ public class QuestEventDraft implements IQuestEvent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getPlacementString() {
|
public String getPlacementString() {
|
||||||
|
|
||||||
final int place = getPlayerPlacement();
|
final int place = getPlayerPlacement();
|
||||||
|
|
||||||
String output;
|
String output;
|
||||||
@@ -650,7 +633,6 @@ public class QuestEventDraft implements IQuestEvent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return output;
|
return output;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean canEnter() {
|
public boolean canEnter() {
|
||||||
@@ -683,7 +665,6 @@ public class QuestEventDraft implements IQuestEvent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static class QuestDraftFormat implements Comparable<QuestDraftFormat> {
|
public static class QuestDraftFormat implements Comparable<QuestDraftFormat> {
|
||||||
|
|
||||||
private CardEdition edition;
|
private CardEdition edition;
|
||||||
private CardBlock block;
|
private CardBlock block;
|
||||||
|
|
||||||
@@ -746,11 +727,9 @@ public class QuestEventDraft implements IQuestEvent {
|
|||||||
public int compareTo(final QuestDraftFormat other) {
|
public int compareTo(final QuestDraftFormat other) {
|
||||||
return toString().compareToIgnoreCase(other.toString());
|
return toString().compareToIgnoreCase(other.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<CardEdition> getAllowedSets(final QuestController quest) {
|
private static List<CardEdition> getAllowedSets(final QuestController quest) {
|
||||||
|
|
||||||
final List<CardEdition> allowedQuestSets = new ArrayList<>();
|
final List<CardEdition> allowedQuestSets = new ArrayList<>();
|
||||||
|
|
||||||
if (quest.getFormat() != null) {
|
if (quest.getFormat() != null) {
|
||||||
@@ -771,11 +750,9 @@ public class QuestEventDraft implements IQuestEvent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return allowedQuestSets;
|
return allowedQuestSets;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<CardBlock> getBlocks() {
|
private static List<CardBlock> getBlocks() {
|
||||||
|
|
||||||
final List<CardBlock> blocks = new ArrayList<>();
|
final List<CardBlock> blocks = new ArrayList<>();
|
||||||
final IStorage<CardBlock> storage = FModel.getBlocks();
|
final IStorage<CardBlock> storage = FModel.getBlocks();
|
||||||
|
|
||||||
@@ -786,11 +763,9 @@ public class QuestEventDraft implements IQuestEvent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return blocks;
|
return blocks;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<QuestDraftFormat> getAvailableFormats(final QuestController quest) {
|
public static List<QuestDraftFormat> getAvailableFormats(final QuestController quest) {
|
||||||
|
|
||||||
final List<CardEdition> allowedQuestSets = getAllowedSets(quest);
|
final List<CardEdition> allowedQuestSets = getAllowedSets(quest);
|
||||||
final List<QuestDraftFormat> possibleFormats = new ArrayList<>();
|
final List<QuestDraftFormat> possibleFormats = new ArrayList<>();
|
||||||
final List<CardBlock> blocks = getBlocks();
|
final List<CardBlock> blocks = getBlocks();
|
||||||
@@ -812,7 +787,6 @@ public class QuestEventDraft implements IQuestEvent {
|
|||||||
if (blockAllowed) {
|
if (blockAllowed) {
|
||||||
possibleFormats.add(new QuestDraftFormat(block));
|
possibleFormats.add(new QuestDraftFormat(block));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (CardEdition allowedQuestSet : allowedQuestSets) {
|
for (CardEdition allowedQuestSet : allowedQuestSets) {
|
||||||
@@ -840,7 +814,6 @@ public class QuestEventDraft implements IQuestEvent {
|
|||||||
|
|
||||||
Collections.sort(possibleFormats);
|
Collections.sort(possibleFormats);
|
||||||
return possibleFormats;
|
return possibleFormats;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -849,7 +822,6 @@ public class QuestEventDraft implements IQuestEvent {
|
|||||||
* @return The created draft or null in the event no draft could be created.
|
* @return The created draft or null in the event no draft could be created.
|
||||||
*/
|
*/
|
||||||
public static QuestEventDraft getRandomDraftOrNull(final QuestController quest) {
|
public static QuestEventDraft getRandomDraftOrNull(final QuestController quest) {
|
||||||
|
|
||||||
final List<QuestDraftFormat> possibleFormats = getAvailableFormats(quest);
|
final List<QuestDraftFormat> possibleFormats = getAvailableFormats(quest);
|
||||||
|
|
||||||
if (possibleFormats.isEmpty()) {
|
if (possibleFormats.isEmpty()) {
|
||||||
@@ -858,7 +830,6 @@ public class QuestEventDraft implements IQuestEvent {
|
|||||||
|
|
||||||
Collections.shuffle(possibleFormats);
|
Collections.shuffle(possibleFormats);
|
||||||
return getDraftOrNull(quest, possibleFormats.get(0));
|
return getDraftOrNull(quest, possibleFormats.get(0));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -866,7 +837,6 @@ public class QuestEventDraft implements IQuestEvent {
|
|||||||
* @return The created draft or null in the event no draft could be created.
|
* @return The created draft or null in the event no draft could be created.
|
||||||
*/
|
*/
|
||||||
public static QuestEventDraft getDraftOrNull(final QuestController quest, final QuestDraftFormat format) {
|
public static QuestEventDraft getDraftOrNull(final QuestController quest, final QuestDraftFormat format) {
|
||||||
|
|
||||||
final QuestEventDraft event = new QuestEventDraft(format.getName());
|
final QuestEventDraft event = new QuestEventDraft(format.getName());
|
||||||
|
|
||||||
if (format.isSet()) {
|
if (format.isSet()) {
|
||||||
@@ -936,13 +906,11 @@ public class QuestEventDraft implements IQuestEvent {
|
|||||||
event.aiIcons[i] = icon;
|
event.aiIcons[i] = icon;
|
||||||
usedNames.add(event.aiNames[i]);
|
usedNames.add(event.aiNames[i]);
|
||||||
usedIcons.add(icon);
|
usedIcons.add(icon);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
event.bracket = createBracketFromStandings(event.standings, event.aiNames, event.aiIcons);
|
event.bracket = createBracketFromStandings(event.standings, event.aiNames, event.aiIcons);
|
||||||
|
|
||||||
return event;
|
return event;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int calculateEntryFee(final String[] boosters) {
|
private static int calculateEntryFee(final String[] boosters) {
|
||||||
@@ -960,7 +928,6 @@ public class QuestEventDraft implements IQuestEvent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (int) (entryFee * 1.5);
|
return (int) (entryFee * 1.5);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Set<String> getSetCombos(final QuestController quest, final CardBlock block) {
|
private static Set<String> getSetCombos(final QuestController quest, final CardBlock block) {
|
||||||
@@ -1041,7 +1008,6 @@ public class QuestEventDraft implements IQuestEvent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return possibleCombinations;
|
return possibleCombinations;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static TournamentBracket createBracketFromStandings(String[] standings, String[] aiNames, int[] aiIcons) {
|
public static TournamentBracket createBracketFromStandings(String[] standings, String[] aiNames, int[] aiIcons) {
|
||||||
|
|||||||
Reference in New Issue
Block a user