- a few bug fixes with cards that bring other cards back to play (zombify, resurrection...)
- bug fix with abilities parsing "reachshadow"
- a few card fixes
This commit is contained in:
wagic.the.homebrew@gmail.com
2009-04-19 07:47:52 +00:00
parent 33e79e234e
commit 0af938589b
13 changed files with 135 additions and 19 deletions

View File

@@ -548,8 +548,8 @@ toughness=2
[/card] [/card]
[card] [card]
text=Other Giant creatures you control get +2/+2 and have trample. text=Other Giant creatures you control get +2/+2 and have trample.
auto=lord(giant) 2/2 other auto=lord(giant|myinplay) 2/2 other
auto=lord(giant) trample other auto=lord(giant|myinplay) trample other
id=139667 id=139667
name=Sunrise Sovereign name=Sunrise Sovereign
rarity=R rarity=R

View File

@@ -1034,7 +1034,7 @@ id=3252
name=Horrible Hordes name=Horrible Hordes
type=Artifact Creature type=Artifact Creature
subtype=Spirit subtype=Spirit
auto=rampage abilities=rampage
mana={3} mana={3}
power=2 power=2
toughness=2 toughness=2

View File

@@ -1074,7 +1074,7 @@ text=Return target creature card from your graveyard to play.
id=29847 id=29847
name=Zombify name=Zombify
target=Creature|mygraveyard target=Creature|mygraveyard
alias=1360 auto=moveTo(myInPlay)
mana={3}{B} mana={3}{B}
color=black color=black
type=Sorcery type=Sorcery

View File

@@ -220,6 +220,7 @@ abilities={2}:regenerate
[/card] [/card]
[card] [card]
text=Flying When Cloudchaser Eagle comes into play, destroy target enchantment. text=Flying When Cloudchaser Eagle comes into play, destroy target enchantment.
abilities=flying
id=4871 id=4871
name=Cloudchaser Eagle name=Cloudchaser Eagle
auto=may destroy target(enchantment) auto=may destroy target(enchantment)

View File

@@ -103,10 +103,13 @@ sword_to_plowshares.txt
terror.txt terror.txt
tranquil_domain.txt tranquil_domain.txt
volcanic_island.txt volcanic_island.txt
wall_of_diffusion.txt
wall_of_diffusion2.txt
white_knight1.txt white_knight1.txt
wrath_of_god.txt wrath_of_god.txt
zombie_master.txt zombie_master.txt
zombify.txt
######################## ########################
#Momir Basic Tests #Momir Basic Tests
######################## ########################
momir/keldon_warlord.txt momir/keldon_warlord.txt

View File

@@ -0,0 +1,24 @@
#Bug: Wall of diffusion has reach
[INIT]
COMBATATTACKERS
[PLAYER1]
inplay:air elemental
[PLAYER2]
inplay:wall of diffusion
[DO]
air elemental
next
#blockers
wall of diffusion
next
#damage
next
#end
[ASSERT]
COMBATEND
[PLAYER1]
inplay:air elemental
[PLAYER2]
inplay:wall of diffusion
life:16
[END]

View File

@@ -0,0 +1,23 @@
#Wall of diffusionShadow
[INIT]
COMBATATTACKERS
[PLAYER1]
inplay:dauthi marauder
[PLAYER2]
inplay:wall of diffusion
[DO]
dauthi marauder
next
#blockers
wall of diffusion
next
#damage
next
#end
[ASSERT]
COMBATEND
[PLAYER1]
inplay:dauthi marauder
[PLAYER2]
inplay:wall of diffusion
[END]

View File

@@ -0,0 +1,44 @@
#Bug: zombify on a Roowalla doesn't give the rootwalla it's abilities back
[INIT]
FIRSTMAIN
[PLAYER1]
hand:zombify
graveyard:rootwalla
inplay:swamp,forest
manapool:{3}{B}
[PLAYER2]
[DO]
zombify
rootwalla
eot
eot
#untap
next
#upkeep
next
#draw
next
#main 1
swamp
forest
rootwalla
next
#combat begins
next
#attackers
rootwalla
next
#blockers
next
#damage
next
#end
[ASSERT]
COMBATEND
[PLAYER1]
graveyard:zombify
inplay:swamp,forest,rootwalla
manapool:{0}
[PLAYER2]
life:16
[END]

View File

@@ -243,9 +243,9 @@ public:
destinationZone = destZone; destinationZone = destZone;
} }
int resolve(){ static int moveTarget(MTGCardInstance * _target, string destinationZone, MTGCardInstance * source){
MTGCardInstance * _target = tc->getNextCardTarget(); GameObserver * g = GameObserver::GetInstance();
if(_target){ if(_target){
Player* p = _target->controller(); Player* p = _target->controller();
if (p){ if (p){
MTGGameZone * fromZone = _target->getCurrentZone(); MTGGameZone * fromZone = _target->getCurrentZone();
@@ -253,8 +253,8 @@ public:
//inplay is a special zone ! //inplay is a special zone !
for (int i=0; i < 2; i++){ for (int i=0; i < 2; i++){
if (destZone == game->players[i]->game->inPlay){ if (destZone == g->players[i]->game->inPlay){
MTGCardInstance * copy = game->players[i]->game->putInZone(_target, fromZone, game->players[i]->game->stack); MTGCardInstance * copy = g->players[i]->game->putInZone(_target, fromZone, g->players[i]->game->stack);
Spell * spell = NEW Spell(copy); Spell * spell = NEW Spell(copy);
spell->resolve(); spell->resolve();
@@ -267,6 +267,11 @@ public:
return 1; return 1;
} }
return 0; return 0;
}
int resolve(){
MTGCardInstance * _target = tc->getNextCardTarget();
return moveTarget(_target,destinationZone, source);
} }
}; };

View File

@@ -369,9 +369,7 @@ int AbilityFactory::magicText(int id, Spell * spell, MTGCardInstance * card){
game->addObserver(a); game->addObserver(a);
} }
}else{ }else{
MTGGameZone * fromZone = target->getCurrentZone();//this is technically incorrect. The initial zone should be as described in the targetchooser AZoneMover::moveTarget(target,szone,card);
MTGGameZone * destZone = MTGGameZone::stringToZone(szone, card, target);
target->controller()->game->putInZone(target,fromZone,destZone);
} }
} }
result++; result++;

View File

@@ -62,10 +62,22 @@ int MTGAllCards::processConfLine(string s, MTGCard *card){
}else if (key.compare("abilities")==0){ }else if (key.compare("abilities")==0){
//Specific Abilities //Specific Abilities
std::transform( value.begin(), value.end(), value.begin(),::tolower ); std::transform( value.begin(), value.end(), value.begin(),::tolower );
for (int j = 0; j < Constants::NB_BASIC_ABILITIES; j++){ while (value.size()){
unsigned int found = value.find(Constants::MTGBasicAbilities[j]); string attribute;
if (found != string::npos){ size_t found2 = value.find(",");
card->basicAbilities[j] = 1; if (found2 != string::npos){
attribute = value.substr(0,found2);
value = value.substr(found2+1);
}else{
attribute = value;
value = "";
}
for (int j = Constants::NB_BASIC_ABILITIES-1; j >=0 ; j--){
size_t found = attribute.find(Constants::MTGBasicAbilities[j]);
if (found != string::npos){
card->basicAbilities[j] = 1;
break;
}
} }
} }
}else if(key.compare("id")==0){ }else if(key.compare("id")==0){

View File

@@ -225,8 +225,13 @@ MTGCardInstance * MTGMomirRule::genCreature( int id){
} }
int MTGMomirRule::genRandomCreatureId(int convertedCost){ int MTGMomirRule::genRandomCreatureId(int convertedCost){
if (convertedCost > 20) return 0; if (convertedCost > 20) convertedCost = 20;
int total_cards = pool[convertedCost].size(); int total_cards = 0;
int i = convertedCost;
while (!total_cards && i >=0){
total_cards = pool[i].size();
i--;
}
if (!total_cards) return 0; if (!total_cards) return 0;
int start = (rand() % total_cards); int start = (rand() % total_cards);
return pool[convertedCost][start]; return pool[convertedCost][start];

View File

@@ -70,6 +70,7 @@ void SimpleMenuItem::Relocate(int x, int y)
int SimpleMenuItem::GetWidth() int SimpleMenuItem::GetWidth()
{ {
mFont->SetScale(1.0);
return mFont->GetStringWidth(mText.c_str()); return mFont->GetStringWidth(mText.c_str());
} }