Files
wagic/projects/mtg/src/WEvent.cpp
omegablast2002@yahoo.com 75a9d7840d 3 things here, found my targets returns for @vampired we're screwy, which explained why doc didnt add 3 of the possible cards for it...corrected that but i need to rename the varibles which i will do at a later time, not in this patch..
2 fix for token creator livingweapons...this was actually a preexisting bug, but not noticed becuase these are the first equipments that use token gen...when equipping it would readd the oneshot tok gen as an activated ability with no cost...generally we dont want to pass oneshot token generation to another card by equipping...

and 3rd...
got rid of the disgusting vanishing workaround.
it was riddled with bugs, got exsample if the creatures would gain indestructible the -99/-99 they were reciving did nothing to rid the battlefield of the creature...

new vanishing is 
auto=vanishing:number
thats it, no crazy 2 trigger lines with lords ect...
2011-02-03 14:17:25 +00:00

292 lines
6.2 KiB
C++

#include "PrecompiledHeader.h"
#include "WEvent.h"
#include "MTGCardInstance.h"
#include "MTGGameZones.h"
#include "Damage.h"
#include "PhaseRing.h"
WEvent::WEvent(int type) :
type(type)
{
}
WEventZoneChange::WEventZoneChange(MTGCardInstance * card, MTGGameZone * from, MTGGameZone *to) :
WEvent(CHANGE_ZONE), card(card), from(from), to(to)
{
}
WEventDamage::WEventDamage(Damage *damage) :
WEvent(DAMAGE), damage(damage)
{
}
WEventLife::WEventLife(Player * player,int amount) :
WEvent(), player(player),amount(amount)
{
}
WEventDamageStackResolved::WEventDamageStackResolved() :
WEvent()
{
}
WEventCardUpdate::WEventCardUpdate(MTGCardInstance * card) :
WEvent(), card(card)
{
}
;
WEventPhaseChange::WEventPhaseChange(Phase * from, Phase * to) :
WEvent(CHANGE_PHASE), from(from), to(to)
{
}
WEventCardTap::WEventCardTap(MTGCardInstance * card, bool before, bool after) :
WEventCardUpdate(card), before(before), after(after)
{
}
WEventCardTappedForMana::WEventCardTappedForMana(MTGCardInstance * card, bool before, bool after) :
WEventCardUpdate(card), before(before), after(after)
{
}
WEventCardAttacked::WEventCardAttacked(MTGCardInstance * card) :
WEventCardUpdate(card)
{
}
WEventCardAttackedAlone::WEventCardAttackedAlone(MTGCardInstance * card) :
WEventCardUpdate(card)
{
}
WEventCardAttackedNotBlocked::WEventCardAttackedNotBlocked(MTGCardInstance * card) :
WEventCardUpdate(card)
{
}
WEventCardAttackedBlocked::WEventCardAttackedBlocked(MTGCardInstance * card) :
WEventCardUpdate(card)
{
}
WEventCardBlocked::WEventCardBlocked(MTGCardInstance * card) :
WEventCardUpdate(card)
{
}
WEventcardDraw::WEventcardDraw(Player * player, int nb_cards) :
player(player), nb_cards(nb_cards)
{
}
WEventCardSacrifice::WEventCardSacrifice(MTGCardInstance * card) :
WEventCardUpdate(card)
{
}
WEventCardDiscard::WEventCardDiscard(MTGCardInstance * card) :
WEventCardUpdate(card)
{
}
WEventVampire::WEventVampire(MTGCardInstance * card,MTGCardInstance * source,MTGCardInstance * victem) :
WEventCardUpdate(card),source(source),victem(victem)
{
}
WEventTarget::WEventTarget(MTGCardInstance * card,MTGCardInstance * source) :
WEventCardUpdate(card),card(card),source(source)
{
}
WEventCardChangeType::WEventCardChangeType(MTGCardInstance * card, int type, bool before, bool after) :
WEventCardUpdate(card), type(type), before(before), after(after)
{
}
WEventCreatureAttacker::WEventCreatureAttacker(MTGCardInstance * card, Targetable * before, Targetable * after) :
WEventCardUpdate(card), before(before), after(after)
{
}
WEventCreatureBlocker::WEventCreatureBlocker(MTGCardInstance * card, MTGCardInstance * from, MTGCardInstance * to) :
WEventCardUpdate(card), before(from), after(to)
{
}
WEventCreatureBlockerRank::WEventCreatureBlockerRank(MTGCardInstance * card, MTGCardInstance * exchangeWith,
MTGCardInstance * attacker) :
WEventCardUpdate(card), exchangeWith(exchangeWith), attacker(attacker)
{
}
WEventEngageMana::WEventEngageMana(int color, MTGCardInstance* card, ManaPool * destination) :
WEvent(), color(color), card(card), destination(destination)
{
}
WEventConsumeMana::WEventConsumeMana(int color, ManaPool * source) :
WEvent(), color(color), source(source)
{
}
WEventEmptyManaPool::WEventEmptyManaPool(ManaPool * source) :
WEvent(), source(source)
{
}
WEventCombatStepChange::WEventCombatStepChange(CombatStep step) :
WEvent(), step(step)
{
}
;
Targetable * WEventDamage::getTarget(int target)
{
switch (target)
{
case TARGET_TO:
return damage->target;
case TARGET_FROM:
return damage->source;
}
return NULL;
}
int WEventDamage::getValue()
{
return damage->damage;
}
Targetable * WEventLife::getTarget(int target)
{
if (target)
{
return player;
}
return NULL;
}
Targetable * WEventVampire::getTarget(int target)
{
switch (target)
{
case TARGET_TO:
return source->next;
case TARGET_FROM:
return victem;
}
return NULL;
}
Targetable * WEventTarget::getTarget(int target)
{
switch (target)
{
case TARGET_TO:
return card;
case TARGET_FROM:
return source;
}
return NULL;
}
Targetable * WEventZoneChange::getTarget(int target)
{
if (target) return card;
return NULL;
}
Targetable * WEventCardAttacked::getTarget(int target)
{
if (target) return card;
return NULL;
}
Targetable * WEventCardAttackedAlone::getTarget(int target)
{
if (target) return card;
return NULL;
}
Targetable * WEventCardSacrifice::getTarget(int target)
{
if (target) return card;
return NULL;
}
Targetable * WEventCardDiscard::getTarget(int target)
{
if (target) return card;
return NULL;
}
Targetable * WEventCardAttackedNotBlocked::getTarget(int target)
{
if (target) return card;
return NULL;
}
Targetable * WEventCardAttackedBlocked::getTarget(int target)
{
switch (target)
{
case TARGET_TO:
return card;
case TARGET_FROM:
return card->getNextOpponent();
}
return NULL;
}
Targetable * WEventCardBlocked::getTarget(int target)
{
switch (target)
{
case TARGET_TO:
return card;
case TARGET_FROM:
return card->getNextOpponent();
}
return NULL;
}
Targetable * WEventCardTap::getTarget(int target)
{
if (target) return card;
return NULL;
}
Targetable * WEventCardTappedForMana::getTarget(int target)
{
if (target) return card;
return NULL;
}
Targetable * WEventcardDraw::getTarget(Player * player)
{
if (player) return player;
return NULL;
}
std::ostream& WEvent::toString(std::ostream& out) const
{
return out << "EVENT";
}
std::ostream& WEventZoneChange::toString(std::ostream& out) const
{
return out << "ZONEEVENT " << *card << " : " << *from << " -> " << *to;
}
std::ostream& WEventDamage::toString(std::ostream& out) const
{
if (MTGCardInstance* m = dynamic_cast<MTGCardInstance*>(damage->target))
return out << "DAMAGEEVENT " << damage->damage << " >> " << *m;
else
return out << "DAMAGEEVENT " << damage->damage << " >> " << damage->target;
}
std::ostream& operator<<(std::ostream& out, const WEvent& m)
{
return m.toString(out);
}