Merge remote-tracking branch 'upstream/master' into LOTR10

This commit is contained in:
Simisays
2023-06-12 17:51:47 +02:00
15 changed files with 30 additions and 31 deletions

View File

@@ -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);

View File

@@ -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);
}

View File

@@ -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

View File

@@ -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;

View File

@@ -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);

View File

@@ -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

View File

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

View File

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

View File

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

View File

@@ -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

View File

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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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