Merge remote-tracking branch 'origin/CrypticSpire' into CrypticSpire

This commit is contained in:
Anthony Calosa
2024-11-14 10:31:11 +08:00
21 changed files with 92 additions and 64 deletions

View File

@@ -18,7 +18,6 @@ import java.io.File;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
@@ -777,8 +776,6 @@ public class StaticData {
if (CardEdition.Type.FUNNY.equals(e.getType()))
continue;
AtomicInteger artIndex = new AtomicInteger(1);
Map<String, Pair<Boolean, Integer>> cardCount = new HashMap<>();
List<CompletableFuture<Integer>> futures = new ArrayList<>();
for (CardEdition.CardInSet c : e.getAllCardsInSet()) {
@@ -839,35 +836,32 @@ public class StaticData {
return 0;
}));
}
// TODO: Audit token images here...
for(Map.Entry<String, Integer> tokenEntry : e.getTokens().entrySet()) {
futures.add(CompletableFuture.supplyAsync(()-> {
String name = tokenEntry.getKey();
artIndex.set(tokenEntry.getValue());
try {
PaperToken token = getAllTokens().getToken(name, e.getCode());
if (token == null) {
return 0;
}
for(int i = 0; i < artIndex.get(); i++) {
String imgKey = token.getImageKey(i);
File file = ImageKeys.getImageFile(imgKey);
if (file == null) {
EDITION_Q.add(e.getCode() + "_" + e.getName());
TOKEN_Q.add(e.getCode() + "_" + token.getImageFilename(i + 1) + "\n");
}
}
} catch(Exception ex) {
System.out.println("No Token found: " + name + " in " + e.getName());
}
return 0;
}));
}
CompletableFuture<?>[] futuresArray = futures.toArray(new CompletableFuture<?>[0]);
CompletableFuture.allOf(futuresArray).join();
futures.clear();
// TODO: Audit token images here...
for(Map.Entry<String, Integer> tokenEntry : e.getTokens().entrySet()) {
final String name = tokenEntry.getKey();
final int artIndex = tokenEntry.getValue();
try {
PaperToken token = getAllTokens().getToken(name, e.getCode());
if (token == null) {
continue;
}
for(int i = 0; i < artIndex; i++) {
String imgKey = token.getImageKey(i);
File file = ImageKeys.getImageFile(imgKey);
if (file == null) {
EDITION_Q.add(e.getCode() + "_" + e.getName());
TOKEN_Q.add(e.getCode() + "_" + token.getImageFilename(i + 1) + "\n");
}
}
} catch(Exception ex) {
System.out.println("No Token found: " + name + " in " + e.getName());
}
}
}
// stream().toList() causes crash on Android, use Collectors.toList()
List<String> NIF = new ArrayList<>(NIF_Q).stream().sorted().collect(Collectors.toList());

View File

@@ -1,7 +1,7 @@
package com.badlogic.gdx.backends.android.keyboardheight;
import android.annotation.RequiresApi;
import android.annotation.TargetApi;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.res.Configuration;
@@ -12,7 +12,7 @@ import android.view.WindowInsets;
import android.graphics.Insets;
import org.jetbrains.annotations.NotNull;
@RequiresApi(api = VERSION_CODES.R)
@TargetApi(VERSION_CODES.R)
public class AndroidRKeyboardHeightProvider implements KeyboardHeightProvider {
private final View view;
@@ -82,4 +82,4 @@ public class AndroidRKeyboardHeightProvider implements KeyboardHeightProvider {
public int getKeyboardPortraitHeight () {
return keyboardPortraitHeight;
}
}
}

View File

@@ -1,11 +1,11 @@
Name:Apothecary Stomper
ManaCost:4 G G
Types:Creature Elephant
PT:4/4
K:Vigilance
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigCharm | TriggerDescription$ When this creature enters, ABILITY
SVar:TrigCharm:DB$ Charm | Choices$ DBPutCounter,DBGainLife
SVar:DBPutCounter:DB$ PutCounter | ValidTgts$ Creature.YouCtrl | Tgtprompt$ Select target creature you control | CounterType$ P1P1 | CounterNum$ 2 | SpellDescription$ Put two +1/+1 counters on target creature you control.
SVar:DBGainLife:DB$ GainLife | LifeAmount$ 4 | SpellDescription$ You gain 4 life.
DeckHas:Ability$LifeGain
Oracle:Vigilance (Attacking doesn't cause this creature to tap.)\nWhen this creature enters, choose one —\n• Put two +1/+1 counters on target creature you control.\n• You gain 4 life.
Name:Apothecary Stomper
ManaCost:4 G G
Types:Creature Elephant
PT:4/4
K:Vigilance
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigCharm | TriggerDescription$ When this creature enters, ABILITY
SVar:TrigCharm:DB$ Charm | Choices$ DBPutCounter,DBGainLife
SVar:DBPutCounter:DB$ PutCounter | ValidTgts$ Creature.YouCtrl | Tgtprompt$ Select target creature you control | CounterType$ P1P1 | CounterNum$ 2 | SpellDescription$ Put two +1/+1 counters on target creature you control.
SVar:DBGainLife:DB$ GainLife | LifeAmount$ 4 | SpellDescription$ You gain 4 life.
DeckHas:Ability$LifeGain
Oracle:Vigilance (Attacking doesn't cause this creature to tap.)\nWhen this creature enters, choose one —\n• Put two +1/+1 counters on target creature you control.\n• You gain 4 life.

View File

@@ -1,7 +1,7 @@
Name:Fountainport Charmer
ManaCost:2 G
ManaCost:1 G
Types:Creature Frog Bard
PT:3/3
PT:2/3
K:Offspring:1
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigAnimate | TriggerDescription$ When CARDNAME enters, creature cards in your hand perpetually gain "This spell costs {1} less to cast."
SVar:TrigAnimate:DB$ AnimateAll | ValidCards$ Creature.YouOwn | Zone$ Hand | staticAbilities$ ReduceCost | Duration$ Perpetual

View File

@@ -5,5 +5,5 @@ PT:6/4
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigHeist | TriggerDescription$ When NICKNAME enters and at the beginning of your upkeep, heist target opponent's library.
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ TrigHeist | TriggerZones$ Battlefield | Secondary$ True | TriggerDescription$ When NICKNAME enters and at the beginning of your upkeep, heist target opponent's library.
SVar:TrigHeist:DB$ Heist | ValidTgts$ Opponent
S:Mode$ Continuous | MayPlay$ True | MayPlayAltManaCost$ 0 | MayPlayLimit$ 1 | MayPlayDontGrantZonePermissions$ True | Affected$ Card.YouDontOwn | AffectedZone$ Hand,Graveyard,Library,Exile,Command | Description$ Once each turn, you may pay {0} rather than pay the mana cost for a spell you cast that you don't own.
Oracle:When Grenzo enters and at the beginning of your upkeep, heist target opponent's library.\nOnce each turn, you may pay {0} rather than pay the mana cost for a spell you cast that you don't own.
S:Mode$ Continuous | MayPlay$ True | MayPlayAltManaCost$ 0 | MayPlayLimit$ 1 | MayPlayDontGrantZonePermissions$ True | Affected$ Card.YouDontOwn+cmcLE3 | AffectedZone$ Hand,Graveyard,Library,Exile,Command | Description$ Once each turn, you may pay {0} rather than pay the mana cost for a spell you cast that you don't own with mana value 3 or less.
Oracle:When Grenzo enters and at the beginning of your upkeep, heist target opponent's library.\nOnce each turn, you may pay {0} rather than pay the mana cost for a spell you cast that you don't own with mana value 3 or less.

View File

@@ -1,9 +1,9 @@
Name:Hymn to the Ages
ManaCost:4 U
ManaCost:1 U
Types:Instant Chorus
K:Starting intensity:3
K:Starting intensity:1
A:SP$ Draw | Defined$ You | NumCards$ X | SubAbility$ DBIntensify | SpellDescription$ Draw a number of cards equal to this spell's intensity.
SVar:DBIntensify:DB$ Intensify | AllDefined$ Card.YouOwn+Chorus | DefinedDesc$ all Chorus cards you own | SpellDescription$ All Chorus cards you own intensify by 1.
SVar:X:Count$Intensity
DeckHints:Type$Chorus
Oracle:Starting intensity 3\nDraw a number of cards equal to this spell's intensity.\nAll Chorus cards you own intensify by 1.
Oracle:Starting intensity 1\nDraw a number of cards equal to this spell's intensity.\nAll Chorus cards you own intensify by 1.

View File

@@ -1,6 +1,6 @@
Name:Lunar Insight
ManaCost:4 U U
ManaCost:2 U
Types:Instant
A:SP$ Draw | NumCards$ X | SpellDescription$ Draw a card for each different mana value among nonland permanents you control.
SVar:X:Count$Valid Card.YouCtrl+nonLand$DifferentCMC
Oracle:Draw a card for each different mana value among nonland permanents you control.
Oracle:Draw a card for each different mana value among nonland permanents you control.

View File

@@ -2,6 +2,7 @@ Name:Nashi, Illusion Gadgeteer
ManaCost:1 B G U
Types:Legendary Creature Rat Rogue
PT:4/4
K:Flash
K:Menace
K:Ward:2
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChoose | TriggerDescription$ When NICKNAME enters, secretly choose a card in your graveyard and conjure a duplicate of it into your hand. If the duplicate isn't a land card, it perpetually gains flash.
@@ -9,4 +10,4 @@ SVar:TrigChoose:DB$ ChooseCard | ChoiceZone$ Graveyard | Choices$ Card.YouOwn |
SVar:DBConjure:DB$ MakeCard | Conjure$ True | DefinedName$ ChosenCard | Zone$ Hand | RememberMade$ True | SubAbility$ DBPump
SVar:DBPump:DB$ Pump | Defined$ Remembered | ConditionDefined$ Remembered | ConditionPresent$ Card.nonLand | PumpZone$ Hand | KW$ Flash | Duration$ Perpetual | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearChosenCard$ True
Oracle:Menace, Ward {2}\nWhen Nashi enters, secretly choose a card in your graveyard and conjure a duplicate of it into your hand. If the duplicate isn't a land card, it perpetually gains flash.
Oracle:Flash\nMenace, Ward {2}\nWhen Nashi enters, secretly choose a card in your graveyard and conjure a duplicate of it into your hand. If the duplicate isn't a land card, it perpetually gains flash.

View File

@@ -1,5 +1,5 @@
Name:Nazar, the Velvet Fang
ManaCost:2 B
ManaCost:3 B
Types:Legendary Creature Vampire Warlock
PT:3/3
K:Menace
@@ -11,4 +11,4 @@ SVar:DBLoseLife:DB$ LoseLife | Defined$ You | LifeAmount$ 3
SVar:HasAttackEffect:TRUE
DeckHas:Ability$Counters
DeckHints:Ability$LifeGain
Oracle:Menace (This creature can't be blocked except by two or more creatures.)\nWhenever you gain life, put a feeding counter on Nazar, the Velvet Fang.\nWhenever Nazar attacks, you may remove three feeding counters from it. If you do, you draw three cards and you lose 3 life.
Oracle:Menace (This creature can't be blocked except by two or more creatures.)\nWhenever you gain life, put a feeding counter on Nazar, the Velvet Fang.\nWhenever Nazar attacks, you may remove three feeding counters from it. If you do, you draw three cards and you lose 3 life.

View File

@@ -1,5 +1,5 @@
Name:Ribald Shanty
ManaCost:1 R
ManaCost:R
Types:Instant Chorus
K:Starting intensity:2
A:SP$ DealDamage | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Select target creature or planeswalker | NumDmg$ X | SubAbility$ DBIntensify | SpellDescription$ This spell deals damage equal to its intensity to target creature or planeswalker.

View File

@@ -0,0 +1,11 @@
Name:A-Heartfire Hero
ManaCost:R
Types:Creature Mouse Soldier
PT:0/1
T:Mode$ BecomesTarget | ValidTarget$ Card.Self | ValidSource$ SpellAbility.YouCtrl | TriggerZones$ Battlefield | Valiant$ True | Execute$ TrigCounter | TriggerDescription$ Valiant — Whenever CARDNAME becomes the target of a spell or ability you control for the first time each turn, put a +1/+1 counter on it.
SVar:TrigCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigDamageDies | TriggerDescription$ When CARDNAME dies, it deals damage equal to its power to each opponent.
SVar:TrigDamageDies:DB$ DealDamage | Defined$ Opponent | NumDmg$ X
SVar:X:TriggeredCard$CardPower
DeckHas:Ability$Counters
Oracle:Valiant — Whenever Heartfire Hero becomes the target of a spell or ability you control for the first time each turn, put a +1/+1 counter on it.\nWhen Heartfire Hero dies, it deals damage equal to its power to each opponent.

View File

@@ -0,0 +1,8 @@
Name:A-Leyline of Resonance
ManaCost:2 R R
Types:Enchantment
K:MayEffectFromOpeningHand:FromHand
SVar:FromHand:DB$ ChangeZone | Defined$ Self | Origin$ Hand | Destination$ Battlefield | SpellDescription$ If CARDNAME is in your opening hand, you may begin the game with it on the battlefield.
T:Mode$ SpellCast | ValidCard$ Instant,Sorcery | Execute$ TrigCopy | ValidActivatingPlayer$ You | IsSingleTarget$ True | TriggerZones$ Battlefield | TargetsValid$ Creature.YouCtrl+inZoneBattlefield | TriggerDescription$ Whenever you cast an instant or sorcery spell that targets only a single creature you control, you may pay {1}. If you do, copy that spell. You may choose new targets for the copy.
SVar:TrigCopy:AB$ CopySpellAbility | Cost$ 1 | Defined$ TriggeredSpellAbility | MayChooseTarget$ True | Controller$ You
Oracle:If Leyline of Resonance is in your opening hand, you may begin the game with it on the battlefield.\nWhenever you cast an instant or sorcery spell that targets only a single creature you control, you may pay {1}. If you do, copy that spell. You may choose new targets for the copy.

View File

@@ -0,0 +1,8 @@
Name:A-Nadu, Winged Wisdom
ManaCost:1 G U
Types:Legendary Creature Bird Wizard
PT:3/4
K:Flying
T:Mode$ BecomesTarget | ValidSource$ SpellAbility | ValidTarget$ Creature.YouCtrl+inZoneBattlefield | TriggerZones$ Battlefield | Execute$ NaduDig | ActivationLimit$ 2 | TriggerDescription$ Whenever a creature you control becomes the target of a spell or ability, reveal the top card of your library. If it's a land card, put it onto the battlefield. Otherwise, put it into your hand. This ability triggers only twice each turn.
SVar:NaduDig:DB$ Dig | DigNum$ 1 | Reveal$ True | ChangeNum$ All | ChangeValid$ Land | DestinationZone$ Battlefield | DestinationZone2$ Hand
Oracle:Flying\nWhenever a creature you control becomes the target of a spell or ability, reveal the top card of your library. If it's a land card, put it onto the battlefield. Otherwise, put it into your hand. This ability triggers only twice each turn.

View File

@@ -4,9 +4,8 @@ Types:Creature Dinosaur
PT:4/4
T:Mode$ DamageDoneOnce | Execute$ TrigPump | ValidTarget$ Card.Self | TriggerZones$ Battlefield | TriggerDescription$ Enrage — Whenever CARDNAME is dealt damage, other Dinosaurs you control and Dinosaur cards in your hand and library perpetually get +1/+1.
SVar:TrigPump:DB$ PumpAll | ValidCards$ Dinosaur.YouCtrl+Other | PumpZone$ Battlefield,Hand,Library | NumAtt$ 1 | NumDef$ 1 | Duration$ Perpetual
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigTrigger | TriggerDescription$ Whenever CARDNAME attacks, you may pay {3}. When you do, CARDNAME deals 1 damage to each creature and each planeswalker.
SVar:TrigTrigger:AB$ ImmediateTrigger | Cost$ 3 | Execute$ TrigDamage | TriggerDescription$ When you do, CARDNAME deals 1 damage to each creature and each planeswalker.
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigDamage | TriggerDescription$ Whenever CARDNAME attacks, CARDNAME deals 1 damage to each creature and each planeswalker.
SVar:TrigDamage:DB$ DamageAll | ValidCards$ Creature,Planeswalker | NumDmg$ 1
SVar:HasAttackEffect:TRUE
DeckNeeds:Type$Dinosaur
Oracle:Enrage — Whenever Stalwart Speartail is dealt damage, other Dinosaurs you control and Dinosaur cards in your hand and library perpetually get +1/+1.\nWhenever Stalwart Speartail attacks, you may pay {3}. When you do, Stalwart Speartail deals 1 damage to each creature and each planeswalker.
Oracle:Enrage — Whenever Stalwart Speartail is dealt damage, other Dinosaurs you control and Dinosaur cards in your hand and library perpetually get +1/+1.\nWhenever Stalwart Speartail attacks, Stalwart Speartail deals 1 damage to each creature and each planeswalker.

View File

@@ -1,7 +1,7 @@
Name:Talion's Throneguard
ManaCost:2 U U
Types:Creature Faerie Wizard
PT:2/1
PT:4/2
K:Flash
K:Bargain
K:Flying

View File

@@ -1,8 +1,9 @@
Name:Tome of Gadwick
ManaCost:U
Types:Artifact Equipment
T:Mode$ DamageDone | ValidSource$ Creature.EquippedBy | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigConjure | TriggerZones$ Battlefield | TriggerDescription$ Whenever equipped creature deals combat damage to a player, conjure a random card from CARDNAME's spellbook into your hand.
S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 1 | AddKeyword$ Ward:1 | Description$ Equipped creature gets +1/+0 and has ward {1}.
T:Mode$ Attacks | ValidCard$ Creature.EquippedBy | Execute$ TrigConjure | TriggerDescription$ Whenever equipped creature attacks, conjure a random card from CARDNAME's spellbook into your hand.
SVar:TrigConjure:DB$ MakeCard | Conjure$ True | AtRandom$ True | Spellbook$ Brainstorm,Consider,Obsessive Search,Opt,Peek,Piece It Together,Ponder,Preordain,Quicken,Serum Visions,Sleight of Hand,Thought Scour | Zone$ Hand
K:Equip:1
DeckHas:Type$Instant|Sorcery & Ability$Graveyard
Oracle:Whenever equipped creature deals combat damage to a player, conjure a random card from Tome of Gadwick's spellbook into your hand.\nEquip {1}
Oracle:Equipped creature gets +1/+0 and has ward {1}.\nWhenever equipped creature attacks, conjure a random card from Tome of Gadwick's spellbook into your hand.\nEquip {1}

View File

@@ -3,5 +3,6 @@ ManaCost:2 W
Types:Creature Human Soldier
PT:4/4
A:SP$ PermanentCreature | Cost$ 2 W tapXType<2/Artifact;Creature;Land/artifacts, creatures, and/or lands> | SpellDescription$ As an additional cost to cast this spell, tap two untapped artifacts, creatures, and/or lands you control.
SVar:AIPaymentPreference:DontPayTapCostWithManaSources
DeckHints:Type$Artifact
Oracle:As an additional cost to cast this spell, tap two untapped artifacts, creatures, and/or lands you control.

View File

@@ -448,6 +448,9 @@ Replace=.042F fromSheet("BLB showcase")
[bundle]
386 R Thundertrap Trainer @Jesper Ejsing
[rebalanced]
A138 U A-Heartfire Hero @Jakub Kasper
[special guests]
1 Sword of Fire and Ice|SPG
1 Secluded Courtyard|SPG

View File

@@ -474,6 +474,9 @@ Replace=.078F RareMythic:fromSheet("DSK cards")
[buy a box]
417 R Twitching Doll @John Tedrick
[rebalanced]
A143 R A-Leyline of Resonance @Sergey Glushakov
[special guests]
1 Collected Company|SPG
1 Damnation|SPG
@@ -486,7 +489,6 @@ Replace=.078F RareMythic:fromSheet("DSK cards")
1 Soul Warden|SPG
1 Unholy Heat|SPG
[tokens]
b_2_2_e_horror
b_6_6_demon_flying

View File

@@ -590,6 +590,7 @@ Replace=.042F fromSheet("MH3 alternate frame")
A29 R A-Guide of Souls @Ryan Valle
A38 M A-Ocelot Pride @Chris Seaman
A122 C A-Galvanic Discharge @Zoltan Boros
A193 R A-Nadu, Winged Wisdom @Daren Bader
[new to modern]
1 Angel of the Ruins|MH3

View File

@@ -3,7 +3,6 @@ Code=S00
Date=2000-04-01
Name=Starter 2000
Border=White
Code2=S2K
Type=Starter
Foil=OldStyle
FoilAlwaysInCommonSlot=False