158 Commits

Author SHA1 Message Date
Xawotihs
af0c423359 Switch back to java oracle 8 to build android app 2017-09-08 18:23:09 +02:00
Xawotihs
45253e0008 Reupdate pip calls to use them for osx as well 2017-09-08 17:56:20 +02:00
Xawotihs
e32e5c2a47 Readding sudo pip ... lalala ... 2017-09-07 22:12:25 +02:00
Xawotihs
3a4f9f06cb reordered pip install 2017-09-07 22:01:36 +02:00
Xawotihs
a563030440 Removing pip cache 2017-09-07 21:44:55 +02:00
Xawotihs
80d43896ff Reordered pip installs around 2017-09-07 20:56:37 +02:00
Xawotihs
1c5949411f Fixed some ] and space 2017-09-07 20:22:25 +02:00
Xawotihs
699b151939 With a couple of ; 2017-09-07 20:15:32 +02:00
Xawotihs
e6af1a08b9 Use sudo pip for Android and pip with linux without Android 2017-09-07 20:09:56 +02:00
Xawotihs
7eac02f8d4 Trying pip install without sudo 2017-09-06 19:44:00 +02:00
Xawotihs
58e70e2500 replacing sudo pip by sudo -H pip 2017-09-06 19:36:12 +02:00
Xawotihs
56ca2021dc Let's try with openjdk7 2017-09-06 19:18:13 +02:00
Xawotihs
e4e431dcee Let's try jdk_switcher 2017-09-06 00:21:24 +02:00
Xawotihs
abfff205ee Readding ant, it seems the android worker needs it 2017-09-06 00:05:16 +02:00
Xawotihs
6416e4e0d9 Removed ant installation 2017-09-05 23:37:47 +02:00
Xawotihs
86f4730db7 Removings traces and ant errors 2017-09-05 23:06:22 +02:00
Xawotihs
33a5479512 Sounds like JAVA_HOME is wrong, let's try to use the default one 2017-09-05 22:59:06 +02:00
Xawotihs
891859f4ca Let's display ant errors 2017-09-05 22:48:06 +02:00
Xawotihs
d5bfb8201b Some echo traces 2017-09-05 22:36:19 +02:00
Xawotihs
f49ef92f90 sudo required on linux 2017-09-05 22:26:38 +02:00
Xawotihs
02d004b5bf Fixed os in build matrix for Android 2017-09-05 22:11:24 +02:00
Xawotihs
55f8a8a1d0 Only used brew if osx is defined 2017-09-04 20:16:31 +02:00
Xawotihs
068a69c80b Adding ant as it somehow disappeared ... 2017-09-04 19:43:41 +02:00
Xawotihs
375e66489f Changed memory to be 16 MB 2017-09-03 23:55:43 +02:00
Xawotihs
cbbd034862 Removed chmod on binary 2017-09-03 14:44:45 +02:00
Xawotihs
f7fe948da5 Update psp sdk link, don't install theos for all mac builds 2017-09-03 14:21:15 +02:00
Xawotihs
478ce0863b Replace cmake installation script 2017-09-03 14:04:32 +02:00
Xawotihs
329011460f Update .travis.yml 2017-09-03 13:55:39 +02:00
xawotihs
48ec51a923 Shold fix travis script 2017-09-03 12:49:31 +02:00
xawotihs
9936962c56 Should fix cmake issues on linux 2017-09-03 12:44:30 +02:00
xawotihs
15111d1b20 Merge branch 'master' of https://github.com/WagicProject/wagic into cmake 2017-09-02 21:15:47 +02:00
Xawotihs
2b342ca33b Fixed typo 2016-07-05 23:57:53 +02:00
xawotihs
97e6df7f59 Should fix PSP artifact build and upload 2016-07-05 23:49:33 +02:00
xawotihs
a2bb67a828 Removed duplicate blacklist and added some cache 2016-07-04 23:21:34 +02:00
Xawotihs
d14e28d7b3 Should fix android package upload 2016-07-04 04:18:26 +02:00
xawotihs
0a0ee3cc98 Merge branch 'master' into cmake 2016-07-03 16:44:21 +02:00
Xawotihs
99e6a254e1 Update android package upload 2016-07-01 00:18:44 +02:00
Xawotihs
68714ebad8 Added android SDK tools to path 2016-06-30 23:08:56 +02:00
Xawotihs
48ef4144bc Update .travis.yml 2016-06-30 22:04:08 +02:00
Xawotihs
78a4da4945 Avoid rebuilding after targging 2016-06-30 22:01:17 +02:00
xawotihs
af0861877a Merge branch 'master' into cmake 2016-06-29 21:36:47 +02:00
xawotihs
a23b96ba75 Merge branch 'master' into cmake 2016-06-26 11:25:23 +02:00
Xawotihs
47704f7591 Changed git add cmd 2016-06-26 10:28:50 +02:00
Xawotihs
755f90f38b Updated repo cleanup 2016-06-25 22:53:18 +02:00
Xawotihs
8a56406c19 Added missing REPO variable 2016-06-25 21:03:43 +02:00
xawotihs
887ea94a4d Add execution right to the new script 2016-06-25 20:11:24 +02:00
xawotihs
499b3ddf3e Added a script to upload emscripten build automatically to gh_pages 2016-06-25 16:54:35 +02:00
xawotihs
83e55b1074 Merge branch 'cmake' of https://github.com/WagicProject/wagic into cmake 2016-06-25 11:50:54 +02:00
xawotihs
1f87ed77e4 Fixed windows package and but in SDL frontend 2016-06-25 11:50:07 +02:00
Xawotihs
93b7d210dc Should fix indentation issue 2016-06-24 19:32:32 +02:00
xawotihs
10d9d84f84 Fixed emscripten memory and updated python upload script to include cmake branch 2016-06-23 23:32:57 +02:00
xawotihs
fc9a4d5431 Removed redudant builds and removed -j4 to try to compile emscripten 2016-06-23 21:20:12 +02:00
Xawotihs
4b3a2531a6 Switched to debug emscripten build 2016-06-23 08:20:24 +02:00
Xawotihs
ed4871548e Decreased optimisation level to avoid crashes 2016-06-23 07:48:11 +02:00
xawotihs
1284b8da8b Should fix emscripten build in Travis 2016-06-22 22:19:09 +02:00
Xawotihs
95455603a1 Tries to build emscripten on linux as macosx fails 2016-06-21 23:45:37 +02:00
xawotihs
813c54a166 Removed GL_CLAMP usage, update of the Android cmake package file 2016-06-19 12:46:17 +02:00
xawotihs
fa2a2d51a5 Fixed Downloader. 2016-06-19 12:08:45 +02:00
xawotihs
4b68b636ce Merge branch 'master' into cmake 2016-06-19 11:39:56 +02:00
xawotihs
0a01b0af69 Tries to fix SDL and Qt builds, introduces Emscripten in Travis. 2016-06-19 10:25:22 +02:00
xawotihs
e4e809f3fe Emscripten seems to work, should also fix PSP and Qt builds 2016-06-19 00:41:35 +02:00
xawotihs
1667b79fa8 Improved Emscripten port... still not there yet. 2016-06-18 17:24:51 +02:00
Xawotihs
31272ff0fe Removed suspicious references to thirdparty libs 2016-06-11 14:29:48 +02:00
xawotihs
9335063d68 Should fix PSP build and Windows ZIP creation 2016-06-09 21:26:11 +02:00
xawotihs
39dfaf3acb Forgot this file 2016-06-08 23:47:53 +02:00
xawotihs
3e7ecd51fd Fixed windows SDL2 build, finished removing fmod dependency 2016-06-08 23:45:42 +02:00
xawotihs
c9ee4a304e Merge branch 'master' into cmake 2016-06-07 23:35:26 +02:00
xawotihs
2f1bf7bdbe Fixed iOS build 2016-06-07 23:31:42 +02:00
xawotihs
41890f6bb4 Removed main() function in zipFS 2016-06-07 22:49:59 +02:00
xawotihs
24cd7cab58 Merges iOS modifications with Windows modifications 2016-06-07 22:48:02 +02:00
xawotihs
473d9387d4 Removed references to fmod libs for Windows builds 2016-06-07 21:00:15 +02:00
Xawotihs
f5495adce1 Enable _DEBUG in debug only 2016-06-06 22:52:39 +02:00
Xawotihs
d802ec4b59 Fixed theos path 2016-06-04 22:05:04 +02:00
xawotihs
8f69e2a204 Should fix iOS build 2016-06-04 21:44:35 +02:00
xawotihs
c3fc579907 Pulled down update for SDL2 2016-05-29 18:01:51 +02:00
Xawotihs
cc06370bcd Update CMakeLists.txt 2015-11-24 00:14:48 +01:00
Xawotihs
ed15ec2469 Fixed issue in SDL2 replacement. 2015-11-23 10:15:47 +01:00
Xawotihs
3f7d5ff041 Decreased -j option for Android 2015-11-22 22:37:55 +01:00
Xawotihs
d5bcf40cbb Replaced SDL2 flavor when compiling for Android 2015-11-22 21:30:58 +01:00
ubuntu
49c196814f Couple of fixed around Android build with cmake. 2015-11-22 02:22:44 +01:00
Xawotihs
c4282ce936 Update android.toolchain.cmake 2015-11-21 14:02:06 +01:00
Xawotihs
cd1c09127f Removed dependencies on Boost on Android 2015-11-20 12:59:26 +01:00
xawotihs
9afebe0851 Removed sdl_main_android.cpp 2015-11-19 22:38:06 +01:00
Xawotihs
9a7382ea06 Added ANDROID_NDK variable for cmake toolchain 2015-11-18 23:57:55 +01:00
Xawotihs
7a7e723009 Fixed android cmake usage 2015-11-18 23:36:39 +01:00
Xawotihs
9d772284cc Removed any sudo actions on Android 2015-11-18 23:22:45 +01:00
Xawotihs
a981761deb Trying to activate android build in matrix 2015-11-18 22:59:17 +01:00
Xawotihs
fc13ffa242 Update appveyor.yml 2015-11-17 23:31:33 +01:00
Xawotihs
878b2cd639 Update FindOrBuild.cmake 2015-11-17 23:16:51 +01:00
Xawotihs
995922d2d7 Update appveyor.yml 2015-11-17 22:54:53 +01:00
Xawotihs
0d100aa9be Update appveyor.yml 2015-11-17 22:54:18 +01:00
Xawotihs
d4fabed317 Split android sdk update in 4 2015-11-17 22:01:54 +01:00
Xawotihs
9eff781103 Update travis-script.sh 2015-11-16 23:20:20 +01:00
Xawotihs
0353da3d27 Update travis-script.sh 2015-11-16 22:56:30 +01:00
xawotihs
3cbdc6e9fe Merge branch 'cmake' of https://github.com/WagicProject/wagic into cmake 2015-11-04 22:33:26 +01:00
xawotihs
ce71afd704 Tries to activate zlib compiling on mac 2015-11-04 22:32:49 +01:00
Xawotihs
603d491bed Without quotes 2015-11-03 23:06:14 +01:00
Xawotihs
20a792f135 Refering DXSDK and not windows SDK 2015-11-03 23:02:12 +01:00
xawotihs
87f5e7f3a6 Emscripten flavor now compiles correctly 2015-11-02 23:00:57 +01:00
xawotihs
e272925f3d Removed extra/stdint.h 2015-11-02 00:00:26 +01:00
xawotihs
19091ade7b Updated appveyor to use SDL2.0.3 release and not SDL head. 2015-11-01 23:51:07 +01:00
xawotihs
e62c065e2c Should fix git submodules 2015-11-01 23:34:03 +01:00
xawotihs
2312381b82 Updated git submodules 2015-11-01 23:26:03 +01:00
xawotihs
639942d444 Merge branch 'master' into cmake 2015-11-01 22:55:08 +01:00
xawotihs
55a5b9d0ba Now uses unofficial SDL mirror 2015-11-01 22:49:14 +01:00
Xawotihs
a33517e5d0 Added prefix variable so that QT5 is found with brew 2015-10-31 23:02:31 +01:00
Xawotihs
c981586bcf Moved apt-get of Qt into linux part 2015-10-31 21:45:36 +01:00
Xawotihs
b473238f02 Replaced all " 2015-10-31 21:02:29 +01:00
Xawotihs
1d9b92080f Missed on " 2015-10-31 20:56:23 +01:00
Xawotihs
7f89d4d39f Uses "" everywhere 2015-10-31 20:51:12 +01:00
Xawotihs
4f00ec2277 Added matrix subsection in env 2015-10-31 20:37:54 +01:00
Xawotihs
26db10a083 Removed empty lines 2015-10-31 20:32:18 +01:00
xawotihs
3ec2ceb725 Activate matrix and multi-os in travis 2015-10-31 20:15:47 +01:00
xawotihs
667ac39e06 Removed reference to x64 platform 2015-10-25 18:07:30 +01:00
xawotihs
993d62a8c8 Added checkout of modules 2015-10-25 17:59:40 +01:00
xawotihs
09a70d4573 Merge branch 'cmake' of https://github.com/WagicProject/wagic into cmake 2015-10-25 17:30:59 +01:00
xawotihs
3afa730751 Updated appveyor to use cmake 2015-10-25 17:29:33 +01:00
Xawotihs
3245ddbfe7 Reducing the -j parameter to try helping g++ internal compiler issues 2015-10-25 10:51:34 +01:00
xawotihs
def55943ed Activated building SDL2 directly from submodule on Unix as well 2015-10-25 10:18:21 +01:00
xawotihs
4accc9c018 Merge branch 'master' into cmake 2015-10-25 00:22:57 +02:00
xawotihs
579d612397 Worked on windows and emscripten builds, still not perfect. 2015-10-24 23:33:31 +02:00
Xawotihs
daabce1d2f Merge pull request #647 from ZobyTwo/opencv_leftovers
Remove some leftovers from OpenCV
2015-10-17 21:46:47 +02:00
Tobias Loose
5885829585 Remove some leftovers from OpenCV 2015-10-17 18:12:31 +02:00
xawotihs
3e7b9e68d5 Fixed compilation issue with Qt. 2015-10-13 23:32:56 +02:00
Xawotihs
4a52139457 Update g++ to 4.8 2015-10-13 23:04:58 +02:00
xawotihs
79ea403273 Commented out GLUT dependency 2015-10-11 15:54:32 +02:00
xawotihs
397d7fa6c8 Added build of SDL2 in UNIX config 2015-10-11 15:31:58 +02:00
xawotihs
ac787a6f51 Added SDL2DIR env variable. 2015-10-11 15:20:27 +02:00
xawotihs
0418e77d34 Removed tabs 2015-10-11 14:29:59 +02:00
xawotihs
a2c6a3669b Reactivated SDL2 download 2015-10-11 14:27:40 +02:00
xawotihs
b8d22240a8 Fixed typo 2015-10-11 14:21:09 +02:00
xawotihs
b458d570a1 Deactivated again Android build, added a SDL build 2015-10-11 14:15:43 +02:00
xawotihs
5022df0d14 Moved tgz unpackaging away from android SDK update. 2015-10-11 12:34:52 +02:00
xawotihs
220b48b144 Updated android SDK and build tools versions 2015-10-11 12:14:58 +02:00
xawotihs
8aeed46181 Reactivates android build 2015-10-11 11:54:40 +02:00
xawotihs
38b34eae2f Split macosx config from unix one. 2015-10-11 11:38:32 +02:00
xawotihs
648b21f972 Trying something else with new repositories 2015-10-11 10:38:40 +02:00
xawotihs
09717a966b Added install of cmake 3.3 on Travis. 2015-10-11 10:08:33 +02:00
xawotihs
eef46fe743 Revert previous change and just removed inline on the function 2015-10-10 18:41:43 +02:00
xawotihs
5f91566fa7 Move vrelptr implementation in header file so that it can be used outside of JGE lib 2015-10-10 18:35:33 +02:00
xawotihs
c83a476ebe Put SwizzlePlot in the WFont header. 2015-10-10 18:23:59 +02:00
xawotihs
954bba274c Tries to fix includes 2015-10-10 18:08:45 +02:00
xawotihs
d370a5c13d Fixed png include in JGE 2015-10-10 16:15:45 +02:00
xawotihs
181189bee0 Fixed boost include path 2015-10-10 16:05:34 +02:00
xawotihs
c678f5e85a Fixed vram 2015-10-10 15:32:01 +02:00
xawotihs
0fabf83c62 Fixed decoder_prx 2015-10-10 15:25:08 +02:00
xawotihs
b7e8d19290 Fix for travis build 2015-10-10 15:15:43 +02:00
Xawotihs
d0db71602a Deactive android build as travis does not like it those days 2015-10-10 14:51:40 +02:00
Xawotihs
112efddb4e Removed typo 2015-10-09 13:32:51 +02:00
Xawotihs
4cea81e564 Moved SDL2 download away from the Android SDK download 2015-10-09 07:56:44 +02:00
Xawotihs
3a40a34566 should fix script syntax 2015-10-08 23:33:17 +02:00
Xawotihs
a4ff87a7d5 Replaced libsdl2-dev dependency by a direct download 2015-10-08 23:29:47 +02:00
xawotihs
797077c47b Various fixes and activated cmake in travis. 2015-10-08 23:08:09 +02:00
xawotihs
075d950249 Got SDL2 version compiling on Mac. 2015-10-06 23:25:40 +02:00
xawotihs
22d14b2a4f - Updated SDL dependency to SDL2
- fixed compilation issues with cmake and visual studio 2015
2015-10-04 23:10:45 +02:00
xawotihs
4272e2e2b2 Activated zlib build only on windows 2015-09-28 19:39:26 +02:00
xawotihs
34279cfacf Additional work with cmake on Windows, still does not work 2015-09-27 23:23:31 +02:00
xawotihs
85f4a4c36a Started to merge @ZobyTwo cmake branch 2015-09-26 21:52:07 +02:00
3241 changed files with 11036 additions and 52130 deletions

6
.gitmodules vendored Normal file
View File

@@ -0,0 +1,6 @@
[submodule "thirdparty/zlib"]
path = thirdparty/zlib
url = https://github.com/madler/zlib
[submodule "thirdparty/SDL2"]
path = thirdparty/SDL2
url = https://github.com/spurious/SDL-mirror.git

View File

@@ -1,61 +1,130 @@
language: cpp
dist: trusty
branches:
except:
- latest-master
- latest-cmake
matrix:
include:
- os: linux
env: BUILD_TYPE=PSP
sudo: required
- os: linux
env: BUILD_TYPE=SDL
sudo: required
- os: linux
env: BUILD_TYPE=Qt
sudo: required
- os: osx
env: BUILD_TYPE=Qt
- os: osx
env: BUILD_TYPE=iOS
- os: linux
language: android
env: BUILD_TYPE=ANDROID
sudo: required
- os: osx
env: BUILD_TYPE=Emscripten
android:
components:
- platform-tools
- build-tools-23.0.1
- android-10
cache:
directories:
- opt/pspsdk
- android-ndk-r9
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
- if [ "$TRAVIS_OS_NAME" == "linux" ]; 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 add-apt-repository --yes ppa:ubuntu-toolchain-r/test &&
sudo apt-get -qq update &&
sudo apt-get -qq install g++-4.8 &&
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 90;
fi
- if [ "$TRAVIS_OS_NAME" == "osx" ]; then
brew update &&
brew install dpkg &&
pwd &&
ls;
fi
- if [ "$BUILD_TYPE" == "iOS" ]; then
curl -s -f -L https://raw.github.com/r-plus/dotfiles/master/install_theos.sh | bash &&
pwd &&
ls;
fi
# Building for PSP here
- if [ "$BUILD_PSP" == "YES" ]; then
- if [ "$BUILD_TYPE" == "PSP" ]; 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://downloads.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";
wget -O sdk.lzma https://sourceforge.net/projects/minpspw/files/SDK%20%2B%20devpak/pspsdk%200.11.2/minpspw_0.11.2-amd64.tar.lzma/download;
fi
# Building for Android here
- if [ "$BUILD_ANDROID" == "YES" ]; then
export ANDROID="android-sdk-linux/tools/android" &&
if [ `uname -m` = x86_64 ]; then
sudo dpkg --add-architecture i386 && sudo apt-get update &&
sudo apt-get install -qq --force-yes libgd2-xpm-dev libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1 jq ant; fi &&
- if [ "$BUILD_TYPE" == "ANDROID" ]; then
export ANDROID="/usr/local/android-sdk-linux/tools/android" &&
export PATH=$PATH:"/usr/local/android-sdk-linux/tools" &&
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;
wget https://bitbucket.org/ewing/sdl_androidcmake/get/4e9e88c03f04.zip -nv;
fi
# Building for Qt here
- if [ "$BUILD_TYPE" == "Qt" ] && [ "$TRAVIS_OS_NAME" == "osx" ]; then
brew install qt5 &&
export QMAKE="qmake -qt=qt5";
fi
- if [ "$BUILD_TYPE" == "Qt" ] && [ "$TRAVIS_OS_NAME" == "linux" ]; then
sudo apt-get install -qq qt5-qmake qtbase5-dev qtdeclarative5-dev qttools5-dev qtmultimedia5-dev pulseaudio libpulse-dev &&
export QMAKE="qmake -qt=qt5";
fi
# Building for SDL here
- if [ "$BUILD_TYPE" == "SDL" ]; then
export SDL2DIR="$TRAVIS_BUILD_DIR/thirdparty/SDL2";
fi
# Building for Emscripten here
- if [ "$BUILD_TYPE" == "Emscripten" ] && [ "$TRAVIS_OS_NAME" == "osx" ]; then
brew install emscripten && export LLVM=/usr/local/opt/emscripten/libexec/llvm/bin && emcc;
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
- sudo python -m easy_install --upgrade pyOpenSSL
- sudo pip install pyjavaproperties
- sudo pip install github3.py
- sudo pip install cpp-coveralls
- |
if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then
if [[ -z "$(ls -A ${DEPS_DIR}/cmake/bin)" ]]; then
CMAKE_URL="https://cmake.org/files/v3.7/cmake-3.7.2-Linux-x86_64.tar.gz"
mkdir -p cmake && travis_retry wget --no-check-certificate --quiet -O - "${CMAKE_URL}" | tar --strip-components=1 -xz -C cmake
fi
export PATH="${DEPS_DIR}/cmake/bin:${PATH}"
fi
- if [ "$TRAVIS_OS_NAME" == "osx" ]; then
if ! brew ls --version cmake &>/dev/null; then brew install cmake; fi
fi
- if [ "$BUILD_TYPE" == "PSP" ]; then
tar -x --xz -f sdk.lzma;
fi
- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$BUILD_TYPE" == "ANDROID" ]; then
jdk_switcher use openjdk7 %%
tar --absolute-names -jxf android-ndk-r9-linux-x86_64.tar.bz2 &&
export ANDROID_NDK=`pwd`/android-ndk-r9 &&
unzip 4e9e88c03f04.zip &&
rm -rf thirdparty/SDL2/* &&
mv ewing-sdl_androidcmake-4e9e88c03f04/* thirdparty/SDL2/ &&
sudo pip install cpp-coveralls &&
sudo apt-get install --force-yes -qq libtinyxml-dev libjpeg-dev libpng-dev libgif-dev libz-dev libboost-system-dev libboost-thread-dev libboost-date-time-dev ant;
fi
- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$BUILD_TYPE" != "ANDROID" ]; then
jdk_switcher use openjdk7 &&
sudo pip install cpp-coveralls &&
sudo apt-get install --force-yes -qq libtinyxml-dev libjpeg-dev libpng-dev libgif-dev libz-dev libboost-system-dev libboost-thread-dev libboost-date-time-dev ant;
fi
- sudo pip install pyjavaproperties
- sudo pip install github3.py
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="
@@ -63,8 +132,22 @@ env:
script: "tools/travis-script.sh"
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
- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$BUILD_TYPE" == "Qt" ]; then
coveralls -b . -e JGE/src -e JGE/include -i projects/mtg/include -i projects/mtg/src --gcov-options '\-lp';
fi
- if [ "$BUILD_TYPE" == "ANDROID" ]; then
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 build_android/package/bin/Wagic_*.apk -r Wagic-android.apk -b $TRAVIS_BRANCH;
fi
- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$BUILD_TYPE" == "PSP" ]; then
python tools/upload-binaries.py -t $GH_TOKEN -s $TRAVIS_COMMIT -l build_psp/psprelease.zip -r Wagic-psp.zip -b $TRAVIS_BRANCH;
fi
- if [ "$TRAVIS_OS_NAME" == "osx" ] && [ "$BUILD_TYPE" == "iOS" ]; then
python tools/upload-binaries.py -t $GH_TOKEN -s $TRAVIS_COMMIT -l net.wagic_0.19.2-1_iphoneos-arm.deb -r Wagic-iOS.deb -b $TRAVIS_BRANCH;
fi
- if [ "$TRAVIS_OS_NAME" == "osx" ] && [ "$BUILD_TYPE" == "Qt" ]; then
python tools/upload-binaries.py -t $GH_TOKEN -s $TRAVIS_COMMIT -l build_qt_widget/wagic.dmg -r Wagic-macosx.dmg -b $TRAVIS_BRANCH;
fi
- if [ "$TRAVIS_OS_NAME" == "osx" ] && [ "$BUILD_TYPE" == "Emscripten" ]; then
./tools/deploy-emscripten.sh;
fi

239
CMakeLists.txt Normal file
View File

@@ -0,0 +1,239 @@
cmake_minimum_required(VERSION 2.8.7)
if(CMAKE_MAJOR_VERSION STRGREATER 3)
cmake_policy(SET CMP0054 NEW)
endif()
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/CMakeModules)
#this block will fix install prefixes to install everything in a subdirectory
#of cmake_binary_dir if we are on windows/android to make packaging more easy
if(NOT CMAKE_TOOLCHAIN_FILE)
if(WIN32)
set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Install directory")
else()
set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE PATH "Install directory")
endif()
else() #we are cross-compiling (psp/android)
#Android: set output folder for platform/android to pick up
set(LIBRARY_OUTPUT_PATH_ROOT ${CMAKE_BINARY_DIR} CACHE PATH "library output root")
set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Install directory")
endif()
#set available build types (debug/release)
set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Configs" FORCE)
if(DEFINED CMAKE_BUILD_TYPE)
set_property( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ${CMAKE_CONFIGURATION_TYPES} )
endif()
set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/bin" CACHE PATH "Application output directory")
project(wagic CXX C)
#todo: somehow determine wagics version
set(WAGIC_VERSION "0.19")
#add standard paths to search for libraries. borrowed from opencv
if(UNIX AND NOT ANDROID)
if(X86_64 OR CMAKE_SIZEOF_VOID_P EQUAL 8)
if(EXISTS /lib64)
list(APPEND CMAKE_LIBRARY_PATH /lib64)
else()
list(APPEND CMAKE_LIBRARY_PATH /lib)
endif()
if(EXISTS /usr/lib64)
list(APPEND CMAKE_LIBRARY_PATH /usr/lib64)
else()
list(APPEND CMAKE_LIBRARY_PATH /usr/lib)
endif()
elseif(X86 OR CMAKE_SIZEOF_VOID_P EQUAL 4)
if(EXISTS /lib32)
list(APPEND CMAKE_LIBRARY_PATH /lib32)
else()
list(APPEND CMAKE_LIBRARY_PATH /lib)
endif()
if(EXISTS /usr/lib32)
list(APPEND CMAKE_LIBRARY_PATH /usr/lib32)
else()
list(APPEND CMAKE_LIBRARY_PATH /usr/lib)
endif()
endif()
endif()
if(ANDROID OR PSP OR IOS)
#to allow finding of pathes/headers/libs within the source tree
#even if only search for target platform libs
set(CMAKE_FIND_ROOT_PATH ${CMAKE_SOURCE_DIR} ${CMAKE_FIND_ROOT_PATH})
endif()
#also borrowed from opencv
if(MINGW)
if(EXISTS /mingw)
list(APPEND CMAKE_INCLUDE_PATH /mingw)
endif()
if(EXISTS /mingw32)
list(APPEND CMAKE_INCLUDE_PATH /mingw32)
endif()
if(EXISTS /mingw64)
list(APPEND CMAKE_INCLUDE_PATH /mingw64)
endif()
endif()
include(utils)
#select the target backend
if(PSP)
WAGIC_OPTION(backend_psp "build for psp" ON)
endif()
if(WIN32 OR ANDROID OR UNIX)
WAGIC_OPTION(backend_sdl "build for sdl" (WIN32 OR ANDROID OR EMSCRIPTEN))
endif()
if(NOT backend_sdl AND UNIX AND NOT ANDROID AND NOT IOS)
WAGIC_OPTION(backend_qt_console "build qt-console version with testsuit" ON)
WAGIC_OPTION(backend_qt_widget "build qt-widget version" OFF)
endif()
#third party build options
WAGIC_OPTION(BUILD_ZLIB "build zlib from source" WIN32 OR APPLE)
WAGIC_OPTION(BUILD_JPEG "build jpeg from source" (WIN32 OR APPLE OR PSP OR ANDROID OR EMSCRIPTEN))
WAGIC_OPTION(BUILD_PNG "build png from source" (WIN32 OR APPLE OR PSP OR ANDROID OR EMSCRIPTEN))
WAGIC_OPTION(BUILD_UNZIP "build unzip from source" ON)
WAGIC_OPTION(BUILD_TINYXML "build tinyxml from source" (WIN32 OR APPLE OR PSP OR ANDROID OR EMSCRIPTEN OR IOS))
WAGIC_OPTION(BUILD_ZIPFS "build zipfs from source" ON)
WAGIC_OPTION(BUILD_SDL2 "build SDL2 from source" (backend_sdl AND (UNIX OR WIN32 OR ANDROID) AND (NOT EMSCRIPTEN AND NOT IOS)))
#project options
if(ANDROID)
WAGIC_OPTION(BUILD_ANDROID_PACKAGE "put the compiled code in an android package" ON)
endif()
if(ANDROID)
set(LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/lib/${ANDROID_NDK_ABI_NAME}")
set(3P_LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/3rdparty/lib/${ANDROID_NDK_ABI_NAME}")
set(WAGIC_LIB_INSTALL_PATH sdk/native/libs/${ANDROID_NDK_ABI_NAME})
set(WAGIC_3P_LIB_INSTALL_PATH sdk/native/3rdparty/libs/${ANDROID_NDK_ABI_NAME})
set(WAGIC_CONFIG_INSTALL_PATH sdk/native/jni)
set(WAGIC_INCLUDE_INSTALL_PATH sdk/native/jni/include)
set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/package/bin")
else()
set(LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/lib")
set(3P_LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/3rdparty/lib${LIB_SUFFIX}")
set(WAGIC_LIB_INSTALL_PATH lib${LIB_SUFFIX})
set(WAGIC_3P_LIB_INSTALL_PATH share/wagic/3rdparty/${WAGIC_LIB_INSTALL_PATH})
set(WAGIC_INCLUDE_INSTALL_PATH "include")
set(WAGIC_CONFIG_INSTALL_PATH share/wagic)
endif()
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${WAGIC_LIB_INSTALL_PATH}")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
#if no build type is specified, we assume debug
if(CMAKE_GENERATOR MATCHES "Makefiles|Ninja" AND "${CMAKE_BUILD_TYPE}" STREQUAL "")
set(CMAKE_BUILD_TYPE Debug)
endif()
include(FindOrBuild)
#set platform dependend configurations
if(PSP)
FindOrBuildPSPSDK()
include(platforms/psp/configure.cmake)
elseif(EMSCRIPTEN)
include(platforms/emscripten/configure.cmake)
elseif(WIN32)
include(platforms/win/configure.cmake)
elseif(APPLE)
include(platforms/macosx/configure.cmake)
elseif(UNIX AND NOT ANDROID)
include(platforms/unix/configure.cmake)
elseif(ANDROID)
include(platforms/android/configure.cmake)
endif()
#set backend dependend configurations
if(backend_qt_console OR backend_qt_widget)
add_definitions(-DQT_CONFIG)
if(backend_qt_console)
add_definitions(-DTESTSUITE -D_DEBUG)
add_definitions(-DCONSOLE_CONFIG -DCAPTURE_STDERR)
endif()
elseif(backend_sdl)
add_definitions(-DSDL_CONFIG)
endif()
# find or build 3rd party libraries
FindOrBuildZLIB()
FindOrBuildOpenGL()
FindOrBuildTinyXML()
FindOrBuildZipFS()
FindOrBuildUNZIP()
FindOrBuildPNG()
FindOrBuildJPEG()
FindOrBuildBoost()
if(PSP)
FindOrBuildGIF()
endif()
if(ANDROID)
FindOrBuildOpenSL()
endif()
if(backend_sdl)
FindOrBuildSDL2()
endif()
if(backend_psp)
FindOrBuildFreetype()
FindOrBuildHgeTools()
FindOrBuildMikMod()
endif()
if(backend_qt_console OR backend_qt_widget)
FindOrBuildQt()
endif()
if(ANDROID)
include(DetectAndroidSDK)
endif()
if(BUILD_ANDROID_PACKAGE)
find_package(Ant REQUIRED)
endif()
#add jge and mtg projects
add_subdirectory(JGE)
add_subdirectory(projects/mtg)
if(BUILD_ANDROID_PACKAGE)
add_subdirectory(platforms/android/package)
endif()
if(EMSCRIPTEN)
set(CMAKE_EXECUTABLE_SUFFIX ".html")
endif()
if(IOS)
list_add_prefix(JGE_SOURCES " JGE/")
list_add_prefix(MTG_generic_src " projects/mtg/")
list_add_prefix(JGE_INCLUDE_DIRS " -IJGE/")
list_add_prefix(MTG_INCLUDE_DIRS " -Iprojects/mtg/")
list_add_prefix(TINYXML_SRC " thirdparty/tinyxml/")
list_add_prefix(UNZIP_SRC " thirdparty/unzip/")
list_add_prefix(ZIPFS_SRC " thirdparty/zipFS/")
file(WRITE makefile.ios
"ARCHS= armv7 armv7s \n"
"include ${THEOS_PATH}/makefiles/common.mk\n"
"TARGET= iphone:clang:latest:8.0 \n"
"APPLICATION_NAME = " ${PROJECT_NAME} "\n"
${PROJECT_NAME} "_FILES =" ${ZIPFS_SRC} ${UNZIP_SRC} ${TINYXML_SRC} ${JGE_SOURCES} ${MTG_generic_src} " thirdparty/Boost/lib/pthread/once.cpp thirdparty/Boost/lib/pthread/thread.cpp\n"
${PROJECT_NAME} "_LDFLAGS = -lz\n"
${PROJECT_NAME} "_FRAMEWORKS = UIKit CoreGraphics OpenGLES Foundation CFNetwork MobileCoreServices AVFoundation OpenAL AudioToolbox QuartzCore SystemConfiguration\n"
"include ${THEOS_PATH}/makefiles/application.mk\n"
"ADDITIONAL_CFLAGS = " ${MTG_INCLUDE_DIRS} ${JGE_INCLUDE_DIRS} " -I" ${ZIPFS_INCLUDE_DIR} " -I" ${UNZIP_INCLUDE_DIR} " -I" ${HGE_INCLUDE_DIR} ${TINYXML_INCLUDE_DIR} " -I" ${ZLIB_INCLUDE_DIRS} ${BOOST_INCLUDE_DIRS} " "
"-DIOS -D__arm__ -DTIXML_USE_STL -DVERSION=\"$(GIT_VERSION)\" "
"-Wno-parentheses-equality -Wno-delete-non-virtual-dtor "
"-Wno-tautological-undefined-compare -Wno-undefined-bool-conversion "
"-Wno-visibility -Wno-deprecated-declarations -Wno-non-literal-null-conversion "
"-Wno-format -Wno-distributed-object-modifiers -Wno-missing-braces -Wno-uninitialized "
"-Wno-unused-const-variable -Wno-unused-function -Wno-unknown-warning-option -Wno-unused-local-typedef "
"-x objective-c++ \n"
"_THEOS_TARGET_ONLY_OBJCFLAGS :=\"\"\n"
)
endif()

View File

@@ -0,0 +1,373 @@
if(EXISTS "${ANDROID_EXECUTABLE}")
set(ANDROID_SDK_DETECT_QUIET TRUE)
endif()
file(TO_CMAKE_PATH "$ENV{ProgramFiles}" ProgramFiles_ENV_PATH)
file(TO_CMAKE_PATH "$ENV{HOME}" HOME_ENV_PATH)
if(CMAKE_HOST_WIN32)
set(ANDROID_SDK_OS windows)
elseif(CMAKE_HOST_APPLE)
set(ANDROID_SDK_OS macosx)
else()
set(ANDROID_SDK_OS linux)
endif()
#find android SDK: search in ANDROID_SDK first
find_host_program(ANDROID_EXECUTABLE
NAMES android.bat android
PATH_SUFFIXES tools
PATHS
ENV ANDROID_SDK
DOC "Android SDK location"
NO_DEFAULT_PATH
)
# Now search default paths
find_host_program(ANDROID_EXECUTABLE
NAMES android.bat android
PATH_SUFFIXES android-sdk-${ANDROID_SDK_OS}/tools
android-sdk-${ANDROID_SDK_OS}_x86/tools
android-sdk-${ANDROID_SDK_OS}_86/tools
android-sdk/tools
PATHS /opt
"${HOME_ENV_PATH}/NVPACK"
"$ENV{SystemDrive}/NVPACK"
"${ProgramFiles_ENV_PATH}/Android"
DOC "Android SDK location"
)
if(ANDROID_EXECUTABLE)
if(NOT ANDROID_SDK_DETECT_QUIET)
message(STATUS "Found android tool: ${ANDROID_EXECUTABLE}")
endif()
get_filename_component(ANDROID_SDK_TOOLS_PATH "${ANDROID_EXECUTABLE}" PATH)
#read source.properties
if(EXISTS "${ANDROID_SDK_TOOLS_PATH}/source.properties")
file(STRINGS "${ANDROID_SDK_TOOLS_PATH}/source.properties" ANDROID_SDK_TOOLS_SOURCE_PROPERTIES_LINES REGEX "^[ ]*[^#].*$")
foreach(line ${ANDROID_SDK_TOOLS_SOURCE_PROPERTIES_LINES})
string(REPLACE "\\:" ":" line ${line})
string(REPLACE "=" ";" line ${line})
list(GET line 0 line_name)
list(GET line 1 line_value)
string(REPLACE "." "_" line_name ${line_name})
SET(ANDROID_TOOLS_${line_name} "${line_value}" CACHE INTERNAL "from ${ANDROID_SDK_TOOLS_PATH}/source.properties")
MARK_AS_ADVANCED(ANDROID_TOOLS_${line_name})
endforeach()
endif()
#fix missing revision (SDK tools before r9 don't set revision number correctly)
if(NOT ANDROID_TOOLS_Pkg_Revision)
SET(ANDROID_TOOLS_Pkg_Revision "Unknown" CACHE INTERNAL "")
MARK_AS_ADVANCED(ANDROID_TOOLS_Pkg_Revision)
endif()
#fix missing description
if(NOT ANDROID_TOOLS_Pkg_Desc)
SET(ANDROID_TOOLS_Pkg_Desc "Android SDK Tools, revision ${ANDROID_TOOLS_Pkg_Revision}." CACHE INTERNAL "")
MARK_AS_ADVANCED(ANDROID_TOOLS_Pkg_Desc)
endif()
#warn about outdated SDK
if(NOT ANDROID_TOOLS_Pkg_Revision GREATER 13)
SET(ANDROID_TOOLS_Pkg_Desc "${ANDROID_TOOLS_Pkg_Desc} It is recommended to update your SDK tools to revision 14 or newer." CACHE INTERNAL "")
endif()
if(ANDROID_TOOLS_Pkg_Revision GREATER 13)
SET(ANDROID_PROJECT_PROPERTIES_FILE project.properties)
SET(ANDROID_ANT_PROPERTIES_FILE ant.properties)
else()
SET(ANDROID_PROJECT_PROPERTIES_FILE default.properties)
SET(ANDROID_ANT_PROPERTIES_FILE build.properties)
endif()
set(ANDROID_MANIFEST_FILE AndroidManifest.xml)
set(ANDROID_LIB_PROJECT_FILES build.xml local.properties proguard-project.txt ${ANDROID_PROJECT_PROPERTIES_FILE})
set(ANDROID_PROJECT_FILES ${ANDROID_LIB_PROJECT_FILES})
#get installed targets
if(ANDROID_TOOLS_Pkg_Revision GREATER 11)
execute_process(COMMAND ${ANDROID_EXECUTABLE} list target -c
RESULT_VARIABLE ANDROID_PROCESS
OUTPUT_VARIABLE ANDROID_SDK_TARGETS
ERROR_VARIABLE ANDROID_PROCESS_ERRORS
OUTPUT_STRIP_TRAILING_WHITESPACE
)
string(REGEX MATCHALL "[^\n]+" ANDROID_SDK_TARGETS "${ANDROID_SDK_TARGETS}")
else()
#old SDKs (r11 and older) don't provide compact list
execute_process(COMMAND ${ANDROID_EXECUTABLE} list target
RESULT_VARIABLE ANDROID_PROCESS
OUTPUT_VARIABLE ANDROID_SDK_TARGETS_FULL
ERROR_VARIABLE ANDROID_PROCESS_ERRORS
OUTPUT_STRIP_TRAILING_WHITESPACE
)
string(REGEX MATCHALL "(^|\n)id: [0-9]+ or \"([^\n]+[0-9+])\"(\n|$)" ANDROID_SDK_TARGETS_FULL "${ANDROID_SDK_TARGETS_FULL}")
SET(ANDROID_SDK_TARGETS "")
if(ANDROID_PROCESS EQUAL 0)
foreach(line ${ANDROID_SDK_TARGETS_FULL})
string(REGEX REPLACE "(^|\n)id: [0-9]+ or \"([^\n]+[0-9+])\"(\n|$)" "\\2" line "${line}")
list(APPEND ANDROID_SDK_TARGETS "${line}")
endforeach()
endif()
endif()
if(NOT ANDROID_PROCESS EQUAL 0)
message(ERROR "Failed to get list of installed Android targets.")
set(ANDROID_EXECUTABLE "ANDROID_EXECUTABLE-NOTFOUND")
endif()
# clear ANDROID_SDK_TARGET if no target is provided by user
if(NOT ANDROID_SDK_TARGET)
set(ANDROID_SDK_TARGET "" CACHE STRING "Android SDK target for the Wagic Java API and samples")
endif()
if(ANDROID_SDK_TARGETS)
set_property( CACHE ANDROID_SDK_TARGET PROPERTY STRINGS ${ANDROID_SDK_TARGETS} )
endif()
endif(ANDROID_EXECUTABLE)
# finds minimal installed SDK target compatible with provided names or API levels
# usage:
# get_compatible_android_api_level(VARIABLE [level1] [level2] ...)
macro(android_get_compatible_target VAR)
set(${VAR} "${VAR}-NOTFOUND")
if(ANDROID_SDK_TARGETS)
list(GET ANDROID_SDK_TARGETS 0 __lvl)
string(REGEX MATCH "[0-9]+$" __lvl "${__lvl}")
#find minimal level mathing to all provided levels
foreach(lvl ${ARGN})
string(REGEX MATCH "[0-9]+$" __level "${lvl}")
if(__level GREATER __lvl)
set(__lvl ${__level})
endif()
endforeach()
#search for compatible levels
foreach(lvl ${ANDROID_SDK_TARGETS})
string(REGEX MATCH "[0-9]+$" __level "${lvl}")
if(__level EQUAL __lvl)
#look for exact match
foreach(usrlvl ${ARGN})
if("${usrlvl}" STREQUAL "${lvl}")
set(${VAR} "${lvl}")
break()
endif()
endforeach()
if("${${VAR}}" STREQUAL "${lvl}")
break() #exact match was found
elseif(NOT ${VAR})
set(${VAR} "${lvl}")
endif()
elseif(__level GREATER __lvl)
if(NOT ${VAR})
set(${VAR} "${lvl}")
endif()
break()
endif()
endforeach()
unset(__lvl)
unset(__level)
endif()
endmacro()
unset(__android_project_chain CACHE)
# add_android_project(target_name ${path} NATIVE_DEPS opencv_core LIBRARY_DEPS ${Wagic_BINARY_DIR} SDK_TARGET 11)
macro(add_android_project target path)
# parse arguments
set(android_proj_arglist NATIVE_DEPS LIBRARY_DEPS SDK_TARGET IGNORE_JAVA IGNORE_MANIFEST)
set(__varname "android_proj_")
foreach(v ${android_proj_arglist})
set(${__varname}${v} "")
endforeach()
foreach(arg ${ARGN})
set(__var "${__varname}")
foreach(v ${android_proj_arglist})
if("${v}" STREQUAL "${arg}")
set(__varname "android_proj_${v}")
break()
endif()
endforeach()
if(__var STREQUAL __varname)
list(APPEND ${__var} "${arg}")
endif()
endforeach()
# get compatible SDK target
android_get_compatible_target(android_proj_sdk_target ${ANDROID_NATIVE_API_LEVEL} ${android_proj_SDK_TARGET})
if(NOT android_proj_sdk_target)
message(WARNING "Can not find any SDK target compatible with: ${ANDROID_NATIVE_API_LEVEL} ${android_proj_SDK_TARGET}
The project ${target} will not be build")
endif()
# check native dependencies
if(android_proj_IGNORE_JAVA)
ocv_check_dependencies(${android_proj_NATIVE_DEPS})
else()
ocv_check_dependencies(${android_proj_NATIVE_DEPS} opencv_java)
endif()
if(EXISTS "${path}/jni/Android.mk" )
# find if native_app_glue is used
file(STRINGS "${path}/jni/Android.mk" NATIVE_APP_GLUE REGEX ".*(call import-module,android/native_app_glue)" )
if(NATIVE_APP_GLUE)
if(ANDROID_NATIVE_API_LEVEL LESS 9 OR NOT EXISTS "${ANDROID_NDK}/sources/android/native_app_glue")
set(OCV_DEPENDENCIES_FOUND FALSE)
endif()
endif()
endif()
if(OCV_DEPENDENCIES_FOUND AND android_proj_sdk_target AND ANDROID_EXECUTABLE AND ANT_EXECUTABLE AND ANDROID_TOOLS_Pkg_Revision GREATER 13 AND EXISTS "${path}/${ANDROID_MANIFEST_FILE}")
project(${target})
set(android_proj_bin_dir "${CMAKE_CURRENT_BINARY_DIR}/.build")
# get project sources
file(GLOB_RECURSE android_proj_files RELATIVE "${path}" "${path}/res/*" "${path}/src/*")
if(NOT android_proj_IGNORE_MANIFEST)
list(APPEND android_proj_files ${ANDROID_MANIFEST_FILE})
endif()
# copy sources out from the build tree
set(android_proj_file_deps "")
foreach(f ${android_proj_files})
add_custom_command(
OUTPUT "${android_proj_bin_dir}/${f}"
COMMAND ${CMAKE_COMMAND} -E copy "${path}/${f}" "${android_proj_bin_dir}/${f}"
MAIN_DEPENDENCY "${path}/${f}"
COMMENT "Copying ${f}")
list(APPEND android_proj_file_deps "${path}/${f}" "${android_proj_bin_dir}/${f}")
endforeach()
set(android_proj_lib_deps_commands "")
set(android_proj_target_files ${ANDROID_PROJECT_FILES})
ocv_list_add_prefix(android_proj_target_files "${android_proj_bin_dir}/")
# process Android library dependencies
foreach(dep ${android_proj_LIBRARY_DEPS})
file(RELATIVE_PATH __dep "${android_proj_bin_dir}" "${dep}")
list(APPEND android_proj_lib_deps_commands
COMMAND ${ANDROID_EXECUTABLE} --silent update project --path "${android_proj_bin_dir}" --library "${__dep}")
endforeach()
# fix Android project
add_custom_command(
OUTPUT ${android_proj_target_files}
COMMAND ${CMAKE_COMMAND} -E remove ${android_proj_target_files}
COMMAND ${ANDROID_EXECUTABLE} --silent update project --path "${android_proj_bin_dir}" --target "${android_proj_sdk_target}" --name "${target}"
${android_proj_lib_deps_commands}
MAIN_DEPENDENCY "${android_proj_bin_dir}/${ANDROID_MANIFEST_FILE}"
DEPENDS "${path}/${ANDROID_MANIFEST_FILE}"
COMMENT "Updating Android project at ${path}. SDK target: ${android_proj_sdk_target}"
)
list(APPEND android_proj_file_deps ${android_proj_target_files})
# build native part
file(GLOB_RECURSE android_proj_jni_files "${path}/jni/*.c" "${path}/jni/*.h" "${path}/jni/*.cpp" "${path}/jni/*.hpp")
ocv_list_filterout(android_proj_jni_files "\\\\.svn")
if(android_proj_jni_files AND EXISTS ${path}/jni/Android.mk AND NOT DEFINED JNI_LIB_NAME)
# find local module name in Android.mk file to build native lib
file(STRINGS "${path}/jni/Android.mk" JNI_LIB_NAME REGEX "LOCAL_MODULE[ ]*:=[ ]*.*" )
string(REGEX REPLACE "LOCAL_MODULE[ ]*:=[ ]*([a-zA-Z_][a-zA-Z_0-9]*)[ ]*" "\\1" JNI_LIB_NAME "${JNI_LIB_NAME}")
if(JNI_LIB_NAME)
ocv_include_modules_recurse(${android_proj_NATIVE_DEPS})
ocv_include_directories("${path}/jni")
if(NATIVE_APP_GLUE)
include_directories(${ANDROID_NDK}/sources/android/native_app_glue)
list(APPEND android_proj_jni_files ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c)
ocv_warnings_disable(CMAKE_C_FLAGS -Wstrict-prototypes -Wunused-parameter -Wmissing-prototypes)
set(android_proj_NATIVE_DEPS ${android_proj_NATIVE_DEPS} android)
endif()
add_library(${JNI_LIB_NAME} MODULE ${android_proj_jni_files})
target_link_libraries(${JNI_LIB_NAME} ${OPENCV_LINKER_LIBS} ${android_proj_NATIVE_DEPS})
set_target_properties(${JNI_LIB_NAME} PROPERTIES
OUTPUT_NAME "${JNI_LIB_NAME}"
LIBRARY_OUTPUT_DIRECTORY "${android_proj_bin_dir}/libs/${ANDROID_NDK_ABI_NAME}"
)
get_target_property(android_proj_jni_location "${JNI_LIB_NAME}" LOCATION)
if (NOT (CMAKE_BUILD_TYPE MATCHES "debug"))
add_custom_command(TARGET ${JNI_LIB_NAME} POST_BUILD COMMAND ${CMAKE_STRIP} --strip-unneeded "${android_proj_jni_location}")
endif()
endif()
endif()
# build java part
if(android_proj_IGNORE_JAVA)
add_custom_command(
OUTPUT "${android_proj_bin_dir}/bin/${target}-debug.apk"
COMMAND ${ANT_EXECUTABLE} -q -noinput -k debug
COMMAND ${CMAKE_COMMAND} -E touch "${android_proj_bin_dir}/bin/${target}-debug.apk" # needed because ant does not update the timestamp of updated apk
WORKING_DIRECTORY "${android_proj_bin_dir}"
MAIN_DEPENDENCY "${android_proj_bin_dir}/${ANDROID_MANIFEST_FILE}"
DEPENDS ${android_proj_file_deps} ${JNI_LIB_NAME})
else()
add_custom_command(
OUTPUT "${android_proj_bin_dir}/bin/${target}-debug.apk"
COMMAND ${ANT_EXECUTABLE} -q -noinput -k debug
COMMAND ${CMAKE_COMMAND} -E touch "${android_proj_bin_dir}/bin/${target}-debug.apk" # needed because ant does not update the timestamp of updated apk
WORKING_DIRECTORY "${android_proj_bin_dir}"
MAIN_DEPENDENCY "${android_proj_bin_dir}/${ANDROID_MANIFEST_FILE}"
DEPENDS "${Wagic_BINARY_DIR}/bin/classes.jar.dephelper" opencv_java # as we are part of Wagic we can just force this dependency
DEPENDS ${android_proj_file_deps} ${JNI_LIB_NAME})
endif()
unset(JNI_LIB_NAME)
add_custom_target(${target} ALL SOURCES "${android_proj_bin_dir}/bin/${target}-debug.apk" )
if(NOT android_proj_IGNORE_JAVA)
add_dependencies(${target} opencv_java)
endif()
if(android_proj_native_deps)
add_dependencies(${target} ${android_proj_native_deps})
endif()
if(__android_project_chain)
add_dependencies(${target} ${__android_project_chain})
endif()
set(__android_project_chain ${target} CACHE INTERNAL "auxiliary variable used for Android progects chaining")
# put the final .apk to the Wagic's bin folder
add_custom_command(TARGET ${target} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy "${android_proj_bin_dir}/bin/${target}-debug.apk" "${Wagic_BINARY_DIR}/bin/${target}.apk")
if(INSTALL_ANDROID_EXAMPLES AND "${target}" MATCHES "^example-")
#apk
install(FILES "${Wagic_BINARY_DIR}/bin/${target}.apk" DESTINATION "samples" COMPONENT main)
get_filename_component(sample_dir "${path}" NAME)
#java part
list(REMOVE_ITEM android_proj_files ${ANDROID_MANIFEST_FILE})
foreach(f ${android_proj_files} ${ANDROID_MANIFEST_FILE})
get_filename_component(install_subdir "${f}" PATH)
install(FILES "${android_proj_bin_dir}/${f}" DESTINATION "samples/${sample_dir}/${install_subdir}" COMPONENT main)
endforeach()
#jni part + eclipse files
file(GLOB_RECURSE jni_files RELATIVE "${path}" "${path}/jni/*" "${path}/.cproject")
ocv_list_filterout(jni_files "\\\\.svn")
foreach(f ${jni_files} ".classpath" ".project" ".settings/org.eclipse.jdt.core.prefs")
get_filename_component(install_subdir "${f}" PATH)
install(FILES "${path}/${f}" DESTINATION "samples/${sample_dir}/${install_subdir}" COMPONENT main)
endforeach()
#update proj
if(android_proj_lib_deps_commands)
set(inst_lib_opt " --library ../../sdk/java")
endif()
install(CODE "EXECUTE_PROCESS(COMMAND ${ANDROID_EXECUTABLE} --silent update project --path . --target \"${android_proj_sdk_target}\" --name \"${target}\" ${inst_lib_opt}
WORKING_DIRECTORY \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/samples/${sample_dir}\"
)" COMPONENT main)
#empty 'gen'
install(CODE "MAKE_DIRECTORY(\"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/samples/${sample_dir}/gen\")" COMPONENT main)
endif()
endif()
endmacro()

View File

@@ -0,0 +1,13 @@
find_host_program(ANT_EXECUTABLE "ant")
if(ANT_EXECUTABLE)
set(ANT_FOUND ON)
else()
set(ANT_FOUND OFF)
endif()
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(ANT REQUIRED_VARS ANT_EXECUTABLE)
mark_as_advanced(ANT_EXECUTABLE ANT_FOUND)

View File

@@ -0,0 +1,29 @@
# - Find OpenSL (actually OpenSLES)
# Find the OpenSLES includes and libraries
#
# OPENSL_INCLUDE_DIR - where to find dsound.h
# OPENSL_LIBRARIES - List of libraries when using dsound.
# OPENSL_FOUND - True if dsound found.
if(OPENSL_INCLUDE_DIR)
# Already in cache, be silent
set(OPENSL_FIND_QUIETLY TRUE)
endif(OPENSL_INCLUDE_DIR)
find_path(OPENSL_INCLUDE_DIR SLES/OpenSLES.h)
find_library(OPENSL_LIBRARY NAMES OpenSLES)
# Handle the QUIETLY and REQUIRED arguments and set OPENSL_FOUND to TRUE if
# all listed variables are TRUE.
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(OPENSL DEFAULT_MSG
OPENSL_INCLUDE_DIR OPENSL_LIBRARY)
if(OPENSL_FOUND)
set(OPENSL_LIBRARIES ${OPENSL_LIBRARY})
else(OPENSL_FOUND)
set(OPENSL_LIBRARIES)
endif(OPENSL_FOUND)
mark_as_advanced(OPENSL_INCLUDE_DIR OPENSL_LIBRARY)

View File

@@ -0,0 +1,231 @@
macro(FindOrBuildZipFS)
if(BUILD_ZIPFS)
add_subdirectory(
${CMAKE_SOURCE_DIR}/thirdparty/zipFS
${CMAKE_BINARY_DIR}/thirdparty/zipFS)
set(ZIPFS_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/thirdparty/zipFS)
set(ZIPFS_LIBRARY zipFS)
else()
message(WARNING "ZIPFS must get build")
endif()
endmacro()
macro(FindOrBuildTinyXML)
if(BUILD_TINYXML)
add_definitions(-DTIXML_USE_STL)
add_subdirectory(
${CMAKE_SOURCE_DIR}/thirdparty/tinyxml
${CMAKE_BINARY_DIR}/thirdparty/tinyxml)
set(TINYXML_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/thirdparty/tinyxml)
set(TINYXML_LIBRARIES tinyxml)
else()
find_package(TinyXML REQUIRED)
endif()
endmacro()
macro(FindOrBuildSDL2)
if(BUILD_SDL2)
if(WIN32)
#SDL2 DirectX build is somehow broken...
set(SDL_AUDIO FALSE)
set(SDL_JOYSTICK FALSE)
set(SDL_HAPTIC FALSE)
set(SDL_SHARED FALSE)
endif()
add_subdirectory(${CMAKE_SOURCE_DIR}/thirdparty/SDL2)
set(SDL2_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/thirdparty/SDL2/include ${CMAKE_BINARY_DIR}/thirdparty/SDL2)
if(EMSCRIPTEN)
set(SDL2_LIBRARY SDL2-static)
else()
set(SDL2_LIBRARY SDL2)
endif()
elseif(NOT EMSCRIPTEN)
find_package(SDL2)
endif()
endmacro()
macro(FindOrBuildUNZIP)
if(BUILD_UNZIP)
add_subdirectory(
${CMAKE_SOURCE_DIR}/thirdparty/unzip
${CMAKE_BINARY_DIR}/thirdparty/unzip)
set(UNZIP_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/thirdparty/unzip)
set(UNZIP_LIBRARY unzip)
else()
message(WARNING "UNZIP must get build")
endif()
endmacro()
macro(FindOrBuildBoost)
if(PSP OR UNIX OR WIN32 OR IOS)
#the psp build does not need more than a few headers
#todo: remove from the repository
set(BOOST_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/thirdparty/Boost)
# elseif(WIN32)
#set BOOST_ROOT to the root of boost
# set(Boost_USE_STATIC_LIBS ON)
# set(Boost_USE_MULTITHREADED ON)
# set(BOOST_ROOT $ENV{BOOST_ROOT})
# set(BOOST_LIBRARYDIR ${BOOST_ROOT}/libs)
# set(BOOST_INCLUDEDIR ${BOOST_ROOT})
# find_package(Boost COMPONENTS system thread date_time REQUIRED)
# if(NOT Boost_FOUND)
# message("Set the BOOST_ROOT environment variable to point to your boost installation.")
# message("We need system thread and date_time compiled static libs")
# message("These libs are compiler specific.")
# endif()
# elseif(UNIX AND NOT ANDROID)
# find_package(Boost COMPONENTS system thread date_time REQUIRED)
elseif(ANDROID)
#this is a hack. we compile a few boost libds directly into
#the application. we should require static libs for android
#to be available. maybe we could add the build option to
#download and build a compatible boost version
find_path(BOOST_INCLUDE_DIRS NAMES bind.hpp HINTS $ENV{ANDROID_BOOST_ROOT} PATH_SUFFIXES boost)
if(BOOST_INCLUDE_DIRS)
get_filename_component(BOOST_INCLUDE_DIRS ${BOOST_INCLUDE_DIRS} PATH)
set(ANDROID_BOOST_PTHREAD_SRC_DIR ${BOOST_INCLUDE_DIRS}/libs/thread/src/pthread)
set(ANDROID_BOOST_SYSTEM_SRC_DIR ${BOOST_INCLUDE_DIRS}/libs/system/src/)
else()
message(SEND_ERROR "We require a few boost sources to get compiled into wagic. Please point the ANDROID_BOOST_ROOT environment variable to a boost-source copy root.")
endif()
endif()
endmacro()
macro(FindOrBuildZLIB)
if(BUILD_ZLIB)
add_subdirectory(${CMAKE_SOURCE_DIR}/thirdparty/zlib)
set(ZLIB_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/thirdparty/zlib ${CMAKE_BINARY_DIR}/thirdparty/zlib)
set(ZLIB_LIBRARIES zlib)
else()
if(WIN32)
set(ZLIB_ROOT ${CMAKE_SOURCE_DIR}/thirdparty/binary/win)
find_package(ZLIB)
else()
if(backend_qt_console OR backend_qt_widget OR EMSCRIPTEN)
set(ZLIB_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/thirdparty/zlib)
else()
find_package(ZLIB)
endif()
endif()
endif()
endmacro()
macro(FindOrBuildGIF)
if(BUILD_GIF)
message(WARNING "GIF sources are currently not included within the wagic tree")
else()
if(PSP)
find_package(GIF)
endif()
endif()
endmacro()
macro(FindOrBuildJPEG)
if(BUILD_JPEG)
add_subdirectory(${CMAKE_SOURCE_DIR}/thirdparty/libjpeg ${CMAKE_BINARY_DIR}/thirdparty/libjpeg)
set(JPEG_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/thirdparty/libjpeg)
set(JPEG_LIBRARY jpeg)
else()
if(WIN32)
#findJPEG does currently not provide prefix vars to guide it
find_path(JPEG_INCLUDE_DIR jpeglib.h HINTS ${CMAKE_SOURCE_DIR}/thirdparty/binary/win/include)
find_library(JPEG_LIBRARY NAMES libjpeg-static-mt HINTS ${CMAKE_SOURCE_DIR}/thirdparty/binary/win/lib)
if(JPEG_INCLUDE_DIR AND JPEG_LIBRARY)
set(JPEG_FOUND ON)
mark_as_advanced(JPEG_INCLUDE_DIR JPEG_LIBRARY)
else()
message(FATAL_ERROR "Could not find JPEG on windows")
endif()
else()
find_package(JPEG)
endif()
endif()
endmacro()
macro(FindOrBuildPNG)
if(BUILD_PNG)
add_subdirectory(${CMAKE_SOURCE_DIR}/thirdparty/libpng ${CMAKE_BINARY_DIR}/thirdparty/libpng)
set(PNG_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/thirdparty/libpng)
# find_path(PNG_INCLUDE_DIRS NAMES png.h HINTS ${CMAKE_SOURCE_DIR}/thirdparty/libpng)
set(PNG_LIBRARIES png)
else()
if(WIN32)
#findPNG does currently not provide prefix vars. so we find
find_path(PNG_INCLUDE_DIRS png.h HINTS ${CMAKE_SOURCE_DIR}/thirdparty/binary/win/include)
find_library(PNG_LIBRARIES libpng HINTS ${CMAKE_SOURCE_DIR}/thirdparty/binary/win/lib)
if (PNG_LIBRARIES AND PNG_INCLUDE_DIRS)
set(PNG_FOUND ON)
mark_as_advanced(PNG_INCLUDE_DIRS PNG_LIBRARIES)
else()
message(FATAL_ERROR "Could not find PNG on windows")
endif()
else()
find_package(PNG)
endif()
endif()
endmacro()
macro(FindOrBuildFreetype)
if(PSP)
set(ENV{FREETYPE_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR}/thirdparty/binary/psp/include)
set(ENV{FREETYPE_LIBRARIES} freetype)
endif()
endmacro()
macro(FindOrBuildHgeTools)
if(PSP)
find_library(HGETOOLS_LIBRARY NAMES hgetools HINTS "${CMAKE_SOURCE_DIR}/thirdparty/binary/psp/lib")
set(HGETOOLS_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/thirdparty/binary/psp/include")
endif()
endmacro()
macro(FindOrBuildMikMod)
if(PSP)
find_library(MIKMOD_LIBRARY NAMES mikmod HINTS "${CMAKE_SOURCE_DIR}/thirdparty/binary/psp/lib")
set(MIKMOD_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/thirdparty/binary/psp/include")
endif()
endmacro()
macro(FindOrBuildQt)
if(backend_qt_console)
add_definitions(-DCONSOLE_CONFIG -DTESTSUITE)
find_package(Qt5Core REQUIRED)
find_package(Qt5 COMPONENTS Core Network Multimedia REQUIRED)
elseif(backend_qt_widget)
add_definitions(-DQT_WIDGET)
find_package(OpenGL REQUIRED)
find_package(X11 REQUIRED)
find_package(Qt5 COMPONENTS Core Gui OpenGL Network Multimedia REQUIRED)
endif()
# include(${QT_USE_FILE})
endmacro()
macro(FindOrBuildOpenGL)
if(backend_sdl OR backend_qt_console OR backend_qt_widget)
if(ANDROID)
#find openglesv on android
set(OPENGL_LIBRARIES "-ldl -lGLESv1_CM -lGLESv2 -llog -landroid")
elseif(EMSCRIPTEN)
set(OPENGL_LIBRARIES "")
else()
find_package(OpenGL)
# find_package(GLUT)
endif()
endif()
endmacro()
macro(FindOrBuildOpenSL)
find_package(OpenSL)
endmacro()
macro(FindOrBuildPSPSDK)
find_package(PSPSDK COMPONENTS psppower pspmpeg pspaudiocodec pspaudiolib pspaudio pspmp3 pspgum pspgu psprtc pspfpu REQUIRED)
endmacro()

View File

@@ -0,0 +1,62 @@
# - Try to find PSPSDK
# Once done this will define
# PSPSDK_FOUND - System has PSPSDK
# PSPSDK_INCLUDE_DIR - The PSPSDK include directories
# PSPSDK_LIB - The libraries requested with the components field
# PSPSDK_REQUIRED_LIB - The libriries the PSPSDK needs always
# PSPSDK_CFLAGS - The CFLAGS to use
# PSPSDK_PATH - The output of psp-config --pspsdk-path
# PSPSDK_PREFIX - The output of psp-config --psp-prefix
# PSPSDK_CXX_COMPILER - The PSPSDK CXX Compilers path
# PSPSDK_CXX_LINKER - The PSPSDK CXX Linker command
# PSPSDK_FIXUP_IMPORTS_COMMAND - psp-fixup-imports command
# PSPSDK_PRXGEN_COMMAND - psp-prxgen command
# PSPSDK_PACK_PBP_COMMAND - pack-pbp command
# PSPSDK_MKSFO_COMMAND - mksfo command
#find the psp-config progams absolute path
#psp-config needs to be reachable via the system shell (PATH)
find_program(PSP_CONFIG_PROGRAM psp-config)
#TODO: check if something is REQUIRED and throw errors instead of messages
if(PSP_CONFIG_PROGRAM)
find_program(PSPSDK_CXX_COMPILER psp-g++)
find_program(PSPSDK_CXX_LINKER psp-gcc)
find_program(PSPSDK_FIXUP_IMPORTS_COMMAND psp-fixup-imports)
find_program(PSPSDK_PRXGEN_COMMAND psp-prxgen)
find_program(PSPSDK_PACK_PBP_COMMAND pack-pbp)
find_program(PSPSDK_MKSFO_COMMAND mksfo)
#ask psp-config for the
execute_process(COMMAND psp-config --pspsdk-path OUTPUT_VARIABLE PSPSDK_PATH OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND psp-config --psp-prefix OUTPUT_VARIABLE PSPSDK_PREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
set(PSPSDK_INCLUDE_DIR "${PSPSDK_PATH}/include")
foreach(_COMPONENT ${PSPSDK_FIND_COMPONENTS})
find_library(PSPSDK_${_COMPONENT} NAMES ${_COMPONENT})
if(NOT PSPSDK_${_COMPONENT})
message(SEND_ERROR "PSPSDK: ${_COMPONENT} not found")
else()
set(PSPSDK_LIB ${PSPSDK_LIB} ${PSPSDK_${_COMPONENT}})
endif()
endforeach()
#find libs which pspsdk does require to link even if the programs does not need one of them directly
foreach(_COMPONENT pspdebug pspdisplay pspge pspctrl pspsdk c pspnet pspnet_inet pspnet_apctl pspnet_resolver psputility pspuser)
find_library(PSPSDK_${_COMPONENT} NAMES ${_COMPONENT})
if(NOT PSPSDK_${_COMPONENT})
message(SEND_ERROR "PSPSDK: ${_COMPONENT} not found")
else()
set(PSPSDK_REQUIRED_LIB ${PSPSDK_REQUIRED_LIB} ${PSPSDK_${_COMPONENT}})
endif()
endforeach()
endif()
include(FindPackageHandleStandardArgs)
# handle the QUIETLY and REQUIRED arguments and set LIBXML2_FOUND to TRUE
# if all listed variables are TRUE
find_package_handle_standard_args(PSPSDK DEFAULT_MSG
PSPSDK_CXX_LINKER PSPSDK_CXX_COMPILER PSPSDK_PATH PSPSDK_PREFIX PSPSDK_LIB PSPSDK_REQUIRED_LIB PSPSDK_INCLUDE_DIR)
mark_as_advanced(PSPSDK_CXX_LINKER PSPSDK_CXX_COMPILER PSPSDK_PATH PSPSDK_PREFIX PSPSDK_LIB PSPSDK_REQUIRED_LIB PSPSDK_INCLUDE_DIR)

181
CMakeModules/FindSDL2.cmake Normal file
View File

@@ -0,0 +1,181 @@
# Locate SDL2 library
# This module defines
# SDL2_LIBRARY, the name of the library to link against
# SDL2_FOUND, if false, do not try to link to SDL2
# SDL2_INCLUDE_DIR, where to find SDL.h
#
# This module responds to the the flag:
# SDL2_BUILDING_LIBRARY
# If this is defined, then no SDL2_main will be linked in because
# only applications need main().
# Otherwise, it is assumed you are building an application and this
# module will attempt to locate and set the the proper link flags
# as part of the returned SDL2_LIBRARY variable.
#
# Don't forget to include SDL2main.h and SDL2main.m your project for the
# OS X framework based version. (Other versions link to -lSDL2main which
# this module will try to find on your behalf.) Also for OS X, this
# module will automatically add the -framework Cocoa on your behalf.
#
#
# Additional Note: If you see an empty SDL2_LIBRARY_TEMP in your configuration
# and no SDL2_LIBRARY, it means CMake did not find your SDL2 library
# (SDL2.dll, libsdl2.so, SDL2.framework, etc).
# Set SDL2_LIBRARY_TEMP to point to your SDL2 library, and configure again.
# Similarly, if you see an empty SDL2MAIN_LIBRARY, you should set this value
# as appropriate. These values are used to generate the final SDL2_LIBRARY
# variable, but when these values are unset, SDL2_LIBRARY does not get created.
#
#
# $SDL2DIR is an environment variable that would
# correspond to the ./configure --prefix=$SDL2DIR
# used in building SDL2.
# l.e.galup 9-20-02
#
# Modified by Eric Wing.
# Added code to assist with automated building by using environmental variables
# and providing a more controlled/consistent search behavior.
# Added new modifications to recognize OS X frameworks and
# additional Unix paths (FreeBSD, etc).
# Also corrected the header search path to follow "proper" SDL2 guidelines.
# Added a search for SDL2main which is needed by some platforms.
# Added a search for threads which is needed by some platforms.
# Added needed compile switches for MinGW.
#
# On OSX, this will prefer the Framework version (if found) over others.
# People will have to manually change the cache values of
# SDL2_LIBRARY to override this selection or set the CMake environment
# CMAKE_INCLUDE_PATH to modify the search paths.
#
# Note that the header path has changed from SDL2/SDL.h to just SDL.h
# This needed to change because "proper" SDL2 convention
# is #include "SDL.h", not <SDL2/SDL.h>. This is done for portability
# reasons because not all systems place things in SDL2/ (see FreeBSD).
#
# Ported by Johnny Patterson. This is a literal port for SDL2 of the FindSDL.cmake
# module with the minor edit of changing "SDL" to "SDL2" where necessary. This
# was not created for redistribution, and exists temporarily pending official
# SDL2 CMake modules.
#=============================================================================
# Copyright 2003-2009 Kitware, Inc.
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)
FIND_PATH(SDL2_INCLUDE_DIR SDL.h
HINTS
$ENV{SDL2DIR}
PATH_SUFFIXES include/SDL2 include
PATHS
~/Library/Frameworks
/Library/Frameworks
/usr/local/include/SDL2
/usr/include/SDL2
/sw # Fink
/opt/local # DarwinPorts
/opt/csw # Blastwave
/opt
)
FIND_LIBRARY(SDL2_LIBRARY_TEMP
NAMES SDL2
HINTS
$ENV{SDL2DIR}
PATH_SUFFIXES lib64 lib
PATHS
/sw
/opt/local
/opt/csw
/opt
)
#MESSAGE("SDL2_LIBRARY_TEMP is ${SDL2_LIBRARY_TEMP}")
IF(NOT SDL2_BUILDING_LIBRARY)
IF(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework")
# Non-OS X framework versions expect you to also dynamically link to
# SDL2main. This is mainly for Windows and OS X. Other (Unix) platforms
# seem to provide SDL2main for compatibility even though they don't
# necessarily need it.
FIND_LIBRARY(SDL2MAIN_LIBRARY
NAMES SDL2main
HINTS
$ENV{SDL2DIR}
PATH_SUFFIXES lib64 lib
PATHS
/sw
/opt/local
/opt/csw
/opt
)
ENDIF(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework")
ENDIF(NOT SDL2_BUILDING_LIBRARY)
# SDL2 may require threads on your system.
# The Apple build may not need an explicit flag because one of the
# frameworks may already provide it.
# But for non-OSX systems, I will use the CMake Threads package.
IF(NOT APPLE)
FIND_PACKAGE(Threads)
ENDIF(NOT APPLE)
# MinGW needs an additional library, mwindows
# It's total link flags should look like -lmingw32 -lSDL2main -lSDL2 -lmwindows
# (Actually on second look, I think it only needs one of the m* libraries.)
IF(MINGW)
SET(MINGW32_LIBRARY mingw32 CACHE STRING "mwindows for MinGW")
ENDIF(MINGW)
SET(SDL2_FOUND "NO")
IF(SDL2_LIBRARY_TEMP)
# For SDL2main
IF(NOT SDL2_BUILDING_LIBRARY)
IF(SDL2MAIN_LIBRARY)
SET(SDL2_LIBRARY_TEMP ${SDL2MAIN_LIBRARY} ${SDL2_LIBRARY_TEMP})
ENDIF(SDL2MAIN_LIBRARY)
ENDIF(NOT SDL2_BUILDING_LIBRARY)
# For OS X, SDL2 uses Cocoa as a backend so it must link to Cocoa.
# CMake doesn't display the -framework Cocoa string in the UI even
# though it actually is there if I modify a pre-used variable.
# I think it has something to do with the CACHE STRING.
# So I use a temporary variable until the end so I can set the
# "real" variable in one-shot.
IF(APPLE)
SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} "-framework Cocoa")
ENDIF(APPLE)
# For threads, as mentioned Apple doesn't need this.
# In fact, there seems to be a problem if I used the Threads package
# and try using this line, so I'm just skipping it entirely for OS X.
IF(NOT APPLE)
SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} ${CMAKE_THREAD_LIBS_INIT})
ENDIF(NOT APPLE)
# For MinGW library
IF(MINGW)
SET(SDL2_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL2_LIBRARY_TEMP})
ENDIF(MINGW)
# Set the final string here so the GUI reflects the final state.
SET(SDL2_LIBRARY ${SDL2_LIBRARY_TEMP} CACHE STRING "Where the SDL2 Library can be found")
# Set the temp variable to INTERNAL so it is not seen in the CMake GUI
SET(SDL2_LIBRARY_TEMP "${SDL2_LIBRARY_TEMP}" CACHE INTERNAL "")
SET(SDL2_FOUND "YES")
ENDIF(SDL2_LIBRARY_TEMP)
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2
REQUIRED_VARS SDL2_LIBRARY SDL2_INCLUDE_DIR)
mark_as_advanced(SDL2MAIN_LIBRARY SDL2_LIBRARY SDL2_INCLUDE_DIR)

26
CMakeModules/FindTinyXML.cmake Executable file
View File

@@ -0,0 +1,26 @@
# - Find TinyXML
# Find the native TinyXML includes and library
#
# TINYXML_FOUND - True if TinyXML found.
# TINYXML_INCLUDE_DIR - where to find tinyxml.h, etc.
# TINYXML_LIBRARIES - List of libraries when using TinyXML.
#
IF( TINYXML_INCLUDE_DIR )
# Already in cache, be silent
SET( TinyXML_FIND_QUIETLY TRUE )
ENDIF( TINYXML_INCLUDE_DIR )
FIND_PATH( TINYXML_INCLUDE_DIR "tinyxml.h"
PATH_SUFFIXES "tinyxml" )
FIND_LIBRARY( TINYXML_LIBRARIES
NAMES "tinyxml"
PATH_SUFFIXES "tinyxml" )
# handle the QUIETLY and REQUIRED arguments and set TINYXML_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE( "FindPackageHandleStandardArgs" )
FIND_PACKAGE_HANDLE_STANDARD_ARGS( "TinyXML" DEFAULT_MSG TINYXML_INCLUDE_DIR TINYXML_LIBRARIES )
MARK_AS_ADVANCED( TINYXML_INCLUDE_DIR TINYXML_LIBRARIES )

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,48 @@
include(CMakeForceCompiler)
# this one is important
SET(CMAKE_SYSTEM_NAME "Generic")
#this one not so much
SET(CMAKE_SYSTEM_VERSION 1)
set (CMAKE_SYSTEM_NAME Generic)
# Just point to anything that exists.
# We don't need CMake to generate proper build files.
set(CMAKE_C_COMPILER ${CMAKE_CURRENT_SOURCE_DIR})
set(CMAKE_CXX_COMPILER ${CMAKE_CURRENT_SOURCE_DIR})
# Skip the platform compiler checks
set (CMAKE_CXX_COMPILER_WORKS TRUE)
set (CMAKE_C_COMPILER_WORKS TRUE)
#how libraries look
SET(CMAKE_FIND_LIBRARY_PREFIXES "lib")
SET(CMAKE_FIND_LIBRARY_SUFFIXES ".so" ".a")
SET(CMAKE_SYSTEM_INCLUDE_PATH
${THEOS_PATH}/include
${CMAKE_INSTALL_PREFIX}/include
${CMAKE_SYSTEM_INCLUDE_PATH})
# where is the target environment
SET(CMAKE_SYSTEM_LIBRARY_PATH
${THEOS_PATH}/lib
${CMAKE_INSTALL_PREFIX}/lib
${CMAKE_SYSTEM_LIBRARY_PATH})
SET(CMAKE_FIND_ROOT_PATH
${CMAKE_SOURCE_DIR}
${THEOS_PATH}
${THEOS_PATH}/lib
${THEOS_PATH}/include
)
# search for programs in the build host directories
# for libraries and headers in the target directories and then in the host
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY FIRST)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE FIRST)
set(IOS 1)

View File

@@ -0,0 +1,62 @@
include(CMakeForceCompiler)
# this one is important
SET(CMAKE_SYSTEM_NAME "Generic")
#this one not so much
SET(CMAKE_SYSTEM_VERSION 1)
find_program(PSP_CONFIG_PROGRAM psp-config)
execute_process(COMMAND psp-config --pspsdk-path OUTPUT_VARIABLE PSPSDK_PATH OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND psp-config --psp-prefix OUTPUT_VARIABLE PSPSDK_PREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
# specify compiler and linker:
find_program(PSP_GPP psp-g++)
find_program(PSP_GCC psp-gcc)
CMAKE_FORCE_C_COMPILER(${PSP_GCC} GNU)
CMAKE_FORCE_CXX_COMPILER(${PSP_GPP} GNU)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -G0")
set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
set(CMAKE_CXX_LINK_EXECUTABLE "${PSP_GCC} <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
#how libraries look
SET(CMAKE_FIND_LIBRARY_PREFIXES "lib")
SET(CMAKE_FIND_LIBRARY_SUFFIXES ".so" ".a")
# where is the target environment
SET(CMAKE_SYSTEM_INCLUDE_PATH
${CMAKE_SOURCE_DIR}/thirdparty/binary/psp/include
${PSPSDK_PATH}/include
${PSPSDK_PREFIX}/include
${CMAKE_INSTALL_PREFIX}/include
${CMAKE_SYSTEM_INCLUDE_PATH})
SET(CMAKE_SYSTEM_LIBRARY_PATH
${CMAKE_SOURCE_DIR}/thirdparty/binary/psp/lib
${PSPSDK_PATH}/lib
${PSPSDK_PREFIX}/lib
${CMAKE_INSTALL_PREFIX}/lib
${CMAKE_SYSTEM_LIBRARY_PATH})
SET(CMAKE_FIND_ROOT_PATH
${CMAKE_SOURCE_DIR}/thirdparty/binary/psp
${CMAKE_SOURCE_DIR}/thirdparty/binary/psp/lib
${CMAKE_SOURCE_DIR}/thirdparty/binary/psp/include
${PSPSDK_PATH}
${PSPSDK_PATH}/lib
${PSPSDK_PATH}/include
${PSPSDK_PREFIX}
${PSPSDK_PREFIX}/lib
${PSPSDK_PREFIX}/include
)
# search for programs in the build host directories
# for libraries and headers in the target directories and then in the host
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY FIRST)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE FIRST)
set(PSP 1)

57
CMakeModules/utils.cmake Normal file
View File

@@ -0,0 +1,57 @@
macro(WAGIC_OPTION variable description value)
set(__value ${value})
set(__condition "")
set(__varname "__value")
foreach(arg ${ARGN})
if(arg STREQUAL "IF" OR arg STREQUAL "if")
set(__varname "__condition")
else()
list(APPEND ${__varname} ${arg})
endif()
endforeach()
unset(__varname)
if("${__condition}" STREQUAL "")
set(__condition 2 GREATER 1)
endif()
if(${__condition})
if("${__value}" MATCHES ";")
if(${__value})
option(${variable} "${description}" ON)
else()
option(${variable} "${description}" OFF)
endif()
elseif(DEFINED ${__value})
if(${__value})
option(${variable} "${description}" ON)
else()
option(${variable} "${description}" OFF)
endif()
else()
option(${variable} "${description}" ${__value})
endif()
else()
unset(${variable} CACHE)
endif()
unset(__condition)
unset(__value)
endmacro()
# add prefix to each item in the list
macro(list_add_prefix LST PREFIX)
set(__tmp "")
foreach(item ${${LST}})
list(APPEND __tmp "${PREFIX}${item}")
endforeach()
set(${LST} ${__tmp})
unset(__tmp)
endmacro()
macro(find_host_program)
set(_find_program ${CMAKE_FIND_ROOT_PATH_MODE_PROGRAM})
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
find_program(${ARGN})
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ${_find_program})
unset(_find_program)
endmacro()

165
JGE/CMakeLists.txt Normal file
View File

@@ -0,0 +1,165 @@
#the sources, jge will need always
set(JGE_generic_src
src/Encoding.cpp
src/JAnimator.cpp
src/JApp.cpp
src/JDistortionMesh.cpp
src/JFileSystem.cpp
src/JGameObject.cpp
src/JGE.cpp
src/JGui.cpp
src/JLogger.cpp
src/JLBFont.cpp
src/JOBJModel.cpp
src/JParticle.cpp
src/JParticleEffect.cpp
src/JParticleEmitter.cpp
src/JParticleSystem.cpp
src/JResourceManager.cpp
src/JSpline.cpp
src/JSprite.cpp
src/Vector2D.cpp)
set(JGE_hge_src
src/hge/hgecolor.cpp
src/hge/hgedistort.cpp
src/hge/hgefont.cpp
src/hge/hgeparticle.cpp
src/hge/hgerect.cpp
src/hge/hgevector.cpp)
#the sources we need to get graphical output desktops
#used by qt-widget build option
set(JGE_graphics_src
src/Downloader.cpp
include/Downloader.h
src/JMD2Model.cpp
src/pc/JGfx.cpp)
#the sources we need to fake graphical output on desktops
#these are used for the console-only testsuit
set(JGE_console_src
src/OutputCapturer.cpp
src/JGfx-fake.cpp)
#the sources we need on linux
set(JGE_linux_src
src/JNetwork.cpp
src/pc/JSocket.cpp
src/pc/JSfx.cpp)
set(JGE_android_src
src/JNetwork.cpp
src/JSocket.cpp
src/android/JSfx.cpp)
#the sources we need if we compile for psp
#note: main.cpp contains the main-function.
#the other main functions reside in projects/mtg to reduce cross-library dependencies.
#there may be a way to get all main-functions into the same project
set(JGE_psp_src
src/JNetwork.cpp
src/JSocket.cpp
src/JGfx.cpp
src/JSfx.cpp
src/JAudio.cpp
src/JMP3.cpp
src/decoder_prx.cpp
src/main.cpp
src/vram.cpp)
set(JGE_ios_src
src/iOS/main.m
src/iOS/wagicAppDelegate.m
src/iOS/ES2Renderer.m
src/iOS/EAGLView.m
src/iOS/EAGLViewController.m
src/iOS/JSfx.cpp)
set(JGE_windows_src
src/JNetwork.cpp
src/pc/JSocket.cpp
src/windows/JSfx.cpp)
set(JGE_INCLUDE_DIRS include include/hge)
set(EXTRA_INCLUDE_DIR ../projects/mtg/extra)
#turn moc on
if(backend_qt_console OR backend_qt_widget)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC TRUE)
endif()
if(backend_qt_console)
if(UNIX AND NOT ANDROID)
set(JGE_INTERNAL_INCLUDE_DIRS ${TINYXML_INCLUDE_DIR} ${ZIPFS_INCLUDE_DIR}
${UNZIP_INCLUDE_DIR} ${QT_MKSPECS_DIR}/default ${Qt5Core_INCLUDE_DIRS} ${Qt5Multimedia_INCLUDE_DIRS})
set(JGE_SOURCES ${JGE_generic_src} ${JGE_console_src} ${JGE_linux_src} ${JGE_hge_src})
set(JGE_LINK_LIBRARIES ${Qt5Core_LIBRARIES} ${Qt5Multimedia_LIBRARIES} ${ZIPFS_LIBRARY} ${UNZIP_LIRARY}
${JPEG_LIBRARIES} ${PNG_LIBRARIES})
else()
message(FATAL_ERROR "qt builds of jge platforms other than linux are not supported")
endif()
endif()
if(backend_qt_widget)
if(UNIX AND NOT ANDROID)
set(JGE_INTERNAL_INCLUDE_DIRS ${TINYXML_INCLUDE_DIR} ${ZIPFS_INCLUDE_DIR}
${UNZIP_INCLUDE_DIR} ${QT_MKSPECS_DIR}/default ${Qt5Core_INCLUDE_DIRS} ${Qt5Multimedia_INCLUDE_DIRS} ${Qt5OpenGL_INCLUDE_DIRS} )
set(JGE_SOURCES ${JGE_generic_src} ${JGE_graphics_src} ${JGE_linux_src} ${JGE_hge_src})
set(JGE_LINK_LIBRARIES ${Qt5Core_LIBRARIES} ${Qt5Multimedia_LIBRARIES} ${Qt5OpenGL_LIBRARIES} ${ZIPFS_LIBRARY} ${UNZIP_LIRARY}
${JPEG_LIBRARIES} ${PNG_LIBRARIES})
else()
message(FATAL_ERROR "qt builds of jge platforms other than linux are not supported")
endif()
endif()
if(backend_sdl)
if((UNIX OR EMSCRIPTEN) AND NOT ANDROID)
set(JGE_INTERNAL_INCLUDE_DIRS ${TINYXML_INCLUDE_DIR} ${ZIPFS_INCLUDE_DIR} ${OPENGL_INCLUDE_DIR} ${GLUT_INCLUDE_DIR}
${SDL2_INCLUDE_DIR} ${UNZIP_INCLUDE_DIR} ${PNG_INCLUDE_DIRS} ${JPEG_INCLUDE_DIR} ${ZLIB_INCLUDE_DIRS})
set(JGE_SOURCES ${JGE_generic_src} ${JGE_graphics_src} ${JGE_linux_src} ${JGE_hge_src})
set(JGE_LINK_LIBRARIES ${ZIPFS_LIBRARY} ${UNZIP_LIRARY} ${JPEG_LIBRARY}
${PNG_LIBRARIES} ${OPENGL_LIBRARIES} ${GLUT_LIBRARY})
elseif(ANDROID)
set(JGE_INTERNAL_INCLUDE_DIRS ${BOOST_INCLUDE_DIRS} ${TINYXML_INCLUDE_DIR} ${ZIPFS_INCLUDE_DIR}
${SDL2_INCLUDE_DIR} ${UNZIP_INCLUDE_DIR} ${PNG_INCLUDE_DIRS} ${JPEG_INCLUDE_DIR}
${OPENSL_INCLUDE_DIR} ${ZLIB_INCLUDE_DIRS})
set(JGE_SOURCES ${JGE_generic_src} ${JGE_android_src} ${JGE_graphics_src} ${JGE_hge_src})
set(JGE_LINK_LIBRARIES ${ZIPFS_LIBRARY} ${UNZIP_LIRARY} ${JPEG_LIBRARY} ${PNG_LIBRARIES}
${OPENSL_LIBRARIES})
elseif(WIN32)
set(JGE_INTERNAL_INCLUDE_DIRS ${EXTRA_INCLUDE_DIR} ${TINYXML_INCLUDE_DIR} ${ZIPFS_INCLUDE_DIR} ${SDL2_INCLUDE_DIR}
${UNZIP_INCLUDE_DIR} ${PNG_INCLUDE_DIRS} ${JPEG_INCLUDE_DIR} ${ZLIB_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR}/thirdparty/binary/win/include)
set(JGE_SOURCES ${JGE_generic_src} ${JGE_graphics_src} ${JGE_windows_src} ${JGE_hge_src})
set(JGE_LINK_LIBRARIES ${ZIPFS_LIBRARY} ${UNZIP_LIRARY} ${JPEG_LIBRARY} ${PNG_LIBRARIES})
set(JGE_LINK_DIRECTORIES ${Boost_LIBRARY_DIR})
endif()
endif()
if(backend_psp)
if(PSP)
#${PSPSDK_PATH}/include should be in system pathes
set(JGE_INTERNAL_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/thirdparty/psp/include ${TINYXML_INCLUDE_DIR}
${ZIPFS_INCLUDE_DIR} ${UNZIP_INCLUDE_DIR} ${BOOST_INCLUDE_DIRS} ${GIF_INCLUDE_DIR} ${PNG_INCLUDE_DIRS} )
set(JGE_SOURCES ${JGE_generic_src} ${JGE_psp_src} ${JGE_hge_src})
set(JGE_LINK_LIBRARIES ${TINYXML_LIBRARIES} ${ZIPFS_LIBRARY} ${UNZIP_LIRARY})
else()
message(FATAL_ERROR "use the cross-compile toolchain to build as the psp target")
endif()
endif()
if(IOS)
set(JGE_SOURCES ${JGE_generic_src} ${JGE_ios_src} ${JGE_hge_src} src/pc/JGfx.cpp)
set(JGE_SOURCES ${JGE_SOURCES} PARENT_SCOPE)
set(JGE_INCLUDE_DIRS ${JGE_INCLUDE_DIRS} src/iOS PARENT_SCOPE)
set(JGE_LINK_LIBRARIES ${TINYXML_LIBRARIES} ${ZIPFS_LIBRARY} ${UNZIP_LIRARY})
endif()
add_library(jge STATIC ${JGE_SOURCES})
include_directories(${JGE_INTERNAL_INCLUDE_DIRS} ${JGE_INCLUDE_DIRS})
target_link_libraries(jge ${JGE_LINK_LIBRARIES})
link_directories(${JGE_LINK_DIRECTORIES})
set(${JGE_LIBRARIES} jge)

View File

@@ -41,7 +41,7 @@ class DownloadRequest
private slots:
#endif
void fileDownloaded();
void downloadProgress(qint64 bytesReceived, qint64 bytesTotal);
void downloadProgress(int64_t bytesReceived, int64_t bytesTotal);
#ifdef QT_CONFIG
signals:
@@ -72,7 +72,13 @@ protected:
QNetworkReply* mNetworkReply;
static QNetworkAccessManager networkAccessManager;
#endif
#ifdef __EMSCRIPTEN__
static void onLoadCb(unsigned int handle, DownloadRequest* req, const char *buffer, unsigned int size);
static void onErrorCb(unsigned int handle, DownloadRequest* req, int errorCode, const char* errorText);
static void onProgressCb(unsigned int handle, DownloadRequest* req, int bytesReceived, int bytesTotal);
#endif
void processError(int errorCode, const char* errorText);
void processBufferDownloaded(unsigned int size, const char*buffer);
public:
DownloadRequest(string localPath="",

View File

@@ -31,7 +31,7 @@ typedef u32 LocalKeySym;
#elif defined(SDL_CONFIG)
#include <SDL.h>
typedef SDLKey LocalKeySym;
typedef SDL_Keycode LocalKeySym;
#define LOCAL_KEY_NONE SDLK_UNKNOWN
#elif defined(WIN32)

View File

@@ -16,7 +16,7 @@
#include <string.h>
#include <stdarg.h>
#if (!defined IOS) && (!defined ANDROID) && (!defined QT_CONFIG)
#if (!defined IOS) && (!defined ANDROID) && (!defined QT_CONFIG) && (!defined SDL_CONFIG)
#include <gif_lib.h>
#endif //IOS ANDROID
@@ -567,7 +567,7 @@ private:
#if (!defined IOS) && (!defined QT_CONFIG)
void LoadJPG(TextureInfo &textureInfo, const char *filename, int mode = 0, int TextureFormat = TEXTURE_FORMAT);
int LoadPNG(TextureInfo &textureInfo, const char *filename, int mode = 0, int TextureFormat = TEXTURE_FORMAT);
#if (!defined ANDROID) && (!defined QT_CONFIG)
#if (!defined ANDROID) && (!defined QT_CONFIG) && (!defined SDL_CONFIG)
void LoadGIF(TextureInfo &textureInfo, const char *filename, int mode = 0, int TextureFormat = TEXTURE_FORMAT);
int image_readgif(void * handle, TextureInfo &textureInfo, DWORD * bgcolor, InputFunc readFunc,int mode = 0, int TextureFormat = TEXTURE_FORMAT);
#endif // (ANDROID) How can we get gif support for android ?

View File

@@ -2,6 +2,7 @@
#define _JSOCKET_H_
#include <queue>
#include "Threading.h"
using namespace std;
#define SERVER_PORT 5001

View File

@@ -18,20 +18,20 @@
#include "JTypes.h"
#ifdef ANDROID
#include <SLES/OpenSLES.h>
#include "SLES/OpenSLES_Android.h"
#elif defined USE_PHONON
#elif defined(USE_PHONON)
#include <phonon/AudioOutput>
#include <phonon/MediaObject>
#elif (defined QT_CONFIG)
#elif defined (QT_CONFIG)
#include "QMediaPlayer"
#include "QMediaPlaylist"
#include "QSoundEffect"
#elif defined WIN32
#elif defined(WIN32)
#include <windows.h>
#define WITH_FMOD
//#define WITH_FMOD
#elif defined (PSP)
#include <pspgu.h>
#include <pspkernel.h>
@@ -48,7 +48,7 @@
#endif
#ifdef WITH_FMOD
#include "../Dependencies/include/fmod.h"
#include "fmod.h"
#endif
//------------------------------------------------------------------------------------------------
@@ -79,20 +79,26 @@ public slots:
std::string filename;
std::string key;
std::string ext;
void* mTrack;
#elif defined WITH_FMOD
FSOUND_SAMPLE* mTrack; // MP3 needed to be of "sample" type for FMOD, FMUSIC_MODULE is for MODs
void* mTrack;
#elif defined ANDROID
SLObjectItf playerObject;
SLPlayItf playInterface;
SLSeekItf seekInterface;
SLVolumeItf musicVolumeInterface;
void* mTrack;
#elif (defined QT_CONFIG)
QMediaPlaylist* playlist;
QMediaPlayer* player;
string fullpath;
#else
void* mTrack;
#endif //WITH_FMOD
void* mTrack;
#elif (defined WIN32)
std::string filename;
void* mTrack;
#endif
//#endif //WITH_FMOD
};
@@ -107,28 +113,30 @@ public:
unsigned long fileSize();
#if (defined QT_CONFIG) && (!defined USE_PHONON)
QMediaPlayer* effect;
void* mSample;
void* mSample;
#elif defined (PSP)
WAVDATA *mSample;
WAVDATA* mSample;
#elif defined (IOS)
std::string filename;
std::string key;
std::string ext;
void* mSample;
void* mSample;
#elif defined (WITH_FMOD)
FSOUND_SAMPLE *mSample;
#elif defined (USE_PHONON)
Phonon::AudioOutput* mOutput;
Phonon::MediaObject* mMediaObject;
void* mSample;
void* mSample;
#elif defined ANDROID
SLObjectItf playerObject;
SLPlayItf playInterface;
SLVolumeItf sampleVolumeInterface;
void* mSample;
void* mSample;
#elif (defined WIN32)
std::string filename;
void* mSample;
#else
void* mSample;
void* mSample;
#endif
};

View File

@@ -26,11 +26,11 @@
#include "JAudio.h"
#else
//#define __STDC_LIMIT_MACROS
#ifdef IOS
#include <tr1/cstdint>
#else
#include <stdint.h>
//#include <cstdint>
#include <cstdint>
#endif
//#include <stdint.h>
//the MSC version might only define _MSC_STDINT_H_

View File

@@ -0,0 +1,29 @@
#ifndef PRECOMPILEDHEADER_H
#define PRECOMPILEDHEADER_H
#include <algorithm>
#include <fstream>
#include <iostream>
#include <list>
#include <map>
#include <sstream>
#include <string>
#include <vector>
#include "DebugRoutines.h"
#include <assert.h>
#include "JGE.h"
#include "JFileSystem.h"
#include "JLogger.h"
//#ifndef WP8
//#include <boost/shared_ptr.hpp>
//#endif
#if defined (WP8) || defined (IOS) || defined (ANDROID) || defined (QT_CONFIG) || defined (SDL_CONFIG)
#define TOUCH_ENABLED
#endif
#endif //PRECOMPILEDHEADER_H

View File

@@ -537,7 +537,7 @@ namespace boost
}
}
#elif (__cplusplus > 199711L) || (_MSC_VER >= 1700)
#elif (__cplusplus > 199711L) || (_MSC_VER >= 1700)
#include <thread>
#include <mutex>

View File

@@ -33,6 +33,7 @@ extern "C" {
#endif
void* vrelptr( void *ptr ); // make a pointer relative to memory base address (ATTENTION: A NULL rel ptr is not illegal/invalid!)
void* vabsptr( void *ptr ); // make a pointer absolute (default return type of valloc)
void* valloc( size_t size );

View File

@@ -7,6 +7,9 @@
#ifdef QT_CONFIG
QNetworkAccessManager DownloadRequest::networkAccessManager;
#endif
#ifdef __EMSCRIPTEN__
#include "emscripten.h"
#endif
DownloadRequest::DownloadRequest(string localPath,
string remoteResourceURL,
@@ -48,15 +51,71 @@ void DownloadRequest::startGet()
JFileSystem::GetInstance()->Remove(getTempLocalPath());
JFileSystem::GetInstance()->openForWrite(mFile, getTempLocalPath());
#ifdef QT_CONFIG
connect(mNetworkReply, SIGNAL(downloadProgress(qint64, qint64)),
SLOT(downloadProgress(qint64, qint64)));
connect(mNetworkReply, SIGNAL(downloadProgress(int64_t, int64_t)),
SLOT(downloadProgress(int64_t, int64_t)));
connect(mNetworkReply, SIGNAL(finished()), SLOT(fileDownloaded()));
#endif
#ifdef __EMSCRIPTEN__
emscripten_async_wget2_data(mRemoteResourceURL.c_str(), "GET", 0, this, 1,
(em_async_wget2_data_onload_func)DownloadRequest::onLoadCb,
(em_async_wget2_data_onerror_func)DownloadRequest::onErrorCb,
(em_async_wget2_data_onprogress_func)DownloadRequest::onProgressCb);
#endif
}
#ifdef __EMSCRIPTEN__
void DownloadRequest::onLoadCb(unsigned int handle, DownloadRequest* req, const char *buffer, unsigned int size)
{
DebugTrace("DownloadRequest::onLoadCb: " << size);
req->processBufferDownloaded(size, buffer);
Downloader::GetInstance()->Update();
}
void DownloadRequest::onErrorCb(unsigned int handle, DownloadRequest* req, int errorCode, const char* errorText)
{
DebugTrace("DownloadRequest::onErrorCb");
req->processError(errorCode, errorText);
Downloader::GetInstance()->Update();
}
void DownloadRequest::onProgressCb(unsigned int handle, DownloadRequest* req, int bytesReceived, int bytesTotal)
{
DebugTrace("DownloadRequest::onProgressCb");
req->DownloadRequest::downloadProgress(bytesReceived, bytesTotal);
}
#endif
void DownloadRequest::processError(int errorCode, const char* errorText)
{
DebugTrace(errorText);
mDownloadStatus = DownloadRequest::DOWNLOAD_ERROR;
mFile.close();
JFileSystem::GetInstance()->Remove(getTempLocalPath());
}
void DownloadRequest::processBufferDownloaded(unsigned int size, const char*buffer)
{
if(mFile.is_open())
{
mTotalSize = size;
mFile.write(buffer, size);
mFile.close();
if(!JFileSystem::GetInstance()->Rename(getTempLocalPath(), mLocalPath)) {
mDownloadStatus = DownloadRequest::DOWNLOAD_ERROR;
return;
}
}
mDownloadStatus = DownloadRequest::DOWNLOADED;
}
void DownloadRequest::fileDownloaded()
{
do {
#ifdef QT_CONFIG
do {
QByteArray eTagByteArray = mNetworkReply->rawHeader("ETag");
if(!eTagByteArray.isEmpty()) {
string oldETag = mETag;
@@ -67,10 +126,7 @@ void DownloadRequest::fileDownloaded()
// let's check some error
if(mNetworkReply->error() != QNetworkReply::NoError) {
DebugTrace(mNetworkReply->errorString().toStdString());
mDownloadStatus = DownloadRequest::DOWNLOAD_ERROR;
mFile.close();
JFileSystem::GetInstance()->Remove(getTempLocalPath());
processError((int)mNetworkReply->error(), mNetworkReply->errorString().toStdString().c_str());
break;
}
@@ -89,35 +145,31 @@ void DownloadRequest::fileDownloaded()
return;
}
if(mFile.is_open())
{
QByteArray byteArray = mNetworkReply->readAll();
mFile.write(byteArray.constData(), byteArray.size());
mFile.close();
if(!JFileSystem::GetInstance()->Rename(getTempLocalPath(), mLocalPath)) {
mDownloadStatus = DownloadRequest::DOWNLOAD_ERROR;
break;
}
}
mDownloadStatus = DownloadRequest::DOWNLOADED;
QByteArray byteArray = mNetworkReply->readAll();
processBufferDownloaded(byteArray.size(), byteArray.constData());
} while(0);
Downloader::GetInstance()->Update();
mNetworkReply->deleteLater();
mNetworkReply->deleteLater();
emit statusChanged((int)mDownloadStatus);
#endif
}
void DownloadRequest::downloadProgress(qint64 bytesReceived, qint64 bytesTotal)
void DownloadRequest::downloadProgress(int64_t bytesReceived, int64_t bytesTotal)
{
QByteArray byteArray = mNetworkReply->readAll();
#ifdef QT_CONFIG
QByteArray byteArray = mNetworkReply->readAll();
mFile.write(byteArray.constData(), byteArray.size());
#endif
mCurrentSize = bytesReceived;
mTotalSize = bytesTotal;
int percent = 0;
if(bytesTotal)
percent = (bytesReceived/bytesTotal)*100;
#ifdef QT_CONFIG
emit percentChanged(percent);
#endif
}
Downloader* Downloader::mInstance = 0;

View File

@@ -15,7 +15,7 @@
#include "../include/JSprite.h"
#include "../include/JAnimator.h"
#include "tinyxml/tinyxml.h"
#include "tinyxml.h"
//////////////////////////////////////////////////////////////////////////

View File

@@ -16,14 +16,7 @@ User folder is the only one that is really needed to guarantee both read and wri
The content that users should not be touching.
*/
#if defined (ANDROID)
#include "PrecompiledHeader.h"
#endif //ANDROID
#if defined (LINUX)
#include "../../projects/mtg/include/PrecompiledHeader.h"
#endif //LINUX
#include "dirent.h"
#ifdef WIN32
#pragma warning(disable : 4786)
@@ -37,7 +30,8 @@ The content that users should not be touching.
#include "../include/JGE.h"
#include "../include/JFileSystem.h"
#include "../include/JLogger.h"
#include <dirent.h>
#include "DebugRoutines.h"
#ifdef QT_CONFIG
#include <QDir>
@@ -130,6 +124,10 @@ JFileSystem::JFileSystem(const string & _userPath, const string & _systemPath)
userPath = [[documentsDirectory stringByAppendingString: @"/User/"] cStringUsingEncoding:1];
systemPath = [[documentsDirectory stringByAppendingString: @"/Res/"] cStringUsingEncoding:1];
#elif defined (__EMSCRIPTEN__)
systemPath = "/";
DebugTrace("User path " << userPath);
DebugTrace("System path " << systemPath);
#elif defined (ANDROID)
userPath = JGE::GetInstance()->getFileSystemLocation();
systemPath = "";
@@ -145,9 +143,9 @@ JFileSystem::JFileSystem(const string & _userPath, const string & _systemPath)
userPath = QDir::toNativeSeparators(dir.absolutePath()).toStdString();
systemPath = QDir::toNativeSeparators(sysDir.absolutePath()).toStdString();
DebugTrace("User path " << userPath);
DebugTrace("System path " << systemPath);
DebugTrace("Current path " << QDir::currentPath().toStdString());
DebugTrace("User path " + userPath);
DebugTrace("System path " + systemPath);
DebugTrace("Current path " + QDir::currentPath().toStdString());
#else
//Find the Res.txt file and matching Res folders for backwards compatibility
ifstream mfile("Res.txt");
@@ -302,6 +300,7 @@ void JFileSystem::DetachZipFile()
bool JFileSystem::openForRead(izfstream & File, const string & FilePath) {
DebugTrace("JFileSystem::openForRead " << FilePath);
File.open(FilePath.c_str(), mUserFS);
if (File)
return true;
@@ -412,7 +411,6 @@ bool JFileSystem::OpenFile(const string &filename)
mCurrentFileInZip = &(it2->second);
mFileSize = it2->second.m_Size;
return true;
}

View File

@@ -34,7 +34,7 @@
//////////////////////////////////////////////////////////////////////////
#if defined (WIN32) // WIN32 specific code
#include "../../Dependencies/include/fmod.h"
#include "fmod.h"
u8 JGE::GetAnalogX()
{
@@ -54,7 +54,7 @@ u8 JGE::GetAnalogY()
#elif defined (LINUX) // Unix specific code
#include <sys/time.h>
#ifdef WITH_FMOD
#include "../Dependencies/include/fmod.h"
#include "fmod.h"
#endif //WITH_FMOD

View File

@@ -10,6 +10,7 @@
#include <pspaudio.h>
#include <pspmp3.h>
#include <psputility.h>
#include <unistd.h>
#else
#define PSP_AUDIO_VOLUME_MAX 100

View File

@@ -4,8 +4,6 @@
*/
#define __STDC_LIMIT_MACROS
#include "../include/DebugRoutines.h"
#include "../include/JNetwork.h"

View File

@@ -19,7 +19,7 @@
#include "../include/JFileSystem.h"
#include "../include/JResourceManager.h"
#include "tinyxml/tinyxml.h"
#include "tinyxml.h"
//-------------------------------------------------------------------------------------

View File

@@ -14,7 +14,7 @@
#include "../include/JResourceManager.h"
#include "../include/JFileSystem.h"
#include "../include/JLBFont.h"
#include "tinyxml/tinyxml.h"
#include "tinyxml.h"
#if defined (_DEBUG) && defined (WIN32) && (!defined LINUX)
#include "crtdbg.h"

View File

@@ -13,7 +13,7 @@
#include "../include/JFileSystem.h"
#include "../include/JSpline.h"
#include "tinyxml/tinyxml.h"
#include "tinyxml.h"
#define SMALL_NUMBER 0.0001f

View File

@@ -19,7 +19,8 @@
*
*/
#include "../include/decoder_prx.h"
#include "decoder_prx.h"
#include <psputility.h>
char *prx_static_init()
{

View File

@@ -96,8 +96,7 @@ hgeParticleSystem::hgeParticleSystem(hgeParticleSystemInfo *psi)
{
//hge=hgeCreate(HGE_VERSION);
if (psi)
memcpy(&info, psi, sizeof(hgeParticleSystemInfo));
memcpy(&info, psi, sizeof(hgeParticleSystemInfo));
vecLocation.x=vecPrevLocation.x=0.0f;
vecLocation.y=vecPrevLocation.y=0.0f;

View File

@@ -12,7 +12,7 @@
#if (!defined IOS) && (!defined QT_CONFIG)
#ifdef WIN32
#pragma warning(disable : 4786)
#pragma comment( lib, "giflib.lib" )
//#pragma comment( lib, "giflib.lib" )
#endif
#include <png.h>

View File

@@ -1,14 +1,10 @@
#define __STDC_LIMIT_MACROS
#include "../../include/DebugRoutines.h"
#include "Threading.h"
#include <errno.h>
#ifdef WIN32
#pragma comment(lib,"WSOCK32.LIB")
#include <stdio.h>
#include <conio.h>
#include <winsock.h>
#include <winsock.h>
#include <fcntl.h>
#elif LINUX
#include <unistd.h>
@@ -20,6 +16,7 @@
#endif //WINDOWS
#include "../../include/JSocket.h"
#include "../../include/DebugRoutines.h"
JSocket::JSocket(string ipAddr)

View File

@@ -75,7 +75,7 @@ static int __largest_block = __MEM_BLOCKS;
static int __mem_free = __MEM_BLOCKS;
inline void* vrelptr( void *ptr )
void* vrelptr( void *ptr )
{
return (void*)((unsigned int)ptr & ~__MEM_START);
}

182
JGE/src/windows/JSfx.cpp Normal file
View File

@@ -0,0 +1,182 @@
#include <Windows.h>
#include <Mmsystem.h>
#include <mciapi.h>
//these two headers are already included in the <Windows.h> header
#pragma comment(lib, "Winmm.lib")
#include "DebugRoutines.h"
#include "../../include/JSoundSystem.h"
#include "../../include/JFileSystem.h"
//////////////////////////////////////////////////////////////////////////
JMusic::JMusic()
:
mTrack(0)
{
}
void JMusic::Update(){
}
int JMusic::getPlayTime(){
return 0;
}
JMusic::~JMusic()
{
}
//////////////////////////////////////////////////////////////////////////
JSample::JSample()
{
}
JSample::~JSample()
{
}
unsigned long JSample::fileSize()
{
return 0;
}
//////////////////////////////////////////////////////////////////////////
JSoundSystem* JSoundSystem::mInstance = NULL;
JSoundSystem* JSoundSystem::GetInstance()
{
if (mInstance == NULL)
{
mInstance = new JSoundSystem();
mInstance->InitSoundSystem();
}
return mInstance;
}
void JSoundSystem::Destroy()
{
if (mInstance)
{
mInstance->DestroySoundSystem();
delete mInstance;
mInstance = NULL;
}
}
JSoundSystem::JSoundSystem()
{
mVolume = 0;
mSampleVolume = 0;
}
JSoundSystem::~JSoundSystem()
{
}
void JSoundSystem::InitSoundSystem()
{
}
void JSoundSystem::DestroySoundSystem()
{
}
JMusic *JSoundSystem::LoadMusic(const char *fileName)
{
JMusic* music = NULL;
music = new JMusic();
if (music)
{
music->filename = JFileSystem::GetInstance()->GetResourceFile(fileName);
std::string aString = "open \"" + music->filename + "\" type mpegvideo alias mp3";
mciSendString(aString.c_str(), NULL, 0, NULL);
music->mTrack = (void*)-1;
}
return music;
}
void JSoundSystem::PlayMusic(JMusic *music, bool looping)
{
if (music && music->mTrack)
{
if(looping)
mciSendString("play mp3 repeat", NULL, 0, NULL);
else
mciSendString("play mp3", NULL, 0, NULL);
}
}
void JSoundSystem::StopMusic(JMusic *music)
{
if (music && music->mTrack)
{
mciSendString("stop mp3", NULL, 0, NULL);
}
}
void JSoundSystem::PauseMusic(JMusic *music)
{
if (music && music->mTrack)
{
mciSendString("pause mp3", NULL, 0, NULL);
}
}
void JSoundSystem::ResumeMusic(JMusic *music)
{
if (music && music->mTrack)
{
mciSendString("resume mp3", NULL, 0, NULL);
}
}
void JSoundSystem::SetVolume(int volume)
{
SetMusicVolume(volume);
SetSfxVolume(volume);
}
void JSoundSystem::SetMusicVolume(int volume)
{
mVolume = volume;
}
void JSoundSystem::SetSfxVolume(int volume)
{
mSampleVolume = volume;
SetMusicVolume(mVolume);
}
JSample *JSoundSystem::LoadSample(const char *fileName)
{
JSample* sample = NULL;
sample = new JSample();
if (sample)
{
sample->filename = JFileSystem::GetInstance()->GetResourceFile(fileName);
}
return sample;
}
void JSoundSystem::PlaySample(JSample *sample)
{
if(sample)
{
sndPlaySound(sample->filename.c_str(), SND_FILENAME | SND_ASYNC);
}
}

View File

@@ -17,6 +17,7 @@ skip_tags: true
#---------------------------------#
environment:
DXSDK_DIR: "C:/Program Files (x86)/Microsoft DirectX SDK/"
GH_TOKEN:
secure: dYnBDQkiY5oVjIlswzBX9BJigNtBGXgGlp1tK3XbHzrDEDrs2vaKD5m+Oz5OSz1C
@@ -26,6 +27,10 @@ install:
- "C:/Python27/python.exe C:/get-pip.py"
- "C:/Python27/Scripts/pip.exe install pyjavaproperties"
- "C:/Python27/Scripts/pip.exe install github3.py"
- git submodule update --init --recursive
- cd thirdparty/SDL2
# - git checkout release-2.0.3
- cd ../..
#---------------------------------#
# build configuration #
@@ -34,8 +39,16 @@ install:
# build Configuration, i.e. Debug, Release, etc.
configuration: Release
# scripts to run before build
before_build:
- echo Running cmake...
- mkdir build
- cd build
- cmake -Dbackend_sdl=ON ..
- cd ..
build:
project: projects/mtg/mtg_vs2010.sln # path to Visual Studio solution or project
project: build/wagic.sln # path to Visual Studio solution or project
#---------------------------------#
# tests configuration #
@@ -61,7 +74,7 @@ artifacts:
# scripts to run before deployment
before_deploy:
- cd projects/mtg/bin
- "C:/Python27/python.exe createWindowsZip.py"
- "C:/Python27/python.exe createWindowsZip.py -b ../../../build"
- cd ../../..
# scripts to run after deployment

View File

@@ -0,0 +1,3 @@
add_definitions(-DANDROID -DLINUX)
add_definitions(-D_STLP_USE_SIMPLE_NODE_ALLOC -D__arm__ -D_REENTRANT -D_GLIBCXX__PTHREADS)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="0192" android:versionName="@string/app_version" package="net.wagic.app">
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application android:debuggable="true" android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
<activity android:configChanges="keyboard|keyboardHidden|orientation" android:label="@string/app_name" android:name="org.libsdl.app.SDLActivity" android:screenOrientation="sensorLandscape">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:configChanges="keyboard|keyboardHidden|orientation" android:name="com.google.ads.AdActivity" android:screenOrientation="sensorLandscape"/>
</application>
<uses-sdk android:minSdkVersion="@ANDROID_NATIVE_API_LEVEL@" android:targetSdkVersion="@ANDROID_NATIVE_API_LEVEL@"/>
</manifest>

View File

@@ -0,0 +1,121 @@
if(NOT ANDROID_PACKAGE_RELEASE)
set(ANDROID_PACKAGE_RELEASE 1)
endif()
if(NOT ANDROID_PACKAGE_PLATFORM)
if(ARMEABI_V7A)
if(NEON)
set(ANDROID_PACKAGE_PLATFORM armv7a_neon)
else()
set(ANDROID_PACKAGE_PLATFORM armv7a)
endif()
elseif(ARMEABI_V6)
set(ANDROID_PACKAGE_PLATFORM armv6)
elseif(ARMEABI)
set(ANDROID_PACKAGE_PLATFORM armv5)
elseif(X86)
set(ANDROID_PACKAGE_PLATFORM x86)
elseif(MIPS)
set(ANDROID_PACKAGE_PLATFORM mips)
else()
message(ERROR "Can not automatically determine the value for ANDROID_PACKAGE_PLATFORM")
endif()
endif()
if(NOT ANDROID_PACKAGE_PLATFORM_NAME)
if(ARMEABI_V7A)
if(NEON)
set(ANDROID_PACKAGE_PLATFORM_NAME "armeabi-v7a with NEON")
else()
set(ANDROID_PACKAGE_PLATFORM_NAME "armeabi-v7a")
endif()
elseif(ARMEABI_V6)
set(ANDROID_PACKAGE_PLATFORM_NAME "armeabi-v6")
elseif(ARMEABI)
set(ANDROID_PACKAGE_PLATFORM_NAME "armeabi")
elseif(X86)
set(ANDROID_PACKAGE_PLATFORM_NAME "x86")
elseif(MIPS)
set(ANDROID_PACKAGE_PLATFORM_NAME "mips")
else()
message(ERROR "Can not automatically determine the value for ANDROID_PACKAGE_PLATFORM_NAME")
endif()
endif()
if("${ANDROID_NATIVE_API_LEVEL}" MATCHES "[1-9][0-9]*$")
set(ANDROID_SDK_VERSION ${CMAKE_MATCH_0})
endif()
if(NOT ANDROID_SDK_VERSION GREATER 7)
set(ANDROID_SDK_VERSION 8)
endif()
set(PACKAGE_DIR "${CMAKE_BINARY_DIR}/package")
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/AndroidManifest.xml"
"${PACKAGE_DIR}/AndroidManifest.xml" @ONLY)
#configure_file("${CMAKE_CURRENT_SOURCE_DIR}/build.xml"
# "${PACKAGE_DIR}/build.xml" COPYONLY)
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/res/values/strings.xml"
"${PACKAGE_DIR}/res/values/strings.xml" COPYONLY)
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/res/drawable-hdpi/icon.png"
"${PACKAGE_DIR}/res/drawable-hdpi/icon.png" COPYONLY)
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/res/drawable-ldpi/icon.png"
"${PACKAGE_DIR}/res/drawable-ldpi/icon.png" COPYONLY)
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/res/drawable-mdpi/icon.png"
"${PACKAGE_DIR}/res/drawable-mdpi/icon.png" COPYONLY)
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/res/layout/main.xml"
"${PACKAGE_DIR}/res/layout/main.xml" COPYONLY)
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/assets/_keystore/wagic-release.keystore"
"${PACKAGE_DIR}/assets/_keystore/wagic-release.keystore" COPYONLY)
string( REGEX MATCH "[0-9]+" ANDROID_NATIVE_API_LEVEL_NUMBER "${ANDROID_NATIVE_API_LEVEL}" )
set(target_name "Wagic_${WAGIC_VERSION}_binary_pack_${ANDROID_PACKAGE_PLATFORM}")
get_target_property(wagic_location wagic LOCATION)
string(TOLOWER ${CMAKE_BUILD_TYPE} android_build_type)
set(android_proj_target_files ${ANDROID_PROJECT_FILES})
list_add_prefix(android_proj_target_files "${PACKAGE_DIR}/")
set(APK_NAME "${PACKAGE_DIR}/bin/${target_name}-${android_build_type}-unsigned.apk")
file(GLOB camera_wrappers "${OpenCV_SOURCE_DIR}/3rdparty/lib/${ANDROID_NDK_ABI_NAME}/libnative_camera_r*.so")
set(CAMERA_LIB_COMMANDS "")
foreach(wrapper ${camera_wrappers})
list(APPEND CAMERA_LIB_COMMANDS COMMAND ${CMAKE_COMMAND} -E copy "${wrapper}" "${PACKAGE_DIR}/libs/${ANDROID_NDK_ABI_NAME}/")
endforeach()
add_custom_command(
OUTPUT "${APK_NAME}"
COMMAND ${CMAKE_COMMAND} -E remove_directory "${PACKAGE_DIR}/libs"
COMMAND ${CMAKE_COMMAND} -E remove_directory "${PACKAGE_DIR}/bin"
COMMAND ${CMAKE_COMMAND} -E remove_directory "${PACKAGE_DIR}/gen"
COMMAND ${CMAKE_COMMAND} -E remove ${android_proj_target_files}
COMMAND ${CMAKE_COMMAND} -E make_directory "${PACKAGE_DIR}/src"
COMMAND ${CMAKE_COMMAND} -E make_directory "${PACKAGE_DIR}/libs/${ANDROID_NDK_ABI_NAME}/"
# COMMAND ${CMAKE_COMMAND} -E copy "${SDL2_LIBRARY}" "${PACKAGE_DIR}/libs/${ANDROID_NDK_ABI_NAME}/"
# COMMAND ${CMAKE_COMMAND} -E copy "${ZLIB_LIBRARY}" "${PACKAGE_DIR}/libs/${ANDROID_NDK_ABI_NAME}/"
# COMMAND ${CMAKE_COMMAND} -E copy "${OPENSL_LIBRARY}" "${PACKAGE_DIR}/libs/${ANDROID_NDK_ABI_NAME}/"
COMMAND ${CMAKE_COMMAND} -E copy "${wagic_location}" "${PACKAGE_DIR}/libs/${ANDROID_NDK_ABI_NAME}/"
COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/src" "${PACKAGE_DIR}/src"
# COMMAND ${ANDROID_EXECUTABLE} --silent update project --path "${PACKAGE_DIR}" --target "android-${ANDROID_NATIVE_API_LEVEL}" --name "${target_name}"
COMMAND ${ANDROID_EXECUTABLE} --silent update project --path "${PACKAGE_DIR}" --target "android-10" --name "${target_name}"
COMMAND ${ANT_EXECUTABLE} -noinput -k ${android_build_type}
COMMAND ${CMAKE_COMMAND} -E touch "${APK_NAME}"
WORKING_DIRECTORY "${PACKAGE_DIR}"
MAIN_DEPENDENCY "${PACKAGE_DIR}/${ANDROID_MANIFEST_FILE}"
DEPENDS
"${PACKAGE_DIR}/res/values/strings.xml"
"${PACKAGE_DIR}/res/layout/main.xml"
"${PACKAGE_DIR}/res/drawable-mdpi/icon.png"
"${PACKAGE_DIR}/res/drawable-ldpi/icon.png"
"${PACKAGE_DIR}/res/drawable-hdpi/icon.png"
"${PACKAGE_DIR}/${ANDROID_MANIFEST_FILE}"
wagic
)
install(FILES "${APK_NAME}" DESTINATION "apk/" COMPONENT main)
add_custom_target(android_package ALL SOURCES "${APK_NAME}" )
add_dependencies(android_package wagic)

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:id="@+id/mainLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Wagic"
/>
</LinearLayout>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Wagic</string>
<string name="app_version">0.19.2</string>
<string name="info_text">Wagic v0.19.2\\nAll Rights Reserved.</string>
</resources>

View File

@@ -0,0 +1,174 @@
package net.wagic.utils;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
import android.os.Environment;
import android.util.Log;
public class StorageOptions
{
private static ArrayList<String> mMounts = new ArrayList<String>();
private static ArrayList<String> mVold = new ArrayList<String>();
public static String[] labels;
public static String[] paths;
public static int count = 0;
public static String defaultMountPoint;
public static void determineStorageOptions()
{
initializeMountPoints();
readMountsFile();
readVoldFile();
compareMountsWithVold();
testAndCleanMountsList();
setProperties();
}
private static void initializeMountPoints()
{
try
{
defaultMountPoint = Environment.getExternalStorageDirectory().getCanonicalPath();
} catch (Exception ioEx)
{
// an error occurred trying to get the canonical path, use '/mnt/sdcard' instead
defaultMountPoint = "/mnt/sdcard";
}
}
private static void readMountsFile()
{
/*
* Scan the /proc/mounts file and look for lines like this: /dev/block/vold/179:1 /mnt/sdcard vfat
* rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0602,dmask=0602,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
*
* When one is found, split it into its elements and then pull out the path to the that mount point and add it to the arraylist
*/
try
{
Scanner scanner = new Scanner(new File("/proc/mounts"));
while (scanner.hasNext())
{
String line = scanner.nextLine();
if (line.startsWith("/dev/block/vold/"))
{
String[] lineElements = line.split(" ");
lineElements[1].replaceAll(":.*$", "");
mMounts.add(lineElements[1]);
}
}
} catch (FileNotFoundException fnfex)
{
// if proc/mount doesn't exist we just use
Log.i(StorageOptions.class.getCanonicalName(), fnfex.getMessage() + ": assuming " + defaultMountPoint + " is the only mount point");
mMounts.add(defaultMountPoint);
} catch (Exception e)
{
Log.e(StorageOptions.class.getCanonicalName(), e.getMessage() + ": unknown exception while reading mounts file");
mMounts.add(defaultMountPoint);
}
}
private static void readVoldFile()
{
/*
* Scan the /system/etc/vold.fstab file and look for lines like this: dev_mount sdcard /mnt/sdcard 1 /devices/platform/s3c-sdhci.0/mmc_host/mmc0
*
* When one is found, split it into its elements and then pull out the path to the that mount point and add it to the arraylist
*/
try
{
Scanner scanner = new Scanner(new File("/system/etc/vold.fstab"));
while (scanner.hasNext())
{
String line = scanner.nextLine();
if (line.startsWith("dev_mount"))
{
String[] lineElements = line.split(" ");
lineElements[2] = lineElements[2].replaceAll(":.*$", "");
mVold.add(lineElements[2]);
}
}
} catch (FileNotFoundException fnfex)
{
// if vold.fstab doesn't exist we use the value gathered from the Environment
Log.i(StorageOptions.class.getCanonicalName(), fnfex.getMessage() + ": assuming " + defaultMountPoint + " is the only mount point");
mMounts.add(defaultMountPoint);
} catch (Exception e)
{
Log.e(StorageOptions.class.getCanonicalName(), e.getMessage() + ": unknown exception while reading mounts file");
mMounts.add(defaultMountPoint);
}
}
private static void compareMountsWithVold()
{
/*
* Sometimes the two lists of mount points will be different. We only want those mount points that are in both list.
*
* Compare the two lists together and remove items that are not in both lists.
*/
for (int i = 0; i < mMounts.size(); i++)
{
String mount = mMounts.get(i);
if (!mVold.contains(mount))
mMounts.remove(i--);
}
// don't need this anymore, clear the vold list to reduce memory
// use and to prepare it for the next time it's needed.
mVold.clear();
}
private static void testAndCleanMountsList()
{
/*
* Now that we have a cleaned list of mount paths Test each one to make sure it's a valid and available path. If it is not, remove it from the list.
*/
for (int i = 0; i < mMounts.size(); i++)
{
String mount = mMounts.get(i);
File root = new File(mount);
if (!root.exists() || !root.isDirectory() || !root.canWrite())
mMounts.remove(i--);
}
}
private static void setProperties()
{
/*
* At this point all the paths in the list should be valid. Build the public properties.
*/
ArrayList<String> mLabels = new ArrayList<String>();
int i = 1;
for (String path : mMounts)
{ // TODO: /mnt/sdcard is assumed to always mean internal storage. Use this comparison until there is a better way to do this
if ("/mnt/sdcard".equalsIgnoreCase(path))
mLabels.add("Built-in Storage");
else
mLabels.add("External SD Card " + i++);
}
labels = new String[mLabels.size()];
mLabels.toArray(labels);
paths = new String[mMounts.size()];
mMounts.toArray(paths);
count = Math.min(labels.length, paths.length);
// don't need this anymore, clear the mounts list to reduce memory
// use and to prepare it for the next time it's needed.
mMounts.clear();
}
}

View File

@@ -0,0 +1,771 @@
package org.libsdl.app;
import java.util.Arrays;
import android.app.*;
import android.content.*;
import android.view.*;
import android.view.inputmethod.BaseInputConnection;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
import android.view.inputmethod.InputMethodManager;
import android.widget.AbsoluteLayout;
import android.os.*;
import android.util.Log;
import android.graphics.*;
import android.media.*;
import android.hardware.*;
/**
SDL Activity
*/
public class SDLActivity extends Activity {
private static final String TAG = "SDL";
// Keep track of the paused state
public static boolean mIsPaused = false, mIsSurfaceReady = false, mHasFocus = true;
// Main components
protected static SDLActivity mSingleton;
protected static SDLSurface mSurface;
protected static View mTextEdit;
protected static ViewGroup mLayout;
// This is what SDL runs in. It invokes SDL_main(), eventually
protected static Thread mSDLThread;
// Audio
protected static Thread mAudioThread;
protected static AudioTrack mAudioTrack;
// Load the .so
static {
System.loadLibrary("SDL2");
//System.loadLibrary("SDL2_image");
//System.loadLibrary("SDL2_mixer");
//System.loadLibrary("SDL2_net");
//System.loadLibrary("SDL2_ttf");
System.loadLibrary("wagic");
}
// Setup
@Override
protected void onCreate(Bundle savedInstanceState) {
//Log.v("SDL", "onCreate()");
super.onCreate(savedInstanceState);
// So we can call stuff from static callbacks
mSingleton = this;
// Set up the surface
mSurface = new SDLSurface(getApplication());
mLayout = new AbsoluteLayout(this);
mLayout.addView(mSurface);
setContentView(mLayout);
}
// Events
@Override
protected void onPause() {
Log.v("SDL", "onPause()");
super.onPause();
SDLActivity.handlePause();
}
@Override
protected void onResume() {
Log.v("SDL", "onResume()");
super.onResume();
SDLActivity.handleResume();
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
Log.v("SDL", "onWindowFocusChanged(): " + hasFocus);
SDLActivity.mHasFocus = hasFocus;
if (hasFocus) {
SDLActivity.handleResume();
}
}
@Override
public void onLowMemory() {
Log.v("SDL", "onLowMemory()");
super.onLowMemory();
SDLActivity.nativeLowMemory();
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.v("SDL", "onDestroy()");
// Send a quit message to the application
SDLActivity.nativeQuit();
// Now wait for the SDL thread to quit
if (mSDLThread != null) {
try {
mSDLThread.join();
} catch(Exception e) {
Log.v("SDL", "Problem stopping thread: " + e);
}
mSDLThread = null;
//Log.v("SDL", "Finished waiting for SDL thread");
}
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
int keyCode = event.getKeyCode();
// Ignore certain special keys so they're handled by Android
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN ||
keyCode == KeyEvent.KEYCODE_VOLUME_UP ||
keyCode == KeyEvent.KEYCODE_CAMERA ||
keyCode == 168 || /* API 11: KeyEvent.KEYCODE_ZOOM_IN */
keyCode == 169 /* API 11: KeyEvent.KEYCODE_ZOOM_OUT */
) {
return false;
}
return super.dispatchKeyEvent(event);
}
/** Called by onPause or surfaceDestroyed. Even if surfaceDestroyed
* is the first to be called, mIsSurfaceReady should still be set
* to 'true' during the call to onPause (in a usual scenario).
*/
public static void handlePause() {
if (!SDLActivity.mIsPaused && SDLActivity.mIsSurfaceReady) {
SDLActivity.mIsPaused = true;
SDLActivity.nativePause();
mSurface.enableSensor(Sensor.TYPE_ACCELEROMETER, false);
}
}
/** Called by onResume or surfaceCreated. An actual resume should be done only when the surface is ready.
* Note: Some Android variants may send multiple surfaceChanged events, so we don't need to resume
* every time we get one of those events, only if it comes after surfaceDestroyed
*/
public static void handleResume() {
if (SDLActivity.mIsPaused && SDLActivity.mIsSurfaceReady && SDLActivity.mHasFocus) {
SDLActivity.mIsPaused = false;
SDLActivity.nativeResume();
mSurface.enableSensor(Sensor.TYPE_ACCELEROMETER, true);
}
}
// Messages from the SDLMain thread
static final int COMMAND_CHANGE_TITLE = 1;
static final int COMMAND_UNUSED = 2;
static final int COMMAND_TEXTEDIT_HIDE = 3;
protected static final int COMMAND_USER = 0x8000;
/**
* This method is called by SDL if SDL did not handle a message itself.
* This happens if a received message contains an unsupported command.
* Method can be overwritten to handle Messages in a different class.
* @param command the command of the message.
* @param param the parameter of the message. May be null.
* @return if the message was handled in overridden method.
*/
protected boolean onUnhandledMessage(int command, Object param) {
return false;
}
/**
* A Handler class for Messages from native SDL applications.
* It uses current Activities as target (e.g. for the title).
* static to prevent implicit references to enclosing object.
*/
protected static class SDLCommandHandler extends Handler {
@Override
public void handleMessage(Message msg) {
Context context = getContext();
if (context == null) {
Log.e(TAG, "error handling message, getContext() returned null");
return;
}
switch (msg.arg1) {
case COMMAND_CHANGE_TITLE:
if (context instanceof Activity) {
((Activity) context).setTitle((String)msg.obj);
} else {
Log.e(TAG, "error handling message, getContext() returned no Activity");
}
break;
case COMMAND_TEXTEDIT_HIDE:
if (mTextEdit != null) {
mTextEdit.setVisibility(View.GONE);
InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(mTextEdit.getWindowToken(), 0);
}
break;
default:
if ((context instanceof SDLActivity) && !((SDLActivity) context).onUnhandledMessage(msg.arg1, msg.obj)) {
Log.e(TAG, "error handling message, command is " + msg.arg1);
}
}
}
}
// Handler for the messages
Handler commandHandler = new SDLCommandHandler();
// Send a message from the SDLMain thread
boolean sendCommand(int command, Object data) {
Message msg = commandHandler.obtainMessage();
msg.arg1 = command;
msg.obj = data;
return commandHandler.sendMessage(msg);
}
// C functions we call
public static native void nativeInit();
public static native void nativeLowMemory();
public static native void nativeQuit();
public static native void nativePause();
public static native void nativeResume();
public static native void onNativeResize(int x, int y, int format);
public static native void onNativeKeyDown(int keycode);
public static native void onNativeKeyUp(int keycode);
public static native void onNativeKeyboardFocusLost();
public static native void onNativeTouch(int touchDevId, int pointerFingerId,
int action, float x,
float y, float p);
public static native void onNativeAccel(float x, float y, float z);
public static native void onNativeSurfaceChanged();
public static native void onNativeSurfaceDestroyed();
public static native void nativeFlipBuffers();
public static void flipBuffers() {
SDLActivity.nativeFlipBuffers();
}
public static boolean setActivityTitle(String title) {
// Called from SDLMain() thread and can't directly affect the view
return mSingleton.sendCommand(COMMAND_CHANGE_TITLE, title);
}
public static boolean sendMessage(int command, int param) {
return mSingleton.sendCommand(command, Integer.valueOf(param));
}
public static Context getContext() {
return mSingleton;
}
static class ShowTextInputTask implements Runnable {
/*
* This is used to regulate the pan&scan method to have some offset from
* the bottom edge of the input region and the top edge of an input
* method (soft keyboard)
*/
static final int HEIGHT_PADDING = 15;
public int x, y, w, h;
public ShowTextInputTask(int x, int y, int w, int h) {
this.x = x;
this.y = y;
this.w = w;
this.h = h;
}
@Override
public void run() {
AbsoluteLayout.LayoutParams params = new AbsoluteLayout.LayoutParams(
w, h + HEIGHT_PADDING, x, y);
if (mTextEdit == null) {
mTextEdit = new DummyEdit(getContext());
mLayout.addView(mTextEdit, params);
} else {
mTextEdit.setLayoutParams(params);
}
mTextEdit.setVisibility(View.VISIBLE);
mTextEdit.requestFocus();
InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(mTextEdit, 0);
}
}
public static boolean showTextInput(int x, int y, int w, int h) {
// Transfer the task to the main thread as a Runnable
return mSingleton.commandHandler.post(new ShowTextInputTask(x, y, w, h));
}
public static Surface getNativeSurface() {
return SDLActivity.mSurface.getNativeSurface();
}
// Audio
public static int audioInit(int sampleRate, boolean is16Bit, boolean isStereo, int desiredFrames) {
int channelConfig = isStereo ? AudioFormat.CHANNEL_CONFIGURATION_STEREO : AudioFormat.CHANNEL_CONFIGURATION_MONO;
int audioFormat = is16Bit ? AudioFormat.ENCODING_PCM_16BIT : AudioFormat.ENCODING_PCM_8BIT;
int frameSize = (isStereo ? 2 : 1) * (is16Bit ? 2 : 1);
Log.v("SDL", "SDL audio: wanted " + (isStereo ? "stereo" : "mono") + " " + (is16Bit ? "16-bit" : "8-bit") + " " + (sampleRate / 1000f) + "kHz, " + desiredFrames + " frames buffer");
// Let the user pick a larger buffer if they really want -- but ye
// gods they probably shouldn't, the minimums are horrifyingly high
// latency already
desiredFrames = Math.max(desiredFrames, (AudioTrack.getMinBufferSize(sampleRate, channelConfig, audioFormat) + frameSize - 1) / frameSize);
if (mAudioTrack == null) {
mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate,
channelConfig, audioFormat, desiredFrames * frameSize, AudioTrack.MODE_STREAM);
// Instantiating AudioTrack can "succeed" without an exception and the track may still be invalid
// Ref: https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/media/java/android/media/AudioTrack.java
// Ref: http://developer.android.com/reference/android/media/AudioTrack.html#getState()
if (mAudioTrack.getState() != AudioTrack.STATE_INITIALIZED) {
Log.e("SDL", "Failed during initialization of Audio Track");
mAudioTrack = null;
return -1;
}
mAudioTrack.play();
}
Log.v("SDL", "SDL audio: got " + ((mAudioTrack.getChannelCount() >= 2) ? "stereo" : "mono") + " " + ((mAudioTrack.getAudioFormat() == AudioFormat.ENCODING_PCM_16BIT) ? "16-bit" : "8-bit") + " " + (mAudioTrack.getSampleRate() / 1000f) + "kHz, " + desiredFrames + " frames buffer");
return 0;
}
public static void audioWriteShortBuffer(short[] buffer) {
for (int i = 0; i < buffer.length; ) {
int result = mAudioTrack.write(buffer, i, buffer.length - i);
if (result > 0) {
i += result;
} else if (result == 0) {
try {
Thread.sleep(1);
} catch(InterruptedException e) {
// Nom nom
}
} else {
Log.w("SDL", "SDL audio: error return from write(short)");
return;
}
}
}
public static void audioWriteByteBuffer(byte[] buffer) {
for (int i = 0; i < buffer.length; ) {
int result = mAudioTrack.write(buffer, i, buffer.length - i);
if (result > 0) {
i += result;
} else if (result == 0) {
try {
Thread.sleep(1);
} catch(InterruptedException e) {
// Nom nom
}
} else {
Log.w("SDL", "SDL audio: error return from write(byte)");
return;
}
}
}
public static void audioQuit() {
if (mAudioTrack != null) {
mAudioTrack.stop();
mAudioTrack = null;
}
}
// Input
/**
* @return an array which may be empty but is never null.
*/
public static int[] inputGetInputDeviceIds(int sources) {
int[] ids = InputDevice.getDeviceIds();
int[] filtered = new int[ids.length];
int used = 0;
for (int i = 0; i < ids.length; ++i) {
InputDevice device = InputDevice.getDevice(ids[i]);
if ((device != null) && ((device.getSources() & sources) != 0)) {
filtered[used++] = device.getId();
}
}
return Arrays.copyOf(filtered, used);
}
}
/**
Simple nativeInit() runnable
*/
class SDLMain implements Runnable {
@Override
public void run() {
// Runs SDL_main()
SDLActivity.nativeInit();
//Log.v("SDL", "SDL thread terminated");
}
}
/**
SDLSurface. This is what we draw on, so we need to know when it's created
in order to do anything useful.
Because of this, that's where we set up the SDL thread
*/
class SDLSurface extends SurfaceView implements SurfaceHolder.Callback,
View.OnKeyListener, View.OnTouchListener, SensorEventListener {
// Sensors
protected static SensorManager mSensorManager;
protected static Display mDisplay;
// Keep track of the surface size to normalize touch events
protected static float mWidth, mHeight;
// Startup
public SDLSurface(Context context) {
super(context);
getHolder().addCallback(this);
setFocusable(true);
setFocusableInTouchMode(true);
requestFocus();
setOnKeyListener(this);
setOnTouchListener(this);
mDisplay = ((WindowManager)context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
// Some arbitrary defaults to avoid a potential division by zero
mWidth = 1.0f;
mHeight = 1.0f;
}
public Surface getNativeSurface() {
return getHolder().getSurface();
}
// Called when we have a valid drawing surface
@Override
public void surfaceCreated(SurfaceHolder holder) {
Log.v("SDL", "surfaceCreated()");
holder.setType(SurfaceHolder.SURFACE_TYPE_GPU);
}
// Called when we lose the surface
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
Log.v("SDL", "surfaceDestroyed()");
// Call this *before* setting mIsSurfaceReady to 'false'
SDLActivity.handlePause();
SDLActivity.mIsSurfaceReady = false;
SDLActivity.onNativeSurfaceDestroyed();
}
// Called when the surface is resized
@Override
public void surfaceChanged(SurfaceHolder holder,
int format, int width, int height) {
Log.v("SDL", "surfaceChanged()");
int sdlFormat = 0x15151002; // SDL_PIXELFORMAT_RGB565 by default
switch (format) {
case PixelFormat.A_8:
Log.v("SDL", "pixel format A_8");
break;
case PixelFormat.LA_88:
Log.v("SDL", "pixel format LA_88");
break;
case PixelFormat.L_8:
Log.v("SDL", "pixel format L_8");
break;
case PixelFormat.RGBA_4444:
Log.v("SDL", "pixel format RGBA_4444");
sdlFormat = 0x15421002; // SDL_PIXELFORMAT_RGBA4444
break;
case PixelFormat.RGBA_5551:
Log.v("SDL", "pixel format RGBA_5551");
sdlFormat = 0x15441002; // SDL_PIXELFORMAT_RGBA5551
break;
case PixelFormat.RGBA_8888:
Log.v("SDL", "pixel format RGBA_8888");
sdlFormat = 0x16462004; // SDL_PIXELFORMAT_RGBA8888
break;
case PixelFormat.RGBX_8888:
Log.v("SDL", "pixel format RGBX_8888");
sdlFormat = 0x16261804; // SDL_PIXELFORMAT_RGBX8888
break;
case PixelFormat.RGB_332:
Log.v("SDL", "pixel format RGB_332");
sdlFormat = 0x14110801; // SDL_PIXELFORMAT_RGB332
break;
case PixelFormat.RGB_565:
Log.v("SDL", "pixel format RGB_565");
sdlFormat = 0x15151002; // SDL_PIXELFORMAT_RGB565
break;
case PixelFormat.RGB_888:
Log.v("SDL", "pixel format RGB_888");
// Not sure this is right, maybe SDL_PIXELFORMAT_RGB24 instead?
sdlFormat = 0x16161804; // SDL_PIXELFORMAT_RGB888
break;
default:
Log.v("SDL", "pixel format unknown " + format);
break;
}
mWidth = width;
mHeight = height;
SDLActivity.onNativeResize(width, height, sdlFormat);
Log.v("SDL", "Window size:" + width + "x"+height);
// Set mIsSurfaceReady to 'true' *before* making a call to handleResume
SDLActivity.mIsSurfaceReady = true;
SDLActivity.onNativeSurfaceChanged();
if (SDLActivity.mSDLThread == null) {
// This is the entry point to the C app.
// Start up the C app thread and enable sensor input for the first time
SDLActivity.mSDLThread = new Thread(new SDLMain(), "SDLThread");
enableSensor(Sensor.TYPE_ACCELEROMETER, true);
SDLActivity.mSDLThread.start();
}
}
// unused
@Override
public void onDraw(Canvas canvas) {}
// Key events
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
//Log.v("SDL", "key down: " + keyCode);
SDLActivity.onNativeKeyDown(keyCode);
return true;
}
else if (event.getAction() == KeyEvent.ACTION_UP) {
//Log.v("SDL", "key up: " + keyCode);
SDLActivity.onNativeKeyUp(keyCode);
return true;
}
return false;
}
// Touch events
@Override
public boolean onTouch(View v, MotionEvent event) {
final int touchDevId = event.getDeviceId();
final int pointerCount = event.getPointerCount();
// touchId, pointerId, action, x, y, pressure
int actionPointerIndex = (event.getAction() & MotionEvent.ACTION_POINTER_ID_MASK) >> MotionEvent.ACTION_POINTER_ID_SHIFT; /* API 8: event.getActionIndex(); */
int pointerFingerId = event.getPointerId(actionPointerIndex);
int action = (event.getAction() & MotionEvent.ACTION_MASK); /* API 8: event.getActionMasked(); */
float x = event.getX(actionPointerIndex) / mWidth;
float y = event.getY(actionPointerIndex) / mHeight;
float p = event.getPressure(actionPointerIndex);
if (action == MotionEvent.ACTION_MOVE && pointerCount > 1) {
// TODO send motion to every pointer if its position has
// changed since prev event.
for (int i = 0; i < pointerCount; i++) {
pointerFingerId = event.getPointerId(i);
x = event.getX(i) / mWidth;
y = event.getY(i) / mHeight;
p = event.getPressure(i);
SDLActivity.onNativeTouch(touchDevId, pointerFingerId, action, x, y, p);
}
} else {
SDLActivity.onNativeTouch(touchDevId, pointerFingerId, action, x, y, p);
}
return true;
}
// Sensor events
public void enableSensor(int sensortype, boolean enabled) {
// TODO: This uses getDefaultSensor - what if we have >1 accels?
if (enabled) {
mSensorManager.registerListener(this,
mSensorManager.getDefaultSensor(sensortype),
SensorManager.SENSOR_DELAY_GAME, null);
} else {
mSensorManager.unregisterListener(this,
mSensorManager.getDefaultSensor(sensortype));
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO
}
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
float x, y;
switch (mDisplay.getRotation()) {
case Surface.ROTATION_90:
x = -event.values[1];
y = event.values[0];
break;
case Surface.ROTATION_270:
x = event.values[1];
y = -event.values[0];
break;
case Surface.ROTATION_180:
x = -event.values[1];
y = -event.values[0];
break;
default:
x = event.values[0];
y = event.values[1];
break;
}
SDLActivity.onNativeAccel(-x / SensorManager.GRAVITY_EARTH,
y / SensorManager.GRAVITY_EARTH,
event.values[2] / SensorManager.GRAVITY_EARTH - 1);
}
}
}
/* This is a fake invisible editor view that receives the input and defines the
* pan&scan region
*/
class DummyEdit extends View implements View.OnKeyListener {
InputConnection ic;
public DummyEdit(Context context) {
super(context);
setFocusableInTouchMode(true);
setFocusable(true);
setOnKeyListener(this);
}
@Override
public boolean onCheckIsTextEditor() {
return true;
}
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// This handles the hardware keyboard input
if (event.isPrintingKey()) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
ic.commitText(String.valueOf((char) event.getUnicodeChar()), 1);
}
return true;
}
if (event.getAction() == KeyEvent.ACTION_DOWN) {
SDLActivity.onNativeKeyDown(keyCode);
return true;
} else if (event.getAction() == KeyEvent.ACTION_UP) {
SDLActivity.onNativeKeyUp(keyCode);
return true;
}
return false;
}
//
@Override
public boolean onKeyPreIme (int keyCode, KeyEvent event) {
// As seen on StackOverflow: http://stackoverflow.com/questions/7634346/keyboard-hide-event
// FIXME: Discussion at http://bugzilla.libsdl.org/show_bug.cgi?id=1639
// FIXME: This is not a 100% effective solution to the problem of detecting if the keyboard is showing or not
// FIXME: A more effective solution would be to change our Layout from AbsoluteLayout to Relative or Linear
// FIXME: And determine the keyboard presence doing this: http://stackoverflow.com/questions/2150078/how-to-check-visibility-of-software-keyboard-in-android
// FIXME: An even more effective way would be if Android provided this out of the box, but where would the fun be in that :)
if (event.getAction()==KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) {
if (SDLActivity.mTextEdit != null && SDLActivity.mTextEdit.getVisibility() == View.VISIBLE) {
SDLActivity.onNativeKeyboardFocusLost();
}
}
return super.onKeyPreIme(keyCode, event);
}
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
ic = new SDLInputConnection(this, true);
outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI
| 33554432 /* API 11: EditorInfo.IME_FLAG_NO_FULLSCREEN */;
return ic;
}
}
class SDLInputConnection extends BaseInputConnection {
public SDLInputConnection(View targetView, boolean fullEditor) {
super(targetView, fullEditor);
}
@Override
public boolean sendKeyEvent(KeyEvent event) {
/*
* This handles the keycodes from soft keyboard (and IME-translated
* input from hardkeyboard)
*/
int keyCode = event.getKeyCode();
if (event.getAction() == KeyEvent.ACTION_DOWN) {
if (event.isPrintingKey()) {
commitText(String.valueOf((char) event.getUnicodeChar()), 1);
}
SDLActivity.onNativeKeyDown(keyCode);
return true;
} else if (event.getAction() == KeyEvent.ACTION_UP) {
SDLActivity.onNativeKeyUp(keyCode);
return true;
}
return super.sendKeyEvent(event);
}
@Override
public boolean commitText(CharSequence text, int newCursorPosition) {
nativeCommitText(text.toString(), newCursorPosition);
return super.commitText(text, newCursorPosition);
}
@Override
public boolean setComposingText(CharSequence text, int newCursorPosition) {
nativeSetComposingText(text.toString(), newCursorPosition);
return super.setComposingText(text, newCursorPosition);
}
public native void nativeCommitText(String text, int newCursorPosition);
public native void nativeSetComposingText(String text, int newCursorPosition);
}

View File

@@ -0,0 +1,8 @@
set(CMAKE_CXX_FLAGS "-s USE_SDL=2 -s USE_ZLIB=1 -s FULL_ES2=1 -std=c++11 -s TOTAL_MEMORY=16777216 -O0 --preload-file ../../../projects/mtg/bin/Res@/")
#set(CMAKE_CXX_FLAGS "-s USE_SDL=2 -s FULL_ES2=1 -std=c++11 -g4 -s ALLOW_MEMORY_GROWTH=1 --preload-file ../../../projects/mtg/bin/Res@/")
set(CMAKE_EXECUTABLE_SUFFIX ".html")
add_definitions(-DLINUX)
add_definitions(-D_DEBUG)
add_definitions(-DUSERDIR=".wagic")
add_definitions(-DRESDIR="/")
add_definitions(-DGL_ES_VERSION_2_0)

View File

@@ -0,0 +1,5 @@
add_definitions(-DLINUX)
add_definitions(-DUSERDIR=".wagic")
add_definitions(-DRESDIR="Res")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++ -std=c++0x")
set(CMAKE_PREFIX_PATH "/usr/local/opt/qt5")

View File

@@ -0,0 +1,5 @@
add_definitions(-DPSP -G0)
add_definitions(-D_PSP_FW_VERSION=371)
add_definitions(-DDEVHOOK -DPSPFW3XX)
include_directories(${PSPSDK_PATH}/include)

View File

@@ -0,0 +1,4 @@
add_definitions(-DLINUX)
add_definitions(-DUSERDIR=".wagic")
add_definitions(-DRESDIR="Res")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")

View File

@@ -0,0 +1,3 @@
add_definitions(-DWIN32)
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG")

233
projects/mtg/CMakeLists.txt Normal file
View File

@@ -0,0 +1,233 @@
#MTGs common sources
set(MTG_generic_src
src/AbilityParser.cpp
src/ActionElement.cpp
src/ActionLayer.cpp
src/ActionStack.cpp
src/AIHints.cpp
src/AIMomirPlayer.cpp
src/AIPlayer.cpp
src/AIPlayerBaka.cpp
src/AIStats.cpp
src/AllAbilities.cpp
src/CardDescriptor.cpp
src/CardDisplay.cpp
src/CardGui.cpp
src/CardPrimitive.cpp
src/CardSelector.cpp
src/CardSelectorSingleton.cpp
src/CarouselDeckView.cpp
src/Closest.cpp
src/Counters.cpp
src/Credits.cpp
src/Damage.cpp
src/DamagerDamaged.cpp
src/DeckDataWrapper.cpp
src/DeckEditorMenu.cpp
src/DeckManager.cpp
src/DeckMenu.cpp
src/DeckMenuItem.cpp
src/DeckMetaData.cpp
src/DeckStats.cpp
src/DeckView.cpp
src/DuelLayers.cpp
src/ExtraCost.cpp
src/GameApp.cpp
src/GameLauncher.cpp
src/GameObserver.cpp
src/GameOptions.cpp
src/GameStateAwards.cpp
src/GameState.cpp
src/GameStateDeckViewer.cpp
src/GameStateDuel.cpp
src/GameStateMenu.cpp
src/GameStateOptions.cpp
src/GameStateShop.cpp
src/GameStateStory.cpp
src/GameStateTransitions.cpp
src/GridDeckView.cpp
src/GuiAvatars.cpp
src/GuiBackground.cpp
src/GuiCardsController.cpp
src/GuiCombat.cpp
src/GuiFrame.cpp
src/GuiHand.cpp
src/GuiLayers.cpp
src/GuiMana.cpp
src/GuiPhaseBar.cpp
src/GuiPlay.cpp
src/GuiStatic.cpp
src/IconButton.cpp
src/InteractiveButton.cpp
src/ManaCost.cpp
src/ManaCostHybrid.cpp
src/MenuItem.cpp
src/ModRules.cpp
src/MTGAbility.cpp
src/MTGCard.cpp
src/MTGCardInstance.cpp
src/MTGDeck.cpp
src/MTGDefinitions.cpp
src/MTGGamePhase.cpp
src/MTGGameZones.cpp
src/MTGPack.cpp
src/MTGRules.cpp
src/ObjectAnalytics.cpp
src/OptionItem.cpp
src/PhaseRing.cpp
src/Player.cpp
src/PlayerData.cpp
src/PlayGuiObject.cpp
src/PlayGuiObjectController.cpp
src/PlayRestrictions.cpp
src/Pos.cpp
src/PriceList.cpp
src/ReplacementEffects.cpp
src/Rules.cpp
src/SimpleMenu.cpp
src/SimpleMenuItem.cpp
src/SimpleButton.cpp
src/SimplePad.cpp
src/SimplePopup.cpp
src/StoryFlow.cpp
src/Subtypes.cpp
src/StyleManager.cpp
src/TargetChooser.cpp
src/TargetsList.cpp
src/Tasks.cpp
src/TextScroller.cpp
src/ThisDescriptor.cpp
src/Token.cpp
src/Translate.cpp
src/TranslateKeys.cpp
src/Trash.cpp
src/utils.cpp
src/WCachedResource.cpp
src/WDataSrc.cpp
src/WEvent.cpp
src/WFilter.cpp
src/WFont.cpp
src/WGui.cpp
src/WResourceManager.cpp
)
set(MTG_network_src src/NetworkPlayer.cpp)
#the sources we need if we compile a graphical qt version
#TODO: add declarative version since this only works with QWidget right now
set(MTG_qt_graphic_src
src/qt/filedownloader.cpp
src/qt/corewrapper.cpp
include/qt/corewrapper.h #so automoc finds it
include/qt/filedownloader.h
src/Qtmain.cpp)
#the sources we need to compile the testsuit
set(MTG_qt_console_src
src/Qtconsole.cpp
src/TestSuiteAI.cpp)
set(MTG_sdl_src
src/SDLmain.cpp)
set(MTG_android_sdl_src
src/SDLmain.cpp)
set(MTG_iOS_src
iOS/UI/WagicDownloadProgressViewController.m
iOS/asi-http-request/ASIAuthenticationDialog.m
iOS/asi-http-request/ASIDataCompressor.m
iOS/asi-http-request/ASIDataDecompressor.m
iOS/asi-http-request/ASIDownloadCache.m
iOS/asi-http-request/ASIFormDataRequest.m
iOS/asi-http-request/ASIHTTPRequest.m
iOS/asi-http-request/ASIInputStream.m
iOS/asi-http-request/ASINetworkQueue.m
iOS/SoundManager/SoundManager.m
iOS/SoundManager/MyOpenALSupport.c
iOS/Reachability/Reachability/Reachability.m
iOS/ZipArchive/ZipArchive.mm)
set(MTG_iOS_INCLUDE_DIRS iOS/UI iOS/Reachability/Reachability iOS/asi-http-request iOS/ZipArchive iOS/SoundManager)
set(MTG_INCLUDE_DIRS include include/qt)
set(JGE_INCLUDE_DIRS ../../JGE/include ../../JGE/include/hge)
set(JGE_LIBRARY jge)
set(EXTRA_INCLUDE_DIR extra)
#turn moc on
if(backend_qt_console OR backend_qt_widget)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC TRUE)
endif()
if(backend_qt_console)
if(UNIX AND NOT ANDROID)
include_directories(${MTG_INCLUDE_DIRS} ${JGE_INCLUDE_DIRS} ${ZIPFS_INCLUDE_DIR} ${Qt5Core_INCLUDE_DIRS} ${Qt5Multimedia_INCLUDE_DIRS}
${UNZIP_INCLUDE_DIR} ${HGE_INCLUDE_DIR} ${TINYXML_INCLUDE_DIR} ${QT_MKSPECS_DIR}/default)
add_executable(wagic ${MTG_generic_src} ${MTG_qt_console_src} ${MTG_network_src})
target_link_libraries(wagic ${JGE_LIBRARY} ${Qt5Core_INCLUDE_DIRS} ${Qt5Multimedia_INCLUDE_DIRS} ${TINYXML_LIBRARIES}
${HGE_LIBRARY} ${ZLIB_LIBRARIES})
else()
message(FATAL_ERROR "qt-console builds are only supported on unix platforms")
endif()
elseif(backend_qt_widget)
if(UNIX AND NOT ANDROID)
include_directories(${MTG_INCLUDE_DIRS} ${JGE_INCLUDE_DIRS} ${ZIPFS_INCLUDE_DIR} ${Qt5Core_INCLUDE_DIRS} ${Qt5Multimedia_INCLUDE_DIRS}
${UNZIP_INCLUDE_DIR} ${HGE_INCLUDE_DIR} ${TINYXML_INCLUDE_DIR} ${QT_MKSPECS_DIR}/default)
add_executable(wagic ${MTG_generic_src} ${MTG_qt_graphic_src} ${MTG_network_src})
target_link_libraries(wagic ${JGE_LIBRARY} ${Qt5Core_INCLUDE_DIRS} ${Qt5Multimedia_INCLUDE_DIRS} ${OPENGL_LIBRARIES} ${TINYXML_LIBRARIES}
${HGE_LIBRARY} ${ZLIB_LIBRARIES})# ${X11_LIBRARIES})
else()
message(FATAL_ERROR "qt-widget builds are only supported on unix platforms")
endif()
elseif(backend_sdl)
if((UNIX OR EMSCRIPTEN) AND NOT ANDROID)
include_directories(${MTG_INCLUDE_DIRS} ${JGE_INCLUDE_DIRS} ${SDL2_INCLUDE_DIR} ${ZIPFS_INCLUDE_DIR} ${UNZIP_INCLUDE_DIR} ${HGE_INCLUDE_DIR} ${TINYXML_INCLUDE_DIR} ${ZLIB_INCLUDE_DIRS})
add_executable(wagic ${MTG_generic_src} ${MTG_sdl_src} ${MTG_network_src} src/TestSuiteAI.cpp src/AIPlayerBakaB.cpp)
target_link_libraries(wagic ${JGE_LIBRARY} ${SDL2_LIBRARY} ${OPENGL_LIBRARIES} ${TINYXML_LIBRARIES} ${HGE_LIBRARY} ${ZLIB_LIBRARIES})
elseif(ANDROID)
include_directories(${MTG_INCLUDE_DIRS} ${JGE_INCLUDE_DIRS} ${SDL2_INCLUDE_DIR} ${ZIPFS_INCLUDE_DIR} ${BOOST_INCLUDE_DIRS} ${UNZIP_INCLUDE_DIR} ${HGE_INCLUDE_DIR} ${TINYXML_INCLUDE_DIR})
#we should try to get rid of this hack
add_library(wagic SHARED ${MTG_generic_src} ${MTG_network_src} ${MTG_android_sdl_src} src/TestSuiteAI.cpp)
target_link_libraries(wagic ${JGE_LIBRARY} ${SDL2_LIBRARY} ${OPENGL_LIBRARIES} ${TINYXML_LIBRARIES} ${HGE_LIBRARY} ${ZLIB_LIBRARIES})
elseif(WIN32)
include_directories(${EXTRA_INCLUDE_DIR} ${MTG_INCLUDE_DIRS} ${JGE_INCLUDE_DIRS} ${SDL2_INCLUDE_DIR} ${ZIPFS_INCLUDE_DIR}
${Boost_INCLUDE_DIRS} ${UNZIP_INCLUDE_DIR} ${HGE_INCLUDE_DIR} ${TINYXML_INCLUDE_DIR} ${ZLIB_INCLUDE_DIRS})
add_executable(wagic ${MTG_generic_src} ${MTG_sdl_src} src/TestSuiteAI.cpp src/AIPlayerBakaB.cpp)
link_directories(${Boost_LIBRARY_DIR} ${SDL2_LIBRARY_DIR})
target_link_libraries(wagic ${JGE_LIBRARY} ${SDL2_LIBRARY} ${OPENGL_LIBRARIES} ${TINYXML_LIBRARIES} ${BOOST_date_time} ${HGE_LIBRARY} ${ZLIB_LIBRARIES})
endif()
elseif(backend_psp)
if(PSP)
#${PSPSDK_PATH}/include
include_directories(${MTG_INCLUDE_DIRS} ${JGE_INCLUDE_DIRS} ${TINYXML_INCLUDE_DIR} ${ZIPFS_INCLUDE_DIR}
${UNZIP_INCLUDE_DIR} ${BOOST_INCLUDE_DIRS} ${GIF_INCLUDE_DIR} ${HGETOOLS_INCLUDE_DIRS})
add_executable(wagic ${MTG_generic_src} ${MTG_network_src})
target_link_libraries(wagic ${JGE_LIBRARY} ${PSPSDK_LIB} ${HGETOOLS_LIBRARY} ${FREETYPE_LIB} ${JPEG_LIBRARY}
${GIF_LIBRARIES} ${PNG_LIBRARIES} z m ${MIKMOD_LIBRARY} ${TINYXML_LIBRARIES}
stdc++ ${PSPSDK_REQUIRED_LIB})
set(PRXSPECS_FILE "${PSPSDK_PATH}/lib/prxspecs")
set(LINKFILE_FILE "${PSPSDK_PATH}/lib/linkfile.prx")
get_property(wagic_elf_location TARGET wagic PROPERTY LOCATION)
get_filename_component(wagic_elf_directory ${wagic_elf_location} PATH)
set_target_properties(wagic PROPERTIES LINK_FLAGS "-specs=${PRXSPECS_FILE} -Wl,-q,-T${LINKFILE_FILE}")
add_custom_command(TARGET wagic POST_BUILD
COMMAND ${PSPSDK_MKSFO_COMMAND} ARGS "'Wagic, the Homebrew?!'" "${wagic_elf_directory}/PARAM.SFO"
COMMAND ${PSPSDK_FIXUP_IMPORTS_COMMAND} ARGS ${wagic_elf_location}
COMMAND ${PSPSDK_PRXGEN_COMMAND} ARGS ${wagic_elf_location} "${wagic_elf_directory}/wagic.prx"
COMMAND ${PSPSDK_PACK_PBP_COMMAND} ARGS ${wagic_elf_directory}/EBOOT.PBP ${wagic_elf_directory}/PARAM.SFO ${CMAKE_CURRENT_SOURCE_DIR}/icon.png NULL ${CMAKE_CURRENT_SOURCE_DIR}/pic0.png ${CMAKE_CURRENT_SOURCE_DIR}/pic1.png NULL "${wagic_elf_directory}/wagic.prx" NULL)
else()
message(FATAL_ERROR "use the cross-compile toolchain to build as the psp target")
endif()
endif()
if(IOS)
set(MTG_generic_src ${MTG_generic_src} ${MTG_iOS_src} PARENT_SCOPE)
set(MTG_INCLUDE_DIRS ${MTG_INCLUDE_DIRS} ${MTG_iOS_INCLUDE_DIRS} PARENT_SCOPE)
endif()

View File

@@ -1,4 +1,4 @@
name=Mode Blitzkrieg
name=Blitzkrieg
unlock=prx_geirkztilb
[INIT]
mode=mtg

View File

@@ -34,58 +34,4 @@ unlock_text=Blitzkrieg Mode Unlocked
teaser=Like to play fast? Unlock Blitzkrieg Mode :)
trophyroom_text=Won with more than 18 lands.
unlock_condition=type(land|myBattlefield)~morethan~18
[/award]
[award]
name=Paradise
id=prx_paradise
unlock_img=
unlock_text=Birds of Paradise Mode Unlocked
teaser=Utopia! Bring me down to the Paradise City.
Lands you control have "{T}: Add one mana of any color."
trophyroom_text=Won with Birds of Paradise on the battlefield.
unlock_condition=type(Birds of Paradise|mybattlefield)~morethan~0
[/award]
[award]
name=Morinfen Mode
id=prx_morinfen
unlock_img=
unlock_text=Morinfen Mode Unlocked
teaser="I looked into its eyes, and its soul was so empty I saw no reflection, no light there." — Crovax
At the beginning of your upkeep, you lose 1 life for each permanent you control.
trophyroom_text=Won with less than 5 life.
unlock_condition=this(controllerlife<=6)
[/award]
[award]
name=Horde
id=prx_horde
unlock_img=
unlock_text=Tribal Horde Mode Unlocked
teaser="From shards and splinters I call forth my living horde." -Molimo, maro-sorcerer
trophyroom_text=Won with more than 25 life.
unlock_condition=this(controllerlife>=26)
[/award]
[award]
name=False God
id=prx_karona
unlock_img=
unlock_text=False God Mode Unlocked
teaser=At the beginning of your upkeep, exchange control of a permanent you control chosen at random and a permanent target opponent controls chosen at random.
trophyroom_text=Devotion to red more than 7.
unlock_condition=this(variable{type:manar}>7)
[/award]
[award]
name=Titania Mode
id=prx_titania
unlock_img=
unlock_text=Titania Mode Unlocked
teaser=Voice of the Argoth forest, defender of its creatures, and enforcer of its laws, Titania is literally an aspect of the forest itself.
You may play an additional land on each of your turns.
trophyroom_text=Devotion to green more than 7.
unlock_condition=this(variable{type:manag}>7)
[/award]
[/award]

View File

@@ -1,15 +0,0 @@
include mtg.txt
name=False God
unlock=prx_karona
[INIT]
mode=mtg
[PLAYERS]
life:28
auto=shuffle
auto=draw:6
auto=@each myupkeep:auto=moverandom(*) from(opponentBattlefield) to(myBattlefield)
auto=@each myupkeep:auto=moverandom(*) from(myBattlefield) to(opponentBattlefield)
auto=maxPlay(land)+1

View File

@@ -1,13 +0,0 @@
include mtg.txt
name=Tribal Wars
unlock=prx_horde
[INIT]
mode=horde
[PLAYERS]
life:20
auto=shuffle
auto=draw:7
auto=@each my upkeep:if type(creature[manacost<=2]|mylibrary)~lessthan~1 then moverandom(creature[manacost<=4]) from(library) to(battlefield)
auto=@each my upkeep:moverandom(creature[manacost<=2]) from(library) to(battlefield)

View File

@@ -1,12 +0,0 @@
include mtg.txt
name=Morifen
unlock=prx_morinfen
[INIT]
mode=mtg
[PLAYERS]
life:50
auto=shuffle
auto=draw:7
auto=@each myupkeep:foreach(*|mybattlefield) life:-1

View File

@@ -1,20 +0,0 @@
include mtg.txt
name=Paradise
unlock=prx_paradise
[INIT]
mode=mtg
[PLAYERS]
life:17
auto=shuffle
auto=draw:7
auto=lord(*[-noactivatedability;-nomanaability;-notapability;land]|MyBattlefield) {T}:Add{W}
auto=lord(*[-noactivatedability;-nomanaability;-notapability;land]|MyBattlefield) {T}:Add{U}
auto=lord(*[-noactivatedability;-nomanaability;-notapability;land]|MyBattlefield) {T}:Add{R}
auto=lord(*[-noactivatedability;-nomanaability;-notapability;land]|MyBattlefield) {T}:Add{B}
auto=lord(*[-noactivatedability;-nomanaability;-notapability;land]|MyBattlefield) {T}:Add{G}

View File

@@ -1,9 +0,0 @@
include mtg.txt
name=Random 3 Colors
unlock=prx_rnddeck
[INIT]
mode=random3
[PLAYERS]
auto=shuffle
auto=draw:7

View File

@@ -1,16 +0,0 @@
include mtg.txt
name=Random 5 Colors
unlock=prx_rnddeck
[INIT]
mode=random5
[PLAYERS]
life:20
auto=shuffle
auto=draw:7
auto=lord(*[-noactivatedability;-nomanaability;-notapability;land]|MyBattlefield) {T}:Add{W}
auto=lord(*[-noactivatedability;-nomanaability;-notapability;land]|MyBattlefield) {T}:Add{U}
auto=lord(*[-noactivatedability;-nomanaability;-notapability;land]|MyBattlefield) {T}:Add{R}
auto=lord(*[-noactivatedability;-nomanaability;-notapability;land]|MyBattlefield) {T}:Add{B}
auto=lord(*[-noactivatedability;-nomanaability;-notapability;land]|MyBattlefield) {T}:Add{G}

View File

@@ -1,11 +0,0 @@
include mtg.txt
name=Set Limited
unlock=prx_rnddeck
[INIT]
mode=set_limited
[PLAYERS]
life:20
auto=shuffle
auto=draw:7

View File

@@ -1,17 +0,0 @@
include mtg.txt
name=Titania
unlock=prx_titania
[INIT]
mode=mtg
[PLAYERS]
life:15
auto=shuffle
auto=draw:9
auto=maxPlay(land)+1
#auto=@each myupkeep:auto=moverandom(*) from(myBattlefield) to #(opponentBattlefield)
#auto=@each myupkeep:auto=moverandom(*) from(opponentBattlefield) #to(myBattlefield)
#auto=@each myupkeep:draw:1
#auto=@each myupkeep:life:-1

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,96 +0,0 @@
[meta]
author=Wagic Team
name=Commander's Arsenal
year=2012
total=18
[/meta]
[card]
primitive=Chaos Warp
id=338441
rarity=R
[/card]
[card]
primitive=Command Tower
id=338442
rarity=C
[/card]
[card]
primitive=Decree of Pain
id=338453
rarity=R
[/card]
[card]
primitive=Desertion
id=338454
rarity=R
[/card]
[card]
primitive=Diaochan, Artful Beauty
id=338449
rarity=R
[/card]
[card]
primitive=Dragonlair Spider
id=338446
rarity=R
[/card]
[card]
primitive=Duplicant
id=338451
rarity=R
[/card]
[card]
primitive=Edric, Spymaster of Trest
id=338443
rarity=R
[/card]
[card]
primitive=Kaalia of the Vast
id=338444
rarity=M
[/card]
[card]
primitive=Loyal Retainers
id=338450
rarity=U
[/card]
[card]
primitive=Maelstrom Wanderer
id=338447
rarity=M
[/card]
[card]
primitive=Mind's Eye
id=338452
rarity=R
[/card]
[card]
primitive=Mirari's Wake
id=338455
rarity=R
[/card]
[card]
primitive=Rhystic Study
id=338457
rarity=C
[/card]
[card]
primitive=Scroll Rack
id=338458
rarity=R
[/card]
[card]
primitive=Sylvan Library
id=338456
rarity=R
[/card]
[card]
primitive=The Mimeoplasm
id=338445
rarity=M
[/card]
[card]
primitive=Vela the Night-Clad
id=338448
rarity=M
[/card]

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,331 +0,0 @@
[meta]
author=Wagic Team
name=Duel Decks: Mind vs. Might
year=2017-03-31
total=65
[/meta]
[card]
primitive=Jhoira of the Ghitu
id=426573
rarity=M
[/card]
[card]
primitive=Beacon of Tomorrows
id=426574
rarity=R
[/card]
[card]
primitive=Deep-Sea Kraken
id=426575
rarity=R
[/card]
[card]
primitive=Mind's Desire
id=426576
rarity=R
[/card]
[card]
primitive=Peer Through Depths
id=426577
rarity=C
[/card]
[card]
primitive=Quicken
id=426578
rarity=R
[/card]
[card]
primitive=Reach Through Mists
id=426579
rarity=C
[/card]
[card]
primitive=Sage-Eye Avengers
id=426580
rarity=R
[/card]
[card]
primitive=Sift Through Sands
id=426581
rarity=C
[/card]
[card]
primitive=Snap
id=426582
rarity=C
[/card]
[card]
primitive=Talrand, Sky Summoner
id=426583
rarity=R
[/card]
[card]
primitive=Temporal Fissure
id=426584
rarity=C
[/card]
[card]
primitive=The Unspeakable
id=426585
rarity=R
[/card]
[card]
primitive=Desperate Ritual
id=426586
rarity=U
[/card]
[card]
primitive=Empty the Warrens
id=426587
rarity=C
[/card]
[card]
primitive=Grapeshot
id=426588
rarity=C
[/card]
[card]
primitive=Rift Bolt
id=426589
rarity=C
[/card]
[card]
primitive=Shivan Meteor
id=426590
rarity=U
[/card]
[card]
primitive=Volcanic Vision
id=426591
rarity=R
[/card]
[card]
primitive=Young Pyromancer
id=426592
rarity=U
[/card]
[card]
primitive=Firemind's Foresight
id=426593
rarity=R
[/card]
[card]
primitive=Goblin Electromancer
id=426594
rarity=C
[/card]
[card]
primitive=Jori En, Ruin Diver
id=426595
rarity=R
[/card]
[card]
primitive=Nivix Cyclops
id=426596
rarity=C
[/card]
[card]
primitive=Spellheart Chimera
id=426597
rarity=U
[/card]
[card]
primitive=Nucklavee
id=426598
rarity=U
[/card]
[card]
primitive=Swiftwater Cliffs
id=426599
rarity=C
[/card]
[card]
primitive=Island
id=426600
rarity=L
[/card]
[card]
primitive=Island
id=426601
rarity=L
[/card]
[card]
primitive=Island
id=426602
rarity=L
[/card]
[card]
primitive=Mountain
id=426603
rarity=L
[/card]
[card]
primitive=Mountain
id=426604
rarity=L
[/card]
[card]
primitive=Mountain
id=426605
rarity=L
[/card]
[card]
primitive=Lovisa Coldeyes
id=426606
rarity=M
[/card]
[card]
primitive=Beacon of Destruction
id=426607
rarity=R
[/card]
[card]
primitive=Boldwyr Intimidator
id=426608
rarity=U
[/card]
[card]
primitive=Firebolt
id=426609
rarity=C
[/card]
[card]
primitive=Gorehorn Minotaurs
id=426610
rarity=C
[/card]
[card]
primitive=Kamahl, Pit Fighter
id=426611
rarity=R
[/card]
[card]
primitive=Kruin Striker
id=426612
rarity=C
[/card]
[card]
primitive=Zo-Zu the Punisher
id=426613
rarity=R
[/card]
[card]
primitive=Ambassador Oak
id=426614
rarity=C
[/card]
[card]
primitive=Beast Attack
id=426615
rarity=U
[/card]
[card]
primitive=Call of the Herd
id=426616
rarity=R
[/card]
[card]
primitive=Cloudcrown Oak
id=426617
rarity=C
[/card]
[card]
primitive=Harmonize
id=426618
rarity=U
[/card]
[card]
primitive=Increasing Savagery
id=426619
rarity=R
[/card]
[card]
primitive=Rampant Growth
id=426620
rarity=C
[/card]
[card]
primitive=Roar of the Wurm
id=426621
rarity=U
[/card]
[card]
primitive=Skarrgan Pit-Skulk
id=426622
rarity=C
[/card]
[card]
primitive=Sylvan Might
id=426623
rarity=C
[/card]
[card]
primitive=Talara's Battalion
id=426624
rarity=R
[/card]
[card]
primitive=Radha, Heir to Keld
id=426625
rarity=R
[/card]
[card]
primitive=Relentless Hunter
id=426626
rarity=U
[/card]
[card]
primitive=Burning-Tree Emissary
id=426627
rarity=U
[/card]
[card]
primitive=Guttural Response
id=426628
rarity=U
[/card]
[card]
primitive=Rubblebelt Raiders
id=426629
rarity=R
[/card]
[card]
primitive=Coat of Arms
id=426630
rarity=R
[/card]
[card]
primitive=Rugged Highlands
id=426631
rarity=C
[/card]
[card]
primitive=Mountain
id=426632
rarity=L
[/card]
[card]
primitive=Mountain
id=426633
rarity=L
[/card]
[card]
primitive=Mountain
id=426634
rarity=L
[/card]
[card]
primitive=Forest
id=426635
rarity=L
[/card]
[card]
primitive=Forest
id=426636
rarity=L
[/card]
[card]
primitive=Forest
id=426637
rarity=L
[/card]

View File

@@ -1,321 +0,0 @@
[meta]
author=Wagic Team
name=Duel Decks: Merfolk vs. Goblins
year=2017-10-24
total=63
[/meta]
[card]
primitive=Master of Waves
id=438441
rarity=M
[/card]
[card]
primitive=Aquitect's Will
id=438442
rarity=C
[/card]
[card]
primitive=Claustrophobia
id=438443
rarity=C
[/card]
[card]
primitive=Concentrate
id=438444
rarity=U
[/card]
[card]
primitive=Engulf the Shore
id=438445
rarity=R
[/card]
[card]
primitive=Essence Scatter
id=438446
rarity=C
[/card]
[card]
primitive=Harbinger of the Tides
id=438447
rarity=R
[/card]
[card]
primitive=Inkfathom Divers
id=438448
rarity=C
[/card]
[card]
primitive=Master of the Pearl Trident
id=438449
rarity=R
[/card]
[card]
primitive=Merfolk Looter
id=438450
rarity=U
[/card]
[card]
primitive=Merfolk Sovereign
id=438451
rarity=R
[/card]
[card]
primitive=Merfolk Wayfinder
id=438452
rarity=U
[/card]
[card]
primitive=Merrow Reejerey
id=438453
rarity=U
[/card]
[card]
primitive=Mind Spring
id=438454
rarity=R
[/card]
[card]
primitive=Misdirection
id=438455
rarity=R
[/card]
[card]
primitive=Rootwater Hunter
id=438456
rarity=U
[/card]
[card]
primitive=Scroll Thief
id=438457
rarity=C
[/card]
[card]
primitive=Streambed Aquitects
id=438458
rarity=C
[/card]
[card]
primitive=Tidal Courier
id=438459
rarity=U
[/card]
[card]
primitive=Tidal Warrior
id=438460
rarity=C
[/card]
[card]
primitive=Tidal Wave
id=438461
rarity=C
[/card]
[card]
primitive=Tidebinder Mage
id=438462
rarity=R
[/card]
[card]
primitive=Triton Tactics
id=438463
rarity=U
[/card]
[card]
primitive=Wake Thrasher
id=438464
rarity=R
[/card]
[card]
primitive=Cold-Eyed Selkie
id=438465
rarity=R
[/card]
[card]
primitive=Blighted Cataract
id=438466
rarity=U
[/card]
[card]
primitive=Lonely Sandbar
id=438467
rarity=C
[/card]
[card]
primitive=Island
id=438468
rarity=L
[/card]
[card]
primitive=Island
id=438469
rarity=L
[/card]
[card]
primitive=Island
id=438470
rarity=L
[/card]
[card]
primitive=Island
id=438471
rarity=L
[/card]
[card]
primitive=Warren Instigator
id=438472
rarity=M
[/card]
[card]
primitive=Battle Squadron
id=438473
rarity=U
[/card]
[card]
primitive=Boggart Brute
id=438474
rarity=C
[/card]
[card]
primitive=Brute Strength
id=438475
rarity=C
[/card]
[card]
primitive=Cleaver Riot
id=438476
rarity=U
[/card]
[card]
primitive=Ember Hauler
id=438477
rarity=U
[/card]
[card]
primitive=Foundry Street Denizen
id=438478
rarity=C
[/card]
[card]
primitive=Gempalm Incinerator
id=438479
rarity=U
[/card]
[card]
primitive=Ghostfire
id=438480
rarity=C
[/card]
[card]
primitive=Goblin Chieftain
id=438481
rarity=R
[/card]
[card]
primitive=Goblin Diplomats
id=438482
rarity=R
[/card]
[card]
primitive=Goblin Glory Chaser
id=438483
rarity=U
[/card]
[card]
primitive=Goblin Goon
id=438484
rarity=R
[/card]
[card]
primitive=Goblin Grenade
id=438485
rarity=U
[/card]
[card]
primitive=Goblin Rabblemaster
id=438486
rarity=R
[/card]
[card]
primitive=Goblin Razerunners
id=438487
rarity=R
[/card]
[card]
primitive=Goblin Ringleader
id=438488
rarity=U
[/card]
[card]
primitive=Goblin Tunneler
id=438489
rarity=C
[/card]
[card]
primitive=Goblin Wardriver
id=438490
rarity=U
[/card]
[card]
primitive=Hordeling Outburst
id=438491
rarity=U
[/card]
[card]
primitive=Krenko, Mob Boss
id=438492
rarity=R
[/card]
[card]
primitive=Krenko's Command
id=438493
rarity=C
[/card]
[card]
primitive=Relentless Assault
id=438494
rarity=R
[/card]
[card]
primitive=Tarfire
id=438495
rarity=C
[/card]
[card]
primitive=Brittle Effigy
id=438496
rarity=R
[/card]
[card]
primitive=Goblin Charbelcher
id=438497
rarity=R
[/card]
[card]
primitive=Blighted Gorge
id=438498
rarity=U
[/card]
[card]
primitive=Forgotten Cave
id=438499
rarity=C
[/card]
[card]
primitive=Mountain
id=438500
rarity=L
[/card]
[card]
primitive=Mountain
id=438501
rarity=L
[/card]
[card]
primitive=Mountain
id=438502
rarity=L
[/card]
[card]
primitive=Mountain
id=438503
rarity=L
[/card]

View File

@@ -1,386 +0,0 @@
[meta]
author=Wagic Team
name=Duel Decks: Elves vs. Inventors
year=2018-04-06
total=76
[/meta]
[card]
primitive=Ezuri, Renegade Leader
id=442737
rarity=M
[/card]
[card]
primitive=Dwynen, Gilt-Leaf Daen
id=442738
rarity=R
[/card]
[card]
primitive=Dwynen's Elite
id=442739
rarity=U
[/card]
[card]
primitive=Elvish Aberration
id=442740
rarity=C
[/card]
[card]
primitive=Elvish Archdruid
id=442741
rarity=R
[/card]
[card]
primitive=Elvish Branchbender
id=442742
rarity=C
[/card]
[card]
primitive=Elvish Mystic
id=442743
rarity=C
[/card]
[card]
primitive=Elvish Vanguard
id=442744
rarity=C
[/card]
[card]
primitive=Ezuri's Archers
id=442745
rarity=C
[/card]
[card]
primitive=Fierce Empath
id=442746
rarity=C
[/card]
[card]
primitive=Gladehart Cavalry
id=442747
rarity=R
[/card]
[card]
primitive=Ivy Lane Denizen
id=442748
rarity=C
[/card]
[card]
primitive=Jagged-Scar Archers
id=442749
rarity=U
[/card]
[card]
primitive=Krosan Tusker
id=442750
rarity=C
[/card]
[card]
primitive=Kujar Seedsculptor
id=442751
rarity=C
[/card]
[card]
primitive=Lead the Stampede
id=442752
rarity=C
[/card]
[card]
primitive=Leaf Gilder
id=442753
rarity=C
[/card]
[card]
primitive=Llanowar Empath
id=442754
rarity=C
[/card]
[card]
primitive=Naturalize
id=442755
rarity=C
[/card]
[card]
primitive=Nature's Way
id=442756
rarity=U
[/card]
[card]
primitive=Nissa's Judgment
id=442757
rarity=U
[/card]
[card]
primitive=Regal Force
id=442758
rarity=R
[/card]
[card]
primitive=Sylvan Advocate
id=442759
rarity=R
[/card]
[card]
primitive=Talara's Battalion
id=442760
rarity=R
[/card]
[card]
primitive=Viridian Shaman
id=442761
rarity=U
[/card]
[card]
primitive=Wildheart Invoker
id=442762
rarity=C
[/card]
[card]
primitive=Yeva, Nature's Herald
id=442763
rarity=R
[/card]
[card]
primitive=Oran-Rief, the Vastwood
id=442764
rarity=R
[/card]
[card]
primitive=Tranquil Thicket
id=442765
rarity=C
[/card]
[card]
primitive=Treetop Village
id=442766
rarity=U
[/card]
[card]
primitive=Forest
id=442767
rarity=L
[/card]
[card]
primitive=Forest
id=442768
rarity=L
[/card]
[card]
primitive=Forest
id=442769
rarity=L
[/card]
[card]
primitive=Forest
id=442770
rarity=L
[/card]
[card]
primitive=Goblin Welder
id=442771
rarity=M
[/card]
[card]
primitive=Artificer's Epiphany
id=442772
rarity=C
[/card]
[card]
primitive=Etherium Sculptor
id=442773
rarity=C
[/card]
[card]
primitive=Faerie Mechanist
id=442774
rarity=C
[/card]
[card]
primitive=Riddlesmith
id=442775
rarity=U
[/card]
[card]
primitive=Treasure Mage
id=442776
rarity=U
[/card]
[card]
primitive=Trinket Mage
id=442777
rarity=C
[/card]
[card]
primitive=Trophy Mage
id=442778
rarity=U
[/card]
[card]
primitive=Whirler Rogue
id=442779
rarity=U
[/card]
[card]
primitive=Barrage Ogre
id=442780
rarity=U
[/card]
[card]
primitive=Galvanic Blast
id=442781
rarity=C
[/card]
[card]
primitive=Ghirapur Gearcrafter
id=442782
rarity=C
[/card]
[card]
primitive=Pia and Kiran Nalaar
id=442783
rarity=R
[/card]
[card]
primitive=Shrapnel Blast
id=442784
rarity=U
[/card]
[card]
primitive=Welding Sparks
id=442785
rarity=C
[/card]
[card]
primitive=Maverick Thopterist
id=442786
rarity=U
[/card]
[card]
primitive=Reclusive Artificer
id=442787
rarity=U
[/card]
[card]
primitive=Darksteel Plate
id=442788
rarity=R
[/card]
[card]
primitive=Filigree Familiar
id=442789
rarity=U
[/card]
[card]
primitive=Ichor Wellspring
id=442790
rarity=C
[/card]
[card]
primitive=Inventor's Goggles
id=442791
rarity=C
[/card]
[card]
primitive=Mycosynth Wellspring
id=442792
rarity=C
[/card]
[card]
primitive=Myr Battlesphere
id=442793
rarity=R
[/card]
[card]
primitive=Myr Sire
id=442794
rarity=C
[/card]
[card]
primitive=Neurok Replica
id=442795
rarity=C
[/card]
[card]
primitive=Pyrite Spellbomb
id=442796
rarity=C
[/card]
[card]
primitive=Scuttling Doom Engine
id=442797
rarity=R
[/card]
[card]
primitive=Solemn Simulacrum
id=442798
rarity=R
[/card]
[card]
primitive=Thopter Assembly
id=442799
rarity=R
[/card]
[card]
primitive=Voyager Staff
id=442800
rarity=U
[/card]
[card]
primitive=Darksteel Citadel
id=442801
rarity=U
[/card]
[card]
primitive=Foundry of the Consuls
id=442802
rarity=U
[/card]
[card]
primitive=Great Furnace
id=442803
rarity=C
[/card]
[card]
primitive=Phyrexia's Core
id=442804
rarity=U
[/card]
[card]
primitive=Seat of the Synod
id=442805
rarity=C
[/card]
[card]
primitive=Shivan Reef
id=442806
rarity=R
[/card]
[card]
primitive=Swiftwater Cliffs
id=442807
rarity=C
[/card]
[card]
primitive=Temple of Epiphany
id=442808
rarity=R
[/card]
[card]
primitive=Island
id=442809
rarity=L
[/card]
[card]
primitive=Island
id=442810
rarity=L
[/card]
[card]
primitive=Mountain
id=442811
rarity=L
[/card]
[card]
primitive=Mountain
id=442812
rarity=L
[/card]

File diff suppressed because it is too large Load Diff

View File

@@ -1,536 +0,0 @@
[meta]
author=Wagic Team
name=Archenemy: Nicol Bolas
year=2017-06-16
total=106
[/meta]
[card]
primitive=Aegis Angel
id=430540
rarity=R
[/card]
[card]
primitive=Aerial Responder
id=430541
rarity=U
[/card]
[card]
primitive=Anointer of Champions
id=430542
rarity=U
[/card]
[card]
primitive=Doomed Traveler
id=430543
rarity=C
[/card]
[card]
primitive=Excoriate
id=430544
rarity=C
[/card]
[card]
primitive=Expedition Raptor
id=430545
rarity=C
[/card]
[card]
primitive=Fencing Ace
id=430546
rarity=U
[/card]
[card]
primitive=Fiendslayer Paladin
id=430547
rarity=R
[/card]
[card]
primitive=Flickerwisp
id=430548
rarity=U
[/card]
[card]
primitive=Gideon Jura
id=430549
rarity=M
[/card]
[card]
primitive=Gideon's Lawkeeper
id=430550
rarity=C
[/card]
[card]
primitive=Grand Abolisher
id=430551
rarity=R
[/card]
[card]
primitive=Grasp of the Hieromancer
id=430552
rarity=C
[/card]
[card]
primitive=Lightwielder Paladin
id=430553
rarity=R
[/card]
[card]
primitive=Mentor of the Meek
id=430554
rarity=R
[/card]
[card]
primitive=Moment of Heroism
id=430555
rarity=C
[/card]
[card]
primitive=Odric, Master Tactician
id=430556
rarity=R
[/card]
[card]
primitive=Precinct Captain
id=430557
rarity=R
[/card]
[card]
primitive=Relief Captain
id=430558
rarity=U
[/card]
[card]
primitive=Shoulder to Shoulder
id=430559
rarity=C
[/card]
[card]
primitive=Sun Titan
id=430560
rarity=M
[/card]
[card]
primitive=Youthful Knight
id=430561
rarity=C
[/card]
[card]
primitive=Compulsive Research
id=430562
rarity=C
[/card]
[card]
primitive=Icefall Regent
id=430563
rarity=R
[/card]
[card]
primitive=Ior Ruin Expedition
id=430564
rarity=C
[/card]
[card]
primitive=Prognostic Sphinx
id=430565
rarity=R
[/card]
[card]
primitive=Reckless Scholar
id=430566
rarity=U
[/card]
[card]
primitive=Sphinx of Jwar Isle
id=430567
rarity=R
[/card]
[card]
primitive=Vision Skeins
id=430568
rarity=C
[/card]
[card]
primitive=Windrider Eel
id=430569
rarity=C
[/card]
[card]
primitive=Archfiend of Depravity
id=430570
rarity=R
[/card]
[card]
primitive=Deathbringer Regent
id=430571
rarity=R
[/card]
[card]
primitive=Doom Blade
id=430572
rarity=U
[/card]
[card]
primitive=Harvester of Souls
id=430573
rarity=R
[/card]
[card]
primitive=Nightscape Familiar
id=430574
rarity=C
[/card]
[card]
primitive=Overseer of the Damned
id=430575
rarity=R
[/card]
[card]
primitive=Reckless Spite
id=430576
rarity=U
[/card]
[card]
primitive=Vampire Nighthawk
id=430577
rarity=U
[/card]
[card]
primitive=Avatar of Fury
id=430578
rarity=R
[/card]
[card]
primitive=Battle-Rattle Shaman
id=430579
rarity=C
[/card]
[card]
primitive=Blood Ogre
id=430580
rarity=C
[/card]
[card]
primitive=Chandra, Pyromaster
id=430581
rarity=M
[/card]
[card]
primitive=Chandra's Outrage
id=430582
rarity=C
[/card]
[card]
primitive=Chandra's Phoenix
id=430583
rarity=R
[/card]
[card]
primitive=Coordinated Assault
id=430584
rarity=U
[/card]
[card]
primitive=Dualcaster Mage
id=430585
rarity=R
[/card]
[card]
primitive=Fiery Fall
id=430586
rarity=C
[/card]
[card]
primitive=Flametongue Kavu
id=430587
rarity=U
[/card]
[card]
primitive=Gorehorn Minotaurs
id=430588
rarity=C
[/card]
[card]
primitive=Grim Lavamancer
id=430589
rarity=R
[/card]
[card]
primitive=Guttersnipe
id=430590
rarity=U
[/card]
[card]
primitive=Hammerhand
id=430591
rarity=C
[/card]
[card]
primitive=Inferno Titan
id=430592
rarity=M
[/card]
[card]
primitive=Lightning Bolt
id=430593
rarity=U
[/card]
[card]
primitive=Obsidian Fireheart
id=430594
rarity=M
[/card]
[card]
primitive=Searing Spear
id=430595
rarity=C
[/card]
[card]
primitive=Skarrgan Firebird
id=430596
rarity=U
[/card]
[card]
primitive=Stormblood Berserker
id=430597
rarity=U
[/card]
[card]
primitive=Sudden Demise
id=430598
rarity=R
[/card]
[card]
primitive=Torchling
id=430599
rarity=R
[/card]
[card]
primitive=Volcanic Geyser
id=430600
rarity=U
[/card]
[card]
primitive=Cultivate
id=430601
rarity=C
[/card]
[card]
primitive=Explore
id=430602
rarity=C
[/card]
[card]
primitive=Fertilid
id=430603
rarity=C
[/card]
[card]
primitive=Forgotten Ancient
id=430604
rarity=R
[/card]
[card]
primitive=Hunter's Prowess
id=430605
rarity=R
[/card]
[card]
primitive=Khalni Heart Expedition
id=430606
rarity=C
[/card]
[card]
primitive=Nissa, Worldwaker
id=430607
rarity=M
[/card]
[card]
primitive=Oran-Rief Hydra
id=430608
rarity=R
[/card]
[card]
primitive=Press the Advantage
id=430609
rarity=U
[/card]
[card]
primitive=Rampaging Baloths
id=430610
rarity=M
[/card]
[card]
primitive=Retreat to Kazandu
id=430611
rarity=U
[/card]
[card]
primitive=Scute Mob
id=430612
rarity=R
[/card]
[card]
primitive=Sylvan Bounty
id=430613
rarity=C
[/card]
[card]
primitive=Thragtusk
id=430614
rarity=R
[/card]
[card]
primitive=Turntimber Basilisk
id=430615
rarity=U
[/card]
[card]
primitive=Vastwood Zendikon
id=430616
rarity=C
[/card]
[card]
primitive=Vines of the Recluse
id=430617
rarity=C
[/card]
[card]
primitive=Woodborn Behemoth
id=430618
rarity=U
[/card]
[card]
primitive=Baleful Strix
id=430619
rarity=U
[/card]
[card]
primitive=Blood Tyrant
id=430620
rarity=R
[/card]
[card]
primitive=Cruel Ultimatum
id=430621
rarity=R
[/card]
[card]
primitive=Dreadbore
id=430622
rarity=R
[/card]
[card]
primitive=Extract from Darkness
id=430623
rarity=U
[/card]
[card]
primitive=Nicol Bolas, Planeswalker
id=430624
rarity=M
[/card]
[card]
primitive=Slave of Bolas
id=430625
rarity=U
[/card]
[card]
primitive=Soul Ransom
id=430626
rarity=U
[/card]
[card]
primitive=Obelisk of Grixis
id=430627
rarity=C
[/card]
[card]
primitive=Sword of the Animist
id=430628
rarity=R
[/card]
[card]
primitive=Talisman of Dominance
id=430629
rarity=U
[/card]
[card]
primitive=Talisman of Indulgence
id=430630
rarity=U
[/card]
[card]
primitive=Crumbling Necropolis
id=430631
rarity=U
[/card]
[card]
primitive=Dragonskull Summit
id=430632
rarity=R
[/card]
[card]
primitive=Drowned Catacomb
id=430633
rarity=R
[/card]
[card]
primitive=Grixis Panorama
id=430634
rarity=C
[/card]
[card]
primitive=Smoldering Spires
id=430635
rarity=C
[/card]
[card]
primitive=Plains
id=430636
rarity=L
[/card]
[card]
primitive=Island
id=430637
rarity=L
[/card]
[card]
primitive=Swamp
id=430638
rarity=L
[/card]
[card]
primitive=Mountain
id=430639
rarity=L
[/card]
[card]
primitive=Forest
id=430640
rarity=L
[/card]
[card]
primitive=Plains
id=430641
rarity=L
[/card]
[card]
primitive=Island
id=430642
rarity=L
[/card]
[card]
primitive=Swamp
id=430643
rarity=L
[/card]
[card]
primitive=Mountain
id=430644
rarity=L
[/card]
[card]
primitive=Forest
id=430645
rarity=L
[/card]

View File

@@ -1,241 +0,0 @@
[meta]
author=Wagic Team
name=Explorers of Ixalan
year=2017-11-24
total=48
[/meta]
[card]
primitive=Beacon of Immortality
id=439343
rarity=R
[/card]
[card]
primitive=Day of Judgment
id=439344
rarity=R
[/card]
[card]
primitive=Path to Exile
id=439345
rarity=U
[/card]
[card]
primitive=Shielded by Faith
id=439346
rarity=R
[/card]
[card]
primitive=Veteran's Reflexes
id=439347
rarity=C
[/card]
[card]
primitive=Vow of Duty
id=439348
rarity=U
[/card]
[card]
primitive=Aether Gale
id=439349
rarity=R
[/card]
[card]
primitive=Blatant Thievery
id=439350
rarity=R
[/card]
[card]
primitive=Concentrate
id=439351
rarity=U
[/card]
[card]
primitive=Merfolk Sovereign
id=439352
rarity=R
[/card]
[card]
primitive=Threads of Disloyalty
id=439353
rarity=R
[/card]
[card]
primitive=Time Warp
id=439354
rarity=M
[/card]
[card]
primitive=Unsummon
id=439355
rarity=C
[/card]
[card]
primitive=Vow of Flight
id=439356
rarity=U
[/card]
[card]
primitive=Bloodbond Vampire
id=439357
rarity=U
[/card]
[card]
primitive=Child of Night
id=439358
rarity=C
[/card]
[card]
primitive=Coat with Venom
id=439359
rarity=C
[/card]
[card]
primitive=Doom Blade
id=439360
rarity=U
[/card]
[card]
primitive=Innocent Blood
id=439361
rarity=C
[/card]
[card]
primitive=Necropolis Regent
id=439362
rarity=M
[/card]
[card]
primitive=Urge to Feed
id=439363
rarity=U
[/card]
[card]
primitive=Vampire Interloper
id=439364
rarity=C
[/card]
[card]
primitive=Vampire Nighthawk
id=439365
rarity=U
[/card]
[card]
primitive=Vampire Noble
id=439366
rarity=C
[/card]
[card]
primitive=Aggravated Assault
id=439367
rarity=R
[/card]
[card]
primitive=Disaster Radius
id=439368
rarity=R
[/card]
[card]
primitive=Mass Mutiny
id=439369
rarity=R
[/card]
[card]
primitive=Rush of Adrenaline
id=439370
rarity=C
[/card]
[card]
primitive=Shared Animosity
id=439371
rarity=R
[/card]
[card]
primitive=Vow of Lightning
id=439372
rarity=U
[/card]
[card]
primitive=Borderland Ranger
id=439373
rarity=C
[/card]
[card]
primitive=Giant Growth
id=439374
rarity=C
[/card]
[card]
primitive=Hunter's Prowess
id=439375
rarity=R
[/card]
[card]
primitive=Prey Upon
id=439376
rarity=C
[/card]
[card]
primitive=Rancor
id=439377
rarity=U
[/card]
[card]
primitive=Soul of the Harvest
id=439378
rarity=R
[/card]
[card]
primitive=Vow of Wildness
id=439379
rarity=U
[/card]
[card]
primitive=Jungle Barrier
id=439380
rarity=U
[/card]
[card]
primitive=Lightning Helix
id=439381
rarity=U
[/card]
[card]
primitive=Mortify
id=439382
rarity=U
[/card]
[card]
primitive=Zealous Persecution
id=439383
rarity=U
[/card]
[card]
primitive=Adaptive Automaton
id=439384
rarity=R
[/card]
[card]
primitive=Prismatic Lens
id=439385
rarity=U
[/card]
[card]
primitive=Quicksilver Amulet
id=439386
rarity=R
[/card]
[card]
primitive=Crumbling Necropolis
id=439387
rarity=U
[/card]
[card]
primitive=Jungle Shrine
id=439388
rarity=U
[/card]
[card]
primitive=Tainted Field
id=439389
rarity=U
[/card]

View File

@@ -1,646 +0,0 @@
[meta]
author=Wagic Team
name=GRN Guild Kit
year=2018-11-02
total=127
[/meta]
[card]
primitive=Etrata, the Silencer
id=455904
rarity=R
[/card]
[card]
primitive=Stolen Identity
id=455905
rarity=R
[/card]
[card]
primitive=Syncopate
id=455906
rarity=U
[/card]
[card]
primitive=Telling Time
id=455907
rarity=U
[/card]
[card]
primitive=Last Gasp
id=455908
rarity=C
[/card]
[card]
primitive=Netherborn Phalanx
id=455909
rarity=U
[/card]
[card]
primitive=Ribbons of Night
id=455910
rarity=U
[/card]
[card]
primitive=Call of the Nightwing
id=455911
rarity=U
[/card]
[card]
primitive=Circu, Dimir Lobotomist
id=455912
rarity=R
[/card]
[card]
primitive=Consuming Aberration
id=455913
rarity=R
[/card]
[card]
primitive=Dimir Charm
id=455914
rarity=U
[/card]
[card]
primitive=Dimir Doppelganger
id=455915
rarity=R
[/card]
[card]
primitive=Dimir Guildmage
id=455916
rarity=U
[/card]
[card]
primitive=Dinrova Horror
id=455917
rarity=U
[/card]
[card]
primitive=Glimpse the Unthinkable
id=455918
rarity=R
[/card]
[card]
primitive=Lazav, Dimir Mastermind
id=455919
rarity=M
[/card]
[card]
primitive=Mirko Vosk, Mind Drinker
id=455920
rarity=R
[/card]
[card]
primitive=Moroii
id=455921
rarity=U
[/card]
[card]
primitive=Nightveil Specter
id=455922
rarity=R
[/card]
[card]
primitive=Szadek, Lord of Secrets
id=455923
rarity=R
[/card]
[card]
primitive=Warped Physique
id=455924
rarity=U
[/card]
[card]
primitive=Dimir Signet
id=455925
rarity=C
[/card]
[card]
primitive=Dimir Aqueduct
id=455926
rarity=C
[/card]
[card]
primitive=Island
id=455927
rarity=L
[/card]
[card]
primitive=Swamp
id=455928
rarity=L
[/card]
[card]
primitive=Niv-Mizzet, the Firemind
id=456216
rarity=R
[/card]
[card]
primitive=Thunderheads
id=456217
rarity=U
[/card]
[card]
primitive=Char
id=456218
rarity=R
[/card]
[card]
primitive=Electrickery
id=456219
rarity=C
[/card]
[card]
primitive=Goblin Rally
id=456220
rarity=U
[/card]
[card]
primitive=Guttersnipe
id=456221
rarity=U
[/card]
[card]
primitive=Mizzium Mortars
id=456222
rarity=R
[/card]
[card]
primitive=Pyromatics
id=456223
rarity=C
[/card]
[card]
primitive=Shattering Spree
id=456224
rarity=U
[/card]
[card]
primitive=Cerebral Vortex
id=456225
rarity=R
[/card]
[card]
primitive=Djinn Illuminatus
id=456226
rarity=R
[/card]
[card]
primitive=Electrolyze
id=456227
rarity=U
[/card]
[card]
primitive=Gelectrode
id=456228
rarity=U
[/card]
[card]
primitive=Hypersonic Dragon
id=456229
rarity=R
[/card]
[card]
primitive=Invoke the Firemind
id=456230
rarity=R
[/card]
[card]
primitive=Izzet Charm
id=456231
rarity=U
[/card]
[card]
primitive=Nivix Guildmage
id=456232
rarity=U
[/card]
[card]
primitive=Stitch in Time
id=456233
rarity=R
[/card]
[card]
primitive=Tibor and Lumia
id=456234
rarity=R
[/card]
[card]
primitive=Burn
id=456235
rarity=U
[/card]
[card]
primitive=Turn
id=456235
rarity=U
[/card]
[card]
primitive=Izzet Signet
id=456236
rarity=C
[/card]
[card]
primitive=Izzet Boilerworks
id=456237
rarity=C
[/card]
[card]
primitive=Island
id=456238
rarity=L
[/card]
[card]
primitive=Mountain
id=456239
rarity=L
[/card]
[card]
primitive=Izoni, Thousand-Eyed
id=456054
rarity=R
[/card]
[card]
primitive=Darkblast
id=456055
rarity=U
[/card]
[card]
primitive=Slum Reaper
id=456056
rarity=U
[/card]
[card]
primitive=Stinkweed Imp
id=456057
rarity=C
[/card]
[card]
primitive=Vigor Mortis
id=456058
rarity=U
[/card]
[card]
primitive=Deadbridge Goliath
id=456059
rarity=R
[/card]
[card]
primitive=Elves of Deep Shadow
id=456060
rarity=C
[/card]
[card]
primitive=Abrupt Decay
id=456061
rarity=R
[/card]
[card]
primitive=Deadbridge Chant
id=456062
rarity=M
[/card]
[card]
primitive=Deathrite Shaman
id=456063
rarity=R
[/card]
[card]
primitive=Drown in Filth
id=456064
rarity=C
[/card]
[card]
primitive=Gaze of Granite
id=456065
rarity=R
[/card]
[card]
primitive=Golgari Charm
id=456066
rarity=U
[/card]
[card]
primitive=Grave-Shell Scarab
id=456067
rarity=R
[/card]
[card]
primitive=Grisly Salvage
id=456068
rarity=C
[/card]
[card]
primitive=Jarad, Golgari Lich Lord
id=456069
rarity=M
[/card]
[card]
primitive=Korozda Guildmage
id=456070
rarity=U
[/card]
[card]
primitive=Lotleth Troll
id=456071
rarity=R
[/card]
[card]
primitive=Putrefy
id=456072
rarity=U
[/card]
[card]
primitive=Savra, Queen of the Golgari
id=456073
rarity=R
[/card]
[card]
primitive=Shambling Shell
id=456074
rarity=C
[/card]
[card]
primitive=Sisters of Stone Death
id=456075
rarity=R
[/card]
[card]
primitive=Treasured Find
id=456076
rarity=U
[/card]
[card]
primitive=Golgari Signet
id=456077
rarity=C
[/card]
[card]
primitive=Golgari Rot Farm
id=456078
rarity=C
[/card]
[card]
primitive=Swamp
id=456079
rarity=L
[/card]
[card]
primitive=Forest
id=456080
rarity=L
[/card]
[card]
primitive=Aurelia, the Warleader
id=455754
rarity=M
[/card]
[card]
primitive=Boros Elite
id=455755
rarity=U
[/card]
[card]
primitive=Daring Skyjek
id=455756
rarity=C
[/card]
[card]
primitive=Bomber Corps
id=455757
rarity=C
[/card]
[card]
primitive=Frenzied Goblin
id=455758
rarity=U
[/card]
[card]
primitive=Legion Loyalist
id=455759
rarity=R
[/card]
[card]
primitive=Agrus Kos, Wojek Veteran
id=455760
rarity=R
[/card]
[card]
primitive=Boros Charm
id=455761
rarity=U
[/card]
[card]
primitive=Boros Reckoner
id=455762
rarity=R
[/card]
[card]
primitive=Boros Swiftblade
id=455763
rarity=U
[/card]
[card]
primitive=Brightflame
id=455764
rarity=R
[/card]
[card]
primitive=Firemane Angel
id=455765
rarity=R
[/card]
[card]
primitive=Firemane Avenger
id=455766
rarity=R
[/card]
[card]
primitive=Lightning Helix
id=455767
rarity=U
[/card]
[card]
primitive=Martial Glory
id=455768
rarity=C
[/card]
[card]
primitive=Master Warcraft
id=455769
rarity=R
[/card]
[card]
primitive=Razia, Boros Archangel
id=455770
rarity=R
[/card]
[card]
primitive=Spark Trooper
id=455771
rarity=R
[/card]
[card]
primitive=Sunhome Guildmage
id=455772
rarity=U
[/card]
[card]
primitive=Boros Keyrune
id=455773
rarity=U
[/card]
[card]
primitive=Boros Signet
id=455774
rarity=C
[/card]
[card]
primitive=Boros Garrison
id=455775
rarity=C
[/card]
[card]
primitive=Sunhome, Fortress of the Legion
id=455776
rarity=U
[/card]
[card]
primitive=Plains
id=455777
rarity=L
[/card]
[card]
primitive=Mountain
id=455778
rarity=L
[/card]
[card]
primitive=Trostani, Selesnya's Voice
id=456360
rarity=M
[/card]
[card]
primitive=Devouring Light
id=456361
rarity=U
[/card]
[card]
primitive=Hour of Reckoning
id=456362
rarity=R
[/card]
[card]
primitive=Gather Courage
id=456363
rarity=C
[/card]
[card]
primitive=Scatter the Seeds
id=456364
rarity=C
[/card]
[card]
primitive=Advent of the Wurm
id=456365
rarity=R
[/card]
[card]
primitive=Armada Wurm
id=456366
rarity=M
[/card]
[card]
primitive=Call of the Conclave
id=456367
rarity=U
[/card]
[card]
primitive=Centaur Healer
id=456368
rarity=C
[/card]
[card]
primitive=Dryad Militant
id=456369
rarity=U
[/card]
[card]
primitive=Glare of Subdual
id=456370
rarity=R
[/card]
[card]
primitive=Growing Ranks
id=456371
rarity=R
[/card]
[card]
primitive=Loxodon Hierarch
id=456372
rarity=R
[/card]
[card]
primitive=Pollenbright Wings
id=456373
rarity=U
[/card]
[card]
primitive=Privileged Position
id=456374
rarity=R
[/card]
[card]
primitive=Selesnya Charm
id=456375
rarity=U
[/card]
[card]
primitive=Selesnya Evangel
id=456376
rarity=C
[/card]
[card]
primitive=Selesnya Guildmage
id=456377
rarity=U
[/card]
[card]
primitive=Sundering Growth
id=456378
rarity=C
[/card]
[card]
primitive=Tolsimir Wolfblood
id=456379
rarity=R
[/card]
[card]
primitive=Watchwolf
id=456380
rarity=U
[/card]
[card]
primitive=Selesnya Signet
id=456381
rarity=C
[/card]
[card]
primitive=Grove of the Guardian
id=456382
rarity=R
[/card]
[card]
primitive=Selesnya Sanctuary
id=456383
rarity=C
[/card]
[card]
primitive=Plains
id=456384
rarity=L
[/card]
[card]
primitive=Forest
id=456385
rarity=L
[/card]

View File

@@ -1,671 +0,0 @@
[meta]
author=Wagic Team
name=RNA Guild Kit
year=2019-02-15
total=133
[/meta]
[card]
primitive=Isperia, Supreme Judge
id=460130
rarity=M
[/card]
[card]
primitive=Azorius Herald
id=460131
rarity=U
[/card]
[card]
primitive=Azorius Justiciar
id=460132
rarity=U
[/card]
[card]
primitive=Stoic Ephemera
id=460133
rarity=U
[/card]
[card]
primitive=Court Hussar
id=460134
rarity=U
[/card]
[card]
primitive=Hover Barrier
id=460135
rarity=U
[/card]
[card]
primitive=Archon of the Triumvirate
id=460136
rarity=R
[/card]
[card]
primitive=Azorius Charm
id=460137
rarity=U
[/card]
[card]
primitive=Azorius Guildmage
id=460138
rarity=U
[/card]
[card]
primitive=Detention Sphere
id=460139
rarity=R
[/card]
[card]
primitive=Dovescape
id=460140
rarity=R
[/card]
[card]
primitive=Dramatic Rescue
id=460141
rarity=C
[/card]
[card]
primitive=Isperia the Inscrutable
id=460142
rarity=R
[/card]
[card]
primitive=Judge's Familiar
id=460143
rarity=U
[/card]
[card]
primitive=Lavinia of the Tenth
id=460144
rarity=R
[/card]
[card]
primitive=Lyev Skyknight
id=460145
rarity=U
[/card]
[card]
primitive=Pride of the Clouds
id=460146
rarity=R
[/card]
[card]
primitive=Render Silent
id=460147
rarity=R
[/card]
[card]
primitive=Sky Hussar
id=460148
rarity=U
[/card]
[card]
primitive=Skymark Roc
id=460149
rarity=U
[/card]
[card]
primitive=Sphinx's Revelation
id=460150
rarity=M
[/card]
[card]
primitive=Windreaver
id=460151
rarity=R
[/card]
[card]
primitive=Azorius Keyrune
id=460152
rarity=U
[/card]
[card]
primitive=Azorius Signet
id=460153
rarity=U
[/card]
[card]
primitive=Azorius Chancery
id=460154
rarity=U
[/card]
[card]
primitive=Plains
id=460155
rarity=L
[/card]
[card]
primitive=Island
id=460156
rarity=L
[/card]
[card]
primitive=Teysa, Orzhov Scion
id=460454
rarity=R
[/card]
[card]
primitive=Belfry Spirit
id=460455
rarity=U
[/card]
[card]
primitive=Martyred Rusalka
id=460456
rarity=U
[/card]
[card]
primitive=Keening Banshee
id=460457
rarity=U
[/card]
[card]
primitive=Plagued Rusalka
id=460458
rarity=U
[/card]
[card]
primitive=Pontiff of Blight
id=460459
rarity=R
[/card]
[card]
primitive=Skeletal Vampire
id=460460
rarity=R
[/card]
[card]
primitive=Stab Wound
id=460461
rarity=U
[/card]
[card]
primitive=Ultimate Price
id=460462
rarity=U
[/card]
[card]
primitive=Angel of Despair
id=460463
rarity=R
[/card]
[card]
primitive=Deathpact Angel
id=460464
rarity=M
[/card]
[card]
primitive=Debtors' Knell
id=460465
rarity=R
[/card]
[card]
primitive=Ghost Council of Orzhova
id=460466
rarity=R
[/card]
[card]
primitive=One Thousand Lashes
id=460467
rarity=U
[/card]
[card]
primitive=Orzhov Charm
id=460468
rarity=U
[/card]
[card]
primitive=Orzhov Pontiff
id=460469
rarity=R
[/card]
[card]
primitive=Pillory of the Sleepless
id=460470
rarity=U
[/card]
[card]
primitive=Sin Collector
id=460471
rarity=U
[/card]
[card]
primitive=Treasury Thrull
id=460472
rarity=R
[/card]
[card]
primitive=Vizkopa Guildmage
id=460473
rarity=U
[/card]
[card]
primitive=Orzhov Signet
id=460474
rarity=C
[/card]
[card]
primitive=Orzhov Basilica
id=460475
rarity=C
[/card]
[card]
primitive=Plains
id=460476
rarity=L
[/card]
[card]
primitive=Swamp
id=460477
rarity=L
[/card]
[card]
primitive=Rakdos, Lord of Riots
id=460598
rarity=M
[/card]
[card]
primitive=Crypt Champion
id=460599
rarity=U
[/card]
[card]
primitive=Thrill-Kill Assassin
id=460600
rarity=U
[/card]
[card]
primitive=Cackling Flames
id=460601
rarity=C
[/card]
[card]
primitive=Demonfire
id=460602
rarity=R
[/card]
[card]
primitive=Rakdos Pit Dragon
id=460603
rarity=R
[/card]
[card]
primitive=Splatter Thug
id=460604
rarity=C
[/card]
[card]
primitive=Utvara Hellkite
id=460605
rarity=M
[/card]
[card]
primitive=Auger Spree
id=460606
rarity=C
[/card]
[card]
primitive=Avatar of Discord
id=460607
rarity=R
[/card]
[card]
primitive=Carnival Hellsteed
id=460608
rarity=R
[/card]
[card]
primitive=Dreadbore
id=460609
rarity=R
[/card]
[card]
primitive=Jagged Poppet
id=460610
rarity=U
[/card]
[card]
primitive=Lyzolda, the Blood Witch
id=460611
rarity=R
[/card]
[card]
primitive=Master of Cruelties
id=460612
rarity=M
[/card]
[card]
primitive=Rakdos Cackler
id=460613
rarity=U
[/card]
[card]
primitive=Rakdos Charm
id=460614
rarity=U
[/card]
[card]
primitive=Rakdos Guildmage
id=460615
rarity=U
[/card]
[card]
primitive=Rakdos Shred-Freak
id=460616
rarity=C
[/card]
[card]
primitive=Rakdos the Defiler
id=460617
rarity=R
[/card]
[card]
primitive=Rakdos's Return
id=460618
rarity=M
[/card]
[card]
primitive=Riot Spikes
id=460619
rarity=C
[/card]
[card]
primitive=Wrecking Ball
id=460620
rarity=C
[/card]
[card]
primitive=Rakdos Keyrune
id=460621
rarity=U
[/card]
[card]
primitive=Rakdos Signet
id=460622
rarity=U
[/card]
[card]
primitive=Rakdos Carnarium
id=460623
rarity=C
[/card]
[card]
primitive=Swamp
id=460624
rarity=L
[/card]
[card]
primitive=Mountain
id=460625
rarity=L
[/card]
[card]
primitive=Ruric Thar, the Unbowed
id=460292
rarity=R
[/card]
[card]
primitive=Skarrgan Firebird
id=460293
rarity=R
[/card]
[card]
primitive=Birds of Paradise
id=460294
rarity=R
[/card]
[card]
primitive=Protean Hulk
id=460295
rarity=R
[/card]
[card]
primitive=Skarrgan Pit-Skulk
id=460296
rarity=C
[/card]
[card]
primitive=Wasteland Viper
id=460297
rarity=U
[/card]
[card]
primitive=Wurmweaver Coil
id=460298
rarity=R
[/card]
[card]
primitive=Borborygmos
id=460299
rarity=R
[/card]
[card]
primitive=Burning-Tree Emissary
id=460300
rarity=U
[/card]
[card]
primitive=Burning-Tree Shaman
id=460301
rarity=R
[/card]
[card]
primitive=Ghor-Clan Rampager
id=460302
rarity=U
[/card]
[card]
primitive=Giant Solifuge
id=460303
rarity=R
[/card]
[card]
primitive=Gruul Charm
id=460304
rarity=U
[/card]
[card]
primitive=Pit Fight
id=460305
rarity=C
[/card]
[card]
primitive=Rubblebelt Raiders
id=460306
rarity=R
[/card]
[card]
primitive=Rubblehulk
id=460307
rarity=R
[/card]
[card]
primitive=Rumbling Slum
id=460308
rarity=R
[/card]
[card]
primitive=Savage Twister
id=460309
rarity=U
[/card]
[card]
primitive=Savageborn Hydra
id=460310
rarity=M
[/card]
[card]
primitive=Scab-Clan Mauler
id=460311
rarity=C
[/card]
[card]
primitive=Ulasht, the Hate Seed
id=460312
rarity=R
[/card]
[card]
primitive=Zhur-Taa Druid
id=460313
rarity=C
[/card]
[card]
primitive=Zhur-Taa Swine
id=460314
rarity=C
[/card]
[card]
primitive=Gruul Signet
id=460315
rarity=U
[/card]
[card]
primitive=Gruul Turf
id=460316
rarity=C
[/card]
[card]
primitive=Mountain
id=460317
rarity=L
[/card]
[card]
primitive=Forest
id=460318
rarity=L
[/card]
[card]
primitive=Zegana, Utopian Speaker
id=460766
rarity=R
[/card]
[card]
primitive=Cloudfin Raptor
id=460767
rarity=C
[/card]
[card]
primitive=Rapid Hybridization
id=460768
rarity=U
[/card]
[card]
primitive=Cytoplast Root-Kin
id=460769
rarity=R
[/card]
[card]
primitive=Experiment One
id=460770
rarity=U
[/card]
[card]
primitive=Gyre Sage
id=460771
rarity=R
[/card]
[card]
primitive=Miming Slime
id=460772
rarity=C
[/card]
[card]
primitive=Vinelasher Kudzu
id=460773
rarity=R
[/card]
[card]
primitive=Coiling Oracle
id=460774
rarity=C
[/card]
[card]
primitive=Elusive Krasis
id=460775
rarity=U
[/card]
[card]
primitive=Experiment Kraj
id=460776
rarity=R
[/card]
[card]
primitive=Fathom Mage
id=460777
rarity=R
[/card]
[card]
primitive=Momir Vig, Simic Visionary
id=460778
rarity=R
[/card]
[card]
primitive=Nimbus Swimmer
id=460779
rarity=U
[/card]
[card]
primitive=Omnibian
id=460780
rarity=R
[/card]
[card]
primitive=Plaxcaster Frogling
id=460781
rarity=U
[/card]
[card]
primitive=Progenitor Mimic
id=460782
rarity=M
[/card]
[card]
primitive=Simic Sky Swallower
id=460783
rarity=R
[/card]
[card]
primitive=Trygon Predator
id=460784
rarity=U
[/card]
[card]
primitive=Urban Evolution
id=460785
rarity=U
[/card]
[card]
primitive=Voidslime
id=460786
rarity=R
[/card]
[card]
primitive=Vorel of the Hull Clade
id=460787
rarity=R
[/card]
[card]
primitive=Zameck Guildmage
id=460788
rarity=U
[/card]
[card]
primitive=Simic Signet
id=460789
rarity=U
[/card]
[card]
primitive=Simic Growth Chamber
id=460790
rarity=U
[/card]
[card]
primitive=Island
id=460791
rarity=L
[/card]
[card]
primitive=Forest
id=460792
rarity=L
[/card]

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,276 +0,0 @@
[meta]
author=Wagic Team
name=Amonkhet Invocations
year=2017-04-28
total=54
[/meta]
[card]
primitive=Austere Command
id=429860
rarity=M
[/card]
[card]
primitive=Aven Mindcensor
id=429861
rarity=M
[/card]
[card]
primitive=Containment Priest
id=429862
rarity=M
[/card]
[card]
primitive=Loyal Retainers
id=429863
rarity=M
[/card]
[card]
primitive=Oketra the True
id=429864
rarity=M
[/card]
[card]
primitive=Worship
id=429865
rarity=M
[/card]
[card]
primitive=Wrath of God
id=429866
rarity=M
[/card]
[card]
primitive=Consecrated Sphinx
id=429867
rarity=M
[/card]
[card]
primitive=Counterbalance
id=429868
rarity=M
[/card]
[card]
primitive=Counterspell
id=429869
rarity=M
[/card]
[card]
primitive=Cryptic Command
id=429870
rarity=M
[/card]
[card]
primitive=Daze
id=429871
rarity=M
[/card]
[card]
primitive=Divert
id=429872
rarity=M
[/card]
[card]
primitive=Force of Will
id=429873
rarity=M
[/card]
[card]
primitive=Kefnet the Mindful
id=429874
rarity=M
[/card]
[card]
primitive=Pact of Negation
id=429875
rarity=M
[/card]
[card]
primitive=Spell Pierce
id=429876
rarity=M
[/card]
[card]
primitive=Stifle
id=429877
rarity=M
[/card]
[card]
primitive=Attrition
id=429878
rarity=M
[/card]
[card]
primitive=Bontu the Glorified
id=429879
rarity=M
[/card]
[card]
primitive=Dark Ritual
id=429880
rarity=M
[/card]
[card]
primitive=Diabolic Intent
id=429881
rarity=M
[/card]
[card]
primitive=Entomb
id=429882
rarity=M
[/card]
[card]
primitive=Mind Twist
id=429883
rarity=M
[/card]
[card]
primitive=Aggravated Assault
id=429884
rarity=M
[/card]
[card]
primitive=Chain Lightning
id=429885
rarity=M
[/card]
[card]
primitive=Hazoret the Fervent
id=429886
rarity=M
[/card]
[card]
primitive=Rhonas the Indomitable
id=429887
rarity=M
[/card]
[card]
primitive=Maelstrom Pulse
id=429888
rarity=M
[/card]
[card]
primitive=Vindicate
id=429889
rarity=M
[/card]
[card]
primitive=Armageddon
id=430666
rarity=M
[/card]
[card]
primitive=Capsize
id=430667
rarity=M
[/card]
[card]
primitive=Forbid
id=430668
rarity=M
[/card]
[card]
primitive=Omniscience
id=430669
rarity=M
[/card]
[card]
primitive=Opposition
id=430670
rarity=M
[/card]
[card]
primitive=Sunder
id=430671
rarity=M
[/card]
[card]
primitive=Threads of Disloyalty
id=430672
rarity=M
[/card]
[card]
primitive=Avatar of Woe
id=430673
rarity=M
[/card]
[card]
primitive=Damnation
id=430674
rarity=M
[/card]
[card]
primitive=Desolation Angel
id=430675
rarity=M
[/card]
[card]
primitive=Diabolic Edict
id=430676
rarity=M
[/card]
[card]
primitive=Doomsday
id=430677
rarity=M
[/card]
[card]
primitive=No Mercy
id=430678
rarity=M
[/card]
[card]
primitive=Slaughter Pact
id=430679
rarity=M
[/card]
[card]
primitive=Thoughtseize
id=430680
rarity=M
[/card]
[card]
primitive=Blood Moon
id=430681
rarity=M
[/card]
[card]
primitive=Boil
id=430682
rarity=M
[/card]
[card]
primitive=Shatterstorm
id=430683
rarity=M
[/card]
[card]
primitive=Through the Breach
id=430684
rarity=M
[/card]
[card]
primitive=Choke
id=430685
rarity=M
[/card]
[card]
primitive=The Locust God
id=430686
rarity=M
[/card]
[card]
primitive=Lord of Extinction
id=430687
rarity=M
[/card]
[card]
primitive=The Scarab God
id=430688
rarity=M
[/card]
[card]
primitive=The Scorpion God
id=430689
rarity=M
[/card]

File diff suppressed because it is too large Load Diff

View File

@@ -1,206 +0,0 @@
[meta]
author=Wagic Team
name=Ultimate Box Topper
year=2018-12-07
total=40
[/meta]
[card]
primitive=Emrakul, the Aeons Torn
id=457105
rarity=M
[/card]
[card]
primitive=Karn Liberated
id=457106
rarity=M
[/card]
[card]
primitive=Kozilek, Butcher of Truth
id=457107
rarity=M
[/card]
[card]
primitive=Ulamog, the Infinite Gyre
id=457108
rarity=M
[/card]
[card]
primitive=Snapcaster Mage
id=457109
rarity=M
[/card]
[card]
primitive=Temporal Manipulation
id=457110
rarity=M
[/card]
[card]
primitive=Bitterblossom
id=457111
rarity=M
[/card]
[card]
primitive=Demonic Tutor
id=457112
rarity=M
[/card]
[card]
primitive=Goryo's Vengeance
id=457113
rarity=M
[/card]
[card]
primitive=Liliana of the Veil
id=457114
rarity=M
[/card]
[card]
primitive=Mikaeus, the Unhallowed
id=457115
rarity=M
[/card]
[card]
primitive=Reanimate
id=457116
rarity=M
[/card]
[card]
primitive=Tasigur, the Golden Fang
id=457117
rarity=M
[/card]
[card]
primitive=Balefire Dragon
id=457118
rarity=M
[/card]
[card]
primitive=Through the Breach
id=457119
rarity=M
[/card]
[card]
primitive=Eternal Witness
id=457120
rarity=M
[/card]
[card]
primitive=Life from the Loam
id=457121
rarity=M
[/card]
[card]
primitive=Noble Hierarch
id=457122
rarity=M
[/card]
[card]
primitive=Tarmogoyf
id=457123
rarity=M
[/card]
[card]
primitive=Vengevine
id=457124
rarity=M
[/card]
[card]
primitive=Gaddock Teeg
id=457125
rarity=M
[/card]
[card]
primitive=Leovold, Emissary of Trest
id=457126
rarity=M
[/card]
[card]
primitive=Lord of Extinction
id=457127
rarity=M
[/card]
[card]
primitive=Maelstrom Pulse
id=457128
rarity=M
[/card]
[card]
primitive=Sigarda, Host of Herons
id=457129
rarity=M
[/card]
[card]
primitive=Fulminator Mage
id=457130
rarity=M
[/card]
[card]
primitive=Kitchen Finks
id=457131
rarity=M
[/card]
[card]
primitive=Engineered Explosives
id=457132
rarity=M
[/card]
[card]
primitive=Mana Vault
id=457133
rarity=M
[/card]
[card]
primitive=Platinum Emperion
id=457134
rarity=M
[/card]
[card]
primitive=Ancient Tomb
id=457135
rarity=M
[/card]
[card]
primitive=Cavern of Souls
id=457136
rarity=M
[/card]
[card]
primitive=Celestial Colonnade
id=457137
rarity=M
[/card]
[card]
primitive=Creeping Tar Pit
id=457138
rarity=M
[/card]
[card]
primitive=Dark Depths
id=457139
rarity=M
[/card]
[card]
primitive=Karakas
id=457140
rarity=M
[/card]
[card]
primitive=Lavaclaw Reaches
id=457141
rarity=M
[/card]
[card]
primitive=Raging Ravine
id=457142
rarity=M
[/card]
[card]
primitive=Stirring Wildwood
id=457143
rarity=M
[/card]
[card]
primitive=Urborg, Tomb of Yawgmoth
id=457144
rarity=M
[/card]

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,46 +0,0 @@
[meta]
author=Wagic Team
name=Signature Spellbook: Jace
year=2018-06-15
total=8
[/meta]
[card]
primitive=Jace Beleren
id=447129
rarity=M
[/card]
[card]
primitive=Blue Elemental Blast
id=447130
rarity=R
[/card]
[card]
primitive=Brainstorm
id=447131
rarity=R
[/card]
[card]
primitive=Counterspell
id=447132
rarity=R
[/card]
[card]
primitive=Gifts Ungiven
id=447133
rarity=R
[/card]
[card]
primitive=Mystical Tutor
id=447134
rarity=R
[/card]
[card]
primitive=Negate
id=447135
rarity=R
[/card]
[card]
primitive=Threads of Disloyalty
id=447136
rarity=R
[/card]

View File

@@ -0,0 +1,412 @@
[meta]
author=Wagic Team
name=Duel Decks: Speed vs. Cunning
block=Duel
year=2014
total=81
[/meta]
[card]
primitive=Act of Treason
id=386299
rarity=C
[/card]
[card]
primitive=Aquamorph Entity
id=386300
rarity=C
[/card]
[card]
primitive=Arc Trail
id=386301
rarity=U
[/card]
[card]
primitive=Arcanis the Omnipotent
id=386302
rarity=M
[/card]
[card]
primitive=Arrow Volley Trap
id=386303
rarity=U
[/card]
[card]
primitive=Banefire
id=386304
rarity=R
[/card]
[card]
primitive=Beetleback Chief
id=386305
rarity=U
[/card]
[card]
primitive=Bone Splinters
id=386306
rarity=C
[/card]
[card]
primitive=Coral Trickster
id=386307
rarity=C
[/card]
[card]
primitive=Dauntless Onslaught
id=386308
rarity=U
[/card]
[card]
primitive=Dregscape Zombie
id=386309
rarity=C
[/card]
[card]
primitive=Echo Tracer
id=386310
rarity=C
[/card]
[card]
primitive=Evolving Wilds
id=386311
rarity=C
[/card]
[card]
primitive=Faerie Impostor
id=386312
rarity=U
[/card]
[card]
primitive=Faerie Invaders
id=386313
rarity=C
[/card]
[card]
primitive=Fathom Seer
id=386314
rarity=C
[/card]
[card]
primitive=Fiery Fall
id=386315
rarity=C
[/card]
[card]
primitive=Flame-Kin Zealot
id=386316
rarity=U
[/card]
[card]
primitive=Fleeting Distraction
id=386317
rarity=C
[/card]
[card]
primitive=Fleshbag Marauder
id=386318
rarity=U
[/card]
[card]
primitive=Frenzied Goblin
id=386319
rarity=U
[/card]
[card]
primitive=Fury of the Horde
id=386320
rarity=R
[/card]
[card]
primitive=Ghitu Encampment
id=386321
rarity=U
[/card]
[card]
primitive=Goblin Bombardment
id=386323
rarity=U
[/card]
[card]
primitive=Goblin Deathraiders
id=386324
rarity=C
[/card]
[card]
primitive=Goblin Warchief
id=386325
rarity=U
[/card]
[card]
primitive=Hell's Thunder
id=386326
rarity=R
[/card]
[card]
primitive=Hellraiser Goblin
id=386327
rarity=U
[/card]
[card]
primitive=Hold the Line
id=386328
rarity=R
[/card]
[card]
primitive=Hussar Patrol
id=386329
rarity=C
[/card]
[card]
primitive=Impulse
id=386330
rarity=C
[/card]
[card]
primitive=Infantry Veteran
id=386331
rarity=C
[/card]
[card]
primitive=Inferno Trap
id=386332
rarity=U
[/card]
[card]
primitive=Island
id=386333
rarity=L
[/card]
[card]
primitive=Island
id=386334
rarity=L
[/card]
[card]
primitive=Island
id=386335
rarity=L
[/card]
[card]
primitive=Jeskai Elder
id=386336
rarity=U
[/card]
[card]
primitive=Kathari Bomber
id=386337
rarity=C
[/card]
[card]
primitive=Kor Hookmaster
id=386338
rarity=C
[/card]
[card]
primitive=Krenko's Command
id=386340
rarity=C
[/card]
[card]
primitive=Krenko, Mob Boss
id=386339
rarity=R
[/card]
[card]
primitive=Leonin Snarecaster
id=386341
rarity=C
[/card]
[card]
primitive=Lightning Angel
id=386342
rarity=R
[/card]
[card]
primitive=Lightning Helix
id=386343
rarity=U
[/card]
[card]
primitive=Lone Missionary
id=386344
rarity=C
[/card]
[card]
primitive=Mana Leak
id=386345
rarity=C
[/card]
[card]
primitive=Mardu Heart-Piercer
id=386346
rarity=U
[/card]
[card]
primitive=Master Decoy
id=386347
rarity=C
[/card]
[card]
primitive=Mountain
id=386348
rarity=L
[/card]
[card]
primitive=Mountain
id=386349
rarity=L
[/card]
[card]
primitive=Mountain
id=386350
rarity=L
[/card]
[card]
primitive=Mountain
id=386351
rarity=L
[/card]
[card]
primitive=Mystic Monastery
id=386352
rarity=U
[/card]
[card]
primitive=Nomad Outpost
id=386353
rarity=U
[/card]
[card]
primitive=Ogre Battledriver
id=386354
rarity=R
[/card]
[card]
primitive=Oni of Wild Places
id=386355
rarity=U
[/card]
[card]
primitive=Orcish Cannonade
id=386356
rarity=C
[/card]
[card]
primitive=Plains
id=386357
rarity=L
[/card]
[card]
primitive=Plains
id=386358
rarity=L
[/card]
[card]
primitive=Plains
id=386359
rarity=L
[/card]
[card]
primitive=Plains
id=386360
rarity=L
[/card]
[card]
primitive=Reckless Abandon
id=386361
rarity=C
[/card]
[card]
primitive=Repeal
id=386362
rarity=C
[/card]
[card]
primitive=Scourge Devil
id=386363
rarity=U
[/card]
[card]
primitive=Shambling Remains
id=386364
rarity=U
[/card]
[card]
primitive=Shock
id=386365
rarity=C
[/card]
[card]
primitive=Sparkmage Apprentice
id=386366
rarity=C
[/card]
[card]
primitive=Sphinx of Uthuun
id=386367
rarity=R
[/card]
[card]
primitive=Stave Off
id=386368
rarity=C
[/card]
[card]
primitive=Steam Augury
id=386369
rarity=R
[/card]
[card]
primitive=Stonecloaker
id=386370
rarity=U
[/card]
[card]
primitive=Swamp
id=386371
rarity=L
[/card]
[card]
primitive=Swamp
id=386372
rarity=L
[/card]
[card]
primitive=Swamp
id=386373
rarity=L
[/card]
[card]
primitive=Swift Justice
id=386374
rarity=C
[/card]
[card]
primitive=Terramorphic Expanse
id=386375
rarity=C
[/card]
[card]
primitive=Thousand Winds
id=386376
rarity=R
[/card]
[card]
primitive=Traumatic Visions
id=386377
rarity=C
[/card]
[card]
primitive=Whiplash Trap
id=386378
rarity=C
[/card]
[card]
primitive=Willbender
id=386379
rarity=U
[/card]
[card]
primitive=Zurgo Helmsmasher
id=386380
rarity=M
[/card]

File diff suppressed because it is too large Load Diff

View File

@@ -1,31 +0,0 @@
[meta]
author=Wagic Team
name=Unstable
year=2017-12-08
total=5
[/meta]
[card]
primitive=Plains
id=439601
rarity=M
[/card]
[card]
primitive=Island
id=439602
rarity=M
[/card]
[card]
primitive=Swamp
id=439603
rarity=M
[/card]
[card]
primitive=Mountain
id=439604
rarity=M
[/card]
[card]
primitive=Forest
id=439605
rarity=M
[/card]

View File

@@ -1,151 +0,0 @@
[meta]
author=Wagic Team
name=From the Vault: Transform
year=2017-11-24
total=16
[/meta]
[card]
primitive=Avacyn, the Purifier
id=439315
rarity=T
[/card]
[card]
primitive=Archangel Avacyn
id=439314
rarity=M
[/card]
[card]
primitive=Temple of Aclazotz
id=439317
rarity=T
[/card]
[card]
primitive=Arguel's Blood Fast
id=439316
rarity=M
[/card]
[card]
primitive=Arlinn, Embraced by the Moon
id=439319
rarity=T
[/card]
[card]
primitive=Arlinn Kord
id=439318
rarity=M
[/card]
[card]
primitive=Lord of Lineage
id=439321
rarity=T
[/card]
[card]
primitive=Bloodline Keeper
id=439320
rarity=M
[/card]
[card]
primitive=Bruna, the Fading Light
id=439322
rarity=M
[/card]
[card]
primitive=Brisela, Voice of Nightmares
id=439323
rarity=T
[/card]
[card]
primitive=Chandra, Roaring Flame
id=439325
rarity=T
[/card]
[card]
primitive=Chandra, Fire of Kaladesh
id=439324
rarity=M
[/card]
[card]
primitive=Insectile Aberration
id=439327
rarity=T
[/card]
[card]
primitive=Delver of Secrets
id=439326
rarity=M
[/card]
[card]
primitive=Withengar Unbound
id=439329
rarity=T
[/card]
[card]
primitive=Elbrus, the Binding Blade
id=439328
rarity=M
[/card]
[card]
primitive=Garruk, the Veil-Cursed
id=439331
rarity=T
[/card]
[card]
primitive=Garruk Relentless
id=439330
rarity=M
[/card]
[card]
primitive=Gisela, the Broken Blade
id=439332
rarity=M
[/card]
[card]
primitive=Ravager of the Fells
id=439334
rarity=T
[/card]
[card]
primitive=Huntmaster of the Fells
id=439333
rarity=M
[/card]
[card]
primitive=Jace, Telepath Unbound
id=439336
rarity=T
[/card]
[card]
primitive=Jace, Vryn's Prodigy
id=439335
rarity=M
[/card]
[card]
primitive=Gideon, Battle-Forged
id=439338
rarity=T
[/card]
[card]
primitive=Kytheon, Hero of Akros
id=439337
rarity=M
[/card]
[card]
primitive=Liliana, Defiant Necromancer
id=439340
rarity=T
[/card]
[card]
primitive=Liliana, Heretical Healer
id=439339
rarity=M
[/card]
[card]
primitive=Nissa, Sage Animist
id=439342
rarity=T
[/card]
[card]
primitive=Nissa, Vastwood Seer
id=439341
rarity=M
[/card]

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More