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)
2013
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)
2013
DotP2013 OFFICIAL CARDS Bug Fixes (last update 13/8/2013)
Moderator: CCGHQ Admins
Re: DotP2013 Core Bug Fixes (last update 10/8/2012)
by thefiremind » 10 Aug 2012, 14:47
Exalted doesn't have auto_skip because it's an effect that matters for the chance of destroying the creature. Possible scenario: if you have a Shock and the opponent attacks with a 2/2, you'll want to destroy it before it receives the exalted bonuses. And at the same time, you need to know which creature will be used for attack, because if you destroy a creature at the beginning of the combat phase, the opponent will simply attack with another.MisterBenn wrote:Thefiremind would you consider adding auto skip tags to the Exalted cards as a comfort improvement? It's a bit ridiculous that you have to watch like 7 full animations every turn and there's no advantage to monitoring them all...
Without auto_skip:
- Beginning of combat step: you have priority (too early to Shock any creature, you don't know which one will attack)
- Attacker is declared
- Declare attackers step: the first exalted triggers and you have priority (you can Shock the creature now)
- Declare attackers step: the first exalted resolves, then the second exalted triggers and you have priority again
- etc.
- Beginning of combat step: you have priority
- Attacker is declared
- Declare attackers step: all the exalted abilities trigger and resolve, then you have priority (too late to Shock the creature)
< 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: DotP2013 Core Bug Fixes (last update 10/8/2012)
by MisterBenn » 10 Aug 2012, 15:40
Hmmm I hadn't thought of it like that. Comfort is one thing but I don't wanna suggest getting in the way of the rules, I guess I will put up with it. Unfortunately I avoid the deck because all the waiting makes me ache!
- MisterBenn
- Posts: 97
- Joined: 19 Mar 2011, 16:19
- Has thanked: 24 times
- Been thanked: 11 times
Re: DotP2013 Core Bug Fixes (last update 10/8/2012)
by GamerXYZ0 » 10 Aug 2012, 18:38
Make the AI a deck consisting of 9 Goblin Guides and 51 Mountains, and for yourself a deck with 60 Basic Lands. Everytime you start first, you win guaranteed, as the AI refuses to attack with Goblin Guide when a land is on top of the deck (the exception is when you'd lose the game, hence 9 Goblin Guides and not 10).MisterBenn wrote:On the AI knowing your cards, I haven't really seen convincing proof of that in my games so far. I often wandered whether the AI would consider what cards exist in the opponent's overall deck and include that in the calculations somehow, rather than just read their cards. They still walk into the "attack then cast Giant Growth to kill the blocker" all the time!
I do know that the AI priorities got worked on in 2013, it particularly shows in FFA. In 2012 the emphasis was on causing damage to anyone who couldn't defend it (they would dogpile someone who hadn't placed a creature yet). In 2013 the emphasis is on attacking the person with a large (perceived) threat in play. If you play a permanent with an AI_BASE_SCORE early on and noone else has creatures yet, opponents tend to target you with their burn and discard spells, etc. Yesterday I won an FFA with Crosswinds where after about 6 turns I had one island and two Kraken Hatchlings. The opponents (Krenko, Olivia and Garruk in my deck in development) had like 6 creatures each and were fighting furiously and ignoring me. I recovered up to 4 mana and got my Talrand's Invocations out just as one opponent remained and I managed to clinch it from nowhere.
Right: my preamble is over, now a suggestion. Thefiremind would you consider adding auto skip tags to the Exalted cards as a comfort improvement? It's a bit ridiculous that you have to watch like 7 full animations every turn and there's no advantage to monitoring them all...
Re: DotP2013 Core Bug Fixes (last update 12/8/2012)
by GamerXYZ0 » 13 Aug 2012, 23:19
I've lately seen some weird AI plays (haven't updated yet, I'm waiting for the DLC. Likely, some additional DATA_CORE changes will be made, like the text permanent. So, I don't know if it's fixed in the update, but I also know it's not caused by an update), which I was wondering is fixable or not.
Compulsive Research: the AI rather frequently discards a non-land card, then a land card afterwards (seems to especially happen with Jhessian Zombies)
Prey Upon: the AI seems to just randomly use it, regardless of how terrible it is. Latest example: using it on his Wolf Token vs my 32/32 tapped Sewer Nemesis (while I had a killable Hedron Crab).
Compulsive Research: the AI rather frequently discards a non-land card, then a land card afterwards (seems to especially happen with Jhessian Zombies)
Prey Upon: the AI seems to just randomly use it, regardless of how terrible it is. Latest example: using it on his Wolf Token vs my 32/32 tapped Sewer Nemesis (while I had a killable Hedron Crab).
Re: DotP2013 Core Bug Fixes (last update 12/8/2012)
by thefiremind » 13 Aug 2012, 23:41
I can't do anything about bad AI plays, they don't depend on the card code.
< 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: DotP2013 Core Bug Fixes (last update 15/8/2012)
by pcastellazzi » 13 Sep 2012, 19:20
Phyrexian Metamorph. NPE when the target is removed. The RESOLUTION_TIME_ACTION of the come into play trigger is not checking if the target chest is present. The correct code should something like:
- Code: Select all
local target_chest = EffectDC():Get_Targets(0)
if (target_chest ~= nil) then
local target_creature = target_chest:Get_CardPtr(0)
if (target_creature ~= nil) then
-- this grabs the copiable values from the target and puts them into a datachest
target_creature:StoreCopiableValues(EffectDC():Make_Chest(1))
-- this needs to be here to refire any other transition triggers (e.g. devour)
EffectSource():UseCopiableValues(EffectDC():Get_Chest(1))
-- this stops the effect from being wiped when we complete the zonechange
EffectDC():Protect_CardPtr(COMPARTMENT_ID_EFFECT_SOURCE)
end
end
The lights then came up and the crowd erupted in applause, because that's what the crowd does after it watches destruction on a large screen.
— Ben Kuchera, Mordern Warfare 3 review.
— Ben Kuchera, Mordern Warfare 3 review.
-

pcastellazzi - Posts: 184
- Joined: 25 Apr 2012, 00:40
- Location: Montevideo, Uruguay
- Has thanked: 11 times
- Been thanked: 30 times
Re: DotP2013 Core Bug Fixes (last update 15/8/2012)
by thefiremind » 13 Sep 2012, 21:13
Are you sure about that? I always thought that the chest exists after calling ChooseTarget and keeps existing even if the pointers it contains are removed. In fact most cards just check the pointer and not the chest.
< 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: DotP2013 Core Bug Fixes (last update 15/8/2012)
by pcastellazzi » 14 Sep 2012, 19:46
I am sure about the check need to be done. If i use the fix presented here the errors go away. I am not sure about the reason for this because, as you said, most cards don't do it. On the other hand, the inconsistencies in coding styles are not new.thefiremind wrote:Are you sure about that? I always thought that the chest exists after calling ChooseTarget and keeps existing even if the pointers it contains are removed. In fact most cards just check the pointer and not the chest.
- Code: Select all
lua] [string "PHYREXIAN_METAMORPH_281256_TITLE (RESOLUTION_TIME_ACTION) [1456]"]:2: attempt to index a nil value
- Code: Select all
<RESOLUTION_TIME_ACTION>
local target_creature = EffectDC():Get_Targets(0):Get_CardPtr(0)
if ( target_creature ~= nil ) then
target_creature:StoreCopiableValues(EffectDC():Make_Chest(1)) -- this grabs the copiable values from the target and puts them into a datachest
EffectSource():UseCopiableValues(EffectDC():Get_Chest(1)) -- this needs to be here to refire any other transition triggers (e.g. devour)
EffectDC():Protect_CardPtr( COMPARTMENT_ID_EFFECT_SOURCE ) -- this stops the effect from being wiped when we complete the zonechange
end
</RESOLUTION_TIME_ACTION>
update: Answer clarified.
The lights then came up and the crowd erupted in applause, because that's what the crowd does after it watches destruction on a large screen.
— Ben Kuchera, Mordern Warfare 3 review.
— Ben Kuchera, Mordern Warfare 3 review.
-

pcastellazzi - Posts: 184
- Joined: 25 Apr 2012, 00:40
- Location: Montevideo, Uruguay
- Has thanked: 11 times
- Been thanked: 30 times
Re: DotP2013 Core Bug Fixes (last update 01/10/2012)
by thefiremind » 01 Oct 2012, 18:59
I'll leave Phyrexian Metamorph as it is until you find something more.
In the meanwhile I updated the WAD with a fix for Daybreak Coronet. The game update substituted SetMinEnchantmentCount with SetMinOtherEnchantmentCount, so the old version of the card didn't work anymore. I invented the following function and used it inside Daybreak Coronet:
Note that my version of the game is updated, so I didn't have any chance to test on a non-updated version. If you find a problem, let me know.
In the meanwhile I updated the WAD with a fix for Daybreak Coronet. The game update substituted SetMinEnchantmentCount with SetMinOtherEnchantmentCount, so the old version of the card didn't work anymore. I invented the following function and used it inside Daybreak Coronet:
- Code: Select all
Compatible_SetMinOtherEnchantmentCount = function(filter, count)
-- A "Daybreak Coronet" function that works for both the updated and the non-updated version of DotP2013
if (type(filter.SetMinEnchantmentCount) == "function") then
local loc_count = count
if Object():GetParent() ~= nil then
-- if this is attached, it counts itself
loc_count = loc_count + 1
end
filter:SetMinEnchantmentCount(loc_count)
else
filter:SetMinOtherEnchantmentCount(count)
end
end
Note that my version of the game is updated, so I didn't have any chance to test on a non-updated version. If you find a problem, let me know.
< 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: DotP2013 Core Bug Fixes (last update 01/10/2012)
by SkinnyGoblin » 02 Oct 2012, 20:03
Thanks for the update firemind, I love your work!
- SkinnyGoblin
- Posts: 5
- Joined: 02 Oct 2012, 19:52
- Has thanked: 3 times
- Been thanked: 0 time
Re: DotP2013 Core Bug Fixes (last update 01/10/2012)
by GamerXYZ0 » 03 Oct 2012, 22:22
I just read on the Wizards forum that when you're affected by Mana Leak and want to pay the 3 colorless, you can't choose which mana to tap. With alot more dual-color decks now, it would be nice if that's possible (no idea if coding that would be possible, though).
Re: DotP2013 Core Bug Fixes (last update 01/10/2012)
by thefiremind » 04 Oct 2012, 10:06
Using TapLand doesn't allow choices and I don't think there's a solution for that.GamerXYZ0 wrote:I just read on the Wizards forum that when you're affected by Mana Leak and want to pay the 3 colorless, you can't choose which mana to tap. With alot more dual-color decks now, it would be nice if that's possible (no idea if coding that would be possible, though).
< 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: DotP2013 Core Bug Fixes (last update 15/8/2012)
by BlindWillow » 07 Oct 2012, 00:21
I'm not sure, but I think it happens when an ability has triggered but no valid targets exist at the time of choosing targets. At least, I've had many instances where I've had to add an extra data chest check to avoid script errors. And in cases of multiple choice abilities with multiple targeting options, you always have to have this check. Actually, I'm beginning to think it might actually be a good idea to just go ahead and do this check no matter what, to be on the safe side.thefiremind wrote:Are you sure about that? I always thought that the chest exists after calling ChooseTarget and keeps existing even if the pointers it contains are removed. In fact most cards just check the pointer and not the chest.
- BlindWillow
- Posts: 213
- Joined: 19 Jul 2012, 00:26
- Has thanked: 11 times
- Been thanked: 46 times
Re: DotP2013 Core Bug Fixes (last update 15/8/2012)
by BlindWillow » 07 Oct 2012, 00:26
Here's my code for Birthing Pod (I notice it's in one of the expansion's challenges too) if you want to compare. I get no script errors bringing Metamorph into play with it. (You can ignore the part that keeps the AI from being an idiot and putting multiple Meliras into play, of course.)pcastellazzi wrote:After testing a little bit more the NPE is thrown when the card is searched by Birthing Pod. I did a quick test with Fauna Shaman (from core) and it not happend. I am assuming i did something unexpected/wrong with the implementation of Birthing Pod, but it's really weird since is allmost a clone of Fauna Shaman but with a different cost.
- Code: Select all
<ACTIVATED_ABILITY sorcery_time="1" auto_skip="1">
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[{1}{L}, {T}, Sacrifice a creature: Search your library for a creature card with converted mana cost equal to 1 plus the sacrificed creature’s converted mana cost, put that card onto the battlefield, then shuffle your library. Activate this ability only any time you could cast a sorcery.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[{1}{L}, {T}, sacrifiez une créature : Cherchez dans votre bibliothèque une carte de créature ayant un coût converti de mana égal à 1 plus le coût converti de mana de la créature sacrifiée, mettez cette carte sur le champ de bataille, puis mélangez votre bibliothèque. N’activez cette capacité que lorsque vous pourriez lancer un rituel.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[{1}{L}, {T}, sacrificar una criatura: Busca en tu biblioteca una carta de criatura con coste de maná convertido igual a 1 más el coste de maná convertido de la criatura sacrificada, pon esa carta en el campo de batalla y luego baraja tu biblioteca. Activa esta habilidad sólo cuando puedas lanzar un conjuro.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[{1}{L}, {T}, opfere eine Kreatur: Durchsuche deine Bibliothek nach einer Kreaturenkarte mit umgewandelten Manakosten von 1 plus den umgewandelten Manakosten der geopferten Kreatur, bringe diese Karte ins Spiel und mische dann deine Bibliothek. Aktiviere diese Fähigkeit nur zu einem Zeitpunkt, zu dem du auch eine Hexerei wirken könntest.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[{1}{L}, {T}, Sacrifica una creatura: Passa in rassegna il tuo grimorio per una carta creatura con costo di mana convertito pari a 1 più il costo di mana convertito della creatura sacrificata, metti sul campo di battaglia quella carta, poi rimescola il tuo grimorio. Attiva questa abilità solo quando potresti lanciare una stregoneria.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[{1}{L}, {T}, クリーチャーを1体生け贄に捧げる:あなたのライブラリーから、その生け贄に捧げたクリーチャーの点数で見たマナ・コストに1を足した値に等しい点数で見たマナ・コストを持つクリーチャー・カードを1枚探し、そのカードを戦場に出し、その後あなたのライブラリーを切り直す。 この能力は、あなたがソーサリーを唱えられるときにのみ起動できる。]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[{1}{L}, {T}, Sacrifice a creature: Search your library for a creature card with converted mana cost equal to 1 plus the sacrificed creature’s converted mana cost, put that card onto the battlefield, then shuffle your library. Activate this ability only any time you could cast a sorcery.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[{1}{L}, {T}, пожертвуйте существо: найдите в вашей библиотеке карту существа, конвертированная мана-стоимость которого равна сумме 1 и конвертированной мана-стоимости пожертвованного существа, положите ту карту на поле битвы, затем перетасуйте вашу библиотеку. Активируйте эту способность только при возможности разыгрывать волшебство.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[{1}{L}, {T}, Sacrifique uma criatura: Procure em seu grimório um card de criatura com custo de mana convertido igual a 1 mais o custo de mana convertido da criatura sacrificada, coloque aquele card no campo de batalha e depois embaralhe seu grimório. Ative esta habilidade somente nos momentos em que poderia conjurar um feitiço.]]></LOCALISED_TEXT>
<COST type="Mana" cost="{1}{G/P}" />
<COST type="TapSelf" />
<COST type="generic">
<TARGET_DEFINITION id="6">
local filter = Object():GetFilter()
filter:Clear()
filter:AddCardType( CARD_TYPE_CREATURE )
filter:SetPlayer( EffectController() )
filter:SetZone( ZONE_IN_PLAY )
filter:SetHint( HINT_ENEMY, EffectController() )
filter:NotTargetted()
</TARGET_DEFINITION>
<TARGET_DETERMINATION>
return AtLeastOneTargetFromDefinition(6)
</TARGET_DETERMINATION>
<PLAY_TIME_ACTION>
EffectController():ChooseTarget( 6, "CARD_QUERY_CHOOSE_CREATURE_TO_SACRIFICE", EffectDC():Make_Targets(0) )
</PLAY_TIME_ACTION>
<RESOLUTION_TIME_ACTION>
local target = EffectDC():Get_Targets(0):Get_CardPtr(0)
if target ~= nil then
local cost = target:GetConvertedManaCost()+1
EffectDC():Set_Int( 0, cost )
EffectController():Sacrifice(target)
end
</RESOLUTION_TIME_ACTION></COST>
<RESOLUTION_TIME_ACTION>
local filter = Object():GetFilter()
local player = EffectController()
local cost = EffectDC():Get_Int(0)
-- The first if-then prevents the AI stupidly putting two Meliras into play.
if player:IsAI() ~= 0 and cost == 2 then
filter:Clear()
filter:NotTargetted()
filter:SetZone( ZONE_IN_PLAY )
filter:SetController( player )
filter:AddCardName( "MELIRA_SYLVOK_OUTCAST" )
if filter:CountStopAt(1) ~= 0 then
player:MarkSearchedLibrary()
filter:Clear()
filter:NotTargetted()
filter:AddCardType( CARD_TYPE_CREATURE )
filter:SetConvertedCostValue( cost )
filter:SetZone( ZONE_LIBRARY )
filter:SetPlayer( player )
filter:AddCardName( "MELIRA_SYLVOK_OUTCAST" )
filter:AddExtra( FILTER_EXTRA_FLIP_NAMES )
player:ChooseTarget( NO_VALIDATION, "CARD_QUERY_CHOOSE_CREATURE_TO_PUT_ONTO_BATTLEFIELD", EffectDC():Make_Targets(1) )
else
player:MarkSearchedLibrary()
filter:Clear()
filter:NotTargetted()
filter:AddCardType( CARD_TYPE_CREATURE )
filter:SetConvertedCostValue( cost )
filter:SetZone( ZONE_LIBRARY )
filter:SetPlayer( player )
player:ChooseTarget( NO_VALIDATION, "CARD_QUERY_CHOOSE_CREATURE_TO_PUT_ONTO_BATTLEFIELD", EffectDC():Make_Targets(1) )
end
else
player:MarkSearchedLibrary()
filter:Clear()
filter:NotTargetted()
filter:AddCardType( CARD_TYPE_CREATURE )
filter:SetConvertedCostValue( cost )
filter:SetZone( ZONE_LIBRARY )
filter:SetPlayer( player )
player:ChooseTarget( NO_VALIDATION, "CARD_QUERY_CHOOSE_CREATURE_TO_PUT_ONTO_BATTLEFIELD", EffectDC():Make_Targets(1) )
end
</RESOLUTION_TIME_ACTION>
<RESOLUTION_TIME_ACTION>
if EffectDC() ~= nil then
local target = EffectDC():Get_Targets(1):Get_CardPtr(0)
if target ~= nil then
target:PutIntoPlay( EffectController() )
end
end
</RESOLUTION_TIME_ACTION>
<RESOLUTION_TIME_ACTION>
EffectController():ShuffleLibrary()
</RESOLUTION_TIME_ACTION>
</ACTIVATED_ABILITY>
- BlindWillow
- Posts: 213
- Joined: 19 Jul 2012, 00:26
- Has thanked: 11 times
- Been thanked: 46 times
Re: DotP2013 Core Bug Fixes (last update 01/10/2012)
by Firehelp » 11 Nov 2012, 15:29
Hi. I'm using Theta version with Ravnica DLC installed and I've found a bug within this mod/patch. When you use Voracious Dragon (present in Goblin Gangland f.e.) and you devour any Goblins as its ETB triggers, the target of his ability (the one that should be dealt damage to) receives 0 damage everytime, no matter how many Goblins were sacrificed! Well, I hope its a simple thing to fix as it worked like a charm till I installed thefiremind's mod. So, thefiremind, could you fix this little issue, please? Also, am I really the only one who noticed this?
Anyway, I have 1 question, if it's possible to be answered:
What's the difference between Archmage and Planeswalker difficulties, when using this mod? Is it only the latter AI cheat-drawing cards it desires? I care only for gameplay-wise differencies. If it is unknown, well, thanks in advance for responding anyways.
Anyway, I have 1 question, if it's possible to be answered:
What's the difference between Archmage and Planeswalker difficulties, when using this mod? Is it only the latter AI cheat-drawing cards it desires? I care only for gameplay-wise differencies. If it is unknown, well, thanks in advance for responding anyways.
Who is online
Users browsing this forum: No registered users and 3 guests