diff --git a/projects/mtg/bin/Res/ai/baka/deck144.txt b/projects/mtg/bin/Res/ai/baka/deck144.txt index 9e3b616e1..1ee9075ea 100644 --- a/projects/mtg/bin/Res/ai/baka/deck144.txt +++ b/projects/mtg/bin/Res/ai/baka/deck144.txt @@ -1,6 +1,8 @@ -#NAME:Draconic Rage -#DESC:The First D&D Deck +#NAME:Vrondiss Commander 2023 +#DESC:Forgotten Realms Commander Deck +#DESC:Draconic Rage #HINT:castpriority(commander,*) +#HINT:alwaysattackwith(creature[Dragon Spirit]) Bogardan Hellkite (*) *1 Demanding Dragon (*) *1 Dragonmaster Outcast (*) *1 diff --git a/projects/mtg/src/Damage.cpp b/projects/mtg/src/Damage.cpp index b92f90a47..c85a8e854 100644 --- a/projects/mtg/src/Damage.cpp +++ b/projects/mtg/src/Damage.cpp @@ -24,7 +24,10 @@ void Damage::init(MTGCardInstance * _source, Damageable * _target, int _damage, { typeOfDamage = _typeOfDamage; target = _target; - source = _source; + if(_source && _source->name.empty() && _source->storedSourceCard) // Fix for damage dealt inside ability$!!$ keyword. + source = _source->storedSourceCard; + else + source = _source; if (_damage < 0) _damage = 0; //Negative damages cannot happen diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index 3428cdb89..4ae481bb8 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -8064,10 +8064,19 @@ int AManaProducer::resolve() player->getManaPool()->add(output, source); if(DoesntEmpty) player->doesntEmpty->add(output); - source->getProducedMana()->copy(output); - WEventCardManaProduced * ev = NEW WEventCardManaProduced(source); - if(ev) - source->getObserver()->receiveEvent(ev); + + if(source->name.empty() && source->storedSourceCard){ // Fix for mana produced inside ability$!!$ keyword. + source->storedSourceCard->getProducedMana()->copy(output); + WEventCardManaProduced * ev = NEW WEventCardManaProduced(source->storedSourceCard); + if(ev) + source->storedSourceCard->getObserver()->receiveEvent(ev); + } else { + source->getProducedMana()->copy(output); + WEventCardManaProduced * ev = NEW WEventCardManaProduced(source); + if(ev) + source->getObserver()->receiveEvent(ev); + } + if(andAbility) { MTGAbility * andAbilityClone = andAbility->clone(); diff --git a/projects/mtg/src/Player.cpp b/projects/mtg/src/Player.cpp index 8a748a17c..6c2376be7 100644 --- a/projects/mtg/src/Player.cpp +++ b/projects/mtg/src/Player.cpp @@ -190,7 +190,11 @@ int Player::gainOrLoseLife(int value, MTGCardInstance* source) } //Send life event to listeners - WEvent * lifed = NEW WEventLife(this, value, source); + WEvent * lifed = NULL; + if(source && source->name.empty() && source->storedSourceCard) // Fix for life gained inside ability$!!$ keyword. + lifed = NEW WEventLife(this, value, source->storedSourceCard); + else + lifed = NEW WEventLife(this, value, source); observer->receiveEvent(lifed); return value; diff --git a/projects/mtg/src/WFilter.cpp b/projects/mtg/src/WFilter.cpp index d5b6a557c..ace2f2047 100644 --- a/projects/mtg/src/WFilter.cpp +++ b/projects/mtg/src/WFilter.cpp @@ -340,8 +340,13 @@ bool WCFilterProducesColor::isMatch(MTGCard * c) while (t != string::npos) { s = s.substr(t + 3); + size_t start_pos = 0; + while((start_pos = s.find("{c}", start_pos)) != std::string::npos) { + s.replace(start_pos, 3, "{1}"); // Fix while filtering cards for colorless mana {c} instead of {1} (http://code.google.com/p/wagic/issues/detail?id=1090). + start_pos += 3; + } ManaCost * mc = ManaCost::parseManaCost(s); - if (mc->hasColor(color) > 0) + if (mc && mc->hasColor(color) > 0) { bMatch = true; SAFE_DELETE(mc);