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



The Transform mechanic project... reloaded!
Moderator: CCGHQ Admins
The Transform mechanic project... reloaded!
by 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. 
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:
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:
), 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):


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>
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

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 > 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 > 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>
- 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>
- 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>

< 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
1 post
• Page 1 of 1
Who is online
Users browsing this forum: No registered users and 4 guests