Board index
Programs with AI or Rules Enforcement
Magic: The Gathering - Duels of the Planeswalkers
Programming Talk



Help with "Jund Charm"
Moderator: CCGHQ Admins
Help with "Jund Charm"
by 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 :
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 ?
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 > 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>
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 ?
Re: Help with "Jund Charm"
by 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"
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"
Just getting started: Xander9009's DotP 2014 Community Wad
Need a deck builder: DotP 2014 Deck Builder
Problems Modding: DotP 2014 Frequent Modding Mistakes
Need a deck builder: DotP 2014 Deck Builder
Problems Modding: DotP 2014 Frequent Modding Mistakes
- RiiakShiNal
- Programmer
- Posts: 2188
- Joined: 16 May 2011, 21:37
- Has thanked: 75 times
- Been thanked: 497 times
Re: Help with "Jund Charm"
by 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
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 > 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>
Re: Help with "Jund Charm"
by 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.
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.
Just getting started: Xander9009's DotP 2014 Community Wad
Need a deck builder: DotP 2014 Deck Builder
Problems Modding: DotP 2014 Frequent Modding Mistakes
Need a deck builder: DotP 2014 Deck Builder
Problems Modding: DotP 2014 Frequent Modding Mistakes
- RiiakShiNal
- Programmer
- Posts: 2188
- Joined: 16 May 2011, 21:37
- Has thanked: 75 times
- Been thanked: 497 times
Re: Help with "Jund Charm"
by 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
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 > 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 > 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>
Re: Help with "Jund Charm"
by 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.
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...
Currently busy with life...
-
thefiremind - Programmer
- Posts: 3515
- Joined: 07 Nov 2011, 10:55
- Has thanked: 118 times
- Been thanked: 722 times
Re: Help with "Jund Charm"
by 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.
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.
Re: Help with "Jund Charm"
by 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...
Currently busy with life...
-
thefiremind - Programmer
- Posts: 3515
- Joined: 07 Nov 2011, 10:55
- Has thanked: 118 times
- Been thanked: 722 times
8 posts
• Page 1 of 1
Who is online
Users browsing this forum: No registered users and 4 guests