Page 1 of 1

Coding Boros charm [Solved]

PostPosted: 06 Jul 2013, 00:35
by infernalsham
Currently I am working on creating a R/W deck. However I have some trouble with making Boros Charm work properly. If anyone could be so kind to point out what I have done wrong in the code it would be greatly appreciated. Main issues currently are that indestructability and double strike are not applied to permanents and creature respectivly.

Code: Select all
<SPELL_ABILITY>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Choose one — Boros Charm deals 4 damage to target player; or permanents you control are indestructible this turn; or target creature gains double strike until end of turn.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Choisissez l’un — Le Charme de Boros inflige 4 blessures au joueur ciblé ; ou les permanents que vous contrôlez sont indestructibles ce tour-ci ; ou une créature ciblée acquiert la double initiative jusqu’à la fin du tour.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Elige uno: El Amuleto boros hace 4 puntos de daño al jugador objetivo; o los permanentes que controlas son indestructibles este turno; o la criatura objetivo gana la habilidad de dañar dos veces hasta el final del turno.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Bestimme eines — Das Boros-Amulett fügt einem Spieler deiner Wahl 4 Schadenspunkte zu; oder bleibende Karten, die du kontrollierst, sind in diesem Zug unzerstörbar; oder eine Kreatur deiner Wahl erhält Doppelschlag bis zum Ende des Zuges.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Scegli uno — Il Talismano Boros infligge 4 danni a un giocatore bersaglio; oppure i permanenti che controlli sono indistruttibili in questo turno; oppure una creatura bersaglio ha doppio attacco fino alla fine del turno.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[以下の3つから1つを選ぶ。「プレイヤー1人を対象とする。ボロスの魔除けはそのプレイヤーに4点のダメージを与える。」「このターン、あなたがコントロールするパーマネントは破壊されない。」「クリーチャー1体を対象とする。それはターン終了時まで二段攻撃を得る。」]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[하나를 선택한다 — 플레이어 한 명을 목표로 정한다. 보로스 부적은 그 플레이어에게 피해 4점을 입힌다; 또는 당신이 조종하는 지속물들은 이 턴에 파괴될 수 없다; 또는 생물 한 개를 목표로 정한다. 그 생물은 턴종료까지 이단공격 능력을 얻는다.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Выберите одно — Талисман Боросов наносит 4 повреждения целевому игроку; или перманенты под вашим контролем не могут быть уничтожены в этом ходу; или целевое существо получает Двойной удар до конца хода.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Escolha um — Amuleto Boros causa 4 pontos de dano ao jogador alvo; ou as permanentes que você controla são indestrutíveis neste turno; ou a criatura alvo ganha golpe duplo até o final do turno.]]></LOCALISED_TEXT>
   <MODE_SELECT tag="MODE_CHOOSE_ONE">
      <MODE tag="INF_MODE_BOROS_DAMAGE" index="1" />
      <MODE tag="INF_MODE_BOROS_INDESTRUCTABLE" index="2" />
      <MODE tag="INF_MODE_BOROS_DOUBLE_STRIKE" index="3" />
    </MODE_SELECT>
   <TARGET tag="CARD_QUERY_CHOOSE_PLAYER_DEAL_4_DAMAGE" definition="0" compartment="0" mode="1" count="1" />
    <TARGET_DEFINITION id="0">
    local filter = ClearFilter()
   filter:SetFilterType( FILTER_TYPE_PLAYERS )
    </TARGET_DEFINITION>
    <RESOLUTION_TIME_ACTION mode="1" filter_id="0">
    if (FilteredPlayer() ~= nil) then   
       EffectSourceLKI():DealDamageTo( 4, FilteredPlayer() )
    end
    </RESOLUTION_TIME_ACTION>
    <TARGET_DEFINITION id="1">
    local filter = ClearFilter()
    filter:Add( FE_IS_PERMANENT, true )
   filter:Add( FE_CONTROLLER, OP_IS, EffectController())
    </TARGET_DEFINITION>
    <RESOLUTION_TIME_ACTION mode="2">
   <CONTINUOUS_ACTION layer="6" filter_id="1">
    if FilteredCard() ~= nil then
       local characteristics =
      FilteredCard():GetCurrentCharacteristics()
       characteristics:Bool_Set(CHARACTERISTIC_INDESTRUCTIBLE, 1)
    end
    </CONTINUOUS_ACTION>
   <DURATION simple_duration="UntilEOT" />
   </RESOLUTION_TIME_ACTION>
   <TARGET tag="CARD_QUERY_CHOOSE_CREATURE_DOUBLE_STRIKE" definition="2" compartment="2" mode="3" count="1" />
    <TARGET_DEFINITION id="2">
    local filter = ClearFilter()
    filter:Add( FE_TYPE, OP_IS, CARD_TYPE_CREATURE  )
    </TARGET_DEFINITION>
    <RESOLUTION_TIME_ACTION mode="3">
    <CONTINUOUS_ACTION layer="6" filter_id="2">
    if FilteredCard() ~= nil then
       local characteristics =
      FilteredCard():GetCurrentCharacteristics()
       characteristics:Bool_Set( CHARACTERISTIC_DOUBLE_STRIKE, 1 )
    end
    </CONTINUOUS_ACTION>
   <FILTER filter_id="0">
    local filter = ClearFilter()
    filter:Add( FE_TYPE, OP_IS, CARD_TYPE_CREATURE  )
    filter:Add( FE_CONTROLLER, OP_IS, EffectController())
    </FILTER>
    <CONTINUOUS_ACTION layer="6" filter_id="0">
    if FilteredCard() ~= nil then
       local characteristics = FilteredCard():GetCurrentCharacteristics()
       characteristics:Bool_Set( CHARACTERISTIC_DOUBLE_STRIKE, 1 )
    end
    </CONTINUOUS_ACTION>
   <DURATION simple_duration="UntilEOT" />
    </RESOLUTION_TIME_ACTION>
  </SPELL_ABILITY>

Re: Coding Boros charm

PostPosted: 06 Jul 2013, 01:01
by sumomole
Boros Charm | Open
Code: Select all
  <SPELL_ABILITY>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Choose one — Boros Charm deals 4 damage to target player; or permanents you control are indestructible this turn; or target creature gains double strike until end of turn.]]></LOCALISED_TEXT>
    <SFX text="GLOBAL_MAGMA_PLAY" />
    <MODE_SELECT tag="MODE_CHOOSE_ONE">
      <MODE tag="MODE_BOROS_FLAME" index="1" />
      <MODE tag="MODE_BOROS_DEFENSE" index="2" />
      <MODE tag="MODE_BOROS_FURY" index="3" />
    </MODE_SELECT>
    <TARGET tag="CARD_QUERY_CHOOSE_PLAYER_DEAL_4_DAMAGE" definition="0" compartment="0" mode="1" count="1" />
    <TARGET_DEFINITION id="0">
    local filter = ClearFilter()
    filter:SetFilterType( FILTER_TYPE_PLAYERS )
    </TARGET_DEFINITION>
    <RESOLUTION_TIME_ACTION mode="1">
    local target_player = EffectDC():Get_Targets(0):Get_PlayerPtr(0)
    if target_player ~= nil then
       EffectSourceLKI():DealDamageTo( 4, target_player )
    end
    </RESOLUTION_TIME_ACTION>
    <CONTINUOUS_ACTION layer="6" mode="2">
    local filter = ClearFilter()
    filter:Add( FE_IS_PERMANENT, true )
    filter:Add( FE_CONTROLLER, OP_IS, EffectController())
    local numCards = filter:EvaluateObjects()
    for i=0,(numCards-1) do
       local card = filter:GetNthEvaluatedObject(i)
       if card ~= nil then
         local characteristics = card:GetCurrentCharacteristics()
         characteristics:Bool_Set( CHARACTERISTIC_INDESTRUCTIBLE, 1 )
       end
    end
    </CONTINUOUS_ACTION>
    <DURATION simple_duration="UntilEOT" />
    <TARGET tag="CARD_QUERY_CHOOSE_CREATURE_GAIN_DOUBLESTRIKE" definition="1" compartment="1" mode="3" count="1" />
    <TARGET_DEFINITION id="1">
    local filter = ClearFilter()
    filter:Add( FE_TYPE, OP_IS, CARD_TYPE_CREATURE )
    </TARGET_DEFINITION>
    <CONTINUOUS_ACTION layer="6" mode="3">
    local target = EffectDC():Get_Targets(1):Get_CardPtr(0)
    if target ~= nil then
       local characteristics = target:GetCurrentCharacteristics()
       characteristics:Bool_Set( CHARACTERISTIC_DOUBLE_STRIKE, 1 )
    end
    </CONTINUOUS_ACTION>
    <DURATION simple_duration="UntilEOT" />
    <AI_SIMPLIFIED_TARGETING compartment="0" hint="HINT_ENEMY_ONLY" />
    <AI_SIMPLIFIED_TARGETING compartment="1" hint="HINT_ALLIED_ONLY" />
  </SPELL_ABILITY>

Re: Coding Boros charm

PostPosted: 06 Jul 2013, 08:52
by infernalsham
Thanks a lot Sumomole.

Re: Coding Boros charm

PostPosted: 06 Jul 2013, 09:15
by thefiremind
According to the new rules, I think that the indestructibility was more correct in infernalsham's attempt: I'm not sure if I managed to understand the change from being a "property" to being an "ability", but I think one of the consequences is that indestructible is granted only to those who are on the battlefield at resolution time, not to those who enter the battlefield later that turn. Could someone confirm?

Re: Coding Boros charm

PostPosted: 06 Jul 2013, 10:05
by infernalsham
Good news: The damage is now being dealt when the spell resolves if first option is picked, and double strike is properly added to target creature when option 3 is chosen.
Bad news: Indestructability is still not granted to any permanents when the spell resolves.

I based my version of the second ability on what Avacyn does.
Avacyn (Ind) code:
Code: Select all
<FILTER>
    local filter = ClearFilter()
    filter:Add( FE_CARD_INSTANCE, OP_NOT, EffectSource() )
    filter:Add( FE_IS_PERMANENT, true )
    filter:Add( FE_CONTROLLER, OP_IS, EffectController())
    </FILTER>
    <CONTINUOUS_ACTION layer="6" filter_id="0">
    if FilteredCard() ~= nil then
       local characteristics = FilteredCard():GetCurrentCharacteristics()
       characteristics:Bool_Set( CHARACTERISTIC_INDESTRUCTIBLE, 1 )
    end
    </CONTINUOUS_ACTION>
    <DURATION>
    return (EffectSource() == nil)
    </DURATION>

Re: Coding Boros charm

PostPosted: 06 Jul 2013, 10:48
by infernalsham
Solved it. Feel so stupid I didn't notice it earlier. #-o

Code: Select all
<FILTER>
    local filter = ClearFilter()
    filter:Add( FE_IS_PERMANENT, true )
    filter:Add( FE_CONTROLLER, OP_IS, EffectController())
    </FILTER>
    <CONTINUOUS_ACTION layer="6" filter_id="0">
    if FilteredCard() ~= nil then
       local characteristics = FilteredCard():GetCurrentCharacteristics()
       characteristics:Bool_Set( CHARACTERISTIC_INDESTRUCTIBLE, 1 )
    end
    </CONTINUOUS_ACTION>
   <DURATION simple_duration="UntilEOT" />   

Re: Coding Boros charm

PostPosted: 06 Jul 2013, 11:04
by sumomole
thefiremind wrote:According to the new rules, I think that the indestructibility was more correct in infernalsham's attempt: I'm not sure if I managed to understand the change from being a "property" to being an "ability", but I think one of the consequences is that indestructible is granted only to those who are on the battlefield at resolution time, not to those who enter the battlefield later that turn. Could someone confirm?
In fact, I don't understand the new rules for indestructible, and why Falkenrath Aristocrat can be destroyed by Turn / Burn, so I just copied the code of other cards. But for the second point you said, I think you confuse "this turn" and "until end of turn", Boros Charm and Rootborn Defenses are "this turn".
Boros Charm: If you choose the second mode, permanents that come under your control later in the turn will also be indestructible.
Rootborn Defenses: The creature token you put onto the battlefield as well as creatures that come under your control later in the turn will also be indestructible.


infernalsham wrote:I based my version of the second ability on what Avacyn does.
You too.

Re: Coding Boros charm [Solved]

PostPosted: 06 Jul 2013, 11:07
by thefiremind
The cards still say "this turn" because their wording hasn't been updated yet.

Here's the proof that infernalsham's version is correct:
Case 2: Creatures (or permanents) you control are made indestructible until end of turn by a spell or ability (for example, Boros Charm). Previously, a creature that came under your control after that spell or ability resolved would be indestructible, as that spell or ability didn't change the characteristics of any creature. With the change, that new creature won't have indestructible as it wasn't under your control at the right time to gain it.
From http://www.wizards.com/magic/magazine/a ... ature/248e

Re: Coding Boros charm [Solved]

PostPosted: 06 Jul 2013, 11:31
by sumomole
thefiremind wrote:The cards still say "this turn" because their wording hasn't been updated yet.

Here's the proof that infernalsham's version is correct:
Case 2: Creatures (or permanents) you control are made indestructible until end of turn by a spell or ability (for example, Boros Charm). Previously, a creature that came under your control after that spell or ability resolved would be indestructible, as that spell or ability didn't change the characteristics of any creature. With the change, that new creature won't have indestructible as it wasn't under your control at the right time to gain it.
From http://www.wizards.com/magic/magazine/a ... ature/248e
Well, I'm out. :mrgreen: