It is currently 04 Sep 2025, 03:21
   
Text Size

Formal Request Thread

Moderator: CCGHQ Admins

Re: Formal Request Thread

Postby fallenangle » 05 Oct 2014, 03:06

Intriguing idea, with intriguing results! Using the code below (as you suggested), I am able to have one Sarkhan that is a creature and one Sarkhan that is just a PW. There are still a few problems, however. 1) The new creature Sarkhan will permanently gain the legendary supertype once he goes back to being a PW; 2) There is no check during the end phase when there should be two identical Sarkhan Planeswalkers on the battlefield, and so they are both allowed to remain; 3) I get the following script error on exit: [lua] [string "_PLANESWALKERS_MANAGER_991800002_TITLE (RESOLUTION_TIME_ACTION)~0x0000034c"]:7: attempt to index global 'tobj' (a nil value). I think SweetLu's right, and that we're on the verge of making the new Sarkhan more fully rule compliant. If anyone who might know how to resolve the three issues I mention wants to see the PW Manager code I used, here it is:

Code: Select all
<?xml version='1.0' encoding='UTF-8'?>
<CARD_V2 ExportVersion="11">
  <FILENAME text="_PLANESWALKERS_MANAGER_991800002" />
  <CARDNAME text="_PLANESWALKERS_MANAGER" />
  <TITLE>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Planeswalker]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Planeswalker]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Planeswalker]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Planeswalker]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Planeswalker]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[プレインズウォーカー]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[플레인즈워커]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Planeswalker]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Planeswalker]]></LOCALISED_TEXT>
  </TITLE>
  <MULTIVERSEID value="991800002" />
  <ARTID value="0" />
  <ARTIST name="Nobody" />
  <CASTING_COST cost="" />
  <TYPE metaname="" />
  <EXPANSION value="DPI" />
  <RARITY metaname="C" />

  <!-- Invisible token protection -->
  <STATIC_ABILITY>
    <CONTINUOUS_ACTION layer="8">
    if EffectSource() ~= nil then
       local characteristics = EffectSource():GetCurrentCharacteristics()
       characteristics:Bool_Set(CHARACTERISTIC_SHROUD, 1)
       characteristics:Bool_Set(CHARACTERISTIC_INDESTRUCTIBLE, 1)
       characteristics:AI_SetWorthless()
    end
    </CONTINUOUS_ACTION>
    <CONTINUOUS_ACTION layer="8">
    if EffectSource() ~= nil then
       local filter = ClearFilter()
       filter:Add(FE_CMC, OP_GREATER_THAN_OR_EQUAL_TO, 0)
       EffectSource():Protection()
    end
    </CONTINUOUS_ACTION>
  </STATIC_ABILITY>

  <!-- Planeswalker rules -->

  <!-- 1. Planeswalker goes to the graveyard when it has no loyalty counters left -->
  <TRIGGERED_ABILITY replacement_effect="1">
    <COUNTER_REGISTRATION name="Loyalty" proliferate="11" />
    <TRIGGER value="STATE_BASED_EFFECTS" />
    <FILTER filter_id="0">
    local filter = ClearFilter()
    filter:Add( FE_CONTROLLER, OP_IS, EffectController() )
    PLW_FilterNameSet(filter, "PLANESWALKERS", true)
    </FILTER>
    <RESOLUTION_TIME_ACTION filter_id="0">
    if FilteredCard() ~= nil and FilteredCard():CountCounters( MTG():GetCountersType("Loyalty") ) == 0 then
       FilteredCard():PutInGraveyard()
    end
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>

  <!-- 2. Planeswalkers' "Legendary rule" -->
  <TRIGGERED_ABILITY replacement_query="1">
    <TRIGGER value="ZONECHANGE_END" simple_qualifier="objectyoucontrol" to_zone="ZONE_BATTLEFIELD">
    return PLW_IsInNameSet( TriggerObject(), "PLANESWALKERS" )
    </TRIGGER>
    <RESOLUTION_TIME_ACTION>
    MTG():ClearFilterMark()
    local tobj = TriggerObject()
    local filter = ClearFilter()
    filter:Add( FE_CONTROLLER, OP_IS, EffectController() )
    PLW_FilterNameSet(filter, "PLANESWALKERS", true)
          if TriggerObject:GetSubType() == "SARKHAN" then
          if TriggerObject:GetCardType():Test( CARD_TYPE_CREATURE ) then
             filter:Add( FE_TYPE, OP_IS, CARD_TYPE_CREATURE )
          else
             filter:Add( FE_TYPE, OP_NOT, CARD_TYPE_CREATURE )
          end
       end
    local filter_count = filter:EvaluateObjects()
    if filter:CountStopAt(2) == 2 then
       for i=0,filter_count-1 do
          local card = filter:GetNthEvaluatedObject(i)
          if PLW_GetSubType(card) == PLW_GetSubType(tobj) then
             card:MarkForFilter()
          end
       end
       filter:SetMarkedObjectsOnly()
       if filter:CountStopAt(2) == 2 then
          EffectController():ChooseItem( "PLW_CARD_QUERY_CHOOSE_PLANESWALKER_TO_SAVE", EffectDC():Make_Targets(0) )
       end
    end
    </RESOLUTION_TIME_ACTION>
    <RESOLUTION_TIME_ACTION>
    local to_keep = EffectDC():Get_Targets(0) and EffectDC():Get_Targets(0):Get_CardPtr(0)
    if to_keep ~= nil then
       local filter = ClearFilter()
       filter:Add( FE_CONTROLLER, OP_IS, EffectController() )
       PLW_FilterNameSet(filter, "PLANESWALKERS", true)
   if TriggerObject:GetSubType() == "SARKHAN" then
          if TriggerObject:GetCardType():Test( CARD_TYPE_CREATURE ) then
             filter:Add( FE_TYPE, OP_IS, CARD_TYPE_CREATURE )
          else
             filter:Add( FE_TYPE, OP_NOT, CARD_TYPE_CREATURE )
          end
       end
       local filter_count = filter:EvaluateObjects()
       for i=0,filter_count-1 do
          local card = filter:GetNthEvaluatedObject(i)
          if card ~= to_keep and PLW_GetSubType(card) == PLW_GetSubType( TriggerObject() ) then
             card:PutInGraveyard()
          end
       end
    end
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>

  <!-- 3. Planeswalkers' abilities can be played only once per turn -->
  <TRIGGERED_ABILITY replacement_effect="1">
    <TRIGGER value="ACTIVATED_ABILITY_PLAYED" simple_qualifier="objectyoucontrol">
    if not PLW_IsInNameSet( TriggerObject(), "PLANESWALKERS" ) then
       return false
    end
    local activations_chest = PLW_MyDuelDC():Get_Chest(PLW_PLANESWALKERS_ACTIVATIONS_CHEST)
    if activations_chest == nil then
       activations_chest = PLW_MyDuelDC():Make_Chest(PLW_PLANESWALKERS_ACTIVATIONS_CHEST)
    end
    -- Find the Planeswalker
    local current_index = -1
    local last_index = activations_chest:Get_Int(0)
    if last_index &gt; 0 then
       for i=1,last_index,2 do
          local card = activations_chest:Get_CardPtr(i)
          if card ~= nil and card == TriggerObject() then
             -- Planeswalker found
             current_index = i
             break
          end
       end
    else
       last_index = -1 -- this will make it right when adding 2 later
    end
    if current_index == -1 then
       -- Planeswalker not found, let's add it
       last_index = last_index + 2
       activations_chest:Set_Int(0, last_index)
       activations_chest:Set_CardPtr( last_index, TriggerObject() )
       activations_chest:Set_Int(last_index+1, 0)
       current_index = last_index
    end
    -- Increase Planeswalker's activations count (1 register further than the card pointer)
    activations_chest:Int_Inc(current_index+1)
    -- Increase player's own activations count (will be used by The Chain Veil's first ability)
    PLW_MyPlayerDC( EffectController() ):Int_Inc(PLW_PLANESWALKERS_ACTIVATIONS)
    -- Save Planeswalker's activations count index for continuous action
    EffectDC():Set_Int(1, current_index+1)
    return true
    </TRIGGER>
    <CONTINUOUS_ACTION layer="8">
    if TriggerObject() ~= nil then
       local activations_chest = PLW_MyDuelDC():Get_Chest(PLW_PLANESWALKERS_ACTIVATIONS_CHEST)
       if activations_chest ~= nil then
          local loyalty_activations = activations_chest:Get_Int( EffectDC():Get_Int(1) )
          local chain_veil_activations = PLW_MyPlayerDC( TriggerObject():GetController() ):Get_Int(PLW_CHAIN_VEIL_ACTIVATIONS)
          if loyalty_activations &gt; chain_veil_activations then
             TriggerObject():GetCurrentCharacteristics():Bool_Set(CHARACTERISTIC_CANT_USE_ACTIVATED_ABILITIES, 1)
          end
       end
    end
    </CONTINUOUS_ACTION>
    <DURATION simple_duration="UntilEOT" />
  </TRIGGERED_ABILITY>
  <TRIGGERED_ABILITY replacement_effect="1">
    <TRIGGER value="BEGINNING_OF_STEP">
    return MTG():GetStep() == STEP_CLEANUP
    </TRIGGER>
    <RESOLUTION_TIME_ACTION>
    PLW_MyDuelDC():Free_Compartment(PLW_PLANESWALKERS_ACTIVATIONS_CHEST)
    for i=0,MTG():GetNumberOfPlayers()-1 do
       local player_chest = PLW_MyPlayerDC( MTG():GetNthPlayer(i) )
       player_chest:Set_Int(PLW_PLANESWALKERS_ACTIVATIONS, 0)
       player_chest:Set_Int(PLW_CHAIN_VEIL_ACTIVATIONS, 0)
    end
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>

  <!-- 4. Damage redirection -->
  <TRIGGERED_ABILITY replacement_query="1" linked_ability_group="1">
    <COUNTER_REGISTRATION name="Loyalty" proliferate="11" />
    <TRIGGER value="SOURCE_DEALS_DAMAGE_TO_PLAYER" pre_trigger="1" damage_type="noncombat">
    if LinkedDC():Get_Int(0) ~= 1 then
       local controller = EffectController()
       local amount = Damage() and Damage():GetAmount()
       if amount ~= nil and amount &gt; 0 and SecondaryPlayer() == controller and TriggerObject():GetPlayer():GetTeam() ~= controller:GetTeam() then
          local filter = ClearFilter()
          filter:Add(FE_CONTROLLER, OP_IS, controller)
          PLW_FilterNameSet(filter, "PLANESWALKERS", true)
          if filter:CountStopAt(1) == 1 then
             EffectDC():Set_Int(2, amount)
             Damage():Multiply(0)
             return true
          end
       end
    else
       LinkedDC():Set_Int(0, 0) -- reset the flag
    end
    return false
    </TRIGGER>
    <RESOLUTION_TIME_ACTION>
    local source = TriggerObject()
    if source ~= nil then
       local player = source:GetPlayer()
       if player ~= nil then
          local filter = ClearFilter()
          filter:Add( FE_CONTROLLER, OP_IS, EffectController() )
          PLW_FilterNameSet(filter, "PLANESWALKERS", true)
          player:ChooseItem( "PLW_CARD_QUERY_CHOOSE_PLANESWALKER_REDIRECT_DAMAGE_TO", EffectDC():Make_Targets(1), QUERY_FLAG_MAY )
       end
    end
    </RESOLUTION_TIME_ACTION>
    <RESOLUTION_TIME_ACTION>
    local target = EffectDC():Get_Targets(1) and EffectDC():Get_Targets(1):Get_CardPtr(0)
    local amount = EffectDC():Get_Int(2)
    if target ~= nil then
       PLW_SetLastDamageInfo( target, TriggerObject(), amount )
       TriggerObject():DealDamageTo(amount, target)
       if target:GetCardType():Test(CARD_TYPE_CREATURE) == false then -- if it's not a creature, dealing damage doesn't do anything
          if PLW_MyPlayerDC( target:GetController() ):Get_Int(PLW_AJANI_STEADFAST_EMBLEM) == 0 then
             target:RemoveCounters( MTG():GetCountersType("Loyalty"), amount )
          else
             target:RemoveCounters( MTG():GetCountersType("Loyalty"), 1 )
          end
       end
    else
       LinkedDC():Set_Int(0, 1) -- set this flag so the trigger won't trigger again this time
       TriggerObject():DealDamageTo( amount, SecondaryPlayer() )
    end
    -- APPROXIMATION: if the damage is unpreventable, this way I'm removing that characteristic
    -- APPROXIMATION: if the Planeswalker isn't a creature, damage triggers from the source won't trigger
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>

  <!-- 5. Attacking Planeswalkers -->
  <STATIC_ABILITY>
    <FILTER filter_id="0">
    local filter = ClearFilter()
    filter:Add(FE_TYPE, OP_IS, CARD_TYPE_CREATURE)
    </FILTER>
    <CONTINUOUS_ACTION layer="8" filter_id="0">
    if FilteredCard() ~= nil then
       local filter = ClearFilter()
       filter:Add( FE_CARD_NAME, OP_IS, EffectSource() )
       filter:EvaluateObjects()
       if EffectSource() == filter:GetNthEvaluatedObject(0) then -- only 1 manager should grant the ability
          FilteredCard():GetCurrentCharacteristics():GrantAbility(0)
       end
    end
    </CONTINUOUS_ACTION>
  </STATIC_ABILITY>
  <TRIGGERED_ABILITY replacement_query="1" resource_id="0">
    <TRIGGER value="ATTACKING" simple_qualifier="self" />
    <RESOLUTION_TIME_ACTION>
    local defending = TriggerObject() and TriggerObject():GetPlayerAttacked()
    if defending ~= nil then
       local filter = ClearFilter()
       filter:Add(FE_CONTROLLER, OP_IS, defending)
       PLW_FilterNameSet(filter, "PLANESWALKERS", true)
       if filter:CountStopAt(1) == 1 then
          EffectController():ChooseItem( "PLW_CARD_QUERY_CHOOSE_PLANESWALKER_TO_ATTACK", EffectDC():Make_Targets(0), QUERY_FLAG_MAY )
       end
    end
    -- APPROXIMATION: a creature attacking a Planeswalker shouldn't be counted as attacking the player
    </RESOLUTION_TIME_ACTION>
    <RESOLUTION_TIME_ACTION>
    local target = EffectDC():Get_Targets(0) and EffectDC():Get_Targets(0):Get_CardPtr(0)
    if target ~= nil then
       local defending = TriggerObject() and TriggerObject():GetPlayerAttacked()
       if defending ~= nil and defending:IsAI() == false then
          defending:SetCustomQueryInstructionCardPtr(target)
          defending:BeginNewMultipleChoice()
          defending:AddMultipleChoiceAnswer("CONTROL_MB_CONFIRM")
          defending:AskMultipleChoiceQuestion( "PLW_CARD_QUERY_ATTACKED_PLANESWALKER", TriggerObject() )
       end
    end
    </RESOLUTION_TIME_ACTION>
    <RESOLUTION_TIME_ACTION>
    local target = EffectDC():Get_Targets(0) and EffectDC():Get_Targets(0):Get_CardPtr(0)
    if target ~= nil then
       local delayDC = EffectDC():Make_Chest(1)
       delayDC:Set_CardPtr( 0, TriggerObject() )
       delayDC:Set_CardPtr(1, target)
       MTG():CreateDelayedTrigger(1, delayDC)
    end
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>
  <TRIGGERED_ABILITY replacement_effect="1" resource_id="1">
    <CLEANUP>
    return MTG():GetStep() == STEP_END_OF_COMBAT
    </CLEANUP>
    <COUNTER_REGISTRATION name="Loyalty" proliferate="11" />
    <TRIGGER value="SOURCE_DEALS_DAMAGE_TO_PLAYER" damage_type="combat" pre_trigger="1">
    local amount = Damage() and Damage():GetAmount()
    if amount ~= nil and amount &gt; 0 and TriggerObject() == EffectDC():Get_CardPtr(0) then
       local target = EffectDC():Get_CardPtr(1)
       if target ~= nil then
          PLW_SetLastDamageInfo( target, TriggerObject(), amount )
          if target:GetCardType():Test(CARD_TYPE_CREATURE) then
             Damage():RedirectAllTo(target)
          else
             Damage():Multiply(0)
             if PLW_MyPlayerDC( target:GetController() ):Get_Int(PLW_AJANI_STEADFAST_EMBLEM) == 0 then
                target:RemoveCounters( MTG():GetCountersType("Loyalty"), amount )
             else
                target:RemoveCounters( MTG():GetCountersType("Loyalty"), 1 )
             end
         EffectDC():Set_Int(2, amount)
             MTG():CreateDelayedTrigger( 2, EffectDC() )
          end
       end
       return true
    end
    return false
    -- APPROXIMATION: if the Planeswalker isn't a creature, damage triggers from the source won't trigger
    </TRIGGER>
  </TRIGGERED_ABILITY>
  <TRIGGERED_ABILITY forced_skip="1" resource_id="2">
    <CLEANUP fire_once="1" />
    <TRIGGER value="STATE_BASED_EFFECTS" />
    <RESOLUTION_TIME_ACTION>
    local target = EffectDC():Get_CardPtr(1)
    if target ~= nil then
       PLW_SetLastDamageInfo( target, EffectDC():Get_CardPtr(0), EffectDC():Get_Int(2) )
       MTG():FireTrigger( TRIGGER_OBJECT_TAKES_DAMAGE, target )
    end
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>

  <!-- 6. Damage to Planeswalker creatures (this works only for Gideon when he becomes a creature) -->
  <TRIGGERED_ABILITY replacement_effect="1">
    <COUNTER_REGISTRATION name="Loyalty" proliferate="11" />
    <TRIGGER value="OBJECT_TAKES_DAMAGE">
    return PLW_IsInNameSet( TriggerObject(), "PLANESWALKERS" )
    </TRIGGER>
    <RESOLUTION_TIME_ACTION>
    if TriggerObject() ~= nil then
       local amount = Damage() and Damage():GetAmount()
       if amount ~= nil then
          TriggerObject():RemoveCounters( MTG():GetCountersType("Loyalty"), amount )
       end
    end
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>

  <!-- 7. Cards not allowed to target Planeswalkers -->
  <TRIGGERED_ABILITY replacement_effect="1">
    <TRIGGER value="CARD_CONSIDERED_FOR_TARGETTING" pre_trigger="1">
    local target = TriggerObject()
    local filter = ClearFilter()
    filter:Add(FE_CARD_NAME, OP_IS, "ENCHANTED_EVENING") -- With Enchanted Evening on the battlefield, Planeswalkers would be enchantments for real
    if filter:CountStopAt(1) == 0 or target:GetZone() ~= ZONE_BATTLEFIELD then
       local targetter = SecondaryObject()
       if PLW_IsInNameSet(target, "PLANESWALKERS") and
       ( PLW_IsInNameSet(targetter, "TARGET_ENCHANTMENTS_NOT_CREATURES") or
       (target:GetCardType():Test(CARD_TYPE_CREATURE) == false and
       PLW_IsInNameSet(targetter, "TARGET_ENCHANTMENTS_AND_CREATURES")) ) then
          MTG():OverrideEvent()
          return true
       end
    end
    return false
    </TRIGGER>
  </TRIGGERED_ABILITY>

  <!-- 8. Planeswalker type hack -->
  <TRIGGERED_ABILITY replacement_effect="1">
    <TRIGGER value="ZONECHANGE_TRANSITION" simple_qualifier="objectyoucontrol" to_zone="ZONE_BATTLEFIELD">
    if TriggerObject():GetCardType():Test(CARD_TYPE_PLANESWALKER) then
       EffectDC():Protect_CardPtr(COMPARTMENT_ID_PARAM_TRIGGER_OBJECT)
       return true
    end
    return false
    </TRIGGER>
    <CONTINUOUS_ACTION layer="1">
    if TriggerObject() ~= nil then
       local characteristics = TriggerObject():GetCurrentCharacteristics()
       local card_type = characteristics:CardType_GetWritable()
       local supertype = characteristics:SuperType_GetWritable()
       card_type:Clear()
       -- I chose "Basic Snow Enchantment", it seems the only safe choice.
       -- I avoided Legendary since we are already managing the Planeswalkers' "Legendary rule" manually.
       card_type:Add(CARD_TYPE_ENCHANTMENT)
       supertype:Add(SUPERTYPE_BASIC)
       supertype:Add(SUPERTYPE_SNOW)
    end
    </CONTINUOUS_ACTION>
    <DURATION>
    return TriggerObject() == nil
    </DURATION>
  </TRIGGERED_ABILITY>

  <AI_BASE_SCORE score="-5000" zone="ZONE_BATTLEFIELD" />
</CARD_V2>
Any help anyone might have with this would be greatly appreciated.
fallenangle
 
Posts: 319
Joined: 20 Jul 2013, 02:31
Has thanked: 73 times
Been thanked: 41 times

Re: Formal Request Thread

Postby sweetLu » 05 Oct 2014, 08:43

1) I'd have to look at your Sarkhan for that.

2) This brings me to my question in the planeswalkers thread. From my quick inspection of the planeswalker manager the legendary rule is only enforced after a card enters the battlefield. This means the scenario you described is not covered and potentially other scenarios with the existing planeswalker pool are not covered (like the Puca's Mischief one). The more appropriate way to handle the legendary rule would be probably be to check after state based actions but that more than likely would greatly bog the game down. I know TFM and gorem worked hard to increase the performance of the planeswalker approximation. I was hoping to get one of them to comment on this issue.

I think we'll eventually decide performance over the occasional poor interaction with card stealing effects. As far as I know, nobody has commented on it thus far. It may even be discussed in the approximations section of the Planeswalker mod (I haven't looked at that in awhile). As for managing
multiple Sarkhans, I think we can do it using a LinkedDC. Whenever a card with the Sarkhan planeswalker type enters the battlefield save it in a LinkedDC (yes, this would have the same issues discussed above with card stealing effects). Then have one triggered ability to enforce the Legendary rule. Use 3 triggers with low priority (end of turn, spell resolved and ability resolved) that will only look at cards in the LinkedDC. Needless to say some testing will have to be done and I'm open to comments/suggestions.

3. It's too hard to figure out that script error from my phone. That will have to wait until I get home.
sweetLu
 
Posts: 181
Joined: 16 Jul 2014, 01:24
Has thanked: 21 times
Been thanked: 22 times

Re: Formal Request Thread

Postby CalT2410 » 06 Oct 2014, 02:09

I saw back on page 161 that Time Vault had been coded, but can someone direct me to somewhere that I can download said card?
CalT2410
 
Posts: 25
Joined: 23 Sep 2014, 06:07
Has thanked: 0 time
Been thanked: 0 time

Re: Formal Request Thread

Postby thefiremind » 06 Oct 2014, 08:33

CalT2410 wrote:I saw back on page 161 that Time Vault had been coded, but can someone direct me to somewhere that I can download said card?
Open Notepad (or any other plain text editor you like), copy-paste the Time Vault code into it, save the file as TIME_VAULT_383130.XML with UTF-8 encoding. That's it. On Notepad, when you save the file, select the "All files (*.*)" filter if you don't want it to auto-add the .txt extension.
< 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: 722 times

Re: Formal Request Thread

Postby CalT2410 » 06 Oct 2014, 15:25

Open Notepad (or any other plain text editor you like), copy-paste the Time Vault code into it, save the file as TIME_VAULT_383130.XML with UTF-8 encoding. That's it. On Notepad, when you save the file, select the "All files (*.*)" filter if you don't want it to auto-add the .txt extension.
Oh. That simple huh? After I make the Notepad file, do I just drop it into the Magic 2014 folder like all the other mods?
CalT2410
 
Posts: 25
Joined: 23 Sep 2014, 06:07
Has thanked: 0 time
Been thanked: 0 time

Re: Formal Request Thread

Postby Xander9009 » 06 Oct 2014, 15:31

CalT2410 wrote:Oh. That simple huh? After I make the Notepad file, do I just drop it into the Magic 2014 folder like all the other mods?
No. It needs to go somewhere very specific. Open Riiak's Deck Builder (I'm assuming you have it) and select Tools>Setup Custom Data Folder. Now, in your Magic 2014 folder, open DATA_DLC_DECK_BUILDER_CUSTOM>DATA_ALL_PLATFORMS>CARDS. The xml files needs to go in here. Note that this won't give the cards pictures. For that, there's a different process. Or, you could just download the Community Art wad and change the artID in the card to "CW" followed by its multiverseID. Its multiverseID is found by going to the card on gatherer.wizards.com and looking at the numbers at the end of the URL.
_______________________________
Community Wad - Community Wad Website - How to Help and Report Bugs
Discord: discord.gg/4AXvHzW
User avatar
Xander9009
Programmer
 
Posts: 2905
Joined: 29 Jun 2013, 07:44
Location: Indiana, United States
Has thanked: 121 times
Been thanked: 445 times

Re: Formal Request Thread

Postby CalT2410 » 06 Oct 2014, 15:39

Xander and TFM, thank you so much. This also explains a few other answers in this thread and how to use them. Personally, I don't know how to do any modding, I just like the ability to play with cards that I don't own nor have the money to buy, and somewhat test a deck out before buying.

Also, where do I find this community art wad?
CalT2410
 
Posts: 25
Joined: 23 Sep 2014, 06:07
Has thanked: 0 time
Been thanked: 0 time

Re: Formal Request Thread

Postby migookman » 06 Oct 2014, 15:57

You can find the community wad in the 'Utilities' section.
User avatar
migookman
 
Posts: 135
Joined: 05 Aug 2014, 06:37
Has thanked: 22 times
Been thanked: 28 times

Re: Formal Request Thread

Postby Xander9009 » 06 Oct 2014, 15:58

Here's the forum thread, and here's a direct link to the file. It's almost 2GB, though... You'd be better off using Gibbed Tools.

If you're going the Gibbed Tools route, then download the binaries. Find the art online, resize and/or crop it so it's 512*376, and then drop the image onto Tdx Convert Compressed.bat. You'll get a .tdx file. Name that file to whatever the ArtID in the card's xml says, and then drop that tdx file into "Magic 2014\DATA_DLC_DECK_BUILDER_CUSTOM\DATA_ALL_PLATFORMS\ART_ASSETS\ILLUSTRATIONS". This is the more tedious solution, but it doesn't require having a massive 2GB file sitting in your folder.
_______________________________
Community Wad - Community Wad Website - How to Help and Report Bugs
Discord: discord.gg/4AXvHzW
User avatar
Xander9009
Programmer
 
Posts: 2905
Joined: 29 Jun 2013, 07:44
Location: Indiana, United States
Has thanked: 121 times
Been thanked: 445 times

Re: Formal Request Thread

Postby fallenangle » 06 Oct 2014, 16:17

This should have what you need. Simply go to your DATA_DLC_CUSTOM folder, put the XML file in the "Cards" folder and the TDX file in the "Art Assets" --> "Illustrations" folder. Then you should be all set. Enjoy!
Attachments
Time Vault.zip
(368.41 KiB) Downloaded 386 times
fallenangle
 
Posts: 319
Joined: 20 Jul 2013, 02:31
Has thanked: 73 times
Been thanked: 41 times

Re: Formal Request Thread

Postby lkmaciel » 06 Oct 2014, 18:39

Hi people!

I was after some legacy cards and found them for DotP 2013 here. However, they do not work on DotP2014, but the XML looks really close to the DotP mods. So my question is: how hard it is to port some of this mod to DotP 2014? I'm more interested in very few cards like Nimble Mongoose, Mother of Runes, Wasteland and Merrow Reejerey.

Thanks in advance!
lkmaciel
 
Posts: 4
Joined: 05 Oct 2014, 21:18
Has thanked: 0 time
Been thanked: 0 time

Re: Formal Request Thread

Postby RiiakShiNal » 06 Oct 2014, 22:47

lkmaciel wrote:I was after some legacy cards and found them for DotP 2013 here. However, they do not work on DotP2014, but the XML looks really close to the DotP mods. So my question is: how hard it is to port some of this mod to DotP 2014? I'm more interested in very few cards like Nimble Mongoose, Mother of Runes, Wasteland and Merrow Reejerey.
The 4 cards you have listed are easily codable in DotP 2014. The only one you might want to consider a workaround on is Wasteland to have it manual tap for mana instead of auto-tap, but it you prefer auto-tap, then no workarounds are needed for any of those.
RiiakShiNal
Programmer
 
Posts: 2188
Joined: 16 May 2011, 21:37
Has thanked: 75 times
Been thanked: 497 times

Re: Formal Request Thread

Postby lkmaciel » 07 Oct 2014, 01:43

RiiakShiNal wrote:
lkmaciel wrote:I was after some legacy cards and found them for DotP 2013 here. However, they do not work on DotP2014, but the XML looks really close to the DotP mods. So my question is: how hard it is to port some of this mod to DotP 2014? I'm more interested in very few cards like Nimble Mongoose, Mother of Runes, Wasteland and Merrow Reejerey.
The 4 cards you have listed are easily codable in DotP 2014. The only one you might want to consider a workaround on is Wasteland to have it manual tap for mana instead of auto-tap, but it you prefer auto-tap, then no workarounds are needed for any of those.
Thanks, Riiak. Even though I have a bit of programming experience, I've never coded for DotP. Where should I start?

On the other hand, is anyone willing to include this in some future DLC? :D
lkmaciel
 
Posts: 4
Joined: 05 Oct 2014, 21:18
Has thanked: 0 time
Been thanked: 0 time

Re: Formal Request Thread

Postby sweetLu » 07 Oct 2014, 02:05

Someone made legacy decks a ways back. I think Eastbay or something like that. I'd suggest looking for his thread. It's probably on the last it 2nd to last page of the 2014 thread. Then I'd check out sumo's mod because some of those cards look familiar.

Here is a tutorial for making your own cards. It's easy once you get the hang of it:
viewtopic.php?f=64&t=12167
sweetLu
 
Posts: 181
Joined: 16 Jul 2014, 01:24
Has thanked: 21 times
Been thanked: 22 times

Re: Formal Request Thread

Postby RiiakShiNal » 07 Oct 2014, 10:44

The tutorial that sweetLu linked is a good place to start. Though since you are going to be converting DotP 2013 cards to DotP 2014 most of the work has already been done for you since just about any card that was possible in DotP 2013 can be converted to DotP 2014 (the exception being the Plane cards as there is no mode to use them in DotP 2014).

Most of the work in converting the cards is getting a newer base card (which you can get using thefiremind's card generator) and porting the existing code to the newer format. Some functions and constructs have changed and require updating to use the newer functions. Also many abilities can be copied from other already existing DotP 2014 cards (for example Shroud, " {T}: Add {1} to your mana pool", "Other ___ creatures you control get +1/+1.", etc...). Other abilities you can get a piece of from one card or another (For example "Threshold" from one card and "gets +2/+2" from another card).
RiiakShiNal
Programmer
 
Posts: 2188
Joined: 16 May 2011, 21:37
Has thanked: 75 times
Been thanked: 497 times

PreviousNext

Return to 2014

Who is online

Users browsing this forum: No registered users and 9 guests

Main Menu

User Menu

Our Partners


Who is online

In total there are 9 users online :: 0 registered, 0 hidden and 9 guests (based on users active over the past 10 minutes)
Most users ever online was 7303 on 15 Jul 2025, 20:46

Users browsing this forum: No registered users and 9 guests

Login Form