Card Development Questions
Post MTG Forge Related Programming Questions Here
Moderators: timmermac, Blacksmith, KrazyTheFox, Agetian, friarsol, CCGHQ Admins
Re: Card Development Questions
by pokey » 02 Jun 2012, 08:14
Thank you for your suggestion.moomarc wrote:Another small point is that the card is targeted so you''ll probably end up using something like Count$TargetedDiscardedThisTurn once the suppurt is in. You can check Keeper of the Mind to see how to target the AI while you draw the cards.
Yes, my implementation of Dream Salvage omits targeted aspect right now.
It will let me draw even when my opponent has Ivory Mask.
Though it is working fine for my casual play, I have to make another try to fix it.
- pokey
- Posts: 4
- Joined: 25 May 2012, 22:03
- Has thanked: 0 time
- Been thanked: 0 time
Re: Card Development Questions
by pokey » 02 Jun 2012, 08:25
Thank you for your reply. Very interesting.Hellfish wrote:Correct, that is because nonpermanent spells enter the graveyard from the stack.pokey wrote:So let me report this finding;
When spells are cast and put in graveyard, it is not counted by "ThisTurnEntered_Graveyard_from_Hand"
I am very happy to hear that, because it answers my first question.
Now "Count$ThisTurnEntered_Graveyard_from_Hand" is virtually equal to "the number of cards discarded this turn".
- pokey
- Posts: 4
- Joined: 25 May 2012, 22:03
- Has thanked: 0 time
- Been thanked: 0 time
Re: Card Development Questions
by HereticPriest » 04 Jun 2012, 22:44
So maybe this is the place to submit problems with certain cards:
the card Forbidden Alchemy seems to have stopped working correctly. Actually sorry, it might never have worked at all since i tried it. It does get the card i select, but the other cards dont go into the graveyard as they should, but back on top of the library or vanish completely. Not entirely sure about this.
Maybe you can reproduce this, and then fix it - that would be nice.
Greetings, H_P
the card Forbidden Alchemy seems to have stopped working correctly. Actually sorry, it might never have worked at all since i tried it. It does get the card i select, but the other cards dont go into the graveyard as they should, but back on top of the library or vanish completely. Not entirely sure about this.
Maybe you can reproduce this, and then fix it - that would be nice.
Greetings, H_P
- HereticPriest
- Posts: 4
- Joined: 03 Jun 2012, 19:06
- Has thanked: 3 times
- Been thanked: 0 time
Re: Card Development Questions
by friarsol » 05 Jun 2012, 00:06
Nope, the other thread (bug reports) is the right thread for cards that exist. This one is for scripting cards that have not been committed yet.HereticPriest wrote:So maybe this is the place to submit problems with certain cards:
- friarsol
- Global Moderator
- Posts: 7593
- Joined: 15 May 2010, 04:20
- Has thanked: 243 times
- Been thanked: 965 times
Re: Card Development Questions
by moomarc » 10 Jul 2012, 10:21
Trying to get Goblin Festival working and all is good until you have multiple instances on the stack. If you lose the flip so that the opponent gains control, then resolve the stack further until you lose again, you should still have to choose the opponent because you control the ability. Instead the current card controller chooses one of their opponents. Do we have a way to set Defined to the activating player?
Looked further and Defined$You adds sa.getActivatingPlayer so should work. Does the activating player not get carried over to a CoinFlip's subability?
So am I just missing the purpose of "Defined" in ChoosePlayer. I thought it determined who chooses the player but it doesn't seem to work here. Any ideas? Here's the script using Remembered players (had to add RememberedOpponent so will post that too in case anyone wants to test it):
Looked further and Defined$You adds sa.getActivatingPlayer so should work. Does the activating player not get carried over to a CoinFlip's subability?
- Code: Select all
Name:Goblin Festival
ManaCost:1 R
Types:Enchantment
Text:no text
A:AB$ DealDamage | Cost$ 2 | NumDmg$ 1 | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select target creature or player | SubAbility$ ControlFlip | SpellDescription$ CARDNAME deals 1 damage to target creature or player. Flip a coin. If you lose the flip, choose one of your opponents. That player gains control of CARDNAME.
SVar:ControlFlip:DB$ FlipACoin | Defined$ You | LoseSubAbility$ ChooseOpp
SVar:ChooseOpp:DB$ ChoosePlayer | Defined$ You | Choices$ Opponent | AILogic$ Curse | SubAbility$ LoseControl
SVar:LoseControl:DB$ GainControl | Defined$ Self | NewController$ ChosenPlayer
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/goblin_festival.jpg
SetInfo:UDS|Rare|http://magiccards.info/scans/en/ud/83.jpg
Oracle:{2}: Goblin Festival deals 1 damage to target creature or player. Flip a coin. If you lose the flip, choose one of your opponents. That player gains control of Goblin Festival.
End
So am I just missing the purpose of "Defined" in ChoosePlayer. I thought it determined who chooses the player but it doesn't seem to work here. Any ideas? Here's the script using Remembered players (had to add RememberedOpponent so will post that too in case anyone wants to test it):
- | Open
- Code: Select all
Name:Goblin Festival
ManaCost:1 R
Types:Enchantment
Text:no text
A:AB$ DealDamage | Cost$ 2 | NumDmg$ 1 | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select target creature or player | SubAbility$ RememberActivator | SpellDescription$ CARDNAME deals 1 damage to target creature or player. Flip a coin. If you lose the flip, choose one of your opponents. That player gains control of CARDNAME.
SVar:RememberActivator:DB$ Pump | RememberObjects$ You | Static$ True | StackDescription$ None | SubAbility$ ControlFlip
SVar:ControlFlip:DB$ FlipACoin | Defined$ Remembered | LoseSubAbility$ ChooseOpp | WinSubAbility$ DBCleanup
#Remove WinSubAbility to check the remembered list between losses
SVar:ChooseOpp:DB$ ChoosePlayer | Defined$ Remembered | Choices$ RememberedOpponent | AILogic$ Curse | SubAbility$ LoseControl
SVar:LoseControl:DB$ GainControl | Defined$ Self | NewController$ ChosenPlayer | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/goblin_festival.jpg
SetInfo:UDS|Rare|http://magiccards.info/scans/en/ud/83.jpg
Oracle:{2}: Goblin Festival deals 1 damage to target creature or player. Flip a coin. If you lose the flip, choose one of your opponents. That player gains control of Goblin Festival.
End
- Code: Select all
} else if (defined.equals("RememberedOpponent")) {
for (final Object rem : card.getRemembered()) {
if (rem instanceof Player) {
players.add(((Player) rem).getOpponent());
}
}
}
-Marc
-
moomarc - Pixel Commander
- Posts: 2091
- Joined: 04 Jun 2010, 15:22
- Location: Johannesburg, South Africa
- Has thanked: 371 times
- Been thanked: 372 times
Re: Card Development Questions
by moomarc » 10 Jul 2012, 11:50
I think I found the problem!
- Code: Select all
for (final Player p : tgtPlayers) {
if ((tgt == null) || p.canBeTargetedBy(sa)) {
if (sa.getActivatingPlayer().isHuman()) {
- Code: Select all
if (p.isHuman()) {
-Marc
-
moomarc - Pixel Commander
- Posts: 2091
- Joined: 04 Jun 2010, 15:22
- Location: Johannesburg, South Africa
- Has thanked: 371 times
- Been thanked: 372 times
Re: Card Development Questions
by friarsol » 27 Aug 2012, 23:25
This is probably targeted at Sloth but if anyone else knows feel free to chime in. I'm in the middle of scripting Phyrexian Portal (which surprisingly doesn't need that many code additions) when I think I stumbled across an issue with Count$InYourLibrary it seems that since this takes the controller of the card, not the controller of the SA into account we can get an incorrect count if the controller of the card changes while the ability is on the stack. It's easily possible that we knew about this limitation and I just forgot about it since it is a bit of a corner case.
Do we have a new way of handling that? I didn't notice anything in CalculateAmount that might do that, and we use a ton of those Count functions everywhere.
Do we have a new way of handling that? I didn't notice anything in CalculateAmount that might do that, and we use a ton of those Count functions everywhere.
- friarsol
- Global Moderator
- Posts: 7593
- Joined: 15 May 2010, 04:20
- Has thanked: 243 times
- Been thanked: 965 times
Re: Card Development Questions
by Sloth » 28 Aug 2012, 07:39
We can pass a spell ability to xCount. And if it's not null change cardController to activatingplayer.friarsol wrote:Do we have a new way of handling that? I didn't notice anything in CalculateAmount that might do that, and we use a ton of those Count functions everywhere.
-
Sloth - Programmer
- Posts: 3498
- Joined: 23 Jun 2009, 19:40
- Has thanked: 125 times
- Been thanked: 507 times
Re: Card Development Questions
by friarsol » 29 Aug 2012, 02:02
Do we have a function inside Triggers that allows us to Remember Players?
So, I'm trying to script Diseased Vermin and the only thing (I believe) I need is to remember the person the Vermin did combat damage to, inside the trigger. Then I can just use Opponent.IsRemembered to see if it's on that list, and it should be good to go. The only thing I really see that has Players being remembered objects is Effects, which wouldn't quite work here. Does this exist already or should I just add a small snippet to handle it?
So, I'm trying to script Diseased Vermin and the only thing (I believe) I need is to remember the person the Vermin did combat damage to, inside the trigger. Then I can just use Opponent.IsRemembered to see if it's on that list, and it should be good to go. The only thing I really see that has Players being remembered objects is Effects, which wouldn't quite work here. Does this exist already or should I just add a small snippet to handle it?
- friarsol
- Global Moderator
- Posts: 7593
- Joined: 15 May 2010, 04:20
- Has thanked: 243 times
- Been thanked: 965 times
Re: Card Development Questions
by moomarc » 29 Aug 2012, 04:50
Should just be able to add a Pump with RememberObjects$TriggeredPlayer and a StackDescription$None to keep the stack description clean. Should probably also just add a static ETB trigger with ClearRemembered so that the rats forget players if they get Flickered etc.friarsol wrote:Do we have a function inside Triggers that allows us to Remember Players?
So, I'm trying to script Diseased Vermin and the only thing (I believe) I need is to remember the person the Vermin did combat damage to, inside the trigger. Then I can just use Opponent.IsRemembered to see if it's on that list, and it should be good to go. The only thing I really see that has Players being remembered objects is Effects, which wouldn't quite work here. Does this exist already or should I just add a small snippet to handle it?
-Marc
-
moomarc - Pixel Commander
- Posts: 2091
- Joined: 04 Jun 2010, 15:22
- Location: Johannesburg, South Africa
- Has thanked: 371 times
- Been thanked: 372 times
Re: Card Development Questions
by moomarc » 17 Sep 2012, 11:49
Scripted the last two Volvers but the gain life trigger causes a ConcurrentModificationException error. The problem is caused when the animate subability tries to add the trigger to the card and only happens when the etb trigger has Static$True. Here's the script for the critters if anyone wants to have a bash at getting them working:
- Necravolver | Open
- Code: Select all
Name:Necravolver
ManaCost:2 B
Types:Creature Volver
Text:no text
PT:2/2
K:Kicker 1 G
K:Kicker W
T:Mode$ ChangesZone | ValidCard$ Card.Self+kicked 1 G | Origin$ Any | Destination$ Battlefield | Execute$ VolverPumped | Static$ True | TriggerDescription$ If CARDNAME was kicked with its 1 G kicker, it enters the battlefield with two +1/+1 counters on it and with trample.
SVar:VolverPumped:AB$ PutCounter | Cost$ 0 | Defined$ Self | CounterType$ P1P1 | CounterNum$ 2 | SubAbility$ VolverStomp
SVar:VolverStomp:DB$ Pump | Defined$ Self | KW$ Trample | Permanent$ True
T:Mode$ ChangesZone | ValidCard$ Card.Self+kicked W | Origin$ Any | Destination$ Battlefield | Execute$ VolverPumped | Static$ True | TriggerDescription$ If CARDNAME was kicked with its W kicker, it enters the battlefield with a +1/+1 counter on it and with "Whenever CARDNAME deals damage, you gain that much life."
SVar:VolverPumped:AB$ PutCounter | Cost$ 0 | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ VolverLife
SVar:VolverLife:DB$ Animate | Defined$ Self | Triggers$ PseudoLifelink | sVars$ VolverTrigGain,VolverX | Permanent$ True
SVar:PseudoLifelink:Mode$ DamageDone | ValidSource$ Card.Self | Execute$ VolverTrigGain | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals damage, you gain that much life.
SVar:VolverTrigGain:AB$ GainLife | Cost$ 0 | Defined$ You | LifeAmount$ VolverX | References$ VolverX
SVar:VolverX:TriggerCount$DamageAmount
SVar:RemRandomDeck:True
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/necravolver.jpg
SetInfo:APC|Rare|http://magiccards.info/scans/en/ap/46.jpg
Oracle:Kicker {1}{G} and/or {W} (You may pay an additional {1}{G} and/or {W} as you cast this spell.)\nIf Necravolver was kicked with its {1}{G} kicker, it enters the battlefield with two +1/+1 counters on it and with trample.\nIf Necravolver was kicked with its {W} kicker, it enters the battlefield with a +1/+1 counter on it and with "Whenever Necravolver deals damage, you gain that much life."
End
- Rakavolver | Open
- Code: Select all
Name:Rakavolver
ManaCost:2 R
Types:Creature Volver
Text:no text
PT:2/2
K:Kicker 1 W
K:Kicker U
T:Mode$ ChangesZone | ValidCard$ Card.Self+kicked 1 W | Origin$ Any | Destination$ Battlefield | Execute$ VolverStrength | Static$ True | TriggerDescription$ If CARDNAME was kicked with its 1 W kicker, it enters the battlefield with two +1/+1 counters on it and with "Whenever CARDNAME deals damage, you gain that much life."
SVar:VolverStrength:AB$ PutCounter | Cost$ 0 | Defined$ Self | CounterType$ P1P1 | CounterNum$ 2 | SubAbility$ VolverLife
SVar:VolverLife:DB$ Animate | Defined$ Self | Triggers$ PseudoLifelink | sVars$ VolverTrigGain,VolverX | Permanent$ True
SVar:PseudoLifelink:Mode$ DamageDone | ValidSource$ Card.Self | Execute$ VolverTrigGain | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals damage, you gain that much life.
SVar:VolverTrigGain:AB$ GainLife | Cost$ 0 | Defined$ You | LifeAmount$ VolverX | References$ VolverX
SVar:VolverX:TriggerCount$DamageAmount
T:Mode$ ChangesZone | ValidCard$ Card.Self+kicked U | Origin$ Any | Destination$ Battlefield | Execute$ VolverPumped | Static$ True | TriggerDescription$ If CARDNAME was kicked with its U kicker, it enters the battlefield with a +1/+1 counter on it and with flying.
SVar:VolverPumped:AB$ PutCounter | Cost$ 0 | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ VolverLaunch
SVar:VolverLaunch:DB$ Pump | Defined$ Self | KW$ Flying | Permanent$ True
SVar:RemRandomDeck:True
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/rakavolver.jpg
SetInfo:APC|Rare|http://magiccards.info/scans/en/ap/68.jpg
Oracle:Kicker {1}{W} and/or {U} (You may pay an additional {1}{W} and/or {U} as you cast this spell.)\nIf Rakavolver was kicked with its {1}{W} kicker, it enters the battlefield with two +1/+1 counters on it and with "Whenever Rakavolver deals damage, you gain that much life."\nIf Rakavolver was kicked with its {U} kicker, it enters the battlefield with a +1/+1 counter on it and with flying.
End
-Marc
-
moomarc - Pixel Commander
- Posts: 2091
- Joined: 04 Jun 2010, 15:22
- Location: Johannesburg, South Africa
- Has thanked: 371 times
- Been thanked: 372 times
Re: Card Development Questions
by friarsol » 23 Sep 2012, 16:06
Ok... this might be a bit ridiculous, but I'm mostly done scripting Helm of Obedience. My biggest problem right now is that I have a few conditional subabilities that need to confirm that the milled card is still in the graveyard (for appropriate interaction with Leyline of the Void)
I thought we used ConditionZone for stuff, and it looks like there's a card that refers to it (Balance of Power), but it doesn't appear to do anything. Before I start messing around with filtering out zones if they are provided, I want to make sure there isn't already a way to handle this scenario.
Because I want to:
1) Mill a card and remember it.
2) Check if that card is still in the graveyard and do something (It doesn't really matter what, I need to do like 4 different things for the case of Helm)
For those trying to figure out what the script is doing:
1) Setup a repeat while the loop counter is less than X.
2) Clear Rememebered List
3) Mill 1 card and remember it.
4) Accumulate a loop counter variable if the milled card is still in the graveyard (that check currently doesn't work)
5) Set the loop counter to X if the milled card is a creature and is still in the graveyard (the graveyard check doesn't work)
6) Set the loop counter to X if the targeted player's library is 0. (Not really necessary, but no reason looping if we can't mill anymore)
7) When the repeat finishes, move the the remembered card from the graveyard to your battlefield if it's a creature
8 ) If the remembered card is a creature and was still in the graveyard, sacrifice Helm of Obedience.
9) Reset Loop Counter
10) Clear Remembered
(Actually, I just realized 8 and 9 should be swapped, but you get the idea)
- Helm of Obedience | Open
- Name:Helm of Obedience
ManaCost:4
Types:Artifact
Text:no text
A:AB$ Repeat | Cost$ XCantBe0 X T | ValidTgts$ Opponent | RepeatSubAbility$ DBCleanBeforeRepeat | RepeatCheckSVar$ AccumlatedMilled | RepeatSVarCompare$ LTX | SpellDescription$ Target opponent puts cards from the top of his or her library into his or her graveyard until a creature card or X cards are put into that graveyard this way, whichever comes first. If a creature card is put into that graveyard this way, sacrifice Helm of Obedience and put that card onto the battlefield under your control. X can't be 0. | SubAbility$ DBStealCreature
SVar:DBCleanBeforeRepeat:DB$ Cleanup | ClearRemembered$ True | SubAbility$ DBMill
SVar:DBMill:DB$ Mill | NumCards$ 1 | RememberMilled$ True | Defined$ Targeted | SubAbility$ DBAccumulateX
SVar:DBAccumulateX:DB$ StoreSVar | SVar$ AccumlatedMilled | Type$ CountSVar | Expression$ AccumlatedMilled/Plus.1 | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ EQ1 | ConditionZone$ Graveyard | SubAbility$ DBMilledCreature
SVar:DBMilledCreature:DB$ StoreSVar | SVar$ AccumlatedMilled | Type$ CountSVar | Expression$ X | ConditionDefined$ Remembered | ConditionPresent$ Card.Creature | ConditionCompare$ EQ1 | ConditionZone$ Graveyard | SubAbility$ DBEmptyLibrary
SVar:DBEmptyLibrary:DB$ StoreSVar | SVar$ AccumlatedMilled | Type$ CountSVar | Expression$ X | ConditionCheckSVar$ TargetedLibrary | ConditionSVarCompare$ EQ0
SVar:DBStealCreature:DB$ ChangeZone | Defined$ Remembered | Origin$ Graveyard | Destination$ Battlefield | GainControl$ True | SubAbility$ DBSacHelm | ConditionDefined$ Remembered | ConditionPresent$ Card.Creature | ConditionCompare$ EQ1 | ConditionZone$ Graveyard
SVar:DBSacHelm:DB$ Sacrifice | Defined$ Self | SubAbility$ DBResetCounter | ConditionDefined$ Remembered | ConditionPresent$ Card.Creature | ConditionCompare$ EQ1 | ConditionZone$ Graveyard
SVar:DBResetCounter:DB$ StoreSVar | SVar$ AccumlatedMilled | Type$ Number | Expression$ 0 | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:TargetedLibrary:TargetedPlayer$CardsInLibrary
SVar:MilledCreature:TargetedPlayer
SVar:AccumlatedMilled:Number$0
SVar:X:Count$xPaid
SVar:RemAIDeck:True
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/helm_of_obedience.jpg
SetInfo:ALL|Rare|http://magiccards.info/scans/en/ai/163.jpg
Oracle:{X},: Target opponent puts cards from the top of his or her library into his or her graveyard until a creature card or X cards are put into that graveyard this way, whichever comes first. If a creature card is put into that graveyard this way, sacrifice Helm of Obedience and put that card onto the battlefield under your control. X can't be 0.
End
I thought we used ConditionZone for stuff, and it looks like there's a card that refers to it (Balance of Power), but it doesn't appear to do anything. Before I start messing around with filtering out zones if they are provided, I want to make sure there isn't already a way to handle this scenario.
Because I want to:
1) Mill a card and remember it.
2) Check if that card is still in the graveyard and do something (It doesn't really matter what, I need to do like 4 different things for the case of Helm)
For those trying to figure out what the script is doing:
1) Setup a repeat while the loop counter is less than X.
2) Clear Rememebered List
3) Mill 1 card and remember it.
4) Accumulate a loop counter variable if the milled card is still in the graveyard (that check currently doesn't work)
5) Set the loop counter to X if the milled card is a creature and is still in the graveyard (the graveyard check doesn't work)
6) Set the loop counter to X if the targeted player's library is 0. (Not really necessary, but no reason looping if we can't mill anymore)
7) When the repeat finishes, move the the remembered card from the graveyard to your battlefield if it's a creature
8 ) If the remembered card is a creature and was still in the graveyard, sacrifice Helm of Obedience.
9) Reset Loop Counter
10) Clear Remembered
(Actually, I just realized 8 and 9 should be swapped, but you get the idea)
- friarsol
- Global Moderator
- Posts: 7593
- Joined: 15 May 2010, 04:20
- Has thanked: 243 times
- Been thanked: 965 times
Re: Card Development Questions
by Sloth » 23 Sep 2012, 18:02
Here's what i would have used:
- Code: Select all
ConditionCheckSVar$ Y | ConditionSVarCompare$ GE1
- Code: Select all
SVar:Y:Count$ValidGrave Creature.IsRemembered
SVar:Z:Count$ValidGrave Card.IsRemembered
-
Sloth - Programmer
- Posts: 3498
- Joined: 23 Jun 2009, 19:40
- Has thanked: 125 times
- Been thanked: 507 times
Re: Card Development Questions
by friarsol » 25 Sep 2012, 01:56
Ok, last question for Helm of Obedience, where am I supposed to put this References? I haven't scripted many cards since that was added, and I have a ton of SVars that I use to get this thing to work as expected. Here's the script in all it's glory:
- Helm of Obedience | Open
- Name:Helm of Obedience
ManaCost:4
Types:Artifact
Text:no text
A:AB$ Repeat | Cost$ XCantBe0 X T | ValidTgts$ Opponent | MaxRepeat$ MaxRepeats | RepeatSubAbility$ DBCleanBeforeRepeat | RepeatCheckSVar$ AccumlatedMilled | RepeatSVarCompare$ LTX | StackDescription$ Target opponent puts cards from the top of his or her library into his or her graveyard until a creature card or X cards are put into that graveyard this way, whichever comes first. If a creature card is put into that graveyard this way, sacrifice Helm of Obedience and put that card onto the battlefield under your control. X can't be 0. | SpellDescription$ Target opponent puts cards from the top of his or her library into his or her graveyard until a creature card or X cards are put into that graveyard this way, whichever comes first. If a creature card is put into that graveyard this way, sacrifice Helm of Obedience and put that card onto the battlefield under your control. X can't be 0. | SubAbility$ DBSacHelm
SVar:DBCleanBeforeRepeat:DB$ Cleanup | ClearRemembered$ True | SubAbility$ DBMill
SVar:DBMill:DB$ Mill | NumCards$ 1 | RememberMilled$ True | Defined$ Targeted | SubAbility$ DBAccumulateX
SVar:DBAccumulateX:DB$ StoreSVar | SVar$ AccumlatedMilled | Type$ CountSVar | Expression$ AccumlatedMilled/Plus.1 | ConditionCheckSVar$ MilledCard | ConditionSVarCompare$ EQ1 | SubAbility$ DBMilledCreature
SVar:DBMilledCreature:DB$ StoreSVar | SVar$ AccumlatedMilled | Type$ CountSVar | Expression$ X | ConditionCheckSVar$ MilledCreature | ConditionSVarCompare$ EQ1 | SubAbility$ DBEmptyLibrary
SVar:DBEmptyLibrary:DB$ StoreSVar | SVar$ AccumlatedMilled | Type$ CountSVar | Expression$ X | ConditionCheckSVar$ TargetedLibrary | ConditionSVarCompare$ EQ0
SVar:DBSacHelm:DB$ Sacrifice | Defined$ Self | ConditionCheckSVar$ MilledCreature | ConditionSVarCompare$ EQ1 | SubAbility$ DBStealCreature
SVar:DBStealCreature:DB$ ChangeZone | Defined$ Remembered | Origin$ Graveyard | Destination$ Battlefield | GainControl$ True | SubAbility$ DBResetCounter | ConditionCheckSVar$ MilledCreature | ConditionSVarCompare$ EQ1
SVar:DBResetCounter:DB$ StoreSVar | SVar$ AccumlatedMilled | Type$ Number | Expression$ 0 | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:TargetedLibrary:TargetedPlayer$CardsInLibrary
SVar:MaxRepeats:TargetedPlayer$CardsInLibrary/Plus.2
SVar:MilledCreature:Count$ValidGrave Creature.IsRemembered
SVar:MilledCard:Count$ValidGrave Card.IsRemembered
SVar:AccumlatedMilled:Number$0
SVar:X:Count$xPaid
SVar:RemAIDeck:True
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/helm_of_obedience.jpg
SetInfo:ALL|Rare|http://magiccards.info/scans/en/ai/163.jpg
Oracle:{X},: Target opponent puts cards from the top of his or her library into his or her graveyard until a creature card or X cards are put into that graveyard this way, whichever comes first. If a creature card is put into that graveyard this way, sacrifice Helm of Obedience and put that card onto the battlefield under your control. X can't be 0.
End
- friarsol
- Global Moderator
- Posts: 7593
- Joined: 15 May 2010, 04:20
- Has thanked: 243 times
- Been thanked: 965 times
Re: Card Development Questions
by Hellfish » 25 Sep 2012, 06:41
Any ability or subability that references any of the svars from TargetedLibrary through to X needs a References$ parameter naming them. (Come on Myr Welder , work!)
Also, holy shit.
Also, holy shit.
So now you're
Screaming for the blood of the cookie monster
Evil puppet demon of obesity
Time to change the tune of his fearful ballad
C is for "Lettuce," that's good enough for me
Screaming for the blood of the cookie monster
Evil puppet demon of obesity
Time to change the tune of his fearful ballad
C is for "Lettuce," that's good enough for me
-
Hellfish - Programmer
- Posts: 1297
- Joined: 07 Jun 2009, 10:41
- Location: South of the Pumphouse
- Has thanked: 110 times
- Been thanked: 169 times
Who is online
Users browsing this forum: No registered users and 44 guests