It is currently 25 Apr 2024, 10:12
   
Text Size

Help with "Jund Charm"

Moderator: CCGHQ Admins

Help with "Jund Charm"

Postby Emashzed » 24 Aug 2012, 19:14

Trying to make this pesky little multichoice instant, which seemed rather fun, but I'm having trouble with the chosen effect resolution.
I tried several strategies and ended up with this :

Code: Select all
<?xml version='1.0'?>
<CARD_V2>
  <FILENAME text="JUND_CHARM_137900" />
  <CARDNAME text="JUND_CHARM" />
  <TITLE>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Jund Charm]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Monile di Jund]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Amulett aus Jund]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Charme de Jund]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Amuleto jundiano]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[ジャンドの魔除け]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[Jund Charm]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Талисман Джанда]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Medalhão de Jund]]></LOCALISED_TEXT>
  </TITLE>
  <MULTIVERSEID value="137900" />
  <ARTID value="888137900" />
  <ARTIST name="Brandon Kitkouski" />
  <CASTING_COST cost="{B}{R}{G}" />
  <FLAVOURTEXT>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Jund pulses with raw energy, waiting for shamans to shape it into useful form.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Jund pulsa di energia grezza, in attesa che gli sciamani la modellino in una forma utile.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Jund pulsiert vor roher Energie, die nur darauf wartet, von Schamanen in nützliche Form gebracht zu werden.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Jund vibre d'énergie brute qui attend que les shamanes lui donnent une forme utilisable.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Jund late con energía vital, esperando que los chamanes le den una forma útil.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[ジャンドの素の魔力の波動は、シャーマンに有効な形に作られることを待ち望んでいる。]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[Jund pulses with raw energy, waiting for shamans to shape it into useful form.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Джанд пульсирует сырой энергией в ожидании, что шаманы облекут ее в полезную форму.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Jund pulsa com energia crua, aguardando que os xamãs a moldem em formas úteis.]]></LOCALISED_TEXT>
  </FLAVOURTEXT>
  <TYPE metaname="Instant" />
  <EXPANSION value="DPG" />
  <RARITY metaname="U" />
  <SPELL_ABILITY>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Choose one — Exile all cards from target player's graveyard; or Jund Charm deals 2 damage to each creature; or put two +1/+1 counters on target creature.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Scegli uno — Rimuovi dal gioco il cimitero di un giocatore bersaglio; oppure il Monile di Jund infligge 2 danni a ogni creatura; oppure metti due segnalini +1/+1 su una creatura bersaglio.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Bestimme eines — Entferne den Friedhof eines Spielers deiner Wahl ganz aus dem Spiel; oder das Amulett aus Jund fügt jeder Kreatur 2 Schadenspunkte zu; oder lege zwei +1/+1-Marken auf eine Kreatur deiner Wahl.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Choisissez l'un — Retirez de la partie le cimetière du joueur ciblé ; ou le Charme de Jund inflige 2 blessures à chaque créature ; ou mettez deux marqueurs +1/+1 sur la créature ciblée.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Elige uno: Remueve del juego el cementerio del jugador objetivo; o el Amuleto jundiano le hace 2 puntos de daño a cada criatura; o pon dos contadores +1/+1 sobre la criatura objetivo.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[以下の3つから1つを選ぶ。「プレイヤー1人を対象とし、そのプレイヤーの墓地をゲームから取り除く。」「ジャンドの魔除けは各クリーチャーに、それぞれ2点のダメージを与える。」「クリーチャー1体を対象とし、それの上に+1/+1カウンターを2個置く。」]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[Choose one — Exile all cards from target player's graveyard; or Jund Charm deals 2 damage to each creature; or put two +1/+1 counters on target creature.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Выберите одно — удалите кладбище целевого игрока из игры; или Талисман Джанда наносит 2 повреждения каждому существу; или положите два жетона +1/+1 на целевое существо.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Escolha um — Remova do jogo o cemitério do jogador alvo; ou Medalhão de Jund causa 2 pontos de dano a cada criatura; ou coloque dois marcadores +1/+1 na criatura alvo.]]></LOCALISED_TEXT>
    <PLAY_TIME_ACTION>
    local player = EffectController()
    if player ~= nil then
        player:BeginNewMultipleChoice()   
        player:AddMultipleChoiceAnswer( "CARD_QUERY_OPTION_EXILE_ALL_CARDS_FROM_TARGET_PLAYER_GRAVEYARD" )   
        player:AddMultipleChoiceAnswer( "CARD_QUERY_OPTION_JUND_CHARM_DEALS_2_DAMAGE_TO_EACH_CREATURE" )   
        player:AddMultipleChoiceAnswer( "CARD_QUERY_OPTION_PUT_TWO_1_1_COUNTERS_ON_TARGET_CREATURE" )   
        player:AskMultipleChoiceQuestion( "CARD_QUERY_MC_CHOOSE_ONE" )
    end
    </PLAY_TIME_ACTION>
    <RESOLUTION_TIME_ACTION>
    local decision = Object():GetMultipleChoiceResult()
    ObjectDC():Set_Int( 0, decision + 1 )
    </RESOLUTION_TIME_ACTION>
  </SPELL_ABILITY>
  <TRIGGERED_ABILITY layer="0" auto_skip="1" zone="any" >
    <TRIGGER value="SPELL_RESOLVED">
    return ObjectDC():Get_Int(0) == 1   
    </TRIGGER>
    <TARGET_DEFINITION id="0">
    local filter = Object():GetFilter()
    filter:Clear()
    filter:SetFilterType( FILTER_TYPE_PLAYERS )
    filter:SetHint( HINT_ENEMY_ONLY, EffectController() )
    </TARGET_DEFINITION>
    <TARGET_DETERMINATION>
    return AtLeastOneTargetFromDefinition(0)
    </TARGET_DETERMINATION>
    <PLAY_TIME_ACTION target_choosing="1">
    EffectController():ChooseTarget( 0, "CARD_QUERY_CHOOSE_PLAYER_TO_EXILE_GRAVEYARD", EffectDC():Make_Targets(0) )
    </PLAY_TIME_ACTION>
    <RESOLUTION_TIME_ACTION>
    local target_player = EffectDC():Get_Targets(0):Get_PlayerPtr(0)
    if target_player ~= nil then
       local filter = Object():GetFilter()
       filter:Clear()
       filter:SetPlayer( target_player )
       filter:SetZone( ZONE_GRAVEYARD )
      local count = filter:EvaluateObjects()
      if (count &gt; 0) then
         for j=0,count-1 do
            local card = filter:GetNthEvaluatedObject( j )
            if (card ~= nil) then
               card:RemoveFromGame()
            end
         end
      end
    end
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>
  <TRIGGERED_ABILITY layer="0" auto_skip="1" zone="any" >
    <TRIGGER value="SPELL_RESOLVED">
    return ObjectDC():Get_Int(0) == 2   
    </TRIGGER>
    <FILTER>
    return (FilteredCard() ~= nil and
    FilteredCard():GetCardType():Test( CARD_TYPE_CREATURE ) ~= 0 and
    FilteredCard():GetZone() == (ZONE_IN_PLAY))
    </FILTER>
    <RESOLUTION_TIME_ACTION>
    local source = EffectSource()
    if source == nil then
      source = Object()
    end
    if (FilteredCard() ~= nil) then   
       FilteredCard():DealDamage( 2 , source ) 
    end
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>
  <TRIGGERED_ABILITY layer="0" auto_skip="1" zone="any" >
    <TRIGGER value="SPELL_RESOLVED">
    return ObjectDC():Get_Int(0) == 3
    </TRIGGER>
    <TARGET_DEFINITION id="0">
    local filter = Object():GetFilter()
    filter:Clear()
    filter:AddCardType( CARD_TYPE_CREATURE )
    filter:SetZone( ZONE_IN_PLAY )
    filter:SetHint( HINT_ENEMY_ONLY, EffectController() )
    </TARGET_DEFINITION>
    <TARGET_DETERMINATION>
    return AtLeastOneTargetFromDefinition(0)
    </TARGET_DETERMINATION>
    <PLAY_TIME_ACTION target_choosing="1">
    EffectController():ChooseTarget( 0, "CARD_QUERY_CHOOSE_CREATURE_2_MINUS_1_1_COUNTERS", EffectDC():Make_Targets(0) )
    </PLAY_TIME_ACTION>
    <RESOLUTION_TIME_ACTION>
    local target = EffectDC():Get_Targets(0):Get_CardPtr(0)
    if target ~= nil then
       target:AddCounters( MTG():MinusOneMinusOneCounters(), 2 )
    end
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>
</CARD_V2>
I do get the multichoice popup, obviously, but the chosen effect never resolves.
SPELL_RESOLVED is still an existing trigger as far as I know, and ObjectDC():Set/Get_Int should be a safe way to store the chosen effect, but nothing works...
Any clue ?
Emashzed
 
Posts: 62
Joined: 02 Feb 2011, 15:19
Has thanked: 15 times
Been thanked: 30 times

Re: Help with "Jund Charm"

Postby RiiakShiNal » 24 Aug 2012, 20:43

I'm going to assume that you are trying to code this for DotP 2013 (if you are trying to code this for a different version then please specify).

Two issues:
1 - The triggers should also check to make sure that they only trigger on for that card (SelfTriggered()).
2 - On the triggered abilities it should be active_zone="ZONE_ANY" not zone="any"
RiiakShiNal
Programmer
 
Posts: 2185
Joined: 16 May 2011, 21:37
Has thanked: 75 times
Been thanked: 497 times

Re: Help with "Jund Charm"

Postby Emashzed » 24 Aug 2012, 21:05

Yes, I'm indeed trying to code the card for Dotp2013.
Thanks a lot for the tips.

The card effects still don't resolve though :(

EDIT: Also tried : <TRIGGERED_ABILITY internal="1" filter_zone="ZONE_ANY"> just in case


Code: Select all
<?xml version='1.0'?>
<CARD_V2>
  <FILENAME text="JUND_CHARM_137900" />
  <CARDNAME text="JUND_CHARM" />
  <TITLE>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Jund Charm]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Monile di Jund]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Amulett aus Jund]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Charme de Jund]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Amuleto jundiano]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[ジャンドの魔除け]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[Jund Charm]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Талисман Джанда]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Medalhão de Jund]]></LOCALISED_TEXT>
  </TITLE>
  <MULTIVERSEID value="137900" />
  <ARTID value="888137900" />
  <ARTIST name="Brandon Kitkouski" />
  <CASTING_COST cost="{B}{R}{G}" />
  <FLAVOURTEXT>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Jund pulses with raw energy, waiting for shamans to shape it into useful form.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Jund pulsa di energia grezza, in attesa che gli sciamani la modellino in una forma utile.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Jund pulsiert vor roher Energie, die nur darauf wartet, von Schamanen in nützliche Form gebracht zu werden.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Jund vibre d'énergie brute qui attend que les shamanes lui donnent une forme utilisable.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Jund late con energía vital, esperando que los chamanes le den una forma útil.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[ジャンドの素の魔力の波動は、シャーマンに有効な形に作られることを待ち望んでいる。]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[Jund pulses with raw energy, waiting for shamans to shape it into useful form.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Джанд пульсирует сырой энергией в ожидании, что шаманы облекут ее в полезную форму.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Jund pulsa com energia crua, aguardando que os xamãs a moldem em formas úteis.]]></LOCALISED_TEXT>
  </FLAVOURTEXT>
  <TYPE metaname="Instant" />
  <EXPANSION value="DPG" />
  <RARITY metaname="U" />
  <SPELL_ABILITY>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Choose one — Exile all cards from target player's graveyard; or Jund Charm deals 2 damage to each creature; or put two +1/+1 counters on target creature.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Scegli uno — Rimuovi dal gioco il cimitero di un giocatore bersaglio; oppure il Monile di Jund infligge 2 danni a ogni creatura; oppure metti due segnalini +1/+1 su una creatura bersaglio.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Bestimme eines — Entferne den Friedhof eines Spielers deiner Wahl ganz aus dem Spiel; oder das Amulett aus Jund fügt jeder Kreatur 2 Schadenspunkte zu; oder lege zwei +1/+1-Marken auf eine Kreatur deiner Wahl.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Choisissez l'un — Retirez de la partie le cimetière du joueur ciblé ; ou le Charme de Jund inflige 2 blessures à chaque créature ; ou mettez deux marqueurs +1/+1 sur la créature ciblée.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Elige uno: Remueve del juego el cementerio del jugador objetivo; o el Amuleto jundiano le hace 2 puntos de daño a cada criatura; o pon dos contadores +1/+1 sobre la criatura objetivo.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[以下の3つから1つを選ぶ。「プレイヤー1人を対象とし、そのプレイヤーの墓地をゲームから取り除く。」「ジャンドの魔除けは各クリーチャーに、それぞれ2点のダメージを与える。」「クリーチャー1体を対象とし、それの上に+1/+1カウンターを2個置く。」]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[Choose one — Exile all cards from target player's graveyard; or Jund Charm deals 2 damage to each creature; or put two +1/+1 counters on target creature.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Выберите одно — удалите кладбище целевого игрока из игры; или Талисман Джанда наносит 2 повреждения каждому существу; или положите два жетона +1/+1 на целевое существо.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Escolha um — Remova do jogo o cemitério do jogador alvo; ou Medalhão de Jund causa 2 pontos de dano a cada criatura; ou coloque dois marcadores +1/+1 na criatura alvo.]]></LOCALISED_TEXT>
    <PLAY_TIME_ACTION>
    local player = EffectController()
    if player ~= nil then
        player:BeginNewMultipleChoice()   
        player:AddMultipleChoiceAnswer( "CARD_QUERY_OPTION_EXILE_ALL_CARDS_FROM_TARGET_PLAYER_GRAVEYARD" )   
        player:AddMultipleChoiceAnswer( "CARD_QUERY_OPTION_JUND_CHARM_DEALS_2_DAMAGE_TO_EACH_CREATURE" )   
        player:AddMultipleChoiceAnswer( "CARD_QUERY_OPTION_PUT_TWO_1_1_COUNTERS_ON_TARGET_CREATURE" )   
        player:AskMultipleChoiceQuestion( "CARD_QUERY_MC_CHOOSE_ONE" )
    end
    </PLAY_TIME_ACTION>
    <RESOLUTION_TIME_ACTION>
    local decision = Object():GetMultipleChoiceResult()
    ObjectDC():Set_Int( 0, decision + 1 )
    </RESOLUTION_TIME_ACTION>
  </SPELL_ABILITY>
  <TRIGGERED_ABILITY layer="0" auto_skip="1" zone="ZONE_ANY" >
    <TRIGGER value="SPELL_RESOLVED">
    return SelfTriggered() and ObjectDC():Get_Int(0) == 1   
    </TRIGGER>
    <TARGET_DEFINITION id="0">
    local filter = Object():GetFilter()
    filter:Clear()
    filter:SetFilterType( FILTER_TYPE_PLAYERS )
    filter:SetHint( HINT_ENEMY_ONLY, EffectController() )
    </TARGET_DEFINITION>
    <TARGET_DETERMINATION>
    return AtLeastOneTargetFromDefinition(0)
    </TARGET_DETERMINATION>
    <PLAY_TIME_ACTION target_choosing="1">
    EffectController():ChooseTarget( 0, "CARD_QUERY_CHOOSE_PLAYER_TO_EXILE_GRAVEYARD", EffectDC():Make_Targets(0) )
    </PLAY_TIME_ACTION>
    <RESOLUTION_TIME_ACTION>
    local target_player = EffectDC():Get_Targets(0):Get_PlayerPtr(0)
    if target_player ~= nil then
       local filter = Object():GetFilter()
       filter:Clear()
       filter:SetPlayer( target_player )
       filter:SetZone( ZONE_GRAVEYARD )
      local count = filter:EvaluateObjects()
      if (count &gt; 0) then
         for j=0,count-1 do
            local card = filter:GetNthEvaluatedObject( j )
            if (card ~= nil) then
               card:RemoveFromGame()
            end
         end
      end
    end
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>
  <TRIGGERED_ABILITY layer="0" auto_skip="1" zone="ZONE_ANY" >
    <TRIGGER value="SPELL_RESOLVED">
    return SelfTriggered() and ObjectDC():Get_Int(0) == 2   
    </TRIGGER>
    <FILTER>
    return (FilteredCard() ~= nil and
    FilteredCard():GetCardType():Test( CARD_TYPE_CREATURE ) ~= 0 and
    FilteredCard():GetZone() == (ZONE_IN_PLAY))
    </FILTER>
    <RESOLUTION_TIME_ACTION>
    local source = EffectSource()
    if source == nil then
      source = Object()
    end
    if (FilteredCard() ~= nil) then   
       FilteredCard():DealDamage( 2 , source ) 
    end
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>
  <TRIGGERED_ABILITY layer="0" auto_skip="1" zone="ZONE_ANY" >
    <TRIGGER value="SPELL_RESOLVED">
    return SelfTriggered() and ObjectDC():Get_Int(0) == 3
    </TRIGGER>
    <TARGET_DEFINITION id="0">
    local filter = Object():GetFilter()
    filter:Clear()
    filter:AddCardType( CARD_TYPE_CREATURE )
    filter:SetZone( ZONE_IN_PLAY )
    filter:SetHint( HINT_ENEMY_ONLY, EffectController() )
    </TARGET_DEFINITION>
    <TARGET_DETERMINATION>
    return AtLeastOneTargetFromDefinition(0)
    </TARGET_DETERMINATION>
    <PLAY_TIME_ACTION target_choosing="1">
    EffectController():ChooseTarget( 0, "CARD_QUERY_CHOOSE_CREATURE_2_MINUS_1_1_COUNTERS", EffectDC():Make_Targets(0) )
    </PLAY_TIME_ACTION>
    <RESOLUTION_TIME_ACTION>
    local target = EffectDC():Get_Targets(0):Get_CardPtr(0)
    if target ~= nil then
       target:AddCounters( MTG():MinusOneMinusOneCounters(), 2 )
    end
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>
</CARD_V2>
Emashzed
 
Posts: 62
Joined: 02 Feb 2011, 15:19
Has thanked: 15 times
Been thanked: 30 times

Re: Help with "Jund Charm"

Postby RiiakShiNal » 24 Aug 2012, 22:28

Ah, it's because the card is going to the graveyard (which clears the ObjectDC) before the triggers would fire.

So you have two options:
1 - Make ObjectDC undeletable with RetainDataChest.
2 - Use CreateDelayedTrigger to set the appropriate trigger during the RESOLUTION_TIME_ACTION of the spell ability. This would eliminate the need to use ObjectDC, but would require changing the triggers somewhat so that they have resource_id's and they only trigger once (<CLEANUP fire_once="1" />). Though you would be able to get rid of the active_zone as well.
RiiakShiNal
Programmer
 
Posts: 2185
Joined: 16 May 2011, 21:37
Has thanked: 75 times
Been thanked: 497 times

Re: Help with "Jund Charm"

Postby Emashzed » 24 Aug 2012, 23:56

Thanks a lot for the help RiiakShiNal, I learnt valuable things thanks to you.

I did manage to make the card work but I did it the "hard" way... Didn't manage to make either option work.

Oh well :)

Code: Select all
<?xml version='1.0'?>
<CARD_V2>
  <FILENAME text="JUND_CHARM_137900" />
  <CARDNAME text="JUND_CHARM" />
  <TITLE>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Jund Charm]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Monile di Jund]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Amulett aus Jund]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Charme de Jund]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Amuleto jundiano]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[ジャンドの魔除け]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[Jund Charm]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Талисман Джанда]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Medalhão de Jund]]></LOCALISED_TEXT>
  </TITLE>
  <MULTIVERSEID value="137900" />
  <ARTID value="888137900" />
  <ARTIST name="Brandon Kitkouski" />
  <CASTING_COST cost="{B}{R}{G}" />
  <FLAVOURTEXT>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Jund pulses with raw energy, waiting for shamans to shape it into useful form.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Jund pulsa di energia grezza, in attesa che gli sciamani la modellino in una forma utile.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Jund pulsiert vor roher Energie, die nur darauf wartet, von Schamanen in nützliche Form gebracht zu werden.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Jund vibre d'énergie brute qui attend que les shamanes lui donnent une forme utilisable.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Jund late con energía vital, esperando que los chamanes le den una forma útil.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[ジャンドの素の魔力の波動は、シャーマンに有効な形に作られることを待ち望んでいる。]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[Jund pulses with raw energy, waiting for shamans to shape it into useful form.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Джанд пульсирует сырой энергией в ожидании, что шаманы облекут ее в полезную форму.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Jund pulsa com energia crua, aguardando que os xamãs a moldem em formas úteis.]]></LOCALISED_TEXT>
  </FLAVOURTEXT>
  <TYPE metaname="Instant" />
  <EXPANSION value="DPG" />
  <RARITY metaname="U" />
  <SPELL_ABILITY>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Choose one — Exile all cards from target player's graveyard; or Jund Charm deals 2 damage to each creature; or put two +1/+1 counters on target creature.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Scegli uno — Rimuovi dal gioco il cimitero di un giocatore bersaglio; oppure il Monile di Jund infligge 2 danni a ogni creatura; oppure metti due segnalini +1/+1 su una creatura bersaglio.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Bestimme eines — Entferne den Friedhof eines Spielers deiner Wahl ganz aus dem Spiel; oder das Amulett aus Jund fügt jeder Kreatur 2 Schadenspunkte zu; oder lege zwei +1/+1-Marken auf eine Kreatur deiner Wahl.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Choisissez l'un — Retirez de la partie le cimetière du joueur ciblé ; ou le Charme de Jund inflige 2 blessures à chaque créature ; ou mettez deux marqueurs +1/+1 sur la créature ciblée.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Elige uno: Remueve del juego el cementerio del jugador objetivo; o el Amuleto jundiano le hace 2 puntos de daño a cada criatura; o pon dos contadores +1/+1 sobre la criatura objetivo.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[以下の3つから1つを選ぶ。「プレイヤー1人を対象とし、そのプレイヤーの墓地をゲームから取り除く。」「ジャンドの魔除けは各クリーチャーに、それぞれ2点のダメージを与える。」「クリーチャー1体を対象とし、それの上に+1/+1カウンターを2個置く。」]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[Choose one — Exile all cards from target player's graveyard; or Jund Charm deals 2 damage to each creature; or put two +1/+1 counters on target creature.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Выберите одно — удалите кладбище целевого игрока из игры; или Талисман Джанда наносит 2 повреждения каждому существу; или положите два жетона +1/+1 на целевое существо.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Escolha um — Remova do jogo o cemitério do jogador alvo; ou Medalhão de Jund causa 2 pontos de dano a cada criatura; ou coloque dois marcadores +1/+1 na criatura alvo.]]></LOCALISED_TEXT>
    <TARGET_DEFINITION id="0">
    local filter = Object():GetFilter()
    filter:Clear()
    filter:SetFilterType( FILTER_TYPE_PLAYERS )
    </TARGET_DEFINITION>
    <TARGET_DEFINITION id="1">
    local filter = Object():GetFilter()
    filter:Clear()
    filter:AddCardType( CARD_TYPE_CREATURE )
    filter:SetZone( ZONE_IN_PLAY )
    filter:SetHint( HINT_ENEMY_ONLY, EffectController() )
    </TARGET_DEFINITION>
    <PLAY_TIME_ACTION>
    local player = EffectController()
    if player ~= nil then
        player:BeginNewMultipleChoice()
        player:AddMultipleChoiceAnswer( "CARD_QUERY_OPTION_EXILE_ALL_CARDS_FROM_TARGET_PLAYER_GRAVEYARD" )
        player:AddMultipleChoiceAnswer( "CARD_QUERY_OPTION_JUND_CHARM_DEALS_2_DAMAGE_TO_EACH_CREATURE" )
        player:AddMultipleChoiceAnswer( "CARD_QUERY_OPTION_PUT_TWO_1_1_COUNTERS_ON_TARGET_CREATURE" )
        player:AskMultipleChoiceQuestion( "CARD_QUERY_MC_CHOOSE_ONE" )
    end
    </PLAY_TIME_ACTION>
    <PLAY_TIME_ACTION>
    local decision = Object():GetMultipleChoiceResult()
    if decision == 0 then
       EffectController():ChooseTarget( 0, "CARD_QUERY_CHOOSE_PLAYER_TO_EXILE_GRAVEYARD", EffectDC():Make_Targets(0) )
    elseif decision == 2 then
       EffectController():ChooseTarget( 1, "CARD_QUERY_CHOOSE_CREATURE_2_PLUS1_PLUS1_COUNTERS", EffectDC():Make_Targets(0) )
    end
    </PLAY_TIME_ACTION>
    <RESOLUTION_TIME_ACTION>
    local decision = Object():GetMultipleChoiceResult()
    if decision == 0 then
        local target_player = EffectDC():Get_Targets(0):Get_PlayerPtr(0)
        if target_player ~= nil then
           local filter = Object():GetFilter()
           filter:Clear()
           filter:SetPlayer( target_player )
           filter:SetZone( ZONE_GRAVEYARD )
           local count = filter:EvaluateObjects()
           if (count &gt; 0) then
              for j=0,count-1 do
                 local card = filter:GetNthEvaluatedObject( j )
                 if (card ~= nil) then
                    card:RemoveFromGame()
                 end
              end
           end
        end
    elseif decision == 1 then
        local filter = Object():GetFilter()
        local source = EffectSource()
        filter:Clear()
        filter:AddCardType( CARD_TYPE_CREATURE )
        filter:SetZone( ZONE_IN_PLAY )
        local count = filter:EvaluateObjects()
        if (count &gt; 0) then
           for j=0,count-1 do
              local target_creature = filter:GetNthEvaluatedObject( j )
              if (target_creature ~= nil) then
                  target_creature:DealDamage(2, source) 
              end
           end
        end
    elseif decision == 2 then
        local target = EffectDC():Get_Targets(0):Get_CardPtr(0)
        if target ~= nil then
           target:AddCounters( MTG():PlusOnePlusOneCounters(), 2 )
        end
    end
    </RESOLUTION_TIME_ACTION>
  </SPELL_ABILITY>
</CARD_V2>
Emashzed
 
Posts: 62
Joined: 02 Feb 2011, 15:19
Has thanked: 15 times
Been thanked: 30 times

Re: Help with "Jund Charm"

Postby thefiremind » 25 Aug 2012, 09:55

This card is even harder to make if you want to follow the rules closely: you shouldn't be able to select a mode for which you don't have legal targets. If you look at the code for Invoke the Firemind in the Izzet guild deck, you see that it checks for a legal target before offering the targetted option. This is easy when you have 2 options, but with 3 you would have to consider that the decision numbers for 2nd and 3rd option shift back when one or more of the previous options aren't offered.
Luckily, Umezawa's Jitte has only 1 targetted option so I didn't have this problem when I coded 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: Help with "Jund Charm"

Postby Emashzed » 25 Aug 2012, 12:02

Very good point thefiremind.
Luckily, I think only option 3 can be an illegal choice.
There's always a player's graveyard (even if it's empty), and "each creature" is also valid if there are no creatures in play, right ?
So I really only need to add a check for option 3, which won't mess with the numbering.
Emashzed
 
Posts: 62
Joined: 02 Feb 2011, 15:19
Has thanked: 15 times
Been thanked: 30 times

Re: Help with "Jund Charm"

Postby thefiremind » 25 Aug 2012, 14:06

Well, it's a very rare scenario, but if all players in the game happen to have shroud, you can't use the first option. It should be safe enough to ignore this.
< 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 24 guests


Who is online

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

Login Form