Merge remote-tracking branch 'core/master'

This commit is contained in:
Anthony Calosa
2021-11-12 22:59:51 +08:00
15 changed files with 684 additions and 604 deletions

View File

@@ -332,6 +332,10 @@ public class CardPool extends ItemPool<PaperCard> {
sumWeights += editionsCount;
weightedMean += weightedFrequency;
}
if (frequencyValues.isEmpty())
return null;
int totalNoCards = (int)weightedMean;
weightedMean /= sumWeights;

View File

@@ -388,6 +388,8 @@ public class Deck extends DeckBase implements Iterable<Entry<DeckSection, CardPo
// == Get the most representative (Pivot) Edition in the Pool
// Note: Card Art Updates (if any) will be determined based on the Pivot Edition.
CardEdition pivotEdition = pool.getPivotCardEdition(isCardArtPreferenceLatestArt);
if (pivotEdition == null)
continue;
// == Inspect and Update the Pool
Date releaseDatePivotEdition = pivotEdition.getDate();

View File

@@ -134,9 +134,21 @@ public class CardFactory {
c.removeType(CardType.Supertype.Legendary);
}
if (sourceSA.hasParam("CopySetPower")) {
c.setBasePower(Integer.parseInt(sourceSA.getParam("CopySetPower")));
}
if (sourceSA.hasParam("CopySetToughness")) {
c.setBaseToughness(Integer.parseInt(sourceSA.getParam("CopySetToughness")));
}
if (sourceSA.hasParam("CopyAddTypes")) {
c.addType(Arrays.asList(sourceSA.getParam("CopyAddTypes").split(" & ")));
}
// change the color of the copy (eg: Fork)
if (sourceSA.hasParam("CopyIsColor")) {
ColorSet finalColors = ColorSet.getNullColor();
ColorSet finalColors;
final String newColor = sourceSA.getParam("CopyIsColor");
if (newColor.equals("ChosenColor")) {
finalColors = ColorSet.fromNames(source.getChosenColors());

View File

@@ -1,7 +1,8 @@
Name:Ancestral Anger
ManaCost:R
Types:Sorcery
A:SP$ Pump | Cost$ R | NumCards$ 1 | ValidTgts$ Creature | KW$ Trample | NumAtt$ +X | SpellDescription$ Until end of turn, target creature gains trample and gets +X/+0, where X is 1 plus the number of cards named Ancestral Anger in your graveyard.
A:SP$ Pump | Cost$ R | NumCards$ 1 | ValidTgts$ Creature | KW$ Trample | NumAtt$ +X | SubAbility$ DBDraw | SpellDescription$ Until end of turn, target creature gains trample and gets +X/+0, where X is 1 plus the number of cards named Ancestral Anger in your graveyard.
SVar:DBDraw:DB$ Draw | NumCards$ 1 | SpellDescription$ Draw a card.
SVar:X:Count$ValidGraveyard Card.YouOwn+namedAncestral Anger/Plus.1
DeckHints:Name$Ancestral Anger
Oracle:Until end of turn, target creature gains trample and gets +X/+0, where X is 1 plus the number of cards named Ancestral Anger in your graveyard.
Oracle:Until end of turn, target creature gains trample and gets +X/+0, where X is 1 plus the number of cards named Ancestral Anger in your graveyard.\nDraw a card.

View File

@@ -1,5 +1,5 @@
Name:Apprentice Sharpshooter
ManaCost:1 G
ManaCost:2 G
Types:Creature Human Archer
PT:1/4
K:Reach

View File

@@ -0,0 +1,10 @@
Name:Donal, Herald of Wings
ManaCost:2 U U
Types:Legendary Creature Human Wizard
PT:3/3
T:Mode$ SpellCast | TriggerZones$ Battlefield | ValidCard$ Creature.withFlying+nonLegendary | ValidActivatingPlayer$ You | NoResolvingCheck$ True | ActivationLimit$ 1 | Execute$ TrigCopy | OptionalDecider$ You | TriggerDescription$ Whenever you cast a nonlegendary creature spell with flying, you may copy it, except the copy is a 1/1 Spirit in addition to its other types. Do this only once each turn. (The copy becomes a token.)
SVar:TrigCopy:DB$ CopySpellAbility | Defined$ TriggeredSpellAbility | CopySetPower$ 1 | CopySetToughness$ 1 | CopyAddTypes$ Spirit
DeckHas:Ability$Token
DeckHints:Keyword$Flying
SVar:BuffedBy:Creature.withFlying
Oracle:Whenever you cast a nonlegendary creature spell with flying, you may copy it, except the copy is a 1/1 Spirit in addition to its other types. Do this only once each turn. (The copy becomes a token.)

View File

@@ -1,5 +1,5 @@
Name:Dreadlight Monstrosity
ManaCost:3 U U
ManaCost:4 U U
Types:Creature Crab Horror
PT:5/5
K:Ward:2

View File

@@ -0,0 +1,10 @@
Name:Drogskol Reinforcements
ManaCost:3 W
Types:Creature Spirit Soldier
PT:2/2
K:Melee
S:Mode$ Continuous | Affected$ Spirit.Other+YouCtrl | AddKeyword$ Melee | Description$ Other Spirits you control have melee.
R:Event$ DamageDone | ActiveZones$ Battlefield | Prevent$ True | ValidTarget$ Spirit.YouCtrl | IsCombat$ False | Description$ Prevent all noncombat damage that would be dealt to Spirits you control.
SVar:PlayMain1:TRUE
DeckHints$Type:Spirit
Oracle:Melee (Whenever this creature attacks, it gets +1/+1 until end of turn for each opponent you attacked this combat.)\nOther Spirits you control have melee.\nPrevent all noncombat damage that would be dealt to Spirits you control.

View File

@@ -0,0 +1,7 @@
Name:Haunted Library
ManaCost:1 W
Types:Enchantment
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.OppCtrl | TriggerZones$ Battlefield | Execute$ TrigToken | OptionalDecider$ You | TriggerDescription$ Whenever a creature an opponent controls dies, you may pay {1}. If you do, create a 1/1 white Spirit creature token with flying.
SVar:TrigToken:AB$Token | Cost$ 1 | TokenAmount$ 1 | TokenScript$ w_1_1_spirit_flying | TokenOwner$ You
DeckHas:Ability$Token
Oracle:Whenever a creature an opponent controls dies, you may pay {1}. If you do, create a 1/1 white Spirit creature token with flying.

View File

@@ -0,0 +1,11 @@
Name:Rhoda, Geist Avenger
ManaCost:3 W
Types:Legendary Creature Human Soldier
PT:3/3
K:Partner:Timin, Youthful Geist
K:Vigilance
T:Mode$ Taps | ValidCard$ Creature.OppCtrl | Attacker$ False | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever a creature an opponent controls becomes tapped, if it isn't being declared as an attacker, put a +1/+1 counter on CARDNAME.
SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1
DeckHints:Name$Timin, Youthful Geist
DeckHas:Ability$Counters
Oracle:Partner with Timin, Youthful Geist (When this creature enters the battlefield, target player may put Timin, Youthful Geist into their hand from their library, then shuffle.)\nVigilance\nWhenever a creature an opponent controls becomes tapped, if it isn't being declared as an attacker, put a +1/+1 counter on Rhoda, Geist Avenger.

View File

@@ -0,0 +1,11 @@
Name:Timin, Youthful Geist
ManaCost:4 U
Types:Legendary Creature Spirit
PT:3/4
K:Partner:Rhoda, Geist Avenger
K:Flying
T:Mode$ Phase | Phase$ BeginCombat | TriggerZones$ Battlefield | Execute$ TrigTap | TriggerDescription$ At the beginning of each combat, tap up to one target creature.
SVar:TrigTap:DB$ Tap | ValidTgts$ Creature | TgtPrompt$ Select target creature | TargetMin$ 0 | TargetMax$ 1
SVar:PlayMain1:TRUE
DeckHints:Name$Rhoda, Geist Avenger
Oracle:Partner with Rhoda, Geist Avenger (When this creature enters the battlefield, target player may put Rhoda, Geist Avenger into their hand from their library, then shuffle.)\nFlying\nAt the beginning of each combat, tap up to one target creature.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,9 @@
[metadata]
Code=PF21
Date=2021-01-01
Name=MagicFest 2021
Type=Promo
ScryfallCode=PF21
[cards]
1 R Path of Ancestry @Andreas Rocha

View File

@@ -10,6 +10,7 @@ ScryfallCode=PL21
1★ R Sethron, Hurloon General @Fiona Hsieh
2 M Ox of Agonas @Lie Setiawan
3★ M Angrath, the Flame-Chained @Song Qijin
4 R Tahngarth, First Mate @Song Qijin
[tokens]
r_2_3_minotaur

View File

@@ -407,6 +407,8 @@ public class DeckImportController {
boolean isExpansionTheMajorityInThePool = (cardArtReferencePool.getTheMostFrequentEditionType() == CardEdition.Type.EXPANSION);
boolean isPoolModernFramed = cardArtReferencePool.isModern();
CardEdition pivotEdition = cardArtReferencePool.getPivotCardEdition(isCardArtPreferenceLatestArt);
if (pivotEdition == null)
continue;
Date releaseDatePivotEdition = pivotEdition.getDate();
List<Token> tokensToOptimise = tokensPerSectionWithNoSet.get(section);