diff --git a/projects/mtg/bin/Res/test/_tests.txt b/projects/mtg/bin/Res/test/_tests.txt index ed139f4e9..4bbef9a3b 100644 --- a/projects/mtg/bin/Res/test/_tests.txt +++ b/projects/mtg/bin/Res/test/_tests.txt @@ -398,6 +398,7 @@ titanic_ultimatum.txt torture.txt tranquil_domain.txt twitch.txt +underworld_dreams.txt unstable_mutation.txt unstable_mutation2.txt unwilling_recruit.txt diff --git a/projects/mtg/bin/Res/test/underworld_dreams.txt b/projects/mtg/bin/Res/test/underworld_dreams.txt new file mode 100644 index 000000000..3eb715d64 --- /dev/null +++ b/projects/mtg/bin/Res/test/underworld_dreams.txt @@ -0,0 +1,17 @@ +#Test underworld dream +[INIT] +DRAW +[PLAYER1] +library:forest +[PLAYER2] +inplay:Underworld Dreams +[DO] +next +[ASSERT] +FIRSTMAIN +[PLAYER1] +life:19 +hand:forest +[PLAYER2] +inplay:Underworld Dreams +[END] \ No newline at end of file diff --git a/projects/mtg/include/MTGGameZones.h b/projects/mtg/include/MTGGameZones.h index 33c79395c..91fe94731 100644 --- a/projects/mtg/include/MTGGameZones.h +++ b/projects/mtg/include/MTGGameZones.h @@ -74,7 +74,6 @@ class MTGGameZone { MTGGameZone(); ~MTGGameZone(); void shuffle(); - virtual MTGCardInstance * draw(); void addCard(MTGCardInstance * card); void debugPrint(); MTGCardInstance * removeCard(MTGCardInstance * card, int createCopy = 1); @@ -96,7 +95,6 @@ class MTGGameZone { class MTGLibrary: public MTGGameZone { public: void shuffleTopToBottom(int nbcards); - MTGCardInstance * draw(); virtual ostream& toString(ostream&) const; const char * getName(){return "library";} }; diff --git a/projects/mtg/src/MTGGameZones.cpp b/projects/mtg/src/MTGGameZones.cpp index 3a85c6576..b461700aa 100644 --- a/projects/mtg/src/MTGGameZones.cpp +++ b/projects/mtg/src/MTGGameZones.cpp @@ -78,13 +78,13 @@ void MTGPlayerCards::initGame(int shuffle, int draw){ } void MTGPlayerCards::drawFromLibrary(){ - MTGCardInstance * drawnCard = library->draw(); - if(drawnCard){ - hand->addCard(drawnCard); - GameObserver *g = GameObserver::GetInstance(); - WEvent * e = NEW WEventZoneChange(drawnCard,library,hand); - g->receiveEvent(e); + if (!library->nb_cards) { + GameObserver::GetInstance()->gameOver = library->owner; + return; } + MTGCardInstance * toMove = library->cards[library->nb_cards-1]; + library->lastCardDrawn = toMove; + putInZone(toMove, library, hand); } void MTGPlayerCards::resetLibrary(){ @@ -290,21 +290,6 @@ void MTGGameZone::addCard(MTGCardInstance * card){ } -MTGCardInstance * MTGGameZone::draw(){ - if (!nb_cards) return NULL; - nb_cards--; - lastCardDrawn = cards[nb_cards]; - cards.pop_back(); - cardsMap.erase( lastCardDrawn); - return lastCardDrawn; -} - -MTGCardInstance * MTGLibrary::draw(){ - if (!nb_cards) { - GameObserver::GetInstance()->gameOver = this->owner; - } - return MTGGameZone::draw(); -} void MTGGameZone::debugPrint(){ for (int i = 0; i < nb_cards; i++) diff --git a/projects/mtg/src/TargetChooser.cpp b/projects/mtg/src/TargetChooser.cpp index 0259c5f3e..0187175e0 100644 --- a/projects/mtg/src/TargetChooser.cpp +++ b/projects/mtg/src/TargetChooser.cpp @@ -330,6 +330,7 @@ TargetChooser::TargetChooser(MTGCardInstance * card, int _maxtargets, bool _othe //Default targetter : every card can be targetted, unless it is protected from the targetter card // For spells that do not "target" a specific card, set targetter to NULL bool TargetChooser::canTarget(Targetable * target){ + if (!target) return false; if (target->typeAsTarget() == TARGET_CARD){ MTGCardInstance * card = (MTGCardInstance *) target; if (other){