It is currently 27 Apr 2024, 06:05
   
Text Size

2014 Making abilities help

Moderator: CCGHQ Admins

2014 Making abilities help

Postby GrovyleXShinyCelebi » 06 Jul 2013, 18:49

So, after making a few modded decks for 2014 I feel I've gotten the hang of this stuff. But being a newbie I still have a bit of trouble with how to create a few basic abilities for cards:

-Multikicker (I know how to make kicker, but I still don't get how to make something like Wolfbriar Elemental, and instead have to use a workaround a la giving "X" to it's mana cost instead).

-"When this creature leaves the battlefield..." (Thragtusk problem! I have a workaround in mind to copy the "triggered ability" section for each possible area Thragtusk can go to activate the beast tokens, but I find that uneconomical and tedious. Is there a single line of code that can do everything?)

-Checking how many cards are in a player's hand. (I'm trying to add Dreamborn Muse, and the only part of the code missing is the part where the game checks how many cards are in a player's hand each upkeep. So far I can't find a function that can perform that check, and I don't have DotP 2013 on my PC, so... any help is greatly appreciated).

Thanks!
User avatar
GrovyleXShinyCelebi
 
Posts: 294
Joined: 12 Jun 2013, 18:23
Has thanked: 14 times
Been thanked: 37 times

Re: 2014 Making abilities help

Postby RiiakShiNal » 06 Jul 2013, 19:42

GrovyleXShinyCelebi wrote:So, after making a few modded decks for 2014 I feel I've gotten the hang of this stuff. But being a newbie I still have a bit of trouble with how to create a few basic abilities for cards:

-Multikicker (I know how to make kicker, but I still don't get how to make something like Wolfbriar Elemental, and instead have to use a workaround a la giving "X" to it's mana cost instead).
You mean like this:
Code: Select all
  <TRIGGERED_ABILITY>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[When Wolfbriar Elemental enters the battlefield, put a 2/2 green Wolf creature token onto the battlefield for each time it was kicked.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Quand l’Élémental de bruyère au loup arrive sur le champ de bataille, mettez sur le champ de bataille un jeton de créature 2/2 verte Loup pour chaque fois qu’il a été kické.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Cuando el Elemental lobo de brezo entre al campo de batalla, pon en el campo de batalla una ficha de criatura Lobo verde 2/2 por cada vez que fue estimulado.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Wenn das Dornenwolfelementar ins Spiel kommt, bringe für jedes Mal, dass du seine Bonuskosten bezahlt hast, einen 2/2 grünen Wolf-Kreaturenspielstein ins Spiel.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Quando l’Elementale Rovo dei Lupi entra nel campo di battaglia, metti sul campo di battaglia una pedina creatura Lupo 2/2 verde per ogni volta che è stato potenziato.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[狼茨の精霊が戦場に出たとき、それがキッカーされている1回につき、緑の2/2の狼・クリーチャー・トークンを1体戦場に出す。]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[늑대찔레 정령이 전장에 들어올 때, 늑대찔레 정령이 향상된 횟수만큼의 2/2 녹색 늑대 생물 토큰을 전장에 놓는다.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Когда Элементаль Волчьего Терна выходит на поле битвы, положите на поле битвы одну фишку существа 2/2 зеленый Волк за каждый полученный им Усилитель.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Quando Elemental do Covil de Espinhos entrar no campo de batalha, coloque no campo de batalha uma ficha de criatura verde 2/2 do tipo Lobo para cada vez que ele tiver sido reforçado.]]></LOCALISED_TEXT>
    <TRIGGER value="ZONECHANGE_END" simple_qualifier="self" to_zone="ZONE_BATTLEFIELD" from_zone="ZONE_ANY" />
    <RESOLUTION_TIME_ACTION>
    if (EffectSourceLKI() ~= nil and EffectSourceLKI():GetKickedCount() &gt; 0) then
       MTG():PutTokensOntoBattlefield( "TOKEN_WOLF_2_2_277478", EffectSourceLKI():GetKickedCount(), EffectController() )
    end
    </RESOLUTION_TIME_ACTION>
    <AUTO_SKIP always="1" />
  </TRIGGERED_ABILITY>
  <TOKEN_REGISTRATION reservation="1" type="TOKEN_WOLF_2_2_G_350765" />
GrovyleXShinyCelebi wrote:-"When this creature leaves the battlefield..." (Thragtusk problem! I have a workaround in mind to copy the "triggered ability" section for each possible area Thragtusk can go to activate the beast tokens, but I find that uneconomical and tedious. Is there a single line of code that can do everything?)
Like this:
Code: Select all
<TRIGGER value="ZONECHANGE_BEGIN" simple_qualifier="self" to_zone="ZONE_ANY" from_zone="ZONE_BATTLEFIELD" />
GrovyleXShinyCelebi wrote:-Checking how many cards are in a player's hand. (I'm trying to add Dreamborn Muse, and the only part of the code missing is the part where the game checks how many cards are in a player's hand each upkeep. So far I can't find a function that can perform that check, and I don't have DotP 2013 on my PC, so... any help is greatly appreciated).
Like this:
Code: Select all
local nCardsInHand = EffectController():Hand_Count()
RiiakShiNal
Programmer
 
Posts: 2185
Joined: 16 May 2011, 21:37
Has thanked: 75 times
Been thanked: 497 times

Re: 2014 Making abilities help

Postby gorem2k » 06 Jul 2013, 20:10

here's one I just made. not sure if it's how it supposed to be. (first attempt)

Lightkeeper of Emeria | Open
Code: Select all
<?xml version='1.0'?>
<CARD_V2 ExportVersion="1">
  <FILENAME text="LIGHTKEEPER_OF_EMERIA_444247540" />
  <CARDNAME text="LIGHTKEEPER_OF_EMERIA" />
  <TITLE>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Lightkeeper of Emeria]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Gardelumière d’Éméria]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Guardiana de la luz de Emeria]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Emerias Lichtbewahrer]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Custode della Luce di Emeria]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[エメリアの光守り]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[Lightkeeper of Emeria]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Lightkeeper of Emeria]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Lightkeeper of Emeria]]></LOCALISED_TEXT>
  </TITLE>
  <MULTIVERSEID value="444247540" />
  <ARTID value="444247540" />
  <ARTIST name="James Ryman" />
  <CASTING_COST cost="{3}{W}" />
  <TYPE metaname="Creature" />
  <SUB_TYPE metaname="Angel" />
  <EXPANSION value="CMD" />
  <RARITY metaname="U" />
  <POWER value="2" />
  <TOUGHNESS value="4" />
  <UTILITY_ABILITY qualifier="Multikicker">
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Multikicker {W}]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Multikick {W}]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Multiestímulo {W}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Multibonus {W}]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Multipotenziamento {W}]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[多重キッカー {W}]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[Multikicker {W}]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Multikicker {W}]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Multikicker {W}]]></LOCALISED_TEXT>
    <COST mana_cost="{W}" type="Mana" />
  </UTILITY_ABILITY>
  <STATIC_ABILITY>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Flying]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Vol]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Vuela.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Fliegend]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Volare]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[飛行]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[비행]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Полет]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Voar]]></LOCALISED_TEXT>
    <INTRINSIC characteristic="CHARACTERISTIC_FLYING" />
  </STATIC_ABILITY>
  <TRIGGERED_ABILITY>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[When Lightkeeper of Emeria enters the battlefield, you gain 2 life for each time it was kicked.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Quand la Gardelumière d’Éméria arrive sur le champ de bataille, vous gagnez 2 points de vie pour chaque fois qu’elle a été kickée.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Cuando la Guardiana de la luz de Emeria entre al campo de batalla, ganas 2 vidas por cada vez que fue estimulada.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Wenn Emerias Lichtbewahrer ins Spiel kommt, erhältst du für jedes Mal, dass du seine Bonuskosten bezahlt hast, 2 Lebenspunkte dazu.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Quando la Custode della Luce di Emeria entra nel campo di battaglia, guadagni 2 punti vita per ogni volta che è stata potenziata.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[エメリアの光守りが戦場に出たとき、あなたはそれがキッカーされている1回につき2点のライフを得る。]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[When Lightkeeper of Emeria enters the battlefield, you gain 2 life for each time it was kicked.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[When Lightkeeper of Emeria enters the battlefield, you gain 2 life for each time it was kicked.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[When Lightkeeper of Emeria enters the battlefield, you gain 2 life for each time it was kicked.]]></LOCALISED_TEXT>
    <TRIGGER value="ZONECHANGE_END" simple_qualifier="self" to_zone="ZONE_BATTLEFIELD" from_zone="ZONE_ANY" />
    <RESOLUTION_TIME_ACTION>
    if EffectSource() ~= nil and EffectController ~= nil then
      local number = EffectSource():GetKickedCount()
      EffectController():GainLife( number*2 )
    end
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>
  <HELP title="MORE_INFO_BADGE_TITLE_10" body="MORE_INFO_BADGE_BODY_10" zone="ZONE_ANY" />
  <SFX text="COMBAT_BLUNT_LARGE_ATTACK" power_boundary_min="4" power_boundary_max="-1" />
  <SFX text="COMBAT_BLUNT_SMALL_ATTACK" power_boundary_min="1" power_boundary_max="3" />
</CARD_V2>
EDIT: I changed {R} to correct {W}. I use a monored deck to test all cards I create.
Last edited by gorem2k on 06 Jul 2013, 20:15, edited 1 time in total.
gorem2k
 
Posts: 464
Joined: 01 Apr 2013, 04:21
Has thanked: 48 times
Been thanked: 33 times

Re: 2014 Making abilities help

Postby RiiakShiNal » 06 Jul 2013, 20:14

You're missing parenthesis on one of the EffectController calls. Should be:
Code: Select all
if EffectSource() ~= nil and EffectController() ~= nil then
RiiakShiNal
Programmer
 
Posts: 2185
Joined: 16 May 2011, 21:37
Has thanked: 75 times
Been thanked: 497 times

Re: 2014 Making abilities help

Postby gorem2k » 06 Jul 2013, 20:18

RiiakShiNal wrote:You're missing parenthesis on one of the EffectController calls. Should be:
Code: Select all
if EffectSource() ~= nil and EffectController() ~= nil then
oops! it worked anyway but it's best to use () to avoid crash
gorem2k
 
Posts: 464
Joined: 01 Apr 2013, 04:21
Has thanked: 48 times
Been thanked: 33 times

Re: 2014 Making abilities help

Postby GrovyleXShinyCelebi » 07 Jul 2013, 18:47

Hey, thanks for the help guys. There's another one I'm trying to make...

Telemin Performance

I tried using Maelstrom Wanderer's cascade ability as a template and went from there, but getting the player to reveal cards until he or she finds a creature, then dumping all the other cards in the graveyard seems impossible for me.

Ugh, DotP 2013 cards can be so annoying sometimes...
User avatar
GrovyleXShinyCelebi
 
Posts: 294
Joined: 12 Jun 2013, 18:23
Has thanked: 14 times
Been thanked: 37 times

Re: 2014 Making abilities help

Postby thefiremind » 07 Jul 2013, 19:19

GrovyleXShinyCelebi wrote:Telemin Performance
I used a personal approach, try if it works:
Telemin Performance | Open
Code: Select all
  <SPELL_ABILITY>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Target opponent reveals cards from the top of his or her library until he or she reveals a creature card. That player puts all noncreature cards revealed this way into his or her graveyard, then you put the creature card onto the battlefield under your control.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[L’adversaire ciblé révèle les cartes du dessus de sa bibliothèque jusqu’à ce qu’il révèle une carte de créature. Ce joueur met toutes les cartes non-créature révélées de cette manière dans son cimetière et vous mettez ensuite sur le champ de bataille, sous votre contrôle, la carte de créature.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[El oponente objetivo muestra cartas de la parte superior de su biblioteca hasta que muestre una carta de criatura. Ese jugador pone en su cementerio todas las cartas que no sean de criatura mostradas de esta manera, luego tú pones en el campo de batalla bajo tu control la carta de criatura.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Ein Gegner deiner Wahl deckt Karten oben von seiner Bibliothek auf, bis er eine Kreaturenkarte aufdeckt. Dieser Spieler legt alle auf diese Weise aufgedeckten Karten, die keine Kreatur waren, auf seinen Friedhof, dann bringst du die Kreaturenkarte unter deiner Kontrolle ins Spiel.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Un avversario bersaglio rivela carte dalla cima del suo grimorio fino a che non rivela una carta creatura. Quel giocatore mette nel suo cimitero tutte le carte non creatura rivelate in questo modo, poi metti sul campo di battaglia la carta creatura sotto il tuo controllo.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[対戦相手1人を対象とする。そのプレイヤーは、自分のライブラリーのカードを一番上から、クリーチャー・カードが公開されるまで公開し続ける。 そのプレイヤーは、これにより公開されたすべてのクリーチャーでないカードを自分の墓地に置き、その後あなたはそのクリーチャー・カードをあなたのコントロール下で戦場に出す。]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[상대 한 명을 목표로 정한다. 그 상대는 생물 카드를 공개할 때까지 자신의 서고 맨 위의 카드를 공개한다. 그 플레이어는 이렇게 공개한 카드 중 생물이 아닌 모든 카드를 자신의 무덤에 넣고, 당신은 그 생물 카드를 당신의 조종하에 전장에 놓는다.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Целевой оппонент показывает карты с верха своей библиотеки, пока не покажет карту существа. Тот игрок кладет все показанные таким образом карты, не являющиеся существами, на свое кладбище, затем вы кладете ту карту существа на поле битвы под вашим контролем.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[O oponente alvo revela cards do topo de seu próprio grimório até revelar um card de criatura. Aquele jogador coloca todos os cards que não sejam de criatura revelados desta maneira em seu próprio cemitério, e depois você coloca o card de criatura no campo de batalha sob o seu controle.]]></LOCALISED_TEXT>
    <TARGET tag="CARD_QUERY_CHOOSE_PLAYER_TO_VESTIGE_ROT" definition="0" compartment="0" count="1" />
    <TARGET_DEFINITION id="0">
    local filter = ClearFilter()
    filter:SetFilterType(FILTER_TYPE_PLAYERS)
    </TARGET_DEFINITION>
    <RESOLUTION_TIME_ACTION>
    local target_player = EffectDC():Get_Targets(0):Get_PlayerPtr(0)
    if target_player ~= nil then
       local index = 0
       local card = target_player:Library_GetNth(index)
       while card ~= nil do
          card:Reveal()
          if card:GetCardType():Test(CARD_TYPE_CREATURE) then
             EffectDC():Set_CardPtr(1, card)
             card = nil
          else
             index = index + 1
             card = target_player:Library_GetNth(index)
           end
        end
       EffectDC():Set_Int(2, index)
    end
    </RESOLUTION_TIME_ACTION>
    <RESOLUTION_TIME_ACTION>
    local target_player = EffectDC():Get_Targets(0):Get_PlayerPtr(0)
    if target_player ~= nil then
       local count = EffectDC():Get_Int(2)
       if count &gt; 0 then
          target_player:MillCards(count)
          local creature = EffectDC():Get_CardPtr(1)
          if creature ~= nil then
             creature:PutOntoBattlefield( EffectController() )
          end
       end
    end
    </RESOLUTION_TIME_ACTION>
    <AI_SIMPLIFIED_TARGETING compartment="0" hint="HINT_ENEMY_ONLY" />
  </SPELL_ABILITY>
I wasn't sure if I had to mill "count" cards or "count-1" cards, but since the count starts at 0, I think I got it right this way. If the creature ends up in the graveyard with the other cards, fix it with
Code: Select all
target_player:MillCards(count-1)
< Former DotP 2012/2013/2014 modder >
Currently busy with life...
User avatar
thefiremind
Programmer
 
Posts: 3515
Joined: 07 Nov 2011, 10:55
Has thanked: 118 times
Been thanked: 721 times


Return to Programming Talk

Who is online

Users browsing this forum: No registered users and 29 guests


Who is online

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

Login Form