Compare commits

..

1 Commits

Author SHA1 Message Date
Hans Mackowiak
3d425fea05 Show Mayhem in flashback zone 2025-10-05 14:07:37 +02:00
74 changed files with 329 additions and 291 deletions

View File

@@ -4,7 +4,6 @@ about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
type: 'Bug'
---
@@ -32,6 +31,7 @@ If applicable, add screenshots to help explain your problem.
**Smartphone (please complete the following information):**
- Device: [e.g. iPhone6]
- OS: [e.g. iOS8.1]
- Browser [e.g. stock browser, safari]
- Version [e.g. 22]
**Additional context**

View File

@@ -4,7 +4,6 @@ about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
type: 'Feature'
---

View File

@@ -12,13 +12,15 @@ import forge.game.spellability.SpellAbility;
public class FlipACoinAi extends SpellAbilityAi {
/* (non-Javadoc)
* @see forge.card.abilityfactory.SpellAiLogic#checkApiLogic(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility)
* @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility)
*/
@Override
protected AiAbilityDecision checkApiLogic(Player ai, SpellAbility sa) {
protected AiAbilityDecision canPlay(Player ai, SpellAbility sa) {
if (sa.hasParam("AILogic")) {
String ailogic = sa.getParam("AILogic");
if (ailogic.equals("PhaseOut")) {
if (ailogic.equals("Never")) {
return new AiAbilityDecision(0, AiPlayDecision.CantPlayAi);
} else if (ailogic.equals("PhaseOut")) {
if (!ComputerUtil.predictThreatenedObjects(sa.getActivatingPlayer(), sa).contains(sa.getHostCard())) {
return new AiAbilityDecision(0, AiPlayDecision.CantPlayAi);
}

View File

@@ -522,8 +522,6 @@ public class AbilityUtils {
}
} else if (calcX[0].equals("OriginalHost")) {
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")) {
val = handlePaid(card.getExiledCards(), calcX[1], card, ability);
} else if (calcX[0].startsWith("Convoked")) {
@@ -1717,10 +1715,6 @@ public class AbilityUtils {
return doXMath(calculateAmount(c, sq[sa.isBargained() ? 1 : 2], ctb), expr, c, ctb);
}
if (sq[0].startsWith("Cleave")) {
return doXMath(calculateAmount(c, sq[sa.isCleave() ? 1 : 2], ctb), expr, c, ctb);
}
if (sq[0].startsWith("Freerunning")) {
return doXMath(calculateAmount(c, sq[sa.isFreerunning() ? 1 : 2], ctb), expr, c, ctb);
}
@@ -2547,13 +2541,34 @@ public class AbilityUtils {
return doXMath(CardLists.getValidCardCount(game.getLeftGraveyardThisTurn(), validFilter, player, c, ctb), expr, c, ctb);
}
if (sq[0].equals("UnlockedDoors")) {
return doXMath(player.getUnlockedDoors().size(), expr, c, ctb);
// Count$UnlockedDoors <Valid>
if (sq[0].startsWith("UnlockedDoors")) {
final String[] workingCopy = l[0].split(" ", 2);
final String validFilter = workingCopy[1];
int unlocked = 0;
for (Card doorCard : CardLists.getValidCards(player.getCardsIn(ZoneType.Battlefield), validFilter, player, c, ctb)) {
unlocked += doorCard.getUnlockedRooms().size();
}
return doXMath(unlocked, expr, c, ctb);
}
// Count$DistinctUnlockedDoors <Valid>
// Counts the distinct names of unlocked doors. Used for the "Promising Stairs"
if (sq[0].equals("DistinctUnlockedDoors")) {
return doXMath(Sets.newHashSet(player.getUnlockedDoors()).size(), expr, c, ctb);
if (sq[0].startsWith("DistinctUnlockedDoors")) {
final String[] workingCopy = l[0].split(" ", 2);
final String validFilter = workingCopy[1];
Set<String> viewedNames = new HashSet<>();
for (Card doorCard : CardLists.getValidCards(player.getCardsIn(ZoneType.Battlefield), validFilter, player, c, ctb)) {
for(CardStateName stateName : doorCard.getUnlockedRooms()) {
viewedNames.add(doorCard.getState(stateName).getName());
}
}
int distinctUnlocked = viewedNames.size();
return doXMath(distinctUnlocked, expr, c, ctb);
}
// Manapool
@@ -3406,7 +3421,6 @@ public class AbilityUtils {
}
public static int playerXProperty(final Player player, final String s, final Card source, CardTraitBase ctb) {
final String[] l = s.split("/");
final String m = CardFactoryUtil.extractOperators(s);
@@ -3593,10 +3607,46 @@ public class AbilityUtils {
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")) {
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")) {
return doXMath(player.getAttractionsVisitedThisTurn(), m, source, ctb);
}
@@ -3683,8 +3733,8 @@ public class AbilityUtils {
return CardUtil.getColorsFromCards(paidList).countColors();
}
if (string.startsWith("DifferentCardNames")) {
return doXMath(CardLists.getDifferentNamesCount(paidList), CardFactoryUtil.extractOperators(string), source, ctb);
if (string.equals("DifferentCardNames")) {
return CardLists.getDifferentNamesCount(paidList);
}
if (string.equals("DifferentColorPair")) {

View File

@@ -3324,24 +3324,6 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars, ITr
// Pseudo keywords, only print Reminder
sbBefore.append(inst.getReminderText());
sbBefore.append("\r\n");
} else if (keyword.startsWith("Cleave")) {
final String[] k = keyword.split(":");
final Cost mCost;
if (k.length < 2 || "ManaCost".equals(k[1])) {
mCost = new Cost(getManaCost(), false);
} else {
mCost = new Cost(k[1], false);
}
StringBuilder sbCost = new StringBuilder(k[0]);
if (!mCost.isOnlyManaCost()) {
sbCost.append("");
} else {
sbCost.append(" ");
}
sbCost.append(mCost.toSimpleString());
sbBefore.append(sbCost).append(" (").append(inst.getReminderText()).append(")");
sbBefore.append("\r\n");
} else if (keyword.startsWith("Entwine") || keyword.startsWith("Madness")
|| keyword.startsWith("Miracle") || keyword.startsWith("Recover")
|| keyword.startsWith("Escape") || keyword.startsWith("Foretell:")

View File

@@ -2852,23 +2852,6 @@ public class CardFactoryUtil {
final SpellAbility sa = AbilityFactory.getAbility(sbClass.toString(), card);
sa.setIntrinsic(intrinsic);
inst.addSpellAbility(sa);
} else if (keyword.startsWith("Cleave")) {
final String[] k = keyword.split(":");
final Cost cost = new Cost(k[1], false);
final SpellAbility newSA = card.getFirstSpellAbility().copyWithDefinedCost(cost);
final StringBuilder desc = new StringBuilder();
desc.append("Cleave ").append(cost.toSimpleString()).append(" (");
desc.append(inst.getReminderText());
desc.append(")");
newSA.setDescription(desc.toString());
newSA.putParam("Secondary", "True");
newSA.setAlternativeCost(AlternativeCost.Cleave);
newSA.setIntrinsic(intrinsic);
inst.addSpellAbility(newSA);
} else if (keyword.startsWith("Dash")) {
final String[] k = keyword.split(":");
final Cost dashCost = new Cost(k[1], false);

View File

@@ -36,7 +36,6 @@ public enum Keyword {
CHANGELING("Changeling", SimpleKeyword.class, true, "This card is every creature type."),
CHOOSE_A_BACKGROUND("Choose a Background", Partner.class, true, "You can have a Background as a second commander."),
CIPHER("Cipher", SimpleKeyword.class, true, "Then you may exile this spell card encoded on a creature you control. Whenever that creature deals combat damage to a player, its controller may cast a copy of the encoded card without paying its mana cost."),
CLEAVE("Cleave", KeywordWithCost.class, false, "You may cast this spell for its cleave cost. If you do, remove the words in square brackets."),
COMPANION("Companion", Companion.class, true, "Reveal your companion from outside the game if your deck meets the companion restriction."),
COMPLEATED("Compleated", SimpleKeyword.class, true, "This planeswalker enters with two fewer loyalty counters for each Phyrexian mana symbol life was paid for."),
CONSPIRE("Conspire", SimpleKeyword.class, false, "As an additional cost to cast this spell, you may tap two untapped creatures you control that each share a color with it. If you do, copy it."),

View File

@@ -4,7 +4,6 @@ public enum AlternativeCost {
Awaken,
Bestow,
Blitz,
Cleave,
Dash,
Disturb,
Emerge,

View File

@@ -646,10 +646,6 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
return isAlternativeCost(AlternativeCost.Blitz);
}
public final boolean isCleave() {
return isAlternativeCost(AlternativeCost.Cleave);
}
public final boolean isDash() {
return isAlternativeCost(AlternativeCost.Dash);
}

View File

@@ -56,7 +56,7 @@ public class PlayerZone extends Zone {
boolean graveyardCastable = c.hasKeyword(Keyword.FLASHBACK) ||
c.hasKeyword(Keyword.RETRACE) || c.hasKeyword(Keyword.JUMP_START) || c.hasKeyword(Keyword.ESCAPE) ||
c.hasKeyword(Keyword.DISTURB);
c.hasKeyword(Keyword.DISTURB) || c.hasKeyword(Keyword.MAYHEM);
boolean exileCastable = c.isForetold() || c.isOnAdventure();
for (final SpellAbility sa : c.getSpellAbilities()) {
final ZoneType restrictZone = sa.getRestrictions().getZone();

View File

@@ -113,10 +113,9 @@ public class AdventureEventController implements Serializable {
return null;
}
// If the chosen event seed recommends a four-person pod, run it as a RoundRobin
// Set can be null when it is only a meta set such as some Jumpstart events.
CardEdition firstSet = e.cardBlock.getSets().isEmpty() ? null : e.cardBlock.getSets().get(0);
int podSize = firstSet == null ? 8 : firstSet.getDraftOptions().getRecommendedPodSize();
// If chosen event seed recommends a 4 person pod, run it as a RoundRobin
CardEdition firstSet = e.cardBlock.getSets().get(0);
int podSize = firstSet.getDraftOptions().getRecommendedPodSize();
e.sourceID = pointID;
e.eventOrigin = eventOrigin;

View File

@@ -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.getTop() + VStack.CARD_HEIGHT * FCardPanel.TARGET_ORIGIN_FACTOR_Y + VStack.PADDING + VStack.BORDER_THICKNESS);
PlayerView activator = activeStackInstance == null ? null : activeStackInstance.getActivatingPlayer();
PlayerView activator = activeStackInstance.getActivatingPlayer();
arrowOrigin = arrowOrigin.add(screenPos.x, screenPos.y);
StackItemView instance = activeStackInstance;
while (instance != null) {
for (CardView c : instance.getTargetCards()) {
TargetingOverlay.ArcConnection conn = activator != null && activator.isOpponentOf(c.getController()) ? TargetingOverlay.ArcConnection.FoesStackTargeting : TargetingOverlay.ArcConnection.FriendsStackTargeting;
TargetingOverlay.ArcConnection conn = activator.isOpponentOf(c.getController()) ? TargetingOverlay.ArcConnection.FoesStackTargeting : TargetingOverlay.ArcConnection.FriendsStackTargeting;
TargetingOverlay.drawArrow(g, arrowOrigin, VCardDisplayArea.CardAreaPanel.get(c).getTargetingArrowOrigin(), conn);
}
for (PlayerView p : instance.getTargetPlayers()) {
TargetingOverlay.ArcConnection conn = activator != null && activator.isOpponentOf(p) ? TargetingOverlay.ArcConnection.FoesStackTargeting : TargetingOverlay.ArcConnection.FriendsStackTargeting;
TargetingOverlay.ArcConnection conn = activator.isOpponentOf(p) ? TargetingOverlay.ArcConnection.FoesStackTargeting : TargetingOverlay.ArcConnection.FriendsStackTargeting;
TargetingOverlay.drawArrow(g, arrowOrigin, MatchScreen.getPlayerPanel(p).getAvatar().getTargetingArrowOrigin(), conn);
}
instance = instance.getSubInstance();

View File

@@ -1391,7 +1391,7 @@
}]
},{
"name":"Azorius",
"description":"Azorius Shop, LLC",
"description":"Azorious Shop, LLC",
"spriteAtlas":"maps/tileset/buildings.atlas",
"sprite":"AzoriusShop",
"rewards": [

View File

@@ -6347,7 +6347,7 @@
"POIReference": ""
}
],
"name": "I'll take care of it. If you'd note the location of the factory on my map... (Accept Quest) (WARNING HARD QUEST)",
"name": "I'll take care of it, note the location of the factory on my map.(Accept Quest) (WARNING HARD QUEST)",
"text": "Once you have vanquished the mechanical threat and quelled the chaos within the factory, return to me, Maven the Alchemist, and you shall be rewarded handsomely for your bravery and service to our community. Be warned, however, for the path ahead will test your mettle, cunning, and combat prowess. May fortune favor you on this perilous undertaking!"
},
{

View File

@@ -1439,7 +1439,7 @@
}]
},{
"name":"Azorius",
"description":"Azorius Shop, LLC",
"description":"Azorious Shop, LLC",
"spriteAtlas":"maps/tileset/buildings.atlas",
"sprite":"AzoriusShop",
"rewards": [

View File

@@ -335,7 +335,7 @@ Fourmill Run
Port Rachkham
Cloudy Shallows
Slumnis
Silver Point
Silver Pointe
Abjuration Point
Crow's Nest
The Rookery

View File

@@ -13,7 +13,7 @@ Name=INN_Missionaries
2 Blazing Torch|ISD|1
1 Burn at the Stake|AVR|1
1 Chapel Geist|ISD|1
2 Chaplain of Alms|MID|1
2 Chaplain of ALms|MID|1
1 Chaplain's Blessing|SOI|1
1 Cloistered Youth|ISD|1
2 Crossroads Consecrator|EMN|1
@@ -32,7 +32,7 @@ Name=INN_Missionaries
1 Forsaken Sanctuary|SOI|1
1 Geist of the Lonely Vigil|EMN|1
1 Isolated Chapel|ISD|1
1 Jerren, Corrupted Bishop|MID|1
1 Jerren. Corrupted Bishop|MID|1
1 Kindly Ancestor|VOW|1
1 Mad Prophet|SOI|1
1 Make a Wish|ISD|1

View File

@@ -1,7 +1,7 @@
[metadata]
Name=INN_Peasants
[Main]
1 Alchemist's Apprentice|AVR|1
1 Alchemists's Apprentice|AVR|1
3 Ambitious Farmhand|MID|1
1 Apothecary Geist|SOI|1
3 Baithook Angler|MID|1

View File

@@ -6,7 +6,7 @@ Name=INN_peasant_easy
2 Angel's Mercy|AVR|1
3 Ambitious Farmhand|MID|1
2 Beloved Beggar|MID|1
2 Bereaved Survivor|MID|1
2 Berieved Survivor|MID|1
2 Doomed Traveler|ISD|1
2 Bar the Door|DKA|1
2 Gather the Townsfolk|DKA|1

View File

@@ -11,7 +11,7 @@ Name=INN_The_Whisperers
2 Battleground Geist|ISD|1
2 Drogskol Captain|DKA|1
2 Gallows Warden|ISD|1
2 Midnight Haunting|ISD|1
2 Midknight Haunting|ISD|1
2 Malevolent Hermit|MID|1
2 Thing in the Ice|SOI|1
2 Ambitious Farmhand|MID|1

View File

@@ -16,7 +16,7 @@ Name=Adventure - INN Low Red
1 Brimstone Vandal|MID|1
2 Festival Crasher|MID|1
2 Pyre Hound|SOI|1
1 Curse of Bloodletting|DKA|1
1 Curse of BLoodletting|DKA|1
1 Incendiary Flow|EMN|1
1 Rage Thrower|ISD|1
1 Spellrune Painter|MID|1

View File

@@ -268,7 +268,7 @@
0,4901,4902,4748,782,3146,1259,621,782,782,3146,1259,621,3146,1259,1259,1259,621,782,462,4743,4744,0,0,0,0,0,0,0,0,0,0
</data>
</layer>
<layer id="7" name="High Clutter" width="32" height="40">
<layer id="7" name="High CLutter" width="32" height="40">
<data encoding="csv">
0,0,22705,0,0,0,0,0,0,0,0,0,0,0,0,0,7082,0,0,22547,0,24596,0,0,0,0,0,0,0,0,0,0,
22550,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

View File

@@ -199,7 +199,7 @@
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
</data>
</layer>
<layer id="6" name="Walls Supplementary" width="40" height="35">
<layer id="6" name="Walls Suplementary" width="40" height="35">
<data encoding="csv">
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

View File

@@ -343,7 +343,7 @@
"questItem": true
},
{
"name": "Grolnok's Key",
"name": "Grolnoks Key",
"iconName": "StrangeKey",
"questItem": true
},

View File

@@ -41,7 +41,7 @@
},
{
"name": "\"And what if I find the right people myself?\"",
"text": "He shrugs as though that wouldn't bother him. \"Then I'll have to find someone bigger, badder, and, most importantly, faster than you to work with.\"",
"text": "He shrugs as though that wouldn't bother him. \"Then I'll have to find someone bigger, badder, and most importantly faster than you to work with.\"",
"options": [
{
"name": "\"Good luck with that.\" (Decline Quest)"
@@ -435,7 +435,7 @@
],
"objective": "Travel",
"prologue": {
"text": "Nothing like a really long walk to stretch the legs, right? You could likely save yourself some time with the right spells, but... is that going to be safe?",
"text": "Nothing like a really long walk to strech the legs, right? You could likely save yourself some time with the right spells, but... is that going to be safe?",
"options": [
{
"name": "(Begin your quest)"
@@ -592,7 +592,7 @@
]
}
],
"name": "Quickly and discreetly help yourself to a spell before continuing",
"name": "Quickly and discretely help yourself to a spell before continuing",
"text": "You receive a spell of dubious quality.",
"options": [
{
@@ -1047,7 +1047,7 @@
},
{
"name": "\"Urgency is expensive.\"",
"text": "\"So is not being the next scheduled burial.\" As you're still processing that statement, the figure continues. \"Ten mana shards. And you can keep the bones.\"",
"text": "\"So is not being the next scheduled burial.\" As you're still processesing that statement, the figure continues. \"Ten mana shards. And you can keep the bones.\"",
"options": [
{
"action": [
@@ -1284,7 +1284,7 @@
}
],
"name": "You shrug your shoulders. It's not your problem. (Decline Quest)",
"text": "The criminal glances at you and hurriedly scampers off. (-1 Reputation)",
"text": "The criminal glances at you and hurredly scampers off. (-1 Reputation)",
"options": [
{
"name": "(Continue)"
@@ -1343,7 +1343,7 @@
]
},
{
"name": "You clear your throat in an exaggerated manner.",
"name": "You clear your throat in an exagerated manner.",
"text": "The $(enemy_2) drops a small satchel as they begin to run away.",
"options": [
{
@@ -2225,7 +2225,7 @@
},
{
"name": "Curious as to why this would be on the board, your gaze lingers for a moment.",
"text": "As you look at the wordless paper, words find their way into your mind by unknown means. 'FIND.' '{COLOR=red}KILL!{ENDCOLOR}' 'REWARD.'",
"text": "As you look at the wordless paper, words find their way in to your mind by unknown other means. 'FIND.' '{COLOR=red}KILL!{ENDCOLOR}' 'REWARD.'",
"options": [
{
"action": [
@@ -2275,7 +2275,7 @@
]
},
{
"name": "You decide that the invasive thoughts, if you can call them that, are unwelcome, and you take a step back.",
"name": "You decide that the invasive thoughts, if you can call them that, are unwelcomed, and you take a step back.",
"text": "The thoughts urgently follow you for a moment. '{COLOR=red}KKKKiiiiill...{ENDCOLOR}' But as you take another step back, the words vanish from your mind.",
"options": [
{
@@ -2310,7 +2310,7 @@
"options": [
{
"name": "You continue to read.",
"text": "Secondly, another's handwriting was scrawled over what might have actually been a romantic bit with the following. \"Don't bother. I killed him yesterday\"",
"text": "Secondly, another handwriting has scrawled over what might have actually been a romantic bit with the following. \"Don't bother. I killed him yesterday\"",
"options": [
{
"name": "You shake your head and walk away. (Decline Quest)"
@@ -2727,7 +2727,7 @@
]
}
],
"name": "\"Almost. I believe there's a reward due, to level the scales.\"",
"name": "\"Almost. I believe there's a reward due to level the scales.\"",
"text": "(-1 Local Reputation) The druid frowns slightly, but hands you a bundle wrapped in small vines.",
"options": [
{
@@ -2902,7 +2902,7 @@
"options": [
{
"name": "\"Capable just so happens to be my middle name.\"",
"text": "He looks perplexed for a moment, but glances back at the wagon as though distracted by it. \"I was hoping you could handle some business for me.\"",
"text": "He looks perplexed for a moment, but glances back at the wagon as though distracted by it. \"I was hoping you could handle some business for me\"",
"options": [
{
"name": "Business? What sort of business?",
@@ -3683,7 +3683,7 @@
"POIReference": "$(poi_2)"
}
],
"text": "Despite the insistence of the needle you decide that you will not finish clearing the $(poi_2). As if it could sense this somehow, the onyx compass disappears. (-2 Local Reputation)",
"text": "Despite the insistance of the needle you decide that you will not finish clearing the $(poi_2). As if it could sense this somehow, the onyx compass disappears. (-2 Local Reputation)",
"options": [
{
"name": "(Quest Failed)"
@@ -4139,7 +4139,7 @@
},
{
"name": "\"I must decline. I respect the local inhabitants far more than faceless nobility.\" (Decline Quest)",
"text": "He gives you the smallest bow imaginable, just enough to say that one was given, without indicating respect.",
"text": "He gives you the smallest bow imaginable, just enough to say that one was given without indicating respect.",
"options": [
{
"name": "(Continue)"
@@ -4174,7 +4174,7 @@
},
{
"name": "You can't put your finger on it, but something seems off about the man. \"This isn't a good time.\" (Decline Quest)",
"text": "He gives you the smallest bow imaginable, just enough to say that one was given, without indicating respect. (-1 Local Reputation)",
"text": "He gives you the smallest bow imaginable, just enough to say that one was given without indicating respect. (-1 Local Reputation)",
"options": [
{
"name": "(Continue)"
@@ -4588,7 +4588,7 @@
"text": "Most of the ads are nondescript, weather worn, or written in an unfamiliar language. A few catch your eye, however.",
"options": [
{
"name": "You look at what seems to be an advertisement of some sort off to one side.",
"name": "You look at what seems to be an advertisment of some sort off to one side.",
"text": "It reads: \"Gimgee's self-replicating paper. When you need unlimited paper or to clear a forest from afar, it's got to be Gimgee's\".",
"options": [
{
@@ -4708,7 +4708,7 @@
},
{
"name": "You take a closer look at the carts.",
"text": "$(enemy_1)s and a few random creatures are filling most of one cart, while the other holds a few identical satchels of goods.",
"text": "$(enemy_1)s and a few random creatures are filling most of one cart., while the other holds a few identical satchels of goods.",
"options": [
{
"name": "Turn your attention to the carts' attendant.",
@@ -4862,7 +4862,7 @@
"text": "Most of the ads are nondescript, weather worn, or written in an unfamiliar language. A few catch your eye, however.",
"options": [
{
"name": "You look at what seems to be an advertisement of some sort off to one side.",
"name": "You look at what seems to be an advertisment of some sort off to one side.",
"text": "\"A focused mind receives great rewards. Focus on defeating 3 $(enemy_2)s, and be rewarded.\"",
"options": [
{
@@ -4952,7 +4952,7 @@
}
],
"name": "Warily take the items.",
"text": "No sooner than you do, the Djinn disappears in a puff of smoke. When you turn back, the $(enemy_2) you just defeated has vanished as well.",
"text": "No sooner than you do, the Djinn dissapears in a puff of smoke. When you turn back, the $(enemy_2) you just defeated has vanished as well.",
"options": [
{
"action": [
@@ -5597,7 +5597,7 @@
"text": "With little hope of catching the damsel, he turns his attention to you. \"Can I interest you in assisting me with some scientific experiments?\"",
"options": [
{
"name": "\"It really depends on what they are.\" You look at him suspiciously.",
"name": "\"It really depends on what they are.\" You look at him suspsiciously.",
"text": "\"You're not a farmhand, so it will have to be.\" He thinks for a moment, pulling out a well worn notebook and flipping through the pages.",
"options": [
{
@@ -5749,7 +5749,7 @@
"text": "Most of the ads are nondescript, weather worn, or written in an unfamiliar language. A few catch your eye, however.",
"options": [
{
"name": "You look at what seems to be an advertisement of some sort off to one side.",
"name": "You look at what seems to be an advertisment of some sort off to one side.",
"text": "It reads: \"Gimgee's rocks. When you need a good rock, think Gimgee's\".",
"options": [
{
@@ -6065,7 +6065,7 @@
"objective": "Travel",
"prologue": {},
"epilogue": {
"text": "As you walk through the $(poi_1) gates, you can feel the excitement building, emanating, radiating from the city's arena. Most of the populace is already there or on their way. ",
"text": "As you walk through the $(poi_1) gates, you can feel the excitement building, eminating, radiating from the city's arena. Most of the populace is already there or on their way. ",
"options": [
{
"name": "(continue)",
@@ -6228,7 +6228,7 @@
]
}
],
"name": "It's nothing I couldn't handle (Complete Quest)"
"name": "It's nothing I coudn't handle (Complete Quest)"
}
]
},
@@ -6331,7 +6331,7 @@
"POIReference": ""
}
],
"name": "Sorry, I don't have the time for this. (Decline quest)",
"name": "Sorry, I don't have to the time for this. (Decline quest)",
"text": "Figured you weren't up to the challenge, come back to me when you are.",
"options": [
{
@@ -6364,7 +6364,7 @@
"POIReference": ""
}
],
"name": "I'll take care of it. If you'd note the location of the factory on my map... (Accept Quest) (WARNING HARD QUEST)",
"name": "I'll take care of it, note the location of the factory on my map.(Accept Quest) (WARNING HARD QUEST)",
"text": "Once you have vanquished the mechanical threat and quelled the chaos within the factory, return to me, Maven the Alchemist, and you shall be rewarded handsomely for your bravery and service to our community. Be warned, however, for the path ahead will test your mettle, cunning, and combat prowess. May fortune favor you on this perilous undertaking!"
},
{
@@ -6434,7 +6434,7 @@
]
}
],
"name": "It's nothing I couldn't handle (Complete Quest)"
"name": "It's nothing I coudn't handle (Complete Quest)"
}
]
},
@@ -6534,7 +6534,7 @@
"POIReference": ""
}
],
"name": "Sorry, I don't have the time for this. (Decline quest)",
"name": "Sorry, I don't have to the time for this. (Decline quest)",
"text": "Figured you weren't up to the challenge, come back to me when you are. (-1 local reputation)",
"options": [
{
@@ -6547,7 +6547,7 @@
"text": "Thank you, noble adventurer. Slimefoot is a creature of pure malevolence, a monstrous being that has taken root in the heart of the treacherous swamp. Its corrosive touch and toxic aura have brought devastation to our lands. To defeat it, you must journey through the perilous swamp, filled with treacherous terrain and deadly creatures lurking within.",
"options": [
{
"name": "I see. So you want me to travel to Slimefoot's swamp and defeat him?",
"name": "I see. So you want me to travel to Slimefoots swamp and defeat him ?",
"text": "Slimefoot is a formidable foe, adept at both offense and defense. Its body secretes a corrosive slime, and its tentacles strike with lightning speed. Prepare yourself for a challenging battle, my friend. Draw upon your combat skills, use potions and magical abilities wisely, and exploit any weaknesses you can find. Only then can you hope to overcome this vile creature.",
"options": [
{
@@ -6632,7 +6632,7 @@
]
}
],
"name": "It's nothing I couldn't handle (Complete Quest)"
"name": "It's nothing I coudn't handle (Complete Quest)"
}
]
},
@@ -6688,7 +6688,7 @@
{
"id": 2,
"name": "Travel",
"description": "Return to town and report your success in clearing Slimefoot's Lair.",
"description": "Return to town and report your success in clearing Slimefoots Lair.",
"mapFlag": "",
"mapFlagValue": 1,
"here": true,
@@ -6733,7 +6733,7 @@
"POIReference": ""
}
],
"name": "Sorry, I don't have the time for this. (Decline Quest)",
"name": "Sorry, I don't have to the time for this. (Decline Quest)",
"text": "Figured you weren't up to the challenge, come back to me when you are. ",
"options": [
{
@@ -6766,7 +6766,7 @@
"POIReference": ""
}
],
"name": "Consider it done. If you'd note the location of the old sewers on my map... (Accept Quest) (WARNING HARD QUEST)"
"name": "Consider it done, note the location of the old sewers on my map. (Accept Quest) (WARNING HARD QUEST)"
},
{
"action": [
@@ -6837,7 +6837,7 @@
]
}
],
"name": "It's nothing I couldn't handle (Complete Quest)"
"name": "It's nothing I coudn't handle (Complete Quest)"
}
]
},
@@ -6927,7 +6927,7 @@
"options": [
{
"name": "I need answers..",
"text": "The only thing that stands clearly in your mind, is an inexplicable desire to march towards a strange structure in the nearby moonlight. You cannot explain the feeling, but it as if it's expecting your arrival.",
"text": "The only thing that stands clearly in your mind, is an unexplicable desire to march towards a strange structure in the nearby moonlight. You cannot explain the feeling, but it as if it's expecting your arrival.",
"options": [
{
"name": "(Approach)"
@@ -7199,7 +7199,7 @@
},
{
"name": "\"Cut to the chase already.\"",
"text": "\"Right. He and his hole disappeared, then another appeared and beasties came out, and I ran. Simple enough?\"",
"text": "\"Right. He and his hole dissapeared, then another appeared and beasties came out, and I ran. Simple enough?\"",
"options": [
{
"action": [
@@ -7410,7 +7410,7 @@
"options": [
{
"name": "Thanks for the advice...",
"text": "As I'm so kind, have another hint: If you see one, follow a road. All roads lead to a town. You also move faster on roads and fewer enemies will appear.",
"text": "As i'm so kind, have another hint: If you see one, follow a road. All roads lead to a town. You also move faster on roads and fewer enemies will appear.",
"options": [
{
"name": "(Say nothing and set off)"
@@ -7508,7 +7508,7 @@
"text": "*Chuckles again* You'll see... Unlike on the world map, an enemy that defeats you in a dungeon will remain on the map, to torment you; you can try to duel them again, or run away and seek out another opponent. If you need to heal yourself, go back to a town.",
"options": [
{
"name": "*Remain silent*",
"name": "*Reamain silent*",
"text": "Oh! Also, some quests like this one, have multiple objectives that can be achieved simultaneously. Your other objective is to find and enter a cave on the world map. An enemy defeated in a cave or on the way there I will count as the enemy to defeat. Just for you. So feel free to do these things in any order.",
"options": [
{
@@ -7600,7 +7600,7 @@
{
"id": 31,
"isTemplate": true,
"name": "Building A Collection",
"name": "Buillding A Collection",
"offerDialog": {},
"prologue": {},
"epilogue": {},
@@ -7780,7 +7780,7 @@
"POIReference": ""
}
],
"name": "Sorry, I don't have the time for this. (Decline Quest)",
"name": "Sorry, I don't have to the time for this. (Decline Quest)",
"text": "Figured you weren't up to the challenge, come back to me when you are. ",
"options": [
{
@@ -7885,7 +7885,7 @@
]
}
],
"name": "It's nothing I couldn't handle (Complete Quest)"
"name": "It's nothing I coudn't handle (Complete Quest)"
}
]
},
@@ -7986,7 +7986,7 @@
"POIReference": ""
}
],
"name": "Sorry, I don't have the time for this. (Decline Quest)",
"name": "Sorry, I don't have to the time for this. (Decline Quest)",
"text": "Figured you weren't up to the challenge, come back to me when you are. ",
"options": [
{
@@ -8091,7 +8091,7 @@
]
}
],
"name": "It's nothing I couldn't handle (Complete Quest)"
"name": "It's nothing I coudn't handle (Complete Quest)"
}
]
},
@@ -8192,7 +8192,7 @@
"POIReference": ""
}
],
"name": "Sorry, I don't have the time for this. (Decline Quest)",
"name": "Sorry, I don't have to the time for this. (Decline Quest)",
"text": "Figured you weren't up to the challenge, come back to me when you are. ",
"options": [
{
@@ -8296,7 +8296,7 @@
]
}
],
"name": "It's nothing I couldn't handle (Complete Quest)"
"name": "It's nothing I coudn't handle (Complete Quest)"
}
]
},
@@ -8429,7 +8429,7 @@
"POIReference": "$(poi_3)"
}
],
"name": "(Quest Complete)"
"name": "(Quest complete)"
}
]
},
@@ -8617,7 +8617,7 @@
"POIReference": "$(poi_3)"
}
],
"name": "(Quest Complete)"
"name": "(Quest complete)"
}
]
},
@@ -8805,7 +8805,7 @@
"POIReference": "$(poi_3)"
}
],
"name": "(Quest Complete)"
"name": "(Quest complete)"
}
]
},
@@ -8958,7 +8958,7 @@
]
},
{
"name": "\"It's just a tree, I can handle some elves, and I support your bonsai hobby.\" (Accept Quest)",
"name": "\"It's just a tree, I can handle some elves, and I support your bansai hobby.\" (Accept Quest)",
"action": [
{
"removeItem": "",
@@ -8992,7 +8992,7 @@
"POIReference": "$(poi_3)"
}
],
"name": "(Quest Complete)"
"name": "(Quest complete)"
}
]
},
@@ -9118,7 +9118,7 @@
"plains_town_tribal",
"swamp_town_generic",
"swamp_town_identity",
"swamp_town_tribal",
"swamo_town_tribal",
"waste_town_generic",
"waste_town_identity",
"waste_town_tribal"
@@ -9180,7 +9180,7 @@
"POIReference": "$(poi_3)"
}
],
"name": "(Quest Complete)"
"name": "(Quest complete)"
}
]
},
@@ -9881,7 +9881,7 @@
"offerDialog": {},
"prologue": {},
"epilogue": {
"text": "A slight whistle alerts you to Acirxes' presence. You're not entirely sure if he has impeccable timing or if he watched you complete your most recent job, but it appears that Sir Donovan has more work for you.",
"text": "A slight whistle alerts you to Acirxes' presence. You're not entirely sure if he has impeccible timing or if he watched you complete your most recent job, but it appears that Sir Donovan has more work for you.",
"options": [
{
"name": "(Continue)",
@@ -9968,7 +9968,7 @@
"options": [
{
"name": "\"Consider it done.\"",
"text": "\"If you can handle that, it should be a short trip from there to $(poi_4) after. I've got some... 'business' to take care of there. I'll meet you at the inn on the north end of the central peninsula.\"",
"text": "\"If you can handle that, it should be a short trip from there to $(poi_4) after. I've got some... 'buisiness' to take care of there. I'll meet you at the inn on the north end of the central peninsula.\"",
"action": [
{
"setQuestFlag": {
@@ -9984,7 +9984,7 @@
"options": [
{
"name": "\"No, apparently not.\"",
"text": "\"So that's why we're sending you. Meet me in $(poi_4) after. I've got some... 'business' to take care of there and I'll add a personal reward if you bring me back the head of whoever's running the show at the library.\" He looks away before walking off. \"I owe that much to Gwen...\"",
"text": "\"So that's why we're sending you. Meet me in $(poi_4) after. I've got some... 'buisiness' to take care of there and I'll add a personal reward if you bring me back the head of whoever's running the show at the library.\" He looks away before walking off. \"I owe that much to Gwen...\"",
"options": [
{
"name": "(Continue)",
@@ -10026,7 +10026,7 @@
"options": [
{
"name": "(Continue)",
"text": "A small group of scholars carrying books around the entrance seems to confirm the building's purpose, but something odd about their mannerisms has you on edge as you approach.",
"text": "A small group of scholars carrying books around the entrance seems to confirm the building's purpose, but something odd about their manerisms has you on edge as you approach.",
"options": [
{
"name": "(Continue)"

View File

@@ -467,7 +467,7 @@
}]
},{
"name":"White4",
"description":"Only Mostly Dead",
"description":"Only mostly dead",
"spriteAtlas":"maps/tileset/buildings.atlas",
"sprite":"RotatingShop",
"overlaySprite":"Overlay6White",
@@ -500,7 +500,7 @@
}]
},{
"name":"White6",
"description":"Strict Dogma",
"description":"Strict dogma",
"spriteAtlas":"maps/tileset/buildings.atlas",
"sprite":"RotatingShop",
"overlaySprite":"Overlay6White",
@@ -1429,7 +1429,7 @@
}]
},{
"name":"Blue",
"description":"Hermetic Study",
"description":"Hermitic Study",
"spriteAtlas":"maps/tileset/buildings.atlas",
"sprite":"BlueShop",
"rewards": [
@@ -1439,7 +1439,7 @@
}]
},{
"name":"Azorius",
"description":"Azorius Shop, LLC",
"description":"Azorious Shop, LLC",
"spriteAtlas":"maps/tileset/buildings.atlas",
"sprite":"AzoriusShop",
"rewards": [
@@ -1623,7 +1623,7 @@
}]
},{
"name":"RWG",
"description":"Cabaretti Curios",
"description":"Caberetti Curios",
"spriteAtlas":"maps/tileset/buildings.atlas",
"sprite":"RWGShop",
"rewards": [
@@ -1912,7 +1912,7 @@
}]
},{
"name":"Angel",
"description":"Halos 'R' Us",
"description":"Halos R' Us",
"spriteAtlas":"maps/tileset/buildings.atlas",
"sprite":"AngelShop",
"rewards": [
@@ -2231,7 +2231,7 @@
}]
},{
"name":"Sliver4Green",
"description":"Venomous Hive",
"description":"Venemous Hive",
"spriteAtlas":"maps/tileset/buildings.atlas",
"sprite":"SliverShop",
"overlaySprite":"Overlay4Green",
@@ -4974,7 +4974,7 @@
]
},{
"name":"Shaman",
"description":"Shaman for Ya Man",
"description":"Shaman for ya man",
"spriteAtlas":"maps/tileset/buildings.atlas",
"sprite":"ShamanShop",
"rewards": [

View File

@@ -5154,7 +5154,7 @@
"Aberration",
"Animal",
"Chandra",
"Fire",
"FIre",
"IdentityRed"
]
},
@@ -5259,7 +5259,7 @@
"Human",
"Pyromancer",
"Wizard",
"Fire",
"FIre",
"IdentityRed"
]
},
@@ -5364,7 +5364,7 @@
"Pyromancer",
"Human",
"Wizard",
"Fire",
"FIre",
"IdentityRed"
]
},
@@ -5469,7 +5469,7 @@
"Wizard",
"Chandra",
"Human",
"Fire",
"FIre",
"IdentityRed"
]
},
@@ -10837,7 +10837,7 @@
],
"colors": "R",
"questTags": [
"Fire",
"FIre",
"Elemental",
"Humanoid",
"Flying",
@@ -16103,7 +16103,7 @@
},
{
"name": "Human elite",
"nameOverride": "Legionnaire",
"nameOverride": "Legionaire",
"sprite": "sprites/enemy/humanoid/human/soldier/legionite.atlas",
"deck": [
"decks/standard/human_good.json"

View File

@@ -41,7 +41,7 @@
},
{
"name": "\"And what if I find the right people myself?\"",
"text": "He shrugs as though that wouldn't bother him. \"Then I'll have to find someone bigger, badder, and, most importantly, faster than you to work with.\"",
"text": "He shrugs as though that wouldn't bother him. \"Then I'll have to find someone bigger, badder, and most importantly, faster than you to work with.\"",
"options": [
{
"name": "\"Good luck with that.\" (Decline Quest)"
@@ -591,7 +591,7 @@
]
}
],
"name": "Quickly and discreetly help yourself to a spell before continuing.",
"name": "Quickly and discretely help yourself to a spell before continuing.",
"text": "You receive a spell of dubious quality.",
"options": [
{
@@ -1268,7 +1268,7 @@
}
],
"name": "You shrug your shoulders. It's not your problem. (Decline Quest)",
"text": "The criminal glances at you and hurriedly scampers off. (-1 Reputation)",
"text": "The criminal glances at you and hurredly scampers off. (-1 Reputation)",
"options": [
{
"name": "(Continue)"
@@ -1327,7 +1327,7 @@
]
},
{
"name": "You clear your throat in an exaggerated manner.",
"name": "You clear your throat in an exagerated manner.",
"text": "The $(enemy_2) drops a small satchel as they begin to run away.",
"options": [
{
@@ -2200,7 +2200,7 @@
},
{
"name": "Curious as to why this would be on the board, your gaze lingers for a moment.",
"text": "As you look at the wordless paper, words find their way into your mind by unknown means. 'FIND.' '{COLOR=red}KILL!{ENDCOLOR}' 'REWARD.'",
"text": "As you look at the wordless paper, words find their way into your mind by unknown, other, means. 'FIND.' '{COLOR=red}KILL!{ENDCOLOR}' 'REWARD.'",
"options": [
{
"action": [
@@ -2285,7 +2285,7 @@
"options": [
{
"name": "You continue to read.",
"text": "Secondly, another's handwriting was scrawled over what might have actually been a romantic bit with the following. \"Don't bother. I killed him yesterday\"",
"text": "Secondly, another's handwriting has scrawled over what might have actually been a romantic bit, with the following. \"Don't bother. I killed him yesterday\"",
"options": [
{
"name": "You shake your head and walk away. (Decline Quest)"
@@ -2870,7 +2870,7 @@
"options": [
{
"name": "\"Capable just so happens to be my middle name.\"",
"text": "He looks perplexed for a moment, but glances back at the wagon as though distracted by it. \"I was hoping you could handle some business for me.\"",
"text": "He looks perplexed for a moment, but glances back at the wagon as though distracted by it. \"I was hoping you could handle some business for me\"",
"options": [
{
"name": "Business? What sort of business?",
@@ -3646,7 +3646,7 @@
"POIReference": "$(poi_2)"
}
],
"text": "Despite the insistence of the compass needle, you decide that you will not finish clearing the $(poi_2). As if it could sense this somehow, the onyx compass disappears. (-2 Local Reputation)",
"text": "Despite the insistance of the compass needle, you decide that you will not finish clearing the $(poi_2). As if it could sense this somehow, the onyx compass disappears. (-2 Local Reputation)",
"options": [
{
"name": "(Quest Failed)"
@@ -4339,7 +4339,7 @@
"POIReference": ""
}
],
"name": "\"So long as I get to keep whatever I find along the way too.\" (Accept Quest)."
"name": "\"So long as I get to keep whatever I find along the way, too.\" (Accept Quest)."
},
{
"name": "\"I don't think I'm interested. Sorry.\" (Decline Quest)"
@@ -4558,7 +4558,7 @@
"text": "Most of the ads are nondescript, weather worn, or written in an unfamiliar language. A few catch your eye, however.",
"options": [
{
"name": "You look at what seems to be an advertisement of some sort off to one side.",
"name": "You look at what seems to be an advertisement of some sort, off to one side.",
"text": "It reads: \"Gimgee's self-replicating paper. When you need unlimited paper or to clear a forest from afar, it's got to be Gimgee's.\"",
"options": [
{
@@ -4678,7 +4678,7 @@
},
{
"name": "You take a closer look at the carts.",
"text": "$(enemy_1)s and a few random creatures are filling most of one cart, while the other holds a few identical satchels of goods.",
"text": "$(enemy_1)s and a few random creatures are filling most of one cart., while the other holds a few identical satchels of goods.",
"options": [
{
"name": "Turn your attention to the carts' attendant.",
@@ -6314,7 +6314,7 @@
"POIReference": ""
}
],
"name": "Sorry, I don't have the time for this. (Decline Quest)",
"name": "Sorry, I don't have to the time for this. (Decline Quest)",
"text": "Figured you weren't up to the challenge, come back to me when you are.",
"options": [
{
@@ -6347,7 +6347,7 @@
"POIReference": ""
}
],
"name": "I'll take care of it. If you'd note the location of the factory on my map... (Accept Quest) (WARNING HARD QUEST)",
"name": "I'll take care of it, note the location of the factory on my map.(Accept Quest) (WARNING HARD QUEST)",
"text": "Once you have vanquished the mechanical threat and quelled the chaos within the factory, return to me, Maven the Alchemist, and you shall be rewarded handsomely for your bravery and service to our community. Be warned, however, for the path ahead will test your mettle, cunning, and combat prowess. May fortune favor you on this perilous undertaking!"
},
{
@@ -6518,7 +6518,7 @@
"POIReference": ""
}
],
"name": "Sorry, I don't have the time for this. (Decline Quest)",
"name": "Sorry, I don't have to the time for this. (Decline Quest)",
"text": "Figured you weren't up to the challenge, come back to me when you are. (-1 Local Reputation)",
"options": [
{
@@ -6531,7 +6531,7 @@
"text": "Thank you, noble adventurer. Slimefoot is a creature of pure malevolence. A monstrous being that has taken root in the heart of the treacherous swamp. Its corrosive touch and toxic aura have brought devastation to our lands. To defeat it, you must journey through the perilous swamp, filled with treacherous terrain and deadly creatures lurking within.",
"options": [
{
"name": "I see. So you want me to travel to Slimefoot's swamp and defeat him?",
"name": "I see. So you want me to travel to Slimefoots swamp and defeat him ?",
"text": "Slimefoot is a formidable foe, adept at both offense and defense. Its body secretes a corrosive slime, and its tentacles strike with lightning speed. Prepare yourself for a challenging battle, my friend. Draw upon your combat skills, use potions and magical abilities wisely, and exploit any weaknesses you can find. Only then can you hope to overcome this vile creature.",
"options": [
{
@@ -6674,7 +6674,7 @@
{
"id": 2,
"name": "Travel",
"description": "Return to town and report your success in clearing Slimefoot's Lair.",
"description": "Return to town and report your success in clearing Slimefoots Lair.",
"mapFlag": "",
"mapFlagValue": 1,
"here": true,
@@ -6717,7 +6717,7 @@
"POIReference": ""
}
],
"name": "Sorry, I don't have the time for this. (Decline Quest)",
"name": "Sorry, I don't have to the time for this. (Decline Quest)",
"text": "Figured you weren't up to the challenge, come back to me when you are.",
"options": [
{
@@ -6750,7 +6750,7 @@
"POIReference": ""
}
],
"name": "Consider it done. If you'd note the location of the old sewers on my map... (Accept Quest) (WARNING HARD QUEST)"
"name": "Consider it done, note the location of the old sewers on my map. (Accept Quest) (WARNING HARD QUEST)"
},
{
"action": [
@@ -7381,7 +7381,7 @@
"options": [
{
"name": "(Continue)",
"text": "The inn contains some special events. You can also sell extra cards there, or buy temporary extra health.\n\nThe '?' sign denotes a town square or a job board where you can obtain side quests.\n\nAll of the other buildings with signs out front are shops, most of them sell cards.\n\nTo leave town, walk back toward the edge of the screen just below your current location.",
"text": "The inn contains some special events. You can also sell extra cards there, or buy temporary extra health.\n\nThe '?' sign denotes a town square / job board where you can obtain side quests.\n\nAll of the other buildings with signs out front are shops, most of them sell cards.\n\nTo leave town, walk back toward the edge of the screen just below your current location.",
"options": [
{
"name": "(Continue)",
@@ -7713,7 +7713,7 @@
"POIReference": ""
}
],
"name": "Sorry, I don't have the time for this. (Decline Quest)",
"name": "Sorry, I don't have to the time for this. (Decline Quest)",
"text": "Figured you weren't up to the challenge, come back to me when you are.",
"options": [
{
@@ -7921,7 +7921,7 @@
"POIReference": ""
}
],
"name": "Sorry, I don't have the time for this. (Decline Quest)",
"name": "Sorry, I don't have to the time for this. (Decline Quest)",
"text": "Figured you weren't up to the challenge, come back to me when you are.",
"options": [
{
@@ -8127,7 +8127,7 @@
"POIReference": ""
}
],
"name": "Sorry, I don't have the time for this. (Decline Quest)",
"name": "Sorry, I don't have to the time for this. (Decline Quest)",
"text": "Figured you weren't up to the challenge, come back to me when you are.",
"options": [
{
@@ -8367,7 +8367,7 @@
"POIReference": "$(poi_3)"
}
],
"name": "(Quest Complete)"
"name": "(Quest complete)"
}
]
},
@@ -8551,7 +8551,7 @@
"POIReference": "$(poi_3)"
}
],
"name": "(Quest Complete)"
"name": "(Quest complete)"
}
]
},
@@ -8735,7 +8735,7 @@
"POIReference": "$(poi_3)"
}
],
"name": "(Quest Complete)"
"name": "(Quest complete)"
}
]
},
@@ -8918,7 +8918,7 @@
"POIReference": "$(poi_3)"
}
],
"name": "(Quest Complete)"
"name": "(Quest complete)"
}
]
},
@@ -9102,7 +9102,7 @@
"POIReference": "$(poi_3)"
}
],
"name": "(Quest Complete)"
"name": "(Quest complete)"
}
]
},
@@ -9925,7 +9925,7 @@
"options": [
{
"name": "(Continue)",
"text": "A small group of scholars carrying books around the entrance seems to confirm the building's purpose, but something odd about their mannerisms has you on edge as you approach.",
"text": "A small group of scholars carrying books around the entrance seems to confirm the building's purpose, but something odd about their manerisms has you on edge as you approach.",
"options": [
{
"name": "(Continue)"

View File

@@ -467,7 +467,7 @@
}]
},{
"name":"White4",
"description":"Only Mostly Dead",
"description":"Only mostly dead",
"spriteAtlas":"maps/tileset/buildings.atlas",
"sprite":"RotatingShop",
"overlaySprite":"Overlay6White",
@@ -1415,7 +1415,7 @@
}]
},{
"name":"Blue",
"description":"Hermetic Study",
"description":"Hermitic Study",
"spriteAtlas":"maps/tileset/buildings.atlas",
"sprite":"BlueShop",
"rewards": [
@@ -1830,7 +1830,7 @@
}]
},{
"name":"Angel",
"description":"Halos 'R' Us",
"description":"Halos R' Us",
"spriteAtlas":"maps/tileset/buildings.atlas",
"sprite":"AngelShop",
"rewards": [ { "count":8, "subTypes": ["Angel"] } ]
@@ -2577,7 +2577,7 @@
"rewards": [ { "count":4, "type":"Union", "cardUnion": [ { "subTypes": ["Rogue"] }, { "cardText": "Rogue" } ] }, { "count":4, "type":"Union", "cardUnion": [ { "subTypes": ["Rogue"], "colors": ["blue"] }, { "cardText": "Rogue", "colors": ["blue"] } ] } ]
},{
"name":"Shaman",
"description":"Shaman for Ya Man",
"description":"Shaman for ya man",
"spriteAtlas":"maps/tileset/buildings.atlas",
"sprite":"ShamanShop",
"rewards": [ { "count":8, "type":"Union", "cardUnion": [ { "subTypes": ["Shaman"] }, { "cardText": "Shaman" } ] } ]
@@ -2671,7 +2671,7 @@
},
{
"name": "GreenBoosterPackShop",
"description":"Nature's Nurture Packs",
"description":"Natures Nurture Packs",
"spriteAtlas":"maps/tileset/buildings.atlas",
"overlaySprite": "Overlay4Green",
"sprite": "BoosterShop",

View File

@@ -467,7 +467,7 @@
}]
},{
"name":"White4",
"description":"Only Mostly Dead",
"description":"Only mostly dead",
"spriteAtlas":"maps/tileset/buildings.atlas",
"sprite":"RotatingShop",
"overlaySprite":"Overlay6White",
@@ -1341,7 +1341,7 @@
}]
},{
"name":"Blue",
"description":"Hermetic Study",
"description":"Hermitic Study",
"spriteAtlas":"maps/tileset/buildings.atlas",
"sprite":"BlueShop",
"rewards": [
@@ -1756,7 +1756,7 @@
}]
},{
"name":"Angel",
"description":"Halos 'R' Us",
"description":"Halos R' Us",
"spriteAtlas":"maps/tileset/buildings.atlas",
"sprite":"AngelShop",
"rewards": [ { "count":8, "subTypes": ["Angel"] } ]
@@ -2431,7 +2431,7 @@
"rewards": [ { "count":4, "type":"Union", "cardUnion": [ { "subTypes": ["Rogue"] }, { "cardText": "Rogue" } ] }, { "count":4, "type":"Union", "cardUnion": [ { "subTypes": ["Rogue"], "colors": ["blue"] }, { "cardText": "Rogue", "colors": ["blue"] } ] } ]
},{
"name":"Shaman",
"description":"Shaman for Ya Man",
"description":"Shaman for ya man",
"spriteAtlas":"maps/tileset/buildings.atlas",
"sprite":"ShamanShop",
"rewards": [ { "count":8, "type":"Union", "cardUnion": [ { "subTypes": ["Shaman"] }, { "cardText": "Shaman" } ] } ]
@@ -2525,7 +2525,7 @@
},
{
"name": "GreenBoosterPackShop",
"description":"Nature's Nurture Packs",
"description":"Natures Nurture Packs",
"spriteAtlas":"maps/tileset/buildings.atlas",
"overlaySprite": "Overlay4Green",
"sprite": "BoosterShop",

View File

@@ -369,7 +369,7 @@ Mirelight
Ravencrest Mill
Korven's Tomb
Gorgon's Gallery
Moudhrelmont
Moldermnouth
The Three Sisters
Moldermouth
Reaver's Point

View File

@@ -335,7 +335,7 @@ Fourmill Run
Port Rachkham
Cloudy Shallows
Slumnis
Silver Point
Silver Pointe
Abjuration Point
Crow's Nest
The Rookery

View File

@@ -6347,7 +6347,7 @@
"POIReference": ""
}
],
"name": "I'll take care of it. If you'd note the location of the factory on my map... (Accept Quest) (WARNING HARD QUEST)",
"name": "I'll take care of it, note the location of the factory on my map.(Accept Quest) (WARNING HARD QUEST)",
"text": "Once you have vanquished the mechanical threat and quelled the chaos within the factory, return to me, Maven the Alchemist, and you shall be rewarded handsomely for your bravery and service to our community. Be warned, however, for the path ahead will test your mettle, cunning, and combat prowess. May fortune favor you on this perilous undertaking!"
},
{

View File

@@ -1439,7 +1439,7 @@
}]
},{
"name":"Azorius",
"description":"Azorius Shop, LLC",
"description":"Azorious Shop, LLC",
"spriteAtlas":"maps/tileset/buildings.atlas",
"sprite":"AzoriusShop",
"rewards": [

View File

@@ -335,7 +335,7 @@ Fourmill Run
Port Rachkham
Cloudy Shallows
Slumnis
Silver Point
Silver Pointe
Abjuration Point
Crow's Nest
The Rookery

View File

@@ -94,7 +94,7 @@
<properties>
<property name="dialog">[
{
&quot;text&quot;: &quot;'Shandalaar's Most Burnable Cities'. Well, this one sounds like light reading...&quot;,
&quot;text&quot;: &quot;'Shandalaars Most Burnable Cities'. Well, this one sounds like light reading...&quot;,
&quot;options&quot;: [
{
&quot;name&quot;: &quot;(Continue)&quot;,

View File

@@ -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.
SVar:TrigBounce:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | SubAbility$ DBVenture
SVar:DBVenture:DB$ Venture
SVar:X:DungeonsCompleted$Valid Card.namedTomb of Annihilation
SVar:X:PlayerCountPropertyYou$DungeonCompletedNamed_Tomb 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.
SVar:TrigRepeat:DB$ RepeatEach | RepeatPlayers$ Opponent | RepeatSubAbility$ DBToken
SVar:DBToken:DB$ Token | TokenScript$ b_2_2_zombie | UnlessCost$ Sac<1/Creature> | UnlessPayer$ Player.IsRemembered

View File

@@ -19,9 +19,9 @@ Types:Legendary Creature Avatar Ally
PT:6/6
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.)
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:TrigTransform:DB$ SetState | Defined$ Self | Mode$ Transform | RememberChanged$ True | SubAbility$ DBGainLife
SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 4 | ConditionDefined$ Remembered | ConditionPresent$ Card | SubAbility$ DBDraw
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.
SVar:DBTransform: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: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:DBDamage:DB$ DealDamage | Defined$ Player.Opponent | NumDmg$ 4 | CounterNum$ 4 | ConditionDefined$ Remembered | ConditionPresent$ Card | SubAbility$ DBCleanup

View File

@@ -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.
SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Hidden$ True | ChangeType$ Creature.YouOwn+cmcLE3
SVar:DBVenture:DB$ Venture | Defined$ You
SVar:X:DungeonsCompleted$Amount
SVar:X:PlayerCountPropertyYou$DungeonsCompleted
DeckHints:Ability$Mill|Discard
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.

View File

@@ -3,7 +3,7 @@ ManaCost:no cost
Types:Land Desert
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$ 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.
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.
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:DBCleanup:DB$ Cleanup | ClearRemembered$ True

View File

@@ -13,6 +13,6 @@ SVar:STPlay2:Mode$ Continuous | MayPlay$ True | MayPlayWithoutManaCost$ True | A
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:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:DungeonsCompleted$Amount
SVar:X:PlayerCountPropertyYou$DungeonsCompleted
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.

View File

@@ -14,5 +14,5 @@ Types:Enchantment Room
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigSurveil | TriggerDescription$ At the beginning of your upkeep, surveil 1. You win the game if there are eight or more different names among unlocked doors of Rooms you control.
SVar:TrigSurveil:DB$ Surveil | SubAbility$ DBWin
SVar:DBWin:DB$ WinsGame | Defined$ You | ConditionCheckSVar$ RoomsUnlocked | ConditionSVarCompare$ GE8
SVar:RoomsUnlocked:Count$DistinctUnlockedDoors
SVar:RoomsUnlocked:Count$DistinctUnlockedDoors Card.Room+YouCtrl
Oracle:At the beginning of your upkeep, surveil 1. You win the game if there are eight or more different names among unlocked doors of Rooms you control.

View File

@@ -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.)
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.
SVar:X:DungeonsCompleted$Amount
SVar:X:PlayerCountPropertyYou$DungeonsCompleted
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.

View File

@@ -7,5 +7,5 @@ T:Mode$ ChangesZone | ValidCard$ Card.Self | Destination$ Battlefield | Execute$
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.
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:DungeonsCompleted$Amount
SVar:X:PlayerCountPropertyYou$DungeonsCompleted
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.

View File

@@ -9,5 +9,5 @@ SVar:IsLegendary:Count$ValidHand Creature.Legendary+IsRemembered
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."
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:DungeonsCompleted$DifferentCardNames/Twice
SVar:X:PlayerCountPropertyYou$DifferentlyNamedDungeonsCompleted/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."

View File

@@ -3,5 +3,5 @@ ManaCost:2 W
Types:Creature Dwarf Ranger
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.
SVar:X:DungeonsCompleted$Amount
SVar:X:PlayerCountPropertyYou$DungeonsCompleted
Oracle:As long as you've completed a dungeon, Gloom Stalker has double strike.

View File

@@ -7,5 +7,5 @@ T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefiel
SVar:TrigDraw:DB$ Draw | SubAbility$ DBDraw
SVar:DBDraw:DB$ Draw | ConditionCheckSVar$ X
K:Choose a Background
SVar:X:DungeonsCompleted$Amount
SVar:X:PlayerCountPropertyYou$DungeonsCompleted
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.)

View File

@@ -1,11 +1,11 @@
Name:Lantern Flare
ManaCost:1 W
Types:Instant
K:Cleave:X R W
A:SP$ DealDamage | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Select target creature or planeswalker | NumDmg$ Z | SubAbility$ DBGainLife | SpellDescription$ CARDNAME deals X damage to target creature or planeswalker and you gain X life. [X is the number of creatures you control.]
SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ Z
A:SP$ DealDamage | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Select target creature or planeswalker | NumDmg$ Y | SubAbility$ DBGainLife | SpellDescription$ CARDNAME deals X damage to target creature or planeswalker and you gain X life. [X is the number of creatures you control.]
SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ Y
A:SP$ DealDamage | Cost$ X R W | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Select target creature or planeswalker | NumDmg$ X | PrecostDesc$ Cleave | SubAbility$ DBGainLifeC | CostDesc$ {X}{R}{W} | NonBasicSpell$ True | SpellDescription$ (You may cast this spell for its cleave cost. If you do, remove the words in square brackets.)
SVar:DBGainLifeC:DB$ GainLife | Defined$ You | LifeAmount$ X
SVar:X:Count$xPaid
SVar:Y:Count$Valid Creature.YouCtrl
SVar:Z:Count$Cleave.X.Y
DeckHas:Ability$LifeGain
Oracle:Cleave {X}{R}{W} (You may cast this spell for its cleave cost. If you do, remove the words in square brackets.)\nLantern Flare deals X damage to target creature or planeswalker and you gain X life. [X is the number of creatures you control.]

View File

@@ -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.)
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.
SVar:X:DungeonsCompleted$Amount
SVar:X:PlayerCountPropertyYou$DungeonsCompleted
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.

View File

@@ -7,5 +7,5 @@ T:Mode$ ChangesZone | ValidCard$ Card.Self | Destination$ Battlefield | Execute$
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.
SVar:X:Count$Compare Y GE1.5.2
SVar:Y:DungeonsCompleted$Amount
SVar:Y:PlayerCountPropertyYou$DungeonsCompleted
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.

View File

@@ -3,5 +3,5 @@ ManaCost:2 R
Types:Creature Spirit
PT:1/4
S:Mode$ Continuous | Affected$ Card.Self | AddPower$ 3 | CheckSVar$ X | SVarCompare$ GE2 | Description$ CARDNAME gets +3/+0 as long as there are two or more unlocked doors among Rooms you control.
SVar:X:Count$UnlockedDoors
SVar:X:Count$UnlockedDoors Card.Room+YouCtrl
Oracle:Rampaging Soulrager gets +3/+0 as long as there are two or more unlocked doors among Rooms you control.

View File

@@ -10,7 +10,7 @@ SVar:DBPutCounter:DB$ PutCounter | Defined$ Remembered | CounterType$ HIT | SubA
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.
SVar:TrigLoseLife:DB$ LoseLife | Defined$ TriggeredDefendingPlayer | LifeAmount$ Y
SVar:X:DungeonsCompleted$Amount
SVar:X:PlayerCountPropertyYou$DungeonsCompleted
SVar:Y:TriggeredDefendingPlayer$ValidExile Card.YouOwn+counters_GE1_HIT
SVar:HasAttackEffect:TRUE
DeckHints:Name$Etrata, the Silencer|Mari, the Killing Quill

View File

@@ -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.
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:X:DungeonsCompleted$Amount
SVar:X:PlayerCountPropertyYou$DungeonsCompleted
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.

View File

@@ -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.
SVar:TrigBounce:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | SubAbility$ DBVenture
SVar:DBVenture:DB$ Venture
SVar:X:DungeonsCompleted$Valid Card.namedTomb of Annihilation
SVar:X:PlayerCountPropertyYou$DungeonCompletedNamed_Tomb 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.
SVar:TrigToken:DB$ Token | TokenAmount$ Y | TokenScript$ b_2_2_zombie | TokenOwner$ You
SVar:Y:PlayerCountOpponents$Amount

View File

@@ -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.
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.
SVar:X:DungeonsCompleted$Amount
SVar:X:PlayerCountPropertyYou$DungeonsCompleted
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.

View File

@@ -9,5 +9,5 @@ SVar:IsLegendary:Count$ValidHand Creature.Legendary+IsRemembered
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."
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:DungeonsCompleted$DifferentCardNames/Twice
SVar:X:PlayerCountPropertyYou$DifferentlyNamedDungeonsCompleted/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."

View File

@@ -7,5 +7,5 @@ T:Mode$ ChangesZone | ValidCard$ Card.Self | Destination$ Battlefield | Execute$
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.
SVar:X:Count$Compare Y GE1.5.2
SVar:Y:DungeonsCompleted$Amount
SVar:Y:PlayerCountPropertyYou$DungeonsCompleted
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.

View File

@@ -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.
SVar:TrigTreasure:DB$ Token | TokenAmount$ X | TokenScript$ c_a_treasure_sac
SVar:X:Count$Compare Y GE1.3.1
SVar:Y:DungeonsCompleted$Amount
SVar:Y:PlayerCountPropertyYou$DungeonsCompleted
K:Choose a Background
AI:RemoveDeck:Random
DeckHas:Ability$Token|Sacrifice & Type$Artifact|Treasure

View File

@@ -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.
SVar:DBPlay:DB$ Play | Defined$ Remembered | DefinedDesc$ that card | ValidSA$ Spell | WithoutManaCost$ True | Optional$ True | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:Y:DungeonsCompleted$Amount
SVar:Y:PlayerCountPropertyYou$DungeonsCompleted
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.

View File

@@ -13,5 +13,5 @@ ManaCost:3 U
Types:Enchantment Room
T:Mode$ UnlockDoor | ValidPlayer$ You | ValidCard$ Card.Self | ThisDoor$ True | Execute$ TrigToken | TriggerDescription$ When you unlock this door, create an X/X blue Spirit creature token with flying, where X is the number of unlocked doors among Rooms you control.
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ u_x_x_spirit_flying | TokenPower$ X | TokenToughness$ X | TokenOwner$ You
SVar:X:Count$UnlockedDoors
SVar:X:Count$UnlockedDoors Card.Room+YouCtrl
Oracle:(You may cast either half. That door unlocks on the battlefield. As a sorcery, you may pay the mana cost of a locked door to unlock it.)\nWhen you unlock this door, create an X/X blue Spirit creature token with flying, where X is the number of unlocked doors among Rooms you control.

View File

@@ -2,7 +2,7 @@ Name:The Gold Saucer
ManaCost:no cost
Types:Land Town
A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}.
A:AB$ FlipACoin | Cost$ 2 T | WinSubAbility$ DBToken | AILogic$ AtOppEOT | SpellDescription$ Flip a coin. If you win the flip, create a Treasure token.
A:AB$ FlipACoin | Cost$ 2 T | WinSubAbility$ DBToken | 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
A:AB$ Draw | Cost$ 3 T Sac<2/Artifact> | SpellDescription$ Draw a card.
DeckHas:Ability$Token

View File

@@ -8,7 +8,6 @@ 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:DBReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Battlefield | Transformed$ True | GainControl$ True | SubAbility$ DBCleanup
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.
ALTERNATE

View File

@@ -3,7 +3,7 @@ ManaCost:1 B
Types:Legendary Artifact Infinity Stone
K:Indestructible
A:AB$ Mana | Cost$ T | Produced$ B | SpellDescription$ Add {B}.
A:AB$ AlterAttribute | Cost$ 6 B T Exile<1/Creature> | Defined$ Self | Attributes$ Harnessed | StackDescription$ SpellDescription | SpellDescription$ Harness CARDNAME. (Once harnessed, its ∞ ability is active.)
A:AB$ AlterAttribute | Cost$ 6 B Exile<1/Creature> | Defined$ Self | Attributes$ Harnessed | StackDescription$ SpellDescription | SpellDescription$ Harness CARDNAME. (Once harnessed, its ∞ ability is active.)
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | IsPresent$ Card.Self+harnessed | TriggerZones$ Battlefield | Execute$ TrigReturn | TriggerDescription$ ∞ — At the beginning of your upkeep, return target creature card from your graveyard to the battlefield.
SVar:TrigReturn:DB$ ChangeZone | ValidTgts$ Creature.YouOwn | Origin$ Graveyard | Destination$ Battlefield
SVar:PlayMain1:TRUE

View File

@@ -6,7 +6,7 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S
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.)
SVar:TrigCopy:DB$ CopySpellAbility | Amount$ Y | Defined$ TriggeredSpellAbility | MayChooseTarget$ True
SVar:X:DungeonsCompleted$Amount
SVar:X:PlayerCountPropertyYou$DungeonsCompleted
SVar:Y:Count$Compare X GE1.2.1
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.)

View File

@@ -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.
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.
SVar:X:DungeonsCompleted$Amount
SVar:X:PlayerCountPropertyYou$DungeonsCompleted
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.

View File

@@ -2,8 +2,8 @@ Name:Garland, Royal Kidnapper
ManaCost:2 U B
Types:Legendary Creature Human Knight
PT:3/4
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 | ValidTgts$ Opponent
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigMonarch | TriggerDescription$ When NICKNAME enters, you become the monarch.
SVar:TrigMonarch:DB$ BecomeMonarch | Defined$ You
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: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
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.
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.
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.

View File

@@ -8,5 +8,5 @@ T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Opponent | TriggerZones$ Battlefiel
SVar:TrigBranch:DB$ Branch | BranchConditionSVar$ X | TrueSubAbility$ DBUntapAll | FalseSubAbility$ DBUntap
SVar:DBUntapAll:DB$ UntapAll | ValidCards$ Creature.YouCtrl
SVar:DBUntap:DB$ Untap | UntapExactly$ True | UntapType$ Creature.YouCtrl+tapped | Amount$ 1
SVar:X:DungeonsCompleted$Amount
SVar:X:PlayerCountPropertyYou$DungeonsCompleted
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.

View File

@@ -1,9 +1,8 @@
Name:Winged Portent
ManaCost:1 U U
Types:Instant
K:Cleave:4 G U
A:SP$ Draw | NumCards$ Z | SpellDescription$ Draw a card for each creature [with flying] you control.
SVar:X:Count$Valid Creature.YouCtrl
SVar:Y:Count$Valid Creature.withFlying+YouCtrl
SVar:Z:Count$Cleave.X.Y
A:SP$ Draw | NumCards$ X | SpellDescription$ Draw a card for each creature [with flying] you control.
A:SP$ Draw | Cost$ 4 G U | NumCards$ Y | PrecostDesc$ Cleave | CostDesc$ {4}{G}{U} | NonBasicSpell$ True | SpellDescription$ (You may cast this spell for its cleave cost. If you do, remove the words in square brackets.)
SVar:X:Count$Valid Creature.withFlying+YouCtrl
SVar:Y:Count$Valid Creature.YouCtrl
Oracle:Cleave {4}{G}{U} (You may cast this spell for its cleave cost. If you do, remove the words in square brackets.)\nDraw a card for each creature [with flying] you control.

View File

@@ -99,10 +99,7 @@ public final class BoosterUtils {
if (userPrefs != null && userPrefs.getPoolType() == StartingPoolPreferences.PoolType.BOOSTERS) {
Predicate<CardEdition> editionLegalPredicate = formatStartingPool == null
? cardEdition -> true
: formatStartingPool.editionLegalPredicate;
for (InventoryItem inventoryItem : generateRandomBoosterPacks(userPrefs.getNumberOfBoosters(), editionLegalPredicate)) {
for (InventoryItem inventoryItem : generateRandomBoosterPacks(userPrefs.getNumberOfBoosters(), formatStartingPool.editionLegalPredicate)) {
cards.addAll(((BoosterPack) inventoryItem).getCards());
}

View File

@@ -62,6 +62,7 @@ import forge.util.storage.IStorage;
public class QuestEventDraft implements IQuestEvent {
public static class QuestDraftPrizes {
public int credits;
public List<BoosterPack> boosterPacks;
public List<PaperCard> individualCards;
@@ -84,6 +85,7 @@ public class QuestEventDraft implements IQuestEvent {
public void addSelectedCard(final PaperCard card) {
FModel.getQuest().getCards().addSingleCard(card, 1);
}
}
public static final String UNDETERMINED = "quest_draft_undetermined_place";
@@ -231,6 +233,7 @@ public class QuestEventDraft implements IQuestEvent {
}
public void setWinner(final String playerName) {
if (QuestDraftUtils.TOURNAMENT_TOGGLE) {
TournamentPairing pairing = bracket.getNextPairing();
for(TournamentPlayer player : pairing.getPairedPlayers()) {
@@ -287,6 +290,7 @@ public class QuestEventDraft implements IQuestEvent {
* Generates the prizes for the player and saves them to the current quest.
*/
public QuestDraftPrizes collectPrizes() {
final int place = getPlayerPlacement();
int prizePool = entryFee * 9;
@@ -341,9 +345,11 @@ public class QuestEventDraft implements IQuestEvent {
}
return null;
}
private QuestDraftPrizes generateFirstPlacePrizes(final int prizePool) {
int credits = 2 * (prizePool / 3); //First place gets 2/3 the total prize pool
final List<PaperCard> cards = new ArrayList<>();
final List<BoosterPack> boosters = new ArrayList<>();
@@ -360,9 +366,11 @@ public class QuestEventDraft implements IQuestEvent {
awardSelectedRare(prizes);
return prizes;
}
private QuestDraftPrizes generateSecondPlacePrizes(final int prizePool) {
int credits = prizePool / 3; //Second place gets 1/3 the total prize pool
final List<PaperCard> cards = new ArrayList<>();
final List<BoosterPack> boosters = new ArrayList<>();
@@ -380,9 +388,11 @@ public class QuestEventDraft implements IQuestEvent {
awardSelectedRare(prizes);
return prizes;
}
private QuestDraftPrizes generateThirdPlacePrizes() {
final int credits = 0;
final List<PaperCard> cards = new ArrayList<>();
@@ -397,9 +407,11 @@ public class QuestEventDraft implements IQuestEvent {
prizes.individualCards = cards;
return prizes;
}
private QuestDraftPrizes generateFourthPlacePrizes() {
final int credits = 0;
final List<PaperCard> cards = new ArrayList<>();
@@ -428,6 +440,7 @@ public class QuestEventDraft implements IQuestEvent {
}
private void awardSelectedRare(final QuestDraftPrizes prizes) {
final List<PaperCard> possibleCards = new ArrayList<>();
final List<String> cardNames = new ArrayList<>();
@@ -453,6 +466,7 @@ public class QuestEventDraft implements IQuestEvent {
}
private PaperCard getPromoCard() {
final CardEdition randomEdition = getRandomEdition();
final List<EditionEntry> cardsInEdition = new ArrayList<>();
final List<String> cardNames = new ArrayList<>();
@@ -466,11 +480,6 @@ 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;
PaperCard promo = null;
@@ -486,6 +495,7 @@ public class QuestEventDraft implements IQuestEvent {
}
return promo;
}
private CardEdition getRandomEdition() {
@@ -496,6 +506,7 @@ public class QuestEventDraft implements IQuestEvent {
}
return editions.get((int) (MyRandom.getRandom().nextDouble() * editions.size()));
}
private Set<CardEdition> getAllEditions() {
@@ -506,6 +517,7 @@ public class QuestEventDraft implements IQuestEvent {
}
return editions;
}
private static int getBoosterPrice(final BoosterPack booster) {
@@ -516,9 +528,11 @@ public class QuestEventDraft implements IQuestEvent {
value = MAP_PRICES.getOrDefault(boosterName, 395);
return value;
}
public boolean playerHasMatchesLeft() {
if (QuestDraftUtils.TOURNAMENT_TOGGLE) {
return !bracket.isTournamentOver() && bracket.isPlayerRemaining(-1);
}
@@ -571,6 +585,7 @@ public class QuestEventDraft implements IQuestEvent {
}
return nextMatchIndex != -1 && standings[nextMatchIndex].equals(UNDETERMINED);
}
public int getPlayerPlacement() {
@@ -607,9 +622,11 @@ public class QuestEventDraft implements IQuestEvent {
}
return -1;
}
public String getPlacementString() {
final int place = getPlayerPlacement();
String output;
@@ -633,6 +650,7 @@ public class QuestEventDraft implements IQuestEvent {
}
return output;
}
public boolean canEnter() {
@@ -665,6 +683,7 @@ public class QuestEventDraft implements IQuestEvent {
}
public static class QuestDraftFormat implements Comparable<QuestDraftFormat> {
private CardEdition edition;
private CardBlock block;
@@ -727,9 +746,11 @@ public class QuestEventDraft implements IQuestEvent {
public int compareTo(final QuestDraftFormat other) {
return toString().compareToIgnoreCase(other.toString());
}
}
private static List<CardEdition> getAllowedSets(final QuestController quest) {
final List<CardEdition> allowedQuestSets = new ArrayList<>();
if (quest.getFormat() != null) {
@@ -750,9 +771,11 @@ public class QuestEventDraft implements IQuestEvent {
}
return allowedQuestSets;
}
private static List<CardBlock> getBlocks() {
final List<CardBlock> blocks = new ArrayList<>();
final IStorage<CardBlock> storage = FModel.getBlocks();
@@ -763,9 +786,11 @@ public class QuestEventDraft implements IQuestEvent {
}
return blocks;
}
public static List<QuestDraftFormat> getAvailableFormats(final QuestController quest) {
final List<CardEdition> allowedQuestSets = getAllowedSets(quest);
final List<QuestDraftFormat> possibleFormats = new ArrayList<>();
final List<CardBlock> blocks = getBlocks();
@@ -787,6 +812,7 @@ public class QuestEventDraft implements IQuestEvent {
if (blockAllowed) {
possibleFormats.add(new QuestDraftFormat(block));
}
}
for (CardEdition allowedQuestSet : allowedQuestSets) {
@@ -814,6 +840,7 @@ public class QuestEventDraft implements IQuestEvent {
Collections.sort(possibleFormats);
return possibleFormats;
}
/**
@@ -822,6 +849,7 @@ public class QuestEventDraft implements IQuestEvent {
* @return The created draft or null in the event no draft could be created.
*/
public static QuestEventDraft getRandomDraftOrNull(final QuestController quest) {
final List<QuestDraftFormat> possibleFormats = getAvailableFormats(quest);
if (possibleFormats.isEmpty()) {
@@ -830,6 +858,7 @@ public class QuestEventDraft implements IQuestEvent {
Collections.shuffle(possibleFormats);
return getDraftOrNull(quest, possibleFormats.get(0));
}
/**
@@ -837,6 +866,7 @@ public class QuestEventDraft implements IQuestEvent {
* @return The created draft or null in the event no draft could be created.
*/
public static QuestEventDraft getDraftOrNull(final QuestController quest, final QuestDraftFormat format) {
final QuestEventDraft event = new QuestEventDraft(format.getName());
if (format.isSet()) {
@@ -906,11 +936,13 @@ public class QuestEventDraft implements IQuestEvent {
event.aiIcons[i] = icon;
usedNames.add(event.aiNames[i]);
usedIcons.add(icon);
}
event.bracket = createBracketFromStandings(event.standings, event.aiNames, event.aiIcons);
return event;
}
private static int calculateEntryFee(final String[] boosters) {
@@ -928,6 +960,7 @@ public class QuestEventDraft implements IQuestEvent {
}
return (int) (entryFee * 1.5);
}
private static Set<String> getSetCombos(final QuestController quest, final CardBlock block) {
@@ -1008,6 +1041,7 @@ public class QuestEventDraft implements IQuestEvent {
}
return possibleCombinations;
}
public static TournamentBracket createBracketFromStandings(String[] standings, String[] aiNames, int[] aiIcons) {