Fixed primitives, fixed some possible crashes on Commander Format.

This commit is contained in:
Vittorio Alfieri
2021-09-03 00:33:53 +02:00
parent 001cea95bd
commit 236f677f2a
4 changed files with 39 additions and 17 deletions
+4 -1
View File
@@ -2,8 +2,11 @@
## [master] (https://github.com/WagicProject/wagic/tree/master) ## [master] (https://github.com/WagicProject/wagic/tree/master)
### 03/09/21
- *Committed:* Fixed primitives, fixed some possible crashes on Commander Format. ([Vitty85](https://github.com/Vitty85))
### 02/09/21 ### 02/09/21
- *Committed:* Added/fixed primitives, updated the "missing_cards_by_sets" folder, fixed several crash on Commander Format, fixed a possible crash using "and!()!" with "imprint", added a new macros "_REBOUND_" and "_GOAD_" related to rebound and goad abilities and refactored all cards using them, implemented a new keywords "haunt", "hasprey", "preyname" and "isprey" related the haunting ability and improved all cards using it, Added "commander" and "\*" to HINT castpriority for AI decks in order to allow the user to give a cast priority to commanders. ([Vitty85](https://github.com/Vitty85)) - *Committed:* Added/fixed primitives, updated the "missing_cards_by_sets" folder, fixed several crash on Commander Format, fixed a possible crash using "and!()!" with "imprint", added a new macros "_REBOUND_" and "_GOAD_" related to rebound and goad abilities and refactored all cards using them, implemented a new keywords "haunt", "hasprey", "preyname" and "isprey" related the haunting ability and improved all cards using it, Added "commander" and "\*" to HINT castpriority for AI decks in order to allow the user to give a cast priority to commanders. https://github.com/WagicProject/wagic/commit/001cea95bd501ca47b6510037af2725508f321d5 ([Vitty85](https://github.com/Vitty85))
### 31/08/21 ### 31/08/21
- *Committed:* Added/fixed primitives, updated the "missing_cards_by_sets" folder, improved all cards with replicate (now they use a special version of multikicker but they don't count as kicked spell), improved all cards with "fizzle" and "fizzleto" ability and improved engine for "fizzle" and "nofizzle" ability (e.g. now it's possible to grant a card the nofizzle ability on stack), added new keyword "mycolnum" to count the number colors of a card. https://github.com/WagicProject/wagic/commit/54d0c3203551b377146d4bbe7d5af0c642b1058e ([Vitty85](https://github.com/Vitty85)) - *Committed:* Added/fixed primitives, updated the "missing_cards_by_sets" folder, improved all cards with replicate (now they use a special version of multikicker but they don't count as kicked spell), improved all cards with "fizzle" and "fizzleto" ability and improved engine for "fizzle" and "nofizzle" ability (e.g. now it's possible to grant a card the nofizzle ability on stack), added new keyword "mycolnum" to count the number colors of a card. https://github.com/WagicProject/wagic/commit/54d0c3203551b377146d4bbe7d5af0c642b1058e ([Vitty85](https://github.com/Vitty85))
@@ -17677,9 +17677,10 @@ subtype=Aura
[/card] [/card]
[card] [card]
name=Dream Devourer name=Dream Devourer
auto=@foretold(*|myzones):2/0 ueot auto=lord(*[-land]|myhand) foretell
auto=lord(*[-foretell;-land]|myhand) transforms((,newability[foretell],newability[{2}:name(Pay 2 and exile face-down) name(Pay 2 and exile face-down) doforetell myturnonly])) auto={2}:name(Foretell a card) target(*[-land]|myhand) doforetell myturnonly
auto=@each upkeep:all(*[foretold;-foretell]|myexile) transforms((,newability[this(variable{canforetellcast}>0) canplayfromexile],newability[this(variable{canforetellcast}>0) changecost(colorless:-2) forcedalive])) ueot auto=@foretold(*|myzones):name(Gains 2/0) 2/0 ueot
auto=@each upkeep restriction{type(*[foretold;-foretell]|myexile)~morethan~0}:all(*[foretold;-foretell]|myexile) transforms((,newability[this(variable{canforetellcast}>0) canplayfromexile],newability[this(variable{canforetellcast}>0) changecost(colorless:-2) forcedalive])) ueot
text=Each nonland card in your hand without foretell has foretell. Its foretell cost is equal to its mana cost reduced by {2}. (During your turn, you may pay {2} and exile it from your hand face down. Cast it on a later turn for its foretell cost.) -- Whenever you foretell a card, Dream Devourer gets +2/+0 until end of turn. text=Each nonland card in your hand without foretell has foretell. Its foretell cost is equal to its mana cost reduced by {2}. (During your turn, you may pay {2} and exile it from your hand face down. Cast it on a later turn for its foretell cost.) -- Whenever you foretell a card, Dream Devourer gets +2/+0 until end of turn.
mana={1}{B} mana={1}{B}
type=Creature type=Creature
@@ -19251,7 +19252,7 @@ restriction=type(creature[attacking]|myBattlefield)~equalto~0
autohand={2}{R}{R} restriction{type(creature[attacking]|myBattlefield)~equalto~2}:name(Cast Embercleave for 2 less) name(Cast Embercleave for 2 less) activate castcard(alternative) autohand={2}{R}{R} restriction{type(creature[attacking]|myBattlefield)~equalto~2}:name(Cast Embercleave for 2 less) name(Cast Embercleave for 2 less) activate castcard(alternative)
autohand={1}{R}{R} restriction{type(creature[attacking]|myBattlefield)~equalto~3}:name(Cast Embercleave for 3 less) name(Cast Embercleave for 3 less) activate castcard(alternative) autohand={1}{R}{R} restriction{type(creature[attacking]|myBattlefield)~equalto~3}:name(Cast Embercleave for 3 less) name(Cast Embercleave for 3 less) activate castcard(alternative)
autohand={R}{R} restriction{type(creature[attacking]|myBattlefield)~morethan~3}:name(Cast Embercleave for 4 less) name(Cast Embercleave for 4 less) activate castcard(alternative) autohand={R}{R} restriction{type(creature[attacking]|myBattlefield)~morethan~3}:name(Cast Embercleave for 4 less) name(Cast Embercleave for 4 less) activate castcard(alternative)
auto=aslongas(parents) name(Attach to creature) rehook target(creature|myBattlefield) <1 auto=name(Attach to creature) rehook target(creature|myBattlefield)
auto=teach(creature) double strike auto=teach(creature) double strike
auto=teach(creature) trample auto=teach(creature) trample
auto=teach(creature) 1/1 auto=teach(creature) 1/1
@@ -35254,7 +35255,7 @@ type=Sorcery
[/card] [/card]
[card] [card]
name=Kindred Summons name=Kindred Summons
auto=activatechooseatype transforms((,newability[reveal:plibrarycount optionone name(Get creatures) target(<type:creature[chosentype]:myBattlefield>creature[chosentype]|reveal) moveto(ownerlibrary) and!( becomes(tobecast) ueot )! optiononeend optiontwo name(put back) all(*|reveal) moveto(mylibrary) and!( shuffle )! optiontwoend afterrevealed all(tobecast|mylibrary) moveto(ownerlibrary) and!( moveTo(myBattlefield) )! afterrevealedend revealend])) oneshot activatechooseend auto=chooseatype if type(creature[chosentype]|myBattlefield)~equalto~1 then name(Search 1 creature) name(Search 1 creature) target(<1>creature[chosentype]|mylibrary) moveto(myBattlefield) else if type(creature[chosentype]|myBattlefield)~equalto~2 then name(Search 2 creatures) name(Search 2 creatures) target(<2>creature[chosentype]|mylibrary) moveto(myBattlefield) else if type(creature[chosentype]|myBattlefield)~equalto~3 then name(Search 3 creatures) name(Search 3 creatures) target(<3>creature[chosentype]|mylibrary) moveto(myBattlefield) else if type(creature[chosentype]|myBattlefield)~equalto~4 then name(Search 4 creatures) name(Search 4 creatures) target(<4>creature[chosentype]|mylibrary) moveto(myBattlefield) else if type(creature[chosentype]|myBattlefield)~equalto~5 then name(Search 5 creatures) name(Search 5 creatures) target(<5>creature[chosentype]|mylibrary) moveto(myBattlefield) else if type(creature[chosentype]|myBattlefield)~equalto~6 then name(Search 6 creatures) name(Search 6 creatures) target(<6>creature[chosentype]|mylibrary) moveto(myBattlefield) else if type(creature[chosentype]|myBattlefield)~equalto~7 then name(Search 7 creatures) name(Search 7 creatures) target(<7>creature[chosentype]|mylibrary) moveto(myBattlefield) else if type(creature[chosentype]|myBattlefield)~equalto~8 then name(Search 8 creatures) name(Search 8 creatures) target(<8>creature[chosentype]|mylibrary) moveto(myBattlefield) else if type(creature[chosentype]|myBattlefield)~equalto~9 then name(Search 9 creatures) name(Search 9 creatures) target(<9>creature[chosentype]|mylibrary) moveto(myBattlefield) else if type(creature[chosentype]|myBattlefield)~equalto~10 then name(Search 10 creatures) name(Search 10 creatures) target(<10>creature[chosentype]|mylibrary) moveto(myBattlefield) else if type(creature[chosentype]|myBattlefield)~equalto~11 then name(Search 11 creatures) name(Search 11 creatures) target(<11>creature[chosentype]|mylibrary) moveto(myBattlefield) else if type(creature[chosentype]|myBattlefield)~equalto~12 then name(Search 12 creatures) name(Search 12 creatures) target(<12>creature[chosentype]|mylibrary) moveto(myBattlefield) else if type(creature[chosentype]|myBattlefield)~equalto~13 then name(Search 13 creatures) name(Search 13 creatures) target(<13>creature[chosentype]|mylibrary) moveto(myBattlefield) else if type(creature[chosentype]|myBattlefield)~equalto~14 then name(Search 14 creatures) name(Search 14 creatures) target(<14>creature[chosentype]|mylibrary) moveto(myBattlefield) else if type(creature[chosentype]|myBattlefield)~equalto~15 then name(Search 15 creatures) name(Search 15 creatures) target(<15>creature[chosentype]|mylibrary) moveto(myBattlefield) else if type(creature[chosentype]|myBattlefield)~equalto~16 then name(Search 16 creatures) name(Search 16 creatures) target(<16>creature[chosentype]|mylibrary) moveto(myBattlefield) else if type(creature[chosentype]|myBattlefield)~equalto~17 then name(Search 17 creatures) name(Search 17 creatures) target(<17>creature[chosentype]|mylibrary) moveto(myBattlefield) else if type(creature[chosentype]|myBattlefield)~equalto~18 then name(Search 18 creatures) name(Search 18 creatures) target(<18>creature[chosentype]|mylibrary) moveto(myBattlefield) else if type(creature[chosentype]|myBattlefield)~equalto~19 then name(Search 19 creatures) name(Search 19 creatures) target(<19>creature[chosentype]|mylibrary) moveto(myBattlefield) else if type(creature[chosentype]|myBattlefield)~morethan~19 then name(Search 20 creatures) name(Search 20 creatures) target(<20>creature[chosentype]|mylibrary) moveto(myBattlefield) chooseend
text=Choose a creature type. Reveal cards from the top of your library until you reveal X creature cards of the chosen type, where X is the number of creatures you control of that type. Put those cards onto the battlefield, then shuffle the rest of the revealed cards into your library. text=Choose a creature type. Reveal cards from the top of your library until you reveal X creature cards of the chosen type, where X is the number of creatures you control of that type. Put those cards onto the battlefield, then shuffle the rest of the revealed cards into your library.
mana={5}{G}{G} mana={5}{G}{G}
type=Instant type=Instant
@@ -47049,7 +47050,7 @@ name=Pirate's Pillage
auto=draw:2 controller auto=draw:2 controller
auto=token(Treasure Sur)*2 auto=token(Treasure Sur)*2
text=As an additional cost to cast this spell, discard a card. -- Draw two cards and create two Treasure tokens. (They're artifacts with " {T}, Sacrifice this artifact: Add one mana of any color.") text=As an additional cost to cast this spell, discard a card. -- Draw two cards and create two Treasure tokens. (They're artifacts with " {T}, Sacrifice this artifact: Add one mana of any color.")
mana={3}{R}{D(*|myhand)} mana={3}{R}{D(other *|myhand)}
type=Sorcery type=Sorcery
[/card] [/card]
[card] [card]
@@ -49559,8 +49560,8 @@ name=Ragavan, Nimble Pilferer
other={1}{R} name(Dash) other={1}{R} name(Dash)
auto=if paid(alternative) then transforms((,newability[haste],newability[phaseaction[endofturn once sourceinplay] moveto(ownerhand)])) forever auto=if paid(alternative) then transforms((,newability[haste],newability[phaseaction[endofturn once sourceinplay] moveto(ownerhand)])) forever
auto=@combatdamaged(player) from(this):token(Treasure Sur) auto=@combatdamaged(player) from(this):token(Treasure Sur)
auto=@combatdamagefoeof(player) from(this):name(Exile top card) name(Exile top card) all(*[zpos=1]|opponentlibrary) moveto(myexile) and!( transforms((,newability[canplayfromexile],newability[phaseaction[endofturn once checkex] moveTo(ownerexile)])) ueot )! auto=@combatdamagefoeof(player) from(this):name(Exile top card) name(Exile top card) all(*[zpos=1]|opponentlibrary) moveto(myexile) and!( if cantargetcard(*[-land]|*) then transforms((,newability[canplayfromexile],newability[phaseaction[endofturn once checkex] moveTo(ownerexile)])) ueot )!
auto=@combatdamageof(player) from(this):name(Exile top card) name(Exile top card) all(*[zpos=1]|mylibrary) moveto(myexile) and!( transforms((,newability[canplayfromexile])) ueot )! auto=@combatdamageof(player) from(this):name(Exile top card) name(Exile top card) all(*[zpos=1]|mylibrary) moveto(myexile) and!( if cantargetcard(*[-land]|*) then transforms((,newability[this(cantargetcard(*[-land]|*)) canplayfromexile])) ueot )!
text=Whenever Ragavan, Nimble Pilferer deals combat damage to a player, create a Treasure token and exile the top card of that player's library. Until end of turn, you may cast that card. -- Dash {1}{R} (You may cast this spell for its dash cost. If you do, it gains haste, and it's returned from the battlefield to its owner's hand at the beginning of the next end step.) text=Whenever Ragavan, Nimble Pilferer deals combat damage to a player, create a Treasure token and exile the top card of that player's library. Until end of turn, you may cast that card. -- Dash {1}{R} (You may cast this spell for its dash cost. If you do, it gains haste, and it's returned from the battlefield to its owner's hand at the beginning of the next end step.)
mana={R} mana={R}
type=Legendary Creature type=Legendary Creature
@@ -55861,7 +55862,7 @@ name=Seize the Spoils
auto=draw:2 controller auto=draw:2 controller
auto=token(Treasure Sur) auto=token(Treasure Sur)
text=As an additional cost to cast this spell, discard a card. -- Draw two cards and create a Treasure token. (Its an artifact with "{T}, Sacrifice this artifact: Add one mana of any color.") text=As an additional cost to cast this spell, discard a card. -- Draw two cards and create a Treasure token. (Its an artifact with "{T}, Sacrifice this artifact: Add one mana of any color.")
mana={2}{R}{D(*|myhand)} mana={2}{R}{D(other *|myhand)}
type=Sorcery type=Sorcery
[/card] [/card]
[card] [card]
@@ -56796,7 +56797,7 @@ subtype=Aura
name=Shattering Spree name=Shattering Spree
abilities=hasnokicker,hasreplicate abilities=hasnokicker,hasreplicate
target=artifact target=artifact
kicker=multi{1}{R} name(Replicate) kicker=multi{R} name(Replicate)
auto=name(Destroy artifact) destroy auto=name(Destroy artifact) destroy
auto=thisforeach(variable{kicked}>0) ability$!name(Copy Shattering Spree) name(Copy Shattering Spree) activate castcard(named!:Shattering Spree:!)!$ controller auto=thisforeach(variable{kicked}>0) ability$!name(Copy Shattering Spree) name(Copy Shattering Spree) activate castcard(named!:Shattering Spree:!)!$ controller
text=Replicate {R} (When you cast this spell, copy it for each time you paid its replicate cost. You may choose new targets for the copies.) -- Destroy target artifact. text=Replicate {R} (When you cast this spell, copy it for each time you paid its replicate cost. You may choose new targets for the copies.) -- Destroy target artifact.
@@ -63975,10 +63976,29 @@ toughness=2
[/card] [/card]
[card] [card]
name=Synthetic Destiny name=Synthetic Destiny
aicode=activate transforms((,newability[target(*[zpos=findfirsttypecreature]|mylibrary) bottomoflibrary and!( transforms((,newability[phaseaction[endofturn once] moveTo(myBattlefield) and!( shuffle )!])) ueot )!])) oneshot
auto=count(type:creature:mybattlefield) auto=count(type:creature:mybattlefield)
auto=all(creature|myBattlefield) moveto(exile) auto=all(creature|myBattlefield) moveto(exile)
auto=thisforeach(variable{countedamount}) ability$!name(Reveal from top) name(Reveal from top) reveal:1 revealuntil(creature|mylibrary) optionone name(Choose creature to play end of turn) target(creature|myreveal) bottomoflibrary and!( transforms((,newability[phaseaction[endofturn once] moveTo(myBattlefield) and!( shuffle )!])) ueot )! optiononeend optiontwo name(Put back) target(*|myreveal) moveto(mylibrary) and!( all(*|myreveal) moveto(mylibrary) )! optiontwoend revealend!$ controller auto=if compare(ishuman)~morethan~0 then thisforeach(variable{countedamount}) ability$!name(Reveal from top) name(Reveal from top) reveal:1 revealuntil(creature|mylibrary) optionone name(Choose creature to play end of turn) target(creature|myreveal) bottomoflibrary and!( transforms((,newability[phaseaction[endofturn once] moveTo(myBattlefield)])) ueot )! optiononeend optiontwo name(Put back) all(*|myreveal) moveto(mylibrary) optiontwoend revealend!$ controller
auto=if compare(ishuman)~equalto~0 then if compare(countedamount)~equalto~1 then target(creature|mylibrary) transforms((,newability[phaseaction[endofturn once] moveTo(myBattlefield)])) ueot
auto=if compare(ishuman)~equalto~0 then if compare(countedamount)~equalto~2 then target(<2>creature|mylibrary) transforms((,newability[phaseaction[endofturn once] moveTo(myBattlefield)])) ueot
auto=if compare(ishuman)~equalto~0 then if compare(countedamount)~equalto~3 then target(<3>creature|mylibrary) transforms((,newability[phaseaction[endofturn once] moveTo(myBattlefield)])) ueot
auto=if compare(ishuman)~equalto~0 then if compare(countedamount)~equalto~4 then target(<4>creature|mylibrary) transforms((,newability[phaseaction[endofturn once] moveTo(myBattlefield)])) ueot
auto=if compare(ishuman)~equalto~0 then if compare(countedamount)~equalto~5 then target(<5>creature|mylibrary) transforms((,newability[phaseaction[endofturn once] moveTo(myBattlefield)])) ueot
auto=if compare(ishuman)~equalto~0 then if compare(countedamount)~equalto~6 then target(<6>creature|mylibrary) transforms((,newability[phaseaction[endofturn once] moveTo(myBattlefield)])) ueot
auto=if compare(ishuman)~equalto~0 then if compare(countedamount)~equalto~7 then target(<7>creature|mylibrary) transforms((,newability[phaseaction[endofturn once] moveTo(myBattlefield)])) ueot
auto=if compare(ishuman)~equalto~0 then if compare(countedamount)~equalto~8 then target(<8>creature|mylibrary) transforms((,newability[phaseaction[endofturn once] moveTo(myBattlefield)])) ueot
auto=if compare(ishuman)~equalto~0 then if compare(countedamount)~equalto~9 then target(<9>creature|mylibrary) transforms((,newability[phaseaction[endofturn once] moveTo(myBattlefield)])) ueot
auto=if compare(ishuman)~equalto~0 then if compare(countedamount)~equalto~10 then target(<10>creature|mylibrary) transforms((,newability[phaseaction[endofturn once] moveTo(myBattlefield)])) ueot
auto=if compare(ishuman)~equalto~0 then if compare(countedamount)~equalto~11 then target(<11>creature|mylibrary) transforms((,newability[phaseaction[endofturn once] moveTo(myBattlefield)])) ueot
auto=if compare(ishuman)~equalto~0 then if compare(countedamount)~equalto~12 then target(<12>creature|mylibrary) transforms((,newability[phaseaction[endofturn once] moveTo(myBattlefield)])) ueot
auto=if compare(ishuman)~equalto~0 then if compare(countedamount)~equalto~13 then target(<13>creature|mylibrary) transforms((,newability[phaseaction[endofturn once] moveTo(myBattlefield)])) ueot
auto=if compare(ishuman)~equalto~0 then if compare(countedamount)~equalto~14 then target(<14>creature|mylibrary) transforms((,newability[phaseaction[endofturn once] moveTo(myBattlefield)])) ueot
auto=if compare(ishuman)~equalto~0 then if compare(countedamount)~equalto~15 then target(<15>creature|mylibrary) transforms((,newability[phaseaction[endofturn once] moveTo(myBattlefield)])) ueot
auto=if compare(ishuman)~equalto~0 then if compare(countedamount)~equalto~16 then target(<16>creature|mylibrary) transforms((,newability[phaseaction[endofturn once] moveTo(myBattlefield)])) ueot
auto=if compare(ishuman)~equalto~0 then if compare(countedamount)~equalto~17 then target(<17>creature|mylibrary) transforms((,newability[phaseaction[endofturn once] moveTo(myBattlefield)])) ueot
auto=if compare(ishuman)~equalto~0 then if compare(countedamount)~equalto~18 then target(<18>creature|mylibrary) transforms((,newability[phaseaction[endofturn once] moveTo(myBattlefield)])) ueot
auto=if compare(ishuman)~equalto~0 then if compare(countedamount)~equalto~19 then target(<19>creature|mylibrary) transforms((,newability[phaseaction[endofturn once] moveTo(myBattlefield)])) ueot
auto=if compare(ishuman)~equalto~0 then if compare(countedamount)~morethan~19 then target(<20>creature|mylibrary) transforms((,newability[phaseaction[endofturn once] moveTo(myBattlefield)])) ueot
text=Exile all creatures you control. At the beginning of the next end step, reveal cards from the top of your library until you reveal that many creature cards, put all creature cards revealed this way onto the battlefield, then shuffle the rest of the revealed cards into your library. text=Exile all creatures you control. At the beginning of the next end step, reveal cards from the top of your library until you reveal that many creature cards, put all creature cards revealed this way onto the battlefield, then shuffle the rest of the revealed cards into your library.
mana={4}{U}{U} mana={4}{U}{U}
type=Instant type=Instant
+2 -3
View File
@@ -57367,8 +57367,7 @@ abilities=controllershroud
[/card] [/card]
[card] [card]
name=Imperial Recruiter name=Imperial Recruiter
aicode=activate target(creature[power<=2]|mylibrary) moveto(myhand) auto=name(Search creature) target(creature[power<=2]|mylibrary) moveto(myhand) and!( shuffle )!
auto=name(search card) Reveal:type:*:mylibrary revealzone(mylibrary) optionone name(choose card) target(<1>creature[power<=2]|reveal) transforms((,newability[all(other *|reveal) moveto(mylibrary) and!(shuffle)!],newability[moveto(myhand)])) optiononeend optiontwo name(shuffle) bottomoflibrary target(<1>*|reveal) and!( all(*|reveal) bottomoflibrary and!(shuffle)! )! optiontwoend revealend
text=When Imperial Recruiter enters the battlefield, search your library for a creature card with power 2 or less, reveal it, and put it into your hand. Then shuffle your library. text=When Imperial Recruiter enters the battlefield, search your library for a creature card with power 2 or less, reveal it, and put it into your hand. Then shuffle your library.
mana={2}{R} mana={2}{R}
type=Creature type=Creature
@@ -86384,7 +86383,7 @@ type=Artifact
[card] [card]
name=Phyrexian Tower name=Phyrexian Tower
auto={T}:Add{1} auto={T}:Add{1}
auto={T}{S(creature|myBattlefield)}:Add{B}{B} auto=aslongas(creature|mybattlefield) {T}:name(Sacrifice a creature) name(Sacrifice a creature) target(creature|myBattlefield) sacrifice and!( add{B}{B} )!
text={T}: Add {1} to your mana pool. -- {T}, Sacrifice a creature: Add {B}{B} to your mana pool. text={T}: Add {1} to your mana pool. -- {T}, Sacrifice a creature: Add {B}{B} to your mana pool.
type=Legendary Land type=Legendary Land
[/card] [/card]
+1 -1
View File
@@ -1482,7 +1482,7 @@ MTGGameZone * MTGGameZone::intToZone(GameObserver *g, int zoneId, MTGCardInstanc
if (!source && g) //patchwork fix when g is NULL. if (!source && g) //patchwork fix when g is NULL.
p = g->currentlyActing(); p = g->currentlyActing();
else else if (source)
p = source->controller(); p = source->controller();
if (!target && source) //patchwork fix when source is NULL. if (!target && source) //patchwork fix when source is NULL.
{ {