mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-15 10:18:01 +00:00
Merge remote-tracking branch 'core/master'
This commit is contained in:
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
Dev instructions here: [Getting Started](https://git.cardforge.org/core-developers/forge/-/wikis/(SM-autoconverted)-how-to-get-started-developing-forge) (Somewhat outdated)
|
Dev instructions here: [Getting Started](https://git.cardforge.org/core-developers/forge/-/wikis/(SM-autoconverted)-how-to-get-started-developing-forge) (Somewhat outdated)
|
||||||
|
|
||||||
Discord channel [here](https://discordapp.com/channels/267367946135928833/267742313390931968)
|
Discord channel [here](https://discord.gg/fWfNgCUNRq)
|
||||||
|
|
||||||
## Requirements / Tools
|
## Requirements / Tools
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ import forge.game.mana.Mana;
|
|||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.spellability.OptionalCost;
|
import forge.game.spellability.OptionalCost;
|
||||||
import forge.game.spellability.SpellAbility;
|
import forge.game.spellability.SpellAbility;
|
||||||
|
import forge.game.spellability.SpellAbilityPredicates;
|
||||||
|
import forge.game.trigger.Trigger;
|
||||||
import forge.game.zone.Zone;
|
import forge.game.zone.Zone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.item.PaperCard;
|
import forge.item.PaperCard;
|
||||||
@@ -380,6 +382,15 @@ public class CardProperty {
|
|||||||
if (!card.equals(source.getEffectSource())) {
|
if (!card.equals(source.getEffectSource())) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
} else if (property.equals("withoutManaAbility")) {
|
||||||
|
if (Iterables.any(card.getSpellAbilities(), SpellAbilityPredicates.isManaAbility())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (final Trigger trig : card.getTriggers()) {
|
||||||
|
if (trig.getOverridingAbility() != null && !trig.getOverridingAbility().isManaAbility()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
} else if (property.equals("CanBeSacrificedBy") && spellAbility instanceof SpellAbility) {
|
} else if (property.equals("CanBeSacrificedBy") && spellAbility instanceof SpellAbility) {
|
||||||
if (!card.canBeSacrificedBy((SpellAbility) spellAbility)) {
|
if (!card.canBeSacrificedBy((SpellAbility) spellAbility)) {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
12
forge-gui/res/cardsfolder/upcoming/ethereal_investigator.txt
Normal file
12
forge-gui/res/cardsfolder/upcoming/ethereal_investigator.txt
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
Name:Ethereal Investigator
|
||||||
|
ManaCost:3 U
|
||||||
|
Types:Creature Spirit
|
||||||
|
PT:2/3
|
||||||
|
K:Flying
|
||||||
|
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigInvestigate | TriggerDescription$ When CARDNAME enters the battlefield, investigate X times, where X is the number of opponents you have. (To investigate, create a colorless Clue artifact token with "{2}, Sacrifice this artifact: Draw a card.")
|
||||||
|
SVar:TrigInvestigate:DB$ Investigate | Num$ X
|
||||||
|
SVar:X:PlayerCountOpponents$Amount
|
||||||
|
T:Mode$ Drawn | ValidCard$ Card.YouCtrl | Number$ 2 | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever you draw your second card each turn, put a +1/+1 counter on CARDNAME.
|
||||||
|
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ w_1_1_spirit_flying
|
||||||
|
DeckHas:Ability$Token & Ability$Sacrifice
|
||||||
|
Oracle:Flying\nWhen Ethereal Investigator enters the battlefield, investigate X times, where X is the number of opponents you have. (To investigate, create a colorless Clue artifact token with "{2}, Sacrifice this artifact: Draw a card.")\nWhenever you draw your second card each turn, create a 1/1 white Spirit creature token with flying.
|
||||||
13
forge-gui/res/cardsfolder/upcoming/kamber_the_plunderer.txt
Normal file
13
forge-gui/res/cardsfolder/upcoming/kamber_the_plunderer.txt
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
Name:Kamber, the Plunderer
|
||||||
|
ManaCost:3 B
|
||||||
|
Types:Legendary Creature Vampire Rogue
|
||||||
|
PT:3/4
|
||||||
|
K:Partner:Laurine, the Diversion
|
||||||
|
K:Lifelink
|
||||||
|
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.OppCtrl | TriggerZones$ Battlefield | Execute$ TrigGainLife | TriggerDescription$ Whenever a creature an opponent controls dies, you gain 1 life and create a Blood token.
|
||||||
|
SVar:TrigGainLife:DB$ GainLife | LifeAmount$ 1 | SubAbility$ DBToken
|
||||||
|
SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_blood_draw | TokenOwner$ You
|
||||||
|
SVar:PlayMain1:TRUE
|
||||||
|
DeckHints:Name$Laurine, the Diversion
|
||||||
|
DeckHas:Ability$Token & Ability$Sacrifice & Type$Blood & Ability$LifeGain
|
||||||
|
Oracle:Partner with Laurine, the Diversion (When this creature enters the battlefield, target player may put Laurine into their hand from their library, then shuffle.)\nLifelink\nWhenever a creature an opponent controls dies, you gain 1 life and create a Blood token. (It's an artifact with "{1}, {T}, Discard a card, Sacrifice this artifact: Draw a card.")
|
||||||
11
forge-gui/res/cardsfolder/upcoming/laurine_the_diversion.txt
Normal file
11
forge-gui/res/cardsfolder/upcoming/laurine_the_diversion.txt
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
Name:Laurine, the Diversion
|
||||||
|
ManaCost:2 R
|
||||||
|
Types:Legendary Creature Human Rogue
|
||||||
|
PT:3/3
|
||||||
|
K:Partner:Kamber, the Plunderer
|
||||||
|
K:First strike
|
||||||
|
A:AB$ Goad | Cost$ 2 Sac<1/Artifact;Creature/artifact or creature> | ValidTgts$ Creature | TgtPrompt$ Select target creature SpellDescription$ Goad target creature.
|
||||||
|
SVar:AIPreference:SacCost$Artifact.token+nonCreature,Creature.token+powerLE1,Creature.cmcLE1+powerLE1
|
||||||
|
DeckHints:Name$Kamber, the Plunderer
|
||||||
|
DeckHas:Ability$Sacrifice
|
||||||
|
Oracle:Partner with Kamber, the Plunderer (When this creature enters the battlefield, target player may put Kamber into their hand from their library, then shuffle.)\nFirst strike\n{2}, Sacrifice an artifact or creature: Goad target creature. (Until your next turn, that creature attacks each combat if able and attacks a player other than you if able.)
|
||||||
11
forge-gui/res/cardsfolder/upcoming/midnight_arsonist.txt
Normal file
11
forge-gui/res/cardsfolder/upcoming/midnight_arsonist.txt
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
Name:Midnight Arsonist
|
||||||
|
ManaCost:3 R
|
||||||
|
Types:Creature Vampire
|
||||||
|
PT:3/2
|
||||||
|
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDestroy | TriggerDescription$ When CARDNAME enters the battlefield, destroy up to X target artifacts without mana abilities, where X is the number of Vampires you control.
|
||||||
|
SVar:TrigDestroy:DB$ Destroy | TargetMin$ 0 | TargetMax$ X | ValidTgts$ Artifact.withoutManaAbility | TgtPrompt$ Select up to X target artifacts without mana abilities
|
||||||
|
SVar:X:Count$Valid Vampire.YouCtrl
|
||||||
|
DeckHints:Type$Vampire
|
||||||
|
AI:RemoveDeck:Random
|
||||||
|
SVar:BuffedBy:Vampire
|
||||||
|
Oracle:When Midnight Arsonist enters the battlefield, destroy up to X target artifacts without mana abilities, where X is the number of Vampires you control.
|
||||||
7
forge-gui/res/cardsfolder/upcoming/olivias_wrath.txt
Normal file
7
forge-gui/res/cardsfolder/upcoming/olivias_wrath.txt
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
Name:Olivia's Wrath
|
||||||
|
ManaCost:4 B
|
||||||
|
Types:Sorcery
|
||||||
|
A:SP$ PumpAll | Cost$ 4 B | ValidCards$ Creature.nonVampire | NumAtt$ -X | NumDef$ -X | IsCurse$ True | SpellDescription$ Each non-Vampire creature gets -X/-X until end of turn, where X is the number of Vampires you control.
|
||||||
|
SVar:X:Count$Valid Vampire.YouCtrl
|
||||||
|
DeckHints:Type$Vampire
|
||||||
|
Oracle:Each non-Vampire creature gets -X/-X until end of turn, where X is the number of Vampires you control.
|
||||||
@@ -2,7 +2,7 @@ Name:Reclusive Taxidermist
|
|||||||
ManaCost:1 G
|
ManaCost:1 G
|
||||||
Types:Creature Human Druid
|
Types:Creature Human Druid
|
||||||
PT:1/2
|
PT:1/2
|
||||||
S:Mode$ Continuous | Affected$ Card.Self | AddPower$ 3 | AddToughness$ 2 | IsPresent$ Creature | PresentCompare$ GE4 | PresentZone$ Graveyard | Description$ CARDNAME gets +3/+2 as long as there are four or more creature cards in your graveyard.
|
S:Mode$ Continuous | Affected$ Card.Self | AddPower$ 3 | AddToughness$ 2 | IsPresent$ Creature.YouOwn | PresentCompare$ GE4 | PresentZone$ Graveyard | Description$ CARDNAME gets +3/+2 as long as there are four or more creature cards in your graveyard.
|
||||||
A:AB$ Mana | Cost$ T | Produced$ Any | SpellDescription$ Add one mana of any color.
|
A:AB$ Mana | Cost$ T | Produced$ Any | SpellDescription$ Add one mana of any color.
|
||||||
DeckHints:Ability$Graveyard & Ability$Discard
|
DeckHints:Ability$Graveyard & Ability$Discard
|
||||||
Oracle:Reclusive Taxidermist gets +3/+2 as long as there are four or more creature cards in your graveyard.\n{T}: Add one mana of any color.
|
Oracle:Reclusive Taxidermist gets +3/+2 as long as there are four or more creature cards in your graveyard.\n{T}: Add one mana of any color.
|
||||||
|
|||||||
13
forge-gui/res/cardsfolder/upcoming/scion_of_opulence.txt
Normal file
13
forge-gui/res/cardsfolder/upcoming/scion_of_opulence.txt
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
Name:Scion of Opulence
|
||||||
|
ManaCost:2 R
|
||||||
|
Types:Creature Vampire Noble
|
||||||
|
PT:3/1
|
||||||
|
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self,Vampire.Other+nonToken+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever CARDNAME or another nontoken Vampire you control dies, create a Treasure token.
|
||||||
|
SVar:TrigToken:DB$ Token | TokenScript$ c_a_treasure_sac
|
||||||
|
A:AB$ Dig | Cost$ R Sac<2/Artifact> | DigNum$ 1 | ChangeNum$ All | DestinationZone$ Exile | Defined$ You | RememberChanged$ True | SubAbility$ DBEffect | SpellDescription$ Exile the top card of your library. You may play that card this turn.
|
||||||
|
SVar:DBEffect:DB$ Effect | StaticAbilities$ EffSModeContinuous | ExileOnMoved$ Exile | RememberObjects$ Remembered | SubAbility$ DBCleanup
|
||||||
|
SVar:EffSModeContinuous:Mode$ Continuous | EffectZone$ Command | Affected$ Card.IsRemembered | MayPlay$ True | AffectedZone$ Exile | Description$ You may play that card this turn.
|
||||||
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
|
SVar:AIPreference:SacCost$Artifact.token
|
||||||
|
DeckHas:Ability$Token & Ability$Sacrifice
|
||||||
|
Oracle:Whenever Scion of Opulence or another nontoken Vampire you control dies, create a Treasure token. (It's an artifact with "{T}, Sacrifice this artifact: Add one mana of any color.")\n{R}, Sacrifice two artifacts: Exile the top card of your library. You may play that card this turn.
|
||||||
@@ -442,7 +442,7 @@ public final class CardScriptParser {
|
|||||||
"HasDevoured", "HasNotDevoured", "IsMonstrous", "IsNotMonstrous",
|
"HasDevoured", "HasNotDevoured", "IsMonstrous", "IsNotMonstrous",
|
||||||
"CostsPhyrexianMana", "IsRemembered", "IsNotRemembered",
|
"CostsPhyrexianMana", "IsRemembered", "IsNotRemembered",
|
||||||
"IsImprinted", "IsNotImprinted", "hasActivatedAbilityWithTapCost",
|
"IsImprinted", "IsNotImprinted", "hasActivatedAbilityWithTapCost",
|
||||||
"hasActivatedAbility", "hasManaAbility",
|
"hasActivatedAbility", "hasManaAbility", "withoutManaAbility",
|
||||||
"hasNonManaActivatedAbility", "NoAbilities", "HasCounters",
|
"hasNonManaActivatedAbility", "NoAbilities", "HasCounters",
|
||||||
"wasNotCast", "ChosenType", "IsNotChosenType", "IsCommander",
|
"wasNotCast", "ChosenType", "IsNotChosenType", "IsCommander",
|
||||||
"IsNotCommander","IsRenowned", "IsNotRenowned");
|
"IsNotCommander","IsRenowned", "IsNotRenowned");
|
||||||
|
|||||||
Reference in New Issue
Block a user