It is currently 18 Apr 2024, 05:29
   
Text Size

Morph tests

Moderator: CCGHQ Admins

Re: Morph tests

Postby thefiremind » 13 Sep 2014, 09:53

NeoAnderson wrote:I understand what you say because i already tried before but timing is too quick and the game doesn't update the card status when considering it for casting
Just a hint: I don't know if it will work in this particular case (probably not), but for problems of this kind, remember that there's MTG():ReevaluateContinuousEffects() which should force the game to apply continuous effects immediately.
< 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

Re: Morph tests

Postby NeoAnderson » 13 Sep 2014, 10:05

thefiremind wrote:
NeoAnderson wrote:I understand what you say because i already tried before but timing is too quick and the game doesn't update the card status when considering it for casting
Just a hint: I don't know if it will work in this particular case (probably not), but for problems of this kind, remember that there's MTG():ReevaluateContinuousEffects() which should force the game to apply continuous effects immediately.
Thanks Fire, but i already know that and i also used it inside the card code, but it seems cannot change any continuous effect already applied to the card, i mean the cost reductions/increase are already applied when it reevaluate the contionuous effects, and the same seems to be about ability granted as like flash..
The problem is we are able to change what happen before consider_for_cast trigger inside the PREREQUISITE BLOCK of the alternative cost, and this influence the cost reductions effects, but it also change what happen when we cast the card normally.
About the Flash granted it seems to be not considered also if we turn into a creature the card into prerequisite block.
NeoAnderson
 
Posts: 914
Joined: 10 Sep 2013, 07:49
Has thanked: 18 times
Been thanked: 139 times

Re: Morph tests

Postby NeoAnderson » 13 Sep 2014, 23:16

NEED HELP :

I am fighting with a weird issue, i have an activated ability with cost
Code: Select all
<COST mana_cost="{0}" type="Mana" />
this ability call a delayed trigger where i have to pay if a condition is true, so when i have to pay there is something like :
Code: Select all
if EffectController():CanPayManaCost("{3}") then
    EffectController():PayManaCost("{3}")
end
Now the weird issue :
1. if i have only mana of 1 kind, so no other combinations available, everything works fine, but if i have mana of different colours or colourless mana the game ask to choose the best combination of mana to use then when i push ok it crash with dump file.
2. I tried to change PayManaCost with PayResourceCost using an utility ability same as above.
3. I tried to change the cost of the activated ability with
Code: Select all
<COST mana_cost="{3}" type="Mana" />
also if in this way i pay before to know if the condition is true, but i have the same crash with multi combinations of mana.
Image

Honestly this is the first time i find something like this and i don't know how to fix it..so please if someone have an idea to resolve will be very helpful.

UPDATE : After i lose my mind i understand which was the problem, it seems that the function PayManaCost doesn't works properly if we are pay for something while is going to be cast, i resolved using CastUsingResourceCost and i have create an utility ability with generic cost and inside the utility ability i used PayManaCost.
Last edited by NeoAnderson on 14 Sep 2014, 00:36, edited 1 time in total.
NeoAnderson
 
Posts: 914
Joined: 10 Sep 2013, 07:49
Has thanked: 18 times
Been thanked: 139 times

Re: Morph tests

Postby RiiakShiNal » 14 Sep 2014, 00:34

I already responded to this via PM (as that is where I saw the question first), but I will summarize what I said there for everyone else here.

If the problem is with multiple combinations of mana only when manual mana tokens (i.e. invisible tokens) are available then there is probably a workaround that can be used.

If the problem occurs with multiple combinations of mana when only basic lands and/or regular permanents are available then it is a really bad engine problem that we probably can't do anything about. Or there is something wrong with your installation, though if all other aspects of the game work then it is not likely an installation problem.

So additional information and test are needed.
RiiakShiNal
Programmer
 
Posts: 2185
Joined: 16 May 2011, 21:37
Has thanked: 75 times
Been thanked: 496 times

Re: Morph tests

Postby NeoAnderson » 14 Sep 2014, 00:39

RiiakShiNal wrote:I already responded to this via PM (as that is where I saw the question first), but I will summarize what I said there for everyone else here.

If the problem is with multiple combinations of mana only when manual mana tokens (i.e. invisible tokens) are available then there is probably a workaround that can be used.

If the problem occurs with multiple combinations of mana when only basic lands and/or regular permanents are available then it is a really bad engine problem that we probably can't do anything about. Or there is something wrong with your installation, though if all other aspects of the game work then it is not likely an installation problem.

So additional information and test are needed.
Thanks my friend i was so focused that i haven't seen your PM, anyway i figured out where the engine was crashing, i just update the post above :
UPDATE : After i lose my mind i understand which was the problem, it seems that the function PayManaCost doesn't works properly if we are pay for something while is going to be cast, i resolved using CastUsingResourceCost and i have create an utility ability with generic cost and inside the utility ability i used PayManaCost.

I swear i was going to be crazy also because there is no reason to crash as i had implemented before.
NeoAnderson
 
Posts: 914
Joined: 10 Sep 2013, 07:49
Has thanked: 18 times
Been thanked: 139 times

Re: Morph tests

Postby NeoAnderson » 14 Sep 2014, 00:57

OK guys,
After thousand and thousand tests, i made another test version of Lumithread Field.
I decided to keep the morph cost always on 3 (Right now is the best solution).
I would post what i have done i need tests, many different tests to understand how many conflicts are still unsolved.

Right now i made it compliant with the follow situations : | Open
1. Compliant with cards like Nightveil Specter that grants the ability to play card not from hand.
2. Compliant with cards like Omniscience that grants the ability to cast for free.
3. Compliant with Primeval Bounty
4. Compliant with Iona, Shield of Emeria
5. Compliant with CASCADE ability - tested with Bloodbraid Elf
6. Partial Compliant with the follow cards who grant flash ability:

7. Compliant with Æther Storm
8. Allow to check Morph ability
9. Allow to check Facedown status
10. Allow other cards ability to access hidden card info.
11. Allow controller to view hidden card info.


Know issues :
1. The facedown casting cost is constant (probably something could be done)
2. Still not respect some effects limitations like Ethersworn Canonist
3. If there is an effect in play from cards of point 6 above, and there are other effects like Ovinize you will still be able to cast the card.


Lumithread Field - Morph Test Neo - Ver.Omega-1a | Open
Code: Select all
<?xml version="1.0"?>
<CARD_V2 ExportVersion="1">
  <FILENAME text="NEO_MORPH_PACK_002_LUMITHREAD_FIELD_599126186" />
  <CARDNAME text="LUMITHREAD_FIELD" />
  <TITLE>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Lumithread Field]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Champ de lumifilaments]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Campo de hilos de luz]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Feld aus Leuchtfäden]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Campo Lumitrama]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[光糸の場]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[Lumithread Field]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Поле Светящихся Нитей]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Campo Fibroluminal]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="zh-CN"><![CDATA[明缕力场]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="zh-HK"><![CDATA[Lumithread Field]]></LOCALISED_TEXT>
  </TITLE>
  <MULTIVERSEID value="599126186" />
  <ARTID value="599126186" />
  <ARTIST name="Scott Altmann" />
  <CASTING_COST cost="{1}{W}" />
  <FLAVOURTEXT>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Having conquered the Bastion of Suns, the Ota took its light for their own.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Après avoir conquis le Bastion des soleils, les Otas s’emparèrent de sa lumière.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Tras conquistar el Bastión de los Soles, los Ota tomaron su luz para sí mismos.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Nachdem sie die Bastion der Sonnen erobert hatten, verwendeten die Ota deren Licht für sich.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Dopo aver conquistato il Bastione dei Soli, gli Ota si impossessarono della sua luce.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[“太陽の拠点”を征服したオタ族はその光を自分自身のためのものとした。]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[Having conquered the Bastion of Suns, the Ota took its light for their own.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Покорив Бастион Солнц, оты завладели его светом.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Após conquistar o Bastião dos Sóis, os Ota se apoderaram de sua luz.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="zh-CN"><![CDATA[征服太阳堡垒后,欧塔族将此光据为己有。]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="zh-HK"><![CDATA[Having conquered the Bastion of Suns, the Ota took its light for their own.]]></LOCALISED_TEXT>
  </FLAVOURTEXT>
  <TYPE metaname="Enchantment" />
  <EXPANSION value="FUT" />
  <RARITY metaname="C" />
  <STATIC_ABILITY>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Creatures you control get +0/+1.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Les créatures que vous contrôlez gagnent +0/+1.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Las criaturas que controlas obtienen +0/+1. Metamorfosis {1}{W}]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Alle Kreaturen, die du kontrollierst, erhalten +0/+1.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Le creature che controlli prendono +0/+1.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[あなたがコントロールするクリーチャーは+0/+1の修整を受ける。]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[Creatures you control get +0/+1.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Существа под вашим контролем получают +0/+1.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Criaturas que você controla recebem +0/+1,]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="zh-CN"><![CDATA[由你操控的生物得+0/+1。]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="zh-HK"><![CDATA[Creatures you control get +0/+1.]]></LOCALISED_TEXT>
    <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="7C" filter_id="0">
     if FilteredCard() ~= nil then
       local characteristics = FilteredCard():GetCurrentCharacteristics()
       characteristics:Power_Add( 0 )
       characteristics:Toughness_Add( 1 )
     end
    </CONTINUOUS_ACTION>
  </STATIC_ABILITY>

<TRIGGERED_ABILITY replacement_query="1" active_zone="ZONE_ANY">
      <TRIGGER value="BEGINNING_OF_STEP">
       if MTG():GetStep() == STEP_UPKEEP then
     local Chest_Id = Object():GetRef()
     local chest = MTG():DuelDataChest():Get_Chest(Chest_Id)
          if chest ~= nil then
             return false
          else
             MTG():CreateDelayedTrigger(8, nil)
        chest = MTG():DuelDataChest():Make_Chest(Chest_Id)
             return true
          end
       end
       return false
    </TRIGGER>
    <RESOLUTION_TIME_ACTION>
        MTG():PutTokensOntoBattlefield( "NEO_TEST_TOKEN_001_MORPH_2_2_570092001", 1, EffectController(), EffectDC():Make_Chest(0) )
    </RESOLUTION_TIME_ACTION>
    <RESOLUTION_TIME_ACTION>
      local chest = EffectDC():Get_Chest(0)
        if chest  ~= nil then
           local token = chest:Get_NthCardPtr(0)
           if token ~= nil then
         local Chest_Id = Object():GetRef()
              token:StoreCopiableValues(MTG():DuelDataChest():Make_Chest(Chest_Id))   
           end
        end
   </RESOLUTION_TIME_ACTION>
</TRIGGERED_ABILITY>

<STATIC_ABILITY active_zone="ZONE_ANY">
     <CONTINUOUS_ACTION layer="1">
        if Object() ~= nil then
      RSN_Characteristics_Set( Object(), NEO_CHARACTERISTIC_MORPH_TRIGGER, 0 )
           if RSN_Characteristics_GetInt( Object(), NEO_CHARACTERISTIC_FACEDOWN ) == 1 then
           RSN_Characteristics_Set( Object(), NEO_CHARACTERISTIC_MORPH, 0 )
           else
           RSN_Characteristics_Set( Object(), NEO_CHARACTERISTIC_MORPH, 1 )
           end         
        end
    </CONTINUOUS_ACTION>
</STATIC_ABILITY>




<UTILITY_ABILITY qualifier="Alternate" active_zone="ZONE_HAND" >
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Morph {1}{W}]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Mue {1}{W}]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Metamorfosis {1}{W}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Morph {1}{W}]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Metamorfosi {1}{W}]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[Morph {1}{W}]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[Morph {1}{W}]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Morph {1}{W}]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Metamorfose {1}{W}]]></LOCALISED_TEXT>
      <ABILITY_TEXT tag="MODE_CAST_MORPH_FACE_DOWN_PAY_3" />
      <COST type="Generic">
         <PREREQUISITE>
                  if Object():GetZone() ~= ZONE_HAND and Object():GetErstwhileZone() ~= 5 then
                     if EffectController():CanCastSpellForFree(Object()) and EffectController():CanPayManaCost("{3}") then
                       return true
                     else
                       return false
                     end
                  end
             </PREREQUISITE>
      <PLAY_TIME_ACTION>
         EffectController():PayManaCost("{3}")
                   MTG():CreateDelayedTrigger(7, nil)
          local Chest_Id = Object():GetRef()
                   if MTG():DuelDataChest():Get_Chest(Chest_Id) == nil then
              MTG():CreateDelayedTrigger(8, nil)
                   end
                   local delayDC = EffectDC():Make_Chest(0)
                   delayDC:Set_Int(0, Chest_Id)
                   MTG():CreateDelayedTrigger(9, delayDC)
              local characteristics = Object():GetCurrentCharacteristics()
         local card_type = characteristics:CardType_GetWritable()
         local sub_type = characteristics:SubType_GetWritable()
         sub_type:ClearAllOfType( CARD_TYPE_ENCHANTMENT )
         card_type:Clear()
              card_type:Add( CARD_TYPE_CREATURE )
         Object():GetCurrentCharacteristics():Colour_Get():Clear()
             </PLAY_TIME_ACTION>
         </COST>
   </UTILITY_ABILITY>


  <TRIGGERED_ABILITY resource_id="7" replacement_query="1" priority="20">
    <TRIGGER value="STATE_BASED_EFFECTS" pre_trigger="1" />
    <CLEANUP fire_once="1" />

         <PLAY_TIME_ACTION>
           if Object() ~= nil then
          local Chest_Id = Object():GetRef()
                   if MTG():DuelDataChest():Get_Chest(Chest_Id) == nil then
             MTG():PutTokensOntoBattlefield( "NEO_TEST_TOKEN_001_MORPH_2_2_570092001", 1, EffectController(), EffectDC():Make_Chest(0) )
                   else
                         Object():UseCopiableValues(MTG():DuelDataChest():Get_Chest(Chest_Id))
                   end
                end
       </PLAY_TIME_ACTION>
       <PLAY_TIME_ACTION>
                if Object() ~= nil then
         local Chest_Id = Object():GetRef()
                   if MTG():DuelDataChest():Get_Chest(Chest_Id) == nil then
               local token_chest = EffectDC():Get_Chest(0)
                      if token_chest  ~= nil then
                         local token = token_chest:Get_NthCardPtr(0)
                         if token ~= nil then
                            token:StoreCopiableValues(MTG():DuelDataChest():Make_Chest(Chest_Id))   
                  Object():UseCopiableValues(MTG():DuelDataChest():Get_Chest(Chest_Id))   
                         end
                      end
                   end
                end
        </PLAY_TIME_ACTION>
          <CONTINUOUS_ACTION layer="1">
                if Object() ~= nil then
         local Chest_Id = Object():GetRef()
                   if MTG():DuelDataChest():Get_Chest(Chest_Id) ~= nil then
                         Object():UseCopiableValues(MTG():DuelDataChest():Get_Chest(Chest_Id))
                  RSN_Characteristics_Set( Object(), NEO_CHARACTERISTIC_FACEDOWN, 1 )
           Object():GetCurrentCharacteristics():GrantAbility(10)
          Object():GetCurrentCharacteristics():GrantAbility(12)
          Object():GetCurrentCharacteristics():GrantAbility(13)
         end
                end
         </CONTINUOUS_ACTION>
      <DURATION>
        return RSN_Characteristics_GetInt( Object(), NEO_CHARACTERISTIC_MORPH_TRIGGER ) == 1
      </DURATION>
   </TRIGGERED_ABILITY>


<UTILITY_ABILITY resource_id="40">
      <ABILITY_TEXT tag="MODE_CAST_MORPH_FACE_DOWN_PAY_3" />
      <COST type="Generic">
         <PREREQUISITE>
                     return EffectController():CanPayManaCost("{3}")
             </PREREQUISITE>
      <PLAY_TIME_ACTION>
         EffectController():PayManaCost("{3}")
             </PLAY_TIME_ACTION>
         </COST>
   </UTILITY_ABILITY>


  <ACTIVATED_ABILITY forced_skip="1" active_zone="ZONE_HAND" >
  <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[You may Cast this face down as a 2/2 creature for {3}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Vous pouvez jouer cette carte face cachée comme une créature 2/2 pour {3}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Puedes jugar esta carta boca abajo como una criatura 2/2 pagando {3}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Du kannst diese Karte verdeckt für {3} als eine 2/2 Kreatur spielen.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Gioca questa carta a faccia in giù come una creatura 2/2 pagando {3}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[You may Cast this face down as a 2/2 creature for {3}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[You may Cast this face down as a 2/2 creature for {3}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[You may Cast this face down as a 2/2 creature for {3}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Você pode baixar este card com a face voltada para baixo como uma criatura 2/2 por {3}]]></LOCALISED_TEXT>
   <COST mana_cost="{0}" type="Mana" />
        <AVAILABILITY>
      return EffectController():CanPayManaCost("{3}")
        </AVAILABILITY>
         <RESOLUTION_TIME_ACTION>
           if Object() ~= nil then
          local Chest_Id = Object():GetRef()
         local delayDC = EffectDC():Make_Chest(1)
                   delayDC:Set_Int(0, Chest_Id)
                   MTG():CreateDelayedTrigger(9, delayDC)
                   if MTG():DuelDataChest():Get_Chest(Chest_Id) == nil then
          MTG():CreateDelayedTrigger(8, nil)
             MTG():PutTokensOntoBattlefield( "NEO_TEST_TOKEN_001_MORPH_2_2_570092001", 1, EffectController(), EffectDC():Make_Chest(0) )
                   else
                         Object():UseCopiableValues(MTG():DuelDataChest():Get_Chest(Chest_Id))
                   end
                end
       </RESOLUTION_TIME_ACTION>
       <RESOLUTION_TIME_ACTION>
                if Object() ~= nil then
         local Chest_Id = Object():GetRef()
                   if MTG():DuelDataChest():Get_Chest(Chest_Id) == nil then
               local token_chest = EffectDC():Get_Chest(0)
                      if token_chest  ~= nil then
                         local token = token_chest:Get_NthCardPtr(0)
                         if token ~= nil then
                            token:StoreCopiableValues(MTG():DuelDataChest():Make_Chest(Chest_Id))   
                  Object():UseCopiableValues(MTG():DuelDataChest():Get_Chest(Chest_Id))   
                         end
                      end
                   end

                end
        </RESOLUTION_TIME_ACTION>
       <RESOLUTION_TIME_ACTION>
       if Object() ~= nil then
              MTG():CreateDelayedTrigger(17, nil)
                 end
        </RESOLUTION_TIME_ACTION>
          <CONTINUOUS_ACTION layer="1">
                if Object() ~= nil then
         local Chest_Id = Object():GetRef()
                   if MTG():DuelDataChest():Get_Chest(Chest_Id) ~= nil then
                         Object():UseCopiableValues(MTG():DuelDataChest():Get_Chest(Chest_Id))
                  RSN_Characteristics_Set( Object(), NEO_CHARACTERISTIC_FACEDOWN, 1 )
           Object():GetCurrentCharacteristics():GrantAbility(10)
          Object():GetCurrentCharacteristics():GrantAbility(12)
          Object():GetCurrentCharacteristics():GrantAbility(13)
         end
                end
         </CONTINUOUS_ACTION>
      <DURATION>
        return RSN_Characteristics_GetInt( Object(), NEO_CHARACTERISTIC_MORPH_TRIGGER ) == 1
      </DURATION>

   </ACTIVATED_ABILITY>




  <TRIGGERED_ABILITY resource_id="17" replacement_query="1">
    <TRIGGER value="STATE_BASED_EFFECTS" pre_trigger="1" />
    <CLEANUP fire_once="1" />
       <RESOLUTION_TIME_ACTION>
         MTG():ReevaluateContinuousEffects()
        </RESOLUTION_TIME_ACTION>

      <PLAY_TIME_ACTION>
         local value = 0
          if EffectSource():CanBePlayed(EffectController()) == true or EffectController():CanCastSpellUsingResourceCost( EffectSource(), 40 ) == true then
                      if EffectController():MyTurn() == true then
                         if MTG():GetStep() == STEP_MAIN_1 or MTG():GetStep() == STEP_MAIN_2 or CheckThisCreatureForCharacteristic(CHARACTERISTIC_FLASH, EffectSource()) == 1 or CheckCardGrantFlashControlledBy(EffectController()) == 1 or CheckCardGrantFlashControlledByOthers(EffectController()) == 1 then
                         value = 1
                         end
            elseif CheckThisCreatureForCharacteristic(CHARACTERISTIC_FLASH, EffectSource()) == 1 or CheckCardGrantFlashControlledBy(EffectController()) == 1 or CheckCardGrantFlashControlledByOthers(EffectController()) == 1 then
              value = 1
                      end
                   end
                   if CheckCardOverrideCreatureCastControlledByAny() == 1 then
                      value = 0
                   end
                   EffectDC():Set_Int(8, value)
                   if value == 1 then
              EffectController():BeginNewMultipleChoice()
               EffectController():AddMultipleChoiceAnswer( "MODE_CAST_MORPH_FACE_DOWN_PAY_3", EffectController():CanPayManaCost("{3}"))
                    EffectController():AddMultipleChoiceAnswer( "CARD_QUERY__NEO_OPTION_DO_NOTHING" )
          EffectController():AskMultipleChoiceQuestion( "MODE_MORPH_INFO_CARD" )
                    end
      </PLAY_TIME_ACTION>

      <RESOLUTION_TIME_ACTION>
         local valueA = EffectDC():Get_Int(8)
                   if valueA == 1 then
           local value = EffectController():GetMultipleChoiceResult()
                     if value == 0 then
          RSN_Characteristics_Set( Object(), NEO_CHARACTERISTIC_FACEDOWN, 1 )
                if EffectController():CanCastSpellUsingResourceCost( EffectSource(), 40 ) then
                  EffectController():CastSpellUsingResourceCost( EffectSource(), 40 )
               end
                     else
          RSN_Characteristics_Set( Object(), NEO_CHARACTERISTIC_MORPH_TRIGGER, 1 )
          RSN_Characteristics_Set( Object(), NEO_CHARACTERISTIC_FACEDOWN, 0 )
                     end
       else
           RSN_Characteristics_Set( Object(), NEO_CHARACTERISTIC_MORPH_TRIGGER, 1 )
           RSN_Characteristics_Set( Object(), NEO_CHARACTERISTIC_FACEDOWN, 0 )
                 end
      </RESOLUTION_TIME_ACTION>
   </TRIGGERED_ABILITY>

  <TRIGGERED_ABILITY resource_id="8" replacement_effect="1" active_zone="ZONE_ANY" priority="-1">
   <TRIGGER value="ZONECHANGE_CONSIDERED" to_zone="ZONE_BATTLEFIELD" from_zone="ZONE_ANY" pre_trigger="1">
     if TriggerObject() ~= nil and TriggerObject():GetCardName() == "" then
        if TriggerObject():GetErstwhileZone() == 0 then
           MTG():OverrideEvent()
           return true
        end
    end
    return false
    </TRIGGER>
   <CLEANUP fire_once="1" />
  </TRIGGERED_ABILITY>

  <TRIGGERED_ABILITY resource_id="9" replacement_effect="1" active_zone="ZONE_ANY" priority="-1">
   <TRIGGER value="ZONECHANGE_END" simple_qualifier="self" to_zone="ZONE_BATTLEFIELD" >
     if TriggerObject() ~= nil and RSN_Characteristics_GetInt( Object(), NEO_CHARACTERISTIC_FACEDOWN ) == 1 then
        local oDC = RSN_GetObjectDC( Object(), true )
        local value = EffectDC():Get_Int(0)
        oDC:Int_Set( 585, value )
        return true
     end
     return false
    </TRIGGER>
   <CLEANUP fire_once="1" />
  </TRIGGERED_ABILITY>

   <ACTIVATED_ABILITY resource_id="10" forced_skip="1" >
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Morph (|View hidden info of the card|)]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Mue  (|Voir les informations cachées de la carte|)]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Metamorfosis -(|Ver la informacion oculta de la carta|)]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Morph (|Ausgeblendete Informationen der Karte zeigen|)]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Metamorfosi (|Visualizza info nascoste della carta|)]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[Morph  (カードの隠された情報を見る)]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[Morph  (카드의 숨겨진 정보를보기)]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Morph (|Посмотреть скрытую информацию карты|)]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Metamorfose (|Ver informação oculta do cartão|)]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="zh-CN"><![CDATA[Morph  (|View hidden info of the card|)]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="zh-HK"><![CDATA[Morph  (|View hidden info of the card|)]]></LOCALISED_TEXT>
      <COST mana_cost="{0}" type="Mana" />
      <PLAY_TIME_ACTION>
            local oDC = RSN_GetObjectDC( Object(), false )
                 local value =  oDC:Int_Get(585)
                 if value &lt; 0 then
                    value = (-value)
                 end
                 local QueryString = "CARD_QUERY_MORPH_"..value
           EffectController():BeginNewMultipleChoice()
            EffectController():AddMultipleChoiceAnswer( QueryString, EffectController():CanPayManaCost("{1}{W}") )
                 EffectController():AddMultipleChoiceAnswer( "CARD_QUERY__NEO_OPTION_DO_NOTHING" )
       EffectController():AskMultipleChoiceQuestion( "MODE_MORPH_INFO_CARD", Object() )
      </PLAY_TIME_ACTION>

      <RESOLUTION_TIME_ACTION>
           local value = EffectController():GetMultipleChoiceResult()
                      if value == 0 then
          EffectController():PayManaCost("{1}{W}")
                RSN_Characteristics_Set( Object(), NEO_CHARACTERISTIC_MORPH_TRIGGER, 1 )
          RSN_Characteristics_Set( Object(), NEO_CHARACTERISTIC_FACEDOWN, 0 )
               MTG():FireTrigger( TRIGGER_TURNED_FACE_UP, Object() )
                      end
      </RESOLUTION_TIME_ACTION>
    <AI_AVAILABILITY type="in_response" />
    <AI_AVAILABILITY window_step="begin_combat" window_turn="their_turn" type="window" />
    <AI_AVAILABILITY window_step="declare_attackers" window_turn="their_turn" type="window" />
    <AI_AVAILABILITY window_step="main_1" window_turn="my_turn" type="window" />
    <AI_AVAILABILITY window_step="main_2" window_turn="my_turn" type="window" />
    <AI_AVAILABILITY window_step="declare_blockers" type="window" />
    <AI_AVAILABILITY window_step="end_of_turn" type="window" />
   </ACTIVATED_ABILITY>


  <TRIGGERED_ABILITY resource_id="12" replacement_effect="1">
  <TRIGGER value="ZONECHANGE_CONSIDERED" simple_qualifier="self" to_zone="ZONE_ANY" from_zone="ZONE_BATTLEFIELD" pre_trigger="1">
           return true
    </TRIGGER>
   <RESOLUTION_TIME_ACTION>
         RSN_Characteristics_Set( Object(), NEO_CHARACTERISTIC_MORPH_TRIGGER, 1 )
         RSN_Characteristics_Set( Object(), NEO_CHARACTERISTIC_FACEDOWN, 0 )
         MTG():ReevaluateContinuousEffects()
   </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>

  <TRIGGERED_ABILITY resource_id="13" replacement_effect="1" active_zone="ZONE_STACK">
  <TRIGGER value="SPELL_BEING_COUNTERED" simple_qualifier="self" pre_trigger="1" />
     <RESOLUTION_TIME_ACTION>
   RSN_Characteristics_Set( Object(), NEO_CHARACTERISTIC_MORPH_TRIGGER, 1 )
   RSN_Characteristics_Set( Object(), NEO_CHARACTERISTIC_FACEDOWN, 0 )
   MTG():ReevaluateContinuousEffects()
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>

  <TOKEN_REGISTRATION reservation="1" type="NEO_TEST_TOKEN_001_MORPH_2_2_570092001" />
  <SFX text="COMBAT_BLUNT_LARGE_ATTACK" power_boundary_min="4" power_boundary_max="-1" />
  <SFX text="COMBAT_BLUNT_SMALL_ATTACK" power_boundary_min="1" power_boundary_max="3" />
</CARD_V2>
IMPORTANT TO USE THIS CARD YOU NEED SOME CUSTOM FUNCTION INCLUDED INSIDE THE ATTACHED FILE.
Last edited by NeoAnderson on 16 Sep 2014, 16:05, edited 1 time in total.
NeoAnderson
 
Posts: 914
Joined: 10 Sep 2013, 07:49
Has thanked: 18 times
Been thanked: 139 times

Re: Morph tests

Postby braquio » 14 Sep 2014, 02:26

Only one question,
5. Compliant with CASCADE ability - tested with Bloodbraid Elf
with cascade shouldn't let you cast morphed cause is an alternative cost and cascade lets you play for free so alternative cost are not allowed, isn't it?
And the same for omniscience.
____________________________________________________________________________________________________________________________
Braquio Dotp2014 DLC
Alternative Sealed Campaigns for DotP 2014
User avatar
braquio
 
Posts: 143
Joined: 16 Feb 2014, 19:21
Has thanked: 15 times
Been thanked: 9 times

Re: Morph tests

Postby NeoAnderson » 14 Sep 2014, 02:40

braquio wrote:Only one question,
5. Compliant with CASCADE ability - tested with Bloodbraid Elf
with cascade shouldn't let you cast morphed cause is an alternative cost and cascade lets you play for free so alternative cost are not allowed, isn't it?
And the same for omniscience.
Right my friend when another ability let you cast for free, as like CASCADE, or Omniscience is already an alternative cost so you can only cast normal mode for free.
What do you think of this version could be better than the other one??? Now should not see any card exchange or other lag...
NeoAnderson
 
Posts: 914
Joined: 10 Sep 2013, 07:49
Has thanked: 18 times
Been thanked: 139 times

Re: Morph tests

Postby NeoAnderson » 14 Sep 2014, 18:40

MAJOR UPDATE :
Right now i made it compliant with the follow situations :
1. Compliant with cards like Nightveil Specter that grants the ability to play card not from hand.
2. Compliant with cards like Omniscience that grants the ability to cast for free.
3. Compliant with Primeval Bounty
4. Compliant with Iona, Shield of Emeria
5. Compliant with CASCADE ability - tested with Bloodbraid Elf
6. Partial Compliant with the follow cards who grant flash ability:

7. Compliant with Æther Storm
8. Allow to check Morph ability
9. Allow to check Facedown status
10. Allow other cards ability to access hidden card info.
11. Allow controller to view hidden card info.
12. Compliant with Eidolon of Rhetoric and Angelic Arbiter
13. Compliant with Ethersworn Canonist
14. Compliant with Grid Monitor and Steel Golem
15. Dinamic Facedown cost mostly compliant with cards :


Know issues :
1. If there is an effect like Ovinize in play on cards of points (6,13,15) above, facedown is still affected by source effect as that card hasn't lose the abilities.

Lumithread Field - MORPH TEST NEO - VER.OMEGA-1B | Open
Code: Select all
<?xml version="1.0"?>
<CARD_V2 ExportVersion="1">
  <FILENAME text="NEO_MORPH_PACK_002_LUMITHREAD_FIELD_599126186" />
  <CARDNAME text="LUMITHREAD_FIELD" />
  <TITLE>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Lumithread Field]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Champ de lumifilaments]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Campo de hilos de luz]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Feld aus Leuchtfäden]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Campo Lumitrama]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[光糸の場]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[Lumithread Field]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Поле Светящихся Нитей]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Campo Fibroluminal]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="zh-CN"><![CDATA[明缕力场]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="zh-HK"><![CDATA[Lumithread Field]]></LOCALISED_TEXT>
  </TITLE>
  <MULTIVERSEID value="599126186" />
  <ARTID value="599126186" />
  <ARTIST name="Scott Altmann" />
  <CASTING_COST cost="{1}{W}" />
  <FLAVOURTEXT>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Having conquered the Bastion of Suns, the Ota took its light for their own.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Après avoir conquis le Bastion des soleils, les Otas s’emparèrent de sa lumière.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Tras conquistar el Bastión de los Soles, los Ota tomaron su luz para sí mismos.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Nachdem sie die Bastion der Sonnen erobert hatten, verwendeten die Ota deren Licht für sich.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Dopo aver conquistato il Bastione dei Soli, gli Ota si impossessarono della sua luce.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[“太陽の拠点”を征服したオタ族はその光を自分自身のためのものとした。]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[Having conquered the Bastion of Suns, the Ota took its light for their own.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Покорив Бастион Солнц, оты завладели его светом.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Após conquistar o Bastião dos Sóis, os Ota se apoderaram de sua luz.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="zh-CN"><![CDATA[征服太阳堡垒后,欧塔族将此光据为己有。]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="zh-HK"><![CDATA[Having conquered the Bastion of Suns, the Ota took its light for their own.]]></LOCALISED_TEXT>
  </FLAVOURTEXT>
  <TYPE metaname="Enchantment" />
  <EXPANSION value="FUT" />
  <RARITY metaname="C" />
  <STATIC_ABILITY>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Creatures you control get +0/+1.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Les créatures que vous contrôlez gagnent +0/+1.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Las criaturas que controlas obtienen +0/+1. Metamorfosis {1}{W}]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Alle Kreaturen, die du kontrollierst, erhalten +0/+1.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Le creature che controlli prendono +0/+1.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[あなたがコントロールするクリーチャーは+0/+1の修整を受ける。]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[Creatures you control get +0/+1.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Существа под вашим контролем получают +0/+1.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Criaturas que você controla recebem +0/+1,]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="zh-CN"><![CDATA[由你操控的生物得+0/+1。]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="zh-HK"><![CDATA[Creatures you control get +0/+1.]]></LOCALISED_TEXT>
    <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="7C" filter_id="0">
     if FilteredCard() ~= nil then
       local characteristics = FilteredCard():GetCurrentCharacteristics()
       characteristics:Power_Add( 0 )
       characteristics:Toughness_Add( 1 )
     end
    </CONTINUOUS_ACTION>
  </STATIC_ABILITY>

<TRIGGERED_ABILITY replacement_query="1" active_zone="ZONE_ANY">
      <TRIGGER value="BEGINNING_OF_STEP">
       if MTG():GetStep() == STEP_UPKEEP then
     local Chest_Id = Object():GetRef()
     local chest = MTG():DuelDataChest():Get_Chest(Chest_Id)
          if chest ~= nil then
             return false
          else
             MTG():CreateDelayedTrigger(8, nil)
        chest = MTG():DuelDataChest():Make_Chest(Chest_Id)
             return true
          end
       end
       return false
    </TRIGGER>
    <RESOLUTION_TIME_ACTION>
        MTG():PutTokensOntoBattlefield( "NEO_TEST_TOKEN_001_MORPH_2_2_570092001", 1, EffectController(), EffectDC():Make_Chest(0) )
    </RESOLUTION_TIME_ACTION>
    <RESOLUTION_TIME_ACTION>
      local chest = EffectDC():Get_Chest(0)
        if chest  ~= nil then
           local token = chest:Get_NthCardPtr(0)
           if token ~= nil then
         local Chest_Id = Object():GetRef()
              token:StoreCopiableValues(MTG():DuelDataChest():Make_Chest(Chest_Id))   
           end
        end
   </RESOLUTION_TIME_ACTION>
</TRIGGERED_ABILITY>

<STATIC_ABILITY active_zone="ZONE_ANY">
     <CONTINUOUS_ACTION layer="1">
        if Object() ~= nil then
      RSN_Characteristics_Set( Object(), NEO_CHARACTERISTIC_MORPH_TRIGGER, 0 )
           if RSN_Characteristics_GetInt( Object(), NEO_CHARACTERISTIC_FACEDOWN ) == 1 then
           RSN_Characteristics_Set( Object(), NEO_CHARACTERISTIC_MORPH, 0 )
           else
           RSN_Characteristics_Set( Object(), NEO_CHARACTERISTIC_MORPH, 1 )
           end         
        end
    </CONTINUOUS_ACTION>
</STATIC_ABILITY>

<UTILITY_ABILITY qualifier="Alternate" active_zone="ZONE_HAND" >
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Morph {1}{W}]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Mue {1}{W}]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Metamorfosis {1}{W}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Morph {1}{W}]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Metamorfosi {1}{W}]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[Morph {1}{W}]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[Morph {1}{W}]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Morph {1}{W}]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Metamorfose {1}{W}]]></LOCALISED_TEXT>
      <ABILITY_TEXT tag="MODE_CAST_MORPH_FACE_DOWN_PAY_3" />
      <COST type="Generic">
         <PREREQUISITE>
                  if Object():GetZone() ~= ZONE_HAND and Object():GetErstwhileZone() ~= 5 then
           local UpdatedCost = UpdateFaceDownCastingCost(EffectController())
                     local FaceDownStringCost = "{"..UpdatedCost.."}"
                     if EffectController():CanCastSpellForFree(Object()) and EffectController():CanPayManaCost(FaceDownStringCost) then
                       return true
                     else
                       return false
                     end
                  end
             </PREREQUISITE>
      <PLAY_TIME_ACTION>
         local UpdatedCost = UpdateFaceDownCastingCost(EffectController())
                   local FaceDownStringCost = "{"..UpdatedCost.."}"
         EffectController():PayManaCost(FaceDownStringCost)
                   MTG():CreateDelayedTrigger(7, nil)
          local Chest_Id = Object():GetRef()
                   if MTG():DuelDataChest():Get_Chest(Chest_Id) == nil then
              MTG():CreateDelayedTrigger(8, nil)
                   end
                   local delayDC = EffectDC():Make_Chest(0)
                   delayDC:Set_Int(0, Chest_Id)
                   MTG():CreateDelayedTrigger(9, delayDC)
              local characteristics = Object():GetCurrentCharacteristics()
         local card_type = characteristics:CardType_GetWritable()
         local sub_type = characteristics:SubType_GetWritable()
         sub_type:ClearAllOfType( CARD_TYPE_ENCHANTMENT )
         card_type:Clear()
              card_type:Add( CARD_TYPE_CREATURE )
         Object():GetCurrentCharacteristics():Colour_Get():Clear()
             </PLAY_TIME_ACTION>
         </COST>
   </UTILITY_ABILITY>

  <TRIGGERED_ABILITY resource_id="7" replacement_query="1" priority="20">
    <TRIGGER value="STATE_BASED_EFFECTS" pre_trigger="1" />
    <CLEANUP fire_once="1" />

         <PLAY_TIME_ACTION>
           if Object() ~= nil then
          local Chest_Id = Object():GetRef()
                   if MTG():DuelDataChest():Get_Chest(Chest_Id) == nil then
             MTG():PutTokensOntoBattlefield( "NEO_TEST_TOKEN_001_MORPH_2_2_570092001", 1, EffectController(), EffectDC():Make_Chest(0) )
                   else
                         Object():UseCopiableValues(MTG():DuelDataChest():Get_Chest(Chest_Id))
                   end
                end
       </PLAY_TIME_ACTION>
       <PLAY_TIME_ACTION>
                if Object() ~= nil then
         local Chest_Id = Object():GetRef()
                   if MTG():DuelDataChest():Get_Chest(Chest_Id) == nil then
               local token_chest = EffectDC():Get_Chest(0)
                      if token_chest  ~= nil then
                         local token = token_chest:Get_NthCardPtr(0)
                         if token ~= nil then
                            token:StoreCopiableValues(MTG():DuelDataChest():Make_Chest(Chest_Id))   
                  Object():UseCopiableValues(MTG():DuelDataChest():Get_Chest(Chest_Id))   
                         end
                      end
                   end
                end
        </PLAY_TIME_ACTION>
          <CONTINUOUS_ACTION layer="1">
                if Object() ~= nil then
         local Chest_Id = Object():GetRef()
                   if MTG():DuelDataChest():Get_Chest(Chest_Id) ~= nil then
                         Object():UseCopiableValues(MTG():DuelDataChest():Get_Chest(Chest_Id))
                  RSN_Characteristics_Set( Object(), NEO_CHARACTERISTIC_FACEDOWN, 1 )
           Object():GetCurrentCharacteristics():GrantAbility(10)
          Object():GetCurrentCharacteristics():GrantAbility(12)
          Object():GetCurrentCharacteristics():GrantAbility(13)
         end
                end
         </CONTINUOUS_ACTION>
      <DURATION>
        return RSN_Characteristics_GetInt( Object(), NEO_CHARACTERISTIC_MORPH_TRIGGER ) == 1
      </DURATION>
   </TRIGGERED_ABILITY>

<UTILITY_ABILITY resource_id="40">
      <ABILITY_TEXT tag="MODE_CAST_MORPH_FACE_DOWN_PAY_3" />
      <COST type="Generic">
       <PREREQUISITE>
           local UpdatedCost = UpdateFaceDownCastingCost(EffectController())
                     local FaceDownStringCost = "{"..UpdatedCost.."}"
                     return EffectController():CanPayManaCost(FaceDownStringCost)
             </PREREQUISITE>
      <PLAY_TIME_ACTION>
           local UpdatedCost = UpdateFaceDownCastingCost(EffectController())
                     local FaceDownStringCost = "{"..UpdatedCost.."}"
         EffectController():PayManaCost(FaceDownStringCost)
             </PLAY_TIME_ACTION>
         </COST>
   </UTILITY_ABILITY>

  <ACTIVATED_ABILITY forced_skip="1" active_zone="ZONE_HAND" >
  <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[You may Cast this face down as a 2/2 creature for {3}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Vous pouvez jouer cette carte face cachée comme une créature 2/2 pour {3}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Puedes jugar esta carta boca abajo como una criatura 2/2 pagando {3}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Du kannst diese Karte verdeckt für {3} als eine 2/2 Kreatur spielen.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Gioca questa carta a faccia in giù come una creatura 2/2 pagando {3}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[You may Cast this face down as a 2/2 creature for {3}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[You may Cast this face down as a 2/2 creature for {3}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[You may Cast this face down as a 2/2 creature for {3}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Você pode baixar este card com a face voltada para baixo como uma criatura 2/2 por {3}]]></LOCALISED_TEXT>
   <COST mana_cost="{0}" type="Mana" />
        <AVAILABILITY>
      local UpdatedCost = FakeFaceDownCastingCost(EffectController())
                local FaceDownStringCost = "{"..UpdatedCost.."}"
      return EffectController():CanPayManaCost(FaceDownStringCost)
        </AVAILABILITY>
         <RESOLUTION_TIME_ACTION>
           if Object() ~= nil then
          local Chest_Id = Object():GetRef()
         local delayDC = EffectDC():Make_Chest(1)
                   delayDC:Set_Int(0, Chest_Id)
                   MTG():CreateDelayedTrigger(9, delayDC)
                   if MTG():DuelDataChest():Get_Chest(Chest_Id) == nil then
          MTG():CreateDelayedTrigger(8, nil)
             MTG():PutTokensOntoBattlefield( "NEO_TEST_TOKEN_001_MORPH_2_2_570092001", 1, EffectController(), EffectDC():Make_Chest(0) )
                   else
                         Object():UseCopiableValues(MTG():DuelDataChest():Get_Chest(Chest_Id))
                   end
                end
       </RESOLUTION_TIME_ACTION>
       <RESOLUTION_TIME_ACTION>
                if Object() ~= nil then
         local Chest_Id = Object():GetRef()
                   if MTG():DuelDataChest():Get_Chest(Chest_Id) == nil then
               local token_chest = EffectDC():Get_Chest(0)
                      if token_chest  ~= nil then
                         local token = token_chest:Get_NthCardPtr(0)
                         if token ~= nil then
                            token:StoreCopiableValues(MTG():DuelDataChest():Make_Chest(Chest_Id))   
                  Object():UseCopiableValues(MTG():DuelDataChest():Get_Chest(Chest_Id))   
                         end
                      end
                   end

                end
        </RESOLUTION_TIME_ACTION>
       <RESOLUTION_TIME_ACTION>
       if Object() ~= nil then
              MTG():CreateDelayedTrigger(17, nil)
                 end
        </RESOLUTION_TIME_ACTION>
          <CONTINUOUS_ACTION layer="1">
                if Object() ~= nil then
         local Chest_Id = Object():GetRef()
                   if MTG():DuelDataChest():Get_Chest(Chest_Id) ~= nil then
                         Object():UseCopiableValues(MTG():DuelDataChest():Get_Chest(Chest_Id))
                  RSN_Characteristics_Set( Object(), NEO_CHARACTERISTIC_FACEDOWN, 1 )
           Object():GetCurrentCharacteristics():GrantAbility(10)
          Object():GetCurrentCharacteristics():GrantAbility(12)
          Object():GetCurrentCharacteristics():GrantAbility(13)
         end
                end
         </CONTINUOUS_ACTION>
      <DURATION>
        return RSN_Characteristics_GetInt( Object(), NEO_CHARACTERISTIC_MORPH_TRIGGER ) == 1
      </DURATION>

   </ACTIVATED_ABILITY>

  <TRIGGERED_ABILITY resource_id="17" replacement_query="1">
    <TRIGGER value="STATE_BASED_EFFECTS" pre_trigger="1" />
    <CLEANUP fire_once="1" />
       <RESOLUTION_TIME_ACTION>
         MTG():ReevaluateContinuousEffects()
        </RESOLUTION_TIME_ACTION>

      <PLAY_TIME_ACTION>
           local UpdatedCost = FakeFaceDownCastingCost(EffectController())
                     local FaceDownStringCost = "{"..UpdatedCost.."}"
         local value = 0
          if EffectSource():CanBePlayed(EffectController()) == true or EffectController():CanCastSpellUsingResourceCost( EffectSource(), 40 ) == true then
                      if EffectController():MyTurn() == true then
                         if MTG():GetStep() == STEP_MAIN_1 or MTG():GetStep() == STEP_MAIN_2 or CheckThisCreatureForCharacteristic(CHARACTERISTIC_FLASH, EffectSource()) == 1 or CheckCardGrantFlashControlledBy(EffectController()) == 1 or CheckCardGrantFlashControlledByOthers(EffectController()) == 1 then
                         value = 1
                         end
            elseif CheckThisCreatureForCharacteristic(CHARACTERISTIC_FLASH, EffectSource()) == 1 or CheckCardGrantFlashControlledBy(EffectController()) == 1 or CheckCardGrantFlashControlledByOthers(EffectController()) == 1 then
              value = 1
                      end
                   end
         local EtherswornCanonist = FakeEtherswornCanonistCheck(EffectController())
                   local OvverideCreatureCast = CheckCardOverrideCreatureCastControlledBy(EffectController())
                   if (CheckCardOverrideCreatureCastControlledByAny() == 1) or (EtherswornCanonist == 1) or (OvverideCreatureCast == 1) then
                      value = 0
                   end
                   EffectDC():Set_Int(8, value)
                   if value == 1 then
              EffectController():BeginNewMultipleChoice()
               EffectController():AddMultipleChoiceAnswer( "MODE_CAST_MORPH_FACE_DOWN_PAY_3", EffectController():CanPayManaCost(FaceDownStringCost))
                    EffectController():AddMultipleChoiceAnswer( "CARD_QUERY__NEO_OPTION_DO_NOTHING" )
          EffectController():AskMultipleChoiceQuestion( "MODE_MORPH_INFO_CARD" )
                    end
      </PLAY_TIME_ACTION>

      <RESOLUTION_TIME_ACTION>
         local valueA = EffectDC():Get_Int(8)
                   if valueA == 1 then
           local value = EffectController():GetMultipleChoiceResult()
                     if value == 0 then
          RSN_Characteristics_Set( Object(), NEO_CHARACTERISTIC_FACEDOWN, 1 )
                if EffectController():CanCastSpellUsingResourceCost( EffectSource(), 40 ) then
                  EffectController():CastSpellUsingResourceCost( EffectSource(), 40 )
               end
                     else
          RSN_Characteristics_Set( Object(), NEO_CHARACTERISTIC_MORPH_TRIGGER, 1 )
          RSN_Characteristics_Set( Object(), NEO_CHARACTERISTIC_FACEDOWN, 0 )
                     end
       else
           RSN_Characteristics_Set( Object(), NEO_CHARACTERISTIC_MORPH_TRIGGER, 1 )
           RSN_Characteristics_Set( Object(), NEO_CHARACTERISTIC_FACEDOWN, 0 )
                 end
      </RESOLUTION_TIME_ACTION>
   </TRIGGERED_ABILITY>

  <TRIGGERED_ABILITY resource_id="8" replacement_effect="1" active_zone="ZONE_ANY" priority="-1">
   <TRIGGER value="ZONECHANGE_CONSIDERED" to_zone="ZONE_BATTLEFIELD" from_zone="ZONE_ANY" pre_trigger="1">
     if TriggerObject() ~= nil and TriggerObject():GetCardName() == "" then
        if TriggerObject():GetErstwhileZone() == 0 then
           MTG():OverrideEvent()
           return true
        end
    end
    return false
    </TRIGGER>
   <CLEANUP fire_once="1" />
  </TRIGGERED_ABILITY>

  <TRIGGERED_ABILITY resource_id="9" replacement_effect="1" active_zone="ZONE_ANY" priority="-1">
   <TRIGGER value="ZONECHANGE_END" simple_qualifier="self" to_zone="ZONE_BATTLEFIELD" >
     if TriggerObject() ~= nil and RSN_Characteristics_GetInt( Object(), NEO_CHARACTERISTIC_FACEDOWN ) == 1 then
        local oDC = RSN_GetObjectDC( Object(), true )
        local value = EffectDC():Get_Int(0)
        oDC:Int_Set( 585, value )
        return true
     end
     return false
    </TRIGGER>
   <CLEANUP fire_once="1" />
  </TRIGGERED_ABILITY>

   <ACTIVATED_ABILITY resource_id="10" forced_skip="1" >
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Morph (|View hidden info of the card|)]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Mue  (|Voir les informations cachées de la carte|)]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Metamorfosis -(|Ver la informacion oculta de la carta|)]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Morph (|Ausgeblendete Informationen der Karte zeigen|)]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Metamorfosi (|Visualizza info nascoste della carta|)]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[Morph  (カードの隠された情報を見る)]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[Morph  (카드의 숨겨진 정보를보기)]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Morph (|Посмотреть скрытую информацию карты|)]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Metamorfose (|Ver informação oculta do cartão|)]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="zh-CN"><![CDATA[Morph  (|View hidden info of the card|)]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="zh-HK"><![CDATA[Morph  (|View hidden info of the card|)]]></LOCALISED_TEXT>
      <COST mana_cost="{0}" type="Mana" />
      <PLAY_TIME_ACTION>
            local oDC = RSN_GetObjectDC( Object(), false )
                 local value =  oDC:Int_Get(585)
                 if value &lt; 0 then
                    value = (-value)
                 end
                 local QueryString = "CARD_QUERY_MORPH_"..value
           EffectController():BeginNewMultipleChoice()
            EffectController():AddMultipleChoiceAnswer( QueryString, EffectController():CanPayManaCost("{1}{W}") )
                 EffectController():AddMultipleChoiceAnswer( "CARD_QUERY__NEO_OPTION_DO_NOTHING" )
       EffectController():AskMultipleChoiceQuestion( "MODE_MORPH_INFO_CARD", Object() )
      </PLAY_TIME_ACTION>

      <RESOLUTION_TIME_ACTION>
           local value = EffectController():GetMultipleChoiceResult()
                      if value == 0 then
          EffectController():PayManaCost("{1}{W}")
                RSN_Characteristics_Set( Object(), NEO_CHARACTERISTIC_MORPH_TRIGGER, 1 )
          RSN_Characteristics_Set( Object(), NEO_CHARACTERISTIC_FACEDOWN, 0 )
               MTG():FireTrigger( TRIGGER_TURNED_FACE_UP, Object() )
                      end
      </RESOLUTION_TIME_ACTION>
    <AI_AVAILABILITY type="in_response" />
    <AI_AVAILABILITY window_step="begin_combat" window_turn="their_turn" type="window" />
    <AI_AVAILABILITY window_step="declare_attackers" window_turn="their_turn" type="window" />
    <AI_AVAILABILITY window_step="main_1" window_turn="my_turn" type="window" />
    <AI_AVAILABILITY window_step="main_2" window_turn="my_turn" type="window" />
    <AI_AVAILABILITY window_step="declare_blockers" type="window" />
    <AI_AVAILABILITY window_step="end_of_turn" type="window" />
   </ACTIVATED_ABILITY>

  <TRIGGERED_ABILITY resource_id="12" replacement_effect="1">
  <TRIGGER value="ZONECHANGE_CONSIDERED" simple_qualifier="self" to_zone="ZONE_ANY" from_zone="ZONE_BATTLEFIELD" pre_trigger="1">
           return true
    </TRIGGER>
   <RESOLUTION_TIME_ACTION>
         RSN_Characteristics_Set( Object(), NEO_CHARACTERISTIC_MORPH_TRIGGER, 1 )
         RSN_Characteristics_Set( Object(), NEO_CHARACTERISTIC_FACEDOWN, 0 )
         MTG():ReevaluateContinuousEffects()
   </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>

  <TRIGGERED_ABILITY resource_id="13" replacement_effect="1" active_zone="ZONE_STACK">
  <TRIGGER value="SPELL_BEING_COUNTERED" simple_qualifier="self" pre_trigger="1" />
     <RESOLUTION_TIME_ACTION>
   RSN_Characteristics_Set( Object(), NEO_CHARACTERISTIC_MORPH_TRIGGER, 1 )
   RSN_Characteristics_Set( Object(), NEO_CHARACTERISTIC_FACEDOWN, 0 )
   MTG():ReevaluateContinuousEffects()
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>
  <TOKEN_REGISTRATION reservation="1" type="NEO_TEST_TOKEN_001_MORPH_2_2_570092001" />
  <SFX text="COMBAT_BLUNT_LARGE_ATTACK" power_boundary_min="4" power_boundary_max="-1" />
  <SFX text="COMBAT_BLUNT_SMALL_ATTACK" power_boundary_min="1" power_boundary_max="3" />
</CARD_V2>
TO USE THIS VERSION YOU NEED :
Riiak ObjectDC Functions
Riiak Characteristics Functions
Attachments
Lumithread Field - Morph WAD and source Test Ver.Omega 1b.rar
Lumithread Field - Morph WAD and source Test Ver.Omega 1b
(428.72 KiB) Downloaded 310 times
Last edited by NeoAnderson on 14 Sep 2014, 21:15, edited 1 time in total.
NeoAnderson
 
Posts: 914
Joined: 10 Sep 2013, 07:49
Has thanked: 18 times
Been thanked: 139 times

Re: Morph tests

Postby Kithkin » 14 Sep 2014, 20:30

I tested the card, but something is wrong.

With 3 lands on the field I selected the ability on Lumithread. Then the card changed into the token and went back to my hand. I cast the token, but the land did not tap. The token does not give any information about the morph card and I am not able to pay the morph costs.

Is there anything else needed besides the wad?
User avatar
Kithkin
 
Posts: 456
Joined: 21 Feb 2014, 07:12
Location: Cologne, GERMANY
Has thanked: 11 times
Been thanked: 56 times

Re: Morph tests

Postby NeoAnderson » 14 Sep 2014, 20:51

Kithkin wrote:I tested the card, but something is wrong.

With 3 lands on the field I selected the ability on Lumithread. Then the card changed into the token and went back to my hand. I cast the token, but the land did not tap. The token does not give any information about the morph card and I am not able to pay the morph costs.

Is there anything else needed besides the wad?
The wad should include any needed file. Anyway i haven't tested it, so if you want you can use the source files. I will test the wad later, i would like to know if you are using manual mana or not. Which lands are using? The info text should appears anyway...
NeoAnderson
 
Posts: 914
Joined: 10 Sep 2013, 07:49
Has thanked: 18 times
Been thanked: 139 times

Re: Morph tests

Postby Kithkin » 14 Sep 2014, 21:08

Characteristics.wad was missing.
User avatar
Kithkin
 
Posts: 456
Joined: 21 Feb 2014, 07:12
Location: Cologne, GERMANY
Has thanked: 11 times
Been thanked: 56 times

Re: Morph tests

Postby NeoAnderson » 14 Sep 2014, 21:17

Kithkin wrote:Characteristics.wad was missing.
So the problem is that you haven't Riiak functions installed.
I have updated the post with the links.
Riiak ObjectDC Functions
Riiak Characteristics Functions
NeoAnderson
 
Posts: 914
Joined: 10 Sep 2013, 07:49
Has thanked: 18 times
Been thanked: 139 times

Re: Morph tests

Postby NeoAnderson » 15 Sep 2014, 13:55

MAJOR UPDATE :
Compliant with the follow interactions : | Open
1. Compliant with cards like Nightveil Specter that grants the ability to play card not from hand.
2. Compliant with cards like Omniscience that grants the ability to cast for free.
3. Compliant with Primeval Bounty
4. Compliant with Iona, Shield of Emeria
5. Compliant with CASCADE ability - tested with Bloodbraid Elf
6. Partial Compliant with the follow cards who grant flash ability:

7. Compliant with Æther Storm
8. Allow to check Morph ability
9. Allow to check Facedown status
10. Allow other cards ability to access hidden card info.
11. Allow controller to view hidden card info.
12. Compliant with Eidolon of Rhetoric and Angelic Arbiter
13. Compliant with Ethersworn Canonist
14. Compliant with Grid Monitor and Steel Golem
15. Dinamic Facedown cost mostly compliant with cards :
16. Dinamic Morph cost mostly compliant with Exiled Doomsayer
17. Compliant with Copy effects like Clone.
18. Added new turn face up trigger function.


UPDATE : Omega Ver 3.0
19. Fixed facedown abilities regain and implemented external facedown function (compliant with Backslide).

Know issues :
1. If there is an effect like Ovinize in play on cards of points (6,13,14,15,16) above, is still affected by source effect as that card hasn't lose the abilities.

Small test pack cards included :
Image
NEW VERSION RELEASED :MORPH SMALL PACK OMEGA VER 3.1
Last edited by NeoAnderson on 16 Sep 2014, 15:47, edited 1 time in total.
NeoAnderson
 
Posts: 914
Joined: 10 Sep 2013, 07:49
Has thanked: 18 times
Been thanked: 139 times

Re: Morph tests

Postby braquio » 16 Sep 2014, 14:19

Im tested it and at the moment i didnt see any issue, you did it again! another difficult ability coded! =D> =D>
____________________________________________________________________________________________________________________________
Braquio Dotp2014 DLC
Alternative Sealed Campaigns for DotP 2014
User avatar
braquio
 
Posts: 143
Joined: 16 Feb 2014, 19:21
Has thanked: 15 times
Been thanked: 9 times

PreviousNext

Return to Programming Talk

Who is online

Users browsing this forum: No registered users and 17 guests


Who is online

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

Login Form