It is currently 20 Apr 2024, 03:12
   
Text Size

Battle for Zendikar spoiler season

Post MTG Forge Related Programming Questions Here

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

Re: Battle for Zendikar spoiler season

Postby KrazyTheFox » 18 Sep 2015, 21:53

I've uploaded the card images to cardforge.link so they should be available when the cards themselves are.

Edit: Also added images for tokens/products and the editions file.

Edit 2 3 4: Also knocked the number of cards left to implement down to 15 13 12.
User avatar
KrazyTheFox
Programmer
 
Posts: 725
Joined: 18 Mar 2014, 23:51
Has thanked: 66 times
Been thanked: 226 times

Re: Battle for Zendikar spoiler season

Postby Marek14 » 19 Sep 2015, 06:04

Thanks, Krazy for taking over while I slept :)

Code: Select all
Name:Nettle Drone
ManaCost:2 R
Types:Creature Eldrazi Drone
PT:3/1
K:Devoid
A:AB$ DealDamage | Cost$ T | Defined$ Player.Opponent | NumDmg$ 1 | SpellDescription$ CARDNAME deals 1 damage to each opponent.
T:Mode$ SpellCast | ValidCard$ Card.Colorless | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigUntap | TriggerDescription$ Whenever you cast a colorless spell, untap Nettle Drone.
SVar:TrigUntap:AB$Untap | Cost$ 0 | Defined$ Self
SVar:Picture:http://www.wizards.com/global/images/magic/general/nettle_drone.jpg
Oracle:Devoid (This card has no color.)\n{T}: Nettle Drone deals 1 damage to each opponent.\nWhenever you cast a colorless spell, untap Nettle Drone.
Code: Select all
Name:Serpentine Spike
ManaCost:5 R R
Types:Sorcery
K:Devoid
A:SP$ DealDamage | Cost$ 5 R R | ValidTgts$ Creature | TgtPrompt$ Select target creature to deal 2 damage to | NumDmg$ 2 | RememberDamaged$ True | SubAbility$ DBDamageTwo | SpellDescription$ CARDNAME deals 2 damage to target creature, 3 damage to another target creature, and 4 damage to a third target creature. If a creature dealt damage this way would die this turn, exile it instead.
SVar:DBDamageTwo:DB$ DealDamage | Cost$ 0 | ValidTgts$ Creature | TgtPrompt$ Select another target creature to deal 3 damage to | NumDmg$ 3 | RememberDamaged$ True | TargetUnique$ True | SubAbility$ DBDamageThree
SVar:DBDamageThree:DB$ DealDamage | Cost$ 0 | ValidTgts$ Creature | TgtPrompt$ Select another target creature to deal 4 damage to | NumDmg$ 4 | RememberDamaged$ True | TargetUnique$ True | SubAbility$ DBPumpAll
SVar:DBPumpAll:DB$ PumpAll | KW$ HIDDEN If CARDNAME would be put into a graveyard, exile it instead. | ValidCards$ Creature.IsRemembered | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:Picture:http://www.wizards.com/global/images/magic/general/serpentine_spike.jpg
Oracle:Devoid (This card has no color.)\nSerpentine Spike deals 2 damage to target creature, 3 damage to another target creature, and 4 damage to a third target creature. If a creature dealt damage this way would die this turn, exile it instead.
(I presume each RememberDamaged$ will stack so DBPumpAll will affect all three damaged creatures.)

Code: Select all
Name:Touch of the Void
ManaCost:2 R
Types:Sorcery
K:Devoid
A:SP$ DealDamage | Cost$ 5 R R | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player  | NumDmg$ 3 | RememberDamaged$ True | SubAbility$ DBPumpAll | SpellDescription$ CARDNAME deals 3 damage to target creature or player. If a creature dealt damage this way would die this turn, exile it instead.
SVar:DBPumpAll:DB$ PumpAll | KW$ HIDDEN If CARDNAME would be put into a graveyard, exile it instead. | ValidCards$ Creature.IsRemembered | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:Picture:http://www.wizards.com/global/images/magic/general/touch_of_the_void.jpg
Oracle:Devoid (This card has no color.)\nTouch of the Void deals 3 damage to target creature or player. If a creature dealt damage this way would die this turn, exile it instead.
Code: Select all
Name:Akoum Stonewaker
ManaCost:1 R
Types:Creature Human Shaman
PT:2/1
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Land.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Landfall — Whenever a land enters the battlefield under your control, you may pay {2}{R}. If you do, put a 3/1 red Elemental creature token with trample and haste onto the battlefield. Exile that token at the beginning of the next end step.
SVar:TrigToken:AB$Token | Cost$ 2 R | TokenAmount$ 1 | TokenName$ Elemental | TokenTypes$ Creature,Elemental | TokenOwner$ You | TokenColors$ Red | TokenPower$ 3 | TokenToughness$ 1 | TokenImage$ r 3 1 elemental bfz | TokenKeywords$ Trample & Haste | TokenSVars$ AkoumEOT | RememberTokens$ True | SubAbility$ DelTrig
SVar:DelTrig:DB$ DelayedTrigger | Mode$ Phase | Phase$ End Of Turn | Execute$ TrigExile | RememberObjects$ Remembered | TriggerDescription$ CARDNAME - Exile the token at the beginning of the next end step. | SubAbility$ DBCleanup | AILogic$ Always
SVar:TrigExile:AB$ ChangeZone | Cost$ 0 | Defined$ DelayTriggerRemembered | Origin$ Battlefield | Destination$ Exile
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:AkoumEOT:SVar:EndOfTurnLeavePlay:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/akoum_stonewaker.jpg
Oracle:Landfall — Whenever a land enters the battlefield under your control, you may pay {2}{R}. If you do, put a 3/1 red Elemental creature token with trample and haste onto the battlefield. Exile that token at the beginning of the next end step.
(TokenKeywords$ Trample & Haste is correct, right?)

Code: Select all
Name:Reckless Cohort
ManaCost:1 R
Types:Creature Human Warrior Ally
PT:2/2
S:Mode$ Continuous | Affected$ Card.Self | AddHiddenKeyword$ CARDNAME attacks each combat if able. | CheckSVar$ X | SVarCompare$ EQ0 | Description$ CARDNAME attacks each combat if able unless you control another Ally.
SVar:X:Count$Valid Ally.Other+YouCtrl
SVar:BuffedBy:Ally
SVar:Picture:http://www.wizards.com/global/images/magic/general/reckless_cohort.jpg
Oracle:Reckless Cohort attacks each combat if able unless you control another Ally.
Last edited by Marek14 on 19 Sep 2015, 07:58, edited 2 times in total.
Marek14
Tester
 
Posts: 2759
Joined: 07 Jun 2008, 07:54
Has thanked: 0 time
Been thanked: 296 times

Re: Battle for Zendikar spoiler season

Postby Marek14 » 19 Sep 2015, 06:30

Code: Select all
Name:Unnatural Aggression
ManaCost:2 G
Types:Instant
K:Devoid
A:SP$ Pump | Cost$ 2 G | AILogic$ Fight | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Choose target creature you control | SubAbility$ DBFight | StackDescription$ None | SpellDescription$ Target creature you control fights another target creature.
SVar:DBFight:DB$ Fight | Defined$ ParentTarget | ValidTgts$ Creature.OppCtrl | RememberObjects$ Targeted | SubAbility$ DBPumpAll | TgtPrompt$ Choose target creature to fight the first target
SVar:DBPumpAll:DB$ PumpAll | KW$ HIDDEN If CARDNAME would be put into a graveyard, exile it instead. | ValidCards$ Creature.IsRemembered+OppCtrl | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:Picture:http://www.wizards.com/global/images/magic/general/unnatural_aggression.jpg
Oracle:Devoid (This card has no color.)\nTarget creature you control fights target creature an opponent controls. If the creature an opponent controls would die this turn, exile it instead.
(I'm not sure if the "OppCtrl" part is necessary, depends on whether "RememberObjects$ Targeted" remembers both targets or just the one defined in its block.)

Code: Select all
Name:Infuse with the Elements
ManaCost:3 G
Types:Instant
A:SP$ PutCounter | Cost$ 3 G | ValidTgts$ Creature | TgtPrompt$ Select target creature | CounterType$ P1P1 | CounterNum$ X | References$ X | SubAbility$ DBPump | Converge — Put X +1/+1 counters on target creature, where X is the number of colors of mana spent to cast CARDNAME. That creature gains trample until end of turn.
SVar:DBPump:DB$ Pump | Defined$ Targeted | KW$ Trample
SVar:X:Count$Converge
SVar:Picture:http://www.wizards.com/global/images/magic/general/infuse_with_the_elements.jpg
Oracle:Converge — Put X +1/+1 counters on target creature, where X is the number of colors of mana spent to cast Infuse with the Elements. That creature gains trample until end of turn.
Marek14
Tester
 
Posts: 2759
Joined: 07 Jun 2008, 07:54
Has thanked: 0 time
Been thanked: 296 times

Re: Battle for Zendikar spoiler season

Postby Marek14 » 19 Sep 2015, 07:49

Code: Select all
Name:Hedron Blade
ManaCost:1
Types:Artifact Equipment
S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 1 | AddToughness$ 1 | Description$ Equipped creature gets +1/+1.
T:Mode$ Blocks | ValidCard$ Card.EquippedBy | ValidBlocked$ Creature.Colorless | Execute$ TrigPump | TriggerDescription$ Whenever equipped creature becomes blocked by one or more colorless creatures, it gains deathtouch until end of turn. (Any amount of damage it deals to a creature is enough to destroy it.)
T:Mode$ AttackerBlocked | ValidCard$ Card.EquippedBy | ValidBlocker$ Creature | Execute$ TrigPump2 | Secondary$ True | TriggerDescription$ Whenever equipped creature becomes blocked by one or more colorless creatures, it gains deathtouch until end of turn. (Any amount of damage it deals to a creature is enough to destroy it.)
SVar:TrigPump:AB$Pump | Cost$ 0 | Defined$ TriggeredBlocker | KW$ Deathtouch
SVar:TrigPump2:AB$Pump | Cost$ 0 | Defined$ TriggeredAttacker | KW$ Deathtouch
K:Equip 2
SVar:Picture:http://www.wizards.com/global/images/magic/general/hedron_blade.jpg
Oracle:Equipped creature gets +1/+1.\nWhenever equipped creature becomes blocked by one or more colorless creatures, it gains deathtouch until end of turn. (Any amount of damage it deals to a creature is enough to destroy it.)\nEquip {2} ({2}: Attach to target creature you control. Equip only as a sorcery.)
Code: Select all
Name:Pathway Arrows
ManaCost:1
Types:Artifact Equipment
S:Mode$ Continuous | Affected$ Card.EquippedBy | AddAbility$ Damage | AddSVar$ PathwayTapAll | Description$ Equipped creature has "{2}, {T}: This creature deals 1 damage to target creature. If a colorless creature is dealt damage this way, tap it."
SVar:Damage:AB$DealDamage | Cost$ 2 T | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ 1 | RememberDamaged$ True | SubAbility$ PathwayTapAll | SpellDescription$ CARDNAME deals 1 damage to target creature. If a colorless creature is dealt damage this way, tap it.
SVar:PathwayTapAll:DB$ TapAll | ValidCards$ Creature.IsRemembered+Colorless
K:Equip 2
SVar:NonStackingAttachEffect:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/pathway_arrows.jpg
Oracle:Equipped creature has "{2}, {T}: This creature deals 1 damage to target creature. If a colorless creature is dealt damage this way, tap it."\nEquip {2}
Code: Select all
Name:Slab Hammer
ManaCost:2
Types:Artifact Equipment
K:Equip 2
T:Mode$ Attacks | ValidCard$ Card.EquippedBy | Execute$ TrigPump | TriggerDescription$ Whenever equipped creature attacks, you may return a land you control to its owner's hand. If you do, the creature gets +2/+2 until end of turn.
SVar:TrigPump:AB$ Pump | Cost$ Return<1/Land> | Defined$ TriggeredAttacker | NumAtt$ 2 | NumDef$ 2
SVar:Picture:http://www.wizards.com/global/images/magic/general/slab_hammer.jpg
Oracle:Whenever equipped creature attacks, you may return a land you control to its owner's hand. If you do, the creature gets +2/+2 until end of turn.\nEquip {2}
So Emeria Shepherd and Quarantine Field are the only ones left.
Marek14
Tester
 
Posts: 2759
Joined: 07 Jun 2008, 07:54
Has thanked: 0 time
Been thanked: 296 times

Re: Battle for Zendikar spoiler season

Postby onderzeeboot » 19 Sep 2015, 07:51

Marek14 wrote:Thanks, Krazy for taking over while I slept :)

Code: Select all
Name:Reckless Cohort
ManaCost:1 R
Types:Creature Human Warrior Ally
PT:2/2
S:Mode$ Continuous | Affected$ Card.Self | AddHiddenKeyword$ CARDNAME attacks each combat if able. | CheckSVar$ X | SVarCompare$ EQ0 | Description$ CARDNAME attacks each combat if able unless you control another Ally.
SVar:X:Count$Valid Giant.Other+YouCtrl
SVar:BuffedBy:Ally
SVar:Picture:http://www.wizards.com/global/images/magic/general/briarberry_cohort.jpg
Oracle:Reckless Cohort attacks each combat if able unless you control another Ally.
If I read this correctly, your Reckless Cohort checks if you control other Giants. Shouldn't that be

Code: Select all

Name:Reckless Cohort
ManaCost:1 R
Types:Creature Human Warrior Ally
PT:2/2
S:Mode$ Continuous | Affected$ Card.Self | AddHiddenKeyword$ CARDNAME attacks each combat if able. | CheckSVar$ X | SVarCompare$ EQ0 | Description$ CARDNAME attacks each combat if able unless you control another Ally.
SVar:X:Count$Valid Ally.Other+YouCtrl
SVar:BuffedBy:Ally
SVar:Picture:http://www.wizards.com/global/images/magic/general/briarberry_cohort.jpg
Oracle:Reckless Cohort attacks each combat if able unless you control another Ally.
?

Edit: Also, sweet work. You are going through this at a way faster pace than I could o_O
onderzeeboot
 
Posts: 31
Joined: 29 Nov 2014, 19:37
Has thanked: 5 times
Been thanked: 0 time

Re: Battle for Zendikar spoiler season

Postby Marek14 » 19 Sep 2015, 07:59

OK, corrected.
Marek14
Tester
 
Posts: 2759
Joined: 07 Jun 2008, 07:54
Has thanked: 0 time
Been thanked: 296 times

Re: Battle for Zendikar spoiler season

Postby Hanmac » 19 Sep 2015, 11:58

are they really finish or arent there more than two cards missing?
because i dont see the green cards in this thread and i would have liked to see the code of them too
Hanmac
 
Posts: 954
Joined: 06 May 2013, 18:44
Has thanked: 229 times
Been thanked: 158 times

Re: Battle for Zendikar spoiler season

Postby Marek14 » 19 Sep 2015, 12:00

Hanmac wrote:are they really finish or arent there more than two cards missing?
because i dont see the green cards in this thread and i would have liked to see the code of them too
They are on WebSVN -- Krazy added them directly rather than going through here like me.
Marek14
Tester
 
Posts: 2759
Joined: 07 Jun 2008, 07:54
Has thanked: 0 time
Been thanked: 296 times

Re: Battle for Zendikar spoiler season

Postby KrazyTheFox » 19 Sep 2015, 16:37

I think I've finished Quarantine Field, though it's one of the slightly more complicated cards to deal withI've scripted most of Quarantine field, but I don't think I got it quite right. It appears to function correctly in game, but does have the following error in the logs:


Code: Select all
SVar 'Y' not found in ability, fallback to Card (Quarantine Field). Ability is (When Quarantine Field enters the battlefield, for each isolation counter on it, exile up to one target nonland permanent an opponent controls until Quarantine Field leaves the battlefield. (Targeting ERROR) )


Code: Select all
Name:Quarantine Field
ManaCost:X X W W
Types:Enchantment
K:etbCounter:ISOLATION:X
SVar:X:Count$xPaid
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigExile | TriggerDescription$ When CARDNAME enters the battlefield, for each isolation counter on it, exile up to one target nonland permanent an opponent controls until CARDNAME leaves the battlefield.
SVar:TrigExile:AB$ ChangeZone | Cost$ 0 | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | ValidTgts$ Permanent.nonLand+OppCtrl | TargetMin$ 0 | TargetMax$ Y | References$ Y | TgtPrompt$ Select target nonland permanent an opponent controls | ConditionPresent$ Card.Self | SubAbility$ DBEffect
SVar:DBEffect:DB$ Effect | Triggers$ ComeBack | RememberObjects$ Targeted | ImprintCards$ Self | SVars$ TrigReturn,ExileSelf | ConditionPresent$ Card.Self | Duration$ Permanent
SVar:ComeBack:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.IsImprinted | Execute$ TrigReturn | TriggerZones$ Command | TriggerController$ TriggeredCardController | Static$ True | TriggerDescription$ That permanent is exiled until CARDNAME leaves the battlefield.
SVar:TrigReturn:AB$ ChangeZoneAll | Cost$ 0 | Origin$ Exile | Destination$ Battlefield | ChangeType$ Card.IsRemembered | SubAbility$ ExileSelf
SVar:ExileSelf:DB$ ChangeZone | Origin$ Command | Destination$ Exile | Defined$ Self
SVar:Y:Count$CardCounters.ISOLATION
SVar:PlayMain1:TRUE
SVar:OblivionRing:TRUE
SVar:Picture:http://www.wizards.com/global/images/magic/general/quarantine_field.jpg
Oracle:Quarantine Field enters the battlefield with X isolation counters on it.\nWhen Quarantine Field enters the battlefield, for each isolation counter on it, exile up to one target nonland permanent an opponent controls until Quarantine Field leaves the battlefield.



I'll go try my hand at the last card, Emeria Shepherd, then I'll start testing cards in this thread and adding them to the repo.
User avatar
KrazyTheFox
Programmer
 
Posts: 725
Joined: 18 Mar 2014, 23:51
Has thanked: 66 times
Been thanked: 226 times

Re: Battle for Zendikar spoiler season

Postby KrazyTheFox » 19 Sep 2015, 16:54

I've edited my previous post regarding Quarantine Field. If someone could help me figure out that last bit, it would be much appreciated.

Edit: I can't seem to figure out how to check if the land that triggered the Landfall ability is a Plains for Emeria Shepherd, either. Someone else will have to pick up this card.

Edit 2: Issues with tested cards (not committed, won't fix until all uncommitted cards are tested):
| Open
Code: Select all
Aligned Hedron Network:
   Doesn't return exiled creatures when it leaves the battlefield


Brutal Expulsion:
   java.lang.IllegalArgumentException: No element named Battlefield,Stack in enum Zone
   at forge.game.zone.ZoneType.smartValueOf(ZoneType.java:44)
   at forge.game.ability.effects.ChangeZoneEffect.changeKnownOriginStackDescription(ChangeZoneEffect.java:240)
   at forge.game.ability.effects.ChangeZoneEffect.getStackDescription(ChangeZoneEffect.java:48)
   at forge.game.ability.SpellAbilityEffect.getStackDescriptionWithSubs(SpellAbilityEffect.java:75)
   at forge.game.spellability.AbilitySub.getStackDescription(AbilitySub.java:114)
   at forge.game.ability.SpellAbilityEffect.getStackDescriptionWithSubs(SpellAbilityEffect.java:85)
   at forge.game.spellability.AbilitySub.getStackDescription(AbilitySub.java:114)
   at forge.game.ability.SpellAbilityEffect.getStackDescriptionWithSubs(SpellAbilityEffect.java:85)
   at forge.game.ability.SpellApiBased.getStackDescription(SpellApiBased.java:42)
   at forge.player.HumanPlaySpellAbility.enusureAbilityHasDescription(HumanPlaySpellAbility.java:290)
   at forge.player.HumanPlaySpellAbility.playAbility(HumanPlaySpellAbility.java:142)
   at forge.player.HumanPlay.playSpellAbility(HumanPlay.java:124)
   at forge.player.PlayerControllerHuman.playChosenSpellAbility(PlayerControllerHuman.java:938)
   at forge.game.phase.PhaseHandler.startFirstTurn(PhaseHandler.java:930)
   at forge.game.GameAction.startGame(GameAction.java:1440)
   at forge.game.Match.startGame(Match.java:96)
   at forge.match.HostedMatch$2.run(HostedMatch.java:220)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
   at java.lang.Thread.run(Thread.java:745)


Dust Stalker:
   java.lang.RuntimeException: AbilityFactory : getAbility -- no API in Dust Stalker: TrigReturn:AB$ChangeZone | Cost$ 0 | Defined$ Self | Origin$ Battlefield | Destination$ Hand
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:106)
   at forge.game.trigger.TriggerHandler.runSingleTrigger(TriggerHandler.java:478)
   at forge.game.trigger.TriggerHandler.runNonStaticTriggersForPlayer(TriggerHandler.java:349)
   at forge.game.trigger.TriggerHandler.runWaitingTrigger(TriggerHandler.java:322)
   at forge.game.trigger.TriggerHandler.runTrigger(TriggerHandler.java:255)
   at forge.game.phase.PhaseHandler.onPhaseBegin(PhaseHandler.java:380)
   at forge.game.phase.PhaseHandler.startFirstTurn(PhaseHandler.java:973)
   at forge.game.GameAction.startGame(GameAction.java:1440)
   at forge.game.Match.startGame(Match.java:96)
   at forge.match.HostedMatch$2.run(HostedMatch.java:220)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
   at java.lang.Thread.run(Thread.java:745)


From Beyond:
   Missing sacrifice cost


Herald of Kozilek:
   Doesn't reduce cost of colorless spells


Noyan Dar, Roil Shaper:
   Lands don't become creatures; they only get the P1P1 counters


Painful Truths:
   Doesn't draw cards, don't lose life


Transgress the Mind:
   Only targets opponents; should target any player
User avatar
KrazyTheFox
Programmer
 
Posts: 725
Joined: 18 Mar 2014, 23:51
Has thanked: 66 times
Been thanked: 226 times

Re: Battle for Zendikar spoiler season

Postby Agetian » 19 Sep 2015, 19:36

r30030: I implemented HasSubtype and HasNoSubtype restriction properties that can hopefully be used to implement Emeria Shepherd. The ValidCard restriction will have to be written this way: "ValidCard$ Land.YouCtrl+HasSubtype Plains" (no quotes) or "ValidCard$ Land.YouCtrl+HasNoSubtype Plains". Maybe it's possible to implement the card now with two different conditions? One optional for when the land was a plains, and one generic landfall? Or one when a land was a Plains and one when a land was not a Plains, not sure...). I'm not very good with the scripting part, sadly, so I can't script the card on my own or confirm if these code changes are indeed enough to script the card now. Feel free to improve if necessary.

- Agetian
Agetian
Programmer
 
Posts: 3471
Joined: 14 Mar 2011, 05:58
Has thanked: 676 times
Been thanked: 561 times

Re: Battle for Zendikar spoiler season

Postby Marek14 » 19 Sep 2015, 20:06

Quarantine Field -- could the problem simply be that Isolation counters are not yet defined in general code?
Marek14
Tester
 
Posts: 2759
Joined: 07 Jun 2008, 07:54
Has thanked: 0 time
Been thanked: 296 times

Re: Battle for Zendikar spoiler season

Postby KrazyTheFox » 19 Sep 2015, 20:16

Marek14 wrote:Quarantine Field -- could the problem simply be that Isolation counters are not yet defined in general code?
I added the counters before scripting the card. The game throws an error and crashes if the counter type can't be found instead of just printing a small error to the console.
User avatar
KrazyTheFox
Programmer
 
Posts: 725
Joined: 18 Mar 2014, 23:51
Has thanked: 66 times
Been thanked: 226 times

Re: Battle for Zendikar spoiler season

Postby Marek14 » 19 Sep 2015, 20:29

Aligned Hedron Network: I think the problem is here:

Code: Select all
SVar:ComeBack:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.IsImprinted | Execute$ TrigReturn | TriggerZones$ Command | TriggerController$ TriggeredCardController | Static$ True | TriggerDescription$ Those creatures are exiled until Linked Hedron Structure leaves the battlefield
Should be

Code: Select all
SVar:ComeBack:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigReturn | TriggerZones$ Command | TriggerController$ TriggeredCardController | Static$ True | TriggerDescription$ Those creatures are exiled until Aligned Hedron Network leaves the battlefield
It should trigger the return when the source itself leaves the battlefield.

From Beyond - a typo
Code: Select all
Cost$ 1 G Sacrifice<1/CARDNAME>
to

Code: Select all
Cost$ 1 G Sac<1/CARDNAME>
Herald of Kozilek - try replacing "ValidCard$ Colorless" with "ValidCard$ Card.Colorless"

Painful Truths - try replacing "SVar:X:Converge" with "SVar:X:Count$Converge"

Transgress the Mind - description is also wrong, so replace
Code: Select all
A:SP$ ChangeZone | Cost$ 1 B | Origin$ Hand | Destination$ Exile | DefinedPlayer$ Targeted | ValidTgts$ Opponent | Chooser$ You | ChangeType$ Card.cmcGE3 | ChangeNum$ 1 | IsCurse$ True | Mandatory$ True | StackDescription$ SpellDescription | SpellDescription$ Target opponent reveals his or her hand. You choose a nonland card from it and exile that card.
with

Code: Select all
A:SP$ ChangeZone | Cost$ 1 B | Origin$ Hand | Destination$ Exile | DefinedPlayer$ Targeted | ValidTgts$ Player | Chooser$ You | ChangeType$ Card.cmcGE3 | ChangeNum$ 1 | IsCurse$ True | Mandatory$ True | StackDescription$ SpellDescription | SpellDescription$ Target player reveals his or her hand. You choose a card with converted mana cost 3 or greater and exile that card.
Sorry - I'm responsible for all of these, except for Painful Truths :)
Marek14
Tester
 
Posts: 2759
Joined: 07 Jun 2008, 07:54
Has thanked: 0 time
Been thanked: 296 times

Re: Battle for Zendikar spoiler season

Postby KrazyTheFox » 19 Sep 2015, 21:10

I've added 73 more cards from this topic, all tested fairly thoroughly. There's another pile of bugs that need fixing while I go make and test the changes Marek has listed above (thanks!). Some of them are super easy fixes, but I avoided any changes while doing the testing to better keep track of things.

Every card has now been tested! Once the above problems are fixed and tested again, we'll only have those last two cards to go!


| Open
Code: Select all
Akoum Stonewaker:
   Token gets 'Trample & Haste', not 'Trample' and 'Haste'


Bane of Bala Ged:
   Opponent gets to decide not to exile permanents; should not be optional


Blighted Steppe:
   Counts all creatures when determining life gain; should only count your own


Carrier Thrall:
   Incorrect ability text; references boars, not eldrazi scions


Grave Birthing:
   java.lang.ClassCastException: forge.game.ability.AbilityApiBased cannot be cast to forge.game.spellability.AbilitySub
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:335)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:182)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:112)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:108)
   at forge.game.card.CardFactoryUtil.addAbilityFactoryAbilities(CardFactoryUtil.java:2073)
   at forge.game.card.CardFactory.buildAbilities(CardFactory.java:284)
   at forge.game.card.CardFactory.getCard(CardFactory.java:230)
   at forge.game.card.CardFactory.getCard(CardFactory.java:222)
   at forge.game.card.Card.fromPaperCard(Card.java:6513)
   at forge.game.card.Card.getCardForUi(Card.java:6521)
   at forge.game.card.CardView.getCardForUi(CardView.java:40)
   at forge.screens.match.controllers.CDetailPicture.showItem(CDetailPicture.java:58)
   at forge.screens.match.CMatchUI.setCard(CMatchUI.java:338)


Guul Draz Overseer:
   Does not buff creatures


Halimar Tidecaller:
   Does not let you return a card with awaken to your hand from the graveyard


Hedron Blade:
   Gives creature deathtouch regardless of blocking creature's colors


Infuse with the Elements:
   Card text does not appear in card detail panel


Makindi Patrol:
   Is 2/2; should be 2/3


Mind Raker:
   Missing ETB effect


Murk Strider:
   Missing ETB effect


Pathway Arrows:
   Use ability on a colorless creature. Untap equipped creature, wait for previous target to be untapped.
   Use ability again on a different creature. All previous targets will be tapped.


Retreat to Coralhelm:
   Does not use charm formatting in card detail panel; no text in panel for choosing which ability to use


Retreat to Emeria:
   Does not use charm formatting in card detail panel


Retreat to Kazandu:
   Does not use charm formatting in card detail panel


Retreat to Hagra:
   Does not use charm formatting in card detail panel
   java.lang.RuntimeException: AbilityFactory : getAbility -- no API in Retreat to Hagra:
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:106)
   at forge.game.ability.effects.CharmEffect.makePossibleOptions(CharmEffect.java:36)
   at forge.player.PlayerControllerHuman.chooseModeForAbility(PlayerControllerHuman.java:1086)
   at forge.game.ability.effects.CharmEffect.makeChoices(CharmEffect.java:76)
   at forge.game.trigger.TriggerHandler.runSingleTrigger(TriggerHandler.java:509)
   at forge.game.trigger.TriggerHandler.runNonStaticTriggersForPlayer(TriggerHandler.java:349)
   at forge.game.trigger.TriggerHandler.runWaitingTrigger(TriggerHandler.java:318)
   at forge.game.trigger.TriggerHandler.runTrigger(TriggerHandler.java:255)
   at forge.game.GameAction.changeZone(GameAction.java:280)
   at forge.game.GameAction.moveTo(GameAction.java:431)
   at forge.game.GameAction.moveTo(GameAction.java:412)
   at forge.game.player.Player.playLand(Player.java:1462)
   at forge.player.HumanPlay.playSpellAbility(HumanPlay.java:87)
   at forge.player.PlayerControllerHuman.playChosenSpellAbility(PlayerControllerHuman.java:938)
   at forge.game.phase.PhaseHandler.startFirstTurn(PhaseHandler.java:930)
   at forge.game.GameAction.startGame(GameAction.java:1440)
   at forge.game.Match.startGame(Match.java:96)
   at forge.match.HostedMatch$2.run(HostedMatch.java:220)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
   at java.lang.Thread.run(Thread.java:745)


Retreat to Valakut:
   Does not use charm formatting in card detail panel; no text in panel for choosing which ability to use


Ruin Processor:
   Life is not gained when ability is used


Touch of the Void:
   Costs 5 R R; should cost 2 R


Ugin's Insight:
   Costs U; should cost 3 U U


Ulamog's Reclaimer:
   Missing ETB effect


Unnatural Aggression:
   Opponent's creature is not exiled when it dies this turn


Vampiric Rites:
   No mana cost; cannot cast


Wasteland Strangler:
   Missing ETB effect


Windrider Patrol:
   java.lang.RuntimeException: AbilityFactory : getAbility -- no API in Windrider Patrol:
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:106)
   at forge.game.trigger.TriggerHandler.runSingleTrigger(TriggerHandler.java:478)
   at forge.game.trigger.TriggerHandler.runNonStaticTriggersForPlayer(TriggerHandler.java:349)
   at forge.game.trigger.TriggerHandler.runWaitingTrigger(TriggerHandler.java:318)
   at forge.game.trigger.TriggerHandler.runTrigger(TriggerHandler.java:255)
   at forge.game.player.Player.addDamageAfterPrevention(Player.java:548)
   at forge.game.player.Player.addCombatDamage(Player.java:846)
   at forge.game.combat.Combat.dealAssignedDamage(Combat.java:689)
   at forge.game.phase.PhaseHandler.onPhaseBegin(PhaseHandler.java:311)
   at forge.game.phase.PhaseHandler.startFirstTurn(PhaseHandler.java:973)
   at forge.game.GameAction.startGame(GameAction.java:1440)
   at forge.game.Match.startGame(Match.java:96)
   at forge.match.HostedMatch$2.run(HostedMatch.java:220)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
   at java.lang.Thread.run(Thread.java:745)

Edit: Aligned Hedron Network still doesn't return cards from exile after those changes. The other four cards now work and have been added to the repository.
User avatar
KrazyTheFox
Programmer
 
Posts: 725
Joined: 18 Mar 2014, 23:51
Has thanked: 66 times
Been thanked: 226 times

PreviousNext

Return to Developer's Corner

Who is online

Users browsing this forum: KeithOvart and 93 guests


Who is online

In total there are 94 users online :: 1 registered, 0 hidden and 93 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: KeithOvart and 93 guests

Login Form