From d73951ecfcaabb807651b9d63f5d7094c1c0a28c Mon Sep 17 00:00:00 2001 From: "wagic.the.homebrew@gmail.com" Date: Sun, 6 Sep 2009 02:50:54 +0000 Subject: [PATCH] Erwan -some bug fixes (test suite) --- projects/mtg/bin/Res/test/generic/regenerate.txt | 1 + projects/mtg/bin/Res/test/pygmy_troll.txt | 1 + projects/mtg/include/MTGGameZones.h | 8 +++++++- projects/mtg/src/Damage.cpp | 11 +++++++++++ projects/mtg/src/TargetChooser.cpp | 2 +- projects/mtg/src/TestSuiteAI.cpp | 3 +-- 6 files changed, 22 insertions(+), 4 deletions(-) diff --git a/projects/mtg/bin/Res/test/generic/regenerate.txt b/projects/mtg/bin/Res/test/generic/regenerate.txt index 1405683a2..6d0f9f954 100644 --- a/projects/mtg/bin/Res/test/generic/regenerate.txt +++ b/projects/mtg/bin/Res/test/generic/regenerate.txt @@ -9,6 +9,7 @@ inplay:raging goblin Drudge skeletons swamp Drudge skeletons +choice 1 next raging goblin next diff --git a/projects/mtg/bin/Res/test/pygmy_troll.txt b/projects/mtg/bin/Res/test/pygmy_troll.txt index f643d8b41..4752011fc 100644 --- a/projects/mtg/bin/Res/test/pygmy_troll.txt +++ b/projects/mtg/bin/Res/test/pygmy_troll.txt @@ -1,4 +1,5 @@ #Testing bug with Rampage +# Whenever Pygmy Troll becomes blocked, it gets +1/+1 until end of turn for each creature blocking it. Green: Regenerate Pygmy Troll. [INIT] FIRSTMAIN [PLAYER1] diff --git a/projects/mtg/include/MTGGameZones.h b/projects/mtg/include/MTGGameZones.h index 99a8b43df..872e6f22a 100644 --- a/projects/mtg/include/MTGGameZones.h +++ b/projects/mtg/include/MTGGameZones.h @@ -86,7 +86,7 @@ class MTGGameZone { static int zoneStringToId(string zoneName); static MTGGameZone *intToZone(int zoneId, MTGCardInstance * source = NULL,MTGCardInstance * target = NULL); bool needShuffle; - + virtual const char * getName(){return "zone";}; virtual ostream& toString(ostream&) const; }; @@ -96,27 +96,32 @@ class MTGLibrary: public MTGGameZone { void shuffleTopToBottom(int nbcards); MTGCardInstance * draw(); virtual ostream& toString(ostream&) const; + const char * getName(){return "library";} }; class MTGGraveyard: public MTGGameZone { public: // MTGGraveyard(); virtual ostream& toString(ostream&) const; + const char * getName(){return "graveyard";} }; class MTGHand: public MTGGameZone { public: virtual ostream& toString(ostream&) const; + const char * getName(){return "hand";} }; class MTGRemovedFromGame: public MTGGameZone { public: virtual ostream& toString(ostream&) const; + const char * getName(){return "exile";} }; class MTGStack: public MTGGameZone { public: virtual ostream& toString(ostream&) const; + const char * getName(){return "stack";} }; class MTGInPlay: public MTGGameZone { @@ -128,6 +133,7 @@ class MTGInPlay: public MTGGameZone { int nbDefensers( MTGCardInstance * attacker); int nbPartners(MTGCardInstance * attacker); virtual ostream& toString(ostream&) const; + const char * getName(){return "battlefield";} }; diff --git a/projects/mtg/src/Damage.cpp b/projects/mtg/src/Damage.cpp index b4b60258f..6e3d695bb 100644 --- a/projects/mtg/src/Damage.cpp +++ b/projects/mtg/src/Damage.cpp @@ -48,7 +48,17 @@ int Damage::resolve(){ GameObserver * g = GameObserver::GetInstance(); WEvent * e = NEW WEventDamage(this); + + //Replacement Effects e = g->replacementEffects->replace(e); + if (!e) return 0; + WEventDamage * ev = dynamic_cast(e); + if (!ev) { + g->receiveEvent(e); + return 0; + } + damage = ev->damage->damage; + target = ev->damage->target; int a = 0; if (damage) a = target->dealDamage(damage); @@ -110,6 +120,7 @@ int DamageStack::resolve(){ if (damage->state == RESOLVED_OK) damage->target->afterDamage(); //damage->target->afterDamage(); } + return 1; } diff --git a/projects/mtg/src/TargetChooser.cpp b/projects/mtg/src/TargetChooser.cpp index 197d45e7b..0db43d182 100644 --- a/projects/mtg/src/TargetChooser.cpp +++ b/projects/mtg/src/TargetChooser.cpp @@ -264,7 +264,7 @@ bool TargetChooser::canTarget(Targetable * target){ if (target->typeAsTarget() == TARGET_CARD){ MTGCardInstance * card = (MTGCardInstance *) target; if (source && targetter && card->isInPlay() && (card->has(Constants::SHROUD)|| card->protectedAgainst(targetter) )) return false; - if (source && targetter && card->isInPlay() && (source->controller() != card->controller()) && (card->has(Constants::OPPONENTSHROUD) || card->protectedAgainst(targetter))) return false; + if (source && targetter && card->isInPlay() && (targetter->controller() != card->controller()) && (card->has(Constants::OPPONENTSHROUD) || card->protectedAgainst(targetter))) return false; return true; } else if (target->typeAsTarget() == TARGET_STACKACTION) diff --git a/projects/mtg/src/TestSuiteAI.cpp b/projects/mtg/src/TestSuiteAI.cpp index fbb37e405..d6fdf854e 100644 --- a/projects/mtg/src/TestSuiteAI.cpp +++ b/projects/mtg/src/TestSuiteAI.cpp @@ -367,10 +367,9 @@ int TestSuite::assertGame(){ for (int j = 0; j < 4; j++){ MTGGameZone * zone = playerZones[j]; if (zone->nb_cards != endState.playerData[i].zones[j].nbitems){ - sprintf(result, "==Card number not the same in %i==, expected %i, got %i
",j, endState.playerData[i].zones[j].nbitems, zone->nb_cards); + sprintf(result, "==Card number not the same in player %i's %s==, expected %i, got %i
",i, zone->getName(), endState.playerData[i].zones[j].nbitems, zone->nb_cards); Log(result); error++; - return 0; } for (int k = 0; k < endState.playerData[i].zones[j].nbitems; k++){ int cardid = endState.playerData[i].zones[j].cards[k];