It is currently 08 Dec 2019, 10:19
   
Text Size

Card Development Questions

Post MTG Forge Related Programming Questions Here

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

Re: Card Development Questions

Postby Marek14 » 19 Jun 2016, 08:53

This is the main crux of "damage control", I think -- full szstem of damage prevention and redirection is like a minigame all by itself.

At one time, damage used to be in "packets", and I believe it's still a good way to group damage points that are fungible (i.e. completely identical). Every time damage is dealt, there could be a window with list of damage packets, and the players (in standard APNAP order) would get a chance to apply replacement effects to it.

A damage packet should carry the following information:
1. The source, or LKI if the source no longer exists (Mogg Fanatic would be a good example here).
2. The recipient. Unlike source, the recipient must be currently valid object, and moreover must be creature, player or planeswalker.
3. The type of damage (combat or noncombat). Currently, I don't believe there is any way to mix both types in the same damage-dealing event.
4. Special properties of damage. There are two that need to be taken into account: non-preventable damage, which means that damage prevention effects can't apply to this packet (but all others still can, even if the net result is reducing of damage), and non-redirectable damage. Non-redirectable damage is only used by two cards, AFAIK, Lava Burst, and Whippoorwill, which both predate planeswalkers. Damage redirection effects fail against this type damage if the new recipient would be a creature or a player, but they will still work if the new recipient is unanimated planeswalker.
5. Amount of damage
6. Effects that were already applied to the damage. Rules say that each replacement effect can only affect a given event once, but a damage control window can contain many events and some effects can apply multiple times. Urza's Armor is an example here: you have to apply it to each individual packet of damage that aims to your face, but whenever you do it, the packet will be modified by adding this effect to "applied effects" list, so the same Urza's Armor can't be used to modify it again (but a second copy of Urza's Armor still can).
To make it easier, an effect should write itself here only if the effect still exists after applying.

Applying an effect can erase a packet, change its characteristics, or split it. It can happen that you end up with two packets that have the same source and recipient, but differ in applied effects, but this should be rare.

Example: Standard damage-prevention effect like Healing Salve has a variable counting how many points of damage to prevent, and set recipient. It applies to any preventable damage packet with this recipient, with this result:

1. Player selects how many points of damage to prevent from this packet. There can be some calculations involved to determine if the selected amount isn't too low (so the effect wouldn't have points left over even after fully preventing all other packets), or the player can simply be allowed to apply this effect to the same packet multiple times if this happens. (That might be better.) If only one value can be chosen, it's chosen automatically.
2. If chosen damage is equal to Packet_Damage, erase the packet. Subtract the Packet_Damage from Prevention; if result is 0, the prevention effect is spent and erased.
3. If chosen damage is less than Packet_Damage, modify the packet by reducing the damage. Then, once again, subtract the chosen damage from Prevention.

Harm's Way would then work in a completely analogical way, except that in case 2, the packet's recipient would be changed, and in case 3, the packet would be split in two.

Another "fun" part is that applying replacement effects might cause the event to contain things that are not damage at all, for example when Swans of Bryn Argoll replaces damage with card draw, or Phytohydra replaces it with placing of +1/+1 counters. I suggest that such effects are held in reserve until players finish dealing with damage, and applied together with final damage results afterwards, modified by their own replacements like Thought Reflection of Doubling Season. Still, there are some weird situations, for example replacing damage to Swans of Bryn Argoll by card drawing, then replacing one of the draws with Words of War, dealing damage back to the Swans -- in this case, Swans shouldn't replace that damage, since it's still part of an event it has already replaced.

Reflect Damage applies itself on the whole damage event, in this case, it would replace recipients in ALL packets originating from the source by that source's controller (and merge identical packets). This is because Reflect Damage never revers to the recipient of damage.

Should you wish to tackle this tangled web, this might be also a good time to fix effects like Dromad Purebred to only trigger once per damage event, regardless of how many sources deal damage (and corresponding "deal damage" effects like Spirit Link).
Marek14
Tester
 
Posts: 2670
Joined: 07 Jun 2008, 07:54
Has thanked: 0 time
Been thanked: 270 times

Re: Card Development Questions

Postby Hanmac » 19 Jun 2016, 10:11

man and i just wanted to add some missing cards,
i don't think i understand the damage system enough to rewrite it like that :/

===
like Standard damage-prevention effect like Healing Salve, does work with a PreventDamage Effect, but they only work with knowing the Target, and do not Check for the Given Source ...
and when i want to do some RedirectDamage with "the next X Damage" there is no nice Effect for that yet ...

===
i did Reverberation after i did try Reflect Damage
Code: Select all
Name:Reverberation
ManaCost:2 U U
Types:Instant
# The target lists a second zone to a Card is returned instead of a SA
A:SP$ Effect | Cost$ 2 U U | ValidTgts$ Sorcery | AILogic$ Prevent | TgtZone$ Stack,Battlefield | TgtPrompt$ Select target sorcery spell to redirect damage from | RememberObjects$ Targeted | ReplacementEffects$ SelflessNonCombat | Triggers$ TargetMoved | SVars$ NonCombatDmg,TargetMoved,ExileEffect,X | References$ NonCombat,NonCombatDmg,ExileEffect,X | StackDescription$ SpellDescription | SpellDescription$ All damage that would be dealt this turn by target sorcery spell is dealt to that spell's controller instead.

SVar:SelflessNonCombat:Event$ DamageDone | ValidSource$ Card.IsRemembered | ReplaceWith$ NonCombatDmg | Description$ The next time a source of your choice would deal damage this turn, that damage is dealt to that source's controller instead.
SVar:NonCombatDmg:AB$ DealDamage | Cost$ 0 | Defined$ RememberedController | DamageSource$ ReplacedSource | NumDmg$ X

SVar:TargetMoved:Mode$ ChangesZone | Origin$ Stack | Destination$ Any | ValidCard$ Card.IsRemembered | Execute$ ExileEffect | TriggerZones$ Command | Static$ True
SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile | Static$ True

SVar:X:ReplaceCount$DamageAmount
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/reverberation.jpg
Oracle:All damage that would be dealt this turn by target sorcery spell is dealt to that spell's controller instead.
I'm not 100% sure if thats correct ... tested again with Anger of the Gods, i do get the damage my creatures would get, but i don't know if that would make a difference for the result (3x3 instead of 9).

===
next i try some more "easy" ones like:
Comeuppance with having "prevent, deal damage" (not a redirect)
Samite Ministration with having "prevented that way from X source, do Y thing"

Flaming Gambit isn't much like a Prevention or Redirection but more like an Opponent Choice, but i think its doable.

===
i think my next goal is to try card like Captain's Maneuver and Razia, Boros Archangel ...
first i wanted to split them in multiple "1 damage" effects like from en-Kor, that might have been worked, but now i wanted to use some Svar as shield-counter in the Effect itself (the Effect does remove itself when there are no left).

as long they are not "X and/or your Y" simultaneous effects they might be doable for now.
Hanmac
 
Posts: 954
Joined: 06 May 2013, 18:44
Has thanked: 229 times
Been thanked: 158 times

Re: Card Development Questions

Postby Hanmac » 20 Jun 2016, 09:00

i managed to do Dawnbreak Reclaimer, take me long to get the thing with ChosenCard(WorstCard), ChosenPlayer/ChosenCardController, ChosenCard(WorstCard) right.

ChangeZoneAll did need a Optional flag for that, and i did some AI into it.
(so the AI only returns cards if his cards is better than yours)

i tested the card in single and multi player and the card should work, including the dissensions of the AI, but still might need some Tweaking.
(i am currently thinking about Phage the Untouchable, she should be considered in "WorstCard" selections, and AI should not return her when the other player does select her for that)

===
while doing Commander cards, i did Volcanic Offering, i got the idea from Arena.
Code: Select all
Name:Volcanic Offering
ManaCost:4 R
Types:Instant

A:SP$ Destroy | Cost$ 4 R | ValidTgts$ Land.nonBasic+YouDontCtrl | TgtPrompt$ Select target nonbasic land you don't control | SubAbility$ DBDestroyLand | SpellDescription$ Destroy target nonbasic land you don't control and target nonbasic land of an opponent's choice you don't control.

SVar:DBDestroyLand:DB$ Destroy | TargetingPlayer$ Player.Opponent | ValidTgts$ Land.nonBasic+YouDontCtrl | TgtPrompt$ Select target nonbasic land the caster of this spell don't control | SubAbility$ DBDamage

SVar:DBDamage:DB$ DealDamage | ValidTgts$ Creature.YouDontCtrl | TgtPrompt$ Select target creature you don't control | NumDmg$ 7 | SubAbility$ DBDamage2 | SpellDescription$ CARDNAME deals 7 damage to target creature you don't control and 7 damage to target creature of an opponent's choice you don't control.

SVar:DBDamage2:DB$ DealDamage | TargetingPlayer$ Player.Opponent | ValidTgts$ Creature.YouDontCtrl | TgtPrompt$ Select target creature the caster of this spell don't control | NumDmg$ 7

SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/volcanic_offering.jpg
Oracle:Destroy target nonbasic land you don't control and target nonbasic land of an opponent's choice you don't control.\nVolcanic Offering deals 7 damage to target creature you don't control and 7 damage to target creature of an opponent's choice you don't control.
The Card is coded correct (i think), the first three parts are working (except some AI tweaking that it should try to target the same choice when its the only player or no other opponent)

the current problem is the second damage Effect, it does have a problem with "damageChooseRequiredTargets" and then in "damageChooseRequiredTargets"
it currently fail to target the second creature, but i will check this out later, maybe i can fix it myself.
Hanmac
 
Posts: 954
Joined: 06 May 2013, 18:44
Has thanked: 229 times
Been thanked: 158 times

Re: Card Development Questions

Postby squee1968 » 20 Jun 2016, 10:07

I love seeing these old cards being added to forge, keep up the great work!
squee1968
 
Posts: 189
Joined: 18 Nov 2011, 03:28
Has thanked: 107 times
Been thanked: 24 times

Re: Card Development Questions

Postby sorinmarkov » 21 Jun 2016, 17:51

Yeah I second that. Great work!
"The vampires of this world don't know the pleasures of hunger. They gorge themselves without savoring the kill."
—Sorin Markov
sorinmarkov
 
Posts: 28
Joined: 05 Dec 2015, 18:50
Has thanked: 51 times
Been thanked: 2 times

Re: Card Development Questions

Postby Hanmac » 22 Jun 2016, 22:01

i did something again, but its currently to late to test it and i don't know if that would work.

Code: Select all
Name:Nova Pentacle
ManaCost: 4
Types:Artifact
A:AB$ ChooseSource | Cost$ 3 T | Choices$ Card | AILogic$ NeedsPrevention | SubAbility$ DBEffect | SpellDescription$ The next time a black source of your choice would deal damage to you this turn, prevent that damage.

SVar:DBEffect:DB$ Effect | TargetingPlayer$ Player.Opponent | ValidTgts$ Creature | TgtPrompt$ Select target creature | ReplacementEffects$ SelflessCombat,SelflessNonCombat | SVars$ SelflessCombat,SelflessNonCombat,ExileEffect,OutOfSight,X | RememberObjects$ Targeted | SubAbility$ DBCleanup | ConditionDefined$ ChosenCard | ConditionPresent$ Card | ConditionCompare$ GE1

SVar:SelflessCombat:Event$ DamageDone | ValidTarget$ You | ValidSource$ Card.ChosenCard | IsCombat$ True | ReplaceWith$ CombatDmg | ConditionDefined$ Remembered | ConditionPresent$ Card.Creature,Card.Planeswalker | ConditionCompare$ GE1 | Description$ The next time a source of your choice would deal damage to you this turn, that damage is dealt to target creature of an opponent's choice instead.

SVar:SelflessNonCombat:Event$ DamageDone | ValidTarget$ You | ValidSource$ Card.ChosenCard | IsCombat$ False | ReplaceWith$ NonCombatDmg | Secondary$ True | ConditionDefined$ Remembered | ConditionPresent$ Card.Creature,Card.Planeswalker | ConditionCompare$ GE1 | Description$ The next time a source of your choice would deal damage to you this turn, that damage is dealt to target creature of an opponent's choice instead.

SVar:CombatDmg:AB$ DealDamage | Cost$ 0 | Defined$ Remembered | DamageSource$ ReplacedSource | CombatDamage$ True | NumDmg$ X | SubAbility$ ExileEffect
SVar:NonCombatDmg:AB$ DealDamage | Cost$ 0 | Defined$ Remembered | DamageSource$ ReplacedSource | NumDmg$ X | SubAbility$ ExileEffect

SVar:OutOfSight:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | Defined$ Remembered | Execute$ ExileEffect | Static$ True

SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile | Static$ True
SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True
SVar:X:ReplaceCount$DamageAmount
SVar:RemAIDeck:True

SVar:RemRandomDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/nova_pentacle.jpg
Oracle:{3}, {T}: The next time a source of your choice would deal damage to you this turn, that damage is dealt to target creature of an opponent's choice instead.
my problem is this: Currently the DamageRedirection effects that does have a TargetCreature or something currently might check if it does leaves the Battlefield for the effect to stop working.
but i found in the rulings of the Nova Pentacle, that damage should not be redirected if creature is not a creature (or planeswalker) anymore.

so can i use
Code: Select all
ConditionDefined$ Remembered | ConditionPresent$ Card.Creature,Card.Planeswalker | ConditionCompare$ GE1
in the Replacement Trigger, or does that not work yet?

(might be easier if such damageRedirection would some kind of extra Effect/Thing)
Hanmac
 
Posts: 954
Joined: 06 May 2013, 18:44
Has thanked: 229 times
Been thanked: 158 times

Re: Card Development Questions

Postby Marek14 » 22 Jun 2016, 23:14

Hanmac wrote:i did something again, but its currently to late to test it and i don't know if that would work.

Code: Select all
Name:Nova Pentacle
ManaCost: 4
Types:Artifact
A:AB$ ChooseSource | Cost$ 3 T | Choices$ Card | AILogic$ NeedsPrevention | SubAbility$ DBEffect | SpellDescription$ The next time a black source of your choice would deal damage to you this turn, prevent that damage.

SVar:DBEffect:DB$ Effect | TargetingPlayer$ Player.Opponent | ValidTgts$ Creature | TgtPrompt$ Select target creature | ReplacementEffects$ SelflessCombat,SelflessNonCombat | SVars$ SelflessCombat,SelflessNonCombat,ExileEffect,OutOfSight,X | RememberObjects$ Targeted | SubAbility$ DBCleanup | ConditionDefined$ ChosenCard | ConditionPresent$ Card | ConditionCompare$ GE1

SVar:SelflessCombat:Event$ DamageDone | ValidTarget$ You | ValidSource$ Card.ChosenCard | IsCombat$ True | ReplaceWith$ CombatDmg | ConditionDefined$ Remembered | ConditionPresent$ Card.Creature,Card.Planeswalker | ConditionCompare$ GE1 | Description$ The next time a source of your choice would deal damage to you this turn, that damage is dealt to target creature of an opponent's choice instead.

SVar:SelflessNonCombat:Event$ DamageDone | ValidTarget$ You | ValidSource$ Card.ChosenCard | IsCombat$ False | ReplaceWith$ NonCombatDmg | Secondary$ True | ConditionDefined$ Remembered | ConditionPresent$ Card.Creature,Card.Planeswalker | ConditionCompare$ GE1 | Description$ The next time a source of your choice would deal damage to you this turn, that damage is dealt to target creature of an opponent's choice instead.

SVar:CombatDmg:AB$ DealDamage | Cost$ 0 | Defined$ Remembered | DamageSource$ ReplacedSource | CombatDamage$ True | NumDmg$ X | SubAbility$ ExileEffect
SVar:NonCombatDmg:AB$ DealDamage | Cost$ 0 | Defined$ Remembered | DamageSource$ ReplacedSource | NumDmg$ X | SubAbility$ ExileEffect

SVar:OutOfSight:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | Defined$ Remembered | Execute$ ExileEffect | Static$ True

SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile | Static$ True
SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True
SVar:X:ReplaceCount$DamageAmount
SVar:RemAIDeck:True

SVar:RemRandomDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/nova_pentacle.jpg
Oracle:{3}, {T}: The next time a source of your choice would deal damage to you this turn, that damage is dealt to target creature of an opponent's choice instead.
my problem is this: Currently the DamageRedirection effects that does have a TargetCreature or something currently might check if it does leaves the Battlefield for the effect to stop working.
but i found in the rulings of the Nova Pentacle, that damage should not be redirected if creature is not a creature (or planeswalker) anymore.

so can i use
Code: Select all
ConditionDefined$ Remembered | ConditionPresent$ Card.Creature,Card.Planeswalker | ConditionCompare$ GE1
in the Replacement Trigger, or does that not work yet?

(might be easier if such damageRedirection would some kind of extra Effect/Thing)
Basically, damage redirection effects can be only used if the object that damage should be redirected to still exists (so leaving the battlefield, or game, in case of players, will make the effect invalid), AND if the object is capable of taking damage. Only players, creatures and planeswalkers can be dealt damage, so those are the only objects damage can be redirected to. Rusted Relic is a good card for testing here.
Marek14
Tester
 
Posts: 2670
Joined: 07 Jun 2008, 07:54
Has thanked: 0 time
Been thanked: 270 times

Re: Card Development Questions

Postby Hanmac » 23 Jun 2016, 08:30

most cards already had some OutofSight Trigger, but no check if it was still a creature.

ConditionDefined from SpellAbilityCondition didn't work but i could use IsPresent from CardTraitBase.

with that i did add "IsPresent$ Creature.IsImprinted" for the easy ones and
Code: Select all
SVar:X:PlayerCountRemembered$Amount/Plus.Y
SVar:Y:Count$Valid Creature.Remembered
for the more complex ones.

for testing i did flash in Song of the Dryads with the DevTools.
Hanmac
 
Posts: 954
Joined: 06 May 2013, 18:44
Has thanked: 229 times
Been thanked: 158 times

Re: Card Development Questions

Postby Hanmac » 25 Jun 2016, 11:41

hm i got a confusing case when i try to script Kilnspire District.
the first part with the mana from charge counter was simple.
but the Damage Dealt from chaos was not :/

Code: Select all
Name:Kilnspire District
ManaCost:no cost
Types:Plane Ravnica

T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | TriggerZones$ Command | Execute$ PutCounter | TriggerDescription$ When you planeswalk to CARDNAME or at the beginning of your precombat main phase, put a charge counter on CARDNAME, then add {R} to your mana pool for each charge counter on it.

T:Mode$ Phase | Phase$ Main1 | ValidPlayer$ You | TriggerZones$ Command | Execute$ PutCounter | Secondary$ True | TriggerDescription$ When you planeswalk to CARDNAME or at the beginning of your precombat main phase, put a charge counter on CARDNAME, then add {R} to your mana pool for each charge counter on it.

SVar:PutCounter:AB$PutCounter | Cost$ 0 | Defined$ Self | CounterType$ CHARGE | CounterNum$ 1 | SubAbility$ DBMana

SVar:DBMana:DB$ Mana | Produced$ R | Amount$ Y | References$ Y

T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll {CHAOS}, you may pay {X}. If you do, CARDNAME deals X damage to target creature or player.
SVar:RolledChaos:AB$ DealDamage | Announce$ X | Cost$ X | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player | NumDmg$ X | References$ X
SVar:X:Count$xPaid
SVar:Y:Count$CardCounters.CHARGE

SVar:Picture:http://www.wizards.com/global/images/magic/general/kilnspire_district.jpg
Oracle:When you planeswalk to Kilnspire District or at the beginning of your precombat main phase, put a charge counter on Kilnspire District, then add {R} to your mana pool for each charge counter on it.\nWhenever you roll {CHAOS}, you may pay {X}. If you do, Kilnspire District deals X damage to target creature or player.
first i did try to use the code from Flameblast Dragon. where you can attack, pay X R and it does deal X damage.

using the same with the Plane does not work, it doesn't let me choose something for X :/ I don't know why.

in the current state i try to use "Announce$ X", but for some reason it does ask me to choose X twice!

Someone an idea what i did wrong with this card, or an idea how to fix that?
Hanmac
 
Posts: 954
Joined: 06 May 2013, 18:44
Has thanked: 229 times
Been thanked: 158 times

Re: Card Development Questions

Postby Hanmac » 26 Jun 2016, 15:46

for someone who is interested what i am currently doing except for trying to implement older cards before the new Set does get spoilered.

new Project: Linked Abilities ... specially the ones with "exiled with" with looking at activated abilities in most important cases.

==
for example:
using Myr Welder to exile Synod Sanctum.
now the Myr has all the abilities of the Synod.
using the first ability of the new ones (exile Permanent) to exile another card X.
(the Myr should NOT get new abilities)
now use the second new ability to sac the Myr and return everything exiled wit the first ability (in that case X, that does NOT return the Synod or other cards exiled with Myr's own ability)

as you guys can see, this both cards has linked abilities that does both work with the exile. Currently the implementation does not link them so they does interfere with each other (like the Myr get abilities which should not, or more stuff is returned which should not)

How i currently does implement that:
  • Card has a new property for "exiledWith" that does store a Card. Also new "ExiledWithSource" for hasProperty
  • moving a card outside of Exile does set it to null.
  • Effects like ChangeZone and others does set it to the OriginalHost or HostCard of the SpellAbility if possible
  • Gaining Abilities does set OriginalHost correctly for the Abilities (currently no idea how to do it correct for CloneEffect)
  • An interesting point would be that we might not need Remembered/Imprint for most of the cards anymore ... currently i use both so its double secure: "Card.IsRemembered+ExiledWithSource"

current Problems:
  • Card using "Defined$ Remembered", because "ExiledWithSource" is in Card and not in AbilityUtils i might need to find an different way to do that.
  • Cards using "sharesNameWith Remembered", like above Remembered is hardcoded there, but i might change that if possible.

While overlooking of the cards that need to be changed, i try to implement other fixes too, like the Forgot when a card from exile is moved to somewhere else. (thanks to ExiledWithSource it can't be found anymore, but to be secure i do remove it from Remembered/Imprinted too, so the user can see it.)
Hanmac
 
Posts: 954
Joined: 06 May 2013, 18:44
Has thanked: 229 times
Been thanked: 158 times

Re: Card Development Questions

Postby Marek14 » 26 Jun 2016, 16:40

This is an interesting part of rules, and it would be nice to have everything work with linked things like Experiment Kraj :)

One thing to note at the same time is that thanks to Strionic Resonator and Rings of Brighthearth, some cards might find themselves with more exiled cards that they were designed for -- another thing to check if it works correctly while you're at it :)

Now, your approach seems to work for Myr Welder, but wouldn't it run into problems if a card copies abilities from another existing card? For example, Experiment Kraj copying abilities of Sisters of Stone Death. If Kraj exiles a creature and OriginalHost will be set to Sisters, wouldn't Sisters be able to retrieve it? Or, Quicksilver Elemental could copy the Sisters' abilities twice -- and each copying would create one linked pair.

Some years ago, I pondered about this problem and tought of a "lockbox" system, where every linked ability would get an unique ID when created, which would be necessary to access the card by other abilities. That could be theoretically capable to work even with multiple nesting.

Cloning effects should be easier than ability copying, I think, main problem is that a linked pair might become obscure and inactive when card becomes a copy of something else (or when it loses abilities).

So, if we search the cards for the word "exiled", what do we find? (This won't catch things like Banishing Light, but those don't have linked abilities anyway -- just one ability that creates an effect for returning.)

Note that only card in the Activated/Activated group (and some from the Complex) have linked abilities that should work with ability copying effects.

Cards with linked abilities related to exile are:
Activated/Activated: Ashiok, Nightmare Weaver, Cold Storage, Ice Cauldron, Karn Liberated, Muse Vessel, Pyxis of Pandemonium, Shell of the Last Kappa, Sisters of Stone Death, Synod Sanctum
Activated/Static: Death-Mask Duplicant
Activated/Triggered: Helvault, Panoptic Mirror, Parallax Nexus, Parallax Tide, Parallax Wave, Safe Haven
Static/Activated: Void Maw
Static/Static: Shared Fate, Sutured Ghoul, Uba Mask
Triggered/Activated: Chrome Mox, Elite Arcanist, Howltooth Hollow, Isochron Scepter, Jester's Scepter, Kaho, Minamo Historian, Kyren Archive, Mangara's Tome, Mindreaver, Mosswort Bridge, Mourner's Shield, Prototype Portal, Shelldock Isle, Skyship Weatherlight, Soul Foundry, Spinerock Knoll, Windbrisk Heights
Triggered/Static: Circu, Dimir Lobotomist, Colfenor's Plans, Dark Impostor, Exclusion Ritual, Godsend, Hedonist's Trove, Mirror Golem, Myr Welder, Nightveil Specter, Parallel Thoughts, Phyrexian Ingester, Semblance Anvil, Strata Scythe
Triggered/Triggered: Admonition Angel, Angel of Serenity, Bottled Cloister, Clone Shell, Colfenor's Urn, Day of the Dragon, Detention Sphere, Duplicant, Duplicity, Endless Horizons, Extraplanar Lens, Eye of the Storm (not really linked abilities since exiling and working with exile is done by the same ability), Faceless Butcher, Faceless Devourer, Fiend Hunter, Gravegouger, Hoarding Dragon, Hypnox, Icy Prison, Invader Parasite, Jeleva, Nephalia's Scourge, Journey to Nowhere, Knowledge Pool, Leonin Relic-Warder, Mesmeric Fiend, Moonring Mirror, Oblivion, Oubliette, Petradon, Petravark, Purgatory, Realm Razer, Search the City, Slithery Stalker, Spellbinder, Spellweaver Helix, Summoner's Egg, Thought Prison, Tidehollow Sculler, Wall of Nets, Worldgorger Dragon, Wormfang Crab, Wormfang Drake, Wormfang Newt, Wormfang Turtle

Complex:
Bane Alley Broker (activated ability to exile, static plus activated to deal with them - if abilities are copied, you won't be able to see exiled cards)
Grimoire Thief (exiles with triggered ability, so copy of abilities will never work)
Gustha's Scepter (if abilities are copied, you can exile and return cards, but they won't go to graveyard if you lose control)
Knowledge Vault (if abilities are copied, you can exile and return cards, but they won't go to graveyard if card leaves the battlefield)
Living Lore (static to exile, static plus triggered to deal with them)
Mimic Vat (triggered to exile, activated to deal with them, but triggered ability can also deal with exiled cards)

Of course, there are also other types of linked abilities...
Marek14
Tester
 
Posts: 2670
Joined: 07 Jun 2008, 07:54
Has thanked: 0 time
Been thanked: 270 times

Re: Card Development Questions

Postby Hanmac » 26 Jun 2016, 17:04

yeah Experiment Kraj is an interesting one (i remember it crashing with Vorel but that seems to be fixed), true for other cards that does gain all activated abilities.

thats the good case that i still use Remembered/Imprinted with ExiledWithSource. (i know that it does have some use)

for example:
Experiment Kraj copying abilities of Sisters of Stone Death: while the card does have "Exiled with Sisters of Stone Death", Experiment Kraj is still the one that does remember it. so "Card.IsRemembered+ExiledWithSource" in the Sisters Card, causes the Experiment to remember the exiled Card.
Yeah Quicksilver Elemental might need to get multiple pairs, but that card isn't scripted yet, so we might delay that problem until later ;P

i already did Mimic Vat, it did still work. i also updated the code ("Keywords$ Haste | AddSVars$ SneakAttackEOT | AtEOT$ Exile") to use stuff like Kiki-Jiki, Mirror Breaker

i am currently working on Grimoire Thief to get something like "sharesNameWith Remembered.ExiledWithSource" working

as For Cloning, hm in most cases it might be okay, but if something somehow gets more abilities than it should then it gets fishy.
hm like Dimir Doppelganger:
10/1/2005: A permanent's ability that refers to cards the creature exiled (such as Sisters of Stone Death's third ability) only affects cards exiled by other abilities intrinsic to that permanent (such as Sisters of Stone Death's second ability). Suppose that (a) Dimir Doppelganger copies Arc-Slogger, (b) its "deal 2 damage" ability is activated, and then (c) it copies Sisters of Stone Death. Creatures exiled by Arc-Slogger's ability can't be returned with Sisters of Stone Death's ability.
PS: i did not use "intrinsic" for my check but currently it doesn't seems to be a problem ... but we might keep an eye on that.

as for search: i did "o:'exiled with' o:':'" with that i did found the most important ones, the other ones will be done later.

PS: can you also look at my problem with Kilnspire District and why the pay mana doesn't work as i wanted?
Hanmac
 
Posts: 954
Joined: 06 May 2013, 18:44
Has thanked: 229 times
Been thanked: 158 times

Re: Card Development Questions

Postby Marek14 » 26 Jun 2016, 17:19

I looked at Kilnspire District, but couldn't find any significant difference against Flameblast Dragon, so I'm not sure what it means...

For Dimir Doppelganger, in this example, it's not really important because Arc-Slogger doesn't have linked abilities, and so there is no reason to store information about the exiled cards anywhere.

But if it copies something with true linked abilities, like Faceless Butcher, it's fully able to activate its copy ability with one linked ability on stack. This seems to show that the linked abilities and their storage space must be maintained even in situations where those abilities are not visible.
Marek14
Tester
 
Posts: 2670
Joined: 07 Jun 2008, 07:54
Has thanked: 0 time
Been thanked: 270 times

Re: Card Development Questions

Postby Hanmac » 26 Jun 2016, 18:40

yeah i also don't understand what is so fishy with Kilnspire District ...
without Announce X, X = 0. but with it, then i do need to select X twice :/
Thats why the card is not commited yet. Hm but i might have an idea that might work.

i tested Bane Alley Broker with Experiment Kraj.
Exiled a card with the Kraj i could not see it. (Kraj did not get the static ability)
Try to return the card with the Broker did not work. (because the Broker did not remember it)
then return the card with Kraj did work.
Also works if the Kraj is a Dimir Doppelganger in disguise.

good that you pointed it out ... the Nightmare cards (exile + return) does also need such protection with ExiledWithSource. (same for the Banish cards)

also i seen most of the cards like Circu, Dimir Lobotomist currently does not check if the exiled Cards are still in exile ... i will add Trigger like other cards have in the form of;
Code: Select all
T:Mode$ ChangesZone | Origin$ Exile | Destination$ Any | Static$ True | ValidCard$ Card.IsRemembered+ExiledWithSource | Execute$ DBForget
SVar:DBForget:DB$ Pump | ForgetObjects$ TriggeredCard

T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | Static$ True | ValidCard$ Card.Self | Execute$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
That is important to that cards, because when the card which is exiled, is removed from exile, the effect does need to stop and the source should forget this card.
While i do update the Cards i will add it when its missing.

Sooner or later i will add that ExiledWithSource to all Cards with Exile, because it should allways have some kind protection.

like Dimir Doppelganger copying a Faceless Butcher would be no gain because that second "leaves the Battlefield" one can not return a card, because it did not exile one with the first ability (which did not trigger for the Doppelganger)

About the thing with Arc-Slogger, that CardRuling just means that exiling cards with something other than the linked pair does not work for the pair.
also currently "ExiledWith" is automatically set when a Effect does Exile something.
Hanmac
 
Posts: 954
Joined: 06 May 2013, 18:44
Has thanked: 229 times
Been thanked: 158 times

Re: Card Development Questions

Postby swordshine » 27 Jun 2016, 08:40

Hi, Hanmac :D I saw Giant Oyster was scripted. I think the script is not perfect. Giant Oyster has a very tricky activated ability, which creates a continuous effect with many triggered abilities. I think the current script cannot work with Control Magic (Controller change effect), Humility (Remove all abilities effect), etc.
swordshine
 
Posts: 682
Joined: 11 Jul 2010, 02:37
Has thanked: 116 times
Been thanked: 87 times

PreviousNext

Return to Developer's Corner

Who is online

Users browsing this forum: No registered users and 13 guests


Who is online

In total there are 13 users online :: 0 registered, 0 hidden and 13 guests (based on users active over the past 10 minutes)
Most users ever online was 564 on 05 Dec 2019, 12:05

Users browsing this forum: No registered users and 13 guests

Login Form