From 20e878a102345019c4b634cddb8db474389db825 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Snoen?= Date: Sat, 21 Dec 2013 11:05:15 +0100 Subject: [PATCH 1/4] Made damager keyword work. Fixed Executioner's Swing in mtg.txt --- projects/mtg/bin/Res/sets/primitives/mtg.txt | 4 ++-- projects/mtg/include/CardDescriptor.h | 1 + projects/mtg/include/MTGCardInstance.h | 1 + projects/mtg/src/CardDescriptor.cpp | 7 +++++++ projects/mtg/src/CardGui.cpp | 8 ++++++++ projects/mtg/src/Damage.cpp | 4 +++- projects/mtg/src/GameObserver.cpp | 1 + projects/mtg/src/MTGCardInstance.cpp | 1 + projects/mtg/src/TargetChooser.cpp | 8 ++++++++ 9 files changed, 32 insertions(+), 3 deletions(-) diff --git a/projects/mtg/bin/Res/sets/primitives/mtg.txt b/projects/mtg/bin/Res/sets/primitives/mtg.txt index 9459016d2..111c47de8 100644 --- a/projects/mtg/bin/Res/sets/primitives/mtg.txt +++ b/projects/mtg/bin/Res/sets/primitives/mtg.txt @@ -28204,7 +28204,7 @@ subtype=Equipment [card] name=Executioner's Swing text=Target creature that dealt damage this turn gets -5/-5 until end of turn. -target=creature[damaged] +target=creature[damager] auto=-5/-5 ueot mana={W}{B} type=Instant @@ -104298,4 +104298,4 @@ type=Land Creature subtype=Forest Dryad power=1 toughness=1 -[/card] \ No newline at end of file +[/card] diff --git a/projects/mtg/include/CardDescriptor.h b/projects/mtg/include/CardDescriptor.h index 704e3d55f..fbe58f4db 100644 --- a/projects/mtg/include/CardDescriptor.h +++ b/projects/mtg/include/CardDescriptor.h @@ -64,6 +64,7 @@ class CardDescriptor: public MTGCardInstance string compareName; int CDopponentDamaged; int CDcontrollerDamaged; + int CDdamager; }; #endif diff --git a/projects/mtg/include/MTGCardInstance.h b/projects/mtg/include/MTGCardInstance.h index ab708e5db..82053bcf1 100644 --- a/projects/mtg/include/MTGCardInstance.h +++ b/projects/mtg/include/MTGCardInstance.h @@ -65,6 +65,7 @@ public: bool wasDealtDamage; bool damageToOpponent; bool damageToController; + bool damageToCreature; bool mPropertiesChangedSinceLastUpdate; int reduxamount; int flanked; diff --git a/projects/mtg/src/CardDescriptor.cpp b/projects/mtg/src/CardDescriptor.cpp index f304e356d..5901069a1 100644 --- a/projects/mtg/src/CardDescriptor.cpp +++ b/projects/mtg/src/CardDescriptor.cpp @@ -23,6 +23,7 @@ CardDescriptor::CardDescriptor() colorComparisonMode = COMPARISON_NONE; CDopponentDamaged = 0; CDcontrollerDamaged = 0; + CDdamager = 0; } int CardDescriptor::init() @@ -226,6 +227,12 @@ MTGCardInstance * CardDescriptor::match(MTGCardInstance * card) { match = NULL; } + + if ((CDdamager == -1 && (card->damageToOpponent || card->damageToController || card->damageToCreature)) || (CDdamager == 1 && !(card->damageToOpponent || card->damageToController || card->damageToCreature))) + { + match = NULL; + } + if(CDopponentDamaged == -1 || CDopponentDamaged == 1) { Player * p = card->controller()->opponent();//controller()->opponent(); diff --git a/projects/mtg/src/CardGui.cpp b/projects/mtg/src/CardGui.cpp index 859a6d936..87f883a90 100644 --- a/projects/mtg/src/CardGui.cpp +++ b/projects/mtg/src/CardGui.cpp @@ -1224,6 +1224,14 @@ bool CardGui::FilterCard(MTGCard * _card,string filter) cd.CDcontrollerDamaged = 1; } } + //creature dealt damage to anything + else if (attribute.find("damager") != string::npos){ + if (minus){ + cd.CDdamager = -1; + } else { + cd.CDdamager = 1; + } + } else if (attribute.find("multicolor") != string::npos) { //card is multicolored? diff --git a/projects/mtg/src/Damage.cpp b/projects/mtg/src/Damage.cpp index 394294ad9..74c55ab02 100644 --- a/projects/mtg/src/Damage.cpp +++ b/projects/mtg/src/Damage.cpp @@ -192,8 +192,10 @@ int Damage::resolve() //return the left over amount after effects have been applied to them. a = target->dealDamage(damage); target->damageCount += damage;//the amount must be the actual damage so i changed this from 1 to damage, this fixes pdcount and odcount - if (target->type_as_damageable == Damageable::DAMAGEABLE_MTGCARDINSTANCE) + if (target->type_as_damageable == Damageable::DAMAGEABLE_MTGCARDINSTANCE){ ((MTGCardInstance*)target)->wasDealtDamage = true; + ((MTGCardInstance*)source)->damageToCreature = true; + } if (target->type_as_damageable == Damageable::DAMAGEABLE_PLAYER) { if(target == source->controller()) diff --git a/projects/mtg/src/GameObserver.cpp b/projects/mtg/src/GameObserver.cpp index ed01c26d5..303d6beff 100644 --- a/projects/mtg/src/GameObserver.cpp +++ b/projects/mtg/src/GameObserver.cpp @@ -795,6 +795,7 @@ void GameObserver::gameStateBasedEffects() c->wasDealtDamage = false; c->damageToController = false; c->damageToOpponent = false; + c->damageToCreature = false; c->isAttacking = NULL; } for (int t = 0; t < nbcards; t++) diff --git a/projects/mtg/src/MTGCardInstance.cpp b/projects/mtg/src/MTGCardInstance.cpp index e70320ae4..b957afa0c 100644 --- a/projects/mtg/src/MTGCardInstance.cpp +++ b/projects/mtg/src/MTGCardInstance.cpp @@ -158,6 +158,7 @@ void MTGCardInstance::initMTGCI() auras = 0; damageToOpponent = false; damageToController = false; + damageToCreature = false; wasDealtDamage = false; isDualWielding = false; suspended = false; diff --git a/projects/mtg/src/TargetChooser.cpp b/projects/mtg/src/TargetChooser.cpp index 2e73f23e4..fba54658c 100644 --- a/projects/mtg/src/TargetChooser.cpp +++ b/projects/mtg/src/TargetChooser.cpp @@ -485,6 +485,14 @@ TargetChooser * TargetChooserFactory::createTargetChooser(string s, MTGCardInsta cd->CDcontrollerDamaged = 1; } } + //creature dealt damage to anything + else if (attribute.find("damager") != string::npos){ + if (minus){ + cd->CDdamager = -1; + } else { + cd->CDdamager = 1; + } + } else if (attribute.find("multicolor") != string::npos) { //card is multicolored? From 642f5bb5157be8eab99e41a7cc1339e78dd1fb60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Snoen?= Date: Sat, 21 Dec 2013 11:18:18 +0100 Subject: [PATCH 2/4] Fixed indentation mistakes --- projects/mtg/src/CardDescriptor.cpp | 2 +- projects/mtg/src/Damage.cpp | 4 ++-- projects/mtg/src/GameObserver.cpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/projects/mtg/src/CardDescriptor.cpp b/projects/mtg/src/CardDescriptor.cpp index 5901069a1..a35596891 100644 --- a/projects/mtg/src/CardDescriptor.cpp +++ b/projects/mtg/src/CardDescriptor.cpp @@ -229,7 +229,7 @@ MTGCardInstance * CardDescriptor::match(MTGCardInstance * card) } if ((CDdamager == -1 && (card->damageToOpponent || card->damageToController || card->damageToCreature)) || (CDdamager == 1 && !(card->damageToOpponent || card->damageToController || card->damageToCreature))) - { + { match = NULL; } diff --git a/projects/mtg/src/Damage.cpp b/projects/mtg/src/Damage.cpp index 74c55ab02..6626c4df8 100644 --- a/projects/mtg/src/Damage.cpp +++ b/projects/mtg/src/Damage.cpp @@ -194,8 +194,8 @@ int Damage::resolve() target->damageCount += damage;//the amount must be the actual damage so i changed this from 1 to damage, this fixes pdcount and odcount if (target->type_as_damageable == Damageable::DAMAGEABLE_MTGCARDINSTANCE){ ((MTGCardInstance*)target)->wasDealtDamage = true; - ((MTGCardInstance*)source)->damageToCreature = true; - } + ((MTGCardInstance*)source)->damageToCreature = true; + } if (target->type_as_damageable == Damageable::DAMAGEABLE_PLAYER) { if(target == source->controller()) diff --git a/projects/mtg/src/GameObserver.cpp b/projects/mtg/src/GameObserver.cpp index 303d6beff..80fb9a0f4 100644 --- a/projects/mtg/src/GameObserver.cpp +++ b/projects/mtg/src/GameObserver.cpp @@ -795,7 +795,7 @@ void GameObserver::gameStateBasedEffects() c->wasDealtDamage = false; c->damageToController = false; c->damageToOpponent = false; - c->damageToCreature = false; + c->damageToCreature = false; c->isAttacking = NULL; } for (int t = 0; t < nbcards; t++) From 60219411f6574744a562026aaf874e22215a7865 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Snoen?= Date: Sat, 21 Dec 2013 14:33:44 +0100 Subject: [PATCH 3/4] Coding style compliance --- projects/mtg/src/CardDescriptor.cpp | 3 ++- projects/mtg/src/CardGui.cpp | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/projects/mtg/src/CardDescriptor.cpp b/projects/mtg/src/CardDescriptor.cpp index a35596891..789ea16da 100644 --- a/projects/mtg/src/CardDescriptor.cpp +++ b/projects/mtg/src/CardDescriptor.cpp @@ -228,7 +228,8 @@ MTGCardInstance * CardDescriptor::match(MTGCardInstance * card) match = NULL; } - if ((CDdamager == -1 && (card->damageToOpponent || card->damageToController || card->damageToCreature)) || (CDdamager == 1 && !(card->damageToOpponent || card->damageToController || card->damageToCreature))) + if ((CDdamager == -1 && (card->damageToOpponent || card->damageToController || card->damageToCreature)) + || (CDdamager == 1 && !(card->damageToOpponent || card->damageToController || card->damageToCreature))) { match = NULL; } diff --git a/projects/mtg/src/CardGui.cpp b/projects/mtg/src/CardGui.cpp index 87f883a90..589d54eb8 100644 --- a/projects/mtg/src/CardGui.cpp +++ b/projects/mtg/src/CardGui.cpp @@ -1225,7 +1225,8 @@ bool CardGui::FilterCard(MTGCard * _card,string filter) } } //creature dealt damage to anything - else if (attribute.find("damager") != string::npos){ + else if (attribute.find("damager") != string::npos) + { if (minus){ cd.CDdamager = -1; } else { From 928ca3497a484ebd7142880099f6f712a094733d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Snoen?= Date: Sat, 21 Dec 2013 19:31:32 +0100 Subject: [PATCH 4/4] More code compliance. New tests. --- .../mtg/bin/Res/test/executioners_swing.txt | 42 +++++++++++++++++++ .../mtg/bin/Res/test/executioners_swing2.txt | 42 +++++++++++++++++++ .../mtg/bin/Res/test/executioners_swing3.txt | 34 +++++++++++++++ projects/mtg/src/CardGui.cpp | 7 +++- projects/mtg/src/TargetChooser.cpp | 10 +++-- 5 files changed, 130 insertions(+), 5 deletions(-) create mode 100644 projects/mtg/bin/Res/test/executioners_swing.txt create mode 100644 projects/mtg/bin/Res/test/executioners_swing2.txt create mode 100644 projects/mtg/bin/Res/test/executioners_swing3.txt diff --git a/projects/mtg/bin/Res/test/executioners_swing.txt b/projects/mtg/bin/Res/test/executioners_swing.txt new file mode 100644 index 000000000..baabe2c48 --- /dev/null +++ b/projects/mtg/bin/Res/test/executioners_swing.txt @@ -0,0 +1,42 @@ +#NAME: Executioner's Swing +#DESC: Checks targetability +#DESC: Test that can target creature that damaged creature this turn + +[INIT] +combatattackers + +[PLAYER1] +inplay:Grizzly Bears + +[PLAYER2] +inplay:Flying Men,Swamp,Plains +hand:Executioner's Swing + +[DO] +Grizzly Bears +next +Flying Men +next +next +next + +# second main +# kill bear +yes +Swamp +Plains +Executioner's Swing +Grizzly Bears +endinterruption + +[ASSERT] +secondmain + +[PLAYER1] +graveyard:Grizzly Bears + +[PLAYER2] +graveyard:Executioner's Swing,Flying Men +inplay:Plains,Swamp + +[END] diff --git a/projects/mtg/bin/Res/test/executioners_swing2.txt b/projects/mtg/bin/Res/test/executioners_swing2.txt new file mode 100644 index 000000000..cb484e8d7 --- /dev/null +++ b/projects/mtg/bin/Res/test/executioners_swing2.txt @@ -0,0 +1,42 @@ +#NAME: Executioner's Swing +#DESC: Checks targetability +#DESC: Test that can target creature that damaged player + +[INIT] +combatattackers + +[PLAYER1] +inplay:Grizzly Bears + +[PLAYER2] +inplay:Swamp,Plains +hand:Executioner's Swing + +[DO] +Grizzly Bears +next +next +next +next + +# second main +# kill bear +yes +Swamp +Plains +Executioner's Swing +Grizzly Bears +endinterruption + +[ASSERT] +secondmain + +[PLAYER1] +graveyard:Grizzly Bears + +[PLAYER2] +graveyard:Executioner's Swing +inplay:Plains,Swamp +life:18 + +[END] diff --git a/projects/mtg/bin/Res/test/executioners_swing3.txt b/projects/mtg/bin/Res/test/executioners_swing3.txt new file mode 100644 index 000000000..433164fed --- /dev/null +++ b/projects/mtg/bin/Res/test/executioners_swing3.txt @@ -0,0 +1,34 @@ +#NAME: Executioner's Swing +#DESC: Checks targetability +#DESC: Prove that can't target passive creature + +[INIT] +secondmain + +[PLAYER1] +inplay:Grizzly Bears + +[PLAYER2] +manapool:{B}{W} +hand:Executioner's Swing + +[DO] +# attempt to kill bear +yes +Swamp +Plains +Executioner's Swing +Grizzly Bears +endinterruption + +[ASSERT] +secondmain + +[PLAYER1] +inplay:Grizzly Bears + +[PLAYER2] +hand:Executioner's Swing +manapool:{W}{B} + +[END] diff --git a/projects/mtg/src/CardGui.cpp b/projects/mtg/src/CardGui.cpp index 589d54eb8..0b5b9d44a 100644 --- a/projects/mtg/src/CardGui.cpp +++ b/projects/mtg/src/CardGui.cpp @@ -1227,9 +1227,12 @@ bool CardGui::FilterCard(MTGCard * _card,string filter) //creature dealt damage to anything else if (attribute.find("damager") != string::npos) { - if (minus){ + if (minus) + { cd.CDdamager = -1; - } else { + } + else + { cd.CDdamager = 1; } } diff --git a/projects/mtg/src/TargetChooser.cpp b/projects/mtg/src/TargetChooser.cpp index fba54658c..e69f29702 100644 --- a/projects/mtg/src/TargetChooser.cpp +++ b/projects/mtg/src/TargetChooser.cpp @@ -486,10 +486,14 @@ TargetChooser * TargetChooserFactory::createTargetChooser(string s, MTGCardInsta } } //creature dealt damage to anything - else if (attribute.find("damager") != string::npos){ - if (minus){ + else if (attribute.find("damager") != string::npos) + { + if (minus) + { cd->CDdamager = -1; - } else { + } + else + { cd->CDdamager = 1; } }