It is currently 16 Apr 2024, 20:49
   
Text Size

Custom Card Thread

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

Custom Card Thread

Postby timmermac » 20 Nov 2014, 21:28

I'm going to challenge the community to come up with custom cards for use in Forge. Post your card scripts in this thread. Please, nothing un-set worthy. Bonus points to those who create more Slivers. More bonus points to those who create the ultimate badass Sliver.
"I just woke up, haven't had coffee, let alone a pee in 7 days, and I find out you stole my ass and made a ...mini-me! Carter, I should be irked currently, yes?" - Jack O'Neill
User avatar
timmermac
Tester
 
Posts: 1512
Joined: 17 May 2010, 20:36
Has thanked: 18 times
Been thanked: 95 times

Re: Custom Card Thread

Postby Fizanko » 20 Nov 2014, 22:49

Add that Eldrazi Sliver in a Sliver centered deck and none will ever want to play with you anymore :D
http://lataziba.deviantart.com/art/Eldr ... -375403741
probably outdated by now so you should avoid : Innistrad world for Forge (updated 17/11/2014)
Duel Decks for Forge - Forge custom decks (updated 25/10/2014)
User avatar
Fizanko
Tester
 
Posts: 780
Joined: 07 Feb 2014, 11:24
Has thanked: 155 times
Been thanked: 94 times

Re: Custom Card Thread

Postby torridus » 21 Nov 2014, 01:02

I've been coding a custom block for a while. I'll share a few random cards; they should be fully functional, but the code might be off since most cards were done for older versions of Forge.

No slivers, sorry :p

Bear Power | Open
Code: Select all
Name:Bear Power
ManaCost:G
Types:Enchantment Aura
K:Enchant creature
A:SP$ Attach | Cost$ G | ValidTgts$ Creature | AILogic$ Pump
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ X | AddToughness$ X | References$ X | Description$ Enchanted creature gets +1/+1 for each bear creature you control.
SVar:X:Count$Valid Creature.Bear+Other+YouCtrl
SVar:BuffedBy:Creature
SVar:Rarity:Uncommon
End
Nascent Bear | Open
Code: Select all
Name:Nascent Bear
ManaCost:1 G
Types:Creature Bear
PT:2/2
K:Prevent all damage that would be dealt to CARDNAME.
A:AB$ Debuff | Cost$ 2 | Defined$ Self | Keywords$ Prevent all damage that would be dealt to CARDNAME. | AnyPlayer$ True | SpellDescription$ Until end of turn, CARDNAME loses "Prevent all damage that would be dealt to CARDNAME." Any player may activate this ability.
SVar:Rarity:Common
End
Of The Sunken Necropolis | Open
Code: Select all
Name:Of The Sunken Necropolis
ManaCost:4 U U
Types:Legendary Creature Horror
Text:no text
PT:6/6
K:Trample
T:Mode$ Drawn | ValidCard$ Card.OppOwn | TriggerZones$ Battlefield | Execute$ TrigScry | OptionalDecider$ You | TriggerDescription$ Whenever an opponent draws a card, you may scry 3.
SVar:TrigScry:AB$Scry | Cost$ 0 | ScryNum$ 3
SVar:Rarity:Mythic
End
Bubbler | Open
Code: Select all
Name:Bubbler
ManaCost:1 U
Types:Creature Crab
PT:0/1
K:Exalted
A:AB$ DealDamage | Cost$ T | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ 1 | SpellDescription$ CARDNAME deals 1 damage to target creature.
SVar:Rarity:Common
End
Vale-Dwindler | Open
Code: Select all
Name:Vale-Dwindler
ManaCost:2 W W
Types:Legendary Creature Wizard
PT:4/4
T:Mode$ SpellCast | ValidCard$ Enchantment,Creature | ValidActivatingPlayer$ You | Execute$ TrigPump | TriggerZones$ Battlefield | OptionalDecider$ You | TriggerDescription$ Whenever you cast an enchantment spell, you may have target creature get -2/-2 until end of turn.
SVar:TrigPump:AB$Pump | Cost$ 0 | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ -2 | NumDef$ -2 | IsCurse$ True
A:AB$ GenericChoice | Cost$ T | ValidTgts$ Permanent.inZoneBattlefield+YouCtrl,Card.suspended+YouOwn | TgtPrompt$ Choose target permanent you control or suspended card you own | Defined$ You | Choices$ LoseTime,AddTime | TgtZone$ Battlefield,Exile | ConditionDefined$ Targeted | ConditionPresent$ Card.counters_GE1_TIME | ConditionCompare$ GE1 | SpellDescription$ Choose target permanent you control or suspended card you own. If that permanent or card has a time counter on it, you may remove a time counter from it or put another time counter on it.
SVar:LoseTime:DB$ RemoveCounter | Defined$ Targeted | TgtPrompt$ Select target permanent or suspended card. | CounterType$ TIME | CounterNum$ 1 | ChoiceDescription$ Remove a time counter.
SVar:AddTime:DB$ PutCounter | Defined$ Targeted | TgtPrompt$ Select target permanent with a time counter on it or suspended card. | CounterType$ TIME | CounterNum$ 1 | TgtZone$ Battlefield,Exile | ChoiceDescription$ Add a time counter.
SVar:Rarity:Mythic
End
Skeleton Dragon | Open
Code: Select all
Name:Skeleton Dragon
ManaCost:7 B B
Types:Creature Skeleton Dragon
Text:no text
PT:6/8
K:Flying
K:Deathtouch
A:AB$ Regenerate | Cost$ 2 B | SpellDescription$ Regenerate CARDNAME.
K:Madness:6 B
SVar:Rarity:Uncommon
End
Spider Queen | Open
Code: Select all
Name:Spider Queen
ManaCost:4 G G
Types:Legendary Creature Spider
PT:3/6
T:Mode$ SpellCast | ValidCard$ Creature.nonHuman | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigSpider | TriggerDescription$ Whenever you cast a nonhuman creature spell, you may put a 1/2 green Spider creature token with reach onto the battlefield.
SVar:Spider:AB$Token | Cost$ 0 | TokenAmount$ 1 | TokenName$ Spider | TokenTypes$ Creature,Spider | TokenOwner$ You | TokenColors$ Green | TokenPower$ 1 | TokenToughness$ 2 | TokenKeywords$ Reach
A:AB$ Pump | Cost$ 1 BG | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ Deathtouch | SpellDescription$ Target creature gains deathtouch until end of turn.
SVar:Rarity:Rare
End
torridus
 
Posts: 56
Joined: 03 Jul 2012, 12:58
Has thanked: 4 times
Been thanked: 9 times

Re: Custom Card Thread

Postby Phoenix » 21 Nov 2014, 07:22

Sorry that I still don't understand the complete scripting syntax.
But I think everyone understands my 2 suggestions. And I love slivers, too.

Sliver Bomb | Open
Code: Select all
Name:Sliver Bomb
ManaCost: 5
Types: Artifact Enchantment Sliver
Description: Sunburst (This enters the battlefield with a charge counter on it for each color of mana spent to cast it.)
Description: The number of counters on Sliver Bomb can't change.
Description: {WUBRG}, Remove Sliver Bomb from the game: Destroy each card within a radius of 10 cm per counter on Sliver Bomb.
Description: Everyone can activate Sliver Bomb's ability at any time (each on battlefield, in library, graveyard, or exile)
Black-market Sliver | Open
Code: Select all
Name:Black-market Sliver
ManaCost: WWUUBBRRGG
Types: Creature Sliver
K:Hexproof
PT: 0/1
Description: Choose one:
Description: Move target Sliver permanent onto target battlefield and gain control of target permanant of that battlefield.
Description: OR
Description: Move target Sliver permanent on the bottom of target library and draw the top card of library.
Description: OR
Description: Move target Sliver permanent on the bottom of target graveyard and draw the top card of that graveyard.
Is it possible to integrate a custom card folder for building own cards? I never tried that out.
Phoenix
 
Posts: 77
Joined: 15 Dec 2011, 10:23
Has thanked: 6 times
Been thanked: 3 times

Re: Custom Card Thread

Postby tasteful » 21 Nov 2014, 22:33

target battlefield
i like it
tasteful
 
Posts: 65
Joined: 04 Nov 2013, 23:53
Has thanked: 3 times
Been thanked: 3 times

Re: Custom Card Thread

Postby torridus » 22 Nov 2014, 03:18

Phoenix wrote:Is it possible to integrate a custom card folder for building own cards? I never tried that out.
Yes, but it's buggy, last time I tried it. Forge occasionally refuses to load when new cards are introduced in a custom folder. I can't remember what version I used (1.5.22 maybe?) since I deleted the folders; I couldn't playtest cards sometimes, so it was nearly pointless.

I don't think it's actually possible to code your card ideas in their current states, but yeah "target battlefield" is always a fun idea!
torridus
 
Posts: 56
Joined: 03 Jul 2012, 12:58
Has thanked: 4 times
Been thanked: 9 times

Re: Custom Card Thread

Postby friarsol » 22 Nov 2014, 03:29

torridus wrote:
Phoenix wrote:Is it possible to integrate a custom card folder for building own cards? I never tried that out.
Yes, but it's buggy, last time I tried it. Forge occasionally refuses to load when new cards are introduced in a custom folder. I can't remember what version I used (1.5.22 maybe?) since I deleted the folders; I couldn't playtest cards sometimes, so it was nearly pointless.

I don't think it's actually possible to code your card ideas in their current states...
Well, no that's not true at all. If the cards are properly scripted you can add them in just fine, it's just like creating new cards when new sets come out. If Forge doesn't load, there's something wrong with those scripts.

The way I'd recommend it is to create a new folder in the /res/cardsfolder with whatever name you want ("custom" or the name of the set).

There are some (ableit dated) reference guides on the Wiki: http://www.slightlymagic.net/wiki/Forge_API but really the best reference is finding similar cards and copying how they are scripted.
friarsol
Global Moderator
 
Posts: 7593
Joined: 15 May 2010, 04:20
Has thanked: 243 times
Been thanked: 965 times

Re: Custom Card Thread

Postby torridus » 28 Nov 2014, 19:33

friarsol wrote:
torridus wrote:Yes, but it's buggy, last time I tried it....
Well, no that's not true at all. If the cards are properly scripted you can add them in just fine, it's just like creating new cards when new sets come out. If Forge doesn't load, there's something wrong with those scripts.

The way I'd recommend it is to create a new folder in the /res/cardsfolder with whatever name you want ("custom" or the name of the set).

There are some (ableit dated) reference guides on the Wiki: http://www.slightlymagic.net/wiki/Forge_API but really the best reference is finding similar cards and copying how they are scripted.
Forge has been highly inconsistent about it in the past, so I do think it is/was buggy. Sometimes it loads with custom cards, sometimes it doesn't. Even custom cards that are functional reprints, with only the name and set name changed, can cause Forge to not work, and I know for a fact those are properly coded. When Forge refuses to load, sometimes removing a random card and immediately putting it back in the folder will let Forge load. There seemed to be no rhyme or reason as to why Forge disliked certain custom cards, especially since Forge changed its mind on a regular basis. If it's really the case that "If the cards are properly scripted you can add them in just fine" I wouldn't have had any problems adding cards 90% of the time. But sometimes I would add a card, Forge wouldn't load, and I could remove every card from the folder except the newest card, then Forge would load; adding the rest of the cards back usually posed no problem.

But as mentioned earlier in the thread, this was several iterations ago, so perhaps the particular issues I had were fixed. I never filed a bug report because there was no consistent way to replicate the problem of Forge not loading. It was, as far as I could tell, truly random.
torridus
 
Posts: 56
Joined: 03 Jul 2012, 12:58
Has thanked: 4 times
Been thanked: 9 times

Re: Custom Card Thread

Postby TSTwizby » 25 Jan 2015, 12:24

I can attest to having had a bunch of custom cards which worked just fine in earlier versions (just upgraded from 1.4.6) which now cause Forge to crash whenever I try to load decks containing them. Interestingly, it loads the cards into the deck builder just fine. I've gone ahead and reported it, though I can't post a link to the report.

If it helps anyone, the error is always pretty close to:

NullPointerException | Open
Code: Select all
Forge Version:    1.5.31-r28300Mu (mixed revisions detected; please update from the root directory)
Operating System: Windows 8 6.2 amd64
Java Version:     1.7.0_21 Oracle Corporation

java.lang.NullPointerException
   at forge.card.CardDb$SetPreference.accept(CardDb.java:65)
   at forge.card.CardDb.getCardFromEdition(CardDb.java:319)
   at forge.card.CardDb.getCardFromEdition(CardDb.java:297)
   at forge.card.CardDb.getCardFromEdition(CardDb.java:292)
   at forge.card.CardEdition$Collection.getEarliestEditionWithAllCards(CardEdition.java:419)
   at forge.deck.DeckProxy.getEdition(DeckProxy.java:102)
   at forge.itemmanager.ColumnDef$42.apply(ColumnDef.java:353)
   at forge.itemmanager.ColumnDef$42.apply(ColumnDef.java:350)
   at forge.itemmanager.views.ItemListView$ItemTableModel.getValueAt(ItemListView.java:707)
   at javax.swing.JTable.getValueAt(Unknown Source)
   at javax.swing.JTable.prepareRenderer(Unknown Source)
   at javax.swing.plaf.basic.BasicTableUI.paintCell(Unknown Source)
   at javax.swing.plaf.basic.BasicTableUI.paintCells(Unknown Source)
   at javax.swing.plaf.basic.BasicTableUI.paint(Unknown Source)
   at javax.swing.plaf.ComponentUI.update(Unknown Source)
   at javax.swing.JComponent.paintComponent(Unknown Source)
   at forge.toolbox.FSkin$SkinnedTable.paintComponent(FSkin.java:2778)
   at javax.swing.JComponent.paint(Unknown Source)
   at javax.swing.JComponent.paintChildren(Unknown Source)
   at javax.swing.JComponent.paint(Unknown Source)
   at javax.swing.JViewport.paint(Unknown Source)
   at javax.swing.JComponent.paintChildren(Unknown Source)
   at javax.swing.JComponent.paint(Unknown Source)
   at forge.toolbox.FScrollPane.paint(FScrollPane.java:86)
   at javax.swing.JComponent.paintChildren(Unknown Source)
   at javax.swing.JComponent.paint(Unknown Source)
   at javax.swing.JComponent.paintChildren(Unknown Source)
   at javax.swing.JComponent.paint(Unknown Source)
   at javax.swing.JViewport.paint(Unknown Source)
   at javax.swing.JComponent.paintChildren(Unknown Source)
   at javax.swing.JComponent.paint(Unknown Source)
   at javax.swing.JComponent.paintChildren(Unknown Source)
   at javax.swing.JComponent.paint(Unknown Source)
   at javax.swing.JComponent.paintChildren(Unknown Source)
   at javax.swing.JComponent.paint(Unknown Source)
   at javax.swing.JComponent.paintChildren(Unknown Source)
   at javax.swing.JComponent.paint(Unknown Source)
   at javax.swing.JComponent.paintChildren(Unknown Source)
   at javax.swing.JComponent.paint(Unknown Source)
   at javax.swing.JComponent.paintChildren(Unknown Source)
   at javax.swing.JComponent.paint(Unknown Source)
   at javax.swing.JComponent.paintChildren(Unknown Source)
   at javax.swing.JComponent.paint(Unknown Source)
   at javax.swing.JLayeredPane.paint(Unknown Source)
   at javax.swing.JComponent.paintChildren(Unknown Source)
   at javax.swing.JComponent.paint(Unknown Source)
   at javax.swing.JLayeredPane.paint(Unknown Source)
   at javax.swing.JComponent.paintChildren(Unknown Source)
   at javax.swing.JComponent.paint(Unknown Source)
   at javax.swing.JComponent.paintToOffscreen(Unknown Source)
   at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source)
   at javax.swing.RepaintManager$PaintManager.paint(Unknown Source)
   at javax.swing.RepaintManager.paint(Unknown Source)
   at javax.swing.JComponent._paintImmediately(Unknown Source)
   at javax.swing.JComponent.paintImmediately(Unknown Source)
   at javax.swing.RepaintManager$3.run(Unknown Source)
   at javax.swing.RepaintManager$3.run(Unknown Source)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
   at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
   at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
   at javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source)
   at javax.swing.RepaintManager.access$1000(Unknown Source)
   at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source)
   at java.awt.event.InvocationEvent.dispatch(Unknown Source)
   at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
   at java.awt.EventQueue.access$200(Unknown Source)
   at java.awt.EventQueue$3.run(Unknown Source)
   at java.awt.EventQueue$3.run(Unknown Source)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.ProtectionDomain$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)
Notably, it does just fine with cards that don't exist at all, and doesn't crash until you try to scroll a deck with custom cards into view.

To keep things fun, here's a couple of the offending cards. Yes, they are kind of ridiculous. Was making them mostly to have fun with ideas and see how much I could stretch the engine. They all worked pretty much as intended in earlier versions of Forge. I am curious as to how possible it would be to make Khepri kind of balanced. (kudos to anyone who gets the references, by the way)

Khepri | Open
Basically, you control all creatures, but they all get -1/-1. Would have liked to make all their activated abilities more expensive too, but wasn't sure how to do that. Flying Human Advisor for flavor reasons.

Code: Select all
Name:Khepri
ManaCost:G G U U B B B
Types: Legendary Creature Human Advisor
PT:1/2
K:Flying
A:AB$ GainControl | Cost$ 0 | ValidTgts$ Permanent.Creature | TgtPrompt$ Select target creature | LoseControl$ LeavesPlay,LoseControl | SpellDescription$ Gain control of target creature for as long as you control CARDNAME.
S:Mode$ Continuous | Affected$ Creature.YouCtrl | AddPower$ -1 | AddToughness$ -1 | Description$ Creatures you control get -1/-1.
Oracle:Flying\nCreatures you control get -1/-1.\n{0}: Gain control of target creature for as long as you control Khepri.
Behemoth | Open
Huge, shrouded thing that deals tons of undirected damage and can redirect damage targeted at it. Goes back into the deck from the graveyard to make it a bit trickier to cheat out.

Code: Select all
Name:Endbringer Behemoth
ManaCost:2 R R R B B B
Types:Legendary Creature Endbringer
PT:8/10
K:Shroud
K:Trample
T:Mode$ ChangesZone | Origin$ Any | Destination$ Graveyard | ValidCard$ Creature.Self  | Execute$ TrigShuffle | TriggerDescription$ When CARDNAME is put into a graveyard from anywhere, its owner shuffles his or her graveyard into his or her library.
A:AB$ DamageAll | Cost$  T X | XColor$ R | NumDmg$ X | References$ X | ValidCards$ Creature.Other | ValidPlayers$ Each | ValidDescription$ each creature without flying and each player. | SpellDescription$ CARDNAME deals X damage to each other creature and each player.
R:Event$ DamageDone | ActiveZones$ Battlefield | ValidTarget$ Card.Self | ReplaceWith$ TrigDamage | Description$ If damage would be dealt to CARDNAME, redirect it to target creature or player.
SVar:X:Count$xPaid
SVar:TrigShuffle:AB$ ChangeZoneAll | Cost$ 0 | Defined$ TriggeredCardOwner | ChangeType$ Card | Origin$ Graveyard | Destination$ Library | Shuffle$ True
SVar:TrigDamage:AB$ DealDamage | Cost$ 0 | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player | NumDmg$ DmgDealt | SpellDescription$ CARDNAME redirects damage to target creature or player.
SVar:DmgDealt:ReplaceCount$DamageAmount
Oracle:Shroud/nTrample/nWhen Behemoth is put into a graveyard from anywhere, its owner shuffles his or her graveyard into his or her library.\nIf damage would be dealt to Behemoth, redirect it to target creature or player.\n{T}{X}: Behemoth deals X damage to each other creature and each player. Spend only red mana on this ability.
Leviathan | Open
Huge, shrouded thing that has islandwalk, turns lands into islands when it attacks, and can tap to deal damage divided as you like equal to the number of islands on the battlefield. I screwed up the 'turning lands into islands' thing a bit and it doesn't change the name of the lands, but it does in fact cause them to tap for U, so I didn't bother to fix it. At about this time I got bored of writing out the oracle text.

Code: Select all
Name:Endbringer Leviathan
ManaCost:2 U U U B B B
Types:Legendary Creature Endbringer
PT:8/10
K:Shroud
K:Islandwalk
T:Mode$ ChangesZone | Origin$ Any | Destination$ Graveyard | ValidCard$ Creature.Self  | Execute$ TrigShuffle | TriggerDescription$ When CARDNAME is put into a graveyard from anywhere, its owner shuffles his or her graveyard into his or her library.
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigAttack | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME attacks, target land becomes an Island. This effect lasts indefinitely.
A:AB$ DealDamage | Cost$ T | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature and/or player to distribute damage to | NumDmg$ X | References$ X,MaxTgts | TargetMin$ 0 | TargetMax$ X | DividedAsYouChoose$ X | References$ X| SpellDescription$ Deal X damage, divided as you choose among any number of target creatures and players, where X is the number of Islands on the battlefield.
SVar:NumPlayers:PlayerCountPlayers$Amount/Plus.NumCreatures
SVar:NumCreatures:Count$Valid Creature
SVar:MaxTgts:SVar$NumPlayers/Plus.1
SVar:X:Count$Valid Island
SVar:TrigAttack:AB$ Animate | Cost$ 0 | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Island | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True | Permanent$ True | SpellDescription$ Target land becomes an Island.
SVar:TrigShuffle:AB$ ChangeZoneAll | Cost$ 0 | Defined$ TriggeredCardOwner | ChangeType$ Card | Origin$ Graveyard | Destination$ Library | Shuffle$ True
Oracle:Yadda yadda.
Also, this is a card I've been working on but haven't gotten able to work. At first I thought it was a problem with the card, but now I'm not sure since Forge has been breaking on other known to work cards as well. If it raises any red flags please let me know.

Gogmazios | Open
Huge, black, legendary lizard with monstrosity 10 for 5xB + 5xR. Before turning monstrous, can tap a creature for B B and it won't untap next turn. After turning monstrous, it immediately gains flying and deals 5 damage to each creature and player, and it gains a copy of its old ability for BR BR which also deals 3 damage to the targeted creature. Mostly to see if it was possible, I tried to have it enter the battlefield with a custom named counter on it, and let it tap and remove the counter to deal 10 damage to a creature. Most of what I did with this card was just to see if I could get forge to do it, though it also makes a pretty amazing over the top win condition, and everything it can do is inspired by what its a reference to. Different from the other three, I might add.

Code: Select all
Name:Gogmazios
ManaCost: B B B B B B
Types: Legendary Creature Lizard
PT:10/10
K: Monstrosity 10:B B B B B R R R R R
S:Mode$ Continuous | Affected$ Card.Self+IsMonstrous | AddKeyword$ Flying | Description$ As long as CARDNAME is monstrous, it has flying.
T:Mode$ ChangesZone | ValidCard$ Card.wasCastFromHand+Self | Destination$ Battlefield | Static$ True | Execute$ ETBCounter | TriggerDescription$ CARDNAME enters the battlefield with a dragonator counter on it if you cast it from your hand.
SVar:ETBCounter:AB$PutCounter | Cost$ 0 | Defined$ Self | CounterType$ DRAGONATOR | CounterNum$ 1
T:Mode$ BecomeMonstrous | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigDamage | SubAbility$ MonAni | TriggerDescription$ When CARDNAME becomes Monstrous, it does five damage to each other creature and each player, and gains "{RB}{RB}: Tap target creature, and CARDNAME does three damage to it. It does not untap during its controller's next untap step."
SVar:TrigDamage:AB$ DamageAll | Cost$ 0 | NumDmg$ 3 | ValidCards$ Creature.Other | ValidPlayers$ Each
A:AB$ DealDamage | Cost$ T SubCounter<1/DRAGONATOR> | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ 10 | SpellDescription$ CARDNAME deals 10 damage to target creature.
A:SP$ Tap | Cost$ B B | ValidTgts$ Creature | TgtPrompt$ Select target creature | SubAbility$ DBPump | SpellDescription$ Tap target creature. That creature doesn't untap during its controller's next untap step.
SVar:DBPump:DB$ PumpAll | Defined$ Targeted | ValidCards$ Creature | KW$ HIDDEN This card doesn't untap during your next untap step. | Permanent$ True
SVar:MonAni:Mode$ Animate$ | Cost$ 0 | ValidTarget$ Self | sVars$ModTap
SVar:ModTap:AB$ Tap | Cost$ BR BR | ValidTgts$ Creature | TgtPrompt$ Select target creature | SubAbility$ DBDamage | SpellDescription$ Tap target creature and CARDNAME does three damage to it. That creature doesn't untap during its controller's next untap step.
SVar:DBDamage:AB$ Deal Damage | Cost$ 0 | ValidTgts$ Target | NumDmg$ 3 | SubAbility$ DBPump
Oracle:{B}{B}{B}{B}{B}{R}{R}{R}{R}{R}: Monstrosity 10. (If this creature isn't monstrous, put ten +1/+1 counters on it and it becomes monstrous.\nWhen Gogmazios becomes monstrous, it deals five damage to each other creature and each player, and gains flying and "{BR}{BR}: Tap target creature, and Gogmazios does three damage to it. It does not untap during its controller's next untap step."\nGogmazios enters the battlefield with a Dragonator counter on it.\n{T}, remove one Dragonator counter from Gogmazios: Deal ten damage to target creature.\n{B}{B}: Tap target creature. It does not untap during its controller's next untap step.
TSTwizby
 
Posts: 1
Joined: 25 Jan 2015, 11:50
Has thanked: 0 time
Been thanked: 0 time

Re: Custom Card Thread

Postby onderzeeboot » 06 Sep 2015, 14:03

So, I'm using Forge to do some test drafts with my custom cards cube, and I can't get some of the cards to work, but I can't find what I'm doing wrong.

Edit: *** Solved ***

| Open
Code: Select all
[spoiler=]Name:Javelineer's Cache
ManaCost:RG W
Types:Enchantment
K:etbCounter:JAVELIN:3
S:Mode$ Continuous | Affected$ Creature.YouCtrl | AddAbility$ ThrowJavelin | AddSVar$ DBGainlife | Description$ Each creature you control has "Remove a javelin counter from Javelineer's Cache, {T}: This creature deals 1 damage to target creature or player. You gain 1 life."
SVar:ThrowJavelin:AB$ DealDamage | Cost$ T SubCounter<1/JAVELIN/Enchantment.YouCtrl+namedJavelineer's Cache/Javelineer's Cache> | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player | SubAbility$ DBGainLife | NumDmg$ 1
SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 1
Oracle:Javelineer's Cache enters the battlefield with three javelin counters on it.\nEach creature you control has: "{T}, Remove a javelin counter from Javelineer's Cache: This creature deals 1 damage to target creature or player. You gain 1 life.
The tap ability is granted to all my creatures, and I have to remove a javelin counter from Javelineer's Cache. So, the hard part works. The one thing that doesn't work is the life gain. I can't get it to gain me 1 life, and I don't know why.

| Open
Code: Select all
Name:Nechebe's Command
ManaCost:W R
Types:Instant
A:SP$ Charm | Cost$ W R | CharmNum$ 2 | Choices$ DBMonk,DBPumpHaste,DBNoBlocks,Prevent | SpellDescription$ Choose two - Prevent all damage a source of your choice would deal this turn;Put a 1/1 white Monk creature token with prowess onto the battlefield;Creatures you control get +1/+0 and gain haste until end of turn;Target creature can’t block this turn.
SVar:DBMonk:DB$ Token | TokenAmount$ 1 | TokenName$ Monk | TokenTypes$ Creature,Monk | TokenColors$ White | TokenPower$ 1 | TokenToughness$ 1 | TokenImage$ w_1_1_monk_frf | TokenKeywords$ Prowess | TokenOwner$ You | SpellDescription$ Put a 1/1 white Monk creature token with prowess onto the battlefield.
SVar:DBPumpHaste:DB$ PumpAll | ValidCards$ Creature.YouCtrl | NumAtt$ 1 | KW$ Haste | SpellDescription$ Creatures you control get +1/+0 and gain haste until end of turn.
SVar:DBNoBlocks:DB$ Pump | ValidTgts$ Creature | KW$ HIDDEN CARDNAME can't block. | TgtPrompt$ Select target creature. | IsCurse$ True | SpellDescription$ Target creature can't block this turn.
SVar:Prevent:DB$ ChooseSource | Choices$ Card | RememberChosen$ True | AILogic$ NeedsPrevention | SubAbility$ DBEffect | SpellDescription$ Prevent all damage a source of your choice would deal this turn.
SVar:DBEffect:DB$ Effect | ReplacementEffects$ RPreventNextFromSource | RememberObjects$ Remembered | SVars$ RPreventNextFromSource | SubAbility$ DBCleanup | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ GE1
SVar:RPreventNextFromSource:Event$ DamageDone | ValidSource$ Card.IsRemembered | Prevent$ True | PreventionEffect$ True | Description$ Prevent all damage the source would deal this turn.
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:PlayMain1:TRUE
Oracle:Choose two -\n• Prevent all damage a source of your choice would deal this turn.\n• Put a 1/1 white Monk creature token with prowess onto the battlefield.\n• Creatures you control get +1/+0 and gain haste until end of turn.\n• Target creature can’t block this turn.
The other card I can't get to work is a modal spell. The prevent ability doesn't seem to work, even though it's copied word for word from Rith's Charm.

Any ideas?

Tested in forge-gui-desktop-1.5.45-SNAPSHOT-r29918
Last edited by onderzeeboot on 07 Sep 2015, 05:43, edited 2 times in total.
onderzeeboot
 
Posts: 31
Joined: 29 Nov 2014, 19:37
Has thanked: 5 times
Been thanked: 0 time

Re: Custom Card Thread

Postby Lapsa » 06 Sep 2015, 19:43

Silvers are cool and all, but there needs to be more foxes too. Is there a guide for making custom cards somewhere?
Lapsa
 
Posts: 7
Joined: 11 Mar 2013, 16:28
Has thanked: 0 time
Been thanked: 1 time

Re: Custom Card Thread

Postby friarsol » 06 Sep 2015, 19:48

Lapsa wrote:Silvers are cool and all, but there needs to be more foxes too. Is there a guide for making custom cards somewhere?
We have a Wiki page that's a bit outdated, but should be useful:

http://www.slightlymagic.net/wiki/Forge_API

Otherwise, take a look at the almost 15k scripts already in existence to see how abilities work. (That's in /res/cardsfolder/)
friarsol
Global Moderator
 
Posts: 7593
Joined: 15 May 2010, 04:20
Has thanked: 243 times
Been thanked: 965 times

Re: Custom Card Thread

Postby onderzeeboot » 06 Sep 2015, 20:02

I found the error in Javelineer's Cache. The file said "AddSVar$ DBGainlife" with a lower case l, but "SVar:DBGainLife" with an upper case L. I swear, this is why I became a tester, not a programmer :roll:

Edit: And I found the problem with the other card as well. Apparently it doesn't like the line "SVar:PlayMain1:TRUE". If I remove that line the card works.
onderzeeboot
 
Posts: 31
Joined: 29 Nov 2014, 19:37
Has thanked: 5 times
Been thanked: 0 time

Re: Custom Card Thread

Postby correioalternativo » 08 Sep 2015, 23:08

timmermac wrote:the ultimate badass Sliver.
Aluren Sliver
Omniscient Sliver
Sliverscape, from Dovescape: Whenever a player casts a nonsliver spell... profit.

*

How to script effects like these?

Humble Attendant
Creature — Human Cleric 0/1 {W}
When you draw Humble Attendant, you may reveal it. If you do, you gain 3 life.

Ssyba
Land
{T}: Add one mana of any color to your mana pool. Target opponent may search your library for a land card and put that card onto the battlefield tapped under his or her control. If he or she does, shuffle your library.
User avatar
correioalternativo
 
Posts: 279
Joined: 23 Jul 2012, 12:01
Has thanked: 255 times
Been thanked: 23 times

Re: Custom Card Thread

Postby Midori » 22 Sep 2015, 18:03

correioalternativo wrote:How to script effects like these?

Humble Attendant
Creature — Human Cleric 0/1 {W}
When you draw Humble Attendant, you may reveal it. If you do, you gain 3 life.

Ssyba
Land
{T}: Add one mana of any color to your mana pool. Target opponent may search your library for a land card and put that card onto the battlefield tapped under his or her control. If he or she does, shuffle your library.
Humble Attendant is not just not scriptable by now, but it also doesn't work by the rules (specifically rule 603.2e) unless your opponents control Telepathy.
To make it work, you have to make it a static ability tied to a triggered ability (similar to how miracle works). But i don't think you can script those kind of abilities on forge yet.

Ssyba probably can't be scripted yet, since there is (as far as i know) currently no card that "allowed you to make your opponent search your library". Therefore Forge probably doesn't have an function to allow you to script such a card yet.
Besides, you might want to remove the target of Ssybas ability, since mana abilities can't have targets (rule 605.1a). Though being a non mana ability gives it a charm of its own.
Midori
 
Posts: 55
Joined: 20 Apr 2014, 12:43
Has thanked: 1 time
Been thanked: 4 times

Next

Return to Forge

Who is online

Users browsing this forum: No registered users and 65 guests


Who is online

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

Login Form