Compare commits

...

26 Commits

Author SHA1 Message Date
Anthony Calosa 07e6d90c98 Merge pull request #975 from kevlahnota/master
Some fixes
2017-08-06 13:33:07 +08:00
Anthony Calosa 85231cda01 Fix Nissa's Chosen
Code seems workaround, it needs hardcoded...
2017-08-05 22:09:49 +08:00
Anthony Calosa 8549b7b1b4 Interrupt targetted abilities
This should have an option...
2017-08-05 18:52:27 +08:00
Anthony Calosa 9f58ef9916 small fixes for primitives 2017-08-05 18:16:47 +08:00
Anthony Calosa c734ee9fd1 Add exert Indicator
"*" signifies exert
2017-08-05 18:16:24 +08:00
Anthony Calosa 77d87902d9 Add restriction for exert
hasexerted and notexerted
2017-08-05 18:15:44 +08:00
Anthony Calosa b5c8656ac9 Fix Blink 2017-08-05 18:15:13 +08:00
Anthony Calosa 28f6b73da6 Merge remote-tracking branch 'refs/remotes/WagicProject/master' 2017-08-03 20:03:26 +08:00
Anthony Calosa 521b505543 Merge pull request #974 from kevlahnota/master
Fix morbid
2017-08-03 19:54:35 +08:00
Anthony Calosa c5a3310103 quick Fix for zerodead 2017-08-03 18:32:16 +08:00
Anthony Calosa 0c053c713a fix morbid
also added zerodead restriction - returns true if you dont have any
creature that died this turn
2017-08-03 18:27:45 +08:00
Anthony Calosa bc06f93aae Merge remote-tracking branch 'refs/remotes/WagicProject/master' 2017-08-03 15:52:56 +08:00
Anthony Calosa 8e919aeeb1 Merge pull request #973 from kevlahnota/master
Support for AKH/HOU Mechanics
2017-08-03 10:36:15 +08:00
Anthony Calosa 6bd09e42e0 Add support for Amonkhet Mechanics
and fix some cards.
Added exerted trigger, event and add removemc keyword inside transforms
ability so we can soft code Embalm and Eternalize...
2017-08-03 09:49:37 +08:00
Anthony Calosa 1f670b9919 Merge pull request #12 from WagicProject/master
Update unsuported cards, set a condition for showing poison counters …
2017-08-03 09:16:30 +08:00
punkeduard c805a58fb0 Update unsuported cards, set a condition for showing poison counters and energy counter, added tribal al card type check, show the amount o 2017-08-02 18:42:52 -05:00
Anthony Calosa 34517004df Merge remote-tracking branch 'refs/remotes/WagicProject/master' 2017-05-09 12:38:59 +08:00
Anthony Calosa b0506bcd96 Merge pull request #968 from kevlahnota/master
readded fixes by punkeduard
2017-05-09 12:29:16 +08:00
Anthony Calosa 7a3a6c04a6 readded fixes by punkeduard 2017-05-09 12:28:07 +08:00
Anthony Calosa 54e4b08e1f Merge pull request #11 from WagicProject/master
test pull
2017-05-09 12:25:45 +08:00
Anthony Calosa 67c22c5186 Merge remote-tracking branch 'refs/remotes/WagicProject/master' 2017-05-09 12:09:12 +08:00
punkeduard 87aba86fa8 Revert "Fixing bugs in the primitives"
This reverts commit 665f8ce755.
2017-05-08 22:17:27 -05:00
Rolzad73 28ea300f42 - fix forward declaration 2017-05-08 19:39:32 -04:00
Rolzad73 858c26b46a Merge pull request #966 from WagicProject/key_bind_changes
Key bind changes
2017-05-08 19:03:03 -04:00
Rolzad73 70a6c7149c - semi cleanup 2017-05-08 19:01:41 -04:00
Rolzad73 b4a34216c8 - updated Qt keybinding translation 2017-05-08 18:58:47 -04:00
16 changed files with 244 additions and 205 deletions
-3
View File
@@ -1,3 +0,0 @@
maxGrade=0: Borderline (99% OK)
keybindings_sdl=13:2,27:2,32:10,97:7,98:5,100:6,101:15,102:16,105:11,106:12,107:13,108:10,113:14,115:9,119:8,1073741903:6,1073741904:7,1073741905:9,1073741906:8,1073741912:2,1073741952:14,1073741953:13,1073742048:3,1073742052:3,1073742094:2
aidecks=10
+22 -22
View File
@@ -10233,7 +10233,7 @@ type=Instant
[/card] [/card]
[card] [card]
name=Bedlam Reveler name=Bedlam Reveler
autohand=affinity(instant,sorcery|mygraveyard) reduce({1}) anyzone=foreach(instant,sorcery|mygraveyard) changecost(colorless:-1) forcedalive
auto=@movedTo(*[-creature]|mystack):1/1 ueot auto=@movedTo(*[-creature]|mystack):1/1 ueot
auto=reject all(*|myhand) && draw:3 auto=reject all(*|myhand) && draw:3
text=Bedlam Reveler costs {1} less to cast for each instant and sorcery card in your graveyard. -- Prowess (Whenever you cast a noncreature spell, this creature gets +1/+1 until end of turn.) -- When Bedlam Reveler enters the battlefield, discard your hand, then draw three cards. text=Bedlam Reveler costs {1} less to cast for each instant and sorcery card in your graveyard. -- Prowess (Whenever you cast a noncreature spell, this creature gets +1/+1 until end of turn.) -- When Bedlam Reveler enters the battlefield, discard your hand, then draw three cards.
@@ -11325,7 +11325,7 @@ type=Enchantment
[card] [card]
name=Blasphemous Act name=Blasphemous Act
auto=damage:13 all(creature) auto=damage:13 all(creature)
autohand=affinity(creature|battlefield) reduce({1}) anyzone=foreach(creature|battlefield) changecost(colorless:-1) forcedalive
text=Blasphemous Act costs 1 less to cast for each creature on the battlefield. -- Blasphemous Act deals 13 damage to each creature. text=Blasphemous Act costs 1 less to cast for each creature on the battlefield. -- Blasphemous Act deals 13 damage to each creature.
mana={8}{R} mana={8}{R}
type=Sorcery type=Sorcery
@@ -35600,7 +35600,7 @@ type=Instant
[card] [card]
name=Emeria Angel name=Emeria Angel
abilities=flying abilities=flying
auto=@movedTo(land|myBattlefield):may token(Bird,creature bird, 1/1,flying white) auto=@movedTo(land|myBattlefield):may token(Bird,creature bird, 1/1,flying,white)
text=Flying -- Landfall - Whenever a land enters the battlefield under your control, you may put a 1/1 white Bird creature token with flying onto the battlefield. text=Flying -- Landfall - Whenever a land enters the battlefield under your control, you may put a 1/1 white Bird creature token with flying onto the battlefield.
mana={2}{W}{W} mana={2}{W}{W}
type=Creature type=Creature
@@ -41166,8 +41166,7 @@ type=Enchantment
[card] [card]
name=Flagstones of Trokair name=Flagstones of Trokair
auto={T}:Add{W} auto={T}:Add{W}
aicode=activate moveTo(myBattlefield) and!(tap(noevent))! target(plains|myLibrary) auto=@movedTo(this|graveyard) from(battlefield):name(search card) ability$!moveTo(myBattlefield) and!(tap(noevent))! target(plains|myLibrary)!$ controller
auto=@movedTo(this|graveyard) from(battlefield):name(search card) reveal:plibrarycount optionone name(choose card) target(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(myBattlefield) and!(tap(noevent))!)! afterrevealedend revealend
text={T}: Add {W} to your mana pool. -- When Flagstones of Trokair is put into a graveyard from the battlefield, you may search your library for a Plains card and put it onto the battlefield tapped. If you do, shuffle your library. text={T}: Add {W} to your mana pool. -- When Flagstones of Trokair is put into a graveyard from the battlefield, you may search your library for a Plains card and put it onto the battlefield tapped. If you do, shuffle your library.
type=Legendary Land type=Legendary Land
[/card] [/card]
@@ -42426,7 +42425,7 @@ type=Sorcery
[/card] [/card]
[card] [card]
name=Flurry of Wings name=Flurry of Wings
auto=foreach(creature[attacking]) token(Bird Soldier,Creature Bird Soldier,1/1,white flying) auto=foreach(creature[attacking]) token(Bird Soldier,Creature Bird Soldier,1/1,white,flying)
text=Put X 1/1 white Bird Soldier creature tokens with flying onto the battlefield, where X is the number of attacking creatures. text=Put X 1/1 white Bird Soldier creature tokens with flying onto the battlefield, where X is the number of attacking creatures.
mana={G}{W}{U} mana={G}{W}{U}
type=Instant type=Instant
@@ -46209,7 +46208,7 @@ toughness=4
[/card] [/card]
[card] [card]
name=Ghoultree name=Ghoultree
autohand=affinity(creature|mygraveyard) reduce({1}) anyzone=foreach(creature|mygraveyard) changecost(colorless:-1) forcedalive
text=Ghoultree cost {1} less to cast for each creature card in your graveyard. text=Ghoultree cost {1} less to cast for each creature card in your graveyard.
mana={7}{G} mana={7}{G}
type=Creature type=Creature
@@ -60797,7 +60796,7 @@ toughness=3
[card] [card]
name=Jotun Owl Keeper name=Jotun Owl Keeper
auto=cumulativeupcost[{WU}] sacrifice auto=cumulativeupcost[{WU}] sacrifice
auto=@movedTo(this|graveyard) from(battlefield):thisforeach(counter{0/0.1.Age}) token(Bird,Creature Bird,1/1,white flying) auto=@movedTo(this|graveyard) from(battlefield):thisforeach(counter{0/0.1.Age}) token(Bird,Creature Bird,1/1,white,flying)
text=Cumulative upkeep {W} or {U} (At the beginning of your upkeep, put an age counter on this permanent, then sacrifice it unless you pay its upkeep cost for each age counter on it.) -- When Jotun Owl Keeper dies, put a 1/1 white Bird creature token with flying onto the battlefield for each age counter on it. text=Cumulative upkeep {W} or {U} (At the beginning of your upkeep, put an age counter on this permanent, then sacrifice it unless you pay its upkeep cost for each age counter on it.) -- When Jotun Owl Keeper dies, put a 1/1 white Bird creature token with flying onto the battlefield for each age counter on it.
mana={2}{W} mana={2}{W}
type=Creature type=Creature
@@ -64909,7 +64908,7 @@ toughness=5
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) ability$! name(search forest) notatarget(forest|mylibrary) moveto(ownerbattlefield) and!(tap(noevent))! !$ controller && ability$! name(search plains) notatarget(plains|mylibrary) moveto(ownerbattlefield) and!(tap(noevent))! !$ controller 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]
@@ -79818,7 +79817,7 @@ name=Niblis of the Breath
abilities=flying abilities=flying
auto={U}{T}:may tap target(creature) auto={U}{T}:may tap target(creature)
auto={U}{T}:may untap target(creature) auto={U}{T}:may untap target(creature)
text=Flying -- Whenever Niblis of the Urn attacks, you may tap target creature. text=Flying -- {U}, {T}: You may tap or untap target creature.
mana={2}{U} mana={2}{U}
type=Creature type=Creature
subtype=Spirit subtype=Spirit
@@ -80577,7 +80576,7 @@ subtype=Nissa
[/card] [/card]
[card] [card]
name=Nissa's Chosen name=Nissa's Chosen
auto=@movedTo(graveyard) from(this|battlefield):all(this) bottomoflibrary auto=@movedTo(graveyard) from(this|battlefield):all(trigger[from]) bottomoflibrary
text=If Nissa's Chosen would die, put it on the bottom of its owner's library instead. text=If Nissa's Chosen would die, put it on the bottom of its owner's library instead.
mana={G}{G} mana={G}{G}
type=Creature type=Creature
@@ -83413,11 +83412,11 @@ toughness=2
[/card] [/card]
[card] [card]
name=Ordered Migration name=Ordered Migration
auto=aslongas(forest|myBattlefield) token(Bird,Creature Bird,1/1,blue flying) auto=aslongas(forest|myBattlefield) token(Bird,Creature Bird,1/1,blue,flying)
auto=aslongas(mountain|myBattlefield) token(Bird,Creature Bird,1/1,blue flying) auto=aslongas(mountain|myBattlefield) token(Bird,Creature Bird,1/1,blue,flying)
auto=aslongas(island|myBattlefield) token(Bird,Creature Bird,1/1,blue flying) auto=aslongas(island|myBattlefield) token(Bird,Creature Bird,1/1,blue,flying)
auto=aslongas(swamp|myBattlefield) token(Bird,Creature Bird,1/1,blue flying) auto=aslongas(swamp|myBattlefield) token(Bird,Creature Bird,1/1,blue,flying)
auto=aslongas(plains|myBattlefield) token(Bird,Creature Bird,1/1,blue flying) auto=aslongas(plains|myBattlefield) token(Bird,Creature Bird,1/1,blue,flying)
text=Domain - Put a 1/1 blue Bird creature token with flying onto the battlefield for each basic land type among lands you control. text=Domain - Put a 1/1 blue Bird creature token with flying onto the battlefield for each basic land type among lands you control.
mana={3}{W}{U} mana={3}{W}{U}
type=Sorcery type=Sorcery
@@ -90652,8 +90651,8 @@ toughness=5
[card] [card]
name=Quarantine Field name=Quarantine Field
auto=counter(0/0,xx,Isolation) auto=counter(0/0,xx,Isolation)
auto=(blink)forsrc target(<prexx>*[-land]|opponentbattlefield) auto=this(variable{xx} >0) (blink)forsrc target(<upto:counter{0%0.1.Isolation}>*[-land]|opponentbattlefield)
text=Quarantine Field enters the battlefield with X isolation counters on it. -- When Quarantine Field enters the battlefield, for each isolation counter on it, exile up to one target nonland permanent an opponent controls until Quarantine Field leaves the battlefield. (WORKAROUND ONLY EXILES UP TO X AND NOT FOR EACH COUNTER) text=Quarantine Field enters the battlefield with X isolation counters on it. -- When Quarantine Field enters the battlefield, for each isolation counter on it, exile up to one target nonland permanent an opponent controls until Quarantine Field leaves the battlefield.
mana={X}{X}{W}{W} mana={X}{X}{W}{W}
type=Enchantment type=Enchantment
[/card] [/card]
@@ -106337,7 +106336,8 @@ toughness=6
[/card] [/card]
[card] [card]
name=Simoon name=Simoon
auto=damage:1 all(creature|opponentBattlefield) target=opponent
auto=damage:1 all(creature|targetedpersonsbattlefield)
text=Simoon deals 1 damage to each creature target opponent controls. text=Simoon deals 1 damage to each creature target opponent controls.
mana={R}{G} mana={R}{G}
type=Instant type=Instant
@@ -109371,7 +109371,7 @@ type=Instant
[/card] [/card]
[card] [card]
name=Solitary Confinement name=Solitary Confinement
auto=upcost[{D(*|myhand)}] sacrifice auto=@each my upkeep :name(discard or sacrifice) ability$!if type(*|myhand)~morethan~0 then choice reject notatarget(*|myhand) _ choice sacrifice all(mystored)!$ controller
auto=phasealter(remove,draw,controller) auto=phasealter(remove,draw,controller)
abilities=playershroud abilities=playershroud
auto=preventalldamage to(controller) auto=preventalldamage to(controller)
@@ -114073,7 +114073,7 @@ toughness=2
[/card] [/card]
[card] [card]
name=Stone Idol Trap name=Stone Idol Trap
autohand=affinity(creature[attacking]|battlefield) reduce({1}) anyzone=foreach(creature[attacking]|battlefield) changecost(colorless:-1) forcedalive
auto=token(Construct,Artifact Creature Construct,6/12,trample) and!( transforms((,newability[@next endofturn:moveTo(exile)])) forever )! auto=token(Construct,Artifact Creature Construct,6/12,trample) and!( transforms((,newability[@next endofturn:moveTo(exile)])) forever )!
text=Stone Idol Trap costs {1} less to cast for each attacking creature. -- Put a 6/12 colorless Construct artifact creature token with trample onto the battlefield. Exile it at the beginning of your next end step. text=Stone Idol Trap costs {1} less to cast for each attacking creature. -- Put a 6/12 colorless Construct artifact creature token with trample onto the battlefield. Exile it at the beginning of your next end step.
mana={5}{R} mana={5}{R}
@@ -138100,4 +138100,4 @@ type=Land Creature
subtype=Forest Dryad subtype=Forest Dryad
power=1 power=1
toughness=1 toughness=1
[/card] [/card]
@@ -1936,12 +1936,6 @@ mana={3}{R}
type=Enchantment type=Enchantment
[/card] [/card]
[card] [card]
name=Burning Wish
text=You may choose a sorcery card you own from outside the game, reveal that card, and put it into your hand. Exile Burning Wish.
mana={1}{R}
type=Sorcery
[/card]
[card]
name=Burning-Eye Zubera name=Burning-Eye Zubera
text=When Burning-Eye Zubera dies, if 4 or more damage was dealt to it this turn, Burning-Eye Zubera deals 3 damage to target creature or player. text=When Burning-Eye Zubera dies, if 4 or more damage was dealt to it this turn, Burning-Eye Zubera deals 3 damage to target creature or player.
mana={2}{R}{R} mana={2}{R}{R}
@@ -3340,15 +3334,6 @@ mana={4}{U}{U}
type=Instant type=Instant
[/card] [/card]
[card] [card]
name=Courser of Kruphix
text=Play with the top card of your library revealed. -- You may play the top card of your library if it's a land card. -- Whenever a land enters the battlefield under your control, you gain 1 life.
mana={1}{G}{G}
type=Enchantment Creature
subtype=Centaur
power=2
toughness=4
[/card]
[card]
name=Covenant of Minds name=Covenant of Minds
text=Reveal the top three cards of your library. Target opponent may choose to put those cards into your hand. If he or she doesn't, put those cards into your graveyard and draw five cards. text=Reveal the top three cards of your library. Target opponent may choose to put those cards into your hand. If he or she doesn't, put those cards into your graveyard and draw five cards.
mana={4}{U} mana={4}{U}
@@ -3468,12 +3453,6 @@ mana={4}
type=Artifact type=Artifact
[/card] [/card]
[card] [card]
name=Crown of Convergence
text=Play with the top card of your library revealed. -- As long as the top card of your library is a creature card, creatures you control that share a color with that card get +1/+1. -- {G}{W}: Put the top card of your library on the bottom of your library.
mana={2}
type=Artifact
[/card]
[card]
name=Crown of Doom name=Crown of Doom
text=Whenever a creature attacks you or a planeswalker you control, it gets +2/+0 until end of turn. -- {2}: Target player other than Crown of Doom's owner gains control of it. Activate this ability only during your turn. text=Whenever a creature attacks you or a planeswalker you control, it gets +2/+0 until end of turn. -- {2}: Target player other than Crown of Doom's owner gains control of it. Activate this ability only during your turn.
mana={3} mana={3}
@@ -3585,12 +3564,6 @@ mana={4}{U}{U}
type=Sorcery type=Sorcery
[/card] [/card]
[card] [card]
name=Cunning Wish
text=You may choose an instant card you own from outside the game, reveal that card, and put it into your hand. Exile Cunning Wish.
mana={2}{U}
type=Instant
[/card]
[card]
name=Curious Homunculus name=Curious Homunculus
text={T}: Add {C} to your mana pool. Spend this mana only to cast an instant or sorcery spell. -- At the beginning of your upkeep, if there are three or more instant and/or sorcery cards in your graveyard, transform Curious Homunculus. text={T}: Add {C} to your mana pool. Spend this mana only to cast an instant or sorcery spell. -- At the beginning of your upkeep, if there are three or more instant and/or sorcery cards in your graveyard, transform Curious Homunculus.
mana={1}{U} mana={1}{U}
@@ -4008,12 +3981,6 @@ mana={R}
type=Instant type=Instant
[/card] [/card]
[card] [card]
name=Death Wish
text=You may choose a card you own from outside the game and put it into your hand. You lose half your life, rounded up. Exile Death Wish.
mana={1}{B}{B}
type=Sorcery
[/card]
[card]
name=Death-Mask Duplicant name=Death-Mask Duplicant
text=Imprint — {1}: Exile target creature card from your graveyard. -- As long as a card exiled with Death-Mask Duplicant has flying, Death-Mask Duplicant has flying. The same is true for fear, first strike, double strike, haste, landwalk, protection, and trample. text=Imprint — {1}: Exile target creature card from your graveyard. -- As long as a card exiled with Death-Mask Duplicant has flying, Death-Mask Duplicant has flying. The same is true for fear, first strike, double strike, haste, landwalk, protection, and trample.
mana={7} mana={7}
@@ -5321,7 +5288,7 @@ mana={2}{G}{G}
type=Sorcery type=Sorcery
[/card] [/card]
[card] [card]
name=Evasive Action name=
text=Domain — Counter target spell unless its controller pays {1} for each basic land type among lands you control. text=Domain — Counter target spell unless its controller pays {1} for each basic land type among lands you control.
mana={1}{U} mana={1}{U}
type=Instant type=Instant
@@ -6325,12 +6292,6 @@ mana={1}{R}{R}{R}
type=Enchantment type=Enchantment
[/card] [/card]
[card] [card]
name=Future Sight
text=Play with the top card of your library revealed. -- You may play the top card of your library.
mana={2}{U}{U}{U}
type=Enchantment
[/card]
[card]
name=Gabriel Angelfire name=Gabriel Angelfire
text=At the beginning of your upkeep, choose flying, first strike, trample, or rampage 3. Gabriel Angelfire gains that ability until your next upkeep. (Whenever a creature with rampage 3 becomes blocked, it gets +3/+3 until end of turn for each creature blocking it beyond the first.) text=At the beginning of your upkeep, choose flying, first strike, trample, or rampage 3. Gabriel Angelfire gains that ability until your next upkeep. (Whenever a creature with rampage 3 becomes blocked, it gets +3/+3 until end of turn for each creature blocking it beyond the first.)
mana={3}{G}{G}{W}{W} mana={3}{G}{G}{W}{W}
@@ -6355,15 +6316,6 @@ mana={3}{G}
type=Sorcery type=Sorcery
[/card] [/card]
[card] [card]
name=Gaea's Herald
text=Creature spells can't be countered.
mana={1}{G}
type=Creature
subtype=Elf
power=1
toughness=1
[/card]
[card]
name=Gaea's Liege name=Gaea's Liege
text=As long as Gaea's Liege isn't attacking, its power and toughness are each equal to the number of Forests you control. As long as Gaea's Liege is attacking, its power and toughness are each equal to the number of Forests defending player controls. -- {T}: Target land becomes a Forest until Gaea's Liege leaves the battlefield. text=As long as Gaea's Liege isn't attacking, its power and toughness are each equal to the number of Forests you control. As long as Gaea's Liege is attacking, its power and toughness are each equal to the number of Forests defending player controls. -- {T}: Target land becomes a Forest until Gaea's Liege leaves the battlefield.
mana={3}{G}{G}{G} mana={3}{G}{G}{G}
@@ -6415,16 +6367,6 @@ mana={2}{R}
type=Instant type=Instant
[/card] [/card]
[card] [card]
name=Garruk's Horde
abilities=trample
text=Trample -- Play with the top card of your library revealed. -- You may cast the top card of your library if it's a creature card. (Do this only any time you could cast that creature card. You still pay the spell's costs.)
mana={5}{G}{G}
type=Creature
subtype=Beast
power=7
toughness=7
[/card]
[card]
name=Garrulous Sycophant name=Garrulous Sycophant
text=At the beginning of your end step, if you're the monarch, each opponent loses 1 life and you gain 1 life. text=At the beginning of your end step, if you're the monarch, each opponent loses 1 life and you gain 1 life.
mana={2}{B} mana={2}{B}
@@ -6701,16 +6643,6 @@ power=5
toughness=5 toughness=5
[/card] [/card]
[card] [card]
name=Gisela, the Broken Blade
abilities=flying,first strike,lifelink
text=Flying, first strike, lifelink -- At the beginning of your end step, if you both own and control Gisela, the Broken Blade and a creature named Bruna, the Fading Light, exile them, then meld them into Brisela, Voice of Nightmares.
mana={2}{W}{W}
type=Legendary Creature
subtype=Angel Horror
power=4
toughness=3
[/card]
[card]
name=Give // Take name=Give // Take
text=Put three +1/+1 counters on target creature. -- // -- Remove all +1/+1 counters from target creature you control. Draw that many cards. -- -- Fuse (You may cast one or both halves of this card from your hand.) text=Put three +1/+1 counters on target creature. -- // -- Remove all +1/+1 counters from target creature you control. Draw that many cards. -- -- Fuse (You may cast one or both halves of this card from your hand.)
mana={2}{G} // {2}{U} mana={2}{G} // {2}{U}
@@ -6828,12 +6760,6 @@ power=1
toughness=1 toughness=1
[/card] [/card]
[card] [card]
name=Glittering Wish
text=You may choose a multicolored card you own from outside the game, reveal that card, and put it into your hand. Exile Glittering Wish.
mana={G}{W}
type=Sorcery
[/card]
[card]
name=Global Ruin name=Global Ruin
text=Each player chooses from the lands he or she controls a land of each basic land type, then sacrifices the rest. text=Each player chooses from the lands he or she controls a land of each basic land type, then sacrifices the rest.
mana={4}{W} mana={4}{W}
@@ -7045,15 +6971,6 @@ power=1
toughness=1 toughness=1
[/card] [/card]
[card] [card]
name=Goblin Spy
text=Play with the top card of your library revealed.
mana={R}
type=Creature
subtype=Goblin Rogue
power=1
toughness=1
[/card]
[card]
name=Goblin Test Pilot name=Goblin Test Pilot
abilities=flying abilities=flying
text=Flying -- {T}: Goblin Test Pilot deals 2 damage to target creature or player chosen at random. text=Flying -- {T}: Goblin Test Pilot deals 2 damage to target creature or player chosen at random.
@@ -7092,12 +7009,6 @@ type=Legendary Artifact
subtype=Equipment subtype=Equipment
[/card] [/card]
[card] [card]
name=Golden Wish
text=You may choose an artifact or enchantment card you own from outside the game, reveal that card, and put it into your hand. Exile Golden Wish.
mana={3}{W}{W}
type=Sorcery
[/card]
[card]
name=Goldenhide Ox name=Goldenhide Ox
text=Constellation — Whenever Goldenhide Ox or another enchantment enters the battlefield under your control, target creature must be blocked this turn if able. text=Constellation — Whenever Goldenhide Ox or another enchantment enters the battlefield under your control, target creature must be blocked this turn if able.
mana={5}{G} mana={5}{G}
@@ -7624,15 +7535,6 @@ type=Artifact
subtype=Equipment subtype=Equipment
[/card] [/card]
[card] [card]
name=Hanweir, the Writhing Township
text=Whenever Hanweir Garrison attacks, put two 1/1 red Human creature tokens onto the battlefield tapped and attacking. -- (Melds with Hanweir Battlements.)
mana={2}{R}
type=Creature
subtype=Human Soldier
power=2
toughness=3
[/card]
[card]
name=Harbinger of the Tides name=Harbinger of the Tides
text=You may cast Harbinger of the Tides as though it had flash if you pay {2} more to cast it. (You may cast it any time you could cast an instant.) -- When Harbinger of the Tides enters the battlefield, you may return target tapped creature an opponent controls to its owner's hand. text=You may cast Harbinger of the Tides as though it had flash if you pay {2} more to cast it. (You may cast it any time you could cast an instant.) -- When Harbinger of the Tides enters the battlefield, you may return target tapped creature an opponent controls to its owner's hand.
mana={U}{U} mana={U}{U}
@@ -9828,12 +9730,6 @@ mana={1}{R}{R}
type=World Enchantment type=World Enchantment
[/card] [/card]
[card] [card]
name=Lantern of Insight
text=Each player plays with the top card of his or her library revealed. -- {T}, Sacrifice Lantern of Insight: Target player shuffles his or her library.
mana={1}
type=Artifact
[/card]
[card]
name=Laquatus's Disdain name=Laquatus's Disdain
text=Counter target spell cast from a graveyard. -- Draw a card. text=Counter target spell cast from a graveyard. -- Draw a card.
mana={1}{U} mana={1}{U}
@@ -10230,12 +10126,6 @@ power=*
toughness=* toughness=*
[/card] [/card]
[card] [card]
name=Living Wish
text=You may choose a creature or land card you own from outside the game, reveal that card, and put it into your hand. Exile Living Wish.
mana={1}{G}
type=Sorcery
[/card]
[card]
name=Loafing Giant name=Loafing Giant
text=Whenever Loafing Giant attacks or blocks, put the top card of your library into your graveyard. If that card is a land card, prevent all combat damage Loafing Giant would deal this turn. text=Whenever Loafing Giant attacks or blocks, put the top card of your library into your graveyard. If that card is a land card, prevent all combat damage Loafing Giant would deal this turn.
mana={4}{R} mana={4}{R}
@@ -10468,15 +10358,6 @@ power=5
toughness=5 toughness=5
[/card] [/card]
[card] [card]
name=Magus of the Future
text=Play with the top card of your library revealed. -- You may play the top card of your library.
mana={2}{U}{U}{U}
type=Creature
subtype=Human Wizard
power=2
toughness=3
[/card]
[card]
name=Magus of the Scroll name=Magus of the Scroll
text={3}, {T}: Name a card. Reveal a card at random from your hand. If it's the named card, Magus of the Scroll deals 2 damage to target creature or player. text={3}, {T}: Name a card. Reveal a card at random from your hand. If it's the named card, Magus of the Scroll deals 2 damage to target creature or player.
mana={R} mana={R}
@@ -10854,15 +10735,6 @@ mana={4}{R}
type=Instant type=Instant
[/card] [/card]
[card] [card]
name=Melek, Izzet Paragon
text=Play with the top card of your library revealed. -- You may cast the top card of your library if it's an instant or sorcery card. -- Whenever you cast an instant or sorcery spell from your library, copy it. You may choose new targets for the copy.
mana={4}{U}{R}
type=Legendary Creature
subtype=Weird Wizard
power=2
toughness=4
[/card]
[card]
name=Meletis Charlatan name=Meletis Charlatan
text={2}{U}, {T}: The controller of target instant or sorcery spell copies it. That player may choose new targets for the copy. text={2}{U}, {T}: The controller of target instant or sorcery spell copies it. That player may choose new targets for the copy.
mana={2}{U} mana={2}{U}
@@ -11511,15 +11383,6 @@ power=3
toughness=3 toughness=3
[/card] [/card]
[card] [card]
name=Mul Daya Channelers
text=Play with the top card of your library revealed. -- As long as the top card of your library is a creature card, Mul Daya Channelers gets +3/+3. -- As long as the top card of your library is a land card, Mul Daya Channelers has "{T}: Add two mana of any one color to your mana pool."
mana={1}{G}{G}
type=Creature
subtype=Elf Druid Shaman
power=2
toughness=2
[/card]
[card]
name=Multani's Presence name=Multani's Presence
text=Whenever a spell you've cast is countered, draw a card. text=Whenever a spell you've cast is countered, draw a card.
mana={G} mana={G}
@@ -12475,15 +12338,6 @@ power=3
toughness=1 toughness=1
[/card] [/card]
[card] [card]
name=Oracle of Mul Daya
text=You may play an additional land on each of your turns. -- Play with the top card of your library revealed. -- You may play the top card of your library if it's a land card.
mana={3}{G}
type=Creature
subtype=Elf Shaman
power=2
toughness=2
[/card]
[card]
name=Oracle's Attendants name=Oracle's Attendants
text={T}: All damage that would be dealt to target creature this turn by a source of your choice is dealt to Oracle's Attendants instead. text={T}: All damage that would be dealt to target creature this turn by a source of your choice is dealt to Oracle's Attendants instead.
mana={3}{W} mana={3}{W}
@@ -18201,12 +18055,6 @@ power=3
toughness=3 toughness=3
[/card] [/card]
[card] [card]
name=Temporal Aperture
text={5}, {T}: Shuffle your library, then reveal the top card. Until end of turn, for as long as that card remains on top of your library, play with the top card of your library revealed and you may play that card without paying its mana cost. (If it has X in its mana cost, X is 0.)
mana={2}
type=Artifact
[/card]
[card]
name=Temporal Extortion name=Temporal Extortion
text=When you cast Temporal Extortion, any player may pay half his or her life, rounded up. If a player does, counter Temporal Extortion. -- Take an extra turn after this one. text=When you cast Temporal Extortion, any player may pay half his or her life, rounded up. If a player does, counter Temporal Extortion. -- Take an extra turn after this one.
mana={B}{B}{B}{B} mana={B}{B}{B}{B}
@@ -19380,15 +19228,6 @@ mana={W}
type=Instant type=Instant
[/card] [/card]
[card] [card]
name=Vampire Nocturnus
text=Play with the top card of your library revealed. -- As long as the top card of your library is black, Vampire Nocturnus and other Vampire creatures you control get +2/+1 and have flying.
mana={1}{B}{B}{B}
type=Creature
subtype=Vampire
power=3
toughness=3
[/card]
[card]
name=Vandalize name=Vandalize
text=Choose one or both — -- • Destroy target artifact. -- • Destroy target land. text=Choose one or both — -- • Destroy target artifact. -- • Destroy target land.
mana={4}{R} mana={4}{R}
+74
View File
@@ -1406,6 +1406,28 @@ public:
} }
}; };
class TrCardExerted: public Trigger
{
public:
TrCardExerted(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, bool once = false) :
Trigger(observer, id, source, once, tc)
{
}
int triggerOnEventImpl(WEvent * event)
{
WEventCardExerted * e = dynamic_cast<WEventCardExerted *> (event);
if (!e) return 0;
if (!tc->canTarget(e->card)) return 0;
return 1;
}
TrCardExerted * clone() const
{
return NEW TrCardExerted(*this);
}
};
class TrCombatTrigger: public Trigger class TrCombatTrigger: public Trigger
{ {
public: public:
@@ -5174,6 +5196,7 @@ public:
list<int> oldcolors; list<int> oldcolors;
list<int> oldtypes; list<int> oldtypes;
vector<int> dontremove; vector<int> dontremove;
bool removemc;
bool addNewColors; bool addNewColors;
bool remove; bool remove;
bool removeCreatureSubtypes; bool removeCreatureSubtypes;
@@ -7290,6 +7313,57 @@ public:
return NEW AProvoke(*this); return NEW AProvoke(*this);
} }
}; };
//exert
class AExert: public InstantAbility
{
public:
MTGAbility * andAbility;
AExert(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target) :
InstantAbility(observer, _id, _source)
{
target = _target;
andAbility = NULL;
}
int resolve()
{
MTGCardInstance * card = (MTGCardInstance *) target;
if (card)
{
card->exerted = true;
WEvent * e = NEW WEventCardExerted(card);
game->receiveEvent(e);
if(andAbility)
{
MTGAbility * andAbilityClone = andAbility->clone();
andAbilityClone->target = card;
if(andAbility->oneShot)
{
andAbilityClone->resolve();
SAFE_DELETE(andAbilityClone);
}
else
{
andAbilityClone->addToGame();
}
}
}
return 1;
}
const string getMenuText()
{
return "Exert";
}
virtual ostream& toString(ostream& out) const
{
out << "AAExert ::: (";
return InstantAbility::toString(out) << ")";
}
AExert * clone() const
{
return NEW AExert(*this);
}
};
//------------------ //------------------
//trigger regen //trigger regen
class ATriggerRegen: public InstantAbility class ATriggerRegen: public InstantAbility
+1
View File
@@ -90,6 +90,7 @@ public:
bool blinked; bool blinked;
bool isExtraCostTarget; bool isExtraCostTarget;
bool morphed; bool morphed;
bool exerted;
bool turningOver; bool turningOver;
bool isMorphed; bool isMorphed;
bool isFlipped; bool isFlipped;
+6
View File
@@ -205,6 +205,12 @@ struct WEventCardCycle : public WEventCardUpdate {
virtual Targetable * getTarget(int target); virtual Targetable * getTarget(int target);
}; };
//event when card is exerted.
struct WEventCardExerted : public WEventCardUpdate {
WEventCardExerted(MTGCardInstance * card);
virtual Targetable * getTarget(int target);
};
//Event when a card's "defenser" status changes //Event when a card's "defenser" status changes
//before : attacker that card was blocking previously //before : attacker that card was blocking previously
//after: attacker that card is blocking now //after: attacker that card is blocking now
+3 -2
View File
@@ -711,7 +711,8 @@ int ActionStack::addAbility(MTGAbility * ability)
if (!observer->players[0]->isAI() && ability->source->controller() == observer->players[0] && 0 if (!observer->players[0]->isAI() && ability->source->controller() == observer->players[0] && 0
== options[Options::INTERRUPTMYABILITIES].number) == options[Options::INTERRUPTMYABILITIES].number)
{ {
if(observer->gameType() == GAME_TYPE_MOMIR && ability->aType == MTGAbility::FORCED_TOKEN_CREATOR) if((observer->gameType() == GAME_TYPE_MOMIR && ability->aType == MTGAbility::FORCED_TOKEN_CREATOR)||
(dynamic_cast<GenericTargetAbility *>(ability) && ability->canBeInterrupted && !observer->OpenedDisplay && !observer->players[0]->game->reveal->cards.size()))//test interrupt...
interruptDecision[0] = NOT_DECIDED; interruptDecision[0] = NOT_DECIDED;
else else
interruptDecision[0] = DONT_INTERRUPT; interruptDecision[0] = DONT_INTERRUPT;
@@ -1040,7 +1041,7 @@ void ActionStack::Update(float dt)
if (getCurrentTutorial() && (observer->players[0]->isHuman() || observer->players[1]->isHuman() ) ) if (getCurrentTutorial() && (observer->players[0]->isHuman() || observer->players[1]->isHuman() ) )
return; return;
if (observer->mLayers->actionLayer()->menuObject || observer->LPWeffect) if (observer->mLayers->actionLayer()->menuObject)// || observer->LPWeffect) //test fix for hang for both legendary with action/reveal
if(observer->players[0]->isHuman() || observer->players[1]->isHuman()) if(observer->players[0]->isHuman() || observer->players[1]->isHuman())
return;//dont do any of this if a menuobject exist. return;//dont do any of this if a menuobject exist.
+8 -1
View File
@@ -6046,6 +6046,7 @@ ATransformer::ATransformer(GameObserver* observer, int id, MTGCardInstance * sou
} }
myCurrentTurn = 1000; myCurrentTurn = 1000;
//this subkeyword adds a color without removing the existing colors. //this subkeyword adds a color without removing the existing colors.
removemc = (sabilities.find("removemc") != string::npos);
addNewColors = (sabilities.find("newcolors") != string::npos); addNewColors = (sabilities.find("newcolors") != string::npos);
remove = (stypes.find("removealltypes") != string::npos); remove = (stypes.find("removealltypes") != string::npos);
removeCreatureSubtypes = (stypes.find("removecreaturesubtypes") != string::npos); removeCreatureSubtypes = (stypes.find("removecreaturesubtypes") != string::npos);
@@ -6235,6 +6236,9 @@ for (it = types.begin(); it != types.end(); it++)
_target->addbaseT(val->getValue()); _target->addbaseT(val->getValue());
delete val; delete val;
} }
//remove manacost
if(removemc)
_target->getManaCost()->resetCosts();
return MTGAbility::addToGame(); return MTGAbility::addToGame();
} }
@@ -7729,11 +7733,14 @@ void ABlink::resolveBlink()
this->forceDestroy = 1; this->forceDestroy = 1;
return; return;
} }
if (_target && _target->next) if (_target && _target->next)
_target = _target->next; _target = _target->next;
_target->blinked = true; _target->blinked = true;
Blinked = _target; Blinked = _target;
if(source->isPermanent()&&!source->isInPlay(game))
{
Blinked->blinked = false;
}
if (!blinkueot && !blinkForSource) if (!blinkueot && !blinkForSource)
{ {
returnCardIntoPlay(_target); returnCardIntoPlay(_target);
+4
View File
@@ -461,12 +461,16 @@ void CardGui::Render()
} }
string buff = ""; string buff = "";
string starMark = "";
if(card->exerted)
starMark += "*";
if(card->isToken && !card->isACopier) if(card->isToken && !card->isACopier)
buff = "T"; buff = "T";
if(card->isToken && card->isACopier) if(card->isToken && card->isACopier)
buff = "CT"; buff = "CT";
if(!card->isToken && card->isACopier) if(!card->isToken && card->isACopier)
buff = "C"; buff = "C";
buff = starMark + buff;
//if(card->has(Constants::PAYZERO)) //if(card->has(Constants::PAYZERO))
//buff += "Z"; //buff += "Z";
if(card->chooseacolor >= 1) if(card->chooseacolor >= 1)
+2 -2
View File
@@ -134,7 +134,7 @@ void GuiAvatar::Render()
} }
//poison //poison
char poison[10]; char poison[10];
if (poisonCount >= 0) if (poisonCount > 0)
{ {
sprintf(poison, "%i", poisonCount); sprintf(poison, "%i", poisonCount);
switch (corner) switch (corner)
@@ -151,7 +151,7 @@ void GuiAvatar::Render()
} }
//energy //energy
char energy[15]; char energy[15];
if (energyCount >= 0) if (energyCount > 0)
{ {
sprintf(energy, "%i", energyCount); sprintf(energy, "%i", energyCount);
switch (corner) switch (corner)
+60 -5
View File
@@ -386,7 +386,10 @@ int AbilityFactory::parseCastRestrictions(MTGCardInstance * card, Player * playe
for(unsigned int gy = 0;gy < grave->cardsSeenThisTurn.size();gy++) for(unsigned int gy = 0;gy < grave->cardsSeenThisTurn.size();gy++)
{ {
MTGCardInstance * checkCard = grave->cardsSeenThisTurn[gy]; MTGCardInstance * checkCard = grave->cardsSeenThisTurn[gy];
if(checkCard->isCreature()) if(checkCard->isCreature() &&
((checkCard->previousZone == checkCurrent->game->battlefield)||
(checkCard->previousZone == checkCurrent->opponent()->game->battlefield))//died from battlefield
)
{ {
isMorbid = true; isMorbid = true;
break; break;
@@ -398,7 +401,26 @@ int AbilityFactory::parseCastRestrictions(MTGCardInstance * card, Player * playe
if(!isMorbid) if(!isMorbid)
return 0; return 0;
} }
check = restriction[i].find("zerodead");
if(check != string::npos)//returns true if zero
{
bool hasDeadCreature = false;
Player * checkCurrent = card->controller();
MTGGameZone * grave = checkCurrent->game->graveyard;
for(unsigned int gy = 0;gy < grave->cardsSeenThisTurn.size();gy++)
{
MTGCardInstance * checkCard = grave->cardsSeenThisTurn[gy];
if(checkCard->isCreature() &&
((checkCard->previousZone == checkCurrent->game->battlefield))//died from your battlefield
)
{
hasDeadCreature = true;
break;
}
}
if(hasDeadCreature)
return 0;
}
//Ensnaring Bridge //Ensnaring Bridge
check = restriction[i].find("powermorethanopponenthand"); check = restriction[i].find("powermorethanopponenthand");
if (check != string::npos)//for opponent creatures if (check != string::npos)//for opponent creatures
@@ -432,13 +454,14 @@ int AbilityFactory::parseCastRestrictions(MTGCardInstance * card, Player * playe
MTGGameZone * grave = checkCurrent->game->graveyard; MTGGameZone * grave = checkCurrent->game->graveyard;
int checkTypesAmount = 0; int checkTypesAmount = 0;
if(grave->hasType("creature")) checkTypesAmount++; if (grave->hasType("creature")) checkTypesAmount++;
if (grave->hasType("enchantment")) checkTypesAmount++; if (grave->hasType("enchantment")) checkTypesAmount++;
if (grave->hasType("sorcery")) checkTypesAmount++; if (grave->hasType("sorcery")) checkTypesAmount++;
if (grave->hasType("instant")) checkTypesAmount++; if (grave->hasType("instant")) checkTypesAmount++;
if (grave->hasType("land")) checkTypesAmount++; if (grave->hasType("land")) checkTypesAmount++;
if (grave->hasType("artifact")) checkTypesAmount++; if (grave->hasType("artifact")) checkTypesAmount++;
if (grave->hasType("planeswalker")) checkTypesAmount++; if (grave->hasType("planeswalker")) checkTypesAmount++;
if (grave->hasType("tribal")) checkTypesAmount++;
if (checkTypesAmount < 4) if (checkTypesAmount < 4)
return 0; return 0;
} }
@@ -450,13 +473,14 @@ int AbilityFactory::parseCastRestrictions(MTGCardInstance * card, Player * playe
MTGGameZone * grave = checkCurrent->game->graveyard; MTGGameZone * grave = checkCurrent->game->graveyard;
int checkTypesAmount = 0; int checkTypesAmount = 0;
if(grave->hasType("creature")) checkTypesAmount++; if (grave->hasType("creature")) checkTypesAmount++;
if (grave->hasType("enchantment")) checkTypesAmount++; if (grave->hasType("enchantment")) checkTypesAmount++;
if (grave->hasType("sorcery")) checkTypesAmount++; if (grave->hasType("sorcery")) checkTypesAmount++;
if (grave->hasType("instant")) checkTypesAmount++; if (grave->hasType("instant")) checkTypesAmount++;
if (grave->hasType("land")) checkTypesAmount++; if (grave->hasType("land")) checkTypesAmount++;
if (grave->hasType("artifact")) checkTypesAmount++; if (grave->hasType("artifact")) checkTypesAmount++;
if (grave->hasType("planeswalker")) checkTypesAmount++; if (grave->hasType("planeswalker")) checkTypesAmount++;
if (grave->hasType("tribal")) checkTypesAmount++;
if (checkTypesAmount > 3) if (checkTypesAmount > 3)
return 0; return 0;
} }
@@ -552,6 +576,20 @@ int AbilityFactory::parseCastRestrictions(MTGCardInstance * card, Player * playe
return 0; return 0;
} }
check = restriction[i].find("hasexerted");
if(check != string::npos)
{
if(!card->exerted)
return 0;
}
check = restriction[i].find("notexerted");
if(check != string::npos)
{
if(card->exerted)
return 0;
}
check = restriction[i].find("discardbyopponent"); check = restriction[i].find("discardbyopponent");
if(check != string::npos) if(check != string::npos)
{ {
@@ -1068,6 +1106,10 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell
if (TargetChooser *tc = parseSimpleTC(s,"phasedin", card)) if (TargetChooser *tc = parseSimpleTC(s,"phasedin", card))
return NEW TrCardPhasesIn(observer, id, card, tc,once); return NEW TrCardPhasesIn(observer, id, card, tc,once);
//Card Exerted
if (TargetChooser *tc = parseSimpleTC(s,"exerted", card))
return NEW TrCardExerted(observer, id, card, tc,once);
//CombatTrigger //CombatTrigger
//Card card attacked and is blocked //Card card attacked and is blocked
found = s.find("combat("); found = s.find("combat(");
@@ -2926,7 +2968,20 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
((AManifest*)a)->withenchant = true; ((AManifest*)a)->withenchant = true;
return a; return a;
} }
//exert
found = s.find("exert");
if (found != string::npos)
{
MTGAbility * a = NEW AExert(observer, id, card, target);
a->oneShot = 1;
if(storedAndAbility.size())
{
string stored = storedAndAbility;
storedAndAbility.clear();
((AExert*)a)->andAbility = parseMagicLine(stored, id, spell, card);
}
return a;
}
//provoke //provoke
found = s.find("provoke"); found = s.find("provoke");
if (found != string::npos) if (found != string::npos)
+1
View File
@@ -224,6 +224,7 @@ void MTGCardInstance::initMTGCI()
blinked = false; blinked = false;
isExtraCostTarget = false; isExtraCostTarget = false;
morphed = false; morphed = false;
exerted = false;
turningOver = false; turningOver = false;
isMorphed = false; isMorphed = false;
MeldedFrom = ""; MeldedFrom = "";
+23 -4
View File
@@ -1219,6 +1219,11 @@ int MTGDeck::save(const string& destFileName, bool useExpandedDescriptions, cons
void MTGDeck::printDetailedDeckText(std::ofstream& file ) void MTGDeck::printDetailedDeckText(std::ofstream& file )
{ {
ostringstream currentCard, creatures, lands, spells, types; ostringstream currentCard, creatures, lands, spells, types;
ostringstream ss_creatures, ss_lands, ss_spells;
int numberOfCreatures = 0;
int numberOfSpells = 0;
int numberOfLands = 0;
map<int, int>::iterator it; map<int, int>::iterator it;
for (it = cards.begin(); it != cards.end(); it++) for (it = cards.begin(); it != cards.end(); it++)
{ {
@@ -1266,17 +1271,31 @@ void MTGDeck::printDetailedDeckText(std::ofstream& file )
currentCard <<endl; currentCard <<endl;
setInfo = NULL; setInfo = NULL;
// Add counter to know number of creatures, non-creature spells and lands present in the deck
if ( card->data->isLand() ) if ( card->data->isLand() )
{
lands<< currentCard.str(); lands<< currentCard.str();
numberOfLands+=nbCards;
}
else if ( card->data->isCreature() ) else if ( card->data->isCreature() )
{
creatures << currentCard.str(); creatures << currentCard.str();
else numberOfCreatures+=nbCards;
}
else
{
spells << currentCard.str(); spells << currentCard.str();
numberOfSpells+=nbCards;
}
currentCard.str(""); currentCard.str("");
} }
file << getCardBlockText( "Creatures", creatures.str() ) << endl; ss_creatures << numberOfCreatures;
file << getCardBlockText( "Spells", spells.str() ) << endl; ss_spells << numberOfSpells;
file << getCardBlockText( "Lands", lands.str() ) << endl; ss_lands << numberOfLands;
file << getCardBlockText( "Creatures x " + ss_creatures.str(), creatures.str() ) << endl;
file << getCardBlockText( "Spells x " + ss_spells.str(), spells.str() ) << endl;
file << getCardBlockText( "Lands x " + ss_lands.str(), lands.str() ) << endl;
creatures.str(""); creatures.str("");
spells.str(""); spells.str("");
lands.str(""); lands.str("");
+23 -4
View File
@@ -554,6 +554,13 @@ MTGCardInstance * MTGPlayerCards::putInZone(MTGCardInstance * card, MTGGameZone
} }
} }
} }
//remove exerted if changing controls
if((to == g->players[0]->game->battlefield && from == g->players[1]->game->battlefield)||
(to == g->players[1]->game->battlefield && from == g->players[0]->game->battlefield))
{
if(ret->exerted)
ret->exerted = false;
}
} }
if(!asCopy) if(!asCopy)
{ {
@@ -1125,13 +1132,25 @@ void MTGInPlay::untapAll()
card->setUntapping(); card->setUntapping();
if (!card->basicAbilities[(int)Constants::DOESNOTUNTAP] && !card->basicAbilities[(int)Constants::SHACKLER]) if (!card->basicAbilities[(int)Constants::DOESNOTUNTAP] && !card->basicAbilities[(int)Constants::SHACKLER])
{ {
if (card->frozen < 1) if(card->exerted)
{ {
card->attemptUntap(); card->exerted = false;
if (card->frozen >= 1)
{
card->frozen = 0;
}
} }
if (card->frozen >= 1) else
{ {
card->frozen = 0; card->exerted = false;
if (card->frozen < 1)
{
card->attemptUntap();
}
if (card->frozen >= 1)
{
card->frozen = 0;
}
} }
} }
} }
+5
View File
@@ -6,6 +6,9 @@
#ifdef SDL_CONFIG #ifdef SDL_CONFIG
#include <SDL.h> #include <SDL.h>
#endif #endif
#ifdef QT_CONFIG
#include <QKeySequence>
#endif
using std::string; using std::string;
using std::map; using std::map;
@@ -27,6 +30,8 @@ const KeyRep& translateKey(LocalKeySym key)
str = XKeysymToString(key); str = XKeysymToString(key);
#elif defined (SDL_CONFIG) #elif defined (SDL_CONFIG)
str = (char*)SDL_GetKeyName(key); str = (char*)SDL_GetKeyName(key);
#elif defined (QT_CONFIG)
str = (char*)QKeySequence(key).toString().toUtf8().constData();
#endif #endif
if (!str) if (!str)
{ {
+11
View File
@@ -121,6 +121,11 @@ WEventCardUpdate(card)
{ {
} }
WEventCardExerted::WEventCardExerted(MTGCardInstance * card) :
WEventCardUpdate(card)
{
}
WEventVampire::WEventVampire(MTGCardInstance * card,MTGCardInstance * source,MTGCardInstance * victem) : WEventVampire::WEventVampire(MTGCardInstance * card,MTGCardInstance * source,MTGCardInstance * victem) :
WEventCardUpdate(card),source(source),victem(victem) WEventCardUpdate(card),source(source),victem(victem)
{ {
@@ -377,6 +382,12 @@ Targetable * WEventCardCycle::getTarget(int target)
return NULL; return NULL;
} }
Targetable * WEventCardExerted::getTarget(int target)
{
if (target) return card;
return NULL;
}
Targetable * WEventCardAttackedNotBlocked::getTarget(int target) Targetable * WEventCardAttackedNotBlocked::getTarget(int target)
{ {
if (target) return card; if (target) return card;