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 zysron » 27 Mar 2015, 06:35
i dont know what exactly is wrong with it (maybe the no image) but i tried making Nomads' Assembly with the code posted a few pages ago and it doestn show up in game... also is there a limit to how many cards are in a deck? like do i have to put those extra cards into the unlocks? or am i screwing something up?
Re: Formal Request Thread
by RiiakShiNal » 27 Mar 2015, 10:50
My first guess here would be that you didn't get the encoding right when using the posted code. Card files must be saved using UTF-8 encoding to work properly if anywhere in the card's code non-English characters are used. Note that simply changing the encoding to UTF-8 and re-saving will not work as you will have already lost information if it was previously saved as ANSI/ASCII. If you did not save it in the correct format initially then you will need to take the original code and re-paste it then save in UTF-8.zysron wrote:i dont know what exactly is wrong with it (maybe the no image) but i tried making Nomads' Assembly with the code posted a few pages ago and it doestn show up in game...
Yes and No.zysron wrote:also is there a limit to how many cards are in a deck? like do i have to put those extra cards into the unlocks? or am i screwing something up?
There is a card limit for how many cards the DotP 2014 engine will support in a deck including all unlocks. The limit is 100 cards (including basic lands in the main deck).
If you want the game engine to manage the basic land in the main deck then your main deck (including the amount of basic lands you want) needs to be no more than 60 cards. You can put more than 60 cards into the main deck, but then you will have to manually manage the land as the game engine will no longer be able to manage it for you.
It is highly recommended that you design a 60 card deck (including lands) as the main deck and include any extra cards you want for the deck in the "Unlocks" as that is what the game engine was designed to handle. You can design decks that are different and make them work, but it usually requires quite a bit more work on your part to do so.
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 Xander9009 » 27 Mar 2015, 15:18
Hey, Riiak, I'm looking into the possibility of coding Assault Formation, but of course there's no direct way to code the attacking/defender bit. I counted up the current cards that reference defender in any way, and there are 116. However, I narrowed it down (VERY roughly) to about 11 that target or count defenders.
So, my question: do you think it would work out alright to have things that attack as thought they didn't have defender remove the game's internal defender characteristic and temporarily replace it with a fake defender characteristic, and then add an OR to the cards that target or count defenders to check for either the internal or the fake defender characteristics?
It seems reasonable to me, but I might be missing something.
EDIT: As an addition to the above, I only mostly understand how layers work, so I could be wrong about this, but shouldn't we be able to include a check in the static ability that grants the fake defender which makes it only grant it if it already has it by doing so on a lower layer than the layer on which it's removed? And if they need to be done on the same layer, could we perhaps use a lower layer continuous action whose only purpose is to set an int to 1 or 0 depending on whether or not it has defender at that layer which the fake defender granting action could check? I don't know if there might be instances where this might be necessary, but if there would be, it shouldn't theoretically be difficult to implement if I'm right about how the layers work.
Also, on a completely unrelated note, I know the cards are stored as tables internally. Would it be theoretically possibly to read those tables through lua without using the functions meant to do so? Specifically, I'm thinking of Lazav, Dimir Mastermind. There's currently no way at all to change the name of a card, but if we could read and subsequently write to the card table directly, then we should be able to manage that. So, I'm wondering if it's just a matter of accessing and deciphering the card's table or if there would be technical hurdles we wouldn't be able to overcome. I'm not really intending to try (at the moment, at least, I don't intend to ever try), but I'm curious if it would be potentially possible.
So, my question: do you think it would work out alright to have things that attack as thought they didn't have defender remove the game's internal defender characteristic and temporarily replace it with a fake defender characteristic, and then add an OR to the cards that target or count defenders to check for either the internal or the fake defender characteristics?
It seems reasonable to me, but I might be missing something.
EDIT: As an addition to the above, I only mostly understand how layers work, so I could be wrong about this, but shouldn't we be able to include a check in the static ability that grants the fake defender which makes it only grant it if it already has it by doing so on a lower layer than the layer on which it's removed? And if they need to be done on the same layer, could we perhaps use a lower layer continuous action whose only purpose is to set an int to 1 or 0 depending on whether or not it has defender at that layer which the fake defender granting action could check? I don't know if there might be instances where this might be necessary, but if there would be, it shouldn't theoretically be difficult to implement if I'm right about how the layers work.
Also, on a completely unrelated note, I know the cards are stored as tables internally. Would it be theoretically possibly to read those tables through lua without using the functions meant to do so? Specifically, I'm thinking of Lazav, Dimir Mastermind. There's currently no way at all to change the name of a card, but if we could read and subsequently write to the card table directly, then we should be able to manage that. So, I'm wondering if it's just a matter of accessing and deciphering the card's table or if there would be technical hurdles we wouldn't be able to overcome. I'm not really intending to try (at the moment, at least, I don't intend to ever try), but I'm curious if it would be potentially possible.
_______________________________
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 Zambooo » 27 Mar 2015, 19:07
Is Exploration supposed to "stack" with Crucible of Worlds (letting me play 2 Land Cards from my graveyard)? If so.. it doesn't on the game 

Re: Formal Request Thread
by zysron » 27 Mar 2015, 20:11
theres a static ability on the equipment Warmonger's Chariot i beleive you can turn that into a target ability
i know 2014 has a creature that searches library for a creature with deathtouch or trample (under sealed decks)
i do not know if its possible to take those search params and modify them to work for permenents, but if so could you use that to make the card?
and everything is possible... we just got to figure it out
i know 2014 has a creature that searches library for a creature with deathtouch or trample (under sealed decks)
i do not know if its possible to take those search params and modify them to work for permenents, but if so could you use that to make the card?
and everything is possible... we just got to figure it out
Re: Formal Request Thread
by Xander9009 » 27 Mar 2015, 20:27
To make what card?zysron wrote:theres a static ability on the equipment Warmonger's Chariot i beleive you can turn that into a target ability
i know 2014 has a creature that searches library for a creature with deathtouch or trample (under sealed decks)
i do not know if its possible to take those search params and modify them to work for permenents, but if so could you use that to make the card?
and everything is possible... we just got to figure it out
I don't have the card Warmonger's Chariot. And if you mean to make the defender that can attack ability, the problem is that all methods of doing so thus far have included removing defender, which messes up cards that count or target defenders.
_______________________________
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 RiiakShiNal » 27 Mar 2015, 23:24
If we decide to recode all cards that refer to defender then we can actually completely replace it with a fake defender characteristic. Essentially, at the start of combat on our turn we would need to check cards for the fake defender characteristic as well as any effects that would allow it to attack as though it didn't have defender. If it has the fake defender characteristic and does not have any effects that would allow it to attack during this combat then we would temporarily set CHARACTERISTIC_CANT_ATTACK until end of combat (we could have it expire after attackers are declared, but I think the indicator might be nice just to show why they didn't attack), otherwise we don't set it. Do note, however, that due to the fake characteristics implementation any static ability checking for the fake defender characteristic would need to check on layer 8. We would want to continue to follow the rules for fake characteristics for setting of the flag.Xander9009 wrote:Hey, Riiak, I'm looking into the possibility of coding Assault Formation, but of course there's no direct way to code the attacking/defender bit. I counted up the current cards that reference defender in any way, and there are 116. However, I narrowed it down (VERY roughly) to about 11 that target or count defenders.
So, my question: do you think it would work out alright to have things that attack as thought they didn't have defender remove the game's internal defender characteristic and temporarily replace it with a fake defender characteristic, and then add an OR to the cards that target or count defenders to check for either the internal or the fake defender characteristics?
It seems reasonable to me, but I might be missing something.
I'm not exactly sure what you are trying to say here, but layers work by executing code on the lowest layer first in the order in which the card/effect entered play (later used cards/effects work later). Once a given layer has been completely executed then you execute the next layer up as per the previous rule. Layer 7 is an exception in that it is composed of sub-layers which execute in order from 7a through 7e and is used exclusively for determining power/toughness. Layer 8 is the last layer I am aware of (there might be a layer 9, but I have never seen it).Xander9009 wrote:EDIT: As an addition to the above, I only mostly understand how layers work, so I could be wrong about this, but shouldn't we be able to include a check in the static ability that grants the fake defender which makes it only grant it if it already has it by doing so on a lower layer than the layer on which it's removed? And if they need to be done on the same layer, could we perhaps use a lower layer continuous action whose only purpose is to set an int to 1 or 0 depending on whether or not it has defender at that layer which the fake defender granting action could check? I don't know if there might be instances where this might be necessary, but if there would be, it shouldn't theoretically be difficult to implement if I'm right about how the layers work.
One of the tricky layers is layer 6 as that is where most abilities get granted and where LoseAllAbilities() operates so careful testing is required there.
Theoretically, it may be possible to access and read those tables using Lua functions as long as the C objects that are exposed through the table structure support those built-in Lua functions. For example it may be possible to get a listing of all items in the table by using the table.unpack function. Unfortunately this won't necessarily tell you what a specific item is for example it could be an integer, string, table, or function pointer. So parsing and trying to figure out what is there could be very difficult.Xander9009 wrote:Also, on a completely unrelated note, I know the cards are stored as tables internally. Would it be theoretically possibly to read those tables through lua without using the functions meant to do so? Specifically, I'm thinking of Lazav, Dimir Mastermind. There's currently no way at all to change the name of a card, but if we could read and subsequently write to the card table directly, then we should be able to manage that. So, I'm wondering if it's just a matter of accessing and deciphering the card's table or if there would be technical hurdles we wouldn't be able to overcome. I'm not really intending to try (at the moment, at least, I don't intend to ever try), but I'm curious if it would be potentially possible.
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 Zambooo » 28 Mar 2015, 01:27
I coded an "approximation" of Assault Formation (already in the CW), and the best I could do without fake characteristics was to remove Defender for the shortest amount possible: from the beginning of combat to the Defenders declared step (excluded)
Recoding all cards with Defender didn't not seem like an affordable idea IMO :/
Recoding all cards with Defender didn't not seem like an affordable idea IMO :/
Re: Formal Request Thread
by Xander9009 » 28 Mar 2015, 02:27
I could do that, but I actually only intended to recode the 11 cards that count or target defenders.RiiakShiNal wrote:If we decide to recode all cards that refer to defender then we can actually completely replace it with a fake defender characteristic. Essentially, at the start of combat on our turn we would need to check cards for the fake defender characteristic as well as any effects that would allow it to attack as though it didn't have defender. If it has the fake defender characteristic and does not have any effects that would allow it to attack during this combat then we would temporarily set CHARACTERISTIC_CANT_ATTACK until end of combat (we could have it expire after attackers are declared, but I think the indicator might be nice just to show why they didn't attack), otherwise we don't set it. Do note, however, that due to the fake characteristics implementation any static ability checking for the fake defender characteristic would need to check on layer 8. We would want to continue to follow the rules for fake characteristics for setting of the flag.
That's how I thought they worked. I was just saying that I wasn't 100% certain if it would be necessary, but if a creature with defender is given the ability to attack as though it didn't have defender until end of turn, and then the same creature loses defender, it would still have the fake characteristic which shouldn't be there.RiiakShiNal wrote:I'm not exactly sure what you are trying to say here, but layers work by executing code on the lowest layer first in the order in which the card/effect entered play (later used cards/effects work later). Once a given layer has been completely executed then you execute the next layer up as per the previous rule. Layer 7 is an exception in that it is composed of sub-layers which execute in order from 7a through 7e and is used exclusively for determining power/toughness. Layer 8 is the last layer I am aware of (there might be a layer 9, but I have never seen it).
One of the tricky layers is layer 6 as that is where most abilities get granted and where LoseAllAbilities() operates so careful testing is required there.
Activate Wakestone Gargoyle. Wakestone Gargoyle removes intrinsic defender characteristic from Gargoyle Sentinel and replace it with a fake defender characteristic and a "can attack as though..." fake characteristic.
Activate Gargoyle Sentinel, which tries to remove the intrinsic defender, but it's already gone. Now, Gargoyle Sentinel will still count for Vent Sentinel even though it shouldn't. It could attack, which it should be able to do, and that much works, but it's still a potential for the same problem the current method has.
What I was asking about is if it would be possible to check on layer 1 if Gargoyle Sentinel has the intrinsic defender characteristic each continuous action iteration before removing and replacing it on layer 6. If it doesn't have it, then don't grant the fake one because it's been removed somehow. This is only if we don't want to recode all of the cards with defender. Which I'd rather avoid.
Yeah, I figured that if it was possible to get some arbitrary element, it would have to be tested to see what it is. I was thinking that it would be easiest to take a few simple cards and get as many elements as possible and compare them to the cards and try to spot a pattern.RiiakShiNal wrote:Theoretically, it may be possible to access and read those tables using Lua functions as long as the C objects that are exposed through the table structure support those built-in Lua functions. For example it may be possible to get a listing of all items in the table by using the table.unpack function. Unfortunately this won't necessarily tell you what a specific item is for example it could be an integer, string, table, or function pointer. So parsing and trying to figure out what is there could be very difficult.
Yes, the point of the layer questions was to avoid recoding all cards with defender. Only 11 or so would need redone to grant and/or check the fake characteristic. Everything else would stay as it is.Zambooo wrote:I coded an "approximation" of Assault Formation (already in the CW), and the best I could do without fake characteristics was to remove Defender for the shortest amount possible: from the beginning of combat to the Defenders declared step (excluded)
Recoding all cards with Defender didn't not seem like an affordable idea IMO :/
_______________________________
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 RiiakShiNal » 28 Mar 2015, 12:46
Yes and no. You can check intrinsic characteristics like that, but you typically can't check assigned characteristics until layer 7 or 8 (since they are assigned on layer 6). Though you would still have a problem checking things on layer 1 since what you see on layer 1 may or may not equal what you see on layer 8. For example you have your Gargoyle Sentinel and use it's ability to remove the intrinsic defender on layer 0 and you check on layer 1 to see if it needs fake defender. Then an opponent casts Ovinize on the Gargoyle Sentinel so now on layer 6 there is a LoseAllAbilities() which will clear any intrinsic/granted abilities, but unfortunately this does not clear fake characteristics (which are stored in chests in the DuelDataChest()) which is what makes things tricky. Now you still have the fake characteristic on Gargoyle Sentinel (even though it shouldn't be due to Ovinize) and it will still be counted for Vent Sentinel even though it shouldn't at this point.Xander9009 wrote:What I was asking about is if it would be possible to check on layer 1 if Gargoyle Sentinel has the intrinsic defender characteristic each continuous action iteration before removing and replacing it on layer 6. If it doesn't have it, then don't grant the fake one because it's been removed somehow. This is only if we don't want to recode all of the cards with defender. Which I'd rather avoid.
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 zysron » 29 Mar 2015, 22:12
OK i got all the errors fixed... but i put it into my deck and it doest have any abilities... can i get some help with my necrotic ooze?
oh damn do i need the full cards name including the cw multiverse id?
- Code: Select all
<?xml version='1.0'?>
<CARD_V2>
<FILENAME text="NECROTIC_OOZE_CW_277300" />
<CARDNAME text="NECROTIC_OOZE" />
<TITLE>
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Necrotic Ooze]]></LOCALISED_TEXT>
</TITLE>
<MULTIVERSEID value="277300" />
<ARTID value="131041" />
<ARTIST name="James Ryman" />
<CASTING_COST cost="{2}{B}{B}" />
<FLAVOURTEXT>
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[“To death all must go, and so in death lies ultimate power.”
—Geth, Lord of the Vault]]></LOCALISED_TEXT>
</FLAVOURTEXT>
<TYPE metaname="Creature" />
<SUB_TYPE metaname="Ooze" order_de-DE="0" order_es-ES="0" order_fr-FR="0" order_it-IT="0" order_jp-JA="0" order_ko-KR="0" order_pt-BR="0" order_ru-RU="0" />
<EXPANSION value="DPG" />
<RARITY metaname="R" />
<POWER value="4" />
<TOUGHNESS value="3" />
<STATIC_ABILITY filter_zone="ZONE_GRAVEYARD">
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[As long as Necrotic Ooze is on the battlefield, it has all activated abilities of all creature cards in all graveyards.]]></LOCALISED_TEXT>
<FILTER>
return (FilteredCard() ~= nil and
FilteredCard():GetCardType():Test( CARD_TYPE_CREATURE ) ~= 0 and
FilteredCard():GetZone() == (ZONE_GRAVEYARD))
</FILTER>
<CONTINUOUS_ACTION>
local characteristics = Object():GetCurrentCharacteristics()
local card = FilteredCard()
if card:GetCardName() == "AVATAR_OF_WOE" then
characteristics:GrantAbility(1)
elseif card:GetCardName() == "BURNISHED_HART" then
characteristics:GrantAbility(2)
elseif card:GetCardName() == "DRANA_KALASTRIA_BLOODCHIEF" then
characteristics:GrantAbility(3)
elseif card:GetCardName() == "GETH_LORD_OF_THE_VAULT" then
characteristics:GrantAbility(4)
elseif card:GetCardName() == "PACK_RAT" then
characteristics:GrantAbility(5)
elseif card:GetCardName() == "STEEL_HELLKITE" then
characteristics:GrantAbility(6)
elseif card:GetCardName() == "STEEL_HELLKITE" then
characteristics:GrantAbility(7)
elseif card:GetCardName() == "URBORG_SKELETON" then
characteristics:GrantAbility(8)
elseif card:GetCardName() == "SKIRSDAG_HIGH_PRIEST" then
characteristics:GrantAbility(9)
characteristics:GrantAbility(10)
end
</CONTINUOUS_ACTION>
</STATIC_ABILITY>
<ACTIVATED_ABILITY resource_id="1">
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[{T}: Destroy target creature. It can’t be regenerated.]]></LOCALISED_TEXT>
<COST type="TapSelf" />
<TARGET tag="CARD_QUERY_CHOOSE_CREATURE_TO_DESTROY" definition="0" compartment="0" count="1" />
<TARGET_DEFINITION id="0">
local filter = ClearFilter()
filter:Add( FE_TYPE, OP_IS, CARD_TYPE_CREATURE )
</TARGET_DEFINITION>
<RESOLUTION_TIME_ACTION>
local target = EffectDC():Get_Targets(0):Get_CardPtr(0)
if target ~= nil then
target:DestroyWithoutRegenerate()
end
</RESOLUTION_TIME_ACTION>
<AI_AVAILABILITY window_step="declare_blockers" type="window" />
<AI_AVAILABILITY type="in_response" response_source="1" />
<AI_AVAILABILITY window_step="main_1" window_turn="my_turn" type="window" />
<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="declare_blockers" type="window" />
<AI_AVAILABILITY window_step="end_of_turn" type="window" />
<AI_AVAILABILITY type="in_response" response_source="1" response_target="1" />
<AI_SIMPLIFIED_TARGETING compartment="0" hint="HINT_ENEMY_ONLY" />
</ACTIVATED_ABILITY>
<ACTIVATED_ABILITY resource_id="2">
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[{3}, Sacrifice Necrotic Ooze: Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle your library.]]></LOCALISED_TEXT>
<COST mana_cost="{3}" type="Mana" />
<COST type="SacrificeSelf" />
<RESOLUTION_TIME_ACTION>
local effectController = EffectController()
local filter = ClearFilter()
filter:Add( FE_TYPE, OP_IS, CARD_TYPE_LAND )
filter:Add( FE_SUPERTYPE, OP_IS, SUPERTYPE_BASIC )
filter:SetZone( ZONE_LIBRARY, effectController)
effectController:SetItemCount( 2 )
effectController:SetItemPrompt( 0, "CARD_QUERY_CHOOSE_LAND_TO_PUT_ONTO_THE_BATTLEFIELD_TAPPED" )
effectController:SetItemPrompt( 1, "CARD_QUERY_CHOOSE_LAND_TO_PUT_ONTO_THE_BATTLEFIELD_TAPPED" )
effectController:ChooseItems( EffectDC():Make_Targets(0), QUERY_FLAG_UP_TO )
</RESOLUTION_TIME_ACTION>
<RESOLUTION_TIME_ACTION>
for i = 0,(2-1) do
local target_card = EffectDC():Get_Targets(0):Get_CardPtr(i)
if target_card ~= nil then
target_card:PutOntoBattlefieldTapped( EffectController() )
end
end
</RESOLUTION_TIME_ACTION>
<RESOLUTION_TIME_ACTION>
EffectController():ShuffleLibrary()
</RESOLUTION_TIME_ACTION>
<AI_AVAILABILITY window_step="end_of_turn" window_turn="their_turn" type="window" />
<AI_AVAILABILITY type="in_response" />
<AI_AVAILABILITY window_step="main_2" window_turn="my_turn" type="window" />
<AI_AVAILABILITY window_step="main_1" window_turn="my_turn" type="window" />
</ACTIVATED_ABILITY>
<ACTIVATED_ABILITY resource_id="3">
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[{X}{B}{B}: Target creature gets -0/-X until end of turn and Necrotic Ooze gets +X/+0 until end of turn.]]></LOCALISED_TEXT>
<COST mana_cost="{X}{B}{B}" type="Mana" />
<TARGET tag="CARD_QUERY_CHOOSE_CREATURE_TO_LOSE_0_X" definition="0" compartment="0" count="1" />
<TARGET_DEFINITION id="0">
local filter = ClearFilter()
filter:Add(FE_TYPE, OP_IS, CARD_TYPE_CREATURE)
</TARGET_DEFINITION>
<CONTINUOUS_ACTION layer="7C">
local target = EffectDC():Get_Targets(0):Get_CardPtr(0)
if target ~= nil then
target:GetCurrentCharacteristics():Toughness_Add( -GetEffectX() )
end
</CONTINUOUS_ACTION>
<CONTINUOUS_ACTION layer="7C">
if EffectSource() ~= nil then
EffectSource():GetCurrentCharacteristics():Power_Add( GetEffectX() )
end
</CONTINUOUS_ACTION>
<DURATION simple_duration="UntilEOT" />
<AI_SIMPLIFIED_TARGETING compartment="0" hint="HINT_ENEMY_ONLY" />
<AI_AVAILABILITY type="in_response" response_source="1" />
<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="declare_blockers" type="window" />
<AI_AVAILABILITY window_step="end_of_turn" type="window" />
<SFX text="TARGET_FANG_PLAY" />
</ACTIVATED_ABILITY>
<ACTIVATED_ABILITY resource_id="4">
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[{X}{B}: Put target artifact or creature card with converted mana cost X from an opponent’s graveyard onto the battlefield under your control tapped. Then that player puts the top X cards of his or her library into his or her graveyard.]]></LOCALISED_TEXT>
<COST mana_cost="{X}{B}" type="Mana" />
<TARGET tag="CARD_QUERY_CHOOSE_ARTIFACT_OR_CREATURE_TO_PUT_ONTO_THE_BATTLEFIELD" definition="0" compartment="0" count="1" />
<TARGET_DEFINITION id="0">
local filter = ClearFilter()
filter:Add( FE_CMC, OP_EQUALS, GetEffectX() )
local subfilter = filter:AddSubFilter_Or()
subfilter:Add( FE_TYPE, OP_IS, CARD_TYPE_ARTIFACT )
subfilter:Add( FE_TYPE, OP_IS, CARD_TYPE_CREATURE )
filter:Add( FE_OWNER, OP_NOT, EffectController() )
filter:SetZone( ZONE_GRAVEYARD )
</TARGET_DEFINITION>
<RESOLUTION_TIME_ACTION>
local target = EffectDC():Get_Targets(0):Get_CardPtr(0)
if target ~= nil then
target:PutOntoBattlefieldTapped( EffectController() )
target:GetOwner():MillCards( GetEffectX() )
end
</RESOLUTION_TIME_ACTION>
</ACTIVATED_ABILITY>
<ACTIVATED_ABILITY resource_id="5">
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[{2}{B}, Discard a card: Put a token onto the battlefield that’s a copy of Pack Rat.]]></LOCALISED_TEXT>
<COST mana_cost="{2}{B}" type="Mana" />
<COST type="Discard" definition="0" compartment="1" query_tag="CARD_QUERY_CHOOSE_CARD_TO_DISCARD" item_count="1" />
<COST_DEFINITION id="0">
local filter = ClearFilter()
filter:SetZone( ZONE_HAND, EffectController())
</COST_DEFINITION>
<RESOLUTION_TIME_ACTION>
MTG():PutTokenCopiesOntoBattlefield( EffectSourceLKI(), 1, EffectController() )
</RESOLUTION_TIME_ACTION>
<AI_AVAILABILITY window_step="declare_blockers" type="window" />
<AI_AVAILABILITY type="in_response" response_source="1" />
<AI_AVAILABILITY window_step="end_of_turn" 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" />
</ACTIVATED_ABILITY>
<ACTIVATED_ABILITY firebreathing="1" resource_id="6">
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[{2}: Necrotic Ooze gets +1/+0 until end of turn.]]></LOCALISED_TEXT>
<COST mana_cost="{2}" type="Mana" />
<CONTINUOUS_ACTION layer="7C">
if EffectSource() ~= nil then
local characteristics = EffectSource():GetCurrentCharacteristics()
characteristics:Power_Add( 1 )
characteristics:Toughness_Add( 0 )
end
</CONTINUOUS_ACTION>
<DURATION simple_duration="UntilEOT" />
</ACTIVATED_ABILITY>
<ACTIVATED_ABILITY per_turn_limit="1" resource_id="7">
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[{X}: Destroy each nonland permanent with converted mana cost X whose controller was dealt combat damage by Necrotic Ooze this turn. Activate this ability only once each turn.]]></LOCALISED_TEXT>
<COST type="Mana" cost="{X}" />
<FILTER>
local player = ObjectDC():Get_PlayerPtr(97)
return (FilteredCard():GetPlayer() == player and FilteredCard():GetConvertedManaCost() == GetEffectX())
</FILTER>
<RESOLUTION_TIME_ACTION>
FilteredCard():Destroy()
</RESOLUTION_TIME_ACTION>
<AI_AVAILABILITY step="main_2" turn="my_turn" />
</ACTIVATED_ABILITY>
<ACTIVATED_ABILITY resource_id="8">
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[{B}: Regenerate Necrotic Ooze.]]></LOCALISED_TEXT>
<COST mana_cost="{B}" type="Mana" />
<RESOLUTION_TIME_ACTION>
if EffectSource() ~= nil then
EffectSource():GiveRegeneration()
end
</RESOLUTION_TIME_ACTION>
<AI_AVAILABILITY window_step="declare_blockers" type="window" window_in_combat="1" />
<AI_AVAILABILITY type="in_response" response_source="1" />
<AI_AVAILABILITY type="restriction" restriction_type="no_regeneration_shield" />
<AI_MODIFIERS combat_immunity="1" />
</ACTIVATED_ABILITY>
<ACTIVATED_ABILITY resource_id="9">
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[|Morbid| — {T}, Tap two untapped creatures you control: Put a 5/5 black Demon creature token with flying onto the battlefield. Activate this ability only if a creature died this turn.]]></LOCALISED_TEXT>
<AVAILABILITY>
local interrogation = MTG():ClearInterrogationQuery()
interrogation:SetFromZone( ZONE_BATTLEFIELD )
interrogation:SetToZone( ZONE_GRAVEYARD )
interrogation:SetType( CARD_TYPE_CREATURE )
if interrogation:Test( INTERROGATE_CARDS_MOVED_ZONE, INTERROGATE_THIS_TURN ) then
return true
else
return false
end
</AVAILABILITY>
<COST type="TapSelf" />
<COST type="Tap" definition="0" compartment="1" query_tag="CARD_QUERY_CHOOSE_CREATURE_TAP" item_count="2" />
<COST_DEFINITION id="0">
local filter = ClearFilter()
filter:Add( FE_CARD_INSTANCE, OP_NOT, EffectSource() )
filter:Add( FE_TYPE, OP_IS, CARD_TYPE_CREATURE )
filter:Add( FE_CONTROLLER, OP_IS, EffectController() )
filter:Add( FE_IS_TAPPED, false )
</COST_DEFINITION>
<RESOLUTION_TIME_ACTION>
MTG():PutTokensOntoBattlefield( "TOKEN_DEMON_C_5_5_B_F_CW_1", 1, EffectController() )
</RESOLUTION_TIME_ACTION>
<AI_AVAILABILITY window_step="declare_blockers" type="window" />
<AI_AVAILABILITY type="in_response" response_source="1" />
<AI_AVAILABILITY window_step="end_of_turn" window_turn="their_turn" type="window" />
<AI_AVAILABILITY window_step="declare_attackers" window_turn="their_turn" type="window" />
<AI_AVAILABILITY window_step="main_2" window_turn="my_turn" type="window" />
<AI_AVAILABILITY window_step="main_1" window_turn="my_turn" type="window" />
</ACTIVATED_ABILITY>
<TOKEN_REGISTRATION reservation="1" type="TOKEN_DEMON_C_5_5_B_F_CW_1" />
<HELP title="MORE_INFO_BADGE_TITLE_10" body="MORE_INFO_BADGE_BODY_10" zone="ZONE_ANY" />
<HELP title="MORE_INFO_BADGE_TITLE_31" body="MORE_INFO_BADGE_BODY_31" zone="ZONE_ANY" />
<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" />
<AI_BASE_SCORE score="600" zone="ZONE_IN_PLAY" />
</CARD_V2>
oh damn do i need the full cards name including the cw multiverse id?
Re: Formal Request Thread
by Xander9009 » 29 Mar 2015, 22:38
Look closer at a random card. It has two tags, CARDNAME and FILENAME. GetCardName returns the CARDNAME tag, not the FILENAME tag, so no, you don't need the CW and multiverse ID bits.
Get rid of filter_zone="ZONE_GRAVEYARD". Secondly, Within a <FILTER> block, you shouldn't use FilteredCard(). The filter you need is this:
<FILTER filter_id="1">
local filter = ClearFilter()
filter:SetZone(ZONE_GRAVEYARD)
filter:Add(FE_TYPE, OP_IS, CARD_TYPE_CREATURE)
</FILTER>
And then the continuous action needs to refer to filter_id="1" in order to use FilteredCard().
<CONTINUOUS_ACTION filter_id="1">
Get rid of filter_zone="ZONE_GRAVEYARD". Secondly, Within a <FILTER> block, you shouldn't use FilteredCard(). The filter you need is this:
<FILTER filter_id="1">
local filter = ClearFilter()
filter:SetZone(ZONE_GRAVEYARD)
filter:Add(FE_TYPE, OP_IS, CARD_TYPE_CREATURE)
</FILTER>
And then the continuous action needs to refer to filter_id="1" in order to use FilteredCard().
<CONTINUOUS_ACTION filter_id="1">
_______________________________
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 zysron » 29 Mar 2015, 22:43
also Geth, Lord of The Vault does not work... ?
Ogre Slumlord doesnt work correctly
if there are multiple slumlords on the field then you should also get a rat if a slumlord dies example
my opponent had 4 slumlords i had two if i used black sun zenith my opponent should have gotten 20 rats and i should have gotten 10 rats but instead neither of us got rats.
Ogre Slumlord doesnt work correctly
if there are multiple slumlords on the field then you should also get a rat if a slumlord dies example
my opponent had 4 slumlords i had two if i used black sun zenith my opponent should have gotten 20 rats and i should have gotten 10 rats but instead neither of us got rats.
Who is online
Users browsing this forum: No registered users and 10 guests