diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a246e044..90716ed87 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,8 +2,11 @@ ## [master] (https://github.com/WagicProject/wagic/tree/master) +### 22/11/21 +- *Committed:* Improved zones management for commandzone and sideboard (e.g. now the game consider those zone as all the others for every ability such as "lord" and "aslongas"). ([Vitty85](https://github.com/Vitty85)) + ### 21/11/21 -- *Committed:* Fixed primitives. ([Vitty85](https://github.com/Vitty85)) +- *Committed:* Fixed primitives. https://github.com/WagicProject/wagic/commit/217a5aa93e6e5c80fb8eb95aa4f972a50ca6a817 ([Vitty85](https://github.com/Vitty85)) - *Committed:* Fixed primitives, added a new keyword "eval()" in ManaCost parser to allow the usage of a variable in the manacost (e.g. "{eval(evictmc)}" in primitive "Prototype Portal"). https://github.com/WagicProject/wagic/commit/d11facd7d4847a9fac4edceae71c96716afe016b ([Vitty85](https://github.com/Vitty85)) diff --git a/projects/mtg/include/AllAbilities.h b/projects/mtg/include/AllAbilities.h index 7f1a2601d..9dd531d91 100644 --- a/projects/mtg/include/AllAbilities.h +++ b/projects/mtg/include/AllAbilities.h @@ -2878,8 +2878,8 @@ public: for (int i = 0; i < 2; i++) { Player * p = game->players[i]; - MTGGameZone * zones[] = { p->game->inPlay, p->game->graveyard, p->game->hand, p->game->library, p->game->exile }; - for (int k = 0; k < 5; k++) + MTGGameZone * zones[] = { p->game->inPlay, p->game->graveyard, p->game->hand, p->game->library, p->game->exile, p->game->commandzone, p->game->sideboard }; + for (int k = 0; k < 7; k++) { MTGGameZone * zone = zones[k]; Value = zone->countByCanTarget(tc); diff --git a/projects/mtg/src/GameObserver.cpp b/projects/mtg/src/GameObserver.cpp index 6eb44f272..5dfffec81 100644 --- a/projects/mtg/src/GameObserver.cpp +++ b/projects/mtg/src/GameObserver.cpp @@ -543,13 +543,15 @@ bool GameObserver::operator==(const GameObserver& aGame) { error++; } - MTGGameZone * aZones[] = { p->game->graveyard, p->game->library, p->game->hand, p->game->inPlay, p->game->exile }; + MTGGameZone * aZones[] = { p->game->graveyard, p->game->library, p->game->hand, p->game->inPlay, p->game->exile, p->game->commandzone, p->game->sideboard }; MTGGameZone * thisZones[] = { players[i]->game->graveyard, players[i]->game->library, players[i]->game->hand, players[i]->game->inPlay, - players[i]->game->exile }; - for (int j = 0; j < 5; j++) + players[i]->game->exile, + players[i]->game->commandzone, + players[i]->game->sideboard }; + for (int j = 0; j < 7; j++) { MTGGameZone * zone = aZones[j]; if (zone->nb_cards != thisZones[j]->nb_cards) @@ -649,8 +651,8 @@ void GameObserver::gameStateBasedEffects() if (players[d]->snowManaW < 0) players[d]->snowManaW = 0; - MTGGameZone * dzones[] = { players[d]->game->inPlay, players[d]->game->graveyard, players[d]->game->hand, players[d]->game->library, players[d]->game->exile, players[d]->game->stack }; - for (int k = 0; k < 6; k++) + MTGGameZone * dzones[] = { players[d]->game->inPlay, players[d]->game->graveyard, players[d]->game->hand, players[d]->game->library, players[d]->game->exile, players[d]->game->stack, players[d]->game->commandzone, players[d]->game->sideboard, players[d]->game->reveal }; + for (int k = 0; k < 9; k++) { MTGGameZone * zone = dzones[k]; if (mLayers->stackLayer()->count(0, NOT_RESOLVED) == 0) diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index 33c09b4b0..a91292b67 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -229,8 +229,8 @@ int AbilityFactory::parseCastRestrictions(MTGCardInstance * card, Player * playe for (int w = 0; w < 2; ++w) { Player *p = observer->players[w]; - MTGGameZone * zones[] = { p->game->inPlay, p->game->graveyard, p->game->hand, p->game->library, p->game->stack, p->game->exile }; - for (int k = 0; k < 6; k++) + MTGGameZone * zones[] = { p->game->inPlay, p->game->graveyard, p->game->hand, p->game->library, p->game->stack, p->game->exile, p->game->commandzone, p->game->sideboard, p->game->reveal }; + for (int k = 0; k < 9; k++) { MTGGameZone * z = zones[k]; if (stc->targetsZone(z)) @@ -946,8 +946,8 @@ int AbilityFactory::countCards(TargetChooser * tc, Player * player, int option) { if (player && player != observer->players[i]) continue; - MTGGameZone * zones[] = { observer->players[i]->game->inPlay, observer->players[i]->game->graveyard, observer->players[i]->game->hand, observer->players[i]->game->exile }; - for (int k = 0; k < 4; k++) + MTGGameZone * zones[] = { observer->players[i]->game->inPlay, observer->players[i]->game->graveyard, observer->players[i]->game->hand, observer->players[i]->game->exile, observer->players[i]->game->commandzone }; + for (int k = 0; k < 5; k++) { for (int j = zones[k]->nb_cards - 1; j >= 0; j--) { diff --git a/projects/mtg/src/MTGCardInstance.cpp b/projects/mtg/src/MTGCardInstance.cpp index 12f9b51ab..11b4d65ed 100644 --- a/projects/mtg/src/MTGCardInstance.cpp +++ b/projects/mtg/src/MTGCardInstance.cpp @@ -1249,8 +1249,8 @@ ManaCost * MTGCardInstance::computeNewCost(MTGCardInstance * card,ManaCost * Cos for (int w = 0; w < 2; ++w) { Player *p = getObserver()->players[w]; - MTGGameZone * zones[] = { p->game->inPlay, p->game->graveyard, p->game->hand, p->game->library, p->game->stack, p->game->exile }; - for (int k = 0; k < 6; k++) + MTGGameZone * zones[] = { p->game->inPlay, p->game->graveyard, p->game->hand, p->game->library, p->game->stack, p->game->exile, p->game->commandzone, p->game->sideboard, p->game->reveal }; + for (int k = 0; k < 9; k++) { MTGGameZone * z = zones[k]; if (tcn->targetsZone(z)) diff --git a/projects/mtg/src/Rules.cpp b/projects/mtg/src/Rules.cpp index f7f0e95e7..10299c6af 100644 --- a/projects/mtg/src/Rules.cpp +++ b/projects/mtg/src/Rules.cpp @@ -79,8 +79,8 @@ MTGCardInstance * Rules::getCardByMTGId(GameObserver* g, int mtgid) for (int i = 0; i < 2; i++) { Player * p = g->players[i]; - MTGGameZone * zones[] = { p->game->library, p->game->hand, p->game->inPlay, p->game->graveyard, p->game->exile }; - for (int j = 0; j < 5; j++) + MTGGameZone * zones[] = { p->game->library, p->game->hand, p->game->inPlay, p->game->graveyard, p->game->exile, p->game->commandzone, p->game->sideboard }; + for (int j = 0; j < 7; j++) { MTGGameZone * zone = zones[j]; for (int k = 0; k < zone->nb_cards; k++) @@ -533,8 +533,7 @@ MTGDeck * Rules::buildDeck(int playerId) initState.playerData[playerId].player->game->inPlay, initState.playerData[playerId].player->game->exile, initState.playerData[playerId].player->game->commandzone, - initState.playerData[playerId].player->game->sideboard, - initState.playerData[playerId].player->game->reveal }; + initState.playerData[playerId].player->game->sideboard }; for (int j = 0; j < 7; j++) { @@ -615,15 +614,14 @@ void Rules::initGame(GameObserver *g, bool currentPlayerSet) { p->mAvatarName = initState.playerData[i].player->mAvatarName; } - MTGGameZone * playerZones[] = { p->game->graveyard, p->game->library, p->game->hand, p->game->inPlay, p->game->exile , p->game->commandzone, p->game->sideboard, p->game->reveal }; + MTGGameZone * playerZones[] = { p->game->graveyard, p->game->library, p->game->hand, p->game->inPlay, p->game->exile , p->game->commandzone, p->game->sideboard }; MTGGameZone * loadedPlayerZones[] = { initState.playerData[i].player->game->graveyard, initState.playerData[i].player->game->library, initState.playerData[i].player->game->hand, initState.playerData[i].player->game->inPlay, initState.playerData[i].player->game->exile, initState.playerData[i].player->game->commandzone, - initState.playerData[i].player->game->sideboard, - initState.playerData[i].player->game->reveal }; + initState.playerData[i].player->game->sideboard }; for (int j = 0; j < 7; j++) { MTGGameZone * zone = playerZones[j]; diff --git a/projects/mtg/src/TestSuiteAI.cpp b/projects/mtg/src/TestSuiteAI.cpp index 6026e5745..1e1bcc2e9 100644 --- a/projects/mtg/src/TestSuiteAI.cpp +++ b/projects/mtg/src/TestSuiteAI.cpp @@ -49,8 +49,8 @@ MTGCardInstance * TestSuiteAI::getCard(string action) for (int i = 0; i < 2; i++) { Player * p = observer->players[i]; - MTGGameZone * zones[] = { p->game->library, p->game->hand, p->game->inPlay, p->game->graveyard, p->game->removedFromGame }; - for (int j = 0; j < 5; j++) + MTGGameZone * zones[] = { p->game->library, p->game->hand, p->game->inPlay, p->game->graveyard, p->game->commandzone, p->game->sideboard, p->game->removedFromGame }; + for (int j = 0; j < 7; j++) { MTGGameZone * zone = zones[j]; for (int k = 0; k < zone->nb_cards; k++) @@ -397,13 +397,15 @@ void TestSuiteGame::assertGame() error++; } - MTGGameZone * playerZones[] = { p->game->graveyard, p->game->library, p->game->hand, p->game->inPlay, p->game->removedFromGame }; + MTGGameZone * playerZones[] = { p->game->graveyard, p->game->library, p->game->hand, p->game->inPlay, p->game->commandzone, p->game->sideboard, p->game->removedFromGame }; MTGGameZone * endstateZones[] = { endState.players[i]->game->graveyard, endState.players[i]->game->library, endState.players[i]->game->hand, endState.players[i]->game->inPlay, + endState.players[i]->game->commandzone, + endState.players[i]->game->sideboard, endState.players[i]->game->removedFromGame }; - for (int j = 0; j < 5; j++) + for (int j = 0; j < 7; j++) { MTGGameZone * zone = playerZones[j]; if (zone->nb_cards != endstateZones[j]->nb_cards) @@ -857,13 +859,15 @@ void TestSuiteGame::initGame() stringstream stream; initState.players[i]->getRandomGenerator()->saveLoadedRandValues(stream); p->getRandomGenerator()->loadRandValues(stream.str()); - MTGGameZone * playerZones[] = { p->game->graveyard, p->game->library, p->game->hand, p->game->inPlay, p->game->removedFromGame }; + MTGGameZone * playerZones[] = { p->game->graveyard, p->game->library, p->game->hand, p->game->inPlay, p->game->commandzone, p->game->sideboard, p->game->removedFromGame }; MTGGameZone * loadedPlayerZones[] = { initState.players[i]->game->graveyard, initState.players[i]->game->library, initState.players[i]->game->hand, initState.players[i]->game->inPlay, + initState.players[i]->game->commandzone, + initState.players[i]->game->sideboard, initState.players[i]->game->removedFromGame }; - for (int j = 0; j < 5; j++) + for (int j = 0; j < 7; j++) { MTGGameZone * zone = playerZones[j]; for (size_t k = 0; k < loadedPlayerZones[j]->cards.size(); k++) @@ -918,9 +922,11 @@ MTGPlayerCards * TestSuiteGame::buildDeck(Player* player, int playerId) initState.players[playerId]->game->library, initState.players[playerId]->game->hand, initState.players[playerId]->game->removedFromGame, + initState.players[playerId]->game->commandzone, + initState.players[playerId]->game->sideboard, initState.players[playerId]->game->inPlay }; - for (int j = 0; j < 5; j++) + for (int j = 0; j < 7; j++) { for (size_t k = 0; k < loadedPlayerZones[j]->cards.size(); k++) { diff --git a/projects/mtg/src/WParsedInt.cpp b/projects/mtg/src/WParsedInt.cpp index 6b0016738..46b64cd12 100644 --- a/projects/mtg/src/WParsedInt.cpp +++ b/projects/mtg/src/WParsedInt.cpp @@ -285,7 +285,7 @@ void WParsedInt::init(string s, Spell * spell, MTGCardInstance * card) for (int i = 0; i < 2; i++) { Player * p = card->getObserver()->players[i]; - MTGGameZone * zones[] = { p->game->inPlay, p->game->graveyard, p->game->hand, p->game->library, p->game->exile, p->game->commandzone, p->game->sideboard };//wish cards use sideboard + MTGGameZone * zones[] = { p->game->inPlay, p->game->graveyard, p->game->hand, p->game->library, p->game->exile, p->game->commandzone, p->game->sideboard }; for (int k = 0; k < 7; k++) { MTGGameZone * zone = zones[k]; @@ -384,8 +384,8 @@ void WParsedInt::init(string s, Spell * spell, MTGCardInstance * card) for (int i = 0; i < 2; i++) { Player * p = card->getObserver()->players[i]; - MTGGameZone * zones[] = { p->game->battlefield, p->game->graveyard, p->game->hand, p->game->library, p->game->exile, p->game->reveal }; - for (int k = 0; k < 6; k++) + MTGGameZone * zones[] = { p->game->battlefield, p->game->graveyard, p->game->hand, p->game->library, p->game->exile, p->game->commandzone, p->game->sideboard, p->game->reveal, p->game->stack }; + for (int k = 0; k < 9; k++) { MTGGameZone * zone = zones[k]; if(tc->targetsZone(zone,target))