Set limited game mode, AI changes, primitives and _cards.dat corrections

New set limited ,where you get a deck two random sets.

Still playing with the AI values and hueristics.

Cards fixes. Masters Edition should be named ME1 and the Mythic Edition is MED, the cards multiverse ids are still the same so the decks and references should not change.
This commit is contained in:
Eduardo
2019-04-20 15:51:52 -05:00
parent 1c6b0bdfd5
commit 5db6b807ba
14 changed files with 231 additions and 1088 deletions
+2 -1
View File
@@ -96,7 +96,8 @@ hgeParticleSystem::hgeParticleSystem(hgeParticleSystemInfo *psi)
{ {
//hge=hgeCreate(HGE_VERSION); //hge=hgeCreate(HGE_VERSION);
memcpy(&info, psi, sizeof(hgeParticleSystemInfo)); if (psi)
memcpy(&info, psi, sizeof(hgeParticleSystemInfo));
vecLocation.x=vecPrevLocation.x=0.0f; vecLocation.x=vecPrevLocation.x=0.0f;
vecLocation.y=vecPrevLocation.y=0.0f; vecLocation.y=vecPrevLocation.y=0.0f;
File diff suppressed because it is too large Load Diff
+7 -7
View File
@@ -792,7 +792,7 @@ rarity=M
[card] [card]
primitive=Winged Temple of Orazca primitive=Winged Temple of Orazca
id=439816 id=439816
rarity=R rarity=T
[/card] [/card]
[card] [card]
primitive=Hadana's Climb primitive=Hadana's Climb
@@ -807,7 +807,7 @@ rarity=M
[card] [card]
primitive=Atzal, Cave of Eternity primitive=Atzal, Cave of Eternity
id=439819 id=439819
rarity=R rarity=T
[/card] [/card]
[card] [card]
primitive=Journey to Eternity primitive=Journey to Eternity
@@ -837,7 +837,7 @@ rarity=U
[card] [card]
primitive=Metzali, Tower of Triumph primitive=Metzali, Tower of Triumph
id=439825 id=439825
rarity=R rarity=T
[/card] [/card]
[card] [card]
primitive=Path of Mettle primitive=Path of Mettle
@@ -847,7 +847,7 @@ rarity=R
[card] [card]
primitive=Tomb of the Dusk Rose primitive=Tomb of the Dusk Rose
id=439827 id=439827
rarity=R rarity=T
[/card] [/card]
[card] [card]
primitive=Profane Procession primitive=Profane Procession
@@ -887,7 +887,7 @@ rarity=U
[card] [card]
primitive=Vault of Catlacan primitive=Vault of Catlacan
id=439835 id=439835
rarity=R rarity=T
[/card] [/card]
[card] [card]
primitive=Storm the Vault primitive=Storm the Vault
@@ -907,7 +907,7 @@ rarity=R
[card] [card]
primitive=Sanctum of the Sun primitive=Sanctum of the Sun
id=439839 id=439839
rarity=M rarity=T
[/card] [/card]
[card] [card]
primitive=Azor's Gateway primitive=Azor's Gateway
@@ -927,7 +927,7 @@ rarity=C
[card] [card]
primitive=Gold-Forge Garrison primitive=Gold-Forge Garrison
id=439843 id=439843
rarity=R rarity=T
[/card] [/card]
[card] [card]
primitive=Golden Guardian primitive=Golden Guardian
+10 -11
View File
@@ -4,7 +4,6 @@ name=Ixalan
year=2017 year=2017
block=Ixalan block=Ixalan
[/meta] [/meta]
[card] [card]
primitive=Adanto Vanguard primitive=Adanto Vanguard
id=435152 id=435152
@@ -118,7 +117,7 @@ rarity=R
[card] [card]
primitive=Adanto, the First Fort primitive=Adanto, the First Fort
id=435174 id=435174
rarity=R rarity=T
[/card] [/card]
[card] [card]
primitive=Looming Altisaur primitive=Looming Altisaur
@@ -383,7 +382,7 @@ rarity=R
[card] [card]
primitive=Azcanta, the Sunken Ruin primitive=Azcanta, the Sunken Ruin
id=435227 id=435227
rarity=R rarity=T
[/card] [/card]
[card] [card]
primitive=Shaper Apprentice primitive=Shaper Apprentice
@@ -468,7 +467,7 @@ rarity=R
[card] [card]
primitive=Temple of Aclazotz primitive=Temple of Aclazotz
id=435244 id=435244
rarity=R rarity=T
[/card] [/card]
[card] [card]
primitive=Bishop of the Bloodstained primitive=Bishop of the Bloodstained
@@ -888,7 +887,7 @@ rarity=R
[card] [card]
primitive=Spitfire Bastion primitive=Spitfire Bastion
id=435328 id=435328
rarity=R rarity=T
[/card] [/card]
[card] [card]
primitive=Wily Goblin primitive=Wily Goblin
@@ -983,7 +982,7 @@ rarity=R
[card] [card]
primitive=Itlimoc, Cradle of the Sun primitive=Itlimoc, Cradle of the Sun
id=435347 id=435347
rarity=R rarity=T
[/card] [/card]
[card] [card]
primitive=Ixalli's Diviner primitive=Ixalli's Diviner
@@ -1203,7 +1202,7 @@ rarity=R
[card] [card]
primitive=Conqueror's Foothold primitive=Conqueror's Foothold
id=435391 id=435391
rarity=R rarity=T
[/card] [/card]
[card] [card]
primitive=Dowsing Dagger primitive=Dowsing Dagger
@@ -1213,7 +1212,7 @@ rarity=R
[card] [card]
primitive=Lost Vale primitive=Lost Vale
id=435393 id=435393
rarity=R rarity=T
[/card] [/card]
[card] [card]
primitive=Dusk Legion Dreadnought primitive=Dusk Legion Dreadnought
@@ -1258,7 +1257,7 @@ rarity=R
[card] [card]
primitive=Primal Wellspring primitive=Primal Wellspring
id=435402 id=435402
rarity=R rarity=T
[/card] [/card]
[card] [card]
primitive=Prying Blade primitive=Prying Blade
@@ -1293,7 +1292,7 @@ rarity=R
[card] [card]
primitive=Spires of Orazca primitive=Spires of Orazca
id=435409 id=435409
rarity=R rarity=T
[/card] [/card]
[card] [card]
primitive=Treasure Map primitive=Treasure Map
@@ -1303,7 +1302,7 @@ rarity=R
[card] [card]
primitive=Treasure Cove primitive=Treasure Cove
id=435411 id=435411
rarity=R rarity=T
[/card] [/card]
[card] [card]
primitive=Vanquisher's Banner primitive=Vanquisher's Banner
@@ -15,11 +15,23 @@
# Fabricate # Fabricate
#AUTO_DEFINE _FABRICATE_($c) transforms((,newability[choice counter(1/1.$c)],newability[choice create(Servo:Artifact Creature Servo:1/1)*$c])) ueot #AUTO_DEFINE _FABRICATE_($c) transforms((,newability[choice counter(1/1.$c)],newability[choice create(Servo:Artifact Creature Servo:1/1)*$c])) ueot
# Dies, Evergreen
#AUTO_DEFINE _DIES_ @movedTo(this|mygraveyard) from(battlefield):
# Scry, Evergreen # Scry, Evergreen
#AUTO_DEFINE _SCRY_($c) scry:$c scrycore delayed dontshow donothing scrycoreend scryend #AUTO_DEFINE _SCRY_($c) scry:$c scrycore delayed dontshow donothing scrycoreend scryend
# Amass, Set WAR # Amass, Set WAR
#AUTO_DEFINE _AMASS_($c) if type(army|mybattlefield)~morethan~0 then counter(1/1,$c) notATarget(army|myBattlefield) else create(Zombie Army:creature Zombie Army:0/0:black) and!(counter(1/1,$c) notATarget(army|myBattlefield))! #AUTO_DEFINE _AMASS_($c) if type(army|mybattlefield)~morethan~0 then counter(1/1,$c) notATarget(army|myBattlefield) else create(Zombie Army:creature Zombie Army:0/0:black) and!(counter(1/1,$c) notATarget(army|myBattlefield))!
# Ascend, Set XLN
#AUTO_DEFINE _ASCEND_ if type(*[city's_blessing]|mybattlefield)~lessthan~1 then transforms((,newability[if type(*|mybattlefield)~morethan~9 then create(city's_blessing:city's_blessing:0/0:shroud:indestructible)]))
# Effect with the City's blessing, Set XLN
#AUTO_DEFINE _CITY'S_BLESSING_ aslongas(*[city's_blessing]|mybattlefield)>0
# Treasure token, Set XLN # Treasure token, Set XLN
#AUTO_DEFINE _TREASURE_ create(Treasure:Artifact Treasure:0/0:"{T}, Sacrifice this artifact: Add one mana of any color.") and!( transforms((,newability[{T}{S}:Add{W}],newability[{T}{S}:Add{U}],newability[{T}{S}:Add{R}],newability[{T}{S}:Add{B}],newability[{T}{S}:Add{G}])) forever )! #AUTO_DEFINE _TREASURE_ create(Treasure:Artifact Treasure:0/0:"{T}, Sacrifice this artifact: Add one mana of any color.") and!( transforms((,newability[{T}{S}:Add{W}],newability[{T}{S}:Add{U}],newability[{T}{S}:Add{R}],newability[{T}{S}:Add{B}],newability[{T}{S}:Add{G}])) forever )!
# Proliferate
#AUTO_DEFINE _PROLIFERATE_ notatarget(<anyamount>*) proliferate
@@ -552,7 +552,7 @@ type=Sorcery
[/card] [/card]
[card] [card]
name=Scent of Cinder name=Scent of Cinder
target=creature target=creature,player
auto=damage:type:*[red]:myhand auto=damage:type:*[red]:myhand
text=Reveal any number of red cards in your hand. Scent of Cinder deals X damage to target creature or player, where X is the number of cards revealed this way. text=Reveal any number of red cards in your hand. Scent of Cinder deals X damage to target creature or player, where X is the number of cards revealed this way.
mana={1}{R} mana={1}{R}
+56 -55
View File
@@ -2485,7 +2485,7 @@ toughness=1
name=Alabaster Potion name=Alabaster Potion
auto=choice life:X target(player) auto=choice life:X target(player)
auto=choice prevent:X target(creature,player) auto=choice prevent:X target(creature,player)
text=Choose one Target player gains X life. Prevent the next X damage that would be dealt to any target this turn. text=Choose one — • Target player gains X life. Prevent the next X damage that would be dealt to any target this turn.
mana={X}{W}{W} mana={X}{W}{W}
type=Instant type=Instant
[/card] [/card]
@@ -2767,12 +2767,12 @@ subtype=Eldrazi
[/card] [/card]
[card] [card]
name=All Suns' Dawn name=All Suns' Dawn
auto=moveto(exile)
auto=ability$!Choice name(Green) target(*[green]|mygraveyard) moveto(myhand)!$ controller auto=ability$!Choice name(Green) target(*[green]|mygraveyard) moveto(myhand)!$ controller
auto=ability$!Choice name(Red) target(*[red]|mygraveyard) moveto(myhand)!$ controller auto=ability$!Choice name(Red) target(*[red]|mygraveyard) moveto(myhand)!$ controller
auto=ability$!Choice name(White) target(*[white]|mygraveyard) moveto(myhand)!$ controller auto=ability$!Choice name(White) target(*[white]|mygraveyard) moveto(myhand)!$ controller
auto=ability$!Choice name(Black) target(*[black]|mygraveyard) moveto(myhand)!$ controller auto=ability$!Choice name(Black) target(*[black]|mygraveyard) moveto(myhand)!$ controller
auto=ability$!Choice name(Blue) target(*[blue]|mygraveyard) moveto(myhand)!$ controller auto=ability$!Choice name(Blue) target(*[blue]|mygraveyard) moveto(myhand)!$ controller
auto=moveto(exile) all(this)
text=For each color, return up to one target card of that color from your graveyard to your hand. Exile All Suns' Dawn. text=For each color, return up to one target card of that color from your graveyard to your hand. Exile All Suns' Dawn.
mana={4}{G} mana={4}{G}
type=Sorcery type=Sorcery
@@ -3671,8 +3671,8 @@ type=Land
name=Ancient Stirrings name=Ancient Stirrings
mana={G} mana={G}
type=Sorcery type=Sorcery
aicode=activate target(*[colorless;zpos<=5]|mylibrary) moveto(myhand) aicode=activate target(*[-white;-blue;-black;-red;-green;zpos<=5]|mylibrary) moveto(myhand)
auto=name(look) reveal:5 optionone name(Get Colorless Card) target(<1>*[colorless]|reveal) moveto(myhand) optiononeend optiontwo name(put on bottom) target(<5>*|reveal) bottomoflibrary optiontwoend revealend auto=name(look) reveal:5 optionone name(Get Colorless Card) target(<upto:1>*[-white;-blue;-black;-red;-green]|reveal) moveto(myhand) optiononeend optiontwo name(put on bottom) target(<5>*|reveal) bottomoflibrary optiontwoend revealend
text=Look at the top five cards of your library. You may reveal a colorless card from among them and put it into your hand. Then put the rest on the bottom of your library in any order. (Cards with no colored mana in their mana costs are colorless. Lands are also colorless.) text=Look at the top five cards of your library. You may reveal a colorless card from among them and put it into your hand. Then put the rest on the bottom of your library in any order. (Cards with no colored mana in their mana costs are colorless. Lands are also colorless.)
[/card] [/card]
[card] [card]
@@ -32739,7 +32739,7 @@ type=Enchantment
[/card] [/card]
[card] [card]
name=Drumhunter name=Drumhunter
auto=@each my end restriction{type(creature[power>=5]|myBattlefield)~morethan~0:may draw:1 controller auto=@each my end restriction{type(creature[power>=5]|myBattlefield)~morethan~0}:may draw:1 controller
auto={T}:Add{1} auto={T}:Add{1}
text=At the beginning of your end step, if you control a creature with power 5 or greater, you may draw a card. -- {T}: Add {1} to your mana pool. text=At the beginning of your end step, if you control a creature with power 5 or greater, you may draw a card. -- {T}: Add {1} to your mana pool.
mana={3}{G} mana={3}{G}
@@ -36546,7 +36546,7 @@ name=Ephara's Enlightenment
target=creature target=creature
auto=counter(1/1,1) auto=counter(1/1,1)
auto=teach(creature) flying auto=teach(creature) flying
auto=@movedto(creature|mybattlefield):may name(return Ephara's Enlightenment) moveto(ownerhand) all(this) auto=@movedto(creature|mybattlefield):may choice moveto(ownerhand) all(this)
text=Enchant creature -- When Ephara's Enlightenment enters the battlefield, put a +1/+1 counter on enchanted creature. -- Enchanted creature has flying. -- Whenever a creature enters the battlefield under your control, you may return Ephara's Enlightenment to its owner's hand. text=Enchant creature -- When Ephara's Enlightenment enters the battlefield, put a +1/+1 counter on enchanted creature. -- Enchanted creature has flying. -- Whenever a creature enters the battlefield under your control, you may return Ephara's Enlightenment to its owner's hand.
mana={1}{W}{U} mana={1}{W}{U}
type=Enchantment type=Enchantment
@@ -37972,16 +37972,16 @@ text=You may play an additional land this turn. -- Draw a card.
mana={1}{G} mana={1}{G}
type=Sorcery type=Sorcery
[/card] [/card]
[card] #[card]
name=Explorer's Scope #name=Explorer's Scope
auto={1}:equip #auto={1}:equip
aicode=activate transforms((,newability[moveto(mybattlefield) and!(tap(noevent))! all(land[zpos=1]|mylibrary)])) ueot #aicode=activate transforms((,newability[moveto(mybattlefield) and!(tap(noevent))! all(land[zpos=1]|mylibrary)])) ueot
auto=@combat(attacking) source(mytgt):reveal:1 optionone target(land|reveal) moveto(mybattlefield) and!(tap(noevent))! optiononeend optiontwo name(Put Back) target(<1>*|reveal) moveto(mylibrary) optiontwoend revealend #auto=@combat(attacking) source(mytgt):reveal:1 optionone target(land|reveal) moveto(mybattlefield) and!(tap(noevent))! optiononeend optiontwo name(Put Back) target(<1>*|reveal) moveto(mylibrary) optiontwoend revealend
text=Whenever equipped creature attacks, look at the top card of your library. If it's a land card, you may put it onto the battlefield tapped. -- Equip {1} ({1}: Attach to target creature you control. Equip only as a sorcery.) #text=Whenever equipped creature attacks, look at the top card of your library. If it's a land card, you may put it onto the battlefield tapped. -- Equip {1} ({1}: Attach to target creature you control. Equip only as a sorcery.)
mana={1} #mana={1}
type=Artifact #type=Artifact
subtype=Equipment #subtype=Equipment
[/card] #[/card]
[card] [card]
name=Explosive Apparatus name=Explosive Apparatus
auto={3}{T}{s}:damage:2 target(other *[creature;player]) auto={3}{T}{s}:damage:2 target(other *[creature;player])
@@ -40015,7 +40015,7 @@ toughness=2
[card] [card]
name=Fertile Ground name=Fertile Ground
target=land target=land
auto=all(this) transforms((,newability[produceextra:selectmana] controller)) forever auto=all(this) transforms((,newability[produceextra:selectmana])) forever
text=Enchant land -- Whenever enchanted land is tapped for mana, its controller adds one mana of any color to his or her mana pool (in addition to the mana the land produces). text=Enchant land -- Whenever enchanted land is tapped for mana, its controller adds one mana of any color to his or her mana pool (in addition to the mana the land produces).
mana={1}{G} mana={1}{G}
type=Enchantment type=Enchantment
@@ -55466,7 +55466,7 @@ mana={X}{G}{G}
type=Creature type=Creature
subtype=Snake Hydra subtype=Snake Hydra
power=0 power=0
toughness=1 toughness=0
[/card] [/card]
[card] [card]
name=Hooded Kavu name=Hooded Kavu
@@ -61275,7 +61275,7 @@ toughness=0
[card] [card]
name=Kaalia of the Vast name=Kaalia of the Vast
abilities=flying abilities=flying
auto=@combat(attacking) source(this):target(creature[angel;demon;dragon]|myhand) ninjutsu auto=@combat(attacking) source(this):target(*[angel;demon;dragon]|myhand) ninjutsu
text=Flying, Whenever Kaalia of the Vast attacks an opponent, you may put an Angel, Demon, or Dragon creature card from your hand onto the battlefield tapped and attacking that opponent. text=Flying, Whenever Kaalia of the Vast attacks an opponent, you may put an Angel, Demon, or Dragon creature card from your hand onto the battlefield tapped and attacking that opponent.
mana={1}{B}{R}{W} mana={1}{B}{R}{W}
type=Legendary Creature type=Legendary Creature
@@ -64893,9 +64893,10 @@ toughness=5
[/card] [/card]
[card] [card]
name=Krosan Verge name=Krosan Verge
auto=tap(noevent) #auto=tap(noevent)
auto={T}:Add{1} auto={T}:Add{1}
auto={2}{T}{S}:name(sacrifice to search) transforms((,newability[ability$! name(search forest) notatarget(forest|mylibrary) moveto(ownerbattlefield) and!(tap(noevent))! !$ controller],newability[ability$! name(search plains) notatarget(plains|mylibrary) moveto(ownerbattlefield) and!(tap(noevent))! !$ controller])) oneshot auto={2}{T}:name(sacrifice to search) transforms((,newability[ability$! notatarget(forest|mylibrary) moveto(ownerbattlefield) and!(tap(noevent))! !$ controller],newability[ability$! notatarget(plains|mylibrary) moveto(ownerbattlefield) and!(tap(noevent))! !$ controller])) oneshot
#auto={2}{T}{S}:name(sacrifice to search) transforms((,newability[ability$! name(search forest) notatarget(forest|mylibrary) moveto(ownerbattlefield) and!(tap(noevent))! !$ controller],newability[ability$! name(search plains) notatarget(plains|mylibrary) moveto(ownerbattlefield) and!(tap(noevent))! !$ controller])) oneshot
text=Krosan Verge enters the battlefield tapped. -- {T}: Add {1} to your mana pool. -- {2}, {T}, Sacrifice Krosan Verge: Search your library for a Forest card and a Plains card and put them onto the battlefield tapped. Then shuffle your library. text=Krosan Verge enters the battlefield tapped. -- {T}: Add {1} to your mana pool. -- {2}, {T}, Sacrifice Krosan Verge: Search your library for a Forest card and a Plains card and put them onto the battlefield tapped. Then shuffle your library.
type=Land type=Land
[/card] [/card]
@@ -67041,7 +67042,7 @@ type=Instant
[/card] [/card]
[card] [card]
name=Lifeforce name=Lifeforce
auto={G}{G}:fizzle target(sorcery|stack) auto={G}{G}:fizzle target(*[black]|stack)
text={G}{G}: Counter target black spell. text={G}{G}: Counter target black spell.
mana={G}{G} mana={G}{G}
type=Enchantment type=Enchantment
@@ -74914,8 +74915,8 @@ toughness=1
name=Mirrorpool name=Mirrorpool
auto={t}:add{c} auto={t}:add{c}
auto=tap(noevent) auto=tap(noevent)
auto=@movedto(*[instant;sorcery]|mystack) restriction{type(Mirrorpool[-tapped]|myBattlefield)~morethan~0}:all(trigger[to]<1>) transforms(( ,newability[pay[[{2}{C}]] name(copy spell) activate name(copy spell) castcard(copied noevent) and!(bury notatarget(mirrorpool|myBattlefield)])! )) forever)! auto={2}{c}{t}{s}:name(copy spell) target(instant,sorcery|mystack) castcard(copied noevent)
auto={4}{c}{t}{s}:name(Clone) clone notatarget(other creature|mybattlefield) auto={4}{c}{t}{s}:name(Clone) clone notatarget(creature|mybattlefield)
text=Mirrorpool enters the battlefield tapped. -- {T}: Add {C} to your mana pool. -- {2}{C}, {T}, Sacrifice Mirrorpool: Copy target instant or sorcery spell you control. You may choose new targets for the copy. -- {4}{C}, {T}, Sacrifice Mirrorpool: Put a token onto the battlefield that's a copy of target creature you control. text=Mirrorpool enters the battlefield tapped. -- {T}: Add {C} to your mana pool. -- {2}{C}, {T}, Sacrifice Mirrorpool: Copy target instant or sorcery spell you control. You may choose new targets for the copy. -- {4}{C}, {T}, Sacrifice Mirrorpool: Put a token onto the battlefield that's a copy of target creature you control.
type=Land type=Land
[/card] [/card]
@@ -75889,7 +75890,7 @@ toughness=*
name=Molten Firebird name=Molten Firebird
abilities=flying abilities=flying
auto={4}{R}:moveTo(exile) auto={4}{R}:moveTo(exile)
autograveyard=@movedTo(this|graveyard) from(battlefield):phaseaction[my endofturn] moveTo(mybattlefield) autograveyard=@movedTo(this|graveyard) from(battlefield):phaseaction[endofturn] moveTo(mybattlefield)
autograveyard=@movedTo(this|graveyard) from(battlefield):nextphasealter(remove,draw,controller) autograveyard=@movedTo(this|graveyard) from(battlefield):nextphasealter(remove,draw,controller)
text=Flying -- When Molten Firebird is put into a graveyard from the battlefield, return it to the battlefield under its owner's control at the beginning of the next end step and you skip your next draw step. -- {4}{R}: Exile Molten Firebird. text=Flying -- When Molten Firebird is put into a graveyard from the battlefield, return it to the battlefield under its owner's control at the beginning of the next end step and you skip your next draw step. -- {4}{R}: Exile Molten Firebird.
mana={4}{R} mana={4}{R}
@@ -79861,26 +79862,26 @@ toughness=7
name=Night Dealings name=Night Dealings
auto=@damagefoeof(player) from(*|mybattlefield,mystack,mygraveyard,mylibrary,myexile):counter(0/0,thatmuch,Theft) auto=@damagefoeof(player) from(*|mybattlefield,mystack,mygraveyard,mylibrary,myexile):counter(0/0,thatmuch,Theft)
auto={2}{B}{B}:name(X = 0) && moveto(myhand) target(*[-land;manacost=0]|mylibrary) auto={2}{B}{B}:name(X = 0) && moveto(myhand) target(*[-land;manacost=0]|mylibrary)
auto=this(counter{0/0.1.Theft}=>) {2}{B}{B}{C(0/0,-1,Theft)}:name(X = 1) && moveTo(myhand) target(*[-land;manacost=1]|mylibrary) auto=this(counter{0/0.1.Theft}>=) {2}{B}{B}{C(0/0,-1,Theft)}:name(X = 1) && moveTo(myhand) target(*[-land;manacost=1]|mylibrary)
auto=this(counter{0/0.2.Theft}=>) {2}{B}{B}{C(0/0,-2,Theft)}:name(X = 2) && moveTo(myhand) target(*[-land;manacost=2]|mylibrary) auto=this(counter{0/0.2.Theft}>=) {2}{B}{B}{C(0/0,-2,Theft)}:name(X = 2) && moveTo(myhand) target(*[-land;manacost=2]|mylibrary)
auto=this(counter{0/0.3.Theft}=>) {2}{B}{B}{C(0/0,-3,Theft)}:name(X = 3) && moveTo(myhand) target(*[-land;manacost=3]|mylibrary) auto=this(counter{0/0.3.Theft}>=) {2}{B}{B}{C(0/0,-3,Theft)}:name(X = 3) && moveTo(myhand) target(*[-land;manacost=3]|mylibrary)
auto=this(counter{0/0.4.Theft}=>) {2}{B}{B}{C(0/0,-4,Theft)}:name(X = 4) && moveTo(myhand) target(*[-land;manacost=4]|mylibrary) auto=this(counter{0/0.4.Theft}>=) {2}{B}{B}{C(0/0,-4,Theft)}:name(X = 4) && moveTo(myhand) target(*[-land;manacost=4]|mylibrary)
auto=this(counter{0/0.5.Theft}=>) {2}{B}{B}{C(0/0,-5,Theft)}:name(X = 5) && moveTo(myhand) target(*[-land;manacost=5]|mylibrary) auto=this(counter{0/0.5.Theft}>=) {2}{B}{B}{C(0/0,-5,Theft)}:name(X = 5) && moveTo(myhand) target(*[-land;manacost=5]|mylibrary)
auto=this(counter{0/0.6.Theft}=>) {2}{B}{B}{C(0/0,-6,Theft)}:name(X = 6) && moveTo(myhand) target(*[-land;manacost=6]|mylibrary) auto=this(counter{0/0.6.Theft}>=) {2}{B}{B}{C(0/0,-6,Theft)}:name(X = 6) && moveTo(myhand) target(*[-land;manacost=6]|mylibrary)
auto=this(counter{0/0.7.Theft}=>) {2}{B}{B}{C(0/0,-7,Theft)}:name(X = 7) && moveTo(myhand) target(*[-land;manacost=7]|mylibrary) auto=this(counter{0/0.7.Theft}>=) {2}{B}{B}{C(0/0,-7,Theft)}:name(X = 7) && moveTo(myhand) target(*[-land;manacost=7]|mylibrary)
auto=this(counter{0/0.8.Theft}=>) {2}{B}{B}{C(0/0,-8,Theft)}:name(X = 8) && moveTo(myhand) target(*[-land;manacost=8]|mylibrary) auto=this(counter{0/0.8.Theft}>=) {2}{B}{B}{C(0/0,-8,Theft)}:name(X = 8) && moveTo(myhand) target(*[-land;manacost=8]|mylibrary)
auto=this(counter{0/0.9.Theft}=>) {2}{B}{B}{C(0/0,-9,Theft)}:name(X = 9) && moveTo(myhand) target(*[-land;manacost=9]|mylibrary) auto=this(counter{0/0.9.Theft}>=) {2}{B}{B}{C(0/0,-9,Theft)}:name(X = 9) && moveTo(myhand) target(*[-land;manacost=9]|mylibrary)
auto=this(counter{0/0.10.Theft}=>) {2}{B}{B}{C(0/0,-10,Theft)}:name(X = 10) && moveTo(myhand) target(*[-land;manacost=10]|mylibrary) auto=this(counter{0/0.10.Theft}>=) {2}{B}{B}{C(0/0,-10,Theft)}:name(X = 10) && moveTo(myhand) target(*[-land;manacost=10]|mylibrary)
auto=this(counter{0/0.11.Theft}=>) {2}{B}{B}{C(0/0,-11,Theft)}:name(X = 11) && moveTo(myhand) target(*[-land;manacost=11]|mylibrary) auto=this(counter{0/0.11.Theft}>=) {2}{B}{B}{C(0/0,-11,Theft)}:name(X = 11) && moveTo(myhand) target(*[-land;manacost=11]|mylibrary)
auto=this(counter{0/0.12.Theft}=>) {2}{B}{B}{C(0/0,-12,Theft)}:name(X = 12) && moveTo(myhand) target(*[-land;manacost=12]|mylibrary) auto=this(counter{0/0.12.Theft}>=) {2}{B}{B}{C(0/0,-12,Theft)}:name(X = 12) && moveTo(myhand) target(*[-land;manacost=12]|mylibrary)
auto=this(counter{0/0.13.Theft}=>) {2}{B}{B}{C(0/0,-13,Theft)}:name(X = 13) && moveTo(myhand) target(*[-land;manacost=13]|mylibrary) auto=this(counter{0/0.13.Theft}>=) {2}{B}{B}{C(0/0,-13,Theft)}:name(X = 13) && moveTo(myhand) target(*[-land;manacost=13]|mylibrary)
auto=this(counter{0/0.14.Theft}=>) {2}{B}{B}{C(0/0,-14,Theft)}:name(X = 14) && moveTo(myhand) target(*[-land;manacost=14]|mylibrary) auto=this(counter{0/0.14.Theft}>=) {2}{B}{B}{C(0/0,-14,Theft)}:name(X = 14) && moveTo(myhand) target(*[-land;manacost=14]|mylibrary)
auto=this(counter{0/0.15.Theft}=>) {2}{B}{B}{C(0/0,-15,Theft)}:name(X = 15) && moveTo(myhand) target(*[-land;manacost=15]|mylibrary) auto=this(counter{0/0.15.Theft}>=) {2}{B}{B}{C(0/0,-15,Theft)}:name(X = 15) && moveTo(myhand) target(*[-land;manacost=15]|mylibrary)
auto=this(counter{0/0.16.Theft}=>) {2}{B}{B}{C(0/0,-16,Theft)}:name(X = 16) && moveTo(myhand) target(*[-land;manacost=16]|mylibrary) auto=this(counter{0/0.16.Theft}>=) {2}{B}{B}{C(0/0,-16,Theft)}:name(X = 16) && moveTo(myhand) target(*[-land;manacost=16]|mylibrary)
auto=this(counter{0/0.17.Theft}=>) {2}{B}{B}{C(0/0,-17,Theft)}:name(X = 17) && moveTo(myhand) target(*[-land;manacost=17]|mylibrary) auto=this(counter{0/0.17.Theft}>=) {2}{B}{B}{C(0/0,-17,Theft)}:name(X = 17) && moveTo(myhand) target(*[-land;manacost=17]|mylibrary)
auto=this(counter{0/0.18.Theft}=>) {2}{B}{B}{C(0/0,-18,Theft)}:name(X = 18) && moveTo(myhand) target(*[-land;manacost=18]|mylibrary) auto=this(counter{0/0.18.Theft}>=) {2}{B}{B}{C(0/0,-18,Theft)}:name(X = 18) && moveTo(myhand) target(*[-land;manacost=18]|mylibrary)
auto=this(counter{0/0.19.Theft}=>) {2}{B}{B}{C(0/0,-19,Theft)}:name(X = 19) && moveTo(myhand) target(*[-land;manacost=19]|mylibrary) auto=this(counter{0/0.19.Theft}>=) {2}{B}{B}{C(0/0,-19,Theft)}:name(X = 19) && moveTo(myhand) target(*[-land;manacost=19]|mylibrary)
auto=this(counter{0/0.20.Theft}=>) {2}{B}{B}{C(0/0,-20,Theft)}:name(X = 20) && moveTo(myhand) target(*[-land;manacost=20]|mylibrary) auto=this(counter{0/0.20.Theft}>=) {2}{B}{B}{C(0/0,-20,Theft)}:name(X = 20) && moveTo(myhand) target(*[-land;manacost=20]|mylibrary)
text=Whenever a source you control deals damage to another player, put that many theft counters on Night Dealings. -- {2}{B}{B}, Remove X theft counters from Night Dealings: Search your library for a nonland card with converted mana cost X, reveal it, and put it into your hand. Then shuffle your library. text=Whenever a source you control deals damage to another player, put that many theft counters on Night Dealings. -- {2}{B}{B}, Remove X theft counters from Night Dealings: Search your library for a nonland card with converted mana cost X, reveal it, and put it into your hand. Then shuffle your library.
mana={2}{B}{B} mana={2}{B}{B}
type=Enchantment type=Enchantment
@@ -88007,7 +88008,7 @@ name=Ponyback Brigade
auto=token(Goblin,Creature Goblin,1/1,red) *3 auto=token(Goblin,Creature Goblin,1/1,red) *3
facedown={3} facedown={3}
autofacedown={2}{R}{W}{B}:morph autofacedown={2}{R}{W}{B}:morph
autofaceup=token(Goblin,Creature Goblin,1/1, haste, red) *3 autofaceup=token(Goblin,Creature Goblin,1/1,red) *3
text=When Ponyback Brigade enters the battlefield or is turned face up, put three 1/1 red Goblin creature tokens onto the battlefield. -- Morph {2}{R}{W}{B}: (You may cast this face down as a 2/2 creature for {3}. Turn it face up any time for its morph cost.) text=When Ponyback Brigade enters the battlefield or is turned face up, put three 1/1 red Goblin creature tokens onto the battlefield. -- Morph {2}{R}{W}{B}: (You may cast this face down as a 2/2 creature for {3}. Turn it face up any time for its morph cost.)
mana={3}{R}{W}{B} mana={3}{R}{W}{B}
type=Creature type=Creature
@@ -93612,8 +93613,9 @@ subtype=Aura
[/card] [/card]
[card] [card]
name=Red Sun's Zenith name=Red Sun's Zenith
auto=choice name(Target creature) exiledeath && damage:X target(creature) target=creature,player
auto=choice name(Target player) damage:X target(player) auto=exiledeath
auto=damage:X
alias=135262 alias=135262
text=Red Sun's Zenith deals X damage to target creature or player. If a creature dealt damage this way would die this turn, exile it instead. Shuffle Red Sun's Zenith into its owner's library. text=Red Sun's Zenith deals X damage to target creature or player. If a creature dealt damage this way would die this turn, exile it instead. Shuffle Red Sun's Zenith into its owner's library.
mana={X}{R} mana={X}{R}
@@ -102200,7 +102202,6 @@ text=When Seismic Elemental enters the battlefield, creatures without flying can
mana={3}{R}{R} mana={3}{R}{R}
type=Creature type=Creature
subtype=Elemental subtype=Elemental
subtype=Elemental
power=4 power=4
toughness=4 toughness=4
[/card] [/card]
@@ -119766,8 +119767,8 @@ toughness=1
name=Tetravus name=Tetravus
abilities=flying abilities=flying
auto=counter(1/1,3) auto=counter(1/1,3)
auto={c(1/1,-1)}:token(Tetravite) myupkeeponly auto={c(1/1,-1)}:token(Tetravite) myupkeeponly limit:9
auto={e(Tetravite|myBattlefield)}:counter(1/1,1) myupkeeponly auto={e(Tetravite|myBattlefield)}:counter(1/1,1) myupkeeponly limit:9
text=Flying -- Tetravus enters the battlefield with three +1/+1 counters on it. -- At the beginning of your upkeep, you may remove any number of +1/+1 counters from Tetravus. If you do, put that many 1/1 colorless Tetravite artifact creature tokens onto the battlefield. They each have flying and "This creature can't be enchanted." -- At the beginning of your upkeep, you may exile any number of tokens put onto the battlefield with Tetravus. If you do, put that many +1/+1 counters on Tetravus. text=Flying -- Tetravus enters the battlefield with three +1/+1 counters on it. -- At the beginning of your upkeep, you may remove any number of +1/+1 counters from Tetravus. If you do, put that many 1/1 colorless Tetravite artifact creature tokens onto the battlefield. They each have flying and "This creature can't be enchanted." -- At the beginning of your upkeep, you may exile any number of tokens put onto the battlefield with Tetravus. If you do, put that many +1/+1 counters on Tetravus.
mana={6} mana={6}
type=Artifact Creature type=Artifact Creature
@@ -119847,8 +119848,8 @@ name=Tezzeret, Agent of Bolas
auto=counter(0/0,3,loyalty) auto=counter(0/0,3,loyalty)
aicode=activate target(artifact[zpos<=5]|mylibrary) moveto(myhand) aicode=activate target(artifact[zpos<=5]|mylibrary) moveto(myhand)
auto={C(0/0,1,Loyalty)}:reveal:5 optionone name(Get artifact) target(<upto:1>artifact|reveal) moveto(myhand) optiononeend optiontwo name(put on bottom) target(<5>*|reveal) bottomoflibrary optiontwoend revealend auto={C(0/0,1,Loyalty)}:reveal:5 optionone name(Get artifact) target(<upto:1>artifact|reveal) moveto(myhand) optiononeend optiontwo name(put on bottom) target(<5>*|reveal) bottomoflibrary optiontwoend revealend
auto={C(0/0,-1,Loyalty)}:name(Create Construct) target(artifact) transforms((Construct Artifact Creature,setpower=5,settoughness=5)) auto={C(0/0,-1,Loyalty)}:name(Create Construct) target(artifact) transforms((Construct Artifact Creature,setpower=5,settoughness=5)) forever
auto={C(0/0,-4,Loyalty)}:target(player) life:-twicetype:artifact:mybattlefield && life:twicetype:artifact:mybattlefield controller auto={C(0/0,-4,Loyalty)}:target(player) life:-twicetype:artifact:mybattlefield && life:twicetype:artifact:mybattlefield controller
text=+1: Look at the top five cards of your library. You may reveal an artifact card from among them and put it into your hand. Put the rest on the bottom of your library in any order. -- -1: Target artifact becomes a 5/5 artifact creature. -- -4: Target player loses X life and you gain X life, where X is twice the number of artifacts you control. text=+1: Look at the top five cards of your library. You may reveal an artifact card from among them and put it into your hand. Put the rest on the bottom of your library in any order. -- -1: Target artifact becomes a 5/5 artifact creature. -- -4: Target player loses X life and you gain X life, where X is twice the number of artifacts you control.
mana={2}{U}{B} mana={2}{U}{B}
type=Legendary Planeswalker type=Legendary Planeswalker
@@ -120131,7 +120132,7 @@ name=Thassa's Emissary
auto=bestow bstw auto=bestow bstw
auto=bestow teach(creature) +3/+3 auto=bestow teach(creature) +3/+3
auto=bestow transforms((,newability[@combatdamagefoeof(player) from(this):draw:1])) forever auto=bestow transforms((,newability[@combatdamagefoeof(player) from(this):draw:1])) forever
auto=@combatdamagefoeof(player) from(this):target(creature|opponentbattlefield) draw:1 auto=@combatdamagefoeof(player) from(this):draw:1
bestow={5}{u} bestow={5}{u}
text=Bestow {5}{U} (If you cast this card for its bestow cost, it's an Aura spell with enchant creature. It becomes a creature again if it's not attached to a creature.) -- Whenever Thassa's Emissary or enchanted creature deals combat damage to a player, draw a card. -- Enchanted creature gets +3/+3. text=Bestow {5}{U} (If you cast this card for its bestow cost, it's an Aura spell with enchant creature. It becomes a creature again if it's not attached to a creature.) -- Whenever Thassa's Emissary or enchanted creature deals combat damage to a player, draw a card. -- Enchanted creature gets +3/+3.
mana={3}{U} mana={3}{U}
@@ -121431,7 +121432,7 @@ type=Artifact
[/card] [/card]
[card] [card]
name=Throne of Geth name=Throne of Geth
auto={S(artifact|mybattlefield)}{T}:notatarget(<anyamount>*[artifact;creature;enchantment;land;planeswalker;player]) proliferate auto={S(artifact|mybattlefield)}{T}:_PROLIFERATE_
text={T},Sacrifice an artifact: Proliferate. text={T},Sacrifice an artifact: Proliferate.
mana={2} mana={2}
type=Artifact type=Artifact
+1
View File
@@ -18,6 +18,7 @@ typedef enum
GAME_TYPE_RANDOM3, GAME_TYPE_RANDOM3,
GAME_TYPE_RANDOM5, GAME_TYPE_RANDOM5,
GAME_TYPE_HORDE, GAME_TYPE_HORDE,
GAME_TYPE_SET_LIMITED,
GAME_TYPE_STORY, GAME_TYPE_STORY,
GAME_TYPE_DEMO, GAME_TYPE_DEMO,
GAME_TYPE_STONEHEWER, GAME_TYPE_STONEHEWER,
+1
View File
@@ -45,6 +45,7 @@ protected:
Player * loadPlayerRandomThree(GameObserver* observer, int isAI); Player * loadPlayerRandomThree(GameObserver* observer, int isAI);
Player * loadPlayerRandomFive(GameObserver* observer, int isAI); Player * loadPlayerRandomFive(GameObserver* observer, int isAI);
Player * loadPlayerHorde(GameObserver* observer, int isAI); Player * loadPlayerHorde(GameObserver* observer, int isAI);
Player * loadRandomSetLimited(GameObserver* observer, int isAI);
Player * initPlayer(GameObserver *observer, int playerId); Player * initPlayer(GameObserver *observer, int playerId);
MTGDeck * buildDeck(int playerId); MTGDeck * buildDeck(int playerId);
GameType strToGameMode(string s); GameType strToGameMode(string s);
+19 -24
View File
@@ -50,11 +50,12 @@ int OrderedAIAction::getEfficiency(AADamager * aad)
if(p == target->controller()) if(p == target->controller())
return 0; return 0;
if (dTarget && aad && (aad->getDamage() >= dTarget->toughness)) if (dTarget && aad && (aad->getDamage() == dTarget->toughness))
return 100; return 100;
else if (dTarget && aad && (aad->getDamage() > dTarget->toughness))
if (dTarget && dTarget->toughness) return 10 * (10 - (aad->getDamage() - dTarget->toughness)); //less eff the more dmg above toughness
return (10 * aad->getDamage()) / dTarget->toughness; // Don't waste damage spells else
return 10;
return 0; return 0;
} }
@@ -131,10 +132,6 @@ int OrderedAIAction::getEfficiency()
efficiency = 95; efficiency = 95;
} }
//TODO If the card is the target of a damage spell //TODO If the card is the target of a damage spell
if (!coreAbilityCardTarget->regenerateTokens && (MTGCardInstance*)target == a->source)
{
efficiency = 95;
}
break; break;
} }
case MTGAbility::STANDARD_PREVENT: case MTGAbility::STANDARD_PREVENT:
@@ -285,6 +282,10 @@ int OrderedAIAction::getEfficiency()
coreAbilityCardTarget = a->source->target; //TODO use intermediate value? coreAbilityCardTarget = a->source->target; //TODO use intermediate value?
target = a->source; target = a->source;
} }
else //if(how to know cards like Basking Rootwalla that pump themselves)
{
target = a->source;
}
if (!target && !dynamic_cast<ALord*> (a)) if (!target && !dynamic_cast<ALord*> (a))
break; break;
if(dynamic_cast<ALord*> (a) && !target) if(dynamic_cast<ALord*> (a) && !target)
@@ -296,9 +297,9 @@ int OrderedAIAction::getEfficiency()
int suggestion = af.abilityEfficiency(a, p, MODE_ABILITY); int suggestion = af.abilityEfficiency(a, p, MODE_ABILITY);
//i do not set a starting eff. on this ability, this allows Ai to sometimes randomly do it as it normally does. //i do not set a starting eff. on this ability, this allows Ai to sometimes randomly do it as it normally does.
int currentPhase = g->getCurrentGamePhase(); int currentPhase = g->getCurrentGamePhase();
if (suggestion == BAKA_EFFECT_GOOD && target->controller() == p) if ((currentPhase == MTG_PHASE_COMBATBLOCKERS) || (currentPhase == MTG_PHASE_COMBATATTACKERS))
{ {
if ((currentPhase == MTG_PHASE_COMBATBLOCKERS) || (currentPhase == MTG_PHASE_COMBATATTACKERS)) if (suggestion == BAKA_EFFECT_GOOD && target->controller() == p)
{ {
if(coreAbilityCardTarget->defenser || coreAbilityCardTarget->blockers.size()) if(coreAbilityCardTarget->defenser || coreAbilityCardTarget->blockers.size())
{ {
@@ -316,14 +317,10 @@ int OrderedAIAction::getEfficiency()
{ {
//this means im heading directly for the player, pump this creature as much as possible. //this means im heading directly for the player, pump this creature as much as possible.
efficiency = 100; efficiency = 100;
if(coreAbilityCardTarget->power > 50) if(coreAbilityCardTarget->power > 20) // to be realistic
efficiency -= coreAbilityCardTarget->power;//we don't need to go overboard. better to not put all your eggs in a single basket. efficiency -= coreAbilityCardTarget->power;//we don't need to go overboard. better to not put all your eggs in a single basket.
} }
} }
if (currentPhase == MTG_PHASE_FIRSTMAIN)
{
efficiency = 10;
}
} }
if (suggestion == BAKA_EFFECT_BAD && target->controller() != p && target->toughness > 0) if (suggestion == BAKA_EFFECT_BAD && target->controller() != p && target->toughness > 0)
{ {
@@ -672,7 +669,7 @@ int OrderedAIAction::getEfficiency()
{ {
AIPlayer * chk = (AIPlayer*)p; AIPlayer * chk = (AIPlayer*)p;
if(may->ability && may->ability->getActionTc() && chk->chooseTarget(may->ability->getActionTc(),NULL,NULL,true)) if(may->ability && may->ability->getActionTc() && chk->chooseTarget(may->ability->getActionTc(),NULL,NULL,true))
efficiency = 80 + (owner->getRandomGenerator()->random() % 50); efficiency = 50 + (owner->getRandomGenerator()->random() % 50);
} }
if (p->game->hand->nb_cards == 0) if (p->game->hand->nb_cards == 0)
efficiency = (int) ((float) efficiency * 1.3); //increase chance of using ability if hand is empty efficiency = (int) ((float) efficiency * 1.3); //increase chance of using ability if hand is empty
@@ -685,8 +682,11 @@ int OrderedAIAction::getEfficiency()
for(unsigned int i = 0; i < ec->costs.size();i++) for(unsigned int i = 0; i < ec->costs.size();i++)
{ {
ExtraCost * tapper = dynamic_cast<TapCost*>(ec->costs[i]); ExtraCost * tapper = dynamic_cast<TapCost*>(ec->costs[i]);
ExtraCost * sacrifice = dynamic_cast<SacrificeCost*>(ec->costs[i]);
if(tapper) if(tapper)
continue; continue;
else if(sacrifice)
efficiency = efficiency / 3;
else else
efficiency = efficiency / 2; efficiency = efficiency / 2;
} }
@@ -699,7 +699,7 @@ int OrderedAIAction::getEfficiency()
} }
else if (dynamic_cast<MTGAlternativeCostRule *>(a)) else if (dynamic_cast<MTGAlternativeCostRule *>(a))
{ {
efficiency += 65; efficiency += 55;
} }
else if (dynamic_cast<MTGSuspendRule *>(a)) else if (dynamic_cast<MTGSuspendRule *>(a))
{ {
@@ -707,15 +707,10 @@ int OrderedAIAction::getEfficiency()
} }
if (ability->source) if (ability->source)
{
if(ability->source->hasType(Subtypes::TYPE_PLANESWALKER)) if(ability->source->hasType(Subtypes::TYPE_PLANESWALKER))
efficiency += 40; efficiency += 40;
else if(ability->source->hasType(Subtypes::TYPE_LAND)) }
{ // probably a shockland, don't pay life if hand is empty
if (p->game->hand->nb_cards == 0 || p->life<=2)
// check that's not a manland(like Celestial Colonnade)
if(efficiency < 50)
efficiency = 0;
}
SAFE_DELETE(transAbility); SAFE_DELETE(transAbility);
return efficiency; return efficiency;
+1 -1
View File
@@ -772,7 +772,7 @@ void GameStateDuel::Update(float dt)
= "ai_baka_music_random.mp3"; = "ai_baka_music_random.mp3";
else if (mParent->gameType == GAME_TYPE_RANDOM3 || mParent->gameType == GAME_TYPE_RANDOM5) musictrack else if (mParent->gameType == GAME_TYPE_RANDOM3 || mParent->gameType == GAME_TYPE_RANDOM5) musictrack
= "ai_baka_music_random.mp3"; = "ai_baka_music_random.mp3";
else if (mParent->gameType == GAME_TYPE_HORDE) musictrack else if (mParent->gameType == GAME_TYPE_HORDE || mParent->gameType == GAME_TYPE_SET_LIMITED) musictrack
= "ai_baka_music_momir.mp3"; = "ai_baka_music_momir.mp3";
if (!MusicExist(musictrack)) if (!MusicExist(musictrack))
musictrack = "ai_baka_music.mp3"; musictrack = "ai_baka_music.mp3";
+2 -2
View File
@@ -4572,12 +4572,12 @@ int AbilityFactory::abilityEfficiency(MTGAbility * a, Player * p, int mode, Targ
if (AAMover * aam = dynamic_cast<AAMover *>(a)) if (AAMover * aam = dynamic_cast<AAMover *>(a))
{ {
MTGGameZone * z = aam->destinationZone(target); MTGGameZone * z = aam->destinationZone(target);
if (tc && tc->targetsZone(p->game->library)||tc && tc->targetsZone(p->game->graveyard)) if (tc && tc->targetsZone(p->game->library) || tc && tc->targetsZone(p->game->graveyard) || tc && tc->targetsZone(p->game->hand))
{ {
if (z == p->game->hand || z == p->game->inPlay) if (z == p->game->hand || z == p->game->inPlay)
return BAKA_EFFECT_GOOD; return BAKA_EFFECT_GOOD;
} }
return BAKA_EFFECT_DONTKNOW; //TODO return BAKA_EFFECT_BAD; //TODO
} }
if (dynamic_cast<AACopier *> (a)) if (dynamic_cast<AACopier *> (a))
+4 -4
View File
@@ -1355,16 +1355,16 @@ int MTGCardInstance::DangerRanking()
} }
// Even at 60(danger=3) the AI is hasty to play removal on a simple creature // Even at 60(danger=3) the AI is hasty to play removal on a simple creature
// a vanilla 2 mana, 2/2 used to be eff = 60 // a vanilla 2 mana, 2/2 used to be eff = 60
if (result > 2)
danger += 1;
if (result > 4) if (result > 4)
danger += 1; danger += 1;
if (result > 6) if (result > 6)
danger += 1; danger += 1;
if (result > 8)
danger += 1;
if (result > 10) if (result > 10)
danger += 1; danger += 1;
if (result > 12)
danger += 1;
if (result > 14)
danger += 1;
return danger; return danger;
} }
+59 -30
View File
@@ -170,7 +170,7 @@ void Rules::addExtraRules(GameObserver* g)
difficultyRating = 0; difficultyRating = 0;
else if(g->mRules->gamemode == GAME_TYPE_RANDOM3 || g->mRules->gamemode == GAME_TYPE_RANDOM5) else if(g->mRules->gamemode == GAME_TYPE_RANDOM3 || g->mRules->gamemode == GAME_TYPE_RANDOM5)
difficultyRating = 0; difficultyRating = 0;
else if(g->mRules->gamemode == GAME_TYPE_HORDE) else if(g->mRules->gamemode == GAME_TYPE_HORDE || g->mRules->gamemode == GAME_TYPE_SET_LIMITED)
difficultyRating = 0; difficultyRating = 0;
else if (g->mRules->gamemode == GAME_TYPE_STORY) else if (g->mRules->gamemode == GAME_TYPE_STORY)
difficultyRating = 0; difficultyRating = 0;
@@ -311,6 +311,50 @@ Player * Rules::loadPlayerRandom(GameObserver* observer, int isAI, int mode)
return player; return player;
} }
Player * Rules::loadRandomSetLimited(GameObserver* observer, int isAI)
{
//Random sets
int setId[] = { observer->getRandomGenerator()->random() % setlist.size(), observer->getRandomGenerator()->random() % setlist.size() };
int nbSet = sizeof(setId)/sizeof(setId[0]);
int color1 = 1 + observer->getRandomGenerator()->random() % 5;
int color2 = 1 + observer->getRandomGenerator()->random() % 5;
int colors[] = { color1, color2 };
int nbcolors = 2;
string lands[] = { "", "forest", "island", "mountain", "swamp", "plains" };
MTGDeck * tempDeck = NEW MTGDeck(MTGCollection());
// Try to add basic lands from that set
tempDeck->addRandomCards(8, setId, nbSet, -1, lands[color1].c_str());
tempDeck->addRandomCards(8, setId, nbSet, -1, lands[color2].c_str());
tempDeck->addRandomCards(2, setId, nbSet, -1, "land");
// If lands < 18 add from any set
int missingLands = 18 - tempDeck->totalCards();
if (missingLands > 0)
{
tempDeck->addRandomCards(missingLands/2, 0, 0, -1, lands[color1].c_str());
tempDeck->addRandomCards(missingLands/2, 0, 0, -1, lands[color2].c_str());
}
// Lone artifact and creatures.
tempDeck->addRandomCards(1, setId, nbSet, -1, "artifact");
tempDeck->addRandomCards(12, setId, nbSet, -1, "creature", colors, nbcolors);
// Want the deck to be 40 cards, take any card from the set in the colors
int missingCards = 40 - tempDeck->totalCards();
if (missingCards > 0)
tempDeck->addRandomCards(missingCards, setId, nbSet, -1, "", colors, nbcolors);
string deckFile = "random";
string deckFileSmall = "random";
Player *player = NULL;
if (!isAI) // Human Player
player = NEW HumanPlayer(observer, deckFile, deckFileSmall, false, tempDeck);
else
player = NEW AIPlayerBaka(observer, deckFile, deckFileSmall, "", tempDeck);
return player;
}
Player * Rules::loadPlayerRandomThree(GameObserver* observer, int isAI) Player * Rules::loadPlayerRandomThree(GameObserver* observer, int isAI)
{ {
int color1 = 1 + observer->getRandomGenerator()->random() % 5; int color1 = 1 + observer->getRandomGenerator()->random() % 5;
@@ -357,27 +401,10 @@ Player * Rules::loadPlayerRandomThree(GameObserver* observer, int isAI)
Player * Rules::loadPlayerRandomFive(GameObserver* observer, int isAI) Player * Rules::loadPlayerRandomFive(GameObserver* observer, int isAI)
{ {
MTGDeck * tempDeck = NEW MTGDeck(MTGCollection()); MTGDeck * tempDeck = NEW MTGDeck(MTGCollection());
tempDeck->addRandomCards(1, 0, 0, -1, "plains");
tempDeck->addRandomCards(1, 0, 0, -1, "island"); tempDeck->addRandomCards(20, 0, 0, -1, "land");
tempDeck->addRandomCards(1, 0, 0, -1, "swamp"); tempDeck->addRandomCards(20, 0, 0, -1, "creature");
tempDeck->addRandomCards(1, 0, 0, -1, "mountain"); tempDeck->addRandomCards(20, 0, 0, -1, "");
tempDeck->addRandomCards(1, 0, 0, -1, "forest");
tempDeck->addRandomCards(3, 0, 0, 'R', "plains");
tempDeck->addRandomCards(3, 0, 0, 'R', "island");
tempDeck->addRandomCards(3, 0, 0, 'R', "swamp");
tempDeck->addRandomCards(3, 0, 0, 'R', "mountain");
tempDeck->addRandomCards(3, 0, 0, 'R', "forest");
tempDeck->addRandomCards(4, 0, 0, -1, "land");
tempDeck->addRandomCards(1, 0, 0, 'U', "land");
tempDeck->addRandomCards(1, 0, 0, 'R', "land");
tempDeck->addRandomCards(18, 0, 0, -1, "creature");
tempDeck->addRandomCards(1, 0, 0, 'R', "creature");
tempDeck->addRandomCards(1, 0, 0, 'M', "creature");
tempDeck->addRandomCards(3, 0, 0, -1, "sorcery");
tempDeck->addRandomCards(3, 0, 0, -1, "enchantment");
tempDeck->addRandomCards(3, 0, 0, -1, "instant");
tempDeck->addRandomCards(4, 0, 0, -1, "artifact");
tempDeck->addRandomCards(1, 0, 0, -1, "planeswalker");
string deckFile = "random"; string deckFile = "random";
string deckFileSmall = "random"; string deckFileSmall = "random";
@@ -399,14 +426,13 @@ Player * Rules::loadPlayerHorde(GameObserver* observer, int isAI)
string lands[] = { "land", "forest", "island", "mountain", "swamp", "plains" }; string lands[] = { "land", "forest", "island", "mountain", "swamp", "plains" };
const char* const multicolorTribes[] = { "Ally", "Atog", "Eldrazi", "Elemental", "Human", "Knight", const char* const multicolorTribes[] = { "Ally", "Atog", "Eldrazi", "Elemental", "Golem", "Hound", "Human", "Knight",
"Myr", "Samurai", "Shaman", "Shapeshifter", "Sliver", "Soldier", "Spellshaper" }; "Myr", "Samurai", "Shaman", "Shapeshifter", "Sliver", "Soldier", "Spellshaper", "Spirit", "Warrior" };
const char* const whiteTribes[] = { "Angel","Cat", "Griffin", "Kithkin", "Knight", "Pegasus", "Soldier" }; const char* const whiteTribes[] = { "Angel", "Bird", "Cat", "cleric", "Griffin", "Kithkin", "Knight", "Soldier", "Spirit" };
const char* const blueTribes[] = { "Artificer", "Merfolk", "Drake", "Faerie", "Illusion", "Vedalken" }; const char* const blueTribes[] = { "Artificer", "Bird", "Drake", "Faerie", "Illusion", "Merfolk", "Spirit", "Vedalken", "Zombie" };
const char* const blackTribes[] = { "Demon", "Faerie", "Horror", "Pirate", "Rat", "Shade", "Skeleton", "Vampire", "Zombie" }; const char* const blackTribes[] = { "Cleric", "Demon", "Faerie", "Horror", "Pirate", "Rat", "Rogue", "Shade", "Skeleton", "Vampire", "Zombie" };
const char* const redTribes[] = { "Barbarian", "Berserker","Cat", "Devil", "Goblin", "Minotaur", "Werewolf" }; const char* const redTribes[] = { "Barbarian", "Berserker"," Cat", "Devil", "Goblin", "Minotaur", "Ogre", "Werewolf" };
const char* const greenTribes[] = { "Beast", "Cat", "Centaur", "Dinosaur", "Druid", "Elf", "Fungus", const char* const greenTribes[] = { "Beast", "Cat", "Centaur", "Dinosaur", "Druid", "Elf", "Fungus", "Snake", "Spider", "Treefolk", "Werewolf" };
"Saproling", "Spider", "Treefolk", "Werewolf" };
int multicolorTribesSize = sizeof(multicolorTribes)/sizeof(multicolorTribes[0]); int multicolorTribesSize = sizeof(multicolorTribes)/sizeof(multicolorTribes[0]);
int whiteTribesSize = sizeof(whiteTribes)/sizeof(whiteTribes[0]); int whiteTribesSize = sizeof(whiteTribes)/sizeof(whiteTribes[0]);
@@ -482,6 +508,8 @@ Player * Rules::initPlayer(GameObserver *g, int playerId)
return loadPlayerRandomFive(g, isAI); return loadPlayerRandomFive(g, isAI);
case GAME_TYPE_HORDE: case GAME_TYPE_HORDE:
return loadPlayerHorde(g, isAI); return loadPlayerHorde(g, isAI);
case GAME_TYPE_SET_LIMITED:
return loadRandomSetLimited(g, isAI);
default: default:
return NULL; return NULL;
} }
@@ -790,6 +818,7 @@ GameType Rules::strToGameMode(string s)
if (s.compare("random3") == 0) return GAME_TYPE_RANDOM3; if (s.compare("random3") == 0) return GAME_TYPE_RANDOM3;
if (s.compare("random5") == 0) return GAME_TYPE_RANDOM5; if (s.compare("random5") == 0) return GAME_TYPE_RANDOM5;
if (s.compare("horde") == 0) return GAME_TYPE_HORDE; if (s.compare("horde") == 0) return GAME_TYPE_HORDE;
if (s.compare("set_limited") == 0) return GAME_TYPE_SET_LIMITED;
if (s.compare("story") == 0) return GAME_TYPE_STORY; if (s.compare("story") == 0) return GAME_TYPE_STORY;
if (s.compare("stonehewer") == 0) return GAME_TYPE_STONEHEWER; if (s.compare("stonehewer") == 0) return GAME_TYPE_STONEHEWER;
if (s.compare("hermit") == 0) return GAME_TYPE_HERMIT; if (s.compare("hermit") == 0) return GAME_TYPE_HERMIT;