Board index Programs with AI or Rules Enforcement Magic: The Gathering - Duels of the Planeswalkers Programming Talk
Selectable additional costs
Moderator: CCGHQ Admins
Selectable additional costs
by 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 ". While kevlahnota's implementation in DotP2013 was OK most of the times (increase cost by 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 .
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 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 " 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.
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 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 " 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...
Currently busy with life...
-
thefiremind - Programmer
- Posts: 3515
- Joined: 07 Nov 2011, 10:55
- Has thanked: 118 times
- Been thanked: 721 times
Re: Selectable additional costs
by 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 > 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>
-
kevlahnota - Programmer
- Posts: 825
- Joined: 19 Jul 2010, 17:45
- Location: Philippines
- Has thanked: 14 times
- Been thanked: 264 times
Re: Selectable additional costs
by 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:
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...
Currently busy with life...
-
thefiremind - Programmer
- Posts: 3515
- Joined: 07 Nov 2011, 10:55
- Has thanked: 118 times
- Been thanked: 721 times
3 posts
• Page 1 of 1
Who is online
Users browsing this forum: No registered users and 31 guests