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:
@@ -96,7 +96,8 @@ hgeParticleSystem::hgeParticleSystem(hgeParticleSystemInfo *psi)
|
||||
{
|
||||
//hge=hgeCreate(HGE_VERSION);
|
||||
|
||||
memcpy(&info, psi, sizeof(hgeParticleSystemInfo));
|
||||
if (psi)
|
||||
memcpy(&info, psi, sizeof(hgeParticleSystemInfo));
|
||||
|
||||
vecLocation.x=vecPrevLocation.x=0.0f;
|
||||
vecLocation.y=vecPrevLocation.y=0.0f;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -792,7 +792,7 @@ rarity=M
|
||||
[card]
|
||||
primitive=Winged Temple of Orazca
|
||||
id=439816
|
||||
rarity=R
|
||||
rarity=T
|
||||
[/card]
|
||||
[card]
|
||||
primitive=Hadana's Climb
|
||||
@@ -807,7 +807,7 @@ rarity=M
|
||||
[card]
|
||||
primitive=Atzal, Cave of Eternity
|
||||
id=439819
|
||||
rarity=R
|
||||
rarity=T
|
||||
[/card]
|
||||
[card]
|
||||
primitive=Journey to Eternity
|
||||
@@ -837,7 +837,7 @@ rarity=U
|
||||
[card]
|
||||
primitive=Metzali, Tower of Triumph
|
||||
id=439825
|
||||
rarity=R
|
||||
rarity=T
|
||||
[/card]
|
||||
[card]
|
||||
primitive=Path of Mettle
|
||||
@@ -847,7 +847,7 @@ rarity=R
|
||||
[card]
|
||||
primitive=Tomb of the Dusk Rose
|
||||
id=439827
|
||||
rarity=R
|
||||
rarity=T
|
||||
[/card]
|
||||
[card]
|
||||
primitive=Profane Procession
|
||||
@@ -887,7 +887,7 @@ rarity=U
|
||||
[card]
|
||||
primitive=Vault of Catlacan
|
||||
id=439835
|
||||
rarity=R
|
||||
rarity=T
|
||||
[/card]
|
||||
[card]
|
||||
primitive=Storm the Vault
|
||||
@@ -907,7 +907,7 @@ rarity=R
|
||||
[card]
|
||||
primitive=Sanctum of the Sun
|
||||
id=439839
|
||||
rarity=M
|
||||
rarity=T
|
||||
[/card]
|
||||
[card]
|
||||
primitive=Azor's Gateway
|
||||
@@ -927,7 +927,7 @@ rarity=C
|
||||
[card]
|
||||
primitive=Gold-Forge Garrison
|
||||
id=439843
|
||||
rarity=R
|
||||
rarity=T
|
||||
[/card]
|
||||
[card]
|
||||
primitive=Golden Guardian
|
||||
|
||||
@@ -4,7 +4,6 @@ name=Ixalan
|
||||
year=2017
|
||||
block=Ixalan
|
||||
[/meta]
|
||||
|
||||
[card]
|
||||
primitive=Adanto Vanguard
|
||||
id=435152
|
||||
@@ -118,7 +117,7 @@ rarity=R
|
||||
[card]
|
||||
primitive=Adanto, the First Fort
|
||||
id=435174
|
||||
rarity=R
|
||||
rarity=T
|
||||
[/card]
|
||||
[card]
|
||||
primitive=Looming Altisaur
|
||||
@@ -383,7 +382,7 @@ rarity=R
|
||||
[card]
|
||||
primitive=Azcanta, the Sunken Ruin
|
||||
id=435227
|
||||
rarity=R
|
||||
rarity=T
|
||||
[/card]
|
||||
[card]
|
||||
primitive=Shaper Apprentice
|
||||
@@ -468,7 +467,7 @@ rarity=R
|
||||
[card]
|
||||
primitive=Temple of Aclazotz
|
||||
id=435244
|
||||
rarity=R
|
||||
rarity=T
|
||||
[/card]
|
||||
[card]
|
||||
primitive=Bishop of the Bloodstained
|
||||
@@ -888,7 +887,7 @@ rarity=R
|
||||
[card]
|
||||
primitive=Spitfire Bastion
|
||||
id=435328
|
||||
rarity=R
|
||||
rarity=T
|
||||
[/card]
|
||||
[card]
|
||||
primitive=Wily Goblin
|
||||
@@ -983,7 +982,7 @@ rarity=R
|
||||
[card]
|
||||
primitive=Itlimoc, Cradle of the Sun
|
||||
id=435347
|
||||
rarity=R
|
||||
rarity=T
|
||||
[/card]
|
||||
[card]
|
||||
primitive=Ixalli's Diviner
|
||||
@@ -1203,7 +1202,7 @@ rarity=R
|
||||
[card]
|
||||
primitive=Conqueror's Foothold
|
||||
id=435391
|
||||
rarity=R
|
||||
rarity=T
|
||||
[/card]
|
||||
[card]
|
||||
primitive=Dowsing Dagger
|
||||
@@ -1213,7 +1212,7 @@ rarity=R
|
||||
[card]
|
||||
primitive=Lost Vale
|
||||
id=435393
|
||||
rarity=R
|
||||
rarity=T
|
||||
[/card]
|
||||
[card]
|
||||
primitive=Dusk Legion Dreadnought
|
||||
@@ -1258,7 +1257,7 @@ rarity=R
|
||||
[card]
|
||||
primitive=Primal Wellspring
|
||||
id=435402
|
||||
rarity=R
|
||||
rarity=T
|
||||
[/card]
|
||||
[card]
|
||||
primitive=Prying Blade
|
||||
@@ -1293,7 +1292,7 @@ rarity=R
|
||||
[card]
|
||||
primitive=Spires of Orazca
|
||||
id=435409
|
||||
rarity=R
|
||||
rarity=T
|
||||
[/card]
|
||||
[card]
|
||||
primitive=Treasure Map
|
||||
@@ -1303,7 +1302,7 @@ rarity=R
|
||||
[card]
|
||||
primitive=Treasure Cove
|
||||
id=435411
|
||||
rarity=R
|
||||
rarity=T
|
||||
[/card]
|
||||
[card]
|
||||
primitive=Vanquisher's Banner
|
||||
|
||||
@@ -15,11 +15,23 @@
|
||||
# Fabricate
|
||||
#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
|
||||
#AUTO_DEFINE _SCRY_($c) scry:$c scrycore delayed dontshow donothing scrycoreend scryend
|
||||
|
||||
# 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))!
|
||||
|
||||
# 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
|
||||
#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]
|
||||
name=Scent of Cinder
|
||||
target=creature
|
||||
target=creature,player
|
||||
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.
|
||||
mana={1}{R}
|
||||
|
||||
@@ -2485,7 +2485,7 @@ toughness=1
|
||||
name=Alabaster Potion
|
||||
auto=choice life:X target(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}
|
||||
type=Instant
|
||||
[/card]
|
||||
@@ -2767,12 +2767,12 @@ subtype=Eldrazi
|
||||
[/card]
|
||||
[card]
|
||||
name=All Suns' Dawn
|
||||
auto=moveto(exile)
|
||||
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(White) target(*[white]|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=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.
|
||||
mana={4}{G}
|
||||
type=Sorcery
|
||||
@@ -3671,8 +3671,8 @@ type=Land
|
||||
name=Ancient Stirrings
|
||||
mana={G}
|
||||
type=Sorcery
|
||||
aicode=activate target(*[colorless;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
|
||||
aicode=activate target(*[-white;-blue;-black;-red;-green;zpos<=5]|mylibrary) moveto(myhand)
|
||||
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.)
|
||||
[/card]
|
||||
[card]
|
||||
@@ -32739,7 +32739,7 @@ type=Enchantment
|
||||
[/card]
|
||||
[card]
|
||||
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}
|
||||
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}
|
||||
@@ -35648,7 +35648,7 @@ power=2
|
||||
toughness=4
|
||||
[/card]
|
||||
[card]
|
||||
name=Emmara Tandris
|
||||
name=Emmara Tandris
|
||||
auto=preventalldamage to(creature[token]|myBattlefield)
|
||||
text=Prevent all damage that would be dealt to creature tokens you control.
|
||||
mana={5}{G}{W}
|
||||
@@ -36546,7 +36546,7 @@ name=Ephara's Enlightenment
|
||||
target=creature
|
||||
auto=counter(1/1,1)
|
||||
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.
|
||||
mana={1}{W}{U}
|
||||
type=Enchantment
|
||||
@@ -37972,16 +37972,16 @@ text=You may play an additional land this turn. -- Draw a card.
|
||||
mana={1}{G}
|
||||
type=Sorcery
|
||||
[/card]
|
||||
[card]
|
||||
name=Explorer's Scope
|
||||
auto={1}:equip
|
||||
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
|
||||
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}
|
||||
type=Artifact
|
||||
subtype=Equipment
|
||||
[/card]
|
||||
#[card]
|
||||
#name=Explorer's Scope
|
||||
#auto={1}:equip
|
||||
#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
|
||||
#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}
|
||||
#type=Artifact
|
||||
#subtype=Equipment
|
||||
#[/card]
|
||||
[card]
|
||||
name=Explosive Apparatus
|
||||
auto={3}{T}{s}:damage:2 target(other *[creature;player])
|
||||
@@ -40015,7 +40015,7 @@ toughness=2
|
||||
[card]
|
||||
name=Fertile Ground
|
||||
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).
|
||||
mana={1}{G}
|
||||
type=Enchantment
|
||||
@@ -55466,7 +55466,7 @@ mana={X}{G}{G}
|
||||
type=Creature
|
||||
subtype=Snake Hydra
|
||||
power=0
|
||||
toughness=1
|
||||
toughness=0
|
||||
[/card]
|
||||
[card]
|
||||
name=Hooded Kavu
|
||||
@@ -61275,7 +61275,7 @@ toughness=0
|
||||
[card]
|
||||
name=Kaalia of the Vast
|
||||
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.
|
||||
mana={1}{B}{R}{W}
|
||||
type=Legendary Creature
|
||||
@@ -64893,9 +64893,10 @@ toughness=5
|
||||
[/card]
|
||||
[card]
|
||||
name=Krosan Verge
|
||||
auto=tap(noevent)
|
||||
#auto=tap(noevent)
|
||||
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.
|
||||
type=Land
|
||||
[/card]
|
||||
@@ -67041,7 +67042,7 @@ type=Instant
|
||||
[/card]
|
||||
[card]
|
||||
name=Lifeforce
|
||||
auto={G}{G}:fizzle target(sorcery|stack)
|
||||
auto={G}{G}:fizzle target(*[black]|stack)
|
||||
text={G}{G}: Counter target black spell.
|
||||
mana={G}{G}
|
||||
type=Enchantment
|
||||
@@ -74914,8 +74915,8 @@ toughness=1
|
||||
name=Mirrorpool
|
||||
auto={t}:add{c}
|
||||
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={4}{c}{t}{s}:name(Clone) clone notatarget(other creature|mybattlefield)
|
||||
auto={2}{c}{t}{s}:name(copy spell) target(instant,sorcery|mystack) castcard(copied noevent)
|
||||
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.
|
||||
type=Land
|
||||
[/card]
|
||||
@@ -75889,7 +75890,7 @@ toughness=*
|
||||
name=Molten Firebird
|
||||
abilities=flying
|
||||
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)
|
||||
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}
|
||||
@@ -79861,26 +79862,26 @@ toughness=7
|
||||
name=Night Dealings
|
||||
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=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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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)
|
||||
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}
|
||||
type=Enchantment
|
||||
@@ -88007,7 +88008,7 @@ name=Ponyback Brigade
|
||||
auto=token(Goblin,Creature Goblin,1/1,red) *3
|
||||
facedown={3}
|
||||
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.)
|
||||
mana={3}{R}{W}{B}
|
||||
type=Creature
|
||||
@@ -93612,8 +93613,9 @@ subtype=Aura
|
||||
[/card]
|
||||
[card]
|
||||
name=Red Sun's Zenith
|
||||
auto=choice name(Target creature) exiledeath && damage:X target(creature)
|
||||
auto=choice name(Target player) damage:X target(player)
|
||||
target=creature,player
|
||||
auto=exiledeath
|
||||
auto=damage:X
|
||||
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.
|
||||
mana={X}{R}
|
||||
@@ -102200,7 +102202,6 @@ text=When Seismic Elemental enters the battlefield, creatures without flying can
|
||||
mana={3}{R}{R}
|
||||
type=Creature
|
||||
subtype=Elemental
|
||||
subtype=Elemental
|
||||
power=4
|
||||
toughness=4
|
||||
[/card]
|
||||
@@ -119766,8 +119767,8 @@ toughness=1
|
||||
name=Tetravus
|
||||
abilities=flying
|
||||
auto=counter(1/1,3)
|
||||
auto={c(1/1,-1)}:token(Tetravite) myupkeeponly
|
||||
auto={e(Tetravite|myBattlefield)}:counter(1/1,1) myupkeeponly
|
||||
auto={c(1/1,-1)}:token(Tetravite) myupkeeponly limit:9
|
||||
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.
|
||||
mana={6}
|
||||
type=Artifact Creature
|
||||
@@ -119847,8 +119848,8 @@ name=Tezzeret, Agent of Bolas
|
||||
auto=counter(0/0,3,loyalty)
|
||||
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)}:name(Create Construct) target(artifact) transforms((Construct Artifact Creature,setpower=5,settoughness=5))
|
||||
auto={C(0/0,-4,Loyalty)}:target(player) life:-twicetype:artifact:mybattlefield && life:twicetype:artifact:mybattlefield controller
|
||||
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
|
||||
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}
|
||||
type=Legendary Planeswalker
|
||||
@@ -120131,7 +120132,7 @@ name=Thassa's Emissary
|
||||
auto=bestow bstw
|
||||
auto=bestow teach(creature) +3/+3
|
||||
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}
|
||||
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}
|
||||
@@ -121431,7 +121432,7 @@ type=Artifact
|
||||
[/card]
|
||||
[card]
|
||||
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.
|
||||
mana={2}
|
||||
type=Artifact
|
||||
|
||||
@@ -18,6 +18,7 @@ typedef enum
|
||||
GAME_TYPE_RANDOM3,
|
||||
GAME_TYPE_RANDOM5,
|
||||
GAME_TYPE_HORDE,
|
||||
GAME_TYPE_SET_LIMITED,
|
||||
GAME_TYPE_STORY,
|
||||
GAME_TYPE_DEMO,
|
||||
GAME_TYPE_STONEHEWER,
|
||||
|
||||
@@ -45,6 +45,7 @@ protected:
|
||||
Player * loadPlayerRandomThree(GameObserver* observer, int isAI);
|
||||
Player * loadPlayerRandomFive(GameObserver* observer, int isAI);
|
||||
Player * loadPlayerHorde(GameObserver* observer, int isAI);
|
||||
Player * loadRandomSetLimited(GameObserver* observer, int isAI);
|
||||
Player * initPlayer(GameObserver *observer, int playerId);
|
||||
MTGDeck * buildDeck(int playerId);
|
||||
GameType strToGameMode(string s);
|
||||
|
||||
@@ -50,11 +50,12 @@ int OrderedAIAction::getEfficiency(AADamager * aad)
|
||||
if(p == target->controller())
|
||||
return 0;
|
||||
|
||||
if (dTarget && aad && (aad->getDamage() >= dTarget->toughness))
|
||||
if (dTarget && aad && (aad->getDamage() == dTarget->toughness))
|
||||
return 100;
|
||||
|
||||
if (dTarget && dTarget->toughness)
|
||||
return (10 * aad->getDamage()) / dTarget->toughness; // Don't waste damage spells
|
||||
else if (dTarget && aad && (aad->getDamage() > dTarget->toughness))
|
||||
return 10 * (10 - (aad->getDamage() - dTarget->toughness)); //less eff the more dmg above toughness
|
||||
else
|
||||
return 10;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -130,11 +131,7 @@ int OrderedAIAction::getEfficiency()
|
||||
{
|
||||
efficiency = 95;
|
||||
}
|
||||
//TODO If the card is the target of a damage spell
|
||||
if (!coreAbilityCardTarget->regenerateTokens && (MTGCardInstance*)target == a->source)
|
||||
{
|
||||
efficiency = 95;
|
||||
}
|
||||
//TODO If the card is the target of a damage spell
|
||||
break;
|
||||
}
|
||||
case MTGAbility::STANDARD_PREVENT:
|
||||
@@ -285,6 +282,10 @@ int OrderedAIAction::getEfficiency()
|
||||
coreAbilityCardTarget = a->source->target; //TODO use intermediate value?
|
||||
target = a->source;
|
||||
}
|
||||
else //if(how to know cards like Basking Rootwalla that pump themselves)
|
||||
{
|
||||
target = a->source;
|
||||
}
|
||||
if (!target && !dynamic_cast<ALord*> (a))
|
||||
break;
|
||||
if(dynamic_cast<ALord*> (a) && !target)
|
||||
@@ -296,9 +297,9 @@ int OrderedAIAction::getEfficiency()
|
||||
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.
|
||||
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())
|
||||
{
|
||||
@@ -316,14 +317,10 @@ int OrderedAIAction::getEfficiency()
|
||||
{
|
||||
//this means im heading directly for the player, pump this creature as much as possible.
|
||||
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.
|
||||
}
|
||||
}
|
||||
if (currentPhase == MTG_PHASE_FIRSTMAIN)
|
||||
{
|
||||
efficiency = 10;
|
||||
}
|
||||
}
|
||||
if (suggestion == BAKA_EFFECT_BAD && target->controller() != p && target->toughness > 0)
|
||||
{
|
||||
@@ -672,7 +669,7 @@ int OrderedAIAction::getEfficiency()
|
||||
{
|
||||
AIPlayer * chk = (AIPlayer*)p;
|
||||
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)
|
||||
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++)
|
||||
{
|
||||
ExtraCost * tapper = dynamic_cast<TapCost*>(ec->costs[i]);
|
||||
ExtraCost * sacrifice = dynamic_cast<SacrificeCost*>(ec->costs[i]);
|
||||
if(tapper)
|
||||
continue;
|
||||
continue;
|
||||
else if(sacrifice)
|
||||
efficiency = efficiency / 3;
|
||||
else
|
||||
efficiency = efficiency / 2;
|
||||
}
|
||||
@@ -699,7 +699,7 @@ int OrderedAIAction::getEfficiency()
|
||||
}
|
||||
else if (dynamic_cast<MTGAlternativeCostRule *>(a))
|
||||
{
|
||||
efficiency += 65;
|
||||
efficiency += 55;
|
||||
}
|
||||
else if (dynamic_cast<MTGSuspendRule *>(a))
|
||||
{
|
||||
@@ -707,15 +707,10 @@ int OrderedAIAction::getEfficiency()
|
||||
}
|
||||
|
||||
if (ability->source)
|
||||
{
|
||||
if(ability->source->hasType(Subtypes::TYPE_PLANESWALKER))
|
||||
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);
|
||||
return efficiency;
|
||||
|
||||
@@ -772,7 +772,7 @@ void GameStateDuel::Update(float dt)
|
||||
= "ai_baka_music_random.mp3";
|
||||
else if (mParent->gameType == GAME_TYPE_RANDOM3 || mParent->gameType == GAME_TYPE_RANDOM5) musictrack
|
||||
= "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";
|
||||
if (!MusicExist(musictrack))
|
||||
musictrack = "ai_baka_music.mp3";
|
||||
|
||||
@@ -4572,12 +4572,12 @@ int AbilityFactory::abilityEfficiency(MTGAbility * a, Player * p, int mode, Targ
|
||||
if (AAMover * aam = dynamic_cast<AAMover *>(a))
|
||||
{
|
||||
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)
|
||||
return BAKA_EFFECT_GOOD;
|
||||
}
|
||||
return BAKA_EFFECT_DONTKNOW; //TODO
|
||||
return BAKA_EFFECT_BAD; //TODO
|
||||
}
|
||||
|
||||
if (dynamic_cast<AACopier *> (a))
|
||||
|
||||
@@ -1355,16 +1355,16 @@ int MTGCardInstance::DangerRanking()
|
||||
}
|
||||
// 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
|
||||
if (result > 2)
|
||||
danger += 1;
|
||||
if (result > 4)
|
||||
danger += 1;
|
||||
if (result > 6)
|
||||
danger += 1;
|
||||
if (result > 8)
|
||||
danger += 1;
|
||||
if (result > 10)
|
||||
danger += 1;
|
||||
if (result > 12)
|
||||
danger += 1;
|
||||
if (result > 14)
|
||||
danger += 1;
|
||||
return danger;
|
||||
}
|
||||
|
||||
|
||||
@@ -170,7 +170,7 @@ void Rules::addExtraRules(GameObserver* g)
|
||||
difficultyRating = 0;
|
||||
else if(g->mRules->gamemode == GAME_TYPE_RANDOM3 || g->mRules->gamemode == GAME_TYPE_RANDOM5)
|
||||
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;
|
||||
else if (g->mRules->gamemode == GAME_TYPE_STORY)
|
||||
difficultyRating = 0;
|
||||
@@ -311,6 +311,50 @@ Player * Rules::loadPlayerRandom(GameObserver* observer, int isAI, int mode)
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
MTGDeck * tempDeck = NEW MTGDeck(MTGCollection());
|
||||
tempDeck->addRandomCards(1, 0, 0, -1, "plains");
|
||||
tempDeck->addRandomCards(1, 0, 0, -1, "island");
|
||||
tempDeck->addRandomCards(1, 0, 0, -1, "swamp");
|
||||
tempDeck->addRandomCards(1, 0, 0, -1, "mountain");
|
||||
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");
|
||||
|
||||
tempDeck->addRandomCards(20, 0, 0, -1, "land");
|
||||
tempDeck->addRandomCards(20, 0, 0, -1, "creature");
|
||||
tempDeck->addRandomCards(20, 0, 0, -1, "");
|
||||
|
||||
string deckFile = "random";
|
||||
string deckFileSmall = "random";
|
||||
@@ -399,14 +426,13 @@ Player * Rules::loadPlayerHorde(GameObserver* observer, int isAI)
|
||||
|
||||
string lands[] = { "land", "forest", "island", "mountain", "swamp", "plains" };
|
||||
|
||||
const char* const multicolorTribes[] = { "Ally", "Atog", "Eldrazi", "Elemental", "Human", "Knight",
|
||||
"Myr", "Samurai", "Shaman", "Shapeshifter", "Sliver", "Soldier", "Spellshaper" };
|
||||
const char* const whiteTribes[] = { "Angel","Cat", "Griffin", "Kithkin", "Knight", "Pegasus", "Soldier" };
|
||||
const char* const blueTribes[] = { "Artificer", "Merfolk", "Drake", "Faerie", "Illusion", "Vedalken" };
|
||||
const char* const blackTribes[] = { "Demon", "Faerie", "Horror", "Pirate", "Rat", "Shade", "Skeleton", "Vampire", "Zombie" };
|
||||
const char* const redTribes[] = { "Barbarian", "Berserker","Cat", "Devil", "Goblin", "Minotaur", "Werewolf" };
|
||||
const char* const greenTribes[] = { "Beast", "Cat", "Centaur", "Dinosaur", "Druid", "Elf", "Fungus",
|
||||
"Saproling", "Spider", "Treefolk", "Werewolf" };
|
||||
const char* const multicolorTribes[] = { "Ally", "Atog", "Eldrazi", "Elemental", "Golem", "Hound", "Human", "Knight",
|
||||
"Myr", "Samurai", "Shaman", "Shapeshifter", "Sliver", "Soldier", "Spellshaper", "Spirit", "Warrior" };
|
||||
const char* const whiteTribes[] = { "Angel", "Bird", "Cat", "cleric", "Griffin", "Kithkin", "Knight", "Soldier", "Spirit" };
|
||||
const char* const blueTribes[] = { "Artificer", "Bird", "Drake", "Faerie", "Illusion", "Merfolk", "Spirit", "Vedalken", "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", "Ogre", "Werewolf" };
|
||||
const char* const greenTribes[] = { "Beast", "Cat", "Centaur", "Dinosaur", "Druid", "Elf", "Fungus", "Snake", "Spider", "Treefolk", "Werewolf" };
|
||||
|
||||
int multicolorTribesSize = sizeof(multicolorTribes)/sizeof(multicolorTribes[0]);
|
||||
int whiteTribesSize = sizeof(whiteTribes)/sizeof(whiteTribes[0]);
|
||||
@@ -482,6 +508,8 @@ Player * Rules::initPlayer(GameObserver *g, int playerId)
|
||||
return loadPlayerRandomFive(g, isAI);
|
||||
case GAME_TYPE_HORDE:
|
||||
return loadPlayerHorde(g, isAI);
|
||||
case GAME_TYPE_SET_LIMITED:
|
||||
return loadRandomSetLimited(g, isAI);
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
@@ -790,6 +818,7 @@ GameType Rules::strToGameMode(string s)
|
||||
if (s.compare("random3") == 0) return GAME_TYPE_RANDOM3;
|
||||
if (s.compare("random5") == 0) return GAME_TYPE_RANDOM5;
|
||||
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("stonehewer") == 0) return GAME_TYPE_STONEHEWER;
|
||||
if (s.compare("hermit") == 0) return GAME_TYPE_HERMIT;
|
||||
|
||||
Reference in New Issue
Block a user