Board index
Programs with AI or Rules Enforcement
Magic: The Gathering - Duels of the Planeswalkers
New MTG Cards and Decks (2010, 2012, 2013, 2014, 2015, Magic Duels)
2014




Formal Request Thread
Moderator: CCGHQ Admins
Re: Formal Request Thread
by 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 > 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 > 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 > 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 > 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>
- fallenangle
- Posts: 319
- Joined: 20 Jul 2013, 02:31
- Has thanked: 73 times
- Been thanked: 41 times
Re: Formal Request Thread
by 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.
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.
Re: Formal Request Thread
by 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
by thefiremind » 06 Oct 2014, 08:33
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.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?
< 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
Re: Formal Request Thread
by CalT2410 » 06 Oct 2014, 15:25
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?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.
- CalT2410
- Posts: 25
- Joined: 23 Sep 2014, 06:07
- Has thanked: 0 time
- Been thanked: 0 time
Re: Formal Request Thread
by Xander9009 » 06 Oct 2014, 15:31
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.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?
_______________________________
Community Wad - Community Wad Website - How to Help and Report Bugs
Discord: discord.gg/4AXvHzW
Community Wad - Community Wad Website - How to Help and Report Bugs
Discord: discord.gg/4AXvHzW
-
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
by 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?
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
by migookman » 06 Oct 2014, 15:57
You can find the community wad in the 'Utilities' section.
Re: Formal Request Thread
by 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.
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
Community Wad - Community Wad Website - How to Help and Report Bugs
Discord: discord.gg/4AXvHzW
-
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
by 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
by 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!
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
by RiiakShiNal » 06 Oct 2014, 22:47
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.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.
Just getting started: Xander9009's DotP 2014 Community Wad
Need a deck builder: DotP 2014 Deck Builder
Problems Modding: DotP 2014 Frequent Modding Mistakes
Need a deck builder: DotP 2014 Deck Builder
Problems Modding: DotP 2014 Frequent Modding Mistakes
- RiiakShiNal
- Programmer
- Posts: 2188
- Joined: 16 May 2011, 21:37
- Has thanked: 75 times
- Been thanked: 497 times
Re: Formal Request Thread
by lkmaciel » 07 Oct 2014, 01:43
Thanks, Riiak. Even though I have a bit of programming experience, I've never coded for DotP. Where should I start?RiiakShiNal wrote: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.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.
On the other hand, is anyone willing to include this in some future DLC?

- lkmaciel
- Posts: 4
- Joined: 05 Oct 2014, 21:18
- Has thanked: 0 time
- Been thanked: 0 time
Re: Formal Request Thread
by 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
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
Re: Formal Request Thread
by 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, "
: Add
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).
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, "


Just getting started: Xander9009's DotP 2014 Community Wad
Need a deck builder: DotP 2014 Deck Builder
Problems Modding: DotP 2014 Frequent Modding Mistakes
Need a deck builder: DotP 2014 Deck Builder
Problems Modding: DotP 2014 Frequent Modding Mistakes
- RiiakShiNal
- Programmer
- Posts: 2188
- Joined: 16 May 2011, 21:37
- Has thanked: 75 times
- Been thanked: 497 times
Who is online
Users browsing this forum: No registered users and 9 guests