From 0d05aeb329f697beecde0838777d2a69a5f17760 Mon Sep 17 00:00:00 2001 From: Eduardo MG Date: Mon, 12 Feb 2024 18:00:35 -0600 Subject: [PATCH] Fixes to Kaldheim equipment, cast prevention, AI sacrificing Kaldheim (KHM) equipment that creates tokens uses an ETB (Enter the Battlefield) ability, not a cast ability. Cards that use maxCast(anytext)0 simply prevent any type of casting. The AI sometimes hangs when sacrificing creatures, preventing game continuation. To address this, a restriction has been added to allow only the human player to use this effect. Other bug fixes: Doomsday Perimeter Sergeant Imposing Grandeur Sacred armory text --- .../bin/Res/sets/primitives/borderline.txt | 36 +++++++++---------- projects/mtg/bin/Res/sets/primitives/mtg.txt | 22 ++++++------ 2 files changed, 28 insertions(+), 30 deletions(-) diff --git a/projects/mtg/bin/Res/sets/primitives/borderline.txt b/projects/mtg/bin/Res/sets/primitives/borderline.txt index 69e06d60a..8d888e98e 100644 --- a/projects/mtg/bin/Res/sets/primitives/borderline.txt +++ b/projects/mtg/bin/Res/sets/primitives/borderline.txt @@ -4885,7 +4885,8 @@ toughness=1 [/card] [card] name=Ashes of the Abhorrent -auto=lord(*|graveyard) onlymanaability +auto=lord(*[-land]|graveyard) changecost(colorless:+999) forcedalive +auto=lord(*[-land]|graveyard) -canPlayFromGraveyard auto=@movedto(*|graveyard) from(battlefield):life:1 controller text=Players can't cast spells from graveyards or activate abilities of cards in graveyards. -- Whenever a creature dies, you gain 1 life. mana={1}{W} @@ -25451,7 +25452,7 @@ type=Sorcery [/card] [card] name=Doomsday -auto=name(Search 5 cards) target(<5>*|mylibrary,mygraveyard) moveto(myreveal) and!( moveto(mylibrary) and!( transforms((,newability[all(*[-fresh]|mylibrary) moveto(exile)],newability[all(*|mygraveyard) moveto(exile)])) oneshot )! )! +auto=name(Search 5 cards) target(<5>other *|mylibrary,mygraveyard) moveto(myreveal) and!( moveto(mylibrary) and!( transforms((,newability[all(*[-fresh]|mylibrary) moveto(exile)],newability[all(*|mygraveyard) moveto(exile)])) oneshot )! )! auto=life:-halfuplifetotal controller text=Search your library and graveyard for five cards and exile the rest. Put the chosen cards on top of your library in any order. You lose half your life, rounded up. mana={B}{B}{B} @@ -26280,7 +26281,7 @@ toughness=2 [/card] [card] name=Draugr's Helm -autostack=may name(Create zombie and attach) pay({2}{B}) name(Create zombie and attach) moveTo(mybattlefield) and!( transforms((,newability[token(Zombie^Creature Zombie Berserker^2/2^black)],newability[rehook target(berserker[token;zombie;fresh]|mybattlefield)])) oneshot )! +auto=may name(Create zombie and attach) pay({2}{B}) name(Create zombie and attach) moveTo(mybattlefield) and!( transforms((,newability[token(Zombie^Creature Zombie Berserker^2/2^black)],newability[rehook target(berserker[token;zombie;fresh]|mybattlefield)])) oneshot )! auto={4}:equip auto=teach(creature) 2/2 auto=teach(creature) menace @@ -27758,7 +27759,7 @@ toughness=3 [/card] [card] name=Dwarven Hammer -autostack=may name(Create dwarf and attach) pay({2}) name(Create dwarf and attach) moveTo(mybattlefield) and!( transforms((,newability[token(Dwarf^Creature Dwarf Berserker^2/1^red)],newability[rehook target(berserker[token;dwarf;fresh]|mybattlefield)])) oneshot )! +auto=may name(Create dwarf and attach) pay({2}) name(Create dwarf and attach) moveTo(mybattlefield) and!( transforms((,newability[token(Dwarf^Creature Dwarf Berserker^2/1^red)],newability[rehook target(berserker[token;dwarf;fresh]|mybattlefield)])) oneshot )! auto={3}:equip auto=teach(creature) 3/0 auto=teach(creature) trample @@ -29025,7 +29026,7 @@ type=Instant [/card] [card] name=Elven Bow -autostack=may name(Create elf and attach) pay({2}) name(Create elf and attach) moveTo(mybattlefield) and!( transforms((,newability[token(Elf^Creature Elf Warrior^1/1^green)],newability[rehook target(warrior[token;elf;fresh]|mybattlefield)])) oneshot )! +auto=may name(Create elf and attach) pay({2}) name(Create elf and attach) moveTo(mybattlefield) and!( transforms((,newability[token(Elf^Creature Elf Warrior^1/1^green)],newability[rehook target(warrior[token;elf;fresh]|mybattlefield)])) oneshot )! auto={3}:equip auto=teach(creature) 1/2 auto=teach(creature) reach @@ -38620,7 +38621,7 @@ toughness=4 [/card] [card] name=Giant's Amulet -autostack=may name(Create giant and attach) pay({3}{U}) name(Create giant and attach) moveTo(mybattlefield) and!( transforms((,newability[token(Giant^Creature Giant Wizard^4/4^blue)],newability[rehook target(warrior[token;giant;fresh]|mybattlefield)])) oneshot )! +auto=may name(Create giant and attach) pay({3}{U}) name(Create giant and attach) moveTo(mybattlefield) and!( transforms((,newability[token(Giant^Creature Giant Wizard^4/4^blue)],newability[rehook target(warrior[token;giant;fresh]|mybattlefield)])) oneshot )! auto={2}:equip auto=teach(creature) 0/1 auto=teach(creature) transforms((,newability[this(variable{tapped}<1) opponentshroud])) @@ -39937,7 +39938,6 @@ toughness=5 [/card] [card] name=Gluttonous Guest -abilities=deathtouch auto=name(Create a blood) token(Blood) auto=@sacrificed(blood|mybattlefield):name(Gain 1 life) life:1 controller text=When Gluttonous Guest enters the battlefield, create a Blood token. (It's an artifact with "{1}, {T}, Discard a card, Sacrifice this artifact: Draw a card.") -- Whenever you sacrifice a Blood token, you gain 1 life. @@ -71998,7 +71998,7 @@ toughness=3 [/card] [card] name=Perimeter Sergeant -auto=_ATTACKING_all(human|myBattlefield) 1/0 ueot +auto=_ATTACKING_all(other human|myBattlefield) 1/0 ueot text=Whenever Perimeter Sergeant attacks, other Humans you control get +1/+0 until end of turn. mana={2}{W} type=Creature @@ -79382,7 +79382,7 @@ type=Instant [card] name=Reprobation target=creature -auto=loseabilities +auto=teach(creature) loseabilities auto=transforms((,setpower=0,settoughness=1)) auto=transforms((coward)) text=Enchant creature -- Enchanted creature loses all abilities and is a Coward creature with base power and toughness 0/1. (It keeps all supertypes but loses all other types and creature types.) @@ -92402,10 +92402,9 @@ toughness=2 name=Soulless Jailer auto=@movedto(*|battlefield) from(graveyard):all(trigger[to]) moveto(ownergraveyard) auto=@movedto(*|battlefield) from(exile):all(trigger[to]) moveto(ownerexile) -auto=maxCast(*[-creature]|graveyard)0 -auto=maxCast(*[-creature]|graveyard)0 opponent -auto=maxCast(*[-creature]|exile)0 -auto=maxCast(*[-creature]|exile)0 opponent +auto=lord(*[-land]|graveyard) changecost(colorless:+999) forcedalive +auto=lord(*[-land]|graveyard) -canPlayFromGraveyard +auto=lord(*[-land]|exile) changecost(colorless:+999) forcedalive text=Permanent cards in graveyards can't enter the battlefield. -- Players can't cast noncreature spells from graveyards or exile. mana={2} type=Artifact Creature @@ -106767,7 +106766,7 @@ toughness=5 [card] name=Urza, Lord High Artificer auto=create(Construct) -auto=aslongas(artifact[-tapped]|mybattlefield) {T(artifact|myBattlefield)}:add{U} +auto=aslongas(artifact[-tapped]|mybattlefield) {T(artifact|myBattlefield)}:add{U} restriction{compare(ishuman)~morethan~0} auto={5}:name(Shuffle and play) shuffle && reveal:1 optionone name(Reveal)if type(*|reveal)~morethan~0 then name(Check to play) target(*|reveal) transforms((,newability[if type(*|mybattlefield)~morethan~0 then castcard(putinplay)])) else name(do not play) target(*|reveal) donothing optiononeend optiontwo choice all(*|reveal) moveTo(exile) optiontwoend revealend text=When Urza, Lord High Artificer enters the battlefield, create a 0/0 colorless Construct artifact creature token with "This creature gets +1/+1 for each artifact you control." -- Tap an untapped artifact you control: Add {U}. -- {5}: Shuffle your library, then exile the top card. Until end of turn, you may play that card without paying its mana cost. mana={2}{U}{U} @@ -107053,7 +107052,7 @@ toughness=5 [/card] [card] name=Valkyrie's Sword -autostack=may name(Create angel and attach) pay({4}{W}) name(Create angel and attach) moveTo(mybattlefield) and!( transforms((,newability[token(Warrior^Creature Angel Warrior^4/4^white^flying^vigilance)],newability[rehook target(warrior[token;angel;fresh]|mybattlefield)])) oneshot )! +auto=may name(Create angel and attach) pay({4}{W}) name(Create angel and attach) moveTo(mybattlefield) and!( transforms((,newability[token(Warrior^Creature Angel Warrior^4/4^white^flying^vigilance)],newability[rehook target(warrior[token;angel;fresh]|mybattlefield)])) oneshot )! auto={3}:equip auto=teach(creature) 2/1 text=When Valkyrie's Sword enters the battlefield, you may pay {4}{W}. If you do, create a 4/4 white Angel Warrior creature token with flying and vigilance, then attach Valkyrie's Sword to it. -- Equipped creature gets +2/+1. -- Equip {3} @@ -110947,10 +110946,9 @@ type=Instant name=Weathered Runestone auto=@movedto(*[-land]|battlefield) from(graveyard):all(trigger[to]) moveto(ownergraveyard) auto=@movedto(*[-land]|battlefield) from(library):all(trigger[to]) moveto(ownerlibrary) -auto=maxCast(*|graveyard)0 -auto=maxCast(*|graveyard)0 opponent -auto=maxCast(*|library)0 -auto=maxCast(*|library)0 opponent +auto=lord(*[-land]|graveyard) changecost(colorless:+999) forcedalive +auto=lord(*[-land]|graveyard) -canPlayFromGraveyard +auto=lord(*[-land]|library) changecost(colorless:+999) forcedalive text=Nonland permanent cards in graveyards and libraries can't enter the battlefield. -- Players can't cast spells from graveyards or libraries. mana={2} type=Artifact diff --git a/projects/mtg/bin/Res/sets/primitives/mtg.txt b/projects/mtg/bin/Res/sets/primitives/mtg.txt index a3838a57e..1f766ccc9 100644 --- a/projects/mtg/bin/Res/sets/primitives/mtg.txt +++ b/projects/mtg/bin/Res/sets/primitives/mtg.txt @@ -6460,7 +6460,7 @@ toughness=1 [/card] [card] name=Ashnod's Altar -auto={S(creature|myBattlefield)}:Add{2} +auto={S(creature|myBattlefield)}:Add{2} restriction{compare(ishuman)~morethan~0} text=Sacrifice a creature: Add {2} to your mana pool. mana={3} type=Artifact @@ -86173,11 +86173,11 @@ subtype=Aura [/card] [card] name=Phyrexian Altar -auto=aslongas(creature|mybattlefield) {S(creature|myBattlefield)}:Add{W} -auto=aslongas(creature|mybattlefield) {S(creature|myBattlefield)}:Add{U} -auto=aslongas(creature|mybattlefield) {S(creature|myBattlefield)}:Add{B} -auto=aslongas(creature|mybattlefield) {S(creature|myBattlefield)}:Add{R} -auto=aslongas(creature|mybattlefield) {S(creature|myBattlefield)}:Add{G} +auto=aslongas(creature|mybattlefield) {S(creature|myBattlefield)}:Add{W} restriction{compare(ishuman)~morethan~0} +auto=aslongas(creature|mybattlefield) {S(creature|myBattlefield)}:Add{U} restriction{compare(ishuman)~morethan~0} +auto=aslongas(creature|mybattlefield) {S(creature|myBattlefield)}:Add{B} restriction{compare(ishuman)~morethan~0} +auto=aslongas(creature|mybattlefield) {S(creature|myBattlefield)}:Add{R} restriction{compare(ishuman)~morethan~0} +auto=aslongas(creature|mybattlefield) {S(creature|myBattlefield)}:Add{G} restriction{compare(ishuman)~morethan~0} text=Sacrifice a creature: Add one mana of any color to your mana pool. mana={3} type=Artifact @@ -96540,9 +96540,9 @@ type=Sorcery name=Roilmage's Trick auto=all(creature|opponentbattlefield) -converge/0 ueot auto=draw:1 controller -text=Converge -- Creatures your opponents control get -X/-0 until end of turn, where X is the number of colors of mana spent to cast Roilmage's Trick. +text=Converge -- Creatures your opponents control get -X/-0 until end of turn, where X is the number of colors of mana spent to cast this spell. -- Draw a card. mana={3}{U} -type=Sorcery +type=Instant [/card] [card] name=Roil's Retribution @@ -98073,7 +98073,7 @@ toughness=3 [card] name=Sacred Armory auto={2}:1/0 target(creature) -text={2}: Target creatures gets +1/+0 until end of turn. +text={2}: Target creature gets +1/+0 until end of turn. mana={2} type=Artifact [/card] @@ -110394,7 +110394,7 @@ subtype=Aura [/card] [card] name=Spawning Pit -auto=aslongas(creature|mybattlefield) {S(creature|myBattlefield)}:counter(0/0,1,Charge) +auto=aslongas(creature|mybattlefield) {S(creature|myBattlefield)}:counter(0/0,1,Charge) restriction{compare(ishuman)~morethan~0} auto={1}{C(0/0,-2,Charge)}:token(Spawn,artifact creature spawn,2/2) text=Sacrifice a creature: Put a charge counter on Spawning Pit. -- {1}, Remove two charge counters from Spawning Pit: Put a 2/2 colorless Spawn artifact creature token onto the battlefield. mana={2} @@ -131836,7 +131836,7 @@ toughness=6 [/card] [card] name=War Cadence -auto={X}{U}:name(Block X Cost) thisforeach(X) all(creature) transforms((,newability[blockcost:1])) ueot +auto={X}{R}:name(Block X Cost) thisforeach(X) all(creature) transforms((,newability[blockcost:1])) ueot text={X}{R}: This turn, creatures can't block unless their controller pays {X} for each blocking creature he or she controls. mana={2}{R} type=Enchantment