mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 19:58:00 +00:00
Merge remote-tracking branch 'upstream/master' into LOTR10
This commit is contained in:
@@ -815,6 +815,7 @@ public class Game {
|
||||
cc.removeEncodedCard(c);
|
||||
cc.removeRemembered(c);
|
||||
cc.removeAttachedTo(c);
|
||||
cc.removeAttachedCard(c);
|
||||
}
|
||||
triggerList.put(c.getZone().getZoneType(), null, c);
|
||||
getAction().ceaseToExist(c, false);
|
||||
|
||||
@@ -242,7 +242,7 @@ public class StaticEffect {
|
||||
}
|
||||
|
||||
// remove Types
|
||||
if (hasParam("AddType") || hasParam("AddAllCreatureTypes") || hasParam("RemoveType")) {
|
||||
if (hasParam("AddType") || hasParam("AddAllCreatureTypes") || hasParam("RemoveType") || hasParam("RemoveLandTypes")) {
|
||||
// the view is updated in GameAction#checkStaticAbilities to avoid flickering
|
||||
affectedCard.removeChangedCardTypes(getTimestamp(), ability.getId(), false);
|
||||
}
|
||||
|
||||
@@ -589,9 +589,6 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
||||
if (sa.hasParam("Tapped") || sa.isNinjutsu()) {
|
||||
gameCard.setTapped(true);
|
||||
}
|
||||
if (sa.hasParam("Untapped")) {
|
||||
gameCard.setTapped(false);
|
||||
}
|
||||
if (sa.hasParam("Transformed")) {
|
||||
if (gameCard.isTransformable()) {
|
||||
// need LKI before Animate does apply
|
||||
@@ -1302,8 +1299,6 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
||||
else if (destination.equals(ZoneType.Battlefield)) {
|
||||
if (sa.hasParam("Tapped")) {
|
||||
c.setTapped(true);
|
||||
} else if (sa.hasParam("Untapped")) {
|
||||
c.setTapped(false);
|
||||
}
|
||||
if (sa.hasAdditionalAbility("AnimateSubAbility")) {
|
||||
// need LKI before Animate does apply
|
||||
|
||||
@@ -361,8 +361,8 @@ public class SpellAbilityRestriction extends SpellAbilityVariables {
|
||||
public final boolean checkOtherRestrictions(final Card c, final SpellAbility sa, final Player activator) {
|
||||
final Game game = activator.getGame();
|
||||
|
||||
// legendary sorcery
|
||||
if (c.isSorcery() && c.getType().isLegendary() && CardLists.getValidCardCount(
|
||||
// 205.4e. Any instant or sorcery spell with the supertype "legendary" is subject to a casting restriction
|
||||
if ((c.isSorcery() || c.isInstant()) && c.getType().isLegendary() && CardLists.getValidCardCount(
|
||||
activator.getCardsIn(ZoneType.Battlefield),
|
||||
"Creature.Legendary,Planeswalker.Legendary", c.getController(), c, sa) <= 0) {
|
||||
return false;
|
||||
|
||||
@@ -1958,11 +1958,11 @@ public class CardDbCardMockTestCase extends CardMockTestCase {
|
||||
assertEquals(loyalUnicorn, legacyLoyalUnicorn);
|
||||
|
||||
// Selfless Squire: Available in Forge in COMMANDER 2021; Treasure Chest;
|
||||
// COMMANDER 2016
|
||||
// COMMANDER 2016; The Lord of the Rings: Tales of Middle-earth Commander
|
||||
String cnSelflessSquire = "Selfless Squire";
|
||||
PaperCard selflessSquire = this.cardDb.getCard(cnSelflessSquire);
|
||||
assertNotNull(selflessSquire);
|
||||
assertEquals(selflessSquire.getEdition(), "C21"); // Commander 2021
|
||||
assertEquals(selflessSquire.getEdition(), "LTC"); // The Lord of the Rings: Tales of Middle-earth Commander
|
||||
|
||||
PaperCard legacySelflessSquire = this.legacyCardDb.getCardFromEdition(cnSelflessSquire,
|
||||
LegacyCardDb.LegacySetPreference.Latest);
|
||||
@@ -2003,10 +2003,10 @@ public class CardDbCardMockTestCase extends CardMockTestCase {
|
||||
assertEquals(loyalUnicorn, legacyLoyalUnicorn);
|
||||
|
||||
// Selfless Squire: Available in Forge in COMMANDER 2021; Treasure Chest;
|
||||
// COMMANDER 2016
|
||||
// COMMANDER 2016; The Lord of the Rings: Tales of Middle-earth Commander
|
||||
selflessSquire = this.cardDb.getCard(cnSelflessSquire);
|
||||
assertNotNull(selflessSquire);
|
||||
assertEquals(selflessSquire.getEdition(), "C21");
|
||||
assertEquals(selflessSquire.getEdition(), "LTC");
|
||||
|
||||
legacySelflessSquire = this.legacyCardDb.getCardFromEdition(cnSelflessSquire,
|
||||
LegacyCardDb.LegacySetPreference.LatestCoreExp);
|
||||
|
||||
@@ -6190,7 +6190,7 @@ Kaya, Ghost Assassin|CN2|2
|
||||
1 City on Fire|MOM
|
||||
1 Etali, Primal Conquerer|MOM
|
||||
1 Into the Fire|MOM
|
||||
1 Invasion of Kaladheim|MOM
|
||||
1 Invasion of Kaldheim|MOM
|
||||
1 Invasion of Karsus|MOM
|
||||
1 Nahiri's Warcrafting|MOM
|
||||
1 Orthion, Hero of Lavabrink|MOM
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
Name:Danitha, New Benalia's Light
|
||||
ManaCost:1 G W
|
||||
Types:Legendary Creature Human Knight
|
||||
PT:2/3
|
||||
PT:2/2
|
||||
K:Vigilance
|
||||
K:Trample
|
||||
K:Lifelink
|
||||
S:Mode$ Continuous | Affected$ Aura.YouOwn,Equipment.YouOwn | Condition$ PlayerTurn | MayPlay$ True | MayPlayLimit$ 1 | EffectZone$ Battlefield | AffectedZone$ Graveyard | Description$ Once during each of your turns, you may cast an Aura or Equipment spell from your graveyard.
|
||||
DeckHints:Type$Aura|Equipment
|
||||
DeckHas:Ability$Graveyard|LifeGain
|
||||
Oracle:Vigilance, trample, lifelink\nOnce during each of your turns, you may cast an Aura or Equipment spell from your graveyard.
|
||||
Oracle:Vigilance, trample, lifelink\nOnce during each of your turns, you may cast an Aura or Equipment spell from your graveyard.
|
||||
|
||||
@@ -9,6 +9,6 @@ SVar:DBChooseCard:DB$ ChooseCard | ChoiceZone$ Hand | Choices$ Card.nonLand+IsRe
|
||||
SVar:DBChangeZone:DB$ ChangeZone | Defined$ ChosenCard | Origin$ Hand | Destination$ Exile | Imprint$ True | SubAbility$ DBEffect
|
||||
SVar:DBEffect:DB$ Effect | Duration$ Permanent | StaticAbilities$ MayPlay,CostsMore | RememberObjects$ Imprinted | ForgetOnMoved$ Exile | SubAbility$ DBCleanup
|
||||
SVar:MayPlay:Mode$ Continuous | Affected$ Card.IsRemembered | AffectedZone$ Exile | MayPlay$ True | MayPlayPlayer$ CardOwner
|
||||
SVar:CostsMore:Mode$ RaiseCost | ValidCard$ Card.IsRemembered | AffectedZone$ Exile | Type$ Spell | Amount$ 2
|
||||
SVar:CostsMore:Mode$ RaiseCost | ValidCard$ Card.IsRemembered+CastSa Spell.MayPlaySource | AffectedZone$ Exile | Type$ Spell | Amount$ 2
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearChosenCard$ True | ClearImprinted$ True
|
||||
Oracle:Flying\nWhen Elite Spellbinder enters the battlefield, look at target opponent's hand. You may exile a nonland card from it. For as long as that card remains exiled, its owner may play it. A spell cast this way costs {2} more to cast.
|
||||
|
||||
@@ -3,6 +3,6 @@ ManaCost:3 U U
|
||||
Types:Legendary Creature Human Wizard
|
||||
PT:2/4
|
||||
K:Flying
|
||||
A:AB$ ChangeZone | Cost$ U U | Origin$ Graveyard | Destination$ Battlefield | ValidTgts$ Aura.YouOwn | AttachedTo$ Self | ActivationPhases$ Upkeep | PlayerTurn$ True | IsPresent$ Aura.Attached | PresentCompare$ EQ0 | SpellDescription$ Return target Aura card from your graveyard to the battlefield attached to CARDNAME. Activate only during your upkeep and only if CARDNAME isn't enchanted.
|
||||
A:AB$ DestroyAll | Cost$ U U T | ValidCards$ Card.Aura+AttachedTo Card.Self | SpellDescription$ Destroy all Auras attached to CARDNAME.
|
||||
A:AB$ ChangeZone | Cost$ U U | Origin$ Graveyard | Destination$ Battlefield | ValidTgts$ Aura.YouOwn | AttachedTo$ Self | ActivationPhases$ Upkeep | PlayerTurn$ True | IsPresent$ Aura.Attached | PresentCompare$ EQ0 | SpellDescription$ Return target Aura card from your graveyard to the battlefield attached to CARDNAME. Activate only during your upkeep and only if NICKNAME isn't enchanted.
|
||||
A:AB$ DestroyAll | Cost$ U U T | ValidCards$ Card.Aura+AttachedTo Card.Self | SpellDescription$ Destroy all Auras attached to NICKNAME.
|
||||
Oracle:Flying\n{U}{U}: Return target Aura card from your graveyard to the battlefield attached to Hakim, Loreweaver. Activate only during your upkeep and only if Hakim isn't enchanted.\n{U}{U}, {T}: Destroy all Auras attached to Hakim.
|
||||
|
||||
@@ -4,9 +4,9 @@ Types:Legendary Creature Bird Advisor
|
||||
PT:2/3
|
||||
K:Flying
|
||||
A:AB$ Effect | Cost$ 0 | ValidTgts$ Instant.YouOwn,Sorcery.YouOwn | TgtZone$ Graveyard | TgtPrompt$ Select target instant or sorcery card in your graveyard | ActivationLimit$ 1 | RememberObjects$ Targeted | StaticAbilities$ MayPlay,RaiseCost | ReplacementEffects$ ReplaceGraveyard | SubAbility$ DBCleanup | SpellDescription$ You may cast target instant or sorcery card from your graveyard this turn. If that spell doesn't target a creature you control, it costs {8} more to cast this way. If that spell would be put into your graveyard, exile it instead. Activate only once each turn. (You still pay the spell's costs. Timing rules for the spell still apply.)
|
||||
SVar:MayPlay:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Graveyard | Description$ You may cast target instant or sorcery card from your graveyard this turn. (You still pay the spell's costs. Timing rules for the spell still apply.)
|
||||
SVar:RaiseCost:Mode$ RaiseCost | ValidCard$ Card.IsRemembered | ValidTarget$ Creature.YouCtrl+inZoneBattlefield | UnlessValidTarget$ True | Activator$ You | Type$ Spell | Amount$ 8 | EffectZone$ Command | Description$ If that spell doesn't target a creature you control, it costs {8} more to cast this way.
|
||||
SVar:ReplaceGraveyard:Event$ Moved | ValidCard$ Card.IsRemembered | Destination$ Graveyard | ReplaceWith$ MoveExile | Description$ If that spell would be put into your graveyard, exile it instead.
|
||||
SVar:MayPlay:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered+nonLand | AffectedZone$ Graveyard | Description$ You may cast target instant or sorcery card from your graveyard this turn. (You still pay the spell's costs. Timing rules for the spell still apply.)
|
||||
SVar:RaiseCost:Mode$ RaiseCost | ValidCard$ Card.IsRemembered+CastSa Spell.MayPlaySource | ValidTarget$ Creature.YouCtrl+inZoneBattlefield | UnlessValidTarget$ True | Activator$ You | Type$ Spell | Amount$ 8 | EffectZone$ Command | Description$ If that spell doesn't target a creature you control, it costs {8} more to cast this way.
|
||||
SVar:ReplaceGraveyard:Event$ Moved | ValidCard$ Card.IsRemembered+CastSa Spell.MayPlaySource | Destination$ Graveyard | ReplaceWith$ MoveExile | Description$ If that spell would be put into your graveyard, exile it instead.
|
||||
SVar:MoveExile:DB$ ChangeZone | Defined$ ReplacedCard | Origin$ All | Destination$ Exile | SubAbility$ ExileSelf
|
||||
SVar:ExileSelf:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
|
||||
@@ -4,6 +4,6 @@ Types:Instant
|
||||
A:SP$ ChangeZone | ValidTgts$ Permanent.nonLand | TgtPrompt$ Select target nonland permanent | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | SubAbility$ DBEffect | SpellDescription$ Exile target nonland permanent.
|
||||
SVar:DBEffect:DB$ Effect | Duration$ Permanent | StaticAbilities$ MayPlay,CostsMore | RememberObjects$ Remembered | ForgetOnMoved$ Exile | SubAbility$ DBCleanup | SpellDescription$ For as long as that card remains exiled, its owner may play it. A spell cast by an opponent this way costs {2} more to cast.
|
||||
SVar:MayPlay:Mode$ Continuous | Affected$ Card.IsRemembered | AffectedZone$ Exile | MayPlay$ True | MayPlayPlayer$ CardOwner
|
||||
SVar:CostsMore:Mode$ RaiseCost | ValidCard$ Card.IsRemembered | AffectedZone$ Exile | Type$ Spell | Amount$ 2 | Activator$ Opponent
|
||||
SVar:CostsMore:Mode$ RaiseCost | ValidCard$ Card.IsRemembered+CastSa Spell.MayPlaySource | AffectedZone$ Exile | Type$ Spell | Amount$ 2 | Activator$ Opponent
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
Oracle:Exile target nonland permanent. For as long as that card remains exiled, its owner may play it. A spell cast by an opponent this way costs {2} more to cast.
|
||||
|
||||
@@ -4,7 +4,7 @@ Types:Legendary Creature Human Warrior
|
||||
PT:3/3
|
||||
S:Mode$ Continuous | Affected$ Creature.YouCtrl | AddAbility$ Mana | Description$ Each creature you control has "{T}: Add one mana of any of this creature's colors. Spend this mana only to activate an ability of a creature. Activate only if this creature has another activated ability."
|
||||
SVar:Mana:AB$ ManaReflected | Cost$ T | Valid$ Defined.Self | ColorOrType$ Color | ReflectProperty$ Is | RestrictValid$ Activated.Creature+inZoneBattlefield | IsPresent$ Card.Self+hasOtherActivatedAbility | SpellDescription$ Add one mana of any of this creature's colors. Spend this mana only to activate an ability of a creature. Activate only if this creature has another activated ability.
|
||||
A:AB$ Mill | Cost$ W U B R G | NumCards$ 5 | RememberMilled$ True | SubAbility$ DBChangeZone | SpellDescription$ Mill five cards.
|
||||
A:AB$ Mill | Cost$ W U B R G T | NumCards$ 5 | RememberMilled$ True | SubAbility$ DBChangeZone | SpellDescription$ Mill five cards.
|
||||
SVar:DBChangeZone:DB$ ChangeZoneAll | ChangeType$ Creature.IsRemembered+hasNonManaActivatedAbility | Origin$ Graveyard,Exile | Destination$ Hand | SubAbility$ DBCleanup | SpellDescription$ Put all creature cards with activated abilities that aren't mana abilities from among the milled cards into your hand.
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
DeckHas:Ability$Mill
|
||||
|
||||
@@ -2,9 +2,9 @@ Name:Tomb of Horrors Adventurer
|
||||
ManaCost:5 U
|
||||
Types:Creature Elf Monk
|
||||
PT:4/4
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | ValidActivatingPlayer$ You | Execute$ TrigInitiative | TriggerDescription$ When CARDNAME enters the battlefield, you take the initiative.
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigInitiative | TriggerDescription$ When CARDNAME enters the battlefield, you take the initiative.
|
||||
SVar:TrigInitiative:DB$ TakeInitiative
|
||||
T:Mode$ SpellCast | ValidCard$ Card.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigCopy | ActivatorThisTurnCast$ EQ2 | TriggerDescription$ Whenever you cast your second spell each turn, copy it. If you've completed a dungeon, copy that spell twice instead. You may choose new targets for the copies. (A copy of a permanent spell becomes a token.)
|
||||
T:Mode$ SpellCast | ValidCard$ Card.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigCopy | ActivatorThisTurnCast$ EQ2 | ValidActivatingPlayer$ You | TriggerDescription$ Whenever you cast your second spell each turn, copy it. If you've completed a dungeon, copy that spell twice instead. You may choose new targets for the copies. (A copy of a permanent spell becomes a token.)
|
||||
SVar:TrigCopy:DB$ CopySpellAbility | Amount$ Y | Defined$ TriggeredSpellAbility | MayChooseTarget$ True
|
||||
SVar:X:PlayerCountPropertyYou$DungeonsCompleted
|
||||
SVar:Y:Count$Compare X GE1.2.1
|
||||
|
||||
@@ -181,7 +181,10 @@ ScryfallCode=LTC
|
||||
173 R Mentor of the Meek @Wei Guan
|
||||
174 U Palace Jailer @Brian Valeza
|
||||
175 U Path to Exile @Torgeir Fjereide
|
||||
176 R Selfless Squire @Kim Sokol
|
||||
177 U Sunset Revelry @Viko Menezes
|
||||
178 U Swords to Plowshares @Christina Kraus
|
||||
179 R Unbreakable Formation @Ben Wootten
|
||||
180 R Verge Rangers @Miguel Mercado
|
||||
181 C Village Bell-Ringer @Brian Valeza
|
||||
182 R Visions of Glory @Justyna Dura
|
||||
|
||||
@@ -52,7 +52,7 @@ ScryfallCode=LTR
|
||||
43 C Birthday Escape @David Álvarez
|
||||
44 R Borne Upon a Wind @Alexander Mokhov
|
||||
45 C Captain of Umbar @Wei Guan
|
||||
46 U Council's Deliberation @
|
||||
46 U Council's Deliberation @Viko Menezes
|
||||
47 C Deceive the Messenger @Tomas Duchek
|
||||
48 C Dreadful as the Storm @Daniel Correia
|
||||
49 U Elrond, Lord of Rivendell @Ryan Yee
|
||||
@@ -227,7 +227,7 @@ ScryfallCode=LTR
|
||||
218 R Pippin, Guard of the Citadel @Bartłomiej Gaweł
|
||||
219 U Prince Imrahil the Fair @Justyna Dura
|
||||
220 U Ringsight @Campbell White
|
||||
221 U Rise of the Witch-king @
|
||||
221 U Rise of the Witch-king @Andrea Piparo
|
||||
222 R Samwise Gamgee @Ekaterina Burmak
|
||||
223 M Saruman of Many Colors @Alexander Mokhov
|
||||
224 M Sauron, the Dark Lord @Kieran Yanner
|
||||
@@ -306,7 +306,7 @@ ScryfallCode=LTR
|
||||
297 R The Balrog, Flame of Udun @John Tedrick
|
||||
298 R Bilbo's Ring @Randy Gallegos
|
||||
299 M Gandalf the White @Leonardo Borazio
|
||||
300 M Saruman of Many Colors @
|
||||
300 M Saruman of Many Colors @Wonchun Choi
|
||||
302 R Boromir, Warden of the Tower @Anato Finnstark
|
||||
303 U Faramir, Field Commander @Dominik Mayer
|
||||
304 R Frodo, Sauron's Bane @Andreas Rocha
|
||||
@@ -332,10 +332,10 @@ ScryfallCode=LTR
|
||||
324 U Legolas, Counter of Kills @Anato Finnstark
|
||||
325 R Merry, Esquire of Rohan @Dominik Mayer
|
||||
326 R Pippin, Guard of the Citadel @Anato Finnstark
|
||||
327 R Samwise Gamgee @
|
||||
327 R Samwise Gamgee @Marko Manev
|
||||
328 M Saruman of Many Colors @Marko Manev
|
||||
329 M Sauron, the Dark Lord @Dominik Mayer & Anato Finnstark
|
||||
330 R Smeagol, Helpful Guide
|
||||
330 R Smeagol, Helpful Guide @Andreas Rocha
|
||||
331 M Tom Bombadil @Marko Manev
|
||||
332 U Nazgul @Wonchun Choi
|
||||
333 U Nazgul @Chris Cold
|
||||
@@ -458,7 +458,7 @@ ScryfallCode=LTR
|
||||
450 U Gollum, Patient Plotter @Marta Nael
|
||||
451 M The One Ring @Marta Nael
|
||||
649 U Denethor, Ruling Steward @Campbell White
|
||||
753 R Mines of Moria @
|
||||
753 R Mines of Moria @Lucas Terryn
|
||||
760 R Forge Anew @Craig J Spearing
|
||||
763 R Press the Enemy @
|
||||
764 R Rangers of Ithilien @Torgeir Fjereide
|
||||
|
||||
Reference in New Issue
Block a user