It is currently 26 Apr 2024, 12:12
   
Text Size

Selectable additional costs

Moderator: CCGHQ Admins

Selectable additional costs

Postby thefiremind » 18 Jul 2013, 20:23

I was thinking about how we can code "As an additional cost to cast [creature], reveal a [creature type] card from your hand or pay {3}". While kevlahnota's implementation in DotP2013 was OK most of the times (increase cost by {3} when you don't have a card to reveal, otherwise just force the player to reveal a card), it had a weak point: additional costs should be always paid, no matter how I cast the card. So, for example, if I cast it through Intet, the Dreamer, I should still reveal a proper card or pay {3}.

I tried to make an additional cost that asks how to pay in a query, disabling the options that can't be used, but there's a big problem: I have no way to check if the player can afford {3} plus the card cost plus increases/decreases.

Just a note: I tried to make a resource cost as UTILITY_ABILITY and call CanPayResourceCost from the additional cost block, but it didn't work: it allowed me to choose the "Pay {3}" option even if I didn't have enough mana, and it raised a "C stack overflow" error in SCRIPT_LOG.TXT.

If someone has a good idea, please share it.
< 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

Re: Selectable additional costs

Postby kevlahnota » 18 Jul 2013, 22:12

This is not selectable but can you try this if this works?
Code: Select all
<?xml version='1.0'?>
<CARD_V2 ExportVersion="1">
  <FILENAME text="SILVERGILL_ADEPT_888139682" />
  <CARDNAME text="SILVERGILL_ADEPT" />
  <TITLE>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Silvergill Adept]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Expert d’Ouidargent]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Perito Branquia Plateada]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Meister der Silberkiemen]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Esperto della Branchiargentata]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[銀エラの達人]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[Silvergill Adept]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Среброжаберный Адепт]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Adepto Prateobrânquio]]></LOCALISED_TEXT>
  </TITLE>
  <MULTIVERSEID value="888139682" />
  <ARTID value="A888139682" />
  <ARTIST name="Matt Cavotta" />
  <CASTING_COST cost="{1}{U}" />
  <FLAVOURTEXT>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[“I bring baubles of lore, lost secrets seined from the listening waves.”]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[« J’apporte des babioles de savoir, des secrets perdus flottés par les vagues. »]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[“Traigo baratijas de sabiduría, secretos perdidos recuperados por las olas.”]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[„Ich bringe euch Luftblasen voller Wissen, verlorengegangene Geheimnisse, die ich aus den alles hörenden Wellen herausgefischt habe.”]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[“Vi porto ninnoli della tradizione, segreti perduti pescati tra le onde in ascolto.”]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[「私は波の音を聞き、そこから失われた秘密の知識の欠片を手に入れるのだ。」]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[“I bring baubles of lore, lost secrets seined from the listening waves.”]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[“Я приношу обрывки преданий утерянные тайны, выловленные во всевнемлющих волнах”.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[“Eu trago miudezas repletas de sabedoria, segredos perdidos pescados das ondas atentas.”]]></LOCALISED_TEXT>
  </FLAVOURTEXT>
  <TYPE metaname="Creature" />
  <SUB_TYPE metaname="Merfolk" />
  <SUB_TYPE metaname="Wizard" />
  <EXPANSION value="DPI" />
  <RARITY metaname="U" />
  <POWER value="2" />
  <TOUGHNESS value="1" />
  <STATIC_ABILITY active_zone="ZONE_ANY">
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[As an additional cost to cast Silvergill Adept, reveal a Merfolk card from your hand or pay {3}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[En tant que coût supplémentaire pour jouer l’Expert d’Ouidargent, révélez une carte d’ondin de votre main ou payez {3}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Como coste adicional para jugar el Perito Branquia Plateada, muestra una carta de Tritón de tu mano o paga {3}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Zeige als zusätzliche Kosten, um den Meister der Silberkiemen zu spielen, eine Meervolkkarte von deiner Hand offen vor oder bezahle {3}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Come costo addizionale per lanciare l’Esperto della Branchiargentata, rivela una carta Tritone dalla tua mano o paga {3}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[銀エラの達人をプレイするための追加コストとして、あなたの手札にあるマーフォーク・カードを1枚公開するか{3}を支払う。]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[As an additional cost to cast Silvergill Adept, reveal a Merfolk card from your hand or pay {3}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[В качестве дополнительной стоимости разыгрывания Среброжаберного Адепта покажите карту Мерфолка из вашей руки или заплатите {3}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Como custo adicional para jogar Adepto Prateobrânquio, revele um card de Tritão da sua mão ou pague {3}.]]></LOCALISED_TEXT>
    <CONTINUOUS_ACTION layer="8">
    if EffectSource() ~= nil then
       local filter = ClearFilter()
       filter:Add( FE_SUBTYPE, OP_IS, CREATURE_TYPE_MERFOLK )
       filter:Add (FE_CARD_INSTANCE, OP_NOT, EffectSource() )
       filter:SetZone( ZONE_HAND, EffectController() )
       local total = filter:Count()
       local characteristics = EffectSource():GetCurrentCharacteristics()
       if total &gt; 0 then
          characteristics:GrantAbility(1)
       else
          characteristics:GrantAbility(2)
       end
    end
    </CONTINUOUS_ACTION>
  </STATIC_ABILITY>
  <UTILITY_ABILITY resource_id="1" qualifier="Additional">
    <COST type="Reveal" definition="0" compartment="1" query_tag="CARD_QUERY_CHOOSE_CARD_TO_REVEAL" item_count="1" />
    <COST_DEFINITION id="0">
    local filter = ClearFilter()
    filter:Add( FE_SUBTYPE, OP_IS, CREATURE_TYPE_MERFOLK )
    filter:Add (FE_CARD_INSTANCE, OP_NOT, EffectSource() )
    filter:SetZone( ZONE_HAND, EffectController() )
    </COST_DEFINITION>
  </UTILITY_ABILITY>
  <UTILITY_ABILITY resource_id="2" qualifier="Additional">
    <COST mana_cost="{3}" type="Mana" />
  </UTILITY_ABILITY>
  <TRIGGERED_ABILITY>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[When Silvergill Adept enters the battlefield, draw a card.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Quand l’Expert d’Ouidargent arrive en jeu, piochez une carte.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Cuando el Perito Branquia Plateada entre en juego, roba una carta.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Wenn der Meister der Silberkiemen ins Spiel kommt, ziehe eine Karte.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Quando l’Esperto della Branchiargentata entra nel campo di battaglia, pesca una carta.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[銀エラの達人が場に出たとき、カードを1枚引く。]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[When Silvergill Adept enters the battlefield, draw a card.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Когда Среброжаберный Адепт входит в игру, возьмите карту.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Quando Adepto Prateobrânquio entrar em jogo, compre um card.]]></LOCALISED_TEXT>
    <TRIGGER value="ZONECHANGE_END" simple_qualifier="self" to_zone="ZONE_BATTLEFIELD" />
    <RESOLUTION_TIME_ACTION>
    EffectController():DrawCards(1)
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>
  <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>
User avatar
kevlahnota
Programmer
 
Posts: 825
Joined: 19 Jul 2010, 17:45
Location: Philippines
Has thanked: 14 times
Been thanked: 264 times

Re: Selectable additional costs

Postby thefiremind » 18 Jul 2013, 22:52

Even if it's not selectable I like your idea. :) I'll test it tomorrow.

EDIT: It works great! I'm using it for Goldmeadow Stalwart. Here's my code, I made it a little bit shorter:
Code: Select all
  <STATIC_ABILITY active_zone="ZONE_ANY">
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[As an additional cost to cast Goldmeadow Stalwart, reveal a Kithkin card from your hand or pay {3}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[En tant que coût supplémentaire pour jouer l’Orprairien vigoureux, révélez une carte de sangami de votre main ou payez {3}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Como coste adicional para jugar el Valiente de Pradera Dorada, muestra una carta de Kithkin de tu mano o paga {3}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Zeige als zusätzliche Kosten, um den Unverzagten Goldwiesler zu spielen, eine Kithkinkarte von deiner Hand offen vor oder bezahle {3}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Come costo addizionale per lanciare l’Impavido della Prateria Dorata, rivela una carta Kithkin dalla tua mano o paga {3}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[ゴールドメドウの重鎮をプレイするための追加コストとして、あなたの手札にあるキスキン・カードを1枚公開するか{3}を支払う。]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[As an additional cost to cast Goldmeadow Stalwart, reveal a Kithkin card from your hand or pay {3}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[В качестве дополнительной стоимости разыгрывания Отважного Золотолужца покажите карту Кискена из вашей руки или заплатите {3}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Como custo adicional para jogar Defensor de Prado Dourado, revele um card de Kithkin da sua mão ou pague {3}.]]></LOCALISED_TEXT>
    <CONTINUOUS_ACTION layer="8">
    if EffectSource() ~= nil then
       local filter = ClearFilter()
       filter:Add(FE_SUBTYPE, OP_IS, CREATURE_TYPE_KITHKIN)
       filter:Add( FE_CARD_INSTANCE, OP_NOT, EffectSource() )
       filter:SetZone( ZONE_HAND, EffectController() )
       EffectSource():GetCurrentCharacteristics():GrantAbility( filter:CountStopAt(1) )
    end
    </CONTINUOUS_ACTION>
  </STATIC_ABILITY>
  <UTILITY_ABILITY resource_id="0" qualifier="Additional">
    <COST mana_cost="{3}" type="Mana" />
  </UTILITY_ABILITY>
  <UTILITY_ABILITY resource_id="1" qualifier="Additional">
    <COST type="Reveal" definition="0" compartment="1" query_tag="CARD_QUERY_CHOOSE_CARD_TO_REVEAL" item_count="1" />
    <COST_DEFINITION id="0">
    local filter = ClearFilter()
    filter:Add(FE_SUBTYPE, OP_IS, CREATURE_TYPE_KITHKIN)
    filter:Add( FE_CARD_INSTANCE, OP_NOT, EffectSource() )
    filter:SetZone( ZONE_HAND, EffectController() )
    </COST_DEFINITION>
  </UTILITY_ABILITY>
< 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 42 guests


Who is online

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

Login Form