Fixes to commander damage, deathtouch, MAT card variants.

March of the Machine: The Aftermath (MAT) card variants.
The previous implementation of the deathtouch ability had a bug that destroyed planeswalkers even with any amount of damage. This has been fixed.
If a player has been dealt 21 points of combat damage by a particular Commander during the game, that player loses a game. The damage rule with commanders was incorrect in counting any type of damage, not only combat damage.

Bug fixes:
Athreos, Shroud-Veiled
Endless Atlas
Natural State
Savage Gorger
Kytheon's Irregulars
Lion Sash
Pyrophobia
Minas Tirith
Sakashima of a Thousand Faces
This commit is contained in:
Eduardo MG
2024-02-16 12:46:41 -06:00
parent 603af22b79
commit a0b3c00211
7 changed files with 2017 additions and 157 deletions

View File

@@ -266,7 +266,7 @@ int Damage::resolve()
else
{
((MTGCardInstance*)source)->damageToOpponent += damage;
if(((MTGCardInstance*)source)->isCommander > 0)
if(((MTGCardInstance*)source)->isCommander > 0 && typeOfDamage == DAMAGE_COMBAT)
((MTGCardInstance*)source)->damageInflictedAsCommander += damage;
}
target->lifeLostThisTurn += damage;
@@ -283,7 +283,7 @@ int Damage::resolve()
}
WEvent * lifed = NEW WEventLife((Player*)target,-damage, source);
observer->receiveEvent(lifed);
if(((MTGCardInstance*)source)->damageInflictedAsCommander > 20) // if a Commander has dealt 21 or more damages to a player, he loose game.
if(((MTGCardInstance*)source)->damageInflictedAsCommander > 20) // If a player has been dealt 21 points of combat damage by a particular Commander during the game, that player loses a game.
observer->setLoser(((MTGCardInstance*)source)->controller()->opponent());
}
}

View File

@@ -4077,8 +4077,11 @@ int MTGDeathtouchRule::receiveEvent(WEvent * event)
if (card->basicAbilities[(int)Constants::DEATHTOUCH]||card->basicAbilities[(int)Constants::PERPETUALDEATHTOUCH]||card->LKIbasicAbilities[(int)Constants::DEATHTOUCH]||card->LKIbasicAbilities[(int)Constants::PERPETUALDEATHTOUCH])
{
_target->destroy();
return 1;
if(_target->isCreature())
{
_target->destroy();
return 1;
}
}
}
return 0;