It is currently 07 Nov 2025, 21:24
   
Text Size

DotP2013 OFFICIAL CARDS Bug Fixes (last update 13/8/2013)

Moderator: CCGHQ Admins

Re: DotP2013 Core Bug Fixes (last update 10/8/2012)

Postby thefiremind » 10 Aug 2012, 14:47

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...
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.

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.
With auto_skip:
  • 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)
That said, I can make copies of the exalted cards with auto_skip, but this time they would absolutely be in a separate WAD file, and I wouldn't consider it as a high-priority work.
< Former DotP 2012/2013/2014 modder >
Currently busy with life...
User avatar
thefiremind
Programmer
 
Posts: 3515
Joined: 07 Nov 2011, 10:55
Has thanked: 118 times
Been thanked: 722 times

Re: DotP2013 Core Bug Fixes (last update 10/8/2012)

Postby 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)

Postby GamerXYZ0 » 10 Aug 2012, 18:38

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...
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).
GamerXYZ0
 
Posts: 102
Joined: 17 Jun 2011, 19:29
Has thanked: 10 times
Been thanked: 7 times

Re: DotP2013 Core Bug Fixes (last update 12/8/2012)

Postby 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).
GamerXYZ0
 
Posts: 102
Joined: 17 Jun 2011, 19:29
Has thanked: 10 times
Been thanked: 7 times

Re: DotP2013 Core Bug Fixes (last update 12/8/2012)

Postby 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...
User avatar
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)

Postby 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
update: fixed some typos.
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.
User avatar
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)

Postby 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...
User avatar
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)

Postby pcastellazzi » 14 Sep 2012, 19:46

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.
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.

Code: Select all
lua] [string "PHYREXIAN_METAMORPH_281256_TITLE (RESOLUTION_TIME_ACTION) [1456]"]:2: attempt to index a nil value
The error is making a reference to the code below, which is the only resolution block in the card.

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>
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.

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.
User avatar
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)

Postby 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:
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
It checks if SetMinEnchantmentCount is a valid function. If yes, that function will be used (with a slight modification that I introduced in order to make it work both for target determination and attachment filter with the same numeric argument), otherwise the updated function will be used.

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...
User avatar
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)

Postby 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)

Postby 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).
GamerXYZ0
 
Posts: 102
Joined: 17 Jun 2011, 19:29
Has thanked: 10 times
Been thanked: 7 times

Re: DotP2013 Core Bug Fixes (last update 01/10/2012)

Postby thefiremind » 04 Oct 2012, 10:06

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).
Using TapLand doesn't allow choices and I don't think there's a solution for that.
< Former DotP 2012/2013/2014 modder >
Currently busy with life...
User avatar
thefiremind
Programmer
 
Posts: 3515
Joined: 07 Nov 2011, 10:55
Has thanked: 118 times
Been thanked: 722 times

Re: DotP2013 Core Bug Fixes (last update 15/8/2012)

Postby BlindWillow » 07 Oct 2012, 00:21

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.
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.
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)

Postby BlindWillow » 07 Oct 2012, 00:26

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.
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.)

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>
Edit: I think I already know what the problem is, actually. I remember I had to take out Fauna Shaman's target sorter code to get Birthing Pod working. Try that and see if you still get script errors.
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)

Postby 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.
Firehelp
 
Posts: 17
Joined: 11 Nov 2012, 14:54
Has thanked: 4 times
Been thanked: 1 time

PreviousNext

Return to 2013

Who is online

Users browsing this forum: No registered users and 3 guests

Main Menu

User Menu

Our Partners


Who is online

In total there are 3 users online :: 0 registered, 0 hidden and 3 guests (based on users active over the past 10 minutes)
Most users ever online was 9298 on 10 Oct 2025, 12:54

Users browsing this forum: No registered users and 3 guests

Login Form