Merge remote-tracking branch 'core/master'

This commit is contained in:
Anthony Calosa
2021-11-17 07:33:49 +08:00
10 changed files with 81 additions and 3 deletions

View File

@@ -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)
Discord channel [here](https://discordapp.com/channels/267367946135928833/267742313390931968)
Discord channel [here](https://discord.gg/fWfNgCUNRq)
## Requirements / Tools

View File

@@ -20,6 +20,8 @@ import forge.game.mana.Mana;
import forge.game.player.Player;
import forge.game.spellability.OptionalCost;
import forge.game.spellability.SpellAbility;
import forge.game.spellability.SpellAbilityPredicates;
import forge.game.trigger.Trigger;
import forge.game.zone.Zone;
import forge.game.zone.ZoneType;
import forge.item.PaperCard;
@@ -380,6 +382,15 @@ public class CardProperty {
if (!card.equals(source.getEffectSource())) {
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) {
if (!card.canBeSacrificedBy((SpellAbility) spellAbility)) {
return false;

View 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.

View 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.")

View 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.)

View 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.

View 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.

View File

@@ -2,7 +2,7 @@ Name:Reclusive Taxidermist
ManaCost:1 G
Types:Creature Human Druid
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.
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.

View 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.

View File

@@ -442,7 +442,7 @@ public final class CardScriptParser {
"HasDevoured", "HasNotDevoured", "IsMonstrous", "IsNotMonstrous",
"CostsPhyrexianMana", "IsRemembered", "IsNotRemembered",
"IsImprinted", "IsNotImprinted", "hasActivatedAbilityWithTapCost",
"hasActivatedAbility", "hasManaAbility",
"hasActivatedAbility", "hasManaAbility", "withoutManaAbility",
"hasNonManaActivatedAbility", "NoAbilities", "HasCounters",
"wasNotCast", "ChosenType", "IsNotChosenType", "IsCommander",
"IsNotCommander","IsRenowned", "IsNotRenowned");