Page 134 of 140

Re: Card Development Questions

PostPosted: 16 Mar 2015, 18:43
by Marek14
Can't see the problem, but I think there might be a problem with original Sutured Ghoul's code (though not the part you copied). If I read the code correctly, it initializes P/T of Sutured Ghoul once when it enters the battlefield, and then forgets the remembered cards, but that's not correct. Gatherer ruling says:

If any of the creature cards you exile has a characteristic-defining ability that defines its power and/or toughness, that ability will apply. For example, if Dungrove Elder is exiled this way, its power and toughness while it's in exile are equal to the number of Forests you control, and Sutured Ghoul's power and toughness will change as the number of Forests you control changes. If the characteristic-defining ability can't be applied (for instance, it relies on a choice made as the card enters the battlefield), then use 0.
So Sutured Ghoul should statically check the total power and toughness of exiled cards and change when their P/T changes or when they leave exile or get re-exiled.

Re: Card Development Questions

PostPosted: 16 Mar 2015, 18:50
by friarsol
Midori, you should repost your whole script again, so we can see it with the latest changes...

Re: Card Development Questions

PostPosted: 16 Mar 2015, 19:13
by Midori
friarsol wrote:Midori, you should repost your whole script again, so we can see it with the latest changes...
Here is the latest version of the code.
Code: Select all
Name:Living Lore
ManaCost:3 U
Types:Creature Avatar
P/T:*/*
K:ETBReplacement:Copy:ChooseSpell
SVar:ChooseSpell:DB$ ChooseCard | Defined$ You | Amount$ 1 | Choices$ Sorcery.YouOwn,Instant.YouOwn | ChoiceTitle$ Exile a instant or sorcery card from your graveyard. | ChoiceZone$ Graveyard | RemenberChosen$ True | SubAbility$ ExileSpell |SpellDescription$ As CARDNAME enters the battlefield, exile a instant or sorcery card from your graveyard. CARDNAME's power and toughness are each equal to the exiled card's converted mana cost.
SVar:ExileSpell:DB$ ChangeZone | ChangeType$ Remembered | Origin$ Graveyard | Destination$ Exile | SubAbility$ AnimateLore
SVar:AnimateLore:DB$ Animate | Defined$ Self | Power$ TotalPower | Toughness$ TotalPower | Permanent$ True | References$ TotalPower
SVar:TotalPower:Remembered$CardManaCost
T:Mode$ DealtCombatDamageOnce | ValidSource$ Self | Execute$ TrigSacLore | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage, you may sacrifice it. If you do, you may cast the exiled card without paying its mana cost.
SVar:TrigSacLore:AB$ Play | Cost$ Sac<1/CARDNAME> | Defined$ Remembered | Amount$ All | Controller$ You | WithoutManaCost$ True | Optional$ True | ForgetRemembered$ True
SVar:RemRandomDeck:True

Re: Card Development Questions

PostPosted: 16 Mar 2015, 19:43
by friarsol
I doubt this will fix it, but it probably should be -

K:ETBReplacement:Other:ChooseSpell

I'd recommend animating before Exiling just to see if that helps, otherwise someone with a debugger will need to go in and see what's going on, it looks fine for the most part (aside from copy/pasted names that no longer make sense "total power")

Re: Card Development Questions

PostPosted: 16 Mar 2015, 20:03
by Midori
friarsol wrote:I doubt this will fix it, but it probably should be -

K:ETBReplacement:Other:ChooseSpell

I'd recommend animating before Exiling just to see if that helps, otherwise someone with a debugger will need to go in and see what's going on, it looks fine for the most part (aside from copy/pasted names that no longer make sense "total power")
Ok thanks, ill see if that works. If its fine ill use "X" instead of "TotalPower"

Marek14 wrote:Can't see the problem, but I think there might be a problem with original Sutured Ghoul's code (though not the part you copied). If I read the code correctly, it initializes P/T of Sutured Ghoul once when it enters the battlefield, and then forgets the remembered cards, but that's not correct. Gatherer ruling says:

If any of the creature cards you exile has a characteristic-defining ability that defines its power and/or toughness, that ability will apply. For example, if Dungrove Elder is exiled this way, its power and toughness while it's in exile are equal to the number of Forests you control, and Sutured Ghoul's power and toughness will change as the number of Forests you control changes. If the characteristic-defining ability can't be applied (for instance, it relies on a choice made as the card enters the battlefield), then use 0.
So Sutured Ghoul should statically check the total power and toughness of exiled cards and change when their P/T changes or when they leave exile or get re-exiled.
I absolutlely agree, but Sutured Ghoul was the best reference i could find since the code of The Mimeoplasm is very... special.
I think instead of "DB$ Animate" ill try to use "Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True"

Edit:
It still doesn't work. Apparently it just won't exile the spell. Here the current code. I hope i didn't make more grammar mistakes.
Edit Living Lore Code | Open
Code: Select all
Name:Living Lore
ManaCost:3 U
Types:Creature Avatar
P/T:*/*
K:ETBReplacement:Other:ChooseSpell
SVar:ChooseSpell:DB$ ChooseCard | Defined$ You | Amount$ 1 | Choices$ Sorcery.YouOwn,Instant.YouOwn | ChoiceTitle$ Exile a instant or sorcery card from your graveyard. | ChoiceZone$ Graveyard | RemenberChosen$ True | SubAbility$ ExileSpell |SpellDescription$ As CARDNAME enters the battlefield, exile a instant or sorcery card from your graveyard.
S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | SetPower$ X | SetToughness$ X | Description$ CARDNAME's power and toughness are each equal to the exiled card's converted mana cost.
SVar:ExileSpell:DB$ ChangeZone | ChangeType$ Remembered | Origin$ Graveyard | Destination$ Exile | SubAbility$ AnimateLore
SVar:X:Remembered$ CardManaCost
T:Mode$ DealtCombatDamageOnce | ValidSource$ Self | Execute$ TrigSacLore | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage, you may sacrifice it. If you do, you may cast the exiled card without paying its mana cost.
SVar:TrigSacLore:AB$ Play | Cost$ Sac<1/CARDNAME> | Defined$ Remembered | Amount$ All | Controller$ You | WithoutManaCost$ True | Optional$ True | ForgetRemembered$ True
SVar:RemRandomDeck:True
But the good news: The card has now card text. Even though its abilities arent displayed in the correct order.

Edit 2
I have played a bit with the code. the static ability for P/T seems to work (i coded the card as 0/1 with the ability and it is a 0/0 in my hand). So the issue is very likely the replacement effect that is supposed to exile a card. While i can choose a valid card in my graveyard, it won't exile that card (and that card is most likely not remembered as well).
Edit 2 Living Lore Code | Open
Code: Select all
Name:Living Lore
ManaCost:3 U
Types:Creature Avatar
P/T:*/*
K:ETBReplacement:Other:ChooseSpell
SVar:ChooseSpell:DB$ ChooseCard | Defined$ You | Amount$ 1 | Choices$ Sorcery.YouOwn,Instant.YouOwn | ChoiceTitle$ Exile a instant or sorcery card from your graveyard. | ChoiceZone$ Graveyard | RemenberChosen$ True | SubAbility$ ExileSpell |SpellDescription$ As CARDNAME enters the battlefield, exile a instant or sorcery card from your graveyard.
S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | SetPower$ X | SetToughness$ X | Description$ CARDNAME's power and toughness are each equal to the exiled card's converted mana cost.
SVar:ExileSpell:DB$ ChangeZone | ChangeType$ Remembered | Origin$ Graveyard | Destination$ Exile
SVar:X:Remembered$ CardManaCost
T:Mode$ DealtCombatDamageOnce | ValidSource$ Self | Execute$ TrigSacLore | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage, you may sacrifice it. If you do, you may cast the exiled card without paying its mana cost.
SVar:TrigSacLore:AB$ Play | Cost$ Sac<1/CARDNAME> | Defined$ Remembered | Amount$ All | Controller$ You | WithoutManaCost$ True | Optional$ True | ForgetRemembered$ True
SVar:RemRandomDeck:True

Re: Card Development Questions

PostPosted: 16 Mar 2015, 20:44
by Marek14
Sutured Ghoul also uses ETBReplacement:Copy: -- is that correct?

Re: Card Development Questions

PostPosted: 16 Mar 2015, 21:59
by Alvy01
Heys guys sorry for posting twice in one day about the same topic but I only have two abilities for my custom cards that I just can't seem to get working. Thanks in advance to anyone who is able to help.

My first issue is a planeswalker ultimate that is supposed to be: You get an emblem with "Whenever you cast an instant spell, copy it. You may choose new targets for the copy." Here's my code so far for this ability I'm sure both of these needs some more work to get functioning:

A:AB$ Effect | Cost$ SubCounter<6/LOYALTY> | Planeswalker$ True | Ultimate$ True | Name$ Octavius, Spellweaver emblem | Image$ octavius_spellweaver_emblem | Triggers$ TrigSpellCast | SVars$ TrigCopy,CopySpellAbility | Duration$ Permanent | AILogic$ Always | SpellDescription$ You get an emblem with "Whenever you cast an instant spell, you may copy that spell. You may choose new targets for the copy."
SVar:TrigSpellCast:Mode$ SpellCast | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigCopy | TriggerDescription$ Whenever you cast an instant spell, you may copy that spell. You may choose new targets for the copy.
SVar:TrigCopy:AB$ CopySpellAbility | Cost$ 0 | Defined$ TriggeredSpellAbility

The second issue is another planeswalker ultimate, which is: You get an emblem with "You have no max hand size, on your upkeep you gain life equal to the number of cards in your hand." Here's the code so far.

A:AB$ Effect | Cost$ SubCounter<7/LOYALTY> | Planeswalker$ True | Ultimate$ True | Name$ Marcus, Knight Enchanter emblem | Image$ marcus_knight_enchanter_emblem | Triggers$ EOTTrig | SVars$ MarcusEmblem | Duration$ Permanent | SpellDescription$ You get an emblem with "You have no max hand size, on your upkeep you gain life equal to the number of cards in your hand."SVar:EOTTrig:Mode$ Continuous | Affected$ You | SetMaxHandSize$ Unlimited | SpellDescription$ You have no maximum hand size. At the beginning of your upkeep, you gain X life, where X is the number of cards in your hand.SVar:MarcusEmblem:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | IsPresent$ Card.YouCtrl | PresentZone$ Hand | PresentCompare$ GT4 | TriggerZones$ Battlefield | Execute$ TrigGainLife | TriggerDescription$ You have no maximum hand size. At the beginning of your upkeep, you gain X life, where X is the number of cards in your hand.
SVar:TrigGainLife:AB$GainLife | Cost$ 0 | Defined$ You | LifeAmount$ X | References$ X
SVar:X:Count$InYourHand

Again thanks in advance if anyone can help I'm still trying to get a grasp on the script language and I'm not a programmer or anything.

Re: Card Development Questions

PostPosted: 16 Mar 2015, 23:45
by Midori
"Alvy01" | Open
Alvy01 wrote:Heys guys sorry for posting twice in one day about the same topic but I only have two abilities for my custom cards that I just can't seem to get working. Thanks in advance to anyone who is able to help.

My first issue is a planeswalker ultimate that is supposed to be: You get an emblem with "Whenever you cast an instant spell, copy it. You may choose new targets for the copy." Here's my code so far for this ability I'm sure both of these needs some more work to get functioning:

A:AB$ Effect | Cost$ SubCounter<6/LOYALTY> | Planeswalker$ True | Ultimate$ True | Name$ Octavius, Spellweaver emblem | Image$ octavius_spellweaver_emblem | Triggers$ TrigSpellCast | SVars$ TrigCopy,CopySpellAbility | Duration$ Permanent | AILogic$ Always | SpellDescription$ You get an emblem with "Whenever you cast an instant spell, you may copy that spell. You may choose new targets for the copy."
SVar:TrigSpellCast:Mode$ SpellCast | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigCopy | TriggerDescription$ Whenever you cast an instant spell, you may copy that spell. You may choose new targets for the copy.
SVar:TrigCopy:AB$ CopySpellAbility | Cost$ 0 | Defined$ TriggeredSpellAbility

The second issue is another planeswalker ultimate, which is: You get an emblem with "You have no max hand size, on your upkeep you gain life equal to the number of cards in your hand." Here's the code so far.

A:AB$ Effect | Cost$ SubCounter<7/LOYALTY> | Planeswalker$ True | Ultimate$ True | Name$ Marcus, Knight Enchanter emblem | Image$ marcus_knight_enchanter_emblem | Triggers$ EOTTrig | SVars$ MarcusEmblem | Duration$ Permanent | SpellDescription$ You get an emblem with "You have no max hand size, on your upkeep you gain life equal to the number of cards in your hand."SVar:EOTTrig:Mode$ Continuous | Affected$ You | SetMaxHandSize$ Unlimited | SpellDescription$ You have no maximum hand size. At the beginning of your upkeep, you gain X life, where X is the number of cards in your hand.SVar:MarcusEmblem:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | IsPresent$ Card.YouCtrl | PresentZone$ Hand | PresentCompare$ GT4 | TriggerZones$ Battlefield | Execute$ TrigGainLife | TriggerDescription$ You have no maximum hand size. At the beginning of your upkeep, you gain X life, where X is the number of cards in your hand.
SVar:TrigGainLife:AB$GainLife | Cost$ 0 | Defined$ You | LifeAmount$ X | References$ X
SVar:X:Count$InYourHand

Again thanks in advance if anyone can help I'm still trying to get a grasp on the script language and I'm not a programmer or anything.
There are a lot of things i see here.
"TriggerZones$ Battlefield" -> "TriggerZones$ Command" for example (a emblem can't trigger on the battlefield, since it is in your command zone)
Im not so sure about the first Ultimate, but for the second Ultimate, you should try to reference from Tamiyo, the Moon Sage (for how to script an emblem with static and triggered abilities) and Venser's Journal (since it is basically your emblem as artifact).
Remember, the unlimited hand ist a static ability and not a trigger. Therefore you need to use StaticAbilities$ for the unlimited hand and Trigger$ for the lifegain.

Re: Card Development Questions

PostPosted: 17 Mar 2015, 14:59
by Alvy01
Thank you for your help and for pointing those cards out to me I now can get it to give the unlimited hand size but the gain life isn't happening and I'm not sure why. Here's the revised code:

A:AB$ Effect | Cost$ SubCounter<0/LOYALTY> | Planeswalker$ True | Ultimate$ True | Name$ Marcus, Knight Enchanter emblem | Image$ marcus_knight_enchanter_emblem | StaticAbilities$ UnlimitedHand | Triggers$ MarcusGainLife | SVars$ TrigGainLife | Stackable$ False | Duration$ Permanent | AILogic$ Always | SpellDescription$ You get an emblem with "You have no maximum hand size" and "At the beginning of your upkeep, you gain 1 life for each card in your hand."
SVar:UnlimitedHand:Mode$ Continuous | EffectZone$ Command | Affected$ You | SetMaxHandSize$ Unlimited | Description$ You have no maximum hand size.
SVar:MarcusGainLife:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Command | Execute$ TrigGainLife | TriggerDescription$ At the beginning of your upkeep, you gain 1 life for each card in your hand.
SVar:TrigGainLife:AB$GainLife | Cost$ 0 | LifeAmount$ X | References$ X
SVar:X:Count$InYourHand

Re: Card Development Questions

PostPosted: 17 Mar 2015, 15:28
by friarsol
You aren't passing the "X" SVar into the created Effect. So when TrigGainLife gets run, it tries to look up "X" which it can't find, so assumes it's 0.

Re: Card Development Questions

PostPosted: 17 Mar 2015, 15:39
by Alvy01
[code][/code]Oh I made the same mistake twice now thank you, would you have any advice on the first ultimate I had a few posts back I'm still stumped on that one

Re: Card Development Questions

PostPosted: 17 Mar 2015, 16:06
by friarsol
Alvy01 wrote:would you have any advice on the first ultimate I had a few posts back I'm still stumped on that one
Are you talking about the Octavius one? Did you already change the Zone it triggers in to Command?

This looks just like Chandra's second ability, except it is permanent, instead of a one time use. That ability is:

Chandra's -2 | Open
A:AB$Effect | Cost$ SubCounter<2/LOYALTY> | Planeswalker$ True | Name$ Chandra, the Firebrand effect. | Image$ chandra_the_firebrand_effect | Triggers$ TrigCopy | SVars$ TrigCopyMain,DBCleanup | SpellDescription$ When you cast your next instant or sorcery spell this turn, copy that spell. You may choose new targets for the copy.
SVar:TrigCopy:Mode$ SpellCast | ValidCard$ Instant,Sorcery | ValidActivatingPlayer$ You | OneOff$ True | Execute$ TrigCopyMain | TriggerZones$ Command | TriggerDescription$ When you cast your next instant or sorcery spell this turn, copy that spell. You may choose new targets for the copy.
SVar:TrigCopyMain:AB$ CopySpellAbility | Cost$ 0 | Defined$ TriggeredSpellAbility | SubAbility$ DBCleanup


so yours would be something like:

Octavius | Open
A:AB$ Effect | Cost$ SubCounter<6/LOYALTY> | Planeswalker$ True | Ultimate$ True | Name$ Octavius, Spellweaver emblem | Image$ octavius_spellweaver_emblem | Triggers$ TrigCopy | SVars$ TrigCopyMain | SpellDescription$ You get an emblem with "Whenever you cast an instant spell, you may copy that spell. You may choose new targets for the copy."
SVar:TrigCopy:Mode$ SpellCast | ValidCard$ Instant | ValidActivatingPlayer$ You | Execute$ TrigCopyMain | TriggerZones$ Command | TriggerDescription$ Whenever you cast an instant spell, you may copy that spell. You may choose new targets for the copy.
SVar:TrigCopyMain:AB$ CopySpellAbility | Cost$ 0 | Defined$ TriggeredSpellAbility


There seems like there's a handful of differences here, all of which probably combine into why it's not working.

Re: Card Development Questions

PostPosted: 17 Mar 2015, 19:20
by Alvy01
Awesome thanks so much you guys. I'm not sure why Chandra didn't come up when I was searching for a similar ability. The code worked perfectly with the small addition of a Duration$ Permanent. Thanks again the assistance is much appreciated.

Re: Card Development Questions

PostPosted: 28 Mar 2015, 06:48
by rikkusguardian
Hey there! I'm a bit new to making cards for Forge, but I wanted to design a planeswalker to support Selesnya / Token players.

For her -2 ability, I wanted her to Populate first (make a copy of a token I control on my field) then put a +0/+2 counter on a target creature I control.

"-2: Populate, then put a +0/+2 counter on target creature you control."

But when i use this...

Code: Select all
A:AB$ ChooseCard | Cost$ SubCounter<2/LOYALTY> | Planeswalker$ True | Defined$ You | Amount$ 1 | Choices$ Creature.token+YouCtrl | AILogic$ AtLeast1 | SubAbility$ DBCopy | Mandatory$ True |  SpellDescription$ Populate, then put a +0/+2 counter on target creature you control. (Put a token onto the battlefield that's a copy of a creature token you control.)
SVar:DBCopy:DB$ CopyPermanent | Defined$ ChosenCard | SubAbility$ DBPutCounter
SVar:DBPutCounter:DB$ PutCounter | CounterNum$ 1 | CounterType$ P0P2 | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Creature+YouCtrl | TgtPrompt$ Select target creature | SpellDescription$ Put a +0/+2 counter on up to one target creature.
I am accidentally forced to instead put the counter on a creature BEFORE i populate. Darn...what If i was planning to have that counter be put on my newest populated token?

Re: Card Development Questions

PostPosted: 28 Mar 2015, 13:29
by friarsol
rikkusguardian wrote:"-2: Populate, then put a +0/+2 counter on target creature you control."

I am accidentally forced to instead put the counter on a creature BEFORE i populate. Darn...what If i was planning to have that counter be put on my newest populated token?
No offense, but it's just bad card design. It's doing exactly what you said it should do.

Targets are chosen before an ability goes on the stack. So the token that might be created can never be a legal target for that ability. You would need an ability like Bolster, which chooses the creature as it resolves.

Also, +0/+2 counters have only been used once (21 years ago), and while Forge handles them just fine, it's probably better not to use these types of counter.