- Added "PreventAllCombatDamage" [from(...)] [to(...)] keyword. Please test it on a few cards before we "mass" use it. As a side effect, fixed issue 155 (ebony horse target).
This commit is contained in:
wagic.the.homebrew@gmail.com
2009-11-14 11:35:29 +00:00
parent 5781060d83
commit 9ca552093e
15 changed files with 2695 additions and 2577 deletions
+5 -5
View File
@@ -7,14 +7,15 @@
#include "../include/WResourceManager.h"
Damage::Damage(MTGCardInstance * source, Damageable * target) {
init(source, target, source->getPower());
init(source, target, source->getPower(), DAMAGE_OTHER);
}
Damage::Damage(MTGCardInstance * source, Damageable * target, int damage) {
init(source, target, damage);
Damage::Damage(MTGCardInstance * source, Damageable * target, int damage,int _typeOfDamage) {
init(source, target, damage, _typeOfDamage);
}
void Damage::init(MTGCardInstance * _source, Damageable * _target, int _damage){
void Damage::init(MTGCardInstance * _source, Damageable * _target, int _damage, int _typeOfDamage){
typeOfDamage = _typeOfDamage;
target = _target;
source = _source;
@@ -70,7 +71,6 @@ int Damage::resolve(){
//Send (Damage/Replaced effect) event to listeners
g->receiveEvent(e);
//SAFE_DELETE(e);
return a;
}
+1 -1
View File
@@ -28,7 +28,7 @@ void DamagerDamaged::addDamage(int damage, DamagerDamaged* source){
if (0 >= i->damage) damages.erase(i);
return;
}
if (0 < damage) damages.push_back(Damage(source->card, card, damage));
if (0 < damage) damages.push_back(Damage(source->card, card, damage,DAMAGE_COMBAT));
return;
}
+1 -1
View File
@@ -314,7 +314,7 @@ int GuiCombat::resolve() // Returns the number of damage objects dealt this turn
stack->Add(NEW Damage(*d));
dmg -= (*q)->sumDamages();
}
if (dmg > 0) stack->Add(NEW Damage((*it)->card, go->opponent(), dmg));
if (dmg > 0) stack->Add(NEW Damage((*it)->card, go->opponent(), dmg, DAMAGE_COMBAT));
for (vector<Damage>::iterator d = (*it)->damages.begin(); d != (*it)->damages.end(); ++d)
stack->Add(NEW Damage(*d));
}
File diff suppressed because it is too large Load Diff
+3 -2
View File
@@ -2,10 +2,10 @@
#include "../include/ReplacementEffects.h"
#include "../include/MTGCardInstance.h"
#include "../include/TargetChooser.h"
#include "../include/Damage.h"
REDamagePrevention::REDamagePrevention(MTGAbility * source, TargetChooser *tcSource, TargetChooser *tcTarget, int damage, bool oneShot):source(source), tcSource(tcSource), tcTarget(tcTarget), damage(damage), oneShot(oneShot){
REDamagePrevention::REDamagePrevention(MTGAbility * source, TargetChooser *tcSource, TargetChooser *tcTarget, int damage, bool oneShot, int typeOfDamage):source(source), tcSource(tcSource), tcTarget(tcTarget), damage(damage), oneShot(oneShot), typeOfDamage(typeOfDamage){
}
WEvent * REDamagePrevention::replace (WEvent *event){
@@ -14,6 +14,7 @@ WEvent * REDamagePrevention::replace (WEvent *event){
WEventDamage * e = dynamic_cast<WEventDamage*>(event);
if (!e) return event;
Damage *d = e->damage;
if (d->typeOfDamage != typeOfDamage && typeOfDamage != DAMAGE_ALL_TYPES) return event;
if ((!tcSource || tcSource->canTarget(d->source)) &&
(!tcTarget || tcTarget->canTarget(d->target))
){
+8 -1
View File
@@ -7,7 +7,7 @@
TargetChooser * TargetChooserFactory::createTargetChooser(string s, MTGCardInstance * card){
TargetChooser * TargetChooserFactory::createTargetChooser(string s, MTGCardInstance * card, MTGAbility * ability){
if (!s.size()) return NULL;
int zones[10];
@@ -15,6 +15,13 @@ TargetChooser * TargetChooserFactory::createTargetChooser(string s, MTGCardInsta
size_t found;
bool other = false;
found = s.find("mytgt");
if (found == 0){
MTGCardInstance * target = card->target;
if (ability) target = (MTGCardInstance *) (ability->target);
return NEW CardTargetChooser(target,card);
};
found = s.find("other ");
if (found == 0){
other = true;