From 612be9737d37f1b0df9aa3c2b6f45271580b5092 Mon Sep 17 00:00:00 2001 From: Eduardo Date: Wed, 9 Sep 2020 22:47:21 -0500 Subject: [PATCH] Changes to some game modes I created and fixes to primitives Some minor changes to some game modes, by the way, can we make it easier to unlock the random modes? --- projects/mtg/bin/Res/rules/horde.txt | 3 +- projects/mtg/bin/Res/rules/random5.txt | 2 +- .../bin/Res/sets/primitives/borderline.txt | 116 +++++++++--------- projects/mtg/bin/Res/sets/primitives/mtg.txt | 64 +++++----- projects/mtg/src/CarouselDeckView.cpp | 4 +- projects/mtg/src/Rules.cpp | 43 ++++--- 6 files changed, 116 insertions(+), 116 deletions(-) diff --git a/projects/mtg/bin/Res/rules/horde.txt b/projects/mtg/bin/Res/rules/horde.txt index f193b7896..402d69ed9 100644 --- a/projects/mtg/bin/Res/rules/horde.txt +++ b/projects/mtg/bin/Res/rules/horde.txt @@ -9,5 +9,6 @@ life:20 auto=shuffle auto=draw:7 -auto=@each my upkeep:if type(creature[manacost<=2]|mylibrary)~lessthan~1 then moverandom(creature[manacost<=4]) from(library) to(battlefield) +auto=@each my upkeep:if type(creature[manacost<=3]|mylibrary)~lessthan~1 then moverandom(creature[manacost<=4]) from(library) to(battlefield) +auto=@each my upkeep:if type(creature[manacost<=2]|mylibrary)~lessthan~1 then moverandom(creature[manacost<=3]) from(library) to(battlefield) auto=@each my upkeep:moverandom(creature[manacost<=2]) from(library) to(battlefield) \ No newline at end of file diff --git a/projects/mtg/bin/Res/rules/random5.txt b/projects/mtg/bin/Res/rules/random5.txt index 7c38517c1..026f287c0 100644 --- a/projects/mtg/bin/Res/rules/random5.txt +++ b/projects/mtg/bin/Res/rules/random5.txt @@ -11,6 +11,6 @@ auto=draw:7 auto=lord(*[-noactivatedability;-nomanaability;-notapability;land]|MyBattlefield) {T}:Add{W} auto=lord(*[-noactivatedability;-nomanaability;-notapability;land]|MyBattlefield) {T}:Add{U} -auto=lord(*[-noactivatedability;-nomanaability;-notapability;land]|MyBattlefield) {T}:Add{R} auto=lord(*[-noactivatedability;-nomanaability;-notapability;land]|MyBattlefield) {T}:Add{B} +auto=lord(*[-noactivatedability;-nomanaability;-notapability;land]|MyBattlefield) {T}:Add{R} auto=lord(*[-noactivatedability;-nomanaability;-notapability;land]|MyBattlefield) {T}:Add{G} \ No newline at end of file diff --git a/projects/mtg/bin/Res/sets/primitives/borderline.txt b/projects/mtg/bin/Res/sets/primitives/borderline.txt index 7d63442f5..a9646e302 100644 --- a/projects/mtg/bin/Res/sets/primitives/borderline.txt +++ b/projects/mtg/bin/Res/sets/primitives/borderline.txt @@ -223,8 +223,7 @@ toughness=3 [card] name=Admiral's Order target=spell -other={U} name(Raid) -otherrestriction=raid +auto=if raid altercost(colorless,-1) altercost(blue,-1) auto=fizzle text=Raid — If you attacked with a creature this turn, you may pay {U} rather than pay this spell's mana cost. -- Counter target spell. mana={1}{U}{U} @@ -3429,7 +3428,7 @@ toughness=2 name=Blast Zone auto=counter(0/0,1,Charge) auto={T}:Add{C} -auto={X}{X}{T}:counter(0/0,X,Charge) +auto={X}{X}{T}:counter(0/0,XX,Charge) auto={3}{T}{S}:this(counter{0/0.1.Charge}<1) {T}{S}:destroy all(*[-land;manacost=0]) auto={3}{T}{S}:this(counter{0/0.1.Charge}=) {T}{S}:destroy all(*[-land;manacost=1]) auto={3}{T}{S}:this(counter{0/0.2.Charge}=) {T}{S}:destroy all(*[-land;manacost=2]) @@ -4071,6 +4070,7 @@ type=Artifact [/card] [card] name=Bonders' Enclave +auto={T}:Add{1} auto={3}{T} restriction{type(creature[power>=4]|mybattlefield)~morethan~0}:draw:1 controller text={T}: Add {1}. -- {3}, {T}: Draw a card. Activate this ability only if you control a creature with power 4 or greater. type=Land @@ -4970,7 +4970,7 @@ auto=choice name(Blue) transforms((,newability[lord(creature[blue]|myBattlefield text=As Caged Sun enters the battlefield, choose a color. -- Creatures you control of the chosen color get +1/+1. -- Whenever a land's ability adds one or more mana of the chosen color to your mana pool, add one additional mana of that color to your mana pool. mana={6} type=Artifact -[/card +[/card] [card] name=Caged Zombie auto={1}{B}{T}:life:-2 opponent restriction{morbid} @@ -5248,7 +5248,7 @@ type=Instant [/card] [card] name=Carrion Grub -anyzone=power:highest:*:mybattlefield/0 cdaactive +anyzone=power:highest:*:mygraveyard/5 cdaactive auto=deplete:4 controller text=Carrion Grub gets +X/+0, where X is the greatest power among creature cards in your graveyard. -- When Carrion Grub enters the battlefield, mill four cards. (Put the top four cards of your library into your graveyard.) mana={3}{B} @@ -7339,7 +7339,6 @@ toughness=4 [/card] [card] name=Conqueror's Flail -target=creature auto={2}:equip auto=aslongas(*[white]|myBattlefield) teach(creature) 1/1 auto=aslongas(*[blue]|myBattlefield) teach(creature) 1/1 @@ -8925,8 +8924,7 @@ toughness=2 name=Deathsprout target=creature auto=destroy -aicode=activate moveTo(myBattlefield) and!(tap(noevent))! target(*[basic]|myLibrary) -auto=name(search card) reveal:plibrarycount optionone name(choose card) target(*[basic]|reveal) moveto(ownerlibrary) and!( becomes(tobecast) ueot )! optiononeend optiontwo name(put back) target(<1>*|reveal) moveto(ownerlibrary) and!( all(*|reveal) moveto(ownerlibrary) and!(shuffle)! )! optiontwoend afterrevealed all(tobecast|mylibrary) moveto(ownerlibrary) and!(moveTo(myBattlefield) and!(tap(noevent))!)! afterrevealedend revealend +auto=moveTo(myBattlefield) and!(tap(noevent))! target(*[basic]|myLibrary) text=Destroy target creature. Search your library for a basic land card, put it onto the battlefield tapped, then shuffle your library. mana={1}{B}{B}{G} type=Instant @@ -9094,7 +9092,7 @@ type=Sorcery [/card] [card] name=Defense Grid -auto=restriction{during opponent turn}: lord(*|nonbattlezone) altercost(colorless,+3) opponent +auto=restriction{during my turn}: lord(*|nonbattlezone) altercost(colorless,+3) opponent auto=restriction{during opponent turn}: lord(*|nonbattlezone) altercost(colorless,+3) controller text=Each spell costs {3} more to cast except during its controller's turn. mana={2} @@ -11551,6 +11549,7 @@ type=Artifact name=Embercleave abilities=flash anyzone=foreach(creature[attacking]|battlefield) changecost(colorless:-1) forcedalive +auto=aslongas(parents) rehook target(creature|mybattlefield) <1 auto=teach(creature) double strike auto=teach(creature) trample auto=teach(creature) 1/1 @@ -12081,7 +12080,7 @@ name=Escape Velocity target=creature auto=haste auto=1/0 -autograveyard=name(Escape-{1}{R},exile two) {1}{R}{E(other *|myGraveyard)}{E(other *|myGraveyard)}:castcard(normal) +autograveyard=name(Escape-{1}{R},exile two) {1}{R}:castcard(normal) text=Enchant creature -- Enchanted creature gets +1/+0 and has haste. -- Escape—{1}{R}, Exile two other cards from your graveyard. (You may cast this card from your graveyard for its escape cost.) mana={R} type=Enchantment @@ -13117,8 +13116,8 @@ toughness=4 [/card] [card] name=Ferocity of the Wilds -auto=all(creature[-human,attacking]|mybattlefield) 1/0 -auto=all(creature[-human,attacking]|mybattlefield) trample +auto=lord(creature[-human;attacking]|mybattlefield) 1/0 +auto=lord(creature[-human;attacking]|mybattlefield) trample text=Attacking non-Human creatures you control get +1/+0 and have trample. mana={2}{R} type=Enchantment @@ -13174,7 +13173,7 @@ subtype=Island Swamp [card] name=Fibrous Entangler abilities=vigilance -auto=@combat (attacking) source(this):all(creature|opponentbattlefield) mustblock ueot +auto=@combat(attacking) source(this):all(creature|opponentbattlefield) mustblock ueot text=Vigilance -- Fibrous Entangler must be blocked if able. -- Fibrous Entangler can block an additional creature each combat. mana={2}{G}{G} type=Creature @@ -13202,7 +13201,7 @@ type=Land name=Fiend Artisan auto=foreach(creature|myGraveyard) 1/1 aicode=activate target(creature[manacost<=X]|mylibrary) moveto(myBattlefield) -auto={X}{BG}{T}{S(other creature|myBattlefield}:name(search creature) Reveal:type:*:mylibrary revealzone(mylibrary) optionone name(choose creature) target(creature[manacost<=X]|reveal) transforms((,newability[all(other *|reveal) moveto(mylibrary) and!(shuffle)!],newability[moveto(myBattlefield)])) optiononeend optiontwo name(shuffle) bottomoflibrary target(<1>*|reveal) and!( all(*|reveal) bottomoflibrary and!(shuffle)! )! optiontwoend revealend asSorcery +auto={X}{BG}{T}{S(other creature|myBattlefield)}:name(search creature) Reveal:type:*:mylibrary revealzone(mylibrary) optionone name(choose creature) target(creature[manacost<=X]|reveal) transforms((,newability[all(other *|reveal) moveto(mylibrary) and!(shuffle)!],newability[moveto(myBattlefield)])) optiononeend optiontwo name(shuffle) bottomoflibrary target(<1>*|reveal) and!( all(*|reveal) bottomoflibrary and!(shuffle)! )! optiontwoend revealend asSorcery text=Fiend Artisan gets +1/+1 for each creature card in your graveyard. -- {X}{BG}, {T}, Sacrifice another creature: Search your library for a creature card with converted mana cost X or less, put it onto the battlefield, then shuffle your library. Activate this ability only any time you could cast a sorcery. mana={BG}{BG} type=Creature @@ -14046,7 +14045,7 @@ toughness=5 [card] name=Folio of Fancies abilities=nomaxhand,oppnomaxhand -auto={X}{X}{T}:draw:X all(player) +auto={X}{X}{T}:draw:XX all(player) auto={2}{U}{T}:deplete:type:*:opponenthand opponent text=Players have no maximum hand size. -- {X}{X}, {T}: Each player draws X cards. -- {2}{U}, {T}: Each opponent puts a number of cards equal to the number of cards in their hand from the top of their library into their graveyard. mana={1}{U} @@ -14479,7 +14478,7 @@ toughness=3 name=Frost Titan auto=@targeted(this) from(opponent):transforms((,newability[pay[[{2}]] name(pay 2 mana) donothing?fizzle])) oneshot auto=frozen target(*) -auto=@combat (attacking) source(this): frozen target (*) +auto=@combat(attacking) source(this): frozen target (*) text=Whenever Frost Titan becomes the target of a spell or ability an opponent controls, counter that spell or ability unless its controller pays {2}. -- Whenever Frost Titan enters the battlefield or attacks, tap target permanent. It doesn’t untap during its controller’s next untap step. mana={4}{U}{U} type=Creature @@ -14727,9 +14726,9 @@ toughness=2 [card] name=Gallia of the Endless Dance abilities=haste -auto=lord(creature[Satyr]|myBattlefield) 1/1 -auto=lord(creature[Satyr]|myBattlefield) haste -auto=@each my blockers restriction{type(creature[attacking]|myBattlefield)~morethan~2}:reject controller && draw:2 controller +auto=lord(other creature[Satyr]|myBattlefield) 1/1 +auto=lord(other creature[Satyr]|myBattlefield) haste +auto=@each blockers restriction{type(creature[attacking]|myBattlefield)~morethan~2}:reject controller && draw:2 controller text=Haste -- Other Satyrs you control get +1/+1 and have haste. -- Whenever you attack with three or more creatures, you may discard a card at random. If you do, draw two cards. mana={R}{G} type=Legendary Creature @@ -16099,9 +16098,9 @@ toughness=3 [/card] [card] name=Goblin War Party -other={2}{R} name(Entwine) -auto=if paid(alternative) then create(Goblin:Creature Goblin:1/1:red) && all(creature|mybattlefield) 1/1 ueot && all(creature|mybattlefield) haste ueot -auto=ifnot paid(alternative) then transforms((,newability[choice create(Goblin:Creature Goblin:1/1:red)],newability[choice all(creature|mybattlefield) 1/1 ueot && all(creature|mybattlefield) haste ueot])) +other={5}{R}{R} name(Entwine) +auto=if paid(alternative) then create(Goblin:Creature Goblin:1/1:red)*3 && all(creature|mybattlefield) 1/1 ueot && all(creature|mybattlefield) haste ueot +auto=ifnot paid(alternative) then transforms((,newability[choice create(Goblin:Creature Goblin:1/1:red)*3],newability[choice all(creature|mybattlefield) 1/1 ueot && all(creature|mybattlefield) haste ueot])) text=Choose one — -- • Create three 1/1 red Goblin creature tokens. -- • Creatures you control get +1/+1 and gain haste until end of turn. -- Entwine {2}{R} (Choose both if you pay the entwine cost.) mana={3}{R} type=Sorcery @@ -17026,7 +17025,7 @@ toughness=1 [/card] [card] name=Haazda Officer -auto=target(creature|mybattlefield) 1/1 +auto=target(creature|mybattlefield) 1/1 ueot text=When Haazda Officer enters the battlefield, target creature you control gets +1/+1 until end of turn. mana={2}{W} type=Creature @@ -18405,7 +18404,7 @@ toughness=2 [card] name=Howling Giant abilities=reach -auto=create(Wolf:creature Wolf:2/2:green) +auto=create(Wolf:creature Wolf:2/2:green)*2 text=Reach (This creature can block creatures with flying.) -- When Howling Giant enters the battlefield, create two 2/2 green Wolf creature tokens. mana={5}{G}{G} type=Creature @@ -19588,8 +19587,8 @@ type=Sorcery [card] name=Inferno Titan auto={R}:1/0 ueot -auto=damage:1 target(creature,player,planeswalker) && activate damage:1 target(creature,player,planeswalker) && activate damage:1 target(creature,player,planeswalker) -auto=@combat (attacking) source(this): damage:1 target(creature,player,planeswalker) && activate damage:1 target(creature,player,planeswalker) && activate damage:1 target(creature,player,planeswalker) +auto=ability$!damage:1 target(creature,player)!$ controller && ability$!damage:1 target(creature,player)!$ controller && ability$!damage:1 target(creature,player)!$ controller !$ +auto=@combat(attacking) source(this): ability$!damage:1 target(creature,player)!$ controller && ability$!damage:1 target(creature,player)!$ controller && ability$!damage:1 target(creature,player)!$ controller !$ text={R}: Inferno Titan gets +1/+0 until end of turn. -- Whenever Inferno Titan enters the battlefield or attacks, it deals 3 damage divided as you choose among one, two, or three targets. mana={4}{R}{R} type=Creature @@ -22834,7 +22833,7 @@ toughness=1 [card] name=Loch Dragon abilities=flying -auto=may ability$!name(discard) reject notatarget(*|myhand) and!(draw:1) controller!$ +auto=may ability$!name(discard) reject notatarget(*|myhand) and!(draw:1) !$ controller auto=@combat(attacking) source(this):may ability$!name(discard) reject notatarget(*|myhand) and!(draw:1) controller!$ text=Flying -- Whenever Loch Dragon enters the battlefield or attacks, you may discard a card. If you do, draw a card. mana={UR}{UR}{UR}{UR} @@ -23028,12 +23027,12 @@ toughness=5 name=Lotus Field abilities=opponentshroud auto=tap(noevent) -auto=moveto(graveyard) notatarget(land|mybattlefield) && moveto(graveyard) notatarget(land|mybattlefield) -auto={T}:Add{B}{B}{B} -auto={T}:Add{G}{G}{G} -auto={T}:Add{R}{R}{R} -auto={T}:Add{U}{U}{U} +auto=aslongas(land|mybattlefield) choice target(<2>other land|mybattlefield) sacrifice oneshot >1 auto={T}:Add{W}{W}{W} +auto={T}:Add{U}{U}{U} +auto={T}:Add{B}{B}{B} +auto={T}:Add{R}{R}{R} +auto={T}:Add{G}{G}{G} text=Hexproof -- Lotus Field enters the battlefield tapped. -- When Lotus Field enters the battlefield, sacrifice two lands. -- {T}: Add three mana of any one color. type=Land [/card] @@ -23438,9 +23437,9 @@ type=Enchantment [card] name=Malefic Scythe auto={1}:equip -auto=counter(0/0,1,Soul) -auto=thisforeach(counter{0/0,1,Soul}) teach(creature) 1/1 -auto=@movedto(mytgt|mygraveyard) from(battlefield):counter(0/0,1,Soul) +auto=counter(0/0.1.Soul) +auto=thisforeach(counter{0/0.1.Soul}) 1/1 +auto=@movedto(graveyard) from(mytgt|battlefield):counter(0/0.1.Soul) all(this) text=Malefic Scythe enters the battlefield with a soul counter on it. -- Equipped creature gets +1/+1 for each soul counter on Malefic Scythe. -- Whenever equipped creature dies, put a soul counter on Malefic Scythe. -- Equip {1} ({1}: Attach to target creature you control. Equip only as a sorcery.) mana={1}{B} type=Artifact @@ -23941,7 +23940,7 @@ type=Sorcery [/card] [card] name=Mass Manipulation -target=*[creature,planeswalker] +target=*[creature;planeswalker] auto=moveTo(mybattlefield) text=Gain control of X target creatures and/or planeswalkers. mana={X}{X}{U}{U}{U}{U} @@ -24838,7 +24837,7 @@ toughness=1 [/card] [card] name=Mistford River Turtle -auto=@combat(attacking) source(this):target(creature[-human;attacking]) unblockable ueot +auto=@combat(attacking) source(this):target(other creature[-human;attacking]) unblockable ueot text=Whenever Mistford River Turtle attacks, another target attacking non-Human creature can't be blocked this turn. mana={3}{U} type=Creature @@ -25081,7 +25080,7 @@ toughness=5 [card] name=Morophon, the Boundless abilities=changeling -auto=chooseatype lord(creature[chosentype]|mybattlefield) 1/1 && lord(*[chosentype]|mycastingzone) altercost(white, -1) forever && lord(*[chosentype]|mycastingzone) altercost(green, -1) forever && lord(*[chosentype]|mycastingzone) altercost(red, -1) forever && lord(*[chosentype]|mycastingzone) altercost(blue, -1) forever && lord(*[chosentype]|mycastingzone) altercost(black, -1) forever chooseend +auto=chooseatype lord(other creature[chosentype]|mybattlefield) 1/1 && lord(*[chosentype]|mycastingzone) altercost(white, -1) forever && lord(*[chosentype]|mycastingzone) altercost(green, -1) forever && lord(*[chosentype]|mycastingzone) altercost(red, -1) forever && lord(*[chosentype]|mycastingzone) altercost(blue, -1) forever && lord(*[chosentype]|mycastingzone) altercost(black, -1) forever chooseend text=Changeling (This card is every creature type.) -- As Morophon, the Boundless enters the battlefield, choose a creature type. -- Spells of the chosen type you cast cost {W}{U}{B}{R}{G} less to cast. This effect reduces only the amount of colored mana you pay. -- Other creatures you control of the chosen type get +1/+1. mana={7} type=Legendary Creature @@ -26345,7 +26344,7 @@ toughness=3 [card] name=Nimbus Champion abilities=flying -auto=@combat(attacking) source(this):may moveto(ownerHand) target(creature) if that creature's power is less than,equal the number of warriors your team controls +auto=@combat(attacking) source(this):may moveto(ownerHand) target(creature) text=Flying -- Whenever Nimbus Champion attacks, you may return target creature to its owner's hand if that creature's power is less than or equal to the number of Warriors your team controls. mana={5}{U} type=Creature @@ -28077,7 +28076,7 @@ toughness=1 [card] name=Paradox Haze target=player -auto=@each my upkeep:nextphasealter(add,upkeep,controller,after) +auto=@each targetedplayer upkeep:nextphasealter(add,upkeep,targetedplayer,after) text=Enchant player. -- At the beginning of enchanted player's first upkeep each turn, that player gets an additional upkeep step after this step. mana={2}{U} type=Enchantment @@ -28416,6 +28415,7 @@ target=creature auto=ueot transforms((,setpower=3,settoughness=3)) auto=ueot transforms((Illusion,blue)) auto=flying ueot +auto=draw:1 controller text=Until end of turn, up to two target creatures each have base power and toughness 3/3, gain flying, and become blue Illusions in addition to their other colors and types. -- Draw a card. mana={2}{U} type=Instant @@ -28697,7 +28697,7 @@ color=red [/card] [card] name=Pirate's Cutlass -auto=equip target(pirate|mybattlefield) +auto=aslongas(parents) rehook target(pirate|mybattlefield) <1 auto=teach(creature) 2/1 auto={2}:equip text=When Pirate's Cutlass enters the battlefield, attach it to target Pirate you control. -- Equipped creature gets +2/+1. -- Equip {2} ({2}: Attach to target creature you control. Equip only as a sorcery.) @@ -30511,7 +30511,7 @@ name=Rankle, Master of Pranks abilities=flying,haste auto=@combatdamaged(player) from(this):may name(discard) transforms((,newability[ability$!name(discard) notatarget(*|myhand) reject!$ controller],newability[ability$!name(discard) notatarget(*|myhand) reject!$ opponent])) ueot auto=@combatdamaged(player) from(this):may name(life and draw) draw:1 controller && draw:1 opponent && life:-1 controller && life:-1 opponent -auto=@combatdamaged(player) from(this):may name(sacrifice) transforms((,newability[ability$!name(sacrifice) notatarget(creature|mybattlefield) sacrifice!$ controller],newability[ability$!name(sacrifice) notatarget(creature|mybattlefield) sacrifice!$ opponent])) ueot +auto=@combatdamaged(player) from(this):may name(sacrifice) sacrifice transforms((,newability[ability$!name(sacrifice) notatarget(creature|mybattlefield) sacrifice!$ controller],newability[ability$!name(sacrifice) notatarget(creature|mybattlefield) sacrifice!$ opponent])) ueot text=Flying, haste -- Whenever Rankle, Master of Pranks deals combat damage to a player, choose any number — -- • Each player discards a card. -- • Each player loses 1 life and draws a card. -- • Each player sacrifices a creature. mana={2}{B}{B} type=Legendary Creature @@ -31160,7 +31160,7 @@ toughness=3 name=Repeating Barrage target=creature,player auto=damage:3 -autograveyard={3}{R}{R} restriction{raid}:moveto(myhand) +autograveyard={3}{R}{R}restriction{if raid}:moveto(myhand) text=Repeating Barrage deals 3 damage to target creature or player. -- Raid — {3}{R}{R}: Return Repeating Barrage from your graveyard to your hand. Activate this ability only if you attacked with a creature this turn. mana={1}{R}{R} type=Sorcery @@ -32258,7 +32258,7 @@ toughness=3 [/card] [card] name=Rosethorn Halberd -auto=equip target(creature[-human]|myBattlefield) +auto=rehook target(creature[-human]|myBattlefield) auto={5}:equip auto=teach(creature) 2/1 text=When Rosethorn Halberd enters the battlefield, attach it to target non-Human creature you control. -- Equipped creature gets +2/+1. -- Equip {5} ({5}: Attach to target creature you control. Equip only as a sorcery.) @@ -33939,8 +33939,9 @@ toughness=1 [/card] [card] name=Seasoned Pyromancer -auto=draw:2 &&2ability$! reject notatarget(<2>*|myhand) and!( if cantargetcard(*[-land]|*) then token(Elemental,creature Elemental,1/1,red) all(abilitycontroller) oneshot )! !$ targetedplayer -auto={3}{R}{R}{E(this|mygraveyard)}:token(Elemental,creature Elemental,1/1,red)*2 +#auto=draw:2 &&2ability$! reject notatarget(<2>*|myhand) and!( if cantargetcard(*[-land]|*) then token(Elemental,creature Elemental,1/1,red) all(abilitycontroller) oneshot )! !$ targetedplayer +auto=ability$! reject notatarget(<2>*|myhand) reject and!(draw:1)!!$ controller +autograveyard={3}{R}{R}{E}:token(Elemental,creature Elemental,1/1,red)*2 text=When Seasoned Pyromancer enters the battlefield, discard two cards, then draw two cards. For each nonland card discarded this way, create a 1/1 red Elemental creature token. -- {3}{R}{R}, Exile Seasoned Pyromancer from your graveyard: Create two 1/1 red Elemental creature tokens. mana={1}{R}{R} type=Creature @@ -34096,9 +34097,7 @@ toughness=0 [/card] [card] name=Selesnya Eulogist -target=creature|mygraveyard -auto={2}{G}:target(creature|mygraveyard) moveto(exile) && ability$! name(populate) clone notatarget(creature[token]|mybattlefield) !$ controller -auto={2}{G}:target(creature|opponentgraveyard) moveto(exile) && ability$! name(populate) clone notatarget(creature[token]|mybattlefield) !$ controller +auto={2}{G}:target(creature|graveyard) moveto(exile) && ability$! name(populate) clone notatarget(creature[token]|mybattlefield) !$ controller text={2}{G}: Exile target creature card from a graveyard, then populate. (Create a token that's a copy of a creature token you control.) mana={2}{G} type=Creature @@ -38699,8 +38698,8 @@ toughness=2 [/card] [card] name=Sun-Crested Pterodon -abilities=flying, vigilance -auto=if type(creature[dinosaur]|mybattlefield)~lessthan~1 then -vigilance +abilities=flying +auto=aslongas(dinosaur|myBattlefield) vigilance text=Flying -- Sun-Crested Pterodon has vigilance as long as you control another Dinosaur. mana={4}{W} type=Creature @@ -40339,7 +40338,7 @@ subtype=Saga [card] name=The Birth of Meletis aicode=activate target(land[basic,Plains]|mylibrary) moveto(myhand) -auto=name(search card) Reveal:type:*:mylibrary revealzone(mylibrary) optionone name(choose card) target(<1>land[basic,plains]|reveal) transforms((,newability[all(other *|reveal) moveto(mylibrary) and!(shuffle)!],newability[moveto(myhand)])) optiononeend optiontwo name(shuffle) bottomoflibrary target(<1>*|reveal) and!( all(*|reveal) bottomoflibrary and!(shuffle)! )! optiontwoend revealend +auto=name(search card) Reveal:type:*:mylibrary revealzone(mylibrary) optionone name(choose card) target(<1>land[basic;plains]|reveal) transforms((,newability[all(other *|reveal) moveto(mylibrary) and!(shuffle)!],newability[moveto(myhand)])) optiononeend optiontwo name(shuffle) bottomoflibrary target(<1>*|reveal) and!( all(*|reveal) bottomoflibrary and!(shuffle)! )! optiontwoend revealend auto=counter(0/0,1,Lore) auto=@each my firstmain:counter(0/0,1,Lore) auto=@counteradded(0/0,1,Lore) from(this):this(counter{0/0.2.Lore}) token(Wall,Bir) @@ -40593,7 +40592,7 @@ toughness=2 [/card] [card] name=Thirst for Meaning -auto=ability$!draw:3 _ choice name(discard 2 cards) target(<2>*|myhand) reject _ if type(enchantment|myhand)~morethan~0 then choice name(discard an enchantment) target(enchantment|myhand) reject!$ +auto=ability$!draw:3 _ choice name(discard 2 cards) target(<2>*|myhand) reject _ if type(enchantment|myhand)~morethan~0 then choice name(discard an enchantment) target(enchantment|myhand) reject!$ controller text=Draw three cards. Then discard two cards unless you discard an enchantment card. mana={2}{U} type=Instant @@ -41253,7 +41252,7 @@ toughness=6 name=Titanoth Rex abilities=trample autohand=__CYCLING__({1}{G}) -autohand=@cycled(this|myHand):transforms((,newability[counter(0/0,1,Trample],newability[this(counter{0/0.1.Trample}>=1) trample target(creature|myBattlefield)])) +autohand=@cycled(this|myHand):transforms((,newability[counter(0/0,1,Trample],newability[this(counter{0/0.1.Trample}>=1) trample target(creature|myBattlefield)]))) text=Trample -- Cycling {1}{G} ({1}{G}, Discard this card: Draw a card.) -- When you cycle Titanoth Rex, put a trample counter on target creature you control. mana={7}{G}{G} type=Creature @@ -41389,7 +41388,7 @@ toughness=1 name=Tome of Legends auto=counter(0/0,1,Page) all(this) auto=@movedto(creature[Commander]|myBattlefield):conunter(0/0,1,Page) all(this) -auto=@combat (attacking) source(creature[Commander]|myBattlefield):conunter(0/0,1,Page) all(this) +auto=@combat(attacking) source(creature[Commander]|myBattlefield):conunter(0/0,1,Page) all(this) auto={1}{T}{C(0/0,-1,Page)}:Draw:1 controller text=Tome of Legends enters the battlefield with a page counter on it. -- Whenever your commander enters the battlefield or attacks, put a page counter on Tome of Legends. -- {1}, {T}, Remove a page counter from Tome of Legends: Draw a card. mana={2} @@ -43588,7 +43587,7 @@ toughness=1 [/card] [card] name=Vexing Devil -auto=ability$!name(Choose one) choice name(Damage 4) damage:4 && sacrifice notatarget(Vexing Devil|opponentbattlefield) _ choice name(Donothing) donothing)!$ opponent +auto=ability$!choice name(Do nothing) donothing _ choice name(Damage and sacrifice) damage:4 controller && sacrifice notatarget(Vexing Devil|opponentbattlefield)!$ opponent text=When Vexing Devil enters the battlefield, any opponent may have it deal 4 damage to him or her. If a player does, sacrifice Vexing Devil. mana={R} type=Creature @@ -45723,7 +45722,7 @@ toughness=4 [card] name=World Shaper auto=@combat(attacking) source(this):may deplete:3 -auto=@movedTo(this|graveyard) from(battlefield):all(land|mygraveyard) moveto(mybattlefied) +auto=_DIES_:all(land|mygraveyard) moveto(mybattlefield) and!(tap(noevent))! text=Whenever World Shaper attacks, you may put the top three cards of your library into your graveyard. -- When World Shaper dies, put all land cards from your graveyard onto the battlefield tapped. mana={3}{G} type=Creature @@ -46094,8 +46093,7 @@ toughness=8 [/card] [card] name=Zhalfirin Decoy -target=creature -auto={T}:tap(noevent) restriction{thisturn(other creature|mybattlefield)~morethan~0} +auto={T}:tap(noevent) restriction{thisturn(other creature|mybattlefield)~morethan~0} target(creature) text={T}: Tap target creature. Activate this ability only if you had a creature enter the battlefield under your control this turn. mana={1}{W} type=Creature diff --git a/projects/mtg/bin/Res/sets/primitives/mtg.txt b/projects/mtg/bin/Res/sets/primitives/mtg.txt index dbc775eda..5ade879b8 100644 --- a/projects/mtg/bin/Res/sets/primitives/mtg.txt +++ b/projects/mtg/bin/Res/sets/primitives/mtg.txt @@ -20321,7 +20321,7 @@ toughness=3 [/card] [card] name=Cliffside Lookout -auto={4}{W}:1/1 all(creature|mybattlefield) ueot +auto={4}{W}:all(creature|mybattlefield) 1/1 ueot text={4}{W}: Creatures you control get +1/+1 until end of turn. mana={W} type=Creature @@ -27705,22 +27705,22 @@ toughness=1 [/card] [card] name=Deepwood Elder -auto={1}{G}{G}{T}:name(x = 1) ueot loseabilities && losesubtypesof(land) && transforms((forest)) target(land) -auto={2}{G}{G}{T}:name(x = 2) ueot loseabilities && losesubtypesof(land) && transforms((forest)) target(<2>land) -auto={3}{G}{G}{T}:name(x = 3) ueot loseabilities && losesubtypesof(land) && transforms((forest)) target(<3>land) -auto={4}{G}{G}{T}:name(x = 4) ueot loseabilities && losesubtypesof(land) && transforms((forest)) target(<4>land) -auto={5}{G}{G}{T}:name(x = 5) ueot loseabilities && losesubtypesof(land) && transforms((forest)) target(<5>land) -auto={6}{G}{G}{T}:name(x = 6) ueot loseabilities && losesubtypesof(land) && transforms((forest)) target(<6>land) -auto={7}{G}{G}{T}:name(x = 7) ueot loseabilities && losesubtypesof(land) && transforms((forest)) target(<7>land) -auto={8}{G}{G}{T}:name(x = 8) ueot loseabilities && losesubtypesof(land) && transforms((forest)) target(<8>land) -auto={9}{G}{G}{T}:name(x = 9) ueot loseabilities && losesubtypesof(land) && transforms((forest)) target(<9>land) -auto={10}{G}{G}{T}:name(x = 10) ueot loseabilities && losesubtypesof(land) && transforms((forest)) target(<10>land) -auto={11}{G}{G}{T}:name(x = 11) ueot loseabilities && losesubtypesof(land) && transforms((forest)) target(<11>land) -auto={12}{G}{G}{T}:name(x = 12) ueot loseabilities && losesubtypesof(land) && transforms((forest)) target(<12>land) -auto={13}{G}{G}{T}:name(x = 13) ueot loseabilities && losesubtypesof(land) && transforms((forest)) target(<13>land) -auto={14}{G}{G}{T}:name(x = 14) ueot loseabilities && losesubtypesof(land) && transforms((forest)) target(<14>land) -auto={15}{G}{G}{T}:name(x = 15) ueot loseabilities && losesubtypesof(land) && transforms((forest)) target(<15>land) -auto={16}{G}{G}{T}:name(x = 16) ueot loseabilities && losesubtypesof(land) && transforms((forest)) target(<16>land) +auto={1}{G}{G}{T}{D(*|myhand)}:name(x = 1) ueot loseabilities && losesubtypesof(land) && transforms((forest)) target(land) +auto={2}{G}{G}{T}{D(*|myhand)}:name(x = 2) ueot loseabilities && losesubtypesof(land) && transforms((forest)) target(<2>land) +auto={3}{G}{G}{T}{D(*|myhand)}:name(x = 3) ueot loseabilities && losesubtypesof(land) && transforms((forest)) target(<3>land) +auto={4}{G}{G}{T}{D(*|myhand)}:name(x = 4) ueot loseabilities && losesubtypesof(land) && transforms((forest)) target(<4>land) +auto={5}{G}{G}{T}{D(*|myhand)}:name(x = 5) ueot loseabilities && losesubtypesof(land) && transforms((forest)) target(<5>land) +auto={6}{G}{G}{T}{D(*|myhand)}:name(x = 6) ueot loseabilities && losesubtypesof(land) && transforms((forest)) target(<6>land) +auto={7}{G}{G}{T}{D(*|myhand)}:name(x = 7) ueot loseabilities && losesubtypesof(land) && transforms((forest)) target(<7>land) +auto={8}{G}{G}{T}{D(*|myhand)}:name(x = 8) ueot loseabilities && losesubtypesof(land) && transforms((forest)) target(<8>land) +auto={9}{G}{G}{T}{D(*|myhand)}:name(x = 9) ueot loseabilities && losesubtypesof(land) && transforms((forest)) target(<9>land) +auto={10}{G}{G}{T}{D(*|myhand)}:name(x = 10) ueot loseabilities && losesubtypesof(land) && transforms((forest)) target(<10>land) +auto={11}{G}{G}{T}{D(*|myhand)}:name(x = 11) ueot loseabilities && losesubtypesof(land) && transforms((forest)) target(<11>land) +auto={12}{G}{G}{T}{D(*|myhand)}:name(x = 12) ueot loseabilities && losesubtypesof(land) && transforms((forest)) target(<12>land) +auto={13}{G}{G}{T}{D(*|myhand)}:name(x = 13) ueot loseabilities && losesubtypesof(land) && transforms((forest)) target(<13>land) +auto={14}{G}{G}{T}{D(*|myhand)}:name(x = 14) ueot loseabilities && losesubtypesof(land) && transforms((forest)) target(<14>land) +auto={15}{G}{G}{T}{D(*|myhand)}:name(x = 15) ueot loseabilities && losesubtypesof(land) && transforms((forest)) target(<15>land) +auto={16}{G}{G}{T}{D(*|myhand)}:name(x = 16) ueot loseabilities && losesubtypesof(land) && transforms((forest)) target(<16>land) text={X}{G}{G}, {T}, Discard a card: X target lands become Forests until end of turn. mana={G}{G} type=Creature @@ -29135,7 +29135,7 @@ toughness=1 [/card] [card] name=Devout Witness -auto={W}{T}{D(*|myhand)}:destroy target(artifact,enchantment) +auto={1}{W}{T}{D(*|myhand)}:destroy target(artifact,enchantment) text={1}{W}, {T}, Discard a card: Destroy target artifact or enchantment. mana={2}{W} type=Creature @@ -29145,6 +29145,7 @@ toughness=2 [/card] [card] name=Dewdrop Spy +abilities=flash, flying aicode=activate name(look) donothing auto=target(player) name(target player) reveal:1 optionone name(Look) target(*|reveal) doNothing optiononeend optiontwo all(*|reveal) moveto(ownerlibrary) optiontwoend revealend text=Flash -- Flying -- When Dewdrop Spy enters the battlefield, look at the top card of target player's library. @@ -40416,6 +40417,7 @@ type=Sorcery [/card] [card] name=Final-Sting Faerie +abilities=flying auto=aslongas(creature[damaged]|battlefield) destroy target(creature[damaged]) oneshot text=Flying -- When Final-Sting Faerie enters the battlefield, destroy target creature that was dealt damage this turn. mana={3}{B} @@ -41860,8 +41862,8 @@ toughness=2 [card] name=Flood Plain auto=tap(noevent) -aicode=activate moveTo(myBattlefield) target(*[forest;plains]|myLibrary) -auto={T}{S}:name(search card) reveal:plibrarycount optionone name(choose card) target(*[forest;plains]|reveal) moveto(ownerlibrary) and!( becomes(tobecast) ueot )! optiononeend optiontwo name(put back) target(<1>*|reveal) moveto(ownerlibrary) and!( all(*|reveal) moveto(ownerlibrary) and!(shuffle)! )! optiontwoend afterrevealed all(tobecast|mylibrary) moveto(ownerlibrary) and!(moveto(ownerbattlefield))! afterrevealedend revealend +aicode=activate moveTo(myBattlefield) target(*[island;plains]|myLibrary) +auto={T}{S}:name(search card) reveal:plibrarycount optionone name(choose card) target(*[island;plains]|reveal) moveto(ownerlibrary) and!( becomes(tobecast) ueot )! optiononeend optiontwo name(put back) target(<1>*|reveal) moveto(ownerlibrary) and!( all(*|reveal) moveto(ownerlibrary) and!(shuffle)! )! optiontwoend afterrevealed all(tobecast|mylibrary) moveto(ownerlibrary) and!(moveto(ownerbattlefield))! afterrevealedend revealend text=Flood Plain enters the battlefield tapped. -- {T}, Sacrifice Flood Plain: Search your library for a Plains or Island card and put it onto the battlefield. Then shuffle your library. type=Land [/card] @@ -44756,11 +44758,11 @@ type=Artifact [/card] [card] name=Gauntlet of Power -auto=choice name(green) all(this) transforms((,newability[lord(creature[green]|battlefield) 1/1],newability[lord(forest[basic]|battlefield) producecolor:green])) forever -auto=choice name(blue) all(this) transforms((,newability[lord(creature[blue]|battlefield) 1/1],newability[lord(island[basic]|battlefield) producecolor:blue])) forever -auto=choice name(red) all(this) transforms((,newability[lord(creature[red]|battlefield) 1/1],newability[lord(mountain[basic]|battlefield) producecolor:red])) forever -auto=choice name(black) all(this) transforms((,newability[lord(creature[black]|battlefield) 1/1],newability[lord(swamp[basic]|battlefield) producecolor:black])) forever -auto=choice name(white) all(this) transforms((,newability[lord(creature[white]|battlefield) 1/1],newability[lord(plains[basic]|battlefield) producecolor:white])) forever +auto=choice name(green) all(this) transforms((,newability[lord(creature[green]|battlefield) 1/1],newability[lord(*[basic]|battlefield) producecolor:green])) forever +auto=choice name(blue) all(this) transforms((,newability[lord(creature[blue]|battlefield) 1/1],newability[lord(*[basic]|battlefield) producecolor:blue])) forever +auto=choice name(red) all(this) transforms((,newability[lord(creature[red]|battlefield) 1/1],newability[lord(*[basic]|battlefield) producecolor:red])) forever +auto=choice name(black) all(this) transforms((,newability[lord(creature[black]|battlefield) 1/1],newability[lord(*[basic]|battlefield) producecolor:black])) forever +auto=choice name(white) all(this) transforms((,newability[lord(creature[white]|battlefield) 1/1],newability[lord(*[basic]|battlefield) producecolor:white])) forever text=As Gauntlet of Power enters the battlefield, choose a color. -- Creatures of the chosen color get +1/+1. -- Whenever a basic land is tapped for mana of the chosen color, its controller adds one mana of that color to his or her mana pool (in addition to the mana the land produces). mana={5} type=Artifact @@ -68654,7 +68656,7 @@ toughness=13 name=Ludevic's Test Subject abilities=defender auto={1}{U}:counter(0/0,1,Hatchling) -auto=this(counter{0/0.1.Hatchling}>4) removeallcounters(0/0,1,Hatchling) && flip(Ludevic's Abomination) +auto=@counteradded(0/0,1,Hatchling) from(this):this(counter{0/0.5.Hatchling}) removeallcounters(0/0,1,Hatchling) && flip(Ludevic's Abomination) text={1}{U}: Put a hatchling counter on Ludevic's Test Subject. Then if there are five or more hatchling counters on it, remove all of them and transform it. mana={1}{U} type=Creature @@ -70162,9 +70164,8 @@ type=Artifact [/card] [card] name=Mana Echoes -auto=@movedTo(creature|myBattlefield):may name(Add {C} for each creature that shares...) all(trigger) transforms((,newability[foreach(*[creature;share!types!]|mybattlefield) add{1} oneshot])) -auto=@movedTo(creature|opponentBattlefield):may name(Add {C} for each creature that shares...) all(trigger) transforms((,newability[foreach(*[creature;share!types!]|opponentbattlefield) add{1} opponent oneshot])) -text=Whenever a creature enters the battlefield, you may add {C} to your mana pool for each creature you control that shares a creature type with it. +auto=lord(creature) transforms((,newability[foreach(creature[share!types!]|mybattlefield) add{1} oneshot])) +text=Whenever a creature enters the battlefield, you may add {1} to your mana pool for each creature you control that shares a creature type with it. mana={2}{R}{R} type=Enchantment [/card] @@ -73566,7 +73567,6 @@ type=Sorcery [/card] [card] name=Mina and Denn, Wildborn -abilities=trample auto=maxPlay(land)+1 auto={r}{g}{h(land|mybattlefield)}:target(creature) trample ueot text=You may play an additional land on each of your turns. -- {R}{G}, Return a land you control to its owner's hand: Target creature gains trample until end of turn. @@ -88933,6 +88933,7 @@ type=Artifact [card] name=Prophetic Ravings target=creature +auto=teach(creature) haste auto=teach(creature) {t}{d(*|myhand)}:draw:1 text=Enchant creature -- Enchanted creature has haste and "{T}, Discard a card: Draw a card." mana={R} @@ -116667,7 +116668,7 @@ type=Instant [/card] [card] name=Sylvan Safekeeper -auto={S(land|myBattlefield)}:shroud target(creature) +auto={S(land|myBattlefield)}:shroud target(creature|myBattlefield) text=Sacrifice a land: Target creature you control gains shroud until end of turn. (It can't be the target of spells or abilities.) mana={G} type=Creature @@ -134019,6 +134020,7 @@ toughness=6 [/card] [card] name=Wind-Kin Raiders +abilities=flying other={improvise} name(Improvise) text=Improvise (Your artifacts can help cast this spell. Each artifact you tap after you're done activating mana abilities pays for {1}.) -- Flying mana={4}{U}{U} diff --git a/projects/mtg/src/CarouselDeckView.cpp b/projects/mtg/src/CarouselDeckView.cpp index 28af284f3..69fe2442c 100644 --- a/projects/mtg/src/CarouselDeckView.cpp +++ b/projects/mtg/src/CarouselDeckView.cpp @@ -4,8 +4,8 @@ const float CarouselDeckView::max_scale = 0.82f; const float CarouselDeckView::x_center = 180; const float CarouselDeckView::right_border = SCREEN_WIDTH + 180; -const float CarouselDeckView::slide_animation_duration = 0.6f; -const float CarouselDeckView::scroll_animation_duration = 0.3f; +const float CarouselDeckView::slide_animation_duration = 0.5f; +const float CarouselDeckView::scroll_animation_duration = 0.2f; CarouselDeckView::CarouselDeckView() : DeckView(10), mScrollOffset(0), mSlideOffset(0), mScrollEasing(mScrollOffset), mSlideEasing(mSlideOffset) diff --git a/projects/mtg/src/Rules.cpp b/projects/mtg/src/Rules.cpp index 7f041b6cd..dd4a97e72 100644 --- a/projects/mtg/src/Rules.cpp +++ b/projects/mtg/src/Rules.cpp @@ -368,21 +368,20 @@ Player * Rules::loadPlayerRandomThree(GameObserver* observer, int isAI) string lands[] = { "", "forest", "island", "mountain", "swamp", "plains", "" }; MTGDeck * tempDeck = NEW MTGDeck(MTGCollection()); - tempDeck->addRandomCards(1, 0, 0, -1, lands[color1].c_str()); - tempDeck->addRandomCards(1, 0, 0, -1, lands[color2].c_str()); - tempDeck->addRandomCards(1, 0, 0, -1, lands[color3].c_str()); - tempDeck->addRandomCards(6, 0, 0, 'R', lands[color1].c_str()); - tempDeck->addRandomCards(6, 0, 0, 'R', lands[color2].c_str()); - tempDeck->addRandomCards(6, 0, 0, 'R', lands[color3].c_str()); - tempDeck->addRandomCards(3, 0, 0, -1, "land"); + tempDeck->addRandomCards(4, 0, 0, -1, lands[color1].c_str()); + tempDeck->addRandomCards(4, 0, 0, -1, lands[color2].c_str()); + tempDeck->addRandomCards(4, 0, 0, -1, lands[color3].c_str()); + tempDeck->addRandomCards(4, 0, 0, 'R', lands[color1].c_str()); + tempDeck->addRandomCards(4, 0, 0, 'R', lands[color2].c_str()); + tempDeck->addRandomCards(4, 0, 0, 'R', lands[color3].c_str()); tempDeck->addRandomCards(1, 0, 0, 'U', "land"); tempDeck->addRandomCards(1, 0, 0, 'R', "land"); tempDeck->addRandomCards(18, 0, 0, -1, "creature", colors, nbcolors); tempDeck->addRandomCards(1, 0, 0, 'R', "creature", colors, nbcolors); tempDeck->addRandomCards(1, 0, 0, 'M', "creature", colors, nbcolors); - tempDeck->addRandomCards(3, 0, 0, -1, "sorcery", colors, nbcolors); tempDeck->addRandomCards(3, 0, 0, -1, "enchantment", colors, nbcolors); - tempDeck->addRandomCards(3, 0, 0, -1, "instant", colors, nbcolors); + tempDeck->addRandomCards(3, 0, 0, -1, "instant", colors, nbcolors); + tempDeck->addRandomCards(3, 0, 0, -1, "sorcery", colors, nbcolors); tempDeck->addRandomCards(4, 0, 0, -1, "artifact", colors, nbcolors); tempDeck->addRandomCards(1, 0, 0, -1, "planeswalker", colors, nbcolors); @@ -403,8 +402,8 @@ Player * Rules::loadPlayerRandomFive(GameObserver* observer, int isAI) MTGDeck * tempDeck = NEW MTGDeck(MTGCollection()); tempDeck->addRandomCards(20, 0, 0, -1, "land"); - tempDeck->addRandomCards(20, 0, 0, -1, "creature"); - tempDeck->addRandomCards(20, 0, 0, -1, ""); + tempDeck->addRandomCards(10, 0, 0, -1, "legendary"); + tempDeck->addRandomCards(30, 0, 0, -1, ""); string deckFile = "random"; string deckFileSmall = "random"; @@ -426,13 +425,13 @@ Player * Rules::loadPlayerHorde(GameObserver* observer, int isAI) string lands[] = { "land", "forest", "island", "mountain", "swamp", "plains" }; - const char* const multicolorTribes[] = { "Ally", "Eldrazi", "Elemental", "Golem", "Dog", "Human", "Knight", - "Myr", "Samurai", "Shaman", "Shapeshifter", "Sliver", "Soldier", "Spellshaper", "Spirit", "Warrior", "Wizard" }; - const char* const whiteTribes[] = { "Angel", "Bird", "Cat", "Cleric", "Griffin", "Kithkin", "Knight", "Soldier", "Spirit", "Wizard" }; - const char* const blueTribes[] = { "Artificer", "Bird", "Drake", "Faerie", "Illusion", "Merfolk", "Spirit", "Vedalken", "Wizard", "Zombie" }; - const char* const blackTribes[] = { "Cleric", "Demon", "Faerie", "Horror", "Pirate", "Rat", "Rogue", "Shade", "Skeleton", "Vampire", "Wizard", "Zombie" }; - const char* const redTribes[] = { "Barbarian", "Berserker", "Cat", "Devil", "Dragon", "Goblin", "Minotaur", "Ogre", "Werewolf", "Wizard" }; - const char* const greenTribes[] = { "Beast", "Cat", "Centaur", "Dinosaur", "Druid", "Elf", "Fungus", "Snake", "Spider", "Treefolk", "Werewolf", "Wizard" }; + const char* const multicolorTribes[] = { "Ally", "Construct", "Drone", "Eldrazi", "Elemental", "Golem", "Human", "Myr", + "Sliver", "Spellshaper", "Spirit", "Wizard" }; + const char* const whiteTribes[] = { "Angel", "Archer", "Bird", "Cat", "Cleric", "Griffin", "Kithkin", "Knight", "Kor", "Monk", "Rebel", "Samurai", "Scout", "Soldier", "Spirit" }; + const char* const blueTribes[] = { "Artificer", "Bird", "Drake", "Faerie", "Illusion", "Merfolk", "Mutant", "Nightmare", "Pirate", "Shapeshifter", "Sphinx", "Spirit", "Vedalken", "Wizard" }; + const char* const blackTribes[] = { "Assassin", "Cleric", "Demon", "Faerie", "Horror", "Insect", "Knight", "Nightmare", "Orc", "Pirate", "Rat", "Rogue", "Shade", "Skeleton", "Spirit", "Vampire", "Wizard", "Zombie" }; + const char* const redTribes[] = { "Artificer", "Beast", "Berserker", "Devil", "Dinosaur", "Dragon", "Dwarf", "Goblin", "Kavu", "Lizard", "Minotaur", "Ogre", "Orc", "Shaman", "Viashino", "Warrior", "Werewolf" }; + const char* const greenTribes[] = { "Archer", "Beast", "Cat", "Centaur", "Dinosaur", "Druid", "Dryad", "Elf", "Fungus", "Insect", "Kavu", "Lizard", "Mutant", "Plant", "Scout", "Shaman", "Snake", "Spider", "Treefolk", "Warrior", "Werewolf", "Wurm" }; int multicolorTribesSize = sizeof(multicolorTribes)/sizeof(multicolorTribes[0]); int whiteTribesSize = sizeof(whiteTribes)/sizeof(whiteTribes[0]); @@ -465,10 +464,10 @@ Player * Rules::loadPlayerHorde(GameObserver* observer, int isAI) } MTGDeck * tempDeck = NEW MTGDeck(MTGCollection()); - tempDeck->addRandomCards(16, 0, 0, -1, lands[tribeColor[0]].c_str()); - tempDeck->addRandomCards(4, 0, 0, 'R', lands[tribeColor[0]].c_str()); - tempDeck->addRandomCards(4, 0, 0, -1, "land"); - tempDeck->addRandomCards(21, 0, 0, -1, randomTribe); + tempDeck->addRandomCards(14, 0, 0, -1, lands[tribeColor[0]].c_str()); + tempDeck->addRandomCards(5, 0, 0, 'R', lands[tribeColor[0]].c_str()); + tempDeck->addRandomCards(5, 0, 0, -1, "land"); + tempDeck->addRandomCards(21, 0, 0, -1, randomTribe); tempDeck->addRandomCards(5, 0, 0, -1, "enchantment", tribeColor, nbColors); tempDeck->addRandomCards(5, 0, 0, -1, "instant", tribeColor, nbColors); tempDeck->addRandomCards(5, 0, 0, -1, "sorcery", tribeColor, nbColors);