It is currently 25 Apr 2024, 21:55
   
Text Size

The Transform mechanic project... reloaded!

Moderator: CCGHQ Admins

The Transform mechanic project... reloaded!

Postby thefiremind » 12 May 2012, 15:27

Title says it all... I started working on the Transform mechanic again. Last time it stopped working after some tweaks I made and I haven't been able to step back to a working condition, so I gave up. This time my knowledge is a bit better and I think I'm at a good point, so I'll show you my progress. It's also a way to keep track of the changes for myself. :wink:

The core of the mechanic is composed by an invisible card and a LOL file, both inspired by nabeshin's clone mechanic.

_TRANSFORM_MECHANIC_19990903.XML:
Code: Select all
<?xml version='1.0'?>
<CARD_V2>
  <FILENAME text="_TRANSFORM_MECHANIC_19990903" />
  <CARDNAME text="_TRANSFORM_MECHANIC" />
  <TITLE>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[]]></LOCALISED_TEXT>
  </TITLE>
  <MULTIVERSEID value="19990903" />
  <ARTID value="0" />
  <FRAMECOLOUR name="C_FULL" />
  <COLOUR value="" />
  <ARTIST name="Nobody" />
  <CASTING_COST cost="" />
  <TYPE metaname="" order_de-DE="0" order_es-ES="0" order_fr-FR="0" order_it-IT="0" order_jp-JA="0" />
  <EXPANSION value="DPE" />
  <RARITY metaname="" />

  <TRIGGERED_ABILITY forced_skip="1" active_zone="any" zone="any">
    <TRIGGER value="COMING_INTO_PLAY" simple_qualifier="self" />
    <PLAY_TIME_ACTION>
    GetTransformData()
    </PLAY_TIME_ACTION>
    <RESOLUTION_TIME_ACTION>
    WipeTransformData()
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>
  <TRIGGERED_ABILITY internal="1" active_zone="in_play" suppress_fizzle="1">
    <TRIGGER value="END_OF_TURN">
    return TriggerPlayer():MyTurn() ~= 0
    </TRIGGER>
    <RESOLUTION_TIME_ACTION>
    local transformer = MTG():ObjectDataChest():Get_ProtectedCardPtr( 1 )
    if transformer == nil or (transformer ~= nil and transformer:GetZone() ~= ZONE_IN_PLAY) then
      Object():RemoveFromGame()
    end
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>
  <STATIC_ABILITY influencing_zone="in_play" layer="1">
    <CONTINUOUS_ACTION>
    local face = MTG():ObjectDataChest():Get_ProtectedCardPtr( MTG():ObjectDataChest():Get_Int(COMPARTMENT_ID_IS_TRANSFORMED)+2 )
    local transformer = MTG():ObjectDataChest():Get_ProtectedCardPtr( 1 )
    if face ~= nil then
      if (transformer ~= nil and transformer:GetZone() == ZONE_IN_PLAY) then
        transformer:TurnIntoCopyOf( face )
      end
    end
    </CONTINUOUS_ACTION>
  </STATIC_ABILITY>

  <STATIC_ABILITY>
    <CONTINUOUS_ACTION>
    local filter = Object():GetFilter()
    filter:Clear()
    filter:SetConvertedCostMax( 25 )
    Object():Protection()
    </CONTINUOUS_ACTION>
  </STATIC_ABILITY>
  <STATIC_ABILITY>
    <CONTINUOUS_ACTION>
    Object():GetCurrentCharacteristics():Bool_Set( CHARACTERISTIC_SHROUD, 1 )
    Object():GetCurrentCharacteristics():Bool_Set( CHARACTERISTIC_INDESTRUCTIBLE, 1 )
    </CONTINUOUS_ACTION>
  </STATIC_ABILITY>
  <TRIGGERED_ABILITY internal="1" pre_trigger="1">
    <TRIGGER value="CARD_CONSIDERED_FOR_TARGETTING" simple_qualifier="self">
    return true
    </TRIGGER>
  </TRIGGERED_ABILITY>
</CARD_V2>
If you looked at nabeshin's clone mechanic, you know the deal. The difference here is that we store 3 pointers:
1: The card that generated this token.
2: The card's front face (which is a different one, more on this later).
3: The card's back face.
According to the value of the COMPARTMENT_ID_IS_TRANSFORMED register, the static ability switches between the two forms. This should give as much freedom as possible about how to make the transformation happen and/or when.

TRANSFORM_FUNCTIONS.LOL:
Code: Select all
COMPARTMENT_ID_TRANSFORMED_TOKEN = -903
COMPARTMENT_ID_IS_TRANSFORMED = 903

transformTable = {}
transformMetaTable = {__mode = 'k'}
setmetatable(transformTable, transformMetaTable)

function InitTransform(front, back)
   local player = Object():GetPlayer()
   local token = MTG():ObtainToken( "_TRANSFORM_MECHANIC_19990903", player )
   if token ~= nil then
      transformTable[token] = {}
      transformTable[token][1] = Object()
      transformTable[token][2] = MTG():ObtainToken( front, player )
      transformTable[token][3] = MTG():ObtainToken( back, player )
      token:PutIntoPlay( player )
      local store = Storage( Object() )
      local old_token = store.get( COMPARTMENT_ID_TRANSFORMED_TOKEN )
      if old_token ~= nil then
         old_token:RemoveFromGame()
      end
      store.set( COMPARTMENT_ID_TRANSFORMED_TOKEN, token )
   end
end

function GetTransformData()
   MTG():ObjectDataChest():Set_Int( COMPARTMENT_ID_IS_TRANSFORMED, 0 )
   local transformer = transformTable[Object()][1]
   local front = transformTable[Object()][2]
   local back = transformTable[Object()][3]
   MTG():ObjectDataChest():Set_ProtectedCardPtr( 1, transformer )
   MTG():ObjectDataChest():Set_ProtectedCardPtr( 2, front )
   MTG():ObjectDataChest():Set_ProtectedCardPtr( 3, back )
end

function WipeTransformData()
   transformTable[Object()] = nil
end
Here I defined the two constants (why 903? Because of the last digits of the invisible card's ID :P), and the functions that pass the information to the invisible card.

Now, onto the visible cards. For each card with transform, 2 XML files weren't enough: I needed 3, and I'll explain why. The problem with the TurnIntoCopyOf function is reverting it. I tried with a continuous action that lasted until COMPARTMENT_ID_IS_TRANSFORMED becomes 0 again, but it seems that the DURATION block can't check data chests. Making it last until a certain phase would have removed a degree of freedom from the mechanic (not all transformations trigger during the upkeep). So I solved the problem with 3 cards:
1: A front face that gets included in the deck, that spawns the invisible card and keeps track of the played spells (in the cards that need to know that).
2: A front face that doesn't do anything about the transformation (the abilities of the original card are still active after TurnIntoCopyOf, so there's no need to replicate them), but it's used to revert the card to its front face.
3: A back face that doesn't do anything about the transformation, but has the characteristics of the card's back face.
While messing with those cards I discovered something I could have never imagined. The TurnIntoCopyOf function checks the card's art ID! If it's the same as the card it must copy, the function does nothing! So the first transformation of card #1 into card #2 when card #1 enters the battlefield is ignored, unless I make a copy of card #1's art with a different ID and use it for card #2. I had to do it because I needed to separate the peculiar abilities of the two faces, so that an eventual Clone on a transformed card gets them right.

Here is my first example: Reckless Waif / Merciless Predator.

Card #1 (to include in the deck):
Code: Select all
<?xml version='1.0'?>
<CARD_V2 custom="true">
  <FILENAME text="RECKLESS_WAIF_DECK_19991700" />
  <CARDNAME text="RECKLESS_WAIF" />
  <TITLE>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Reckless Waif]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Trovatella Imprudente]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Verwegener Streuner]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Orpheline téméraire]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Huérfana temeraria]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[無謀な浮浪者]]></LOCALISED_TEXT>
  </TITLE>
  <MULTIVERSEID value="19991700" />
  <ARTID value="19991700" />
  <FRAMECOLOUR name="R" />
  <COLOUR value="R" />
  <ARTIST name="Michael C. Hayes" />
  <CASTING_COST cost="{R}" />
  <FLAVOURTEXT>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[“Yes, I’m alone. No, I’m not worried.”]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[“Sì, sono sola. No, non sono preoccupata.”]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[„Ja, ich bin alleine. Nein, ich mache mir keine Sorgen.”]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[« Oui, je suis seule. Non, je ne suis pas inquiète. »]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[“Sí, estoy sola. No, no estoy preocupada.”]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[「ええ、一人よ。 いいえ、心配はしてないわ。」]]></LOCALISED_TEXT>
  </FLAVOURTEXT>
  <TYPE metaname="Creature" order_de-DE="0" order_es-ES="0" order_fr-FR="0" order_it-IT="0" order_jp-JA="0" />
  <SUB_TYPE metaname="Human" order_de-DE="0" order_es-ES="2" order_fr-FR="0" order_it-IT="2" order_jp-JA="0" />
  <SUB_TYPE metaname="Rogue" order_de-DE="1" order_es-ES="1" order_fr-FR="1" order_it-IT="1" order_jp-JA="1" />
  <SUB_TYPE metaname="Werewolf" order_de-DE="2" order_es-ES="0" order_fr-FR="2" order_it-IT="0" order_jp-JA="2" />
  <EXPANSION value="ISD" />
  <RARITY metaname="U" />
  <POWER value="1" />
  <TOUGHNESS value="1" />
  <TOKEN_REGISTRATION reservation="1" type="_TRANSFORM_MECHANIC_19990903" />
  <TOKEN_REGISTRATION reservation="1" type="RECKLESS_WAIF_19991701" />
  <TOKEN_REGISTRATION reservation="1" type="MERCILESS_PREDATOR_19991702" />
  <TRIGGERED_ABILITY forced_skip="1" active_zone="any" zone="any">
    <TRIGGER value="COMING_INTO_PLAY" simple_qualifier="self" />
    <PLAY_TIME_ACTION>
    InitTransform( "RECKLESS_WAIF_19991701", "MERCILESS_PREDATOR_19991702" )
    </PLAY_TIME_ACTION>
  </TRIGGERED_ABILITY>
  <TRIGGERED_ABILITY internal="1" active_zone="any">
    <TRIGGER value="SPELL_PLAYED">
    return true
    </TRIGGER>
    <RESOLUTION_TIME_ACTION>
    local store = Storage( Object() )
    for i=0,MTG():GetNumberOfPlayers()-1 do
      if TriggerObject():GetPlayer() == MTG():GetNthPlayer(i) then
        local spells = store.get( i )
        if spells == nil then
          store.set( i, 1 )
        else
          store.set( i, spells+1 )
        end
      end
    end
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>
  <TRIGGERED_ABILITY internal="1" active_zone="any">
    <TRIGGER value="END_OF_STEP">
    return MTG():GetStep() == STEP_END_OF_TURN and TriggeredForMe()
    </TRIGGER>
    <RESOLUTION_TIME_ACTION>
    local store = Storage( Object() )
    local maxspells = 0
    for i=0,MTG():GetNumberOfPlayers()-1 do
      local spells = store.get( i )
      if spells ~= nil and spells &gt; maxspells then
        maxspells = spells
      end
    end
    store.set( COMPARTMENT_ID_PLAYED_SPELLS, maxspells )
    for i=0,MTG():GetNumberOfPlayers()-1 do
      store.set( i, 0 )
    end
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>
  <TRIGGERED_ABILITY>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[At the beginning of each upkeep, if no spells were cast last turn, transform Reckless Waif.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[All’inizio di ogni mantenimento, se nell’ultimo turno non sono state lanciate magie, trasforma la Trovatella Imprudente.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Transformiere zu Beginn jedes Versorgungssegments den Verwegenen Streuner, 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 l’Orpheline téméraire.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Al comienzo de cada mantenimiento, si no se lanzaron hechizos en el último turno, transforma a la Huérfana temeraria.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[各アップキープの開始時に、直前のターンに呪文が唱えられていなかった場合、無謀な浮浪者を変身させる。]]></LOCALISED_TEXT>
    <TRIGGER value="BEGINNING_OF_STEP">
    local maxspells = Storage( Object() ).get( COMPARTMENT_ID_PLAYED_SPELLS )
    return EveryUpkeep() and (maxspells ~= nil and maxspells == 0) and Object():GetCardName() == "RECKLESS_WAIF"
    </TRIGGER>
    <RESOLUTION_TIME_ACTION>
    local token = Storage( Object() ).get( COMPARTMENT_ID_TRANSFORMED_TOKEN )
    if token ~= nil then
      token:GetDataChest():Set_Int( COMPARTMENT_ID_IS_TRANSFORMED, 1 )
    end
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>
  <TRIGGERED_ABILITY>
    <TRIGGER value="BEGINNING_OF_STEP">
    local maxspells = Storage( Object() ).get( COMPARTMENT_ID_PLAYED_SPELLS )
    return EveryUpkeep() and (maxspells ~= nil and maxspells &gt; 1) and Object():GetCardName() == "MERCILESS_PREDATOR"
    </TRIGGER>
    <RESOLUTION_TIME_ACTION>
    local token = Storage( Object() ).get( COMPARTMENT_ID_TRANSFORMED_TOKEN )
    if token ~= nil then
      token:GetDataChest():Set_Int( COMPARTMENT_ID_IS_TRANSFORMED, 0 )
    end
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>
  <SFX text="COMBAT_BLADE_LARGE_ATTACK" power_boundary_min="4" power_boundary_max="-1" />
  <SFX text="COMBAT_BLADE_SMALL_ATTACK" power_boundary_min="1" power_boundary_max="3" />
</CARD_V2>
Card #2 (front face copy):
Code: Select all
<?xml version='1.0'?>
<CARD_V2 custom="true">
  <FILENAME text="RECKLESS_WAIF_19991701" />
  <CARDNAME text="RECKLESS_WAIF" />
  <TITLE>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Reckless Waif]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Trovatella Imprudente]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Verwegener Streuner]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Orpheline téméraire]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Huérfana temeraria]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[無謀な浮浪者]]></LOCALISED_TEXT>
  </TITLE>
  <MULTIVERSEID value="19991701" />
  <ARTID value="19991701" />
  <FRAMECOLOUR name="R" />
  <COLOUR value="R" />
  <ARTIST name="Michael C. Hayes" />
  <CASTING_COST cost="{R}" />
  <FLAVOURTEXT>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[“Yes, I’m alone. No, I’m not worried.”]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[“Sì, sono sola. No, non sono preoccupata.”]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[„Ja, ich bin alleine. Nein, ich mache mir keine Sorgen.”]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[« Oui, je suis seule. Non, je ne suis pas inquiète. »]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[“Sí, estoy sola. No, no estoy preocupada.”]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[「ええ、一人よ。 いいえ、心配はしてないわ。」]]></LOCALISED_TEXT>
  </FLAVOURTEXT>
  <TYPE metaname="Creature" order_de-DE="0" order_es-ES="0" order_fr-FR="0" order_it-IT="0" order_jp-JA="0" />
  <SUB_TYPE metaname="Human" order_de-DE="0" order_es-ES="2" order_fr-FR="0" order_it-IT="2" order_jp-JA="0" />
  <SUB_TYPE metaname="Rogue" order_de-DE="1" order_es-ES="1" order_fr-FR="1" order_it-IT="1" order_jp-JA="1" />
  <SUB_TYPE metaname="Werewolf" order_de-DE="2" order_es-ES="0" order_fr-FR="2" order_it-IT="0" order_jp-JA="2" />
  <EXPANSION value="ISD" />
  <RARITY metaname="U" />
  <POWER value="1" />
  <TOUGHNESS value="1" />
  <STATIC_ABILITY influencing_zone="any" zone="any" layer="8">
    <CONTINUOUS_ACTION>
    -- Just to be sure...
    Object():GetCurrentCharacteristics():Bool_Set( CHARACTERISTIC_CANT_BE_PLAYED, 1 )
    </CONTINUOUS_ACTION>
  </STATIC_ABILITY>
  <STATIC_ABILITY>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[At the beginning of each upkeep, if no spells were cast last turn, transform Reckless Waif.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[All’inizio di ogni mantenimento, se nell’ultimo turno non sono state lanciate magie, trasforma la Trovatella Imprudente.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Transformiere zu Beginn jedes Versorgungssegments den Verwegenen Streuner, 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 l’Orpheline téméraire.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Al comienzo de cada mantenimiento, si no se lanzaron hechizos en el último turno, transforma a la Huérfana temeraria.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[各アップキープの開始時に、直前のターンに呪文が唱えられていなかった場合、無謀な浮浪者を変身させる。]]></LOCALISED_TEXT>
  </STATIC_ABILITY>
  <SFX text="COMBAT_BLADE_LARGE_ATTACK" power_boundary_min="4" power_boundary_max="-1" />
  <SFX text="COMBAT_BLADE_SMALL_ATTACK" power_boundary_min="1" power_boundary_max="3" />
</CARD_V2>
Card #3 (back face):
Code: Select all
<?xml version='1.0'?>
<CARD_V2 custom="true">
  <FILENAME text="MERCILESS_PREDATOR_19991702" />
  <CARDNAME text="MERCILESS_PREDATOR" />
  <TITLE>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Merciless Predator]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Predatrice Spietata]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Gnadenloses Raubtier]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Prédatrice impitoyable]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Depredadora despiadada]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[無慈悲な捕食者]]></LOCALISED_TEXT>
  </TITLE>
  <MULTIVERSEID value="19991702" />
  <ARTID value="19991702" />
  <FRAMECOLOUR name="R" />
  <COLOUR value="R" />
  <ARTIST name="Michael C. Hayes" />
  <CASTING_COST cost="" />
  <FLAVOURTEXT>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Before she just wanted to snatch your purse; now she’ll take the whole arm.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Prima voleva solo afferrare la tua borsa; ora si prenderà tutto il braccio.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Vorher wollte sie nur an deine Börse, jetzt nimmt sie auch den ganzen Arm.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Avant, elle se contentait de votre bourse, maintenant elle prend tout le bras.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Antes sólo quería robar tu bolso; ahora se llevará el brazo entero.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[前は財布をくすねるだけだった。今では腕ごと持っていこうとしている。]]></LOCALISED_TEXT>
  </FLAVOURTEXT>
  <TYPE metaname="Creature" order_de-DE="0" order_es-ES="0" order_fr-FR="0" order_it-IT="0" order_jp-JA="0" />
  <SUB_TYPE metaname="Werewolf" order_de-DE="0" order_es-ES="0" order_fr-FR="0" order_it-IT="0" order_jp-JA="0" />
  <EXPANSION value="ISD" />
  <RARITY metaname="U" />
  <POWER value="3" />
  <TOUGHNESS value="2" />
  <STATIC_ABILITY influencing_zone="any" zone="any" layer="8">
    <CONTINUOUS_ACTION>
    -- Just to be sure...
    Object():GetCurrentCharacteristics():Bool_Set( CHARACTERISTIC_CANT_BE_PLAYED, 1 )
    </CONTINUOUS_ACTION>
  </STATIC_ABILITY>
  <STATIC_ABILITY>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[At the beginning of each upkeep, if a player cast two or more spells last turn, transform Merciless Predator.]]></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 la Predatrice Spietata.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Transformiere zu Beginn jedes Versorgungssegments das Gnadenlose Raubtier, 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 la Prédatrice impitoyable.]]></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 a la Depredadora despiadada.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[各アップキープの開始時に、直前のターンにいずれかのプレイヤーが2つ以上の呪文を唱えていた場合、無慈悲な捕食者を変身させる。]]></LOCALISED_TEXT>
  </STATIC_ABILITY>
  <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" />
</CARD_V2>
Let me know what you think. :D
< 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 35 guests


Who is online

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

Login Form