Skip to content

Commit

Permalink
Third dozen of FDN/J25 cards (#6463)
Browse files Browse the repository at this point in the history
  • Loading branch information
Fulgur14 authored Oct 29, 2024
1 parent 3569dd3 commit d54b48e
Show file tree
Hide file tree
Showing 17 changed files with 140 additions and 7 deletions.
2 changes: 2 additions & 0 deletions forge-game/src/main/java/forge/game/card/CounterEnumType.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ public enum CounterEnumType {

AWAKENING("AWAKE", 0, 231, 79),

BAIT("BAIT", 120, 100, 60),

BLAZE("BLAZE", 255, 124, 82),

BLESSING("BLESS", 251, 0, 94),
Expand Down
4 changes: 4 additions & 0 deletions forge-game/src/main/java/forge/game/cost/CostTapType.java
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,10 @@ public final boolean canPay(final SpellAbility ability, final Player payer, fina
String type = this.getType();
boolean sameType = false;

if (type.equals("OriginalHost")) {
return ability.getOriginalHost().canTap();
}

if (type.contains(".sharesCreatureTypeWith")) {
sameType = true;
type = TextUtil.fastReplace(type, ".sharesCreatureTypeWith", "");
Expand Down
2 changes: 1 addition & 1 deletion forge-gui/res/cardsfolder/a/ace_fearless_rebel.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ Name:Ace, Fearless Rebel
ManaCost:3 G
Types:Legendary Creature Human Rebel
PT:2/2
T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigImmediateTrig | OptionalDecider$ You | TriggerDescription$ Nitro-9 — Whenever CARDNAME attacks, you may sacrifice an artifact. When you do, put a +1/+1 counter on CARDNAME, then it fights up to one target creature defending player controls.
T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigImmediateTrig | TriggerDescription$ Nitro-9 — Whenever CARDNAME attacks, you may sacrifice an artifact. When you do, put a +1/+1 counter on CARDNAME, then it fights up to one target creature defending player controls.
SVar:TrigImmediateTrig:AB$ ImmediateTrigger | Cost$ Sac<1/Artifact> | Execute$ TrigPutCounter | TriggerDescription$ When you do, put a +1/+1 counter on CARDNAME, then it fights up to one target creature defending player controls.
SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBFight
SVar:DBFight:DB$ Fight | Defined$ Self | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Creature.ControlledBy Spawner>TriggeredDefendingPlayer | TgtPrompt$ Select up to one target creature defending player controls
Expand Down
12 changes: 12 additions & 0 deletions forge-gui/res/cardsfolder/upcoming/alesha_who_laughs_at_fate.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
Name:Alesha, Who Laughs at Fate
ManaCost:1 B R
Types:Legendary Creature Human Warrior
PT:2/2
K:First Strike
T:Mode$ Attacks | ValidCard$ Creature.Self | Execute$ TrigPutCounter | TriggerDescription$ Whenever NICKNAME attacks, put a +1/+1 counter on it.
SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | CheckSVar$ RaidTest | Execute$ TrigChangeZone | TriggerDescription$ Raid — At the beginning of your end step, if you attacked this turn, return target creature card with mana value less than or equal to NICKNAME's power from your graveyard to the battlefield.
SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ValidTgts$ Creature.YouOwn+cmcLEX | TgtPrompt$ Select target creature card with mana value less than or equal to Alesha's power
SVar:RaidTest:Count$AttackersDeclared
SVar:X:Count$CardPower
Oracle:First strike\nWhenever Alesha attacks, put a +1/+1 counter on it.\nRaid — At the beginning of your end step, if you attacked this turn, return target creature card with mana value less than or equal to Alesha's power from your graveyard to the battlefield.
6 changes: 6 additions & 0 deletions forge-gui/res/cardsfolder/upcoming/bulk_up.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Name:Bulk Up
ManaCost:1 R
Types:Instant
A:SP$ Pump | ValidTgts$ Creature | NumAtt$ Double | StackDescription$ REP target creature_{c:Targeted} | SpellDescription$ Double target creature's power until end of turn.
K:Flashback:4 R R
Oracle:Double target creature's power until end of turn.\nFlashback {4}{R}{R} (You may cast this card from your graveyard for its flashback cost. Then exile it.)
6 changes: 6 additions & 0 deletions forge-gui/res/cardsfolder/upcoming/fiery_annihilation.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Name:Fiery Annihilation
ManaCost:2 R
Types:Instant
A:SP$ DealDamage | NumDmg$ 5 | ValidTgts$ Creature | TgtPrompt$ Select target creature | ReplaceDyingDefined$ Targeted | SubAbility$ DBChangeZone | SpellDescription$ CARDNAME deals 5 damage to target creature. Exile up to one target Equipment attached to that creature. If that creature would die this turn, exile it instead.
SVar:DBChangeZone:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Equipment.AttachedTo ParentTarget | TargetMin$ 0 | TargetMax$ 1
Oracle:Fiery Annihilation deals 5 damage to target creature. Exile up to one target Equipment attached to that creature. If that creature would die this turn, exile it instead.
12 changes: 12 additions & 0 deletions forge-gui/res/cardsfolder/upcoming/fishing_pole.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
Name:Fishing Pole
ManaCost:1
Types:Artifact Equipment
S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddAbility$ FishingPoleBaiting | Description$ Equipped creature has "{1}, {T}, Tap CARDNAME: Put a bait counter on CARDNAME."
SVar:FishingPoleBaiting:AB$ PutCounter | Cost$ 1 T tapXType<1/OriginalHost/Fishing Pole> | CounterType$ BAIT | CounterNum$ 1 | Defined$ OriginalHost | SpellDescription$ Put a bait counter on ORIGINALHOST.
T:Mode$ Untaps | ValidCard$ Creature.EquippedBy | TriggerZones$ Battlefield | Execute$ TrigRemoveCounter | TriggerDescription$ Whenever equipped creature becomes untapped, remove a bait counter from this Equipment. If you do, create a 1/1 blue Fish creature token.
SVar:TrigRemoveCounter:DB$ RemoveCounter | Defined$ Self | CounterType$ BAIT | CounterNum$ 1 | RememberRemoved$ True | SubAbility$ DBToken
SVar:DBToken:DB$ Token | TokenAmount$ 1 | ConditionCheckSVar$ X | ConditionSVarCompare$ GE1 | TokenScript$ u_1_1_fish | TokenOwner$ You | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:Count$RememberedSize
K:Equip:2
Oracle:Equipped creature has "{1}, {T}, Tap Fishing Pole: Put a bait counter on Fishing Pole."\nWhenever equipped creature becomes untapped, remove a bait counter from this Equipment. If you do, create a 1/1 blue Fish creature token.\nEquip {2} ({2}: Attach to target creature you control. Equip only as a sorcery.)
12 changes: 12 additions & 0 deletions forge-gui/res/cardsfolder/upcoming/gornog_the_red_reaper.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
Name:Gornog, the Red Reaper
ManaCost:2 R
Types:Legendary Creature Minotaur Warrior
PT:2/3
K:Haste
S:Mode$ CantBlockBy | ValidAttacker$ Creature.Warrior | ValidBlocker$ Creature.Coward | Description$ Cowards can't block Warriors.
T:Mode$ AttackersDeclaredOneTarget | AttackedTarget$ Player | ValidAttackers$ Creature.Warrior+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigAnimate | TriggerDescription$ Whenever one or more Warriors you control attack a player, target creature that player controls becomes a Coward.
SVar:TrigAnimate:DB$ Animate | ValidTgts$ Creature | TargetsWithDefinedController$ TriggeredAttackedTarget | TgtPrompt$ Select target creature that player controls | Types$ Coward | RemoveCreatureTypes$ True | Duration$ Permanent
S:Mode$ Continuous | Affected$ Creature.Warrior+attacking+YouCtrl | AddPower$ X | Description$ Attacking Warriors you control get +X/+0, where X is the number of Cowards your opponents control.
SVar:X:Count$Valid Coward.OppCtrl
SVar:PlayMain1:TRUE
Oracle:Haste\nCowards can't block Warriors.\nWhenever one or more Warriors you control attack a player, target creature that player controls becomes a Coward.\nAttacking Warriors you control get +X/+0, where X is the number of Cowards your opponents control.
10 changes: 10 additions & 0 deletions forge-gui/res/cardsfolder/upcoming/grappling_kraken.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
Name:Grappling Kraken
ManaCost:4 U U
Types:Creature Kraken
PT:5/6
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Land.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigTap | TriggerDescription$ Landfall — Whenever a land you control enters, tap target creature an opponent controls and put a stun counter on it. (If a permanent with a stun counter would become untapped, remove one from it instead.)
SVar:TrigTap:DB$ Tap | ValidTgts$ Creature.OppCtrl | SubAbility$ DBCounter
SVar:DBCounter:DB$ PutCounter | Defined$ Targeted | CounterType$ Stun | CounterNum$ 1
DeckHas:Ability$Counters
SVar:BuffedBy:Land
Oracle:Landfall — Whenever a land you control enters, tap target creature an opponent controls and put a stun counter on it. (If a permanent with a stun counter would become untapped, remove one from it instead.)
8 changes: 8 additions & 0 deletions forge-gui/res/cardsfolder/upcoming/guarded_heir.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
Name:Guarded Heir
ManaCost:5 W
Types:Creature Human Noble
PT:1/1
K:Lifelink
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When this creature enters, create two 3/3 white Knight creature tokens.
SVar:TrigToken:DB$ Token | TokenAmount$ 2 | TokenScript$ w_3_3_knight | TokenOwner$ You
Oracle:Lifelink (Damage dealt by this creature also causes you to gain that much life.)\nWhen this creature enters, create two 3/3 white Knight creature tokens.
8 changes: 8 additions & 0 deletions forge-gui/res/cardsfolder/upcoming/high_fae_trickster.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
Name:High Fae Trickster
ManaCost:3 U
Types:Creature Faerie Wizard
PT:4/2
K:Flash
K:Flying
S:Mode$ CastWithFlash | ValidCard$ Card | ValidSA$ Spell | Caster$ You | Description$ You may cast spells as though they had flash.
Oracle:Flash (You may cast this spell any time you could cast an instant.)\nFlying\nYou may cast spells as though they had flash.
12 changes: 12 additions & 0 deletions forge-gui/res/cardsfolder/upcoming/high_society_hunter.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
Name:High-Society Hunter
ManaCost:3 B B
Types:Creature Vampire Noble
PT:5/3
K:Flying
T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever this creature attacks, you may sacrifice another creature. If you do, put a +1/+1 counter on this creature.
SVar:TrigPutCounter:AB$ PutCounter | Cost$ Sac<1/Creature.Other/another creature> | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1
T:Mode$ ChangesZone | ValidCard$ Creature.nonToken+Other | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigDraw | TriggerZones$ Battlefield | TriggerDescription$ Whenever another nontoken creature dies, draw a card.
SVar:TrigDraw:DB$ Draw
SVar:HasAttackEffect:TRUE
DeckHas:Ability$Counters|Sacrifice
Oracle:Flying\nWhenever this creature attacks, you may sacrifice another creature. If you do, put a +1/+1 counter on this creature.\nWhenever another nontoken creature dies, draw a card.
7 changes: 7 additions & 0 deletions forge-gui/res/cardsfolder/upcoming/hungry_megasloth.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Name:Hungry Megasloth
ManaCost:2 G
Types:Creature Sloth Beast
PT:3/3
K:Reach
A:AB$ PutCounter | Cost$ 2 T | CounterType$ P1P1 | CounterNum$ 1 | SpellDescription$ Put a +1/+1 counter on CARDNAME.
Oracle:Reach (This creature can block creatures with flying.)\n{2}, {T}: Put a +1/+1 counter on Hungry Megasloth.
11 changes: 11 additions & 0 deletions forge-gui/res/cardsfolder/upcoming/hurska_sweet_tooth.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
Name:Hurska Sweet-Tooth
ManaCost:2 G
Types:Legendary Creature Bear
PT:3/3
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ Whenever CARDNAME attacks, create a Food token. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.")
SVar:TrigToken:DB$ Token | TokenScript$ c_a_food_sac
T:Mode$ LifeGained | ValidPlayer$ You | Execute$ TrigImmediateTrig | TriggerZones$ Battlefield | TriggerDescription$ Whenever you gain life, you may pay {G/W}. When you do, target creature gets +X/+X until end of turn, where X is the amount of life you gained.
SVar:TrigImmediateTrig:AB$ ImmediateTrigger | Cost$ GW | Execute$ TrigPump | TriggerDescription$ When you do, target creature gets +X/+X until end of turn, where X is the amount of life you gained.
SVar:TrigPump:DB$ Pump | ValidTgts$ Creature | NumAtt$ Spawner>TriggerCount$LifeAmount | NumDef$ Spawner>TriggerCount$LifeAmount
DeckHas:Ability$Sacrifice|Token & Type$Food|Artifact
Oracle:Whenever Hurska Sweet-Tooth attacks, create a Food token. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.")\nWhenever you gain life, you may pay {G/W}. When you do, target creature gets +X/+X until end of turn, where X is the amount of life you gained.
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
Name:Inspiration from Beyond
ManaCost:2 U
Types:Sorcery
A:SP$ Mill | NumCards$ 3 | Defined$ You | SubAbility$ DBChangeZone | SpellDescription$ Mill three cards, then return an instant or sorcery card from your graveyard to your hand.
SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | Mandatory$ True | ChangeType$ Instant.YouOwn,Sorcery.YouOwn | ChangeNum$ 1 | Hidden$ True
K:Flashback:5 U U
DeckHas:Ability$Graveyard
Oracle:Mill three cards, then return an instant or sorcery card from your graveyard to your hand.\nFlashback {5}{U}{U} (You may cast this card from your graveyard for its flashback cost. Then exile it.)
6 changes: 6 additions & 0 deletions forge-gui/res/tokenscripts/w_3_3_knight.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Name:Knight Token
ManaCost:no cost
Colors:white
Types:Creature Knight
PT:3/3
Oracle:
21 changes: 15 additions & 6 deletions forge-gui/src/main/java/forge/player/HumanCostDecision.java
Original file line number Diff line number Diff line change
Expand Up @@ -1141,16 +1141,18 @@ public PaymentDecision visit(final CostSacrifice cost) {
String type = cost.getType();

if (cost.payCostFromSource()) {
if (source.getController() == ability.getActivatingPlayer() && source.canBeSacrificedBy(ability, isEffect())) {
return mandatory || confirmAction(cost, Localizer.getInstance().getMessage("lblSacrificeCardConfirm", CardTranslation.getTranslatedName(source.getName()))) ? PaymentDecision.card(source) : null;
if (source.getController() == ability.getActivatingPlayer() && source.canBeSacrificedBy(ability, isEffect()) &&
(mandatory || confirmAction(cost, Localizer.getInstance().getMessage("lblSacrificeCardConfirm", CardTranslation.getTranslatedName(source.getName()))))) {
return PaymentDecision.card(source);
}
return null;
}

if (type.equals("OriginalHost")) {
Card host = ability.getOriginalHost();
if (host.getController() == ability.getActivatingPlayer() && host.canBeSacrificedBy(ability, isEffect())) {
return confirmAction(cost, Localizer.getInstance().getMessage("lblSacrificeCardConfirm", CardTranslation.getTranslatedName(host.getName()))) ? PaymentDecision.card(host) : null;
if (host.getController() == ability.getActivatingPlayer() && host.canBeSacrificedBy(ability, isEffect()) &&
confirmAction(cost, Localizer.getInstance().getMessage("lblSacrificeCardConfirm", CardTranslation.getTranslatedName(host.getName())))) {
return PaymentDecision.card(host);
}
return null;
}
Expand Down Expand Up @@ -1218,6 +1220,14 @@ public PaymentDecision visit(final CostTapType cost) {
String type = cost.getType();
final String amount = cost.getAmount();

if (type.equals("OriginalHost")) {
Card host = ability.getOriginalHost();
if (host.canTap()) {
return PaymentDecision.card(host);
}
return null;
}

boolean sameType = false;
if (type.contains(".sharesCreatureTypeWith")) {
sameType = true;
Expand All @@ -1232,8 +1242,7 @@ public PaymentDecision visit(final CostTapType cost) {
type = TextUtil.fastReplace(type, TextUtil.concatNoSpace("+withTotalPowerGE", totalP), "");
}

CardCollection typeList = CardLists.getValidCards(player.getCardsIn(ZoneType.Battlefield), type.split(";"), player,
source, ability);
CardCollection typeList = CardLists.getValidCards(player.getCardsIn(ZoneType.Battlefield), type.split(";"), player, source, ability);
typeList = CardLists.filter(typeList, ability.isCrew() ? Presets.CAN_CREW : Presets.CAN_TAP);

Integer c = null;
Expand Down

0 comments on commit d54b48e

Please sign in to comment.