mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 18:58:00 +00:00
Merge remote-tracking branch 'core/master'
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
Name:Apprentice Sharpshooter
|
||||
ManaCost:1 G
|
||||
ManaCost:2 G
|
||||
Types:Creature Human Archer
|
||||
PT:1/4
|
||||
K:Reach
|
||||
|
||||
10
forge-gui/res/cardsfolder/upcoming/donal_herald_of_wings.txt
Normal file
10
forge-gui/res/cardsfolder/upcoming/donal_herald_of_wings.txt
Normal 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.)
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
7
forge-gui/res/cardsfolder/upcoming/haunted_library.txt
Normal file
7
forge-gui/res/cardsfolder/upcoming/haunted_library.txt
Normal 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.
|
||||
11
forge-gui/res/cardsfolder/upcoming/rhoda_geist_avenger.txt
Normal file
11
forge-gui/res/cardsfolder/upcoming/rhoda_geist_avenger.txt
Normal 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.
|
||||
11
forge-gui/res/cardsfolder/upcoming/timin_youthful_geist.txt
Normal file
11
forge-gui/res/cardsfolder/upcoming/timin_youthful_geist.txt
Normal 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
9
forge-gui/res/editions/MagicFest 2021.txt
Normal file
9
forge-gui/res/editions/MagicFest 2021.txt
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user