Refactored PW Attack Rule
This commit is contained in:
@@ -170,7 +170,7 @@ public:
|
|||||||
MTGCardInstance * banding; // If belongs to a band when attacking
|
MTGCardInstance * banding; // If belongs to a band when attacking
|
||||||
int canBlock();
|
int canBlock();
|
||||||
int canBlock(MTGCardInstance * opponent);
|
int canBlock(MTGCardInstance * opponent);
|
||||||
int canAttack();
|
int canAttack( bool pwcheck = false );
|
||||||
int isAttacker();
|
int isAttacker();
|
||||||
Targetable * isAttacking;
|
Targetable * isAttacking;
|
||||||
MTGCardInstance * storedCard;
|
MTGCardInstance * storedCard;
|
||||||
|
|||||||
@@ -266,7 +266,8 @@ class Constants
|
|||||||
HIDDENFACE = 144,
|
HIDDENFACE = 144,
|
||||||
ANYTYPEOFMANA = 145,
|
ANYTYPEOFMANA = 145,
|
||||||
NECROED = 146,
|
NECROED = 146,
|
||||||
NB_BASIC_ABILITIES = 147,
|
CANTPWATTACK = 147,
|
||||||
|
NB_BASIC_ABILITIES = 148,
|
||||||
|
|
||||||
RARITY_S = 'S', //Special Rarity
|
RARITY_S = 'S', //Special Rarity
|
||||||
RARITY_M = 'M', //Mythics
|
RARITY_M = 'M', //Mythics
|
||||||
|
|||||||
@@ -368,10 +368,13 @@ void CardGui::Render()
|
|||||||
JQuadPtr ssMask = card->getObserver()->getResourceManager()->GetQuad("white");
|
JQuadPtr ssMask = card->getObserver()->getResourceManager()->GetQuad("white");
|
||||||
|
|
||||||
//choose attacker mask
|
//choose attacker mask
|
||||||
if(card->isInPlay(game) && (card->hasSummoningSickness() || card->attackCost > 0) && !card->isPhased && card->isCreature())
|
if(card->isInPlay(game) && card->isCreature()
|
||||||
|
&& ((!card->canAttack() || (card->attackCost > 0)) && (!card->canAttack(true) || (card->attackPlaneswalkerCost > 0)))
|
||||||
|
&& !card->isPhased && !card->didattacked )
|
||||||
{
|
{
|
||||||
if(game->getCurrentGamePhase() > MTG_PHASE_FIRSTMAIN && game->getCurrentGamePhase() < MTG_PHASE_SECONDMAIN &&
|
if(game->getCurrentGamePhase() > MTG_PHASE_FIRSTMAIN
|
||||||
card->controller() == game->currentPlayer && game->currentPlayer->hasPossibleAttackers())
|
&& game->getCurrentGamePhase() < MTG_PHASE_SECONDMAIN
|
||||||
|
&& card->controller() == game->currentPlayer )
|
||||||
{
|
{
|
||||||
if(card->controller()->isHuman() && ssMask)
|
if(card->controller()->isHuman() && ssMask)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -671,12 +671,20 @@ Player * MTGCardInstance::controller()
|
|||||||
return lastController;
|
return lastController;
|
||||||
}
|
}
|
||||||
|
|
||||||
int MTGCardInstance::canAttack()
|
int MTGCardInstance::canAttack( bool pwcheck )
|
||||||
{
|
{
|
||||||
if (has(Constants::CANTATTACK))
|
if(!pwcheck)
|
||||||
return 0;
|
{
|
||||||
if (has(Constants::FLYERSONLY) && !has(Constants::FLYING))
|
if (has(Constants::CANTATTACK))
|
||||||
return 0;
|
return 0;
|
||||||
|
if (has(Constants::FLYERSONLY) && !has(Constants::FLYING))
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (has(Constants::CANTPWATTACK))
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
if (tapped)
|
if (tapped)
|
||||||
return 0;
|
return 0;
|
||||||
if (hasSummoningSickness())
|
if (hasSummoningSickness())
|
||||||
|
|||||||
@@ -177,7 +177,8 @@ const char* Constants::MTGBasicAbilities[] = {
|
|||||||
"cantcrew",
|
"cantcrew",
|
||||||
"hiddenface",//test for hiding card
|
"hiddenface",//test for hiding card
|
||||||
"anytypeofmana",
|
"anytypeofmana",
|
||||||
"necroed"//hide necored
|
"necroed",//hide necored
|
||||||
|
"cantpwattack"
|
||||||
};
|
};
|
||||||
|
|
||||||
map<string,int> Constants::MTGBasicAbilitiesMap;
|
map<string,int> Constants::MTGBasicAbilitiesMap;
|
||||||
|
|||||||
@@ -1863,7 +1863,27 @@ int MTGAttackRule::receiveEvent(WEvent *e)
|
|||||||
if (card->isAttacker() && !card->has(Constants::VIGILANCE))
|
if (card->isAttacker() && !card->has(Constants::VIGILANCE))
|
||||||
card->tap();
|
card->tap();
|
||||||
if (card->isAttacker() && card->has(Constants::CANTATTACK))
|
if (card->isAttacker() && card->has(Constants::CANTATTACK))
|
||||||
card->toggleAttacker();//if a card has cantattack, then you cant
|
{
|
||||||
|
if(card->isAttacking)
|
||||||
|
{
|
||||||
|
Damageable * dtarget = ((Damageable *)card->isAttacking);
|
||||||
|
if(dtarget->type_as_damageable == Damageable::DAMAGEABLE_PLAYER)
|
||||||
|
card->toggleAttacker();//if a card has cantattack, then you cant
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (card->isAttacker() && card->has(Constants::CANTPWATTACK))
|
||||||
|
{
|
||||||
|
if(card->isAttacking)
|
||||||
|
{
|
||||||
|
Damageable * dtarget = ((Damageable *)card->isAttacking);
|
||||||
|
if(dtarget->type_as_damageable == Damageable::DAMAGEABLE_MTGCARDINSTANCE)
|
||||||
|
{
|
||||||
|
MTGCardInstance * ctarget = ((MTGCardInstance *)card->isAttacking);
|
||||||
|
if(ctarget->hasType(Subtypes::TYPE_PLANESWALKER))
|
||||||
|
card->toggleAttacker();//if a card has cantpwattack, then you cant
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@@ -1915,7 +1935,7 @@ int MTGPlaneswalkerAttackRule::isReactingToClick(MTGCardInstance * card, ManaCos
|
|||||||
return 0;
|
return 0;
|
||||||
if (card->isAttacker())
|
if (card->isAttacker())
|
||||||
return 1;
|
return 1;
|
||||||
if (card->canAttack() && card->attackPlaneswalkerCost < 1)
|
if (card->canAttack(true) && card->attackPlaneswalkerCost < 1)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@@ -1972,7 +1992,7 @@ bool MTGPlaneswalkerAttackRule::select(Target* t)
|
|||||||
if (CardView* c = dynamic_cast<CardView*>(t))
|
if (CardView* c = dynamic_cast<CardView*>(t))
|
||||||
{
|
{
|
||||||
MTGCardInstance * card = c->getCard();
|
MTGCardInstance * card = c->getCard();
|
||||||
if (card->canAttack() && !card->isPhased)
|
if (card->canAttack(true) && !card->isPhased)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -260,7 +260,7 @@ bool Player::hasPossibleAttackers()
|
|||||||
for (int j = 0; j < nbcards; ++j)
|
for (int j = 0; j < nbcards; ++j)
|
||||||
{
|
{
|
||||||
MTGCardInstance * c = z->cards[j];
|
MTGCardInstance * c = z->cards[j];
|
||||||
if (c->canAttack() && c->isCreature())
|
if ((c->canAttack(true) || c->canAttack()) && c->isCreature())
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
Reference in New Issue
Block a user