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




An Idea: Card Pool...
Moderator: CCGHQ Admins
2 posts
• Page 1 of 1
An Idea: Card Pool...
by jacque » 19 Sep 2013, 11:34
I know, and even quite very sure, there are many coders out there... some of them are more forth-coming, and they share what they have coded with others, and there are also some doing it in a "Core" release...
What I am thinking is that, this process of coding cards, will be an on-going process... especially when a new version of DotP is introduced, with new mechanics, game engine, etc. Why not we have a common card pool?
The idea is have a "page" on CCGH, where registered users could post, edit, etc. Sub-pages created representing the different expansions there are out there, and on these pages, will be the card listing (alphabetical order).
Under each entry, we can post the entire XML content protected by the "code" tag bearing the DotP's version, and the coder's initials (3 alphabets; TFM - thefiremind, KEV - kevlahnota, MCB - Mc Brodie, etc.)... IF there is an existing entry, can just have another code tag below it, bearing another coder's codes... Users can choose which version to use. We can leave them to get their own choice of images, tdx files...
Reason I thought of this... there are like so many expansions released so far... every time a new release of DotP, we practically have to start everything from scratch... and if we were to start recoding the cards, by the time we are done or satisfied, you'd find the next version of DotP released.
This way, I think we can get our card pool "completed" as soon as possible... Users just grab what they want... of course if there are contributors... What you all think?
Example:
CYCLE: SHADOWMOOR (entry on main page)
SET: Shadowmoor (sub entry on main page, hyperlink to another page)
TITLE: Shadowmoor (title on sub page)
Aerie Ouphes (list entry on sub page)
What I am thinking is that, this process of coding cards, will be an on-going process... especially when a new version of DotP is introduced, with new mechanics, game engine, etc. Why not we have a common card pool?
The idea is have a "page" on CCGH, where registered users could post, edit, etc. Sub-pages created representing the different expansions there are out there, and on these pages, will be the card listing (alphabetical order).
Under each entry, we can post the entire XML content protected by the "code" tag bearing the DotP's version, and the coder's initials (3 alphabets; TFM - thefiremind, KEV - kevlahnota, MCB - Mc Brodie, etc.)... IF there is an existing entry, can just have another code tag below it, bearing another coder's codes... Users can choose which version to use. We can leave them to get their own choice of images, tdx files...
Reason I thought of this... there are like so many expansions released so far... every time a new release of DotP, we practically have to start everything from scratch... and if we were to start recoding the cards, by the time we are done or satisfied, you'd find the next version of DotP released.
This way, I think we can get our card pool "completed" as soon as possible... Users just grab what they want... of course if there are contributors... What you all think?
Example:
CYCLE: SHADOWMOOR (entry on main page)
SET: Shadowmoor (sub entry on main page, hyperlink to another page)
TITLE: Shadowmoor (title on sub page)
Aerie Ouphes (list entry on sub page)
- 2014 TFM Aerie Ouphes | Open
- Code: Select all
bla bla bla
- 2012 RSN Aerie Ouphes | Open
- Code: Select all
bla bla bla
- 2012 TFM Aerie Ouphes | Open
- Code: Select all
bla bla bla
- 2014 RSN Altar Golem | Open
- Code: Select all
bla bla bla
- 2013 KEV Altar Golem | Open
- Code: Select all
bla bla bla
- 2012 KEV Altar Golem | Open
- Code: Select all
bla bla bla
- 2013 MCB Antler Skulkin | Open
- Code: Select all
bla bla bla
Learn making your own cards today!!!
Click on
if a post/reply helped you.
I stitch old cards together to make new ones...
~ Jacque, the confused
Click on

I stitch old cards together to make new ones...
~ Jacque, the confused
Re: An Idea: Card Pool...
by Kieran » 21 Sep 2013, 07:22
I think this is such a cool idea. It's always good to get organized and I see your point entirely jacque. As for my input, I think if such a task is undertaken it should also, if possible, be characterized and categorized by sets, blocks, and expansions. For example, all the complete Return to Ravnica cards could be listed under Block: Return to Ravnica with sub entries for the core and expansions listed as RTR, GTC, and DGM with complete, pending, or impossible next to the cards so we can know if it's currently available or not. Of course credit will be given to the creator of the card as well. Again, I like the idea and challenge of forming this database. I think it would be very coherent and I also think the same would be good for specific known abilities and card effects. The latter will certainly help myself, NeoAnderson, Tejahn, and others that are developing custom sets greatly with our custom mods. For example the full abilities of the Return to Ravnica card Mizzium Mortars (coded by ???), the GTC card Mental Vapors (coded by ???), Melek, Izzet Paragon (coded by ???), and the Theros card Master of Waves (coded by Rari) could be listed numeric-alphabetic in their proper categories. Perhaps a link can be provided to download individual card XMLs or entire sets, blocks, or expansions currently available. Indeed, the TDX files should be available for download as well but for me just having the codes alone are sufficient.
The card code breakdowns could be as follow per effect:
Return to Ravnica Block
Mizzium Mortars
(RTR) - Complete
Sorcery
Mizzium Mortars deals 4 damage to target creature you don't control.
(You may cast this spell for its overload cost. If you do, change its text by replacing all instances of "target" with "each.") - Impossible
[I thought this was impossible to code but someone has coded it. I'm not sure if it works in game though.]
(GTC) - Complete
Sorcery
Target player discards a card.
(DGM) - Complete
Creature
Play with the top card of your library revealed.
Master of Waves
(THS) - Complete
Creature
Protection from red.
All examples given are from Magic 2014 XMLs. This approach is similar to the opening post of codes Master Necro started listing in the Formal Request Thread but greatly expanded to include the card fully dissected. Such an idea had been floating around in my mind since Magic 2013 but was never implemented publicly yet I did start the project offline but abandoned it because it became too tedious to create alone. I'll edit and update my thoughts on this again tomorrow but this is the core of what I've imagined. Collectively, I think this wiki-like database may be feasible. I know it will be challenging and yet if someone is brave enough and willing to raise the banner I'm willing to follow.
The card code breakdowns could be as follow per effect:
Return to Ravnica Block
Mizzium Mortars


Sorcery
Mizzium Mortars deals 4 damage to target creature you don't control.
- Code: Select all
<FILTER filter_id="0">
local filter = ClearFilter()
filter:Add(FE_TYPE, OP_IS, CARD_TYPE_CREATURE)
filter:Add(FE_CONTROLLER, OP_NOT, EffectController())
filter:SetZone(ZONE_BATTLEFIELD)
</FILTER>
<RESOLUTION_TIME_ACTION filter_id="0">
local DC = RSN_ObjectDC()
if DC:Count() ~= 0 then
local overload = DC:Int_Get(0)
if overload == 1 then
if FilteredCard() ~= nil then
EffectSourceLKI():DealDamageTo(4, FilteredCard())
end
else
DC:Int_Set(0, 0)
local filter = ClearFilter()
filter:Add(FE_TYPE, OP_IS, CARD_TYPE_CREATURE)
filter:Add(FE_CONTROLLER, OP_NOT, EffectController())
filter:Add(FE_CHARACTERISTIC, OP_NOT, CHARACTERISTIC_HEXPROOF)
filter:Add(FE_CHARACTERISTIC, OP_NOT, CHARACTERISTIC_SHROUD)
EffectController():ChooseItem("CARD_QUERY_CHOOSE_CREATURE_DEAL_4_DAMAGE", EffectDC():Make_Targets(1))
end
else
DC:Int_Set(0, 0)
local filter = ClearFilter()
filter:Add(FE_TYPE, OP_IS, CARD_TYPE_CREATURE)
filter:Add(FE_CONTROLLER, OP_NOT, EffectController())
filter:Add(FE_CHARACTERISTIC, OP_NOT, CHARACTERISTIC_HEXPROOF)
filter:Add(FE_CHARACTERISTIC, OP_NOT, CHARACTERISTIC_SHROUD)
EffectController():ChooseItem("CARD_QUERY_CHOOSE_CREATURE_DEAL_4_DAMAGE", EffectDC():Make_Targets(1))
end
</RESOLUTION_TIME_ACTION>
<RESOLUTION_TIME_ACTION>
local DC = RSN_ObjectDC()
local overload = DC:Int_Get(0)
if overload ~= 1 then
local target = EffectDC():Get_Targets(1):Get_CardPtr(0)
if target ~= nil then
EffectSourceLKI():DealDamageTo(4, target)
end
end
</RESOLUTION_TIME_ACTION>




[I thought this was impossible to code but someone has coded it. I'm not sure if it works in game though.]
- Code: Select all
<COST mana_cost="{3}{R}{R}{R}" type="Mana" />
<COST type="Generic">
<PREREQUISITE>
return true
</PREREQUISITE>
<RESOLUTION_TIME_ACTION>
local DC = RSN_ObjectDC()
DC:Int_Set(0, 1)
</RESOLUTION_TIME_ACTION>
</COST>
<ABILITY_TEXT tag="ALTERNATE_COST_OVERLOAD" />


Sorcery
Target player discards a card.
- Code: Select all
<TARGET tag="CARD_QUERY_CHOOSE_PLAYER_DISCARD_1" definition="0" compartment="0" count="1" />
<TARGET_DEFINITION id="0">
local filter = ClearFilter()
filter:SetFilterType( FILTER_TYPE_PLAYERS )
</TARGET_DEFINITION>
<RESOLUTION_TIME_ACTION>
local player = EffectDC():Get_Targets(0):Get_PlayerPtr(0)
local filter = ClearFilter()
filter:SetZone( ZONE_HAND, player )
player:SetItemCount( 1 )
for i = 0,(1-1) do
player:SetItemPrompt (i, "CARD_QUERY_CHOOSE_CARD_TO_DISCARD" )
end
player:ChooseItems( EffectDC():Make_Targets(1) )
</RESOLUTION_TIME_ACTION>
<RESOLUTION_TIME_ACTION>
local player = EffectDC():Get_Targets(0):Get_PlayerPtr(0)
if player ~= nil then
for i = 0,(1-1) do
local target_card = EffectDC():Get_Targets(1):Get_CardPtr(i)
if target_card ~= nil then
target_card:Discard()
end
end
end
</RESOLUTION_TIME_ACTION>
<AI_SIMPLIFIED_TARGETING compartment="0" hint="HINT_ENEMY_ONLY" />
- Code: Select all
<RESOLUTION_TIME_ACTION>
local filter = ClearFilter()
filter:Add(FE_TYPE, OP_IS, CARD_TYPE_CREATURE)
filter:Add(FE_CONTROLLER, OP_IS, EffectController() )
if EffectSource():IsToken() == false then
EffectController():ChooseItem( "CARD_QUERY_CHOOSE_A_CARD_TO_ENCODE_ONTO", EffectDC():Make_Targets(1), QUERY_FLAG_MAY )
end
</RESOLUTION_TIME_ACTION>
<RESOLUTION_TIME_ACTION>
local cipherDC = EffectDC():Get_Targets(1)
if cipherDC ~= nil then
local chosenCard = cipherDC:Get_CardPtr(0)
if chosenCard ~= nil then
local effectSource = EffectSource()
if (effectSource ~= nil) then
effectSource:Exile()
effectSource:NailOnto(chosenCard)
LinkedDC():Set_CardPtr(0, effectSource)
end
end
end
</RESOLUTION_TIME_ACTION>
<CONTINUOUS_ACTION layer="6">
local chosenCardDC = EffectDC():Get_Targets(1)
if chosenCardDC ~= nil then
local chosencard = chosenCardDC:Get_CardPtr(0)
if chosencard ~= nil then
local characteristics = chosencard:GetCurrentCharacteristics()
characteristics:GrantAbility(1)
chosencard:AddScore(150)
end
end
</CONTINUOUS_ACTION>
<DURATION>
if LinkedDC():Get_CardPtr(0) ~= nil then
local chosenCardDC = EffectDC():Get_Targets(1)
if chosenCardDC ~= nil and chosenCardDC:Get_CardPtr(0) ~= nil then
return false
end
end
return true
</DURATION>
- Code: Select all
<TRIGGER value="SOURCE_DEALS_DAMAGE_TO_PLAYER" simple_qualifier="self" damage_type="combat" />
<RESOLUTION_TIME_ACTION>
local encodedSpell = LinkedDC():Get_CardPtr(0)
local effectController = EffectController()
if encodedSpell ~= nil then
local copy = effectController:CopySpell( encodedSpell )
if EffectController():CanCastSpellForFree(copy) then
EffectController():CastSpellForFree(copy)
end
end
</RESOLUTION_TIME_ACTION>
<MAY tag="CARD_QUERY_WOULD_YOU_LIKE_TO_CAST_MENTAL_VAPORS" always_prompt="1" />



Creature
Play with the top card of your library revealed.
- Code: Select all
<CONTINUOUS_ACTION layer="8">
local player = EffectController()
if player ~= nil then
local top = player:Library_GetTop()
if top ~= nil then
player:GetCurrentCharacteristics():Bool_Set(PLAYER_CHARACTERISTIC_PLAY_WITH_TOP_CARD_OF_LIBRARY_REVEALED, 1)
end
end
</CONTINUOUS_ACTION>
- Code: Select all
<CONTINUOUS_ACTION layer="8">
local player = EffectController()
if player ~= nil then
local top = player:Library_GetTop()
if top ~= nil then
if top:GetCardType():Test(CARD_TYPE_INSTANT) or top:GetCardType():Test(CARD_TYPE_SORCERY) then
player:GetCurrentCharacteristics():Bool_Set(PLAYER_CHARACTERISTIC_CAN_PLAY_TOP_CARD_OF_LIBRARY, 1)
end
end
end
</CONTINUOUS_ACTION>
</STATIC_ABILITY>
- Code: Select all
<TRIGGER value="SPELL_PLAYED" simple_qualifier="controller">
local tobj = TriggerObject()
return tobj ~= nil and tobj:GetErstwhileZone() == ZONE_LIBRARY and
( tobj:GetCardType():Test(CARD_TYPE_INSTANT) or tobj:GetCardType():Test(CARD_TYPE_SORCERY) )
</TRIGGER>
<RESOLUTION_TIME_ACTION>
local tobj = TriggerObjectLKI()
if tobj ~= nil then
local copy = EffectController():CopySpell(tobj)
EffectController():ChooseNewTargets(copy)
end
</RESOLUTION_TIME_ACTION>
Master of Waves


Creature
Protection from red.
- Code: Select all
<CONTINUOUS_ACTION layer="0">
if EffectSource() ~= nil then
local filter = ClearFilter()
filter:Add( FE_COLOUR, OP_IS, COLOUR_RED )
EffectSource():Protection()
end
</CONTINUOUS_ACTION>
- Code: Select all
<FILTER>
local filter = ClearFilter()
filter:Add( FE_CARD_INSTANCE, OP_NOT, EffectSource() )
filter:Add( FE_SUBTYPE, OP_IS, CREATURE_TYPE_ELEMENTAL)
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( 1 )
characteristics:Toughness_Add( 1 )
end
</CONTINUOUS_ACTION>
- Code: Select all
[spoiler=] <TRIGGER value="ZONECHANGE_END" simple_qualifier="self" to_zone="ZONE_BATTLEFIELD" />
<RESOLUTION_TIME_ACTION>
local filter = ClearFilter()
filter:Add( FE_IS_PERMANENT, true )
filter:Add( FE_CONTROLLER, OP_IS, EffectController())
local total = filter:ChromaCount(COLOUR_BLUE)
MTG():PutTokensOntoBattlefield( "TOKEN_ELEMENTAL_1_0_U_247058", total, EffectController() )
</RESOLUTION_TIME_ACTION>
</TRIGGERED_ABILITY>[/spoiler]
- Code: Select all
<TOKEN_REGISTRATION reservation="1" type="TOKEN_ELEMENTAL_1_0_U_247058" />
All examples given are from Magic 2014 XMLs. This approach is similar to the opening post of codes Master Necro started listing in the Formal Request Thread but greatly expanded to include the card fully dissected. Such an idea had been floating around in my mind since Magic 2013 but was never implemented publicly yet I did start the project offline but abandoned it because it became too tedious to create alone. I'll edit and update my thoughts on this again tomorrow but this is the core of what I've imagined. Collectively, I think this wiki-like database may be feasible. I know it will be challenging and yet if someone is brave enough and willing to raise the banner I'm willing to follow.
2 posts
• Page 1 of 1
Who is online
Users browsing this forum: No registered users and 18 guests