Compare commits
1 Commits
latest-mas
...
travis_mac
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2b1f1d016e |
79
.travis.yml
79
.travis.yml
@@ -1,67 +1,30 @@
|
||||
language: cpp
|
||||
branches:
|
||||
except:
|
||||
- latest-master
|
||||
language: objective-c
|
||||
|
||||
before_install:
|
||||
- export BUILD_PSP=YES
|
||||
- export BUILD_ANDROID=YES
|
||||
- export BUILD_Qt=YES
|
||||
- export BUILD_MAC=NO
|
||||
# Only building on Mac when not handling pull request
|
||||
- if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then
|
||||
export BUILD_MAC=YES;
|
||||
fi
|
||||
- sudo apt-get update -qq
|
||||
# Building for PSP here
|
||||
- if [ "$BUILD_PSP" == "YES" ]; then
|
||||
export PSPDEV="$TRAVIS_BUILD_DIR/opt/pspsdk" &&
|
||||
export PSPSDK="$PSPDEV/psp/sdk" &&
|
||||
export PATH="$PATH:$PSPDEV/bin:$PSPSDK/bin" &&
|
||||
wget -O sdk.lzma http://superb-sea2.dl.sourceforge.net/project/minpspw/SDK%20%2B%20devpak/pspsdk%200.11.2/minpspw_0.11.2-amd64.tar.lzma;
|
||||
fi
|
||||
# Building for Qt here
|
||||
- if [ "$BUILD_Qt" == "YES" ]; then
|
||||
sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu trusty universe" &&
|
||||
sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu trusty main" &&
|
||||
sudo apt-get -qq update &&
|
||||
sudo apt-get -qq install qt5-qmake qtbase5-dev qtdeclarative5-dev qttools5-dev qtmultimedia5-dev pulseaudio libpulse-dev &&
|
||||
export QMAKE="qmake -qt=qt5";
|
||||
fi
|
||||
# Building for Android here
|
||||
- if [ "$BUILD_ANDROID" == "YES" ]; then
|
||||
export ANDROID="android-sdk-linux/tools/android" &&
|
||||
if [ `uname -m` = x86_64 ]; then sudo apt-get install -qq --force-yes libgd2-xpm ia32-libs ia32-libs-multiarch jq; fi &&
|
||||
wget http://dl.google.com/android/ndk/android-ndk-r9-linux-x86_64.tar.bz2 -nv &&
|
||||
wget http://dl.google.com/android/android-sdk_r24.3.4-linux.tgz -nv;
|
||||
fi
|
||||
|
||||
install:
|
||||
- if [ "$BUILD_PSP" == "YES" ]; then
|
||||
tar -x --xz -f sdk.lzma;
|
||||
fi
|
||||
- if [ "$BUILD_ANDROID" == "YES" ]; then
|
||||
tar --absolute-names -jxf android-ndk-r9-linux-x86_64.tar.bz2 &&
|
||||
tar -zxf android-sdk_r24.3.4-linux.tgz &&
|
||||
$ANDROID list sdk --extended -a &&
|
||||
echo yes | $ANDROID update sdk -a -t tools,platform-tools,build-tools-23.0.1,android-10 --no-ui --force --no-https;
|
||||
fi
|
||||
- brew update
|
||||
- brew install qt5
|
||||
- sudo pip install pyjavaproperties
|
||||
- sudo pip install github3.py
|
||||
- sudo pip install cpp-coveralls
|
||||
|
||||
- brew install dpkg ldid
|
||||
#- curl -s -f -L https://raw.github.com/r-plus/dotfiles/master/install_theos.sh | bash
|
||||
- mkdir theos
|
||||
- cd theos
|
||||
- git clone --recursive https://github.com/theos/theos.git
|
||||
- export THEOS="$TRAVIS_BUILD_DIR/theos"
|
||||
- cd ..
|
||||
- pwd
|
||||
- ls
|
||||
env:
|
||||
global:
|
||||
- JAVA_HOME=/usr/lib/jvm/java-7-oracle # Force set JVM version to comply with Travis Ant version (1.8.2)
|
||||
- secure: "EBzr1+qjQsOhn0s+tcFmXR1jP9B0xiOSXuXbRXWZ1OEHNvp8+A5/pS84LYVFlaZqmxr5dApxvPtwhgLIUbQ3EPXm8LpC3KgSD4dS+9/QMbxhe5TK4oczgFRGcDTMJQZsCzhOh7hp3tbcbJg5Gp+VT7aFjFQSHDGwhzSJXsXwh/8="
|
||||
- secure: "X5dTQfofqAutnXxmu11Ep2MQ5QYnMN8m0AITRtwymhEF2UclcOudI1+skPtuhAGbWQnSO+lhunV3cvMfw2/Ml3k/VDz6VdFSKFrzAu7ja1VLJfcxr7chi0s8q30pVBb66tGydjIBac3B+RQyqgmZQW1frbRrhC/kPFQ6wPWOJdQ="
|
||||
- secure: "T97NUPnxCpVZ/c5HH0zfo0FO3DPSRMSmze58ubW5EUTZOjAMtEt+OFdsrNZvUTCugUj2M1agtonZbAbczpaAL+lgZcHDgXgWMkfO0pMnsWX1yyCNqMuE/iTMpJr/xsLQeyWlftWjJLsseQU45abZsd1XVmda/G+ZhrDLF1y55SA="
|
||||
secure: "EBzr1+qjQsOhn0s+tcFmXR1jP9B0xiOSXuXbRXWZ1OEHNvp8+A5/pS84LYVFlaZqmxr5dApxvPtwhgLIUbQ3EPXm8LpC3KgSD4dS+9/QMbxhe5TK4oczgFRGcDTMJQZsCzhOh7hp3tbcbJg5Gp+VT7aFjFQSHDGwhzSJXsXwh/8="
|
||||
|
||||
script: "tools/travis-script.sh"
|
||||
script:
|
||||
- /usr/local/opt/qt5/bin/qmake projects/mtg/wagic-qt.pro CONFIG+=graphics
|
||||
- make -j 4 dmg
|
||||
- cd projects/mtg/iOS
|
||||
- make -j 4 package
|
||||
- cd ../../..
|
||||
|
||||
after_success:
|
||||
- coveralls -b . -e JGE/src -e JGE/include -i projects/mtg/include -i projects/mtg/src --gcov-options '\-lp'
|
||||
- python tools/upload-binaries.py -t $GH_TOKEN -s $TRAVIS_COMMIT -l core.zip -r Wagic-core.zip -b $TRAVIS_BRANCH
|
||||
- python tools/upload-binaries.py -t $GH_TOKEN -s $TRAVIS_COMMIT -l projects/mtg/Android/bin/Wagic-debug.apk -r Wagic-android.apk -b $TRAVIS_BRANCH
|
||||
- python tools/upload-binaries.py -t $GH_TOKEN -s $TRAVIS_COMMIT -l projects/mtg/psprelease.zip -r Wagic-psp.zip -b $TRAVIS_BRANCH
|
||||
- python tools/upload-binaries.py -t $GH_TOKEN -s $TRAVIS_COMMIT -l qt-gui-build/linuxqtrelease.zip -r Wagic-linux-QT.zip -b $TRAVIS_BRANCH
|
||||
- python tools/upload-binaries.py -t $GH_TOKEN -s $TRAVIS_COMMIT -l wagic.dmg -r Wagic-macosx.dmg -b $TRAVIS_BRANCH
|
||||
- python tools/upload-binaries.py -t $GH_TOKEN -s $TRAVIS_COMMIT -l projects/mtg/iOS/net.wagic_0.19.2-1_iphoneos-arm.deb -r Wagic-iOS.deb -b $TRAVIS_BRANCH
|
||||
|
||||
3
projects/mtg/User/player/options.txt
Normal file
3
projects/mtg/User/player/options.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
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
|
||||
@@ -10233,7 +10233,7 @@ type=Instant
|
||||
[/card]
|
||||
[card]
|
||||
name=Bedlam Reveler
|
||||
anyzone=foreach(instant,sorcery|mygraveyard) changecost(colorless:-1) forcedalive
|
||||
autohand=affinity(instant,sorcery|mygraveyard) reduce({1})
|
||||
auto=@movedTo(*[-creature]|mystack):1/1 ueot
|
||||
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.
|
||||
@@ -11325,7 +11325,7 @@ type=Enchantment
|
||||
[card]
|
||||
name=Blasphemous Act
|
||||
auto=damage:13 all(creature)
|
||||
anyzone=foreach(creature|battlefield) changecost(colorless:-1) forcedalive
|
||||
autohand=affinity(creature|battlefield) reduce({1})
|
||||
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}
|
||||
type=Sorcery
|
||||
@@ -35600,7 +35600,7 @@ type=Instant
|
||||
[card]
|
||||
name=Emeria Angel
|
||||
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.
|
||||
mana={2}{W}{W}
|
||||
type=Creature
|
||||
@@ -41166,7 +41166,8 @@ type=Enchantment
|
||||
[card]
|
||||
name=Flagstones of Trokair
|
||||
auto={T}:Add{W}
|
||||
auto=@movedTo(this|graveyard) from(battlefield):name(search card) ability$!moveTo(myBattlefield) and!(tap(noevent))! target(plains|myLibrary)!$ controller
|
||||
aicode=activate moveTo(myBattlefield) and!(tap(noevent))! target(plains|myLibrary)
|
||||
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.
|
||||
type=Legendary Land
|
||||
[/card]
|
||||
@@ -42425,7 +42426,7 @@ type=Sorcery
|
||||
[/card]
|
||||
[card]
|
||||
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.
|
||||
mana={G}{W}{U}
|
||||
type=Instant
|
||||
@@ -46208,7 +46209,7 @@ toughness=4
|
||||
[/card]
|
||||
[card]
|
||||
name=Ghoultree
|
||||
anyzone=foreach(creature|mygraveyard) changecost(colorless:-1) forcedalive
|
||||
autohand=affinity(creature|mygraveyard) reduce({1})
|
||||
text=Ghoultree cost {1} less to cast for each creature card in your graveyard.
|
||||
mana={7}{G}
|
||||
type=Creature
|
||||
@@ -60796,7 +60797,7 @@ toughness=3
|
||||
[card]
|
||||
name=Jotun Owl Keeper
|
||||
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.
|
||||
mana={2}{W}
|
||||
type=Creature
|
||||
@@ -64908,7 +64909,7 @@ toughness=5
|
||||
name=Krosan Verge
|
||||
auto=tap(noevent)
|
||||
auto={T}:Add{1}
|
||||
auto={2}{T}{S}:name(sacrifice to search) transforms((,newability[ability$! name(search forest) notatarget(forest|mylibrary) moveto(ownerbattlefield) and!(tap(noevent))! !$ controller],newability[ability$! name(search plains) notatarget(plains|mylibrary) moveto(ownerbattlefield) and!(tap(noevent))! !$ controller])) oneshot
|
||||
auto={2}{T}{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
|
||||
text=Krosan Verge enters the battlefield tapped. -- {T}: Add {1} to your mana pool. -- {2}, {T}, Sacrifice Krosan Verge: Search your library for a Forest card and a Plains card and put them onto the battlefield tapped. Then shuffle your library.
|
||||
type=Land
|
||||
[/card]
|
||||
@@ -79817,7 +79818,7 @@ name=Niblis of the Breath
|
||||
abilities=flying
|
||||
auto={U}{T}:may tap target(creature)
|
||||
auto={U}{T}:may untap target(creature)
|
||||
text=Flying -- {U}, {T}: You may tap or untap target creature.
|
||||
text=Flying -- Whenever Niblis of the Urn attacks, you may tap target creature.
|
||||
mana={2}{U}
|
||||
type=Creature
|
||||
subtype=Spirit
|
||||
@@ -80576,7 +80577,7 @@ subtype=Nissa
|
||||
[/card]
|
||||
[card]
|
||||
name=Nissa's Chosen
|
||||
auto=@movedTo(graveyard) from(this|battlefield):all(trigger[from]) bottomoflibrary
|
||||
auto=@movedTo(graveyard) from(this|battlefield):all(this) bottomoflibrary
|
||||
text=If Nissa's Chosen would die, put it on the bottom of its owner's library instead.
|
||||
mana={G}{G}
|
||||
type=Creature
|
||||
@@ -83412,11 +83413,11 @@ toughness=2
|
||||
[/card]
|
||||
[card]
|
||||
name=Ordered Migration
|
||||
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(island|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(forest|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(swamp|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.
|
||||
mana={3}{W}{U}
|
||||
type=Sorcery
|
||||
@@ -90651,8 +90652,8 @@ toughness=5
|
||||
[card]
|
||||
name=Quarantine Field
|
||||
auto=counter(0/0,xx,Isolation)
|
||||
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.
|
||||
auto=(blink)forsrc target(<prexx>*[-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)
|
||||
mana={X}{X}{W}{W}
|
||||
type=Enchantment
|
||||
[/card]
|
||||
@@ -106336,8 +106337,7 @@ toughness=6
|
||||
[/card]
|
||||
[card]
|
||||
name=Simoon
|
||||
target=opponent
|
||||
auto=damage:1 all(creature|targetedpersonsbattlefield)
|
||||
auto=damage:1 all(creature|opponentBattlefield)
|
||||
text=Simoon deals 1 damage to each creature target opponent controls.
|
||||
mana={R}{G}
|
||||
type=Instant
|
||||
@@ -109371,7 +109371,7 @@ type=Instant
|
||||
[/card]
|
||||
[card]
|
||||
name=Solitary Confinement
|
||||
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=upcost[{D(*|myhand)}] sacrifice
|
||||
auto=phasealter(remove,draw,controller)
|
||||
abilities=playershroud
|
||||
auto=preventalldamage to(controller)
|
||||
@@ -114073,7 +114073,7 @@ toughness=2
|
||||
[/card]
|
||||
[card]
|
||||
name=Stone Idol Trap
|
||||
anyzone=foreach(creature[attacking]|battlefield) changecost(colorless:-1) forcedalive
|
||||
autohand=affinity(creature[attacking]|battlefield) reduce({1})
|
||||
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.
|
||||
mana={5}{R}
|
||||
@@ -138100,4 +138100,4 @@ type=Land Creature
|
||||
subtype=Forest Dryad
|
||||
power=1
|
||||
toughness=1
|
||||
[/card]
|
||||
[/card]
|
||||
|
||||
@@ -1936,6 +1936,12 @@ mana={3}{R}
|
||||
type=Enchantment
|
||||
[/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
|
||||
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}
|
||||
@@ -3334,6 +3340,15 @@ mana={4}{U}{U}
|
||||
type=Instant
|
||||
[/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
|
||||
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}
|
||||
@@ -3453,6 +3468,12 @@ mana={4}
|
||||
type=Artifact
|
||||
[/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
|
||||
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}
|
||||
@@ -3564,6 +3585,12 @@ mana={4}{U}{U}
|
||||
type=Sorcery
|
||||
[/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
|
||||
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}
|
||||
@@ -3981,6 +4008,12 @@ mana={R}
|
||||
type=Instant
|
||||
[/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
|
||||
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}
|
||||
@@ -5288,7 +5321,7 @@ mana={2}{G}{G}
|
||||
type=Sorcery
|
||||
[/card]
|
||||
[card]
|
||||
name=
|
||||
name=Evasive Action
|
||||
text=Domain — Counter target spell unless its controller pays {1} for each basic land type among lands you control.
|
||||
mana={1}{U}
|
||||
type=Instant
|
||||
@@ -6292,6 +6325,12 @@ mana={1}{R}{R}{R}
|
||||
type=Enchantment
|
||||
[/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
|
||||
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}
|
||||
@@ -6316,6 +6355,15 @@ mana={3}{G}
|
||||
type=Sorcery
|
||||
[/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
|
||||
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}
|
||||
@@ -6367,6 +6415,16 @@ mana={2}{R}
|
||||
type=Instant
|
||||
[/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
|
||||
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}
|
||||
@@ -6643,6 +6701,16 @@ power=5
|
||||
toughness=5
|
||||
[/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
|
||||
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}
|
||||
@@ -6760,6 +6828,12 @@ power=1
|
||||
toughness=1
|
||||
[/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
|
||||
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}
|
||||
@@ -6971,6 +7045,15 @@ power=1
|
||||
toughness=1
|
||||
[/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
|
||||
abilities=flying
|
||||
text=Flying -- {T}: Goblin Test Pilot deals 2 damage to target creature or player chosen at random.
|
||||
@@ -7009,6 +7092,12 @@ type=Legendary Artifact
|
||||
subtype=Equipment
|
||||
[/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
|
||||
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}
|
||||
@@ -7535,6 +7624,15 @@ type=Artifact
|
||||
subtype=Equipment
|
||||
[/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
|
||||
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}
|
||||
@@ -9730,6 +9828,12 @@ mana={1}{R}{R}
|
||||
type=World Enchantment
|
||||
[/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
|
||||
text=Counter target spell cast from a graveyard. -- Draw a card.
|
||||
mana={1}{U}
|
||||
@@ -10126,6 +10230,12 @@ power=*
|
||||
toughness=*
|
||||
[/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
|
||||
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}
|
||||
@@ -10358,6 +10468,15 @@ power=5
|
||||
toughness=5
|
||||
[/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
|
||||
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}
|
||||
@@ -10735,6 +10854,15 @@ mana={4}{R}
|
||||
type=Instant
|
||||
[/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
|
||||
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}
|
||||
@@ -11383,6 +11511,15 @@ power=3
|
||||
toughness=3
|
||||
[/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
|
||||
text=Whenever a spell you've cast is countered, draw a card.
|
||||
mana={G}
|
||||
@@ -12338,6 +12475,15 @@ power=3
|
||||
toughness=1
|
||||
[/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
|
||||
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}
|
||||
@@ -18055,6 +18201,12 @@ power=3
|
||||
toughness=3
|
||||
[/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
|
||||
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}
|
||||
@@ -19228,6 +19380,15 @@ mana={W}
|
||||
type=Instant
|
||||
[/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
|
||||
text=Choose one or both — -- • Destroy target artifact. -- • Destroy target land.
|
||||
mana={4}{R}
|
||||
|
||||
@@ -1406,28 +1406,6 @@ 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
|
||||
{
|
||||
public:
|
||||
@@ -5196,7 +5174,6 @@ public:
|
||||
list<int> oldcolors;
|
||||
list<int> oldtypes;
|
||||
vector<int> dontremove;
|
||||
bool removemc;
|
||||
bool addNewColors;
|
||||
bool remove;
|
||||
bool removeCreatureSubtypes;
|
||||
@@ -7313,57 +7290,6 @@ public:
|
||||
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
|
||||
class ATriggerRegen: public InstantAbility
|
||||
|
||||
@@ -90,7 +90,6 @@ public:
|
||||
bool blinked;
|
||||
bool isExtraCostTarget;
|
||||
bool morphed;
|
||||
bool exerted;
|
||||
bool turningOver;
|
||||
bool isMorphed;
|
||||
bool isFlipped;
|
||||
|
||||
@@ -205,12 +205,6 @@ struct WEventCardCycle : public WEventCardUpdate {
|
||||
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
|
||||
//before : attacker that card was blocking previously
|
||||
//after: attacker that card is blocking now
|
||||
|
||||
@@ -711,8 +711,7 @@ int ActionStack::addAbility(MTGAbility * ability)
|
||||
if (!observer->players[0]->isAI() && ability->source->controller() == observer->players[0] && 0
|
||||
== options[Options::INTERRUPTMYABILITIES].number)
|
||||
{
|
||||
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...
|
||||
if(observer->gameType() == GAME_TYPE_MOMIR && ability->aType == MTGAbility::FORCED_TOKEN_CREATOR)
|
||||
interruptDecision[0] = NOT_DECIDED;
|
||||
else
|
||||
interruptDecision[0] = DONT_INTERRUPT;
|
||||
@@ -1041,7 +1040,7 @@ void ActionStack::Update(float dt)
|
||||
if (getCurrentTutorial() && (observer->players[0]->isHuman() || observer->players[1]->isHuman() ) )
|
||||
return;
|
||||
|
||||
if (observer->mLayers->actionLayer()->menuObject)// || observer->LPWeffect) //test fix for hang for both legendary with action/reveal
|
||||
if (observer->mLayers->actionLayer()->menuObject || observer->LPWeffect)
|
||||
if(observer->players[0]->isHuman() || observer->players[1]->isHuman())
|
||||
return;//dont do any of this if a menuobject exist.
|
||||
|
||||
|
||||
@@ -6046,7 +6046,6 @@ ATransformer::ATransformer(GameObserver* observer, int id, MTGCardInstance * sou
|
||||
}
|
||||
myCurrentTurn = 1000;
|
||||
//this subkeyword adds a color without removing the existing colors.
|
||||
removemc = (sabilities.find("removemc") != string::npos);
|
||||
addNewColors = (sabilities.find("newcolors") != string::npos);
|
||||
remove = (stypes.find("removealltypes") != string::npos);
|
||||
removeCreatureSubtypes = (stypes.find("removecreaturesubtypes") != string::npos);
|
||||
@@ -6236,9 +6235,6 @@ for (it = types.begin(); it != types.end(); it++)
|
||||
_target->addbaseT(val->getValue());
|
||||
delete val;
|
||||
}
|
||||
//remove manacost
|
||||
if(removemc)
|
||||
_target->getManaCost()->resetCosts();
|
||||
|
||||
return MTGAbility::addToGame();
|
||||
}
|
||||
@@ -7733,14 +7729,11 @@ void ABlink::resolveBlink()
|
||||
this->forceDestroy = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
if (_target && _target->next)
|
||||
_target = _target->next;
|
||||
_target->blinked = true;
|
||||
Blinked = _target;
|
||||
if(source->isPermanent()&&!source->isInPlay(game))
|
||||
{
|
||||
Blinked->blinked = false;
|
||||
}
|
||||
if (!blinkueot && !blinkForSource)
|
||||
{
|
||||
returnCardIntoPlay(_target);
|
||||
|
||||
@@ -461,16 +461,12 @@ void CardGui::Render()
|
||||
}
|
||||
|
||||
string buff = "";
|
||||
string starMark = "";
|
||||
if(card->exerted)
|
||||
starMark += "*";
|
||||
if(card->isToken && !card->isACopier)
|
||||
buff = "T";
|
||||
if(card->isToken && card->isACopier)
|
||||
buff = "CT";
|
||||
if(!card->isToken && card->isACopier)
|
||||
buff = "C";
|
||||
buff = starMark + buff;
|
||||
//if(card->has(Constants::PAYZERO))
|
||||
//buff += "Z";
|
||||
if(card->chooseacolor >= 1)
|
||||
|
||||
@@ -134,7 +134,7 @@ void GuiAvatar::Render()
|
||||
}
|
||||
//poison
|
||||
char poison[10];
|
||||
if (poisonCount > 0)
|
||||
if (poisonCount >= 0)
|
||||
{
|
||||
sprintf(poison, "%i", poisonCount);
|
||||
switch (corner)
|
||||
@@ -151,7 +151,7 @@ void GuiAvatar::Render()
|
||||
}
|
||||
//energy
|
||||
char energy[15];
|
||||
if (energyCount > 0)
|
||||
if (energyCount >= 0)
|
||||
{
|
||||
sprintf(energy, "%i", energyCount);
|
||||
switch (corner)
|
||||
|
||||
@@ -386,10 +386,7 @@ int AbilityFactory::parseCastRestrictions(MTGCardInstance * card, Player * playe
|
||||
for(unsigned int gy = 0;gy < grave->cardsSeenThisTurn.size();gy++)
|
||||
{
|
||||
MTGCardInstance * checkCard = grave->cardsSeenThisTurn[gy];
|
||||
if(checkCard->isCreature() &&
|
||||
((checkCard->previousZone == checkCurrent->game->battlefield)||
|
||||
(checkCard->previousZone == checkCurrent->opponent()->game->battlefield))//died from battlefield
|
||||
)
|
||||
if(checkCard->isCreature())
|
||||
{
|
||||
isMorbid = true;
|
||||
break;
|
||||
@@ -401,26 +398,7 @@ int AbilityFactory::parseCastRestrictions(MTGCardInstance * card, Player * playe
|
||||
if(!isMorbid)
|
||||
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
|
||||
check = restriction[i].find("powermorethanopponenthand");
|
||||
if (check != string::npos)//for opponent creatures
|
||||
@@ -454,14 +432,13 @@ int AbilityFactory::parseCastRestrictions(MTGCardInstance * card, Player * playe
|
||||
MTGGameZone * grave = checkCurrent->game->graveyard;
|
||||
|
||||
int checkTypesAmount = 0;
|
||||
if (grave->hasType("creature")) checkTypesAmount++;
|
||||
if(grave->hasType("creature")) checkTypesAmount++;
|
||||
if (grave->hasType("enchantment")) checkTypesAmount++;
|
||||
if (grave->hasType("sorcery")) checkTypesAmount++;
|
||||
if (grave->hasType("instant")) checkTypesAmount++;
|
||||
if (grave->hasType("land")) checkTypesAmount++;
|
||||
if (grave->hasType("artifact")) checkTypesAmount++;
|
||||
if (grave->hasType("planeswalker")) checkTypesAmount++;
|
||||
if (grave->hasType("tribal")) checkTypesAmount++;
|
||||
if (checkTypesAmount < 4)
|
||||
return 0;
|
||||
}
|
||||
@@ -473,14 +450,13 @@ int AbilityFactory::parseCastRestrictions(MTGCardInstance * card, Player * playe
|
||||
MTGGameZone * grave = checkCurrent->game->graveyard;
|
||||
|
||||
int checkTypesAmount = 0;
|
||||
if (grave->hasType("creature")) checkTypesAmount++;
|
||||
if(grave->hasType("creature")) checkTypesAmount++;
|
||||
if (grave->hasType("enchantment")) checkTypesAmount++;
|
||||
if (grave->hasType("sorcery")) checkTypesAmount++;
|
||||
if (grave->hasType("instant")) checkTypesAmount++;
|
||||
if (grave->hasType("land")) checkTypesAmount++;
|
||||
if (grave->hasType("artifact")) checkTypesAmount++;
|
||||
if (grave->hasType("planeswalker")) checkTypesAmount++;
|
||||
if (grave->hasType("tribal")) checkTypesAmount++;
|
||||
if (checkTypesAmount > 3)
|
||||
return 0;
|
||||
}
|
||||
@@ -576,20 +552,6 @@ int AbilityFactory::parseCastRestrictions(MTGCardInstance * card, Player * playe
|
||||
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");
|
||||
if(check != string::npos)
|
||||
{
|
||||
@@ -1106,10 +1068,6 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell
|
||||
if (TargetChooser *tc = parseSimpleTC(s,"phasedin", card))
|
||||
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
|
||||
//Card card attacked and is blocked
|
||||
found = s.find("combat(");
|
||||
@@ -2968,20 +2926,7 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
|
||||
((AManifest*)a)->withenchant = true;
|
||||
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
|
||||
found = s.find("provoke");
|
||||
if (found != string::npos)
|
||||
|
||||
@@ -224,7 +224,6 @@ void MTGCardInstance::initMTGCI()
|
||||
blinked = false;
|
||||
isExtraCostTarget = false;
|
||||
morphed = false;
|
||||
exerted = false;
|
||||
turningOver = false;
|
||||
isMorphed = false;
|
||||
MeldedFrom = "";
|
||||
|
||||
@@ -1219,11 +1219,6 @@ int MTGDeck::save(const string& destFileName, bool useExpandedDescriptions, cons
|
||||
void MTGDeck::printDetailedDeckText(std::ofstream& file )
|
||||
{
|
||||
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;
|
||||
for (it = cards.begin(); it != cards.end(); it++)
|
||||
{
|
||||
@@ -1271,31 +1266,17 @@ void MTGDeck::printDetailedDeckText(std::ofstream& file )
|
||||
|
||||
currentCard <<endl;
|
||||
setInfo = NULL;
|
||||
// Add counter to know number of creatures, non-creature spells and lands present in the deck
|
||||
if ( card->data->isLand() )
|
||||
{
|
||||
lands<< currentCard.str();
|
||||
numberOfLands+=nbCards;
|
||||
}
|
||||
else if ( card->data->isCreature() )
|
||||
{
|
||||
creatures << currentCard.str();
|
||||
numberOfCreatures+=nbCards;
|
||||
}
|
||||
else
|
||||
{
|
||||
else
|
||||
spells << currentCard.str();
|
||||
numberOfSpells+=nbCards;
|
||||
}
|
||||
currentCard.str("");
|
||||
}
|
||||
ss_creatures << numberOfCreatures;
|
||||
ss_spells << numberOfSpells;
|
||||
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;
|
||||
file << getCardBlockText( "Creatures", creatures.str() ) << endl;
|
||||
file << getCardBlockText( "Spells", spells.str() ) << endl;
|
||||
file << getCardBlockText( "Lands", lands.str() ) << endl;
|
||||
creatures.str("");
|
||||
spells.str("");
|
||||
lands.str("");
|
||||
|
||||
@@ -554,13 +554,6 @@ 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)
|
||||
{
|
||||
@@ -1132,25 +1125,13 @@ void MTGInPlay::untapAll()
|
||||
card->setUntapping();
|
||||
if (!card->basicAbilities[(int)Constants::DOESNOTUNTAP] && !card->basicAbilities[(int)Constants::SHACKLER])
|
||||
{
|
||||
if(card->exerted)
|
||||
if (card->frozen < 1)
|
||||
{
|
||||
card->exerted = false;
|
||||
if (card->frozen >= 1)
|
||||
{
|
||||
card->frozen = 0;
|
||||
}
|
||||
card->attemptUntap();
|
||||
}
|
||||
else
|
||||
if (card->frozen >= 1)
|
||||
{
|
||||
card->exerted = false;
|
||||
if (card->frozen < 1)
|
||||
{
|
||||
card->attemptUntap();
|
||||
}
|
||||
if (card->frozen >= 1)
|
||||
{
|
||||
card->frozen = 0;
|
||||
}
|
||||
card->frozen = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,9 +6,6 @@
|
||||
#ifdef SDL_CONFIG
|
||||
#include <SDL.h>
|
||||
#endif
|
||||
#ifdef QT_CONFIG
|
||||
#include <QKeySequence>
|
||||
#endif
|
||||
using std::string;
|
||||
using std::map;
|
||||
|
||||
@@ -30,8 +27,6 @@ const KeyRep& translateKey(LocalKeySym key)
|
||||
str = XKeysymToString(key);
|
||||
#elif defined (SDL_CONFIG)
|
||||
str = (char*)SDL_GetKeyName(key);
|
||||
#elif defined (QT_CONFIG)
|
||||
str = (char*)QKeySequence(key).toString().toUtf8().constData();
|
||||
#endif
|
||||
if (!str)
|
||||
{
|
||||
|
||||
@@ -121,11 +121,6 @@ WEventCardUpdate(card)
|
||||
{
|
||||
}
|
||||
|
||||
WEventCardExerted::WEventCardExerted(MTGCardInstance * card) :
|
||||
WEventCardUpdate(card)
|
||||
{
|
||||
}
|
||||
|
||||
WEventVampire::WEventVampire(MTGCardInstance * card,MTGCardInstance * source,MTGCardInstance * victem) :
|
||||
WEventCardUpdate(card),source(source),victem(victem)
|
||||
{
|
||||
@@ -382,12 +377,6 @@ Targetable * WEventCardCycle::getTarget(int target)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Targetable * WEventCardExerted::getTarget(int target)
|
||||
{
|
||||
if (target) return card;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Targetable * WEventCardAttackedNotBlocked::getTarget(int target)
|
||||
{
|
||||
if (target) return card;
|
||||
|
||||
Reference in New Issue
Block a user