It is currently 21 Oct 2019, 18:07
   
Text Size

Transform ability

Moderators: Xander9009, CCGHQ Admins

Transform ability

Postby BlindWillow » 24 Oct 2012, 19:10

Thought I would post real quick my progress working on thefiremind's transform functions (reason why I didn't release my latest update over the weekend as I had planned). See here for the discussion that prompted me to explore transform ability and here for thefiremind's transform functions.

Anyway, one-way transformations are no problem. It's cards that transform repeatedly that are the problem. I don't know the specifics, but something doesn't get fully reset when a card transforms back. Here is where delayed triggers come in handy, as they seem to become almost totally independent of the original EffectSource.

So if you add a delayed trigger to a "repeat transformer" (for lack of a better term) like this:
Code: Select all
  <TRIGGERED_ABILITY internal="1" resource_id="99">
    <CLEANUP fire_once="1" />
    <TRIGGER value="STATE_BASED_EFFECTS">
    return ( IsNotTransformed( Object() ) and EffectDC():Get_CardPtr(99) == Object() )
    </TRIGGER>
    <RESOLUTION_TIME_ACTION>
    if EffectDC():Get_CardPtr(99) ~= nil then
   EffectDC():Get_CardPtr(99):StoreCopiableValues(EffectDC():Make_Chest(98))
   Object():UseCopiableValues(EffectDC():Get_Chest(98))
    end
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>
And then set up the delayed trigger both as part of the initial entry trigger and as part of the transform ability, which I did by adding a function called GetResetData to thefiremind's functions like this:
Code: Select all
GetResetData = function()
-- creates delayed trigger with front face card's characteristics
      local delayDC = EffectDC():Make_Chest(100)
      delayDC:Set_CardPtr(99, Object())
      MTG():CreateDelayedTrigger(99, delayDC)
end
With the initial entry triggered ability looking like this now (I added the token check just to be sure the transform ability doesn't get copied by things like Rite of Replication, per the rules):

Code: Select all
  <TRIGGERED_ABILITY internal="1" active_zone="ZONE_ANY">
    <TRIGGER value="ZONECHANGE_BEGIN" simple_qualifier="self" to_zone="ZONE_IN_PLAY">
    return Object():IsToken() == 0
    </TRIGGER>
    <RESOLUTION_TIME_ACTION>
    GetResetData()
    </RESOLUTION_TIME_ACTION>
    <RESOLUTION_TIME_ACTION>
    MTG():CreateDelayedTrigger(1, nil)
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>
And the transform ability looking like this (in this case I'm triggering the classic werewolf transform, using thefiremind's spell casting checks to set a register):
Code: Select all
  <TRIGGERED_ABILITY auto_skip="1">
    <TRIGGER value="BEGINNING_OF_STEP">
    return ( CanTransform( Object() ) and TriggeredForMe() and MTG():GetStep() == STEP_UPKEEP and ObjectDC():Get_Int(COMPARTMENT_ID_INT_REGISTER_0) == 1 )
    </TRIGGER>
    <RESOLUTION_TIME_ACTION>
    GetResetData()
    </RESOLUTION_TIME_ACTION>
    <RESOLUTION_TIME_ACTION>
    StartTransform( Object() )
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>
The card will transform repeatedly as it should. The only problem I'm having at this point is, because my reset triggers on state based effects, any entry triggered abilities (like Huntmaster of the Fells, for instance) don't get properly reset if the card gets exiled-and-returned by something (e.g. Cloudshift), as they happen before the reset gets to trigger. This would mean you wouldn't get your wolf token and two life in Huntmaster's case. I'm not sure how to address this, as all attempts to add additional resets via zonechange delayed triggers have failed.

Any suggestions would be most welcome.

Edit: Just realized the solution to that last problem, which I'll implement later tonight. It was right in front of me the whole time (in fact it has been the solution to all my problems with transform so far), namely: another delayed trigger. Since I'm already handling Huntmaster's transform ability on Ravager (since there is no "transform" trigger), I only need to replace Huntmaster's initial entry ability with a delayed trigger version of it.
BlindWillow
 
Posts: 213
Joined: 19 Jul 2012, 00:26
Has thanked: 11 times
Been thanked: 46 times

Re: Transform ability

Postby BlindWillow » 25 Oct 2012, 05:27

I'll be releasing it in my next update, but for those who want a look at it, here is a fully functional (as far as my testing goes) Huntmaster of the Fells/Ravager of the Fells:

Huntmaster:
Code: Select all
<?xml version='1.0'?>
<CARD_V2>
  <FILENAME text="HUNTMASTER_OF_THE_FELLS_38262875" />
  <CARDNAME text="HUNTMASTER_OF_THE_FELLS" />
  <TITLE>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Huntmaster of the Fells]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Capocaccia delle Colline]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Jagdmeister vom Kahlenberg]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Maître-chasseur de la lande]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Maestro de caza de las colinas]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[高原の狩りの達人]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[산지의 사냥꾼]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Ловчий Каменистых Холмов]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Mestre de Caça da Derrubada]]></LOCALISED_TEXT>
  </TITLE>
  <MULTIVERSEID value="38262875" />
  <ARTID value="38262875" />
  <ARTIST name="Chris Rahn" />
  <CASTING_COST cost="{2}{R}{G}" />
  <TYPE metaname="Creature" />
  <SUB_TYPE metaname="Human" order_de-DE="0" order_es-ES="1" order_fr-FR="0" order_it-IT="1" order_jp-JA="0" order_ko-KR="0" order_pt-BR="0" order_ru-RU="0" />
  <SUB_TYPE metaname="Werewolf" order_de-DE="1" order_es-ES="0" order_fr-FR="1" order_it-IT="0" order_jp-JA="1" order_ko-KR="1" order_pt-BR="1" order_ru-RU="1" />
  <EXPANSION value="DPG" />
  <RARITY metaname="M" />
  <POWER value="2" />
  <TOUGHNESS value="2" />
  <TRIGGERED_ABILITY internal="1" active_zone="ZONE_ANY">
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Whenever this creature enters the battlefield or transforms into Huntmaster of the Fells, put a 2/2 green Wolf creature token onto the battlefield and you gain 2 life.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Ogniqualvolta questa creatura entra nel campo di battaglia o si trasforma nel Capocaccia delle Colline, metti sul campo di battaglia una pedina creatura Lupo 2/2 verde e guadagni 2 punti vita.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Immer wenn diese Kreatur ins Spiel kommt oder in den Jagdmeister vom Kahlenberg transformiert, bringst du einen 2/2 grünen Wolf-Kreaturenspielstein ins Spiel und erhältst 2 Lebenspunkte dazu.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[À chaque fois que cette créature arrive sur le champ de bataille ou qu’elle se transforme en Maître-chasseur de la lande, mettez sur le champ de bataille un jeton de créature 2/2 verte Loup et vous gagnez 2 points de vie.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Siempre que esta criatura entre al campo de batalla o se transforme en el Maestro de caza de las colinas, pon en el campo de batalla una ficha de criatura Lobo verde 2/2 y gana 2 vidas.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[Whenever this creature enters the battlefield or transforms into Huntmaster of the Fells, put a 2/2 green Wolf creature token onto the battlefield and you gain 2 life.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[이 생물이 전장에 들어오거나 산지의 사냥꾼으로 변신할 때마다, 2/2 녹색 늑대 생물 토큰 한 개를 전장에 놓는고 당신은 생명 2점을 얻는다.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Каждый раз когда это существо выходит на поле битвы или трансформируется в Ловчего Каменистых Холмов, положите на поле битвы одну фишку существа 2/2 зеленый Волк, и вы получаете 2 жизни.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Toda vez que esta criatura entra no campo de batalha ou se transforma em Mestre de Caça da Derrubada, você coloca no campo de batalha uma ficha de criatura verde 2/2 do tipo Lobo e ganha 2 pontos de vida.]]></LOCALISED_TEXT>
    <TRIGGER value="ZONECHANGE_BEGIN" simple_qualifier="self" to_zone="ZONE_IN_PLAY">
    return Object():IsToken() == 0
    </TRIGGER>
    <RESOLUTION_TIME_ACTION>
    GetResetData()
    </RESOLUTION_TIME_ACTION>
    <RESOLUTION_TIME_ACTION>
    MTG():CreateDelayedTrigger(1, nil)
    </RESOLUTION_TIME_ACTION>
    <RESOLUTION_TIME_ACTION>
    -- Huntmaster's entry ability must be a delayed trigger to function properly if it returns from exile.
    MTG():CreateDelayedTrigger(2, nil)
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>
  <TRIGGERED_ABILITY resource_id="1" forced_skip="1">
    <CLEANUP fire_once="1" />
    <TRIGGER value="ZONECHANGE_END" simple_qualifier="self" to_zone="ZONE_IN_PLAY" />
    <RESOLUTION_TIME_ACTION>
    GetTransformData_Step1("RAVAGER_OF_THE_FELLS_38262699")
    </RESOLUTION_TIME_ACTION>
    <RESOLUTION_TIME_ACTION>
    GetTransformData_Step2()
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>
  <STATIC_ABILITY>
    <CONTINUOUS_ACTION layer="1">
    if IsTransformed( Object() ) then
       ApplyTransformation( 1, 1, CARD_TYPE_CREATURE, CREATURE_TYPE_WEREWOLF )
    end
    </CONTINUOUS_ACTION>
  </STATIC_ABILITY>

  -- Delayed trigger version of Huntmaster's entry ability so it occurs after returning from exile.
  <TRIGGERED_ABILITY auto_skip="1" resource_id="2">
    <CLEANUP fire_once="1" />
    <TRIGGER value="ZONECHANGE_END" simple_qualifier="self" to_zone="ZONE_IN_PLAY" />
    <RESOLUTION_TIME_ACTION>
    local token_count = 1
    if token_count &gt; 0 then
       MTG():PutTokensIntoPlay( "TOKEN_WOLF_2_2_277478", token_count, EffectController() )
    end
    </RESOLUTION_TIME_ACTION>
    <RESOLUTION_TIME_ACTION>
    EffectController():GainLife(2)
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>

  -- Using this delayed trigger with GetResetData resets the card's characteristics after it has transformed back into Huntmaster.
  <TRIGGERED_ABILITY internal="1" resource_id="99">
    <CLEANUP fire_once="1" />
    <TRIGGER value="STATE_BASED_EFFECTS">
    return ( IsNotTransformed( Object() ) and EffectDC():Get_CardPtr(99) == Object() )
    </TRIGGER>
    <RESOLUTION_TIME_ACTION>
    if EffectDC():Get_CardPtr(99) ~= nil then
   EffectDC():Get_CardPtr(99):StoreCopiableValues(EffectDC():Make_Chest(98))
   Object():UseCopiableValues(EffectDC():Get_Chest(98))
    end
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>

  -- This ability really belongs to Ravager but as there is no "transform" trigger must be triggered here to resolve after Huntmaster transforms.
  <TRIGGERED_ABILITY LKI_shield_effect_source="1" dangerous="1" filter_zone="ZONE_IN_PLAY">
    <TRIGGER value="BEGINNING_OF_STEP">
    return ( CanTransform( Object() ) and TriggeredForMe() and MTG():GetStep() == STEP_UPKEEP and ObjectDC():Get_Int(COMPARTMENT_ID_INT_REGISTER_0) == 1 )
    </TRIGGER>
    <TARGET_DEFINITION id="0">
    local filter = Object():GetFilter()
    filter:Clear()
    filter:SetFilterType( FILTER_TYPE_PLAYERS + FILTER_TYPE_OPPONENTS)
    filter:SetOwner( EffectController() )
    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_DEAL_2_DAMAGE", EffectDC():Make_Targets(6) )
    </PLAY_TIME_ACTION>
    <RESOLUTION_TIME_ACTION>
    local source = EffectSource()
    if source == nil then
   source = Object()
    end
    local playerDC = EffectDC():Get_Targets(6)
    if playerDC ~= nil then
   local target_player = playerDC:Get_PlayerPtr(0)
   if target_player ~= nil then
      target_player:DealDamage(2, source)
   end
    end
    </RESOLUTION_TIME_ACTION>
    <RESOLUTION_TIME_ACTION>
    local playerDC = EffectDC():Get_Targets(6)
    if playerDC ~= nil then
   local target_player = playerDC:Get_PlayerPtr(0)
   if target_player ~= nil then
      local filter = Object():GetFilter()
      filter:Clear()
      filter:May()
      filter:AddCardType( CARD_TYPE_CREATURE )
      filter:SetController( target_player )
      filter:SetZone( ZONE_IN_PLAY )
      filter:SetHint( HINT_ENEMY, EffectController() )
      EffectController():ChooseTargetWithFlags( NO_VALIDATION, "CARD_QUERY_CHOOSE_CREATURE_DEAL_2_DAMAGE", EffectDC():Make_Targets(7), QUERY_FLAG_CAN_BE_FINISHED_EARLY + QUERY_FLAG_CAN_BE_FINISHED_EARLY_FOR_AI_AS_WELL )
   end
    end
    </RESOLUTION_TIME_ACTION>
    <RESOLUTION_TIME_ACTION>
    local source = EffectSource()
    if source == nil then
   source = Object()
    end
    local creatureDC = EffectDC():Get_Targets(7)
    if creatureDC ~= nil then
   local target_creature = creatureDC:Get_CardPtr(0)
   if target_creature ~= nil then
      target_creature:DealDamage(2, source)
   end
    end
    </RESOLUTION_TIME_ACTION>
    <SFX text="TARGET_CLAW_PLAY" />
  </TRIGGERED_ABILITY>

  <TRIGGERED_ABILITY internal="1" active_zone="ZONE_ANY">
    <TRIGGER value="BEGINNING_OF_STEP">
    if MTG():GetStep() == STEP_CLEANUP then
   if NobodyCastSpells() then
      ObjectDC():Set_Int(COMPARTMENT_ID_INT_REGISTER_0, 1)
   else
      ObjectDC():Set_Int(COMPARTMENT_ID_INT_REGISTER_0, 0)
   end
   return TriggeredForMe()
    end
    return false
    </TRIGGER>
  </TRIGGERED_ABILITY>
  <TRIGGERED_ABILITY auto_skip="1">
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[At the beginning of each upkeep, if no spells were cast last turn, transform Huntmaster of the Fells.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[All’inizio di ogni mantenimento, se nell’ultimo turno non sono state lanciate magie, trasforma il Capocaccia delle Colline.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Transformiere zu Beginn jedes Versorgungssegments den Jagdmeister vom Kahlenberg, falls im letzten Zug keine Zaubersprüche gewirkt wurden.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Au début de chaque entretien, si aucun sort n’a été lancé au tour précédent, transformez le Maître-chasseur de la lande.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Al comienzo de cada mantenimiento, si no se lanzaron hechizos en el último turno, transforma al Maestro de caza de las colinas.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[ーが戦場に出るか高原の狩りの達人に変身するたび、緑の2/2の狼・クリーチャー・トークンを1体戦場に出し、あなたは2点のライフを得る。各アップキープの開始時に、直前のターンに呪文が唱えられていなかった場合、高原の狩りの達人を変身させる。]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[각 유지단 시작에, 만약 지난 턴에 아무 주문도 발동되지 않았다면, 산지의 사냥꾼을 변신시킨다.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[В начале каждого шага поддержки, если в предыдущем ходу не было разыграно ни одного заклинания, трансформируйте Ловчего Каменистых Холмов.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[No início de cada manutenção, se nenhuma mágica tiver sido conjurada no último turno, transforme Mestre de Caça da Derrubada.]]></LOCALISED_TEXT>
    <TRIGGER value="BEGINNING_OF_STEP">
    return ( CanTransform( Object() ) and TriggeredForMe() and MTG():GetStep() == STEP_UPKEEP and ObjectDC():Get_Int(COMPARTMENT_ID_INT_REGISTER_0) == 1 )
    </TRIGGER>
    <RESOLUTION_TIME_ACTION>
    GetResetData()
    </RESOLUTION_TIME_ACTION>
    <RESOLUTION_TIME_ACTION>
    StartTransform( Object() )
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>
  <TOKEN_REGISTRATION reservation="1" type="RAVAGER_OF_THE_FELLS_38262699" />
  <TOKEN_REGISTRATION reservation="1" type="TOKEN_WOLF_2_2_277478" />
  <SFX text="COMBAT_CHOP_LARGE_ATTACK" power_boundary_min="4" power_boundary_max="-1" />
  <SFX text="COMBAT_CHOP_SMALL_ATTACK" power_boundary_min="1" power_boundary_max="3" />
  <AI_BASE_SCORE score="900" zone="ZONE_IN_PLAY" />
</CARD_V2>
Ravager:
Code: Select all
<?xml version='1.0'?>
<CARD_V2>
  <FILENAME text="RAVAGER_OF_THE_FELLS_38262699" />
  <CARDNAME text="RAVAGER_OF_THE_FELLS" />
  <TITLE>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Ravager of the Fells]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Devastatore delle Colline]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Verwüster vom Kahlenberg]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Ravageur de la lande]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Devastador de las colinas]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[高原の荒廃者]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[산지의 유린자]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Опустошитель Каменистых Холмов]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Devastador da Derrubada]]></LOCALISED_TEXT>
  </TITLE>
  <MULTIVERSEID value="38262699" />
  <ARTID value="38262699" />
  <COLOUR value="RG" />
  <ARTIST name="Chris Rahn" />
  <CASTING_COST cost="" />
  <TYPE metaname="" />
  <EXPANSION value="DPG" />
  <RARITY metaname="M" />
  <POWER value="4" />
  <TOUGHNESS value="4" />
  <STATIC_ABILITY>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Trample]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Piétinement]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Arrolla.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Verursacht Trampelschaden]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Travolgere]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[トランプル]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[돌진]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Пробивной удар]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Atropelar]]></LOCALISED_TEXT>
    <CONTINUOUS_ACTION>
    local characteristics = Object():GetCurrentCharacteristics() 
    characteristics:Characteristic_Set( CHARACTERISTIC_TRAMPLE, 1 )
    </CONTINUOUS_ACTION>
  </STATIC_ABILITY>
  <STATIC_ABILITY>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Whenever this creature transforms into Ravager of the Fells, it deals 2 damage to target opponent and 2 damage to up to one target creature that player controls.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Ogniqualvolta questa creatura si trasforma nel Devastatore delle Colline, infligge 2 danni a un avversario bersaglio e 2 danni a fino a una creatura bersaglio controllata da quel giocatore.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Whenever this creature transforms into Ravager of the Fells, it deals 2 damage to target opponent and 2 damage to up to one target creature that player controls.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[À chaque fois que cette créature se transforme en Ravageur de la lande, elle inflige 2 blessures à un adversaire ciblé et 2 blessures à jusqu’à une créature ciblée que ce joueur contrôle.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Siempre que esta criatura se transforme en el Devastador de las colinas, le hace 2 puntos de daño al oponente objetivo y 2 puntos de daño a hasta una criatura objetivo que controle ese jugador.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[Whenever this creature transforms into Ravager of the Fells, it deals 2 damage to target opponent and 2 damage to up to one target creature that player controls.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[이 생물이 산지의 유린자로 변신할 때마다, 상대 한 명과 그 상대가 조종하는 생물을 최대 한 개까지 목표로 정한다. 이 생물은 그 상대와 그 생물에게 피해 2점을 입힌다.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Каждый раз когда это существо трансформируется в Опустошителя Каменистых Холмов, оно наносит 2 повреждения целевому оппоненту и 2 повреждения — не более чем одному целевому существу под контролем того игрока.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Toda vez que esta criatura se transforma em Devastador da Derrubada, ela causa 2 pontos de dano ao oponente alvo e 2 pontos de dano a até uma criatura alvo que aquele jogador controla.]]></LOCALISED_TEXT>
  </STATIC_ABILITY>

  -- This ability really belongs to Huntmaster but as there is no "transform" trigger must be triggered here to resolve after Ravager transforms.
  <TRIGGERED_ABILITY auto_skip="1" filter_zone="ZONE_IN_PLAY">
    <TRIGGER value="BEGINNING_OF_STEP">
    return ( CanTransform( Object() ) and ImmerwolfCheck() ~= 1 and TriggeredForMe() and MTG():GetStep() == STEP_UPKEEP and ObjectDC():Get_Int(COMPARTMENT_ID_INT_REGISTER_0) == 1 )
    </TRIGGER>
    <RESOLUTION_TIME_ACTION>
    local token_count = 1
    if token_count &gt; 0 then
   MTG():PutTokensIntoPlay( "TOKEN_WOLF_2_2_277478", token_count, EffectController() )
    end
    </RESOLUTION_TIME_ACTION>
    <RESOLUTION_TIME_ACTION>
    EffectController():GainLife(2)
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>

  <TRIGGERED_ABILITY internal="1" active_zone="ZONE_ANY">
    <TRIGGER value="BEGINNING_OF_STEP">
    if MTG():GetStep() == STEP_CLEANUP then
   if SomeoneCastNSpells(2) then
      ObjectDC():Set_Int(COMPARTMENT_ID_INT_REGISTER_0, 1)
   else
      ObjectDC():Set_Int(COMPARTMENT_ID_INT_REGISTER_0, 0)
   end
   return TriggeredForMe()
    end
    return false
    </TRIGGER>
  </TRIGGERED_ABILITY>
  <TRIGGERED_ABILITY auto_skip="1" filter_zone="ZONE_IN_PLAY">
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[At the beginning of each upkeep, if a player cast two or more spells last turn, transform Ravager of the Fells.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[All’inizio di ogni mantenimento, se nell’ultimo turno un giocatore ha lanciato due o più magie, trasforma il Devastatore delle Colline.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[rmiere zu Beginn jedes Versorgungssegments den Verwüster vom Kahlenberg, falls ein Spieler im letzten Zug zwei oder mehr Zaubersprüche gewirkt hat.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Au début de chaque entretien, si un joueur a lancé au moins deux sorts au tour précédent, transformez le Ravageur de la lande.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Al comienzo de cada mantenimiento, si un jugador lanzó dos o más hechizos en el último turno, transforma al Devastador de las colinas.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[ーが高原の荒廃者に変身するたび、対戦相手1人を対象とし、そのプレイヤーがコントロールするクリーチャーを最大1体まで対象とする。高原の荒廃者はそのプレイヤーに2点のダメージを与え、そのクリーチャーに2点のダメージを与える。各アップキープの開始時に、直前のターンにいずれかのプレイヤーが2つ以上の呪文を唱えていた場合、高原の荒廃者を変身させる。]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[작에, 만약 한 플레이어가 지난 턴에 두 개 이상의 주문을 발동했다면, 산지의 유린자를 변신시킨다.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[В начале каждого шага поддержки, если в предыдущем ходу игрок разыграл не менее двух заклинаний, трансформируйте Опустошителя Каменистых Холмов.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[No início de cada manutenção, se um jogador tiver conjurado duas ou mais mágicas no último turno, transforme Devastador da Derrubada.]]></LOCALISED_TEXT>
    <TRIGGER value="BEGINNING_OF_STEP">
    return ( CanTransform( Object() ) and ImmerwolfCheck() ~= 1 and TriggeredForMe() and MTG():GetStep() == STEP_UPKEEP and ObjectDC():Get_Int(COMPARTMENT_ID_INT_REGISTER_0) == 1 )
    </TRIGGER>
    <RESOLUTION_TIME_ACTION>
    StartTransform( Object() )
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>
  <TOKEN_REGISTRATION reservation="1" type="RAVAGER_OF_THE_FELLS_38262699" />
  <TOKEN_REGISTRATION reservation="1" type="TOKEN_WOLF_2_2_277478" />
  <HELP title="MORE_INFO_BADGE_TITLE_1" body="MORE_INFO_BADGE_BODY_1" zone="ZONE_ANY" />
  <SFX text="COMBAT_CLAW_LARGE_ATTACK" power_boundary_min="4" power_boundary_max="-1" />
  <SFX text="COMBAT_CLAW_SMALL_ATTACK" power_boundary_min="1" power_boundary_max="3" />
  <AI_BASE_SCORE score="900" zone="ZONE_IN_PLAY" />
</CARD_V2>
I've attached the cards as well as my transform functions file. As usual, any recommendations and revisions are most welcome.
Attachments
huntmaster_ravager.zip
(8.94 KiB) Downloaded 110 times
BlindWillow
 
Posts: 213
Joined: 19 Jul 2012, 00:26
Has thanked: 11 times
Been thanked: 46 times

Re: Transform ability

Postby BlindWillow » 25 Oct 2012, 16:00

Just realized something that I will have to fix later. I need the traditional entry trigger for Clone type cards. So I'm going to have to use both, with the delayed trigger version triggering only on zone changes coming from exile.
BlindWillow
 
Posts: 213
Joined: 19 Jul 2012, 00:26
Has thanked: 11 times
Been thanked: 46 times

Re: Transform ability

Postby thefiremind » 29 May 2013, 09:57

Maybe I'm a bit late, but I want to inform you that I just found an easier and cleaner fix for the unrepeatable transformation. If I'm successful, you'll soon have my own "transforming tools", including Immerwolf, Moonmist, and a Huntmaster of the Fells compatible with Moonmist.
< 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: 717 times


Return to Programming Talk

Who is online

Users browsing this forum: No registered users and 3 guests


Who is online

In total there are 3 users online :: 0 registered, 0 hidden and 3 guests (based on users active over the past 10 minutes)
Most users ever online was 287 on 31 Mar 2019, 04:11

Users browsing this forum: No registered users and 3 guests

Login Form