It is currently 30 May 2025, 06:08
   
Text Size

Card Development Questions

Post MTG Forge Related Programming Questions Here

Moderators: timmermac, Blacksmith, KrazyTheFox, Agetian, friarsol, CCGHQ Admins

Re: Card Development Questions

Postby Hellfish » 03 Nov 2011, 08:30

I could've sworn we had a IsTriggered<TriggeredVariable> property... I'll tinker with it a bit. :)

EDIT: Oh, yeah, TriggeringObjects were moved to SpellAbilities. Forgot about that :oops:
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
User avatar
Hellfish
Programmer
 
Posts: 1297
Joined: 07 Jun 2009, 10:41
Location: South of the Pumphouse
Has thanked: 110 times
Been thanked: 169 times

Re: Card Development Questions

Postby moomarc » 03 Nov 2011, 11:06

Hellfish wrote:I could've sworn we had a IsTriggered<TriggeredVariable> property... I'll tinker with it a bit. :)

EDIT: Oh, yeah, TriggeringObjects were moved to SpellAbilities. Forgot about that :oops:
Does that mean its there somewhere already? How do I use it?

I'm just not getting the stupid restrictions right. #-o This one also just needs to be restricted to the rembered token...
Tatsumasa, the Dragon's Fang script | Open
Code: Select all
Name:Tatsumasa, the Dragon's Fang
ManaCost:6
Types:Artifact Equipment
Text:Equipped creature gets +5/+5.
K:eqPump 3:+5/+5
A:AB$ Token | Cost$ 6 Exile<1/CARDNAME> | TokenAmount$ 1 | TokenName$ Dragon Spirit | TokenTypes$ Creature,Dragon,Spirit | TokenOwner$ You | TokenColors$ Blue | TokenPower$ 5 | TokenToughness$ 5 |  RememberTokens$ True | TokenKeywords$ Flying | SpellDescription$ Put a 5/5 blue Dragon Spirit creature token with flying onto the battlefield. Return Tatsumasa to the battlefield under its owner's control when that token dies.
T:Mode$ ChangesZone | ValidCard$ Creature.IsRemembered | Origin$ Battlefield | Destination$ Graveyard | TriggerZones$ Exile |Execute$ TrigReturn | TriggerDescription$ Return CARDNAME to the battlefield under its owner's control.
SVar:TrigReturn:AB$ChangeZone | Cost$ 0 | Origin$ Exile | Destination$ Battlefield | Defined$ Self | SubAbility$ DBCleanUp
SVar:DBCleanUp:DB$Cleanup | ClearRemembered$ True
SVar:Rarity:Rare
End
-Marc
User avatar
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

Postby Sloth » 03 Nov 2011, 11:53

moomarc wrote:I'm just not getting the stupid restrictions right. #-o This one also just needs to be restricted to the rembered token...
Tatsumasa, the Dragon's Fang script | Open
Code: Select all
Name:Tatsumasa, the Dragon's Fang
ManaCost:6
Types:Artifact Equipment
Text:Equipped creature gets +5/+5.
K:eqPump 3:+5/+5
A:AB$ Token | Cost$ 6 Exile<1/CARDNAME> | TokenAmount$ 1 | TokenName$ Dragon Spirit | TokenTypes$ Creature,Dragon,Spirit | TokenOwner$ You | TokenColors$ Blue | TokenPower$ 5 | TokenToughness$ 5 |  RememberTokens$ True | TokenKeywords$ Flying | SpellDescription$ Put a 5/5 blue Dragon Spirit creature token with flying onto the battlefield. Return Tatsumasa to the battlefield under its owner's control when that token dies.
T:Mode$ ChangesZone | ValidCard$ Creature.IsRemembered | Origin$ Battlefield | Destination$ Graveyard | TriggerZones$ Exile |Execute$ TrigReturn | TriggerDescription$ Return CARDNAME to the battlefield under its owner's control.
SVar:TrigReturn:AB$ChangeZone | Cost$ 0 | Origin$ Exile | Destination$ Battlefield | Defined$ Self | SubAbility$ DBCleanUp
SVar:DBCleanUp:DB$Cleanup | ClearRemembered$ True
SVar:Rarity:Rare
End
Does the remembering work here (does the exiled Tatsumasa state "Remembered:...")?

moomarc wrote:Firstly, here's the new script for Saproling Burst with the static pump. Thanks Sol. Definitely cleaner this way. It was a good script to learn some backroads though. It all works according to the rulings etc except that the pump is on the host rather than token. Let me know if it can be committed like this.
Saproling Burst | Open
Name:Saproling Burst
ManaCost:4 G
Types:Enchantment
Text:no text
K:Fading:7
A:AB$ Token | Cost$ SubCounter<1/FADE> | TokenAmount$ 1 | TokenName$ Saproling | TokenTypes$ Creature,Saproling | TokenOwner$ You | TokenImage$ G X X Saproling | TokenColors$ Green | TokenPower$ 0 | TokenToughness$ 0 | RememberTokens$ True | TokenKeywords$ This creature's power and toughness are each equal to the number of fade counters on CARDNAME. | SpellDescription$ Put a green Saproling creature token onto the battlefield. It has "This creature's power and toughness are each equal to the number of fade counters on CARDNAME."
S:Mode$ Continuous | Affected$ Creature.IsRemembered | AddPower$ X | AddToughness$ X | Description$ HIDDEN It has "This creature's power and toughness are each equal to the number of fade counters on Saproling Burst."
SVar:X:Count$CardCounters.FADE
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Destination$ Any | Execute$ DestroyRemembered | TriggerDescription$ When CARDNAME leaves the battlefield, destroy all tokens put onto the battlefield with CARDNAME. They can't be regenerated.
SVar:DestroyRemembered:DB$DestroyAll | Cost$ 0 | ValidCards$ Creature.IsRemembered | NoRegen$ True | SubAbility$ DBCleanUp
SVar:DBCleanUp:DB$Cleanup | ClearRemembered$ True
SVar:RemAIDeck:True
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/saproling_burst.jpg
SetInfo:NMS|Rare|http://magiccards.info/scans/en/ne/113.jpg
Oracle:Fading 7 (This enchantment enters the battlefield with seven fade counters on it. At the beginning of your upkeep, remove a fade counter from it. If you can't, sacrifice it.)\nRemove a fade counter from Saproling Burst: Put a green Saproling creature token onto the battlefield. It has "This creature's power and toughness are each equal to the number of fade counters on Saproling Burst."\nWhen Saproling Burst leaves the battlefield, destroy all tokens put onto the battlefield with Saproling Burst. They can't be regenerated.
End

I would change the continuous static ability to use "SetPower" and "SetToughness" instead of "AddPower" and "AddToughness" (so it works correctly with other P/T setting cards like Mirror Entity), otherwise I'm ok with it.
User avatar
Sloth
Programmer
 
Posts: 3498
Joined: 23 Jun 2009, 19:40
Has thanked: 125 times
Been thanked: 507 times

Re: Card Development Questions

Postby Iran » 03 Nov 2011, 12:30

friarsol wrote:
jeffwadsworth wrote:Looking at Power Conduit in light of Sol's Wandering Mage. Would something like SubCounter<1/Any/Permanent.YouCtrl/a permanent you control> be doable?

Also testing Ghave, Guru of Spores. Its SubCounter<1/P1P1/Creature.YouCtrl/a creature you control> does not let you choose a creature. I take it that AddCounter was the only cost type coded for this?
Yea SubCounter doesn't quite have that capability yet. I even noted which cards would benefit from adding it:

// Here are the cards that have RemoveCounter<Type>
// Ion Storm, Noviken Sages, Ghave, Guru of Spores, Power Conduit (any
// Counter is tough),
// Quillspike, Rift Elemental, Sage of Fables, Spike Rogue
I see these ones too Infused Arrows, Hex Parasite
Last edited by Iran on 03 Nov 2011, 12:44, edited 1 time in total.
Iran
 
Posts: 251
Joined: 11 Jul 2011, 04:36
Has thanked: 61 times
Been thanked: 4 times

Re: Card Development Questions

Postby moomarc » 03 Nov 2011, 12:40

Sloth wrote:
moomarc wrote:I'm just not getting the stupid restrictions right. #-o This one also just needs to be restricted to the rembered token...
Tatsumasa, the Dragon's Fang script | Open
Code: Select all
Name:Tatsumasa, the Dragon's Fang
ManaCost:6
Types:Artifact Equipment
Text:Equipped creature gets +5/+5.
K:eqPump 3:+5/+5
A:AB$ Token | Cost$ 6 Exile<1/CARDNAME> | TokenAmount$ 1 | TokenName$ Dragon Spirit | TokenTypes$ Creature,Dragon,Spirit | TokenOwner$ You | TokenColors$ Blue | TokenPower$ 5 | TokenToughness$ 5 |  RememberTokens$ True | TokenKeywords$ Flying | SpellDescription$ Put a 5/5 blue Dragon Spirit creature token with flying onto the battlefield. Return Tatsumasa to the battlefield under its owner's control when that token dies.
T:Mode$ ChangesZone | ValidCard$ Creature.IsRemembered | Origin$ Battlefield | Destination$ Graveyard | TriggerZones$ Exile |Execute$ TrigReturn | TriggerDescription$ Return CARDNAME to the battlefield under its owner's control.
SVar:TrigReturn:AB$ChangeZone | Cost$ 0 | Origin$ Exile | Destination$ Battlefield | Defined$ Self | SubAbility$ DBCleanUp
SVar:DBCleanUp:DB$Cleanup | ClearRemembered$ True
SVar:Rarity:Rare
End
Does the remembering work here (does the exiled Tatsumasa state "Remembered:...")?
Well spotted. It seems that because the card is exiled as part of the cost, it isn't around when the RememberTokens fires. If exile is removed from the cost then everything works (except for it not being exiled of course :D ). Is there any clean way to work around this, or is this another one to be added in the wiki to the pile that didn't quite work?

On a side note, this card has some strange interactions I'm not quite sure of how they should work. If Doubling Season is in play, 2 tokens will be generated, both remembered by Tatsumasa. If one dies the other is still remembered. So if Tatsumasa is then exiled by Oblivion Ring, destroying the second dragon returns it to the battlefield. Is this right?

Sloth wrote:
moomarc wrote:Firstly, here's the new script for Saproling Burst with the static pump. Thanks Sol. Definitely cleaner this way. It was a good script to learn some backroads though. It all works according to the rulings etc except that the pump is on the host rather than token. Let me know if it can be committed like this.
Saproling Burst | Open
Name:Saproling Burst
ManaCost:4 G
Types:Enchantment
Text:no text
K:Fading:7
A:AB$ Token | Cost$ SubCounter<1/FADE> | TokenAmount$ 1 | TokenName$ Saproling | TokenTypes$ Creature,Saproling | TokenOwner$ You | TokenImage$ G X X Saproling | TokenColors$ Green | TokenPower$ 0 | TokenToughness$ 0 | RememberTokens$ True | TokenKeywords$ This creature's power and toughness are each equal to the number of fade counters on CARDNAME. | SpellDescription$ Put a green Saproling creature token onto the battlefield. It has "This creature's power and toughness are each equal to the number of fade counters on CARDNAME."
S:Mode$ Continuous | Affected$ Creature.IsRemembered | SetPower$ X | SetToughness$ X | Description$ HIDDEN It has "This creature's power and toughness are each equal to the number of fade counters on Saproling Burst."
SVar:X:Count$CardCounters.FADE
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Destination$ Any | Execute$ DestroyRemembered | TriggerDescription$ When CARDNAME leaves the battlefield, destroy all tokens put onto the battlefield with CARDNAME. They can't be regenerated.
SVar:DestroyRemembered:DB$DestroyAll | Cost$ 0 | ValidCards$ Creature.IsRemembered | NoRegen$ True | SubAbility$ DBCleanUp
SVar:DBCleanUp:DB$Cleanup | ClearRemembered$ True
SVar:RemAIDeck:True
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/saproling_burst.jpg
SetInfo:NMS|Rare|http://magiccards.info/scans/en/ne/113.jpg
Oracle:Fading 7 (This enchantment enters the battlefield with seven fade counters on it. At the beginning of your upkeep, remove a fade counter from it. If you can't, sacrifice it.)\nRemove a fade counter from Saproling Burst: Put a green Saproling creature token onto the battlefield. It has "This creature's power and toughness are each equal to the number of fade counters on Saproling Burst."\nWhen Saproling Burst leaves the battlefield, destroy all tokens put onto the battlefield with Saproling Burst. They can't be regenerated.
End

I would change the continuous static ability to use "SetPower" and "SetToughness" instead of "AddPower" and "AddToughness" (so it works correctly with other P/T setting cards like Mirror Entity), otherwise I'm ok with it.
Thanks. I'm still trying to get a grasp on all the different elements for scripting. I've made the changes now so I'll just wait for you or Sol to give the final 'All Clear' before I commit.
-Marc
User avatar
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

Postby Iran » 03 Nov 2011, 13:37

Two mecanism that I miss in the forge:
1) Splice onto Arcane (cards like Blessed Breath, Kodama's Might, etc.. can use it)
2) cast CARDNAME(or cards) without paying it's (their) mana costs (cards like Hellcarver Demon, Knowledge Pool, Wrexial, the Risen Deep, Twinning Glass, Shell of the Last Kappa, etc.. can use it)
Obs: I think that cards like Knowledge Pool will need a button below the button of exile and then you click in this button to see the cards and cast them without paying your mana cost. The problem is separate cards exiled with Knowledge Pool (for example) from the cards exiled by others cards (like Hellcarver Demon for example)

thanks
Last edited by Iran on 03 Nov 2011, 19:50, edited 1 time in total.
Iran
 
Posts: 251
Joined: 11 Jul 2011, 04:36
Has thanked: 61 times
Been thanked: 4 times

Re: Card Development Questions

Postby friarsol » 03 Nov 2011, 13:52

Iran wrote:I see these ones too Infused Arrows, Hex Parasite
Infused Arrows is already supported, as it removes counters from itself. Hex Parasite isn't removing Counters as a cost. The issue with this card is it is removing "any" counters which I don't believe is supported in AF_RemoveCounter yet.
friarsol
Global Moderator
 
Posts: 7593
Joined: 15 May 2010, 04:20
Has thanked: 243 times
Been thanked: 965 times

Re: Card Development Questions

Postby Hellfish » 03 Nov 2011, 13:53

@Marc:
The problem with SpellAbilities storing the Triggered<Variable>s is that only SpellAbilities in the same ability "chain" have access to them, so a triggered ability that fires later is a new "chain" and has no access to the same Triggered<Variables> as the first. Sol implemented this and he had a good reason for it but I can't remember what it was.I guess I could add a parameter to triggers that would add specified Triggered<Variable>s to the host card's rememberedlist a'la "RememberTriggered$ Attacker,Blocker" and you could use it that way?
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
User avatar
Hellfish
Programmer
 
Posts: 1297
Joined: 07 Jun 2009, 10:41
Location: South of the Pumphouse
Has thanked: 110 times
Been thanked: 169 times

Re: Card Development Questions

Postby Sloth » 03 Nov 2011, 15:48

Hellfish wrote:@Marc:
I guess I could add a parameter to triggers that would add specified Triggered<Variable>s to the host card's rememberedlist a'la "RememberTriggered$ Attacker,Blocker" and you could use it that way?
I think the problem would be that when a trigger fires twice a turn and two delayed triggers are created only one list of remembered can be stored. A better solution would be to pass on triggering objects to delayed triggers that are created by triggers.
User avatar
Sloth
Programmer
 
Posts: 3498
Joined: 23 Jun 2009, 19:40
Has thanked: 125 times
Been thanked: 507 times

Re: Card Development Questions

Postby Hellfish » 03 Nov 2011, 16:13

Yeah, that is a problem. Unfortunately, that solution can't be done because the delayed trigger is like a regular trigger in that it's ability isn't created until it is time to run it, so Triggeredvariables has nowhere to be passed on to when the Delayed trigger is created..
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
User avatar
Hellfish
Programmer
 
Posts: 1297
Joined: 07 Jun 2009, 10:41
Location: South of the Pumphouse
Has thanked: 110 times
Been thanked: 169 times

Re: Card Development Questions

Postby jeffwadsworth » 03 Nov 2011, 16:30

Testing Complicate:
Script:
| Open
Name:Complicate
ManaCost:2 U
Types:Instant
Text:no text
K:Cycling:2 U
A:SP$ Counter | Cost$ 2 U | TargetType$ Spell | ValidTgts$ Card | UnlessCost$ 3 | SpellDescription$ Counter target spell unless its controller pays 3.
T:Mode$ Cycled | ValidCard$ Card.Self | Execute$ TrigCounter | OptionalDecider$ You | TriggerDescription$ When you cycle CARDNAME, you may counter target spell unless its controller pays 1.
SVar:TrigCounter:SP$ Counter | Cost$ 0 | TargetType$ Spell | ValidTgts$ Card | UnlessCost$ 1
SVar:Rarity:Uncommon
SVar:Picture:http://www.wizards.com/global/images/magic/general/complicate.jpg
End



This error occurs when I cycle the card and choose to counter a spell.

| Open
This is a Crash Report. An error has occurred. Please save this message to a file.
Please follow the instructions at this address to submit this Crash Report, plus what you were doing at the time:
http://tinyurl.com/3zzrnyb
Reporting bugs in Forge is very important. We thank you for your time.

null


Version:
Forge version SVN

OS: Windows 7 Version: 6.1 Architecture: x86

Java Version: 1.6.0_29 Vendor: Sun Microsystems Inc.

Detailed error trace:
java.lang.NullPointerException
at forge.AllZone.isCardInZone(AllZone.java:521)
at forge.Card.isInZone(Card.java:8105)
at forge.MagicStack.addAndUnfreeze(MagicStack.java:163)
at forge.card.spellability.SpellAbilityRequirements.addAbilityToStack(SpellAbilityRequirements.java:217)
at forge.card.spellability.SpellAbilityRequirements.finishPaying(SpellAbilityRequirements.java:171)
at forge.card.cost.CostPayment.payCost(CostPayment.java:216)
at forge.card.spellability.SpellAbilityRequirements.startPaying(SpellAbilityRequirements.java:158)
at forge.card.spellability.SpellAbilityRequirements.needPayment(SpellAbilityRequirements.java:145)
at forge.card.spellability.SpellAbilityRequirements.finishedTargeting(SpellAbilityRequirements.java:134)
at forge.card.spellability.TargetSelection.chooseTargets(TargetSelection.java:189)
at forge.card.spellability.TargetSelection.chooseCardFromStack(TargetSelection.java:450)
at forge.card.spellability.TargetSelection.chooseValidInput(TargetSelection.java:240)
at forge.card.spellability.TargetSelection.chooseTargets(TargetSelection.java:200)
at forge.card.spellability.SpellAbilityRequirements.fillRequirements(SpellAbilityRequirements.java:110)
at forge.card.spellability.SpellAbilityRequirements.fillRequirements(SpellAbilityRequirements.java:77)
at forge.GameAction.playSpellAbility(GameAction.java:2508)
at forge.MagicStack.chooseOrderOfSimultaneousStackEntry(MagicStack.java:1294)
at forge.MagicStack.chooseOrderOfSimultaneousStackEntryAll(MagicStack.java:1231)
at forge.Phase.passPriority(Phase.java:812)
at forge.ComputerAIGeneral.stackResponse(ComputerAIGeneral.java:520)
at forge.ComputerAIGeneral.stackNotEmpty(ComputerAIGeneral.java:460)
at forge.gui.input.InputControl.updateInput(InputControl.java:242)
at forge.GuiInput.update(GuiInput.java:34)
at java.util.Observable.notifyObservers(Unknown Source)
at java.util.Observable.notifyObservers(Unknown Source)
at forge.MyObservable.updateObservers(MyObservable.java:21)
at forge.gui.input.InputControl.resetInput(InputControl.java:129)
at forge.Phase.passPriority(Phase.java:798)
at forge.MagicStack.add(MagicStack.java:794)
at forge.MagicStack.addAndUnfreeze(MagicStack.java:157)
at forge.card.spellability.SpellAbilityRequirements.addAbilityToStack(SpellAbilityRequirements.java:217)
at forge.card.spellability.SpellAbilityRequirements.finishPaying(SpellAbilityRequirements.java:171)
at forge.card.cost.CostPayment.payCost(CostPayment.java:216)
at forge.card.cost.CostPayment.paidCost(CostPayment.java:179)
at forge.card.cost.CostMana$2.done(CostMana.java:385)
at forge.card.cost.CostMana$2.selectCard(CostMana.java:357)
at forge.GuiInput.selectCard(GuiInput.java:103)
at forge.GuiDisplay$18.mousePressed(GuiDisplay.java:577)
at java.awt.AWTEventMulticaster.mousePressed(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
jeffwadsworth
Super Tester Elite
 
Posts: 1172
Joined: 20 Oct 2010, 04:47
Location: USA
Has thanked: 287 times
Been thanked: 70 times

Re: Card Development Questions

Postby Hellfish » 03 Nov 2011, 16:40

@Jeff: I think Sloth fixed that in r11728.Try updating?
EDIT: Ah, nvm.
Last edited by Hellfish on 03 Nov 2011, 16:41, edited 1 time in total.
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
User avatar
Hellfish
Programmer
 
Posts: 1297
Joined: 07 Jun 2009, 10:41
Location: South of the Pumphouse
Has thanked: 110 times
Been thanked: 169 times

Re: Card Development Questions

Postby Sloth » 03 Nov 2011, 16:41

jeffwadsworth wrote:Testing Complicate:
Script:
| Open
Name:Complicate
ManaCost:2 U
Types:Instant
Text:no text
K:Cycling:2 U
A:SP$ Counter | Cost$ 2 U | TargetType$ Spell | ValidTgts$ Card | UnlessCost$ 3 | SpellDescription$ Counter target spell unless its controller pays 3.
T:Mode$ Cycled | ValidCard$ Card.Self | Execute$ TrigCounter | OptionalDecider$ You | TriggerDescription$ When you cycle CARDNAME, you may counter target spell unless its controller pays 1.
SVar:TrigCounter:SP$ Counter | Cost$ 0 | TargetType$ Spell | ValidTgts$ Card | UnlessCost$ 1
SVar:Rarity:Uncommon
SVar:Picture:http://www.wizards.com/global/images/magic/general/complicate.jpg
End



This error occurs when I cycle the card and choose to counter a spell.
The triggered ability should not be an "SP$".
User avatar
Sloth
Programmer
 
Posts: 3498
Joined: 23 Jun 2009, 19:40
Has thanked: 125 times
Been thanked: 507 times

Re: Card Development Questions

Postby jeffwadsworth » 03 Nov 2011, 19:07

Sloth wrote:
jeffwadsworth wrote:Testing Complicate:
Script:
| Open
Name:Complicate
ManaCost:2 U
Types:Instant
Text:no text
K:Cycling:2 U
A:SP$ Counter | Cost$ 2 U | TargetType$ Spell | ValidTgts$ Card | UnlessCost$ 3 | SpellDescription$ Counter target spell unless its controller pays 3.
T:Mode$ Cycled | ValidCard$ Card.Self | Execute$ TrigCounter | OptionalDecider$ You | TriggerDescription$ When you cycle CARDNAME, you may counter target spell unless its controller pays 1.
SVar:TrigCounter:SP$ Counter | Cost$ 0 | TargetType$ Spell | ValidTgts$ Card | UnlessCost$ 1
SVar:Rarity:Uncommon
SVar:Picture:http://www.wizards.com/global/images/magic/general/complicate.jpg
End



This error occurs when I cycle the card and choose to counter a spell.
The triggered ability should not be an "SP$".
Very true. Unfortunately, this card has issues with NPE's even with the first SP$ Counter if you do not pay the UnlessCost. I will leave it alone for now.
jeffwadsworth
Super Tester Elite
 
Posts: 1172
Joined: 20 Oct 2010, 04:47
Location: USA
Has thanked: 287 times
Been thanked: 70 times

Re: Card Development Questions

Postby Sloth » 03 Nov 2011, 19:51

jeffwadsworth wrote:Very true. Unfortunately, this card has issues with NPE's even with the first SP$ Counter if you do not pay the UnlessCost. I will leave it alone for now.
Well I did try to fix the NPE you posted. Is it still happening? If yes, this might be a more general problem.
User avatar
Sloth
Programmer
 
Posts: 3498
Joined: 23 Jun 2009, 19:40
Has thanked: 125 times
Been thanked: 507 times

PreviousNext

Return to Developer's Corner

Who is online

Users browsing this forum: No registered users and 23 guests


Who is online

In total there are 23 users online :: 0 registered, 0 hidden and 23 guests (based on users active over the past 10 minutes)
Most users ever online was 4143 on 23 Jan 2024, 08:21

Users browsing this forum: No registered users and 23 guests

Login Form