modified Momir

This commit is contained in:
Anthony Calosa
2017-02-05 22:14:20 +08:00
parent db0f6d6c0b
commit e2c1d62552
5 changed files with 55 additions and 15 deletions

View File

@@ -77,7 +77,7 @@ public:
} }
virtual const string getDisplayName() const; virtual const string getDisplayName() const;
void Render(MTGCardInstance * source, JQuad * targetQuad, string alt1, string alt2, string action, bool bigQuad = false); void Render(MTGCardInstance * source, JQuad * targetQuad, string alt1, string alt2, string action, bool bigQuad = false, int aType = 0);
virtual int receiveEvent(WEvent *) virtual int receiveEvent(WEvent *)
{ {

View File

@@ -220,6 +220,7 @@ public:
ATTACK_COST = 36, ATTACK_COST = 36,
BLOCK_COST = 37, BLOCK_COST = 37,
GRANTEDFLASHBACK_COST = 38, GRANTEDFLASHBACK_COST = 38,
FORCED_TOKEN_CREATOR,
}; };
}; };

View File

@@ -480,7 +480,8 @@ public:
int alreadyplayed; int alreadyplayed;
MTGAllCards * collection; MTGAllCards * collection;
MTGCardInstance * genCreature(int id); MTGAbility * tokCreate;
MTGCardInstance * genCreature(int id, Player * p);
void Update(float dt); void Update(float dt);
void Render(); void Render();
MTGMomirRule(GameObserver* observer, int _id, MTGAllCards * _collection); MTGMomirRule(GameObserver* observer, int _id, MTGAllCards * _collection);

View File

@@ -88,7 +88,7 @@ float Interruptible::GetVerticalTextOffset() const
} }
void Interruptible::Render(MTGCardInstance * source, JQuad * targetQuad, string alt1, string alt2, string action, void Interruptible::Render(MTGCardInstance * source, JQuad * targetQuad, string alt1, string alt2, string action,
bool bigQuad) bool bigQuad, int aType)
{ {
WFont * mFont = observer->getResourceManager()->GetWFont(Fonts::MAIN_FONT); WFont * mFont = observer->getResourceManager()->GetWFont(Fonts::MAIN_FONT);
mFont->SetColor(ARGB(255,255,255,255)); mFont->SetColor(ARGB(255,255,255,255));
@@ -132,9 +132,19 @@ void Interruptible::Render(MTGCardInstance * source, JQuad * targetQuad, string
{ {
/*Pos pos = Pos(CardGui::BigWidth / 2, CardGui::BigHeight / 2 - 10, 1.0, 0.0, 220); /*Pos pos = Pos(CardGui::BigWidth / 2, CardGui::BigHeight / 2 - 10, 1.0, 0.0, 220);
CardGui::DrawCard(source, pos, observer->getCardSelector()->GetDrawMode());*/ CardGui::DrawCard(source, pos, observer->getCardSelector()->GetDrawMode());*/
Pos pos = Pos(CardGui::BigWidth / 2, CardGui::BigHeight / 2 - 10, 0.80f, 0.0, 220); if(observer->gameType() == GAME_TYPE_MOMIR && aType == MTGAbility::FORCED_TOKEN_CREATOR)
pos.actY = 142;//adjust y a little bit {
CardGui::DrawCard(source, pos, observer->getCardSelector()->GetDrawMode()); Pos pos = Pos(CardGui::BigWidth / 2, CardGui::BigHeight / 2 - 10, 0.80f, 0.0, 220);
pos.actY = 142;//adjust y a little bit
CardGui::DrawCard(source, pos, observer->getCardSelector()->GetDrawMode());
}
else if (observer->gameType() != GAME_TYPE_MOMIR)
{
Pos pos = Pos(CardGui::BigWidth / 2, CardGui::BigHeight / 2 - 10, 0.80f, 0.0, 220);
pos.actY = 142;//adjust y a little bit
CardGui::DrawCard(source, pos, observer->getCardSelector()->GetDrawMode());
}
} }
if (targetQuad) if (targetQuad)
@@ -188,7 +198,10 @@ void StackAbility::Render()
} }
} }
Interruptible::Render(source, quad.get(), alt1, alt2, action); if(observer->gameType() == GAME_TYPE_MOMIR)
Interruptible::Render(source, quad.get(), alt1, alt2, action, true, ability->aType);
else
Interruptible::Render(source, quad.get(), alt1, alt2, action);
} }
StackAbility::StackAbility(GameObserver* observer, int id, MTGAbility * _ability) : StackAbility::StackAbility(GameObserver* observer, int id, MTGAbility * _ability) :
Interruptible(observer, id), ability(_ability) Interruptible(observer, id), ability(_ability)

View File

@@ -2381,13 +2381,14 @@ MTGMomirRule::MTGMomirRule(GameObserver* observer, int _id, MTGAllCards * _colle
alreadyplayed = 0; alreadyplayed = 0;
aType = MTGAbility::MOMIR; aType = MTGAbility::MOMIR;
textAlpha = 0; textAlpha = 0;
tokCreate = NULL;
} }
int MTGMomirRule::isReactingToClick(MTGCardInstance * card, ManaCost *) int MTGMomirRule::isReactingToClick(MTGCardInstance * card, ManaCost *)
{ {
if (alreadyplayed) if (alreadyplayed)
return 0; return 0;
Player * player = game->currentlyActing(); Player * player = card->controller();
Player * currentPlayer = game->currentPlayer; Player * currentPlayer = game->currentPlayer;
if (!player->game->hand->hasCard(card)) if (!player->game->hand->hasCard(card))
return 0; return 0;
@@ -2403,7 +2404,7 @@ int MTGMomirRule::isReactingToClick(MTGCardInstance * card, ManaCost *)
int MTGMomirRule::reactToClick(MTGCardInstance * card_to_discard) int MTGMomirRule::reactToClick(MTGCardInstance * card_to_discard)
{ {
Player * player = game->currentlyActing(); Player * player = card_to_discard->controller();
ManaCost * cost = player->getManaPool(); ManaCost * cost = player->getManaPool();
int converted = cost->getConvertedCost(); int converted = cost->getConvertedCost();
int id = genRandomCreatureId(converted); int id = genRandomCreatureId(converted);
@@ -2414,29 +2415,53 @@ int MTGMomirRule::reactToClick(MTGCardInstance * card_to_discard, int cardId)
{ {
if (!isReactingToClick(card_to_discard)) if (!isReactingToClick(card_to_discard))
return 0; return 0;
Player * player = game->currentlyActing(); Player * player = card_to_discard->controller();
ManaCost * cost = player->getManaPool(); ManaCost * cost = player->getManaPool();
player->getManaPool()->pay(cost); player->getManaPool()->pay(cost);
MTGCardInstance * card = genCreature(cardId); MTGCardInstance * card = genCreature(cardId, player);
card->owner = player;
player->game->putInZone(card_to_discard, card_to_discard->currentZone, player->game->graveyard); player->game->putInZone(card_to_discard, card_to_discard->currentZone, player->game->graveyard);
player->game->stack->addCard(card); /*player->game->stack->addCard(card);
Spell * spell = NEW Spell(game, card); Spell * spell = NEW Spell(game, card);
spell->resolve(); spell->resolve();
spell->source->isToken = 1; spell->source->isToken = 1;
delete spell; delete spell;*/
string abi = "token(";
ostringstream tokID;
tokID << abs(cardId);
abi.append(tokID.str());
abi.append(") controller");
AbilityFactory af(game);
tokCreate = af.parseMagicLine(abi,game->mLayers->actionLayer()->getMaxId(),NULL, card->clone());
tokCreate->aType = MTGAbility::FORCED_TOKEN_CREATOR;
if(tokCreate)
tokCreate->fireAbility();
alreadyplayed = 1; alreadyplayed = 1;
textAlpha = 255; textAlpha = 255;
text = card->name; text = card->name;
SAFE_DELETE(card);
return 1; return 1;
} }
MTGCardInstance * MTGMomirRule::genCreature(int id) MTGCardInstance * MTGMomirRule::genCreature(int id, Player * p)
{ {
if (!id) if (!id)
return NULL; return NULL;
Player * p = game->currentlyActing(); //Player * p = game->currentlyActing();
MTGCard * card = collection->getCardById(id); MTGCard * card = collection->getCardById(id);
int myCC = card->data->getManaCost()->getConvertedCost();
int myId = 0;
while(card->getRarity() == Constants::RARITY_T)
{
myId = genRandomCreatureId(myCC);
card = collection->getCardById(myId);
}
return NEW MTGCardInstance(card, p->game); return NEW MTGCardInstance(card, p->game);
} }