Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9cc2c6cc4d |
+14
-57
@@ -1,60 +1,17 @@
|
|||||||
language: cpp
|
language: cpp
|
||||||
branches:
|
|
||||||
except:
|
|
||||||
- latest-master
|
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
- export BUILD_PSP=YES
|
- export PSPDEV="$TRAVIS_BUILD_DIR/opt/pspsdk"
|
||||||
- export BUILD_ANDROID=YES
|
- export PSPSDK="$PSPDEV/psp/sdk"
|
||||||
- export BUILD_Qt=YES
|
- export PATH="$PATH:$PSPDEV/bin:$PSPSDK/bin"
|
||||||
- export BUILD_MAC=YES
|
- export ANDROID="android-sdk-linux/tools/android"
|
||||||
- sudo apt-get update -qq
|
|
||||||
# Building for PSP here
|
|
||||||
- if [ "$BUILD_PSP" == "YES" ]; then
|
|
||||||
export PSPDEV="$TRAVIS_BUILD_DIR/opt/pspsdk" &&
|
|
||||||
export PSPSDK="$PSPDEV/psp/sdk" &&
|
|
||||||
export PATH="$PATH:$PSPDEV/bin:$PSPSDK/bin" &&
|
|
||||||
wget -O sdk.lzma http://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 apt-get install -qq --force-yes libgd2-xpm ia32-libs ia32-libs-multiarch jq; fi &&
|
|
||||||
wget http://dl.google.com/android/ndk/android-ndk-r9-linux-x86_64.tar.bz2 -nv &&
|
|
||||||
wget http://dl.google.com/android/android-sdk_r24.3.3-linux.tgz -nv;
|
|
||||||
fi
|
|
||||||
# Building for Qt here
|
|
||||||
- if [ "$BUILD_Qt" == "YES" ]; then
|
|
||||||
sudo add-apt-repository --yes ppa:ubuntu-sdk-team/ppa &&
|
|
||||||
sudo apt-get update -qq &&
|
|
||||||
sudo apt-get install -qq qt5-qmake qtbase5-dev qtdeclarative5-dev qttools5-dev qtmultimedia5-dev pulseaudio libpulse-dev &&
|
|
||||||
export QMAKE="qmake -qt=qt5";
|
|
||||||
fi
|
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- if [ "$BUILD_PSP" == "YES" ]; then
|
- sudo apt-get update -qq
|
||||||
tar -x --xz -f sdk.lzma;
|
- if [ `uname -m` = x86_64 ]; then sudo apt-get install -qq --force-yes libgd2-xpm ia32-libs ia32-libs-multiarch; fi
|
||||||
fi
|
- wget -O sdk.lzma http://sourceforge.net/projects/minpspw/files/SDK%20%2B%20devpak/pspsdk%200.11.2/minpspw_0.11.2-amd64.tar.lzma/download
|
||||||
- if [ "$BUILD_ANDROID" == "YES" ]; then
|
- tar -x --xz -f sdk.lzma
|
||||||
tar --absolute-names -jxf android-ndk-r9-linux-x86_64.tar.bz2 &&
|
- wget http://dl.google.com/android/ndk/android-ndk-r9-linux-x86_64.tar.bz2 -nv
|
||||||
tar -zxf android-sdk_r24.3.3-linux.tgz &&
|
- wget http://dl.google.com/android/android-sdk_r22-linux.tgz -nv
|
||||||
$ANDROID list sdk --extended -a &&
|
- tar --absolute-names -jxf android-ndk-r9-linux-x86_64.tar.bz2
|
||||||
echo yes | $ANDROID update sdk -a -t tools,platform-tools,build-tools-22.0.1,android-10 --no-ui --force --no-https;
|
- tar -zxf android-sdk_r22-linux.tgz
|
||||||
fi
|
- echo yes | $ANDROID update sdk --filter 1,2,3,8 --no-ui --force > log.txt
|
||||||
- sudo pip install pyjavaproperties
|
script: "./travis-script.sh"
|
||||||
- sudo pip install github3.py
|
|
||||||
- sudo pip install cpp-coveralls
|
|
||||||
|
|
||||||
env:
|
|
||||||
global:
|
|
||||||
- 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="
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|||||||
@@ -1,80 +0,0 @@
|
|||||||
# Changelog
|
|
||||||
|
|
||||||
## [latest-master] (https://github.com/WagicProject/wagic/tree/latest-master)
|
|
||||||
#### 08/12/14
|
|
||||||
- *Merged pull-request:* Fix for guild_keywords Devotion, added some "Chroma" cards [\#606](https://github.com/WagicProject/wagic/pull/606) ([kevlahnota](https://github.com/kevlahnota))
|
|
||||||
|
|
||||||
- *Merged pull-request:* added guild keywords, added specific life cost [\#605](https://github.com/WagicProject/wagic/pull/605) ([kevlahnota](https://github.com/kevlahnota))
|
|
||||||
|
|
||||||
- *Merged pull-request:* Buyback issue and a fix [\#604](https://github.com/WagicProject/wagic/pull/604) ([apollovy](https://github.com/apollovy))
|
|
||||||
|
|
||||||
- *Merged pull-request:* Feature/ios update xcode5.1 [\#602](https://github.com/WagicProject/wagic/pull/602) ([mjnguyen](https://github.com/mjnguyen))
|
|
||||||
|
|
||||||
- *Merged pull-request:* Remove dead code and fix circular initialization [\#601](https://github.com/WagicProject/wagic/pull/601) ([ZobyTwo](https://github.com/ZobyTwo))
|
|
||||||
|
|
||||||
- *Merged pull-request:* update android build tools version [\#600](https://github.com/WagicProject/wagic/pull/600) ([Rolzad73](https://github.com/Rolzad73))
|
|
||||||
|
|
||||||
- *Merged pull-request:* Attempt to make android tools fetching for TravisCI explicit and futureproof [\#599](https://github.com/WagicProject/wagic/pull/599) ([Rolzad73](https://github.com/Rolzad73))
|
|
||||||
|
|
||||||
- *Merged pull-request:* Damager keyword [\#598](https://github.com/WagicProject/wagic/pull/598) ([bjornsnoen](https://github.com/bjornsnoen))
|
|
||||||
|
|
||||||
- *Merged pull-request:* Fix a rarity mistake and a grammatical error [\#596](https://github.com/WagicProject/wagic/pull/596) ([bjornsnoen](https://github.com/bjornsnoen))
|
|
||||||
|
|
||||||
- *Merged pull-request:* Fix bug where the phase wheel got out of sync [\#588](https://github.com/WagicProject/wagic/pull/588) ([ZobyTwo](https://github.com/ZobyTwo))
|
|
||||||
|
|
||||||
- *Merged pull-request:* More easing [\#586](https://github.com/WagicProject/wagic/pull/586) ([ZobyTwo](https://github.com/ZobyTwo))
|
|
||||||
|
|
||||||
- *Merged pull-request:* Added Avatar Tokens created by Ajani Goldmane. [\#585](https://github.com/WagicProject/wagic/pull/585) ([bjornsnoen](https://github.com/bjornsnoen))
|
|
||||||
|
|
||||||
- *Merged pull-request:* Cleanup, usability fixes and source code documentation for DeckView.h and GridDeckView.h [\#583](https://github.com/WagicProject/wagic/pull/583) ([ZobyTwo](https://github.com/ZobyTwo))
|
|
||||||
|
|
||||||
- *Fixed bug:* Blight does not destroy at the end of turn but right now [\#592](https://github.com/WagicProject/wagic/issues/592)
|
|
||||||
|
|
||||||
- *Fixed bug:* game freezes on Android when the phone returns from "sleep mode" [\#544](https://github.com/WagicProject/wagic/issues/544)
|
|
||||||
|
|
||||||
- *Fixed bug:* Android port needs to be able to respond to attaching/detaching devices to it [\#522](https://github.com/WagicProject/wagic/issues/522)
|
|
||||||
|
|
||||||
## [alpha-195] (https://github.com/WagicProject/wagic/tree/alpha-195)
|
|
||||||
#### 07/12/13
|
|
||||||
- *Merged pull-request:* Reset positions and filters when reopening the editor [\#578](https://github.com/WagicProject/wagic/pull/578) ([ZobyTwo](https://github.com/ZobyTwo))
|
|
||||||
|
|
||||||
- *Merged pull-request:* Deck viewer [\#577](https://github.com/WagicProject/wagic/pull/577) ([ZobyTwo](https://github.com/ZobyTwo))
|
|
||||||
|
|
||||||
- *Merged pull-request:* Do not specify the system directory in JGE [\#576](https://github.com/WagicProject/wagic/pull/576) ([ZobyTwo](https://github.com/ZobyTwo))
|
|
||||||
|
|
||||||
- *Merged pull-request:* Changed Travis build file to use Android API 10 and Android build tools 18.1.1 [\#575](https://github.com/WagicProject/wagic/pull/575) ([Rolzad73](https://github.com/Rolzad73))
|
|
||||||
|
|
||||||
- *Merged pull-request:* Feature/play from grave [\#574](https://github.com/WagicProject/wagic/pull/574) ([pankdm](https://github.com/pankdm))
|
|
||||||
|
|
||||||
- *Merged pull-request:* Fix Valgrind warnings appearing during the test suit. [\#573](https://github.com/WagicProject/wagic/pull/573) ([ZobyTwo](https://github.com/ZobyTwo))
|
|
||||||
|
|
||||||
- *Merged pull-request:* Strings 2 [\#572](https://github.com/WagicProject/wagic/pull/572) ([ZobyTwo](https://github.com/ZobyTwo))
|
|
||||||
|
|
||||||
- *Merged pull-request:* Android travis ci [\#570](https://github.com/WagicProject/wagic/pull/570) ([xawotihs](https://github.com/xawotihs))
|
|
||||||
|
|
||||||
- *Merged pull-request:* Android NDK build fix [\#569](https://github.com/WagicProject/wagic/pull/569) ([Rolzad73](https://github.com/Rolzad73))
|
|
||||||
|
|
||||||
- *Merged pull-request:* Add a few namespaces and fix header guards. [\#564](https://github.com/WagicProject/wagic/pull/564) ([ZobyTwo](https://github.com/ZobyTwo))
|
|
||||||
|
|
||||||
- *Merged pull-request:* Updated deckmenu.cpp to properly render deck description and summary [\#562](https://github.com/WagicProject/wagic/pull/562) ([citiral](https://github.com/citiral))
|
|
||||||
|
|
||||||
- *Merged pull-request:* Fix some valgrind memcheck warnings. However there remains one... [\#561](https://github.com/WagicProject/wagic/pull/561) ([ZobyTwo](https://github.com/ZobyTwo))
|
|
||||||
|
|
||||||
- *Merged pull-request:* Remove some dead code [\#560](https://github.com/WagicProject/wagic/pull/560) ([ZobyTwo](https://github.com/ZobyTwo))
|
|
||||||
|
|
||||||
- *Merged pull-request:* Show output only for failing tests [\#559](https://github.com/WagicProject/wagic/pull/559) ([pankdm](https://github.com/pankdm))
|
|
||||||
|
|
||||||
- *Merged pull-request:* Defines/Typos [\#557](https://github.com/WagicProject/wagic/pull/557) ([ZobyTwo](https://github.com/ZobyTwo))
|
|
||||||
|
|
||||||
- *Merged pull-request:* Simplify Damage::resolve a bit [\#556](https://github.com/WagicProject/wagic/pull/556) ([ZobyTwo](https://github.com/ZobyTwo))
|
|
||||||
|
|
||||||
- *Merged pull-request:* Fix cranial plating [\#555](https://github.com/WagicProject/wagic/pull/555) ([pankdm](https://github.com/pankdm))
|
|
||||||
|
|
||||||
- *Merged pull-request:* Android cleanup [\#1](https://github.com/WagicProject/wagic/pull/1) ([Rolzad73](https://github.com/Rolzad73))
|
|
||||||
|
|
||||||
- *Fixed bug:* Iona and Nin don't work [\#527](https://github.com/WagicProject/wagic/issues/527)
|
|
||||||
|
|
||||||
- *Closed issue:* Less verbose output of tests at Travis [\#558](https://github.com/WagicProject/wagic/issues/558)
|
|
||||||
|
|
||||||
## [wagic-0.19.2] (https://github.com/WagicProject/wagic/tree/wagic-v0.19.2)
|
|
||||||
#### 28/10/13
|
|
||||||
Binary file not shown.
Binary file not shown.
+3
-3
@@ -73,7 +73,7 @@
|
|||||||
<Optimization>MaxSpeed</Optimization>
|
<Optimization>MaxSpeed</Optimization>
|
||||||
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||||
<AdditionalIncludeDirectories>src/zipFS;Dependencies/SDL/include;Dependencies/include;$(JGEEXTRAS);../Boost;../projects/mtg/include;include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>src/zipFS;Dependencies/SDL/include;Dependencies/include;$(JGEEXTRAS);../Boost;../projects/mtg/include;include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions>TIXML_USE_STL; SDL_CONFIG;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>SDL_CONFIG;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<StringPooling>true</StringPooling>
|
<StringPooling>true</StringPooling>
|
||||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
@@ -101,7 +101,7 @@
|
|||||||
<ClCompile>
|
<ClCompile>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<AdditionalIncludeDirectories>src/zipFS;Dependencies/SDL/include;Dependencies/include;$(JGEEXTRAS);../Boost;../projects/mtg/include;include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>src/zipFS;Dependencies/SDL/include;Dependencies/include;$(JGEEXTRAS);../Boost;../projects/mtg/include;include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions>TIXML_USE_STL; SDL_CONFIG;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>SDL_CONFIG;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||||
<PrecompiledHeader>
|
<PrecompiledHeader>
|
||||||
@@ -129,7 +129,7 @@
|
|||||||
<Optimization>Full</Optimization>
|
<Optimization>Full</Optimization>
|
||||||
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||||
<AdditionalIncludeDirectories>src/zipFS;Dependencies/SDL/include;Dependencies/include;$(JGEEXTRAS);../Boost;../projects/mtg/include;include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>src/zipFS;Dependencies/SDL/include;Dependencies/include;$(JGEEXTRAS);../Boost;../projects/mtg/include;include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions>TIXML_USE_STL; SDL_CONFIG;WIN32;NDEBUG;_LIB;_SECURE_SCL=0;_HAS_ITERATOR_DEBBUGING=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>SDL_CONFIG;WIN32;NDEBUG;_LIB;_SECURE_SCL=0;_HAS_ITERATOR_DEBBUGING=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<StringPooling>true</StringPooling>
|
<StringPooling>true</StringPooling>
|
||||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
|||||||
@@ -31,7 +31,6 @@ HGE_OBJS = src/hge/hgecolor.o src/hge/hgeparticle.o \
|
|||||||
|
|
||||||
|
|
||||||
CXXFLAGS = -W -Wall -Werror -Wno-unused
|
CXXFLAGS = -W -Wall -Werror -Wno-unused
|
||||||
CXXFLAGS += -DTIXML_USE_STL
|
|
||||||
|
|
||||||
ifdef DEBUG
|
ifdef DEBUG
|
||||||
CXXFLAGS += -ggdb3
|
CXXFLAGS += -ggdb3
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ std::string ToHex(T* pointer)
|
|||||||
{ \
|
{ \
|
||||||
std::ostringstream stream; \
|
std::ostringstream stream; \
|
||||||
stream << inString << std::endl; \
|
stream << inString << std::endl; \
|
||||||
OutputDebugStringA(stream.str().c_str()); \
|
OutputDebugString(stream.str().c_str()); \
|
||||||
}
|
}
|
||||||
#endif // QT_CONFIG
|
#endif // QT_CONFIG
|
||||||
#endif // Win32, Linux
|
#endif // Win32, Linux
|
||||||
|
|||||||
@@ -1,128 +0,0 @@
|
|||||||
#ifndef DOWNLOADER_H
|
|
||||||
#define DOWNLOADER_H
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
// This class handles download of remote resources (any kind of file)
|
|
||||||
// All the resources are stored locally in the userPath
|
|
||||||
// For every resources, the downloader verifies if the resource was modifed
|
|
||||||
// on the server before downloading the update. The Downloader maintains a catalogue
|
|
||||||
// of resource downloaded to be able to check if they need to be updated.
|
|
||||||
//
|
|
||||||
// The interface can be used completly synchronously by the application and some
|
|
||||||
// context or message loop is needed in the implementation of this interface
|
|
||||||
//
|
|
||||||
// Note that the Downloader could in theory by implemented on top of JNetwork.
|
|
||||||
//
|
|
||||||
//-------------------------------------------------------------------------------------
|
|
||||||
#include <string>
|
|
||||||
#include <ostream>
|
|
||||||
#include <istream>
|
|
||||||
#include <fstream>
|
|
||||||
#include <map>
|
|
||||||
#include "Threading.h"
|
|
||||||
#ifdef QT_CONFIG
|
|
||||||
#include <QObject>
|
|
||||||
#include <QNetworkRequest>
|
|
||||||
#include <QNetworkReply>
|
|
||||||
#include <QNetworkAccessManager>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
|
|
||||||
class DownloadRequest
|
|
||||||
#ifdef QT_CONFIG
|
|
||||||
: public QObject
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
#ifdef QT_CONFIG
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
#endif
|
|
||||||
void fileDownloaded();
|
|
||||||
void downloadProgress(qint64 bytesReceived, qint64 bytesTotal);
|
|
||||||
|
|
||||||
#ifdef QT_CONFIG
|
|
||||||
signals:
|
|
||||||
void percentChanged(int percent);
|
|
||||||
void statusChanged(int);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
public:
|
|
||||||
typedef enum {
|
|
||||||
NOT_PRESENT,
|
|
||||||
DOWNLOADING,
|
|
||||||
DOWNLOADED,
|
|
||||||
DOWNLOAD_ERROR
|
|
||||||
} DownloadStatus;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
string mLocalPath;
|
|
||||||
string mRemoteResourceURL;
|
|
||||||
// previous one is the original, next one can change after redirection
|
|
||||||
string mRequestedRemoteResourceURL;
|
|
||||||
string mETag;
|
|
||||||
DownloadStatus mDownloadStatus;
|
|
||||||
bool mUpgradeAvailable;
|
|
||||||
size_t mTotalSize;
|
|
||||||
size_t mCurrentSize;
|
|
||||||
ofstream mFile;
|
|
||||||
#ifdef QT_CONFIG
|
|
||||||
QNetworkReply* mNetworkReply;
|
|
||||||
static QNetworkAccessManager networkAccessManager;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
|
||||||
DownloadRequest(string localPath="",
|
|
||||||
string remoteResourceURL="",
|
|
||||||
string ETag = "",
|
|
||||||
DownloadStatus downloadStatus=NOT_PRESENT,
|
|
||||||
size_t totalSize = 0,
|
|
||||||
size_t currentSize = 0);
|
|
||||||
~DownloadRequest();
|
|
||||||
static bool NetworkIsAccessible();
|
|
||||||
|
|
||||||
string getTempLocalPath() const { return (mLocalPath+".tmp"); };
|
|
||||||
string getLocalPath() const { return mLocalPath; };
|
|
||||||
string getRemoteResource() const { return mRemoteResourceURL; };
|
|
||||||
string getETag() const { return mETag; };
|
|
||||||
void startGet();
|
|
||||||
void startHead();
|
|
||||||
DownloadStatus getDownloadStatus() const { return mDownloadStatus; };
|
|
||||||
bool upgradeAvailable() const { return mUpgradeAvailable; };
|
|
||||||
void getSizes(size_t& totalSize, size_t¤tSize) {
|
|
||||||
totalSize = mTotalSize;
|
|
||||||
currentSize = mCurrentSize;
|
|
||||||
};
|
|
||||||
|
|
||||||
friend ostream& operator<<(ostream& out, const DownloadRequest& d);
|
|
||||||
friend istream& operator>>(istream&, DownloadRequest&);
|
|
||||||
friend class Downloader;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
class Downloader
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
Downloader(string globalRemoteURL="", string localCacheRecords="");
|
|
||||||
virtual ~Downloader();
|
|
||||||
static Downloader* mInstance;
|
|
||||||
string mGlobalRemoteURL;
|
|
||||||
string mLocalCacheRecords;
|
|
||||||
boost::mutex mMutex;
|
|
||||||
map<string, DownloadRequest*> mRequestMap;
|
|
||||||
|
|
||||||
public:
|
|
||||||
static Downloader* GetInstance();
|
|
||||||
static void Release();
|
|
||||||
|
|
||||||
void Update();
|
|
||||||
DownloadRequest* Get(string localPath, string remoteResourceURL="");
|
|
||||||
|
|
||||||
friend ostream& operator<<(ostream& out, const Downloader& d);
|
|
||||||
friend istream& operator>>(istream&, Downloader&);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // DOWNLOADER_H
|
|
||||||
@@ -297,6 +297,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
float mTimer;
|
float mTimer;
|
||||||
float mFrameTime;
|
float mFrameTime;
|
||||||
|
JAnimator* mAnimator;
|
||||||
vector<JAnimatorObject *> mObjects;
|
vector<JAnimatorObject *> mObjects;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ private:
|
|||||||
float mTexY;
|
float mTexY;
|
||||||
float mTexWidth;
|
float mTexWidth;
|
||||||
float mTexHeight;
|
float mTexHeight;
|
||||||
|
JTexture* mTexture;
|
||||||
JQuad* mQuad;
|
JQuad* mQuad;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -128,7 +128,6 @@ public:
|
|||||||
bool readIntoString(const string & FilePath, string & target);
|
bool readIntoString(const string & FilePath, string & target);
|
||||||
bool openForWrite(ofstream & File, const string & FilePath, ios_base::openmode mode = ios_base::out );
|
bool openForWrite(ofstream & File, const string & FilePath, ios_base::openmode mode = ios_base::out );
|
||||||
bool Rename(string from, string to);
|
bool Rename(string from, string to);
|
||||||
bool Remove(string aFile);
|
|
||||||
|
|
||||||
//Returns true if strFilename exists somewhere in the fileSystem
|
//Returns true if strFilename exists somewhere in the fileSystem
|
||||||
bool FileExists(const string& strFilename);
|
bool FileExists(const string& strFilename);
|
||||||
|
|||||||
+20
-32
@@ -23,32 +23,28 @@
|
|||||||
#include "SLES/OpenSLES_Android.h"
|
#include "SLES/OpenSLES_Android.h"
|
||||||
|
|
||||||
#elif defined USE_PHONON
|
#elif defined USE_PHONON
|
||||||
#include <phonon/AudioOutput>
|
#include <phonon/AudioOutput>
|
||||||
#include <phonon/MediaObject>
|
#include <phonon/MediaObject>
|
||||||
#elif (defined QT_CONFIG)
|
|
||||||
#include "QMediaPlayer"
|
|
||||||
#include "QMediaPlaylist"
|
|
||||||
#include "QSoundEffect"
|
|
||||||
#elif defined WIN32
|
#elif defined WIN32
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#define WITH_FMOD
|
#define WITH_FMOD
|
||||||
#elif defined (PSP)
|
#elif defined (PSP)
|
||||||
#include <pspgu.h>
|
#include <pspgu.h>
|
||||||
#include <pspkernel.h>
|
#include <pspkernel.h>
|
||||||
#include <pspdisplay.h>
|
#include <pspdisplay.h>
|
||||||
#include <pspdebug.h>
|
#include <pspdebug.h>
|
||||||
#include <pspctrl.h>
|
#include <pspctrl.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <pspaudiolib.h>
|
#include <pspaudiolib.h>
|
||||||
#include <psprtc.h>
|
#include <psprtc.h>
|
||||||
|
|
||||||
#include "JAudio.h"
|
#include "JAudio.h"
|
||||||
#include "JMP3.h"
|
#include "JMP3.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WITH_FMOD
|
#ifdef WITH_FMOD
|
||||||
#include "../Dependencies/include/fmod.h"
|
#include "../Dependencies/include/fmod.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------
|
||||||
@@ -71,7 +67,7 @@ public:
|
|||||||
#ifdef USE_PHONON
|
#ifdef USE_PHONON
|
||||||
Phonon::AudioOutput* mOutput;
|
Phonon::AudioOutput* mOutput;
|
||||||
Phonon::MediaObject* mMediaObject;
|
Phonon::MediaObject* mMediaObject;
|
||||||
public slots:
|
public slots:
|
||||||
void seekAtTheBegining();
|
void seekAtTheBegining();
|
||||||
#elif defined (PSP)
|
#elif defined (PSP)
|
||||||
JMP3* mTrack;
|
JMP3* mTrack;
|
||||||
@@ -86,10 +82,6 @@ public slots:
|
|||||||
SLPlayItf playInterface;
|
SLPlayItf playInterface;
|
||||||
SLSeekItf seekInterface;
|
SLSeekItf seekInterface;
|
||||||
SLVolumeItf musicVolumeInterface;
|
SLVolumeItf musicVolumeInterface;
|
||||||
#elif (defined QT_CONFIG)
|
|
||||||
QMediaPlaylist* playlist;
|
|
||||||
QMediaPlayer* player;
|
|
||||||
string fullpath;
|
|
||||||
#else
|
#else
|
||||||
void* mTrack;
|
void* mTrack;
|
||||||
#endif //WITH_FMOD
|
#endif //WITH_FMOD
|
||||||
@@ -100,15 +92,13 @@ public slots:
|
|||||||
//------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------
|
||||||
class JSample
|
class JSample
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
JSample();
|
JSample();
|
||||||
~JSample();
|
~JSample();
|
||||||
|
|
||||||
unsigned long fileSize();
|
unsigned long fileSize();
|
||||||
#if (defined QT_CONFIG) && (!defined USE_PHONON)
|
|
||||||
QMediaPlayer* effect;
|
#if defined (PSP)
|
||||||
void* mSample;
|
|
||||||
#elif defined (PSP)
|
|
||||||
WAVDATA *mSample;
|
WAVDATA *mSample;
|
||||||
#elif defined (IOS)
|
#elif defined (IOS)
|
||||||
std::string filename;
|
std::string filename;
|
||||||
@@ -252,10 +242,9 @@ protected:
|
|||||||
void DestroySoundSystem();
|
void DestroySoundSystem();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
#if (defined PSP || defined ANDROID)
|
|
||||||
JMusic *mCurrentMusic;
|
JMusic *mCurrentMusic;
|
||||||
JSample *mCurrentSample;
|
JSample *mCurrentSample;
|
||||||
#endif
|
|
||||||
|
|
||||||
int mVolume;
|
int mVolume;
|
||||||
int mMusicVolume;
|
int mMusicVolume;
|
||||||
@@ -267,4 +256,3 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
+3
-77
@@ -1,7 +1,7 @@
|
|||||||
#ifndef THREADING_H
|
#ifndef THREADING_H
|
||||||
#define THREADING_H
|
#define THREADING_H
|
||||||
|
|
||||||
#if !defined(PSP) && !defined(QT_CONFIG) && !(__cplusplus > 199711L)
|
#if !defined(PSP) && !defined(QT_CONFIG)
|
||||||
#include <boost/date_time.hpp>
|
#include <boost/date_time.hpp>
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <boost/thread/mutex.hpp>
|
#include <boost/thread/mutex.hpp>
|
||||||
#elif defined(PSP)
|
#elif !defined(QT_CONFIG)
|
||||||
#include <boost/bind.hpp>
|
#include <boost/bind.hpp>
|
||||||
#include <boost/shared_ptr.hpp>
|
#include <boost/shared_ptr.hpp>
|
||||||
|
|
||||||
@@ -307,7 +307,7 @@ namespace boost
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#elif defined(QT_CONFIG) && (__cplusplus <= 199711L)
|
#elif defined(QT_CONFIG)
|
||||||
|
|
||||||
#include <QMutex>
|
#include <QMutex>
|
||||||
#include <QThread>
|
#include <QThread>
|
||||||
@@ -537,80 +537,6 @@ namespace boost
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#elif (__cplusplus > 199711L)
|
|
||||||
|
|
||||||
#include <thread>
|
|
||||||
#include <mutex>
|
|
||||||
|
|
||||||
namespace boost
|
|
||||||
{
|
|
||||||
typedef std::thread thread;
|
|
||||||
|
|
||||||
template <class Mutex>
|
|
||||||
struct unique_lock
|
|
||||||
{
|
|
||||||
unique_lock(Mutex& inMutex) : mMutex(&inMutex)
|
|
||||||
{
|
|
||||||
mMutex->lock();
|
|
||||||
}
|
|
||||||
|
|
||||||
~unique_lock()
|
|
||||||
{
|
|
||||||
mMutex->unlock();
|
|
||||||
}
|
|
||||||
|
|
||||||
Mutex* mMutex;
|
|
||||||
};
|
|
||||||
|
|
||||||
class mutex
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
typedef unique_lock<mutex> scoped_lock;
|
|
||||||
|
|
||||||
mutex()
|
|
||||||
: mQMutex()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
~mutex()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void lock()
|
|
||||||
{
|
|
||||||
mQMutex.lock();
|
|
||||||
}
|
|
||||||
|
|
||||||
void unlock()
|
|
||||||
{
|
|
||||||
mQMutex.unlock();
|
|
||||||
}
|
|
||||||
|
|
||||||
std::mutex mQMutex;
|
|
||||||
|
|
||||||
private:
|
|
||||||
mutex(mutex const&);
|
|
||||||
mutex& operator=(mutex const&);
|
|
||||||
};
|
|
||||||
|
|
||||||
namespace posix_time
|
|
||||||
{
|
|
||||||
typedef unsigned int milliseconds;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
** boost's platform neutral sleep call.
|
|
||||||
*/
|
|
||||||
namespace this_thread
|
|
||||||
{
|
|
||||||
inline void sleep(boost::posix_time::milliseconds const& time)
|
|
||||||
{
|
|
||||||
std::this_thread::sleep_for(std::chrono::milliseconds(time));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // THREADING_H
|
#endif // THREADING_H
|
||||||
|
|||||||
@@ -136,20 +136,6 @@ signals:
|
|||||||
private slots:
|
private slots:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int lastPosx(){
|
|
||||||
#if QT_VERSION >= 0x050100
|
|
||||||
return m_lastPos.x()*devicePixelRatio();
|
|
||||||
#else
|
|
||||||
return m_lastPos.x();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
int lastPosy(){
|
|
||||||
#if QT_VERSION >= 0x050100
|
|
||||||
return m_lastPos.y()*devicePixelRatio();
|
|
||||||
#else
|
|
||||||
return m_lastPos.y();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
void timerEvent( QTimerEvent* );
|
void timerEvent( QTimerEvent* );
|
||||||
void doAndEnqueue(JButton action) {
|
void doAndEnqueue(JButton action) {
|
||||||
m_engine->HoldKey_NoRepeat(action);
|
m_engine->HoldKey_NoRepeat(action);
|
||||||
@@ -168,7 +154,6 @@ private:
|
|||||||
int m_timerId;
|
int m_timerId;
|
||||||
bool m_active;
|
bool m_active;
|
||||||
QRect m_viewPort;
|
QRect m_viewPort;
|
||||||
QPoint m_lastPos;
|
|
||||||
#ifdef QT_WIDGET
|
#ifdef QT_WIDGET
|
||||||
#if (defined Q_WS_MAEMO_5) || (defined MEEGO_EDITION_HARMATTAN) || (defined Q_WS_ANDROID)
|
#if (defined Q_WS_MAEMO_5) || (defined MEEGO_EDITION_HARMATTAN) || (defined Q_WS_ANDROID)
|
||||||
int mMouseDownX;
|
int mMouseDownX;
|
||||||
|
|||||||
@@ -1,298 +0,0 @@
|
|||||||
#include "DebugRoutines.h"
|
|
||||||
#include "JFileSystem.h"
|
|
||||||
#include "Downloader.h"
|
|
||||||
|
|
||||||
#define RECORDS_DEFAULT_FILE "cache/records.txt"
|
|
||||||
|
|
||||||
#ifdef QT_CONFIG
|
|
||||||
QNetworkAccessManager DownloadRequest::networkAccessManager;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
DownloadRequest::DownloadRequest(string localPath,
|
|
||||||
string remoteResourceURL,
|
|
||||||
string ETag,
|
|
||||||
DownloadStatus downloadStatus,
|
|
||||||
size_t totalSize,
|
|
||||||
size_t currentSize):
|
|
||||||
mLocalPath(localPath),
|
|
||||||
mRemoteResourceURL(remoteResourceURL),
|
|
||||||
mRequestedRemoteResourceURL(remoteResourceURL),
|
|
||||||
mETag(ETag),
|
|
||||||
mDownloadStatus(downloadStatus),
|
|
||||||
mUpgradeAvailable(false),
|
|
||||||
mTotalSize(totalSize),
|
|
||||||
mCurrentSize(currentSize)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
DownloadRequest::~DownloadRequest()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void DownloadRequest::startHead()
|
|
||||||
{
|
|
||||||
#ifdef QT_CONFIG
|
|
||||||
QNetworkRequest request(QUrl(QString(mRequestedRemoteResourceURL.c_str())));
|
|
||||||
request.setRawHeader("If-None-Match", mETag.c_str());
|
|
||||||
mNetworkReply = networkAccessManager.head(request);
|
|
||||||
connect(mNetworkReply, SIGNAL(finished()), SLOT(fileDownloaded()));
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void DownloadRequest::startGet()
|
|
||||||
{
|
|
||||||
#ifdef QT_CONFIG
|
|
||||||
mNetworkReply = networkAccessManager.get(QNetworkRequest(QUrl(QString(mRequestedRemoteResourceURL.c_str()))));
|
|
||||||
#endif
|
|
||||||
mFile.close();
|
|
||||||
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(finished()), SLOT(fileDownloaded()));
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void DownloadRequest::fileDownloaded()
|
|
||||||
{
|
|
||||||
do {
|
|
||||||
QByteArray eTagByteArray = mNetworkReply->rawHeader("ETag");
|
|
||||||
if(!eTagByteArray.isEmpty()) {
|
|
||||||
string oldETag = mETag;
|
|
||||||
mETag = QString(eTagByteArray).toStdString();
|
|
||||||
if(oldETag!="" && oldETag != mETag)
|
|
||||||
mUpgradeAvailable = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// let's check some error
|
|
||||||
if(mNetworkReply->error() != QNetworkReply::NoError) {
|
|
||||||
DebugTrace(mNetworkReply->errorString().toStdString());
|
|
||||||
mDownloadStatus = DownloadRequest::DOWNLOAD_ERROR;
|
|
||||||
mFile.close();
|
|
||||||
JFileSystem::GetInstance()->Remove(getTempLocalPath());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// check if we're getting redirected
|
|
||||||
QVariant redirectionTarget = mNetworkReply->attribute(QNetworkRequest::RedirectionTargetAttribute);
|
|
||||||
if (!redirectionTarget.isNull()) {
|
|
||||||
QUrl newUrl = QUrl(mRequestedRemoteResourceURL.c_str()).resolved(redirectionTarget.toUrl());
|
|
||||||
DebugTrace(string("Redirect to ")+ newUrl.toString().toStdString());
|
|
||||||
|
|
||||||
mRequestedRemoteResourceURL = newUrl.toString().toStdString();
|
|
||||||
mNetworkReply->deleteLater();
|
|
||||||
if(mFile.is_open())
|
|
||||||
startGet();
|
|
||||||
else
|
|
||||||
startHead();
|
|
||||||
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;
|
|
||||||
} while(0);
|
|
||||||
|
|
||||||
Downloader::GetInstance()->Update();
|
|
||||||
mNetworkReply->deleteLater();
|
|
||||||
|
|
||||||
emit statusChanged((int)mDownloadStatus);
|
|
||||||
}
|
|
||||||
|
|
||||||
void DownloadRequest::downloadProgress(qint64 bytesReceived, qint64 bytesTotal)
|
|
||||||
{
|
|
||||||
QByteArray byteArray = mNetworkReply->readAll();
|
|
||||||
mFile.write(byteArray.constData(), byteArray.size());
|
|
||||||
mCurrentSize = bytesReceived;
|
|
||||||
mTotalSize = bytesTotal;
|
|
||||||
int percent = 0;
|
|
||||||
if(bytesTotal)
|
|
||||||
percent = (bytesReceived/bytesTotal)*100;
|
|
||||||
emit percentChanged(percent);
|
|
||||||
}
|
|
||||||
|
|
||||||
Downloader* Downloader::mInstance = 0;
|
|
||||||
|
|
||||||
Downloader::Downloader(string globalRemoteURL, string localcacheRecords):
|
|
||||||
mGlobalRemoteURL(globalRemoteURL),
|
|
||||||
mLocalCacheRecords(localcacheRecords)
|
|
||||||
{
|
|
||||||
JFileSystem::GetInstance()->MakeDir("cache");
|
|
||||||
|
|
||||||
izfstream downloadRecords;
|
|
||||||
if(mLocalCacheRecords.empty())
|
|
||||||
mLocalCacheRecords = RECORDS_DEFAULT_FILE;
|
|
||||||
if(JFileSystem::GetInstance()->openForRead(downloadRecords, mLocalCacheRecords))
|
|
||||||
{// File exists, let's read it.
|
|
||||||
downloadRecords >> (*this);
|
|
||||||
}
|
|
||||||
JFileSystem::GetInstance()->CloseFile();
|
|
||||||
}
|
|
||||||
|
|
||||||
Downloader::~Downloader()
|
|
||||||
{
|
|
||||||
map<string, DownloadRequest*>::iterator ite;
|
|
||||||
for(ite = mRequestMap.begin(); ite != mRequestMap.end(); ite++)
|
|
||||||
{
|
|
||||||
delete (*ite).second;
|
|
||||||
}
|
|
||||||
mRequestMap.erase(mRequestMap.begin(), mRequestMap.end());
|
|
||||||
}
|
|
||||||
|
|
||||||
Downloader* Downloader::GetInstance()
|
|
||||||
{
|
|
||||||
if(!mInstance)
|
|
||||||
{
|
|
||||||
mInstance = new Downloader();
|
|
||||||
}
|
|
||||||
return mInstance;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Downloader::Release()
|
|
||||||
{
|
|
||||||
if(mInstance)
|
|
||||||
{
|
|
||||||
delete mInstance;
|
|
||||||
mInstance = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DownloadRequest::NetworkIsAccessible()
|
|
||||||
{
|
|
||||||
bool result = false;
|
|
||||||
|
|
||||||
#ifdef QT_CONFIG
|
|
||||||
networkAccessManager.setNetworkAccessible(QNetworkAccessManager::Accessible);
|
|
||||||
result = networkAccessManager.networkAccessible();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
DownloadRequest* Downloader::Get(string localPath, string remoteResourceURL)
|
|
||||||
{
|
|
||||||
map<string, DownloadRequest*>::iterator ite = mRequestMap.find(localPath);
|
|
||||||
if(ite == mRequestMap.end())
|
|
||||||
{ // request does not exist, let's create it
|
|
||||||
DownloadRequest* request = new DownloadRequest(localPath, remoteResourceURL);
|
|
||||||
std::pair<std::map<string,DownloadRequest*>::iterator,bool> ret;
|
|
||||||
ret = mRequestMap.insert ( std::pair<string,DownloadRequest*>(localPath, request) );
|
|
||||||
if (ret.second==false) {
|
|
||||||
DebugTrace("Downloader::Get Error inserting request in Map");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
ite = ret.first;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Now, we can check the server
|
|
||||||
if((*ite).second->getDownloadStatus() == DownloadRequest::NOT_PRESENT ||
|
|
||||||
(*ite).second->upgradeAvailable())
|
|
||||||
{ // File is not here or an update is available, let's get it
|
|
||||||
(*ite).second->startGet();
|
|
||||||
(*ite).second->mDownloadStatus = DownloadRequest::DOWNLOADING;
|
|
||||||
}
|
|
||||||
else if ((*ite).second->getDownloadStatus() == DownloadRequest::DOWNLOADED)
|
|
||||||
{ // File is here, let's check if there is some update without blocking the playback
|
|
||||||
(*ite).second->startHead();
|
|
||||||
}
|
|
||||||
|
|
||||||
return (*ite).second;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Downloader::Update()
|
|
||||||
{
|
|
||||||
ofstream downloadRecords;
|
|
||||||
if(JFileSystem::GetInstance()->openForWrite(downloadRecords, mLocalCacheRecords))
|
|
||||||
{
|
|
||||||
downloadRecords << (*this);
|
|
||||||
}
|
|
||||||
downloadRecords.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
ostream& operator<<(ostream& out, const DownloadRequest& d)
|
|
||||||
{
|
|
||||||
// HEAD request fails, so this line erase cache record after upgrade check :(
|
|
||||||
// if(d.getDownloadStatus() == DownloadRequest::DOWNLOADED)
|
|
||||||
{
|
|
||||||
out << "localPath=" << d.mLocalPath << endl;
|
|
||||||
out << "remoteResource=" << d.mRemoteResourceURL << endl;
|
|
||||||
out << "ETag=" << d.mETag << endl;
|
|
||||||
out << "upgradeAvailable=" << d.mUpgradeAvailable <<endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
istream& operator>>(istream& in, DownloadRequest& d)
|
|
||||||
{
|
|
||||||
string s;
|
|
||||||
|
|
||||||
while(std::getline(in, s))
|
|
||||||
{
|
|
||||||
size_t limiter = s.find("=");
|
|
||||||
string areaS;
|
|
||||||
if (limiter != string::npos)
|
|
||||||
{
|
|
||||||
areaS = s.substr(0, limiter);
|
|
||||||
if (areaS.compare("localPath") == 0)
|
|
||||||
{
|
|
||||||
d.mLocalPath = s.substr(limiter + 1);
|
|
||||||
}
|
|
||||||
else if (areaS.compare("remoteResource") == 0)
|
|
||||||
{
|
|
||||||
d.mRemoteResourceURL = s.substr(limiter + 1);
|
|
||||||
d.mRequestedRemoteResourceURL = d.mRemoteResourceURL;
|
|
||||||
}
|
|
||||||
else if (areaS.compare("ETag") == 0)
|
|
||||||
{
|
|
||||||
d.mETag = s.substr(limiter + 1);
|
|
||||||
d.mDownloadStatus = DownloadRequest::DOWNLOADED;
|
|
||||||
}
|
|
||||||
else if (areaS.compare("upgradeAvailable") == 0)
|
|
||||||
{
|
|
||||||
d.mUpgradeAvailable = (bool)atoi(s.substr(limiter + 1).c_str());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return in;
|
|
||||||
}
|
|
||||||
|
|
||||||
ostream& operator<<(ostream& out, const Downloader& d)
|
|
||||||
{
|
|
||||||
map<string, DownloadRequest*>::const_iterator ite;
|
|
||||||
for(ite = d.mRequestMap.begin(); ite != d.mRequestMap.end(); ite++)
|
|
||||||
{
|
|
||||||
out << (*(*ite).second) << endl;
|
|
||||||
}
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
istream& operator>>(istream& in, Downloader& d)
|
|
||||||
{
|
|
||||||
while(!in.eof())
|
|
||||||
{
|
|
||||||
DownloadRequest* downloadRequest = new DownloadRequest();
|
|
||||||
in >> (*downloadRequest);
|
|
||||||
|
|
||||||
if(!downloadRequest->getLocalPath().empty() &&
|
|
||||||
!downloadRequest->getRemoteResource().empty() &&
|
|
||||||
!downloadRequest->getETag().empty()) {
|
|
||||||
d.mRequestMap[downloadRequest->getLocalPath()] = downloadRequest;
|
|
||||||
} else {
|
|
||||||
delete downloadRequest;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return in;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -67,7 +67,7 @@ bool JAnimator::Load(const char* scriptFile)
|
|||||||
element = script->ToElement();
|
element = script->ToElement();
|
||||||
printf("---- Loading %s:%s\n", element->Value(), element->Attribute("name"));
|
printf("---- Loading %s:%s\n", element->Value(), element->Attribute("name"));
|
||||||
|
|
||||||
string type[] =
|
const char *type[] =
|
||||||
{
|
{
|
||||||
"ANIMATION_TYPE_LOOPING",
|
"ANIMATION_TYPE_LOOPING",
|
||||||
"ANIMATION_TYPE_ONCE_AND_STAY",
|
"ANIMATION_TYPE_ONCE_AND_STAY",
|
||||||
@@ -78,7 +78,7 @@ bool JAnimator::Load(const char* scriptFile)
|
|||||||
|
|
||||||
const char* aniType = element->Attribute("type");
|
const char* aniType = element->Attribute("type");
|
||||||
for (int i=0;i<5;i++)
|
for (int i=0;i<5;i++)
|
||||||
if (type[i] == aniType)
|
if (strcmp(type[i], aniType)==0)
|
||||||
{
|
{
|
||||||
SetAnimationType(i);
|
SetAnimationType(i);
|
||||||
break;
|
break;
|
||||||
@@ -108,7 +108,7 @@ bool JAnimator::Load(const char* scriptFile)
|
|||||||
element = param->ToElement();
|
element = param->ToElement();
|
||||||
if (element != NULL)
|
if (element != NULL)
|
||||||
{
|
{
|
||||||
if (element->ValueStr() == "settings")
|
if (strcmp(element->Value(), "settings")==0)
|
||||||
{
|
{
|
||||||
const char* quadName = element->Attribute("quad");
|
const char* quadName = element->Attribute("quad");
|
||||||
JQuad* quad = mResource->GetQuad(quadName);
|
JQuad* quad = mResource->GetQuad(quadName);
|
||||||
|
|||||||
+3
-13
@@ -126,7 +126,7 @@ JFileSystem::JFileSystem(const string & _userPath, const string & _systemPath)
|
|||||||
DebugTrace("User path " << userPath);
|
DebugTrace("User path " << userPath);
|
||||||
#elif defined (QT_CONFIG)
|
#elif defined (QT_CONFIG)
|
||||||
|
|
||||||
QDir sysDir(RESDIR);
|
QDir sysDir("projects/mtg/bin/Res");
|
||||||
QDir dir(QDir::homePath());
|
QDir dir(QDir::homePath());
|
||||||
dir.mkdir(USERDIR);
|
dir.mkdir(USERDIR);
|
||||||
dir.cd(USERDIR);
|
dir.cd(USERDIR);
|
||||||
@@ -248,7 +248,7 @@ void JFileSystem::clearZipCache()
|
|||||||
|
|
||||||
bool JFileSystem::AttachZipFile(const string &zipfile, char *password /* = NULL */)
|
bool JFileSystem::AttachZipFile(const string &zipfile, char *password /* = NULL */)
|
||||||
{
|
{
|
||||||
if (mZipAvailable && mZipFile.is_open())
|
if (mZipAvailable && mZipFile != NULL)
|
||||||
{
|
{
|
||||||
if (mZipFileName != zipfile)
|
if (mZipFileName != zipfile)
|
||||||
DetachZipFile(); // close the previous zip file
|
DetachZipFile(); // close the previous zip file
|
||||||
@@ -313,15 +313,11 @@ bool JFileSystem::readIntoString(const string & FilePath, string & target)
|
|||||||
|
|
||||||
int fileSize = GetFileSize(file);
|
int fileSize = GetFileSize(file);
|
||||||
|
|
||||||
#ifndef __MINGW32__
|
|
||||||
try {
|
try {
|
||||||
#endif
|
|
||||||
target.resize((std::string::size_type) fileSize);
|
target.resize((std::string::size_type) fileSize);
|
||||||
#ifndef __MINGW32__
|
|
||||||
} catch (bad_alloc&) {
|
} catch (bad_alloc&) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
if (fileSize)
|
if (fileSize)
|
||||||
@@ -557,13 +553,7 @@ bool JFileSystem::Rename(string _from, string _to)
|
|||||||
string from = mUserFSPath + _from;
|
string from = mUserFSPath + _from;
|
||||||
string to = mUserFSPath + _to;
|
string to = mUserFSPath + _to;
|
||||||
std::remove(to.c_str());
|
std::remove(to.c_str());
|
||||||
return (rename(from.c_str(), to.c_str()) == 0);
|
return rename(from.c_str(), to.c_str()) ? true: false;
|
||||||
}
|
|
||||||
|
|
||||||
bool JFileSystem::Remove(string aFile)
|
|
||||||
{
|
|
||||||
string toRemove = mUserFSPath + aFile;
|
|
||||||
return (std::remove(toRemove.c_str()) == 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int JFileSystem::GetFileSize(izfstream & file)
|
int JFileSystem::GetFileSize(izfstream & file)
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ void JQuad::SetHotSpot(float x, float y)
|
|||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
JTexture::JTexture() : mWidth(0), mHeight(0), mBuffer(NULL)
|
JTexture::JTexture() : mBuffer(NULL)
|
||||||
{
|
{
|
||||||
mTexId = -1;
|
mTexId = -1;
|
||||||
}
|
}
|
||||||
@@ -305,12 +305,14 @@ void JRenderer::TransferTextureToGLContext(JTexture& inTexture)
|
|||||||
JTexture* JRenderer::CreateTexture(int width, int height, int mode __attribute__((unused)))
|
JTexture* JRenderer::CreateTexture(int width, int height, int mode __attribute__((unused)))
|
||||||
{
|
{
|
||||||
JTexture *tex = new JTexture();
|
JTexture *tex = new JTexture();
|
||||||
|
|
||||||
return tex;
|
return tex;
|
||||||
}
|
}
|
||||||
|
|
||||||
JTexture* JRenderer::LoadTexture(const char* filename, int mode, int textureFormat)
|
JTexture* JRenderer::LoadTexture(const char* filename, int mode, int textureFormat)
|
||||||
{
|
{
|
||||||
JTexture *tex = new JTexture();
|
JTexture *tex = new JTexture();
|
||||||
|
|
||||||
return tex;
|
return tex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -89,16 +89,16 @@ bool JOBJModel::Load(const char *modelName, const char *textureName)
|
|||||||
|
|
||||||
if (count == 4)
|
if (count == 4)
|
||||||
{
|
{
|
||||||
if (string("vn") == s1)
|
if (strcmp(s1, "vn") == 0)
|
||||||
normalList.push_back(vert);
|
normalList.push_back(vert);
|
||||||
else if (string("vt") == s1)
|
else if (strcmp(s1, "vt") == 0)
|
||||||
texList.push_back(vert);
|
texList.push_back(vert);
|
||||||
else if (string("v") == s1)
|
else if (strcmp(s1, "v") == 0)
|
||||||
vertList.push_back(vert);
|
vertList.push_back(vert);
|
||||||
}
|
}
|
||||||
else if (count == 3)
|
else if (count == 3)
|
||||||
{
|
{
|
||||||
if (string("vt") == s1)
|
if (strcmp(s1, "vt") == 0)
|
||||||
texList.push_back(vert);
|
texList.push_back(vert);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+16
-16
@@ -90,7 +90,7 @@ bool JParticleEffect::Load(const char* filename)
|
|||||||
// FIELD_COUNT
|
// FIELD_COUNT
|
||||||
// };
|
// };
|
||||||
|
|
||||||
const string lifeValues[] =
|
const char* lifeValues[] =
|
||||||
{
|
{
|
||||||
"speed",
|
"speed",
|
||||||
"size",
|
"size",
|
||||||
@@ -104,7 +104,7 @@ bool JParticleEffect::Load(const char* filename)
|
|||||||
"gravity"
|
"gravity"
|
||||||
};
|
};
|
||||||
|
|
||||||
const string typeNames[] =
|
const char* typeNames[] =
|
||||||
{
|
{
|
||||||
"POINT",
|
"POINT",
|
||||||
"AREA",
|
"AREA",
|
||||||
@@ -113,7 +113,7 @@ bool JParticleEffect::Load(const char* filename)
|
|||||||
"CIRCLE"
|
"CIRCLE"
|
||||||
};
|
};
|
||||||
|
|
||||||
const string modeNames[] =
|
const char* modeNames[] =
|
||||||
{
|
{
|
||||||
"REPEAT",
|
"REPEAT",
|
||||||
"ONCE",
|
"ONCE",
|
||||||
@@ -149,32 +149,32 @@ bool JParticleEffect::Load(const char* filename)
|
|||||||
{
|
{
|
||||||
element = param->ToElement();
|
element = param->ToElement();
|
||||||
|
|
||||||
if (string("settings") == element->Attribute("name"))
|
if (strcmp(element->Attribute("name"), "settings")==0)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (string("NORMAL") == element->Attribute("blend"))
|
if (strcmp(element->Attribute("blend"), "NORMAL")==0)
|
||||||
mParticleEmitters[mEmitterCount]->SetBlending(BLEND_SRC_ALPHA, BLEND_ONE_MINUS_SRC_ALPHA);
|
mParticleEmitters[mEmitterCount]->SetBlending(BLEND_SRC_ALPHA, BLEND_ONE_MINUS_SRC_ALPHA);
|
||||||
else if (string("ADDITIVE") == element->Attribute("blend"))
|
else if (strcmp(element->Attribute("blend"), "ADDITIVE")==0)
|
||||||
mParticleEmitters[mEmitterCount]->SetBlending(BLEND_SRC_ALPHA, BLEND_ONE);
|
mParticleEmitters[mEmitterCount]->SetBlending(BLEND_SRC_ALPHA, BLEND_ONE);
|
||||||
|
|
||||||
for (unsigned int i=0;i<sizeof(modeNames)/sizeof(char*);i++)
|
for (unsigned int i=0;i<sizeof(modeNames)/sizeof(char*);i++)
|
||||||
{
|
{
|
||||||
if (modeNames[i] == element->Attribute("mode"))
|
if (strcmp(element->Attribute("mode"), modeNames[i])==0)
|
||||||
{
|
{
|
||||||
mParticleEmitters[mEmitterCount]->mEmitterMode = i;
|
mParticleEmitters[mEmitterCount]->mEmitterMode = i;
|
||||||
#if defined (_DEBUG)
|
#if defined (_DEBUG)
|
||||||
printf("emitter mode:%s\n", modeNames[i].c_str());
|
printf("emitter mode:%s\n", modeNames[i]);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (unsigned i=0;i<sizeof(typeNames)/sizeof(char*);i++)
|
for (unsigned i=0;i<sizeof(typeNames)/sizeof(char*);i++)
|
||||||
{
|
{
|
||||||
if (typeNames[i] == element->Attribute("type"))
|
if (strcmp(element->Attribute("type"), typeNames[i])==0)
|
||||||
{
|
{
|
||||||
mParticleEmitters[mEmitterCount]->mType = i;
|
mParticleEmitters[mEmitterCount]->mType = i;
|
||||||
#if defined (_DEBUG)
|
#if defined (_DEBUG)
|
||||||
printf("emitter type:%s\n", typeNames[i].c_str());
|
printf("emitter type:%s\n", typeNames[i]);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -213,7 +213,7 @@ bool JParticleEffect::Load(const char* filename)
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (string("quantity") == element->Attribute("name"))
|
else if (strcmp(element->Attribute("name"), "quantity")==0)
|
||||||
{
|
{
|
||||||
for (key = param->FirstChild(); key; key = key->NextSibling())
|
for (key = param->FirstChild(); key; key = key->NextSibling())
|
||||||
{
|
{
|
||||||
@@ -227,7 +227,7 @@ bool JParticleEffect::Load(const char* filename)
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (string("lifex") == element->Attribute("name"))
|
else if (strcmp(element->Attribute("name"), "lifex")==0)
|
||||||
{
|
{
|
||||||
if (element->QueryFloatAttribute("base", &baseValue) == TIXML_SUCCESS &&
|
if (element->QueryFloatAttribute("base", &baseValue) == TIXML_SUCCESS &&
|
||||||
element->QueryFloatAttribute("max", &value) == TIXML_SUCCESS)
|
element->QueryFloatAttribute("max", &value) == TIXML_SUCCESS)
|
||||||
@@ -236,7 +236,7 @@ bool JParticleEffect::Load(const char* filename)
|
|||||||
mParticleEmitters[mEmitterCount]->mLifeMax= value;
|
mParticleEmitters[mEmitterCount]->mLifeMax= value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (string("anglex") == element->Attribute("name"))
|
else if (strcmp(element->Attribute("name"), "anglex")==0)
|
||||||
{
|
{
|
||||||
if (element->QueryFloatAttribute("base", &baseValue) == TIXML_SUCCESS &&
|
if (element->QueryFloatAttribute("base", &baseValue) == TIXML_SUCCESS &&
|
||||||
element->QueryFloatAttribute("max", &value) == TIXML_SUCCESS)
|
element->QueryFloatAttribute("max", &value) == TIXML_SUCCESS)
|
||||||
@@ -245,7 +245,7 @@ bool JParticleEffect::Load(const char* filename)
|
|||||||
mParticleEmitters[mEmitterCount]->mAngleMax= value*DEG2RAD;
|
mParticleEmitters[mEmitterCount]->mAngleMax= value*DEG2RAD;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (string("speedx") == element->Attribute("name"))
|
else if (strcmp(element->Attribute("name"), "speedx")==0)
|
||||||
{
|
{
|
||||||
if (element->QueryFloatAttribute("base", &baseValue) == TIXML_SUCCESS &&
|
if (element->QueryFloatAttribute("base", &baseValue) == TIXML_SUCCESS &&
|
||||||
element->QueryFloatAttribute("max", &value) == TIXML_SUCCESS)
|
element->QueryFloatAttribute("max", &value) == TIXML_SUCCESS)
|
||||||
@@ -254,7 +254,7 @@ bool JParticleEffect::Load(const char* filename)
|
|||||||
mParticleEmitters[mEmitterCount]->mSpeedMax= value;
|
mParticleEmitters[mEmitterCount]->mSpeedMax= value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (string("sizex") == element->Attribute("name"))
|
else if (strcmp(element->Attribute("name"), "sizex")==0)
|
||||||
{
|
{
|
||||||
if (element->QueryFloatAttribute("base", &baseValue) == TIXML_SUCCESS &&
|
if (element->QueryFloatAttribute("base", &baseValue) == TIXML_SUCCESS &&
|
||||||
element->QueryFloatAttribute("max", &value) == TIXML_SUCCESS)
|
element->QueryFloatAttribute("max", &value) == TIXML_SUCCESS)
|
||||||
@@ -267,7 +267,7 @@ bool JParticleEffect::Load(const char* filename)
|
|||||||
{
|
{
|
||||||
for (int i=0;i<FIELD_COUNT;i++)
|
for (int i=0;i<FIELD_COUNT;i++)
|
||||||
{
|
{
|
||||||
if (lifeValues[i] == element->Attribute("name"))
|
if (strcmp(element->Attribute("name"), lifeValues[i])==0)
|
||||||
{
|
{
|
||||||
for (key = param->FirstChild(); key; key = key->NextSibling())
|
for (key = param->FirstChild(); key; key = key->NextSibling())
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -119,11 +119,11 @@ bool JResourceManager::LoadResource(const string& resourceName)
|
|||||||
element = node->ToElement();
|
element = node->ToElement();
|
||||||
if (element != NULL)
|
if (element != NULL)
|
||||||
{
|
{
|
||||||
if (element->ValueStr() == "texture")
|
if (strcmp(element->Value(), "texture")==0)
|
||||||
{
|
{
|
||||||
CreateTexture(element->Attribute("name"));
|
CreateTexture(element->Attribute("name"));
|
||||||
}
|
}
|
||||||
else if (element->ValueStr() == "quad")
|
else if (strcmp(element->Value(), "quad")==0)
|
||||||
{
|
{
|
||||||
string quadName = element->Attribute("name");
|
string quadName = element->Attribute("name");
|
||||||
string textureName = element->Attribute("texture");
|
string textureName = element->Attribute("texture");
|
||||||
@@ -170,7 +170,7 @@ bool JResourceManager::LoadResource(const string& resourceName)
|
|||||||
GetQuad(id)->SetHotSpot(hotspotX, hotspotY);
|
GetQuad(id)->SetHotSpot(hotspotX, hotspotY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (element->ValueStr() == "font")
|
else if (strcmp(element->Value(), "font")==0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -96,8 +96,9 @@ int main(int argc, char* argv[])
|
|||||||
options.reloadProfile();
|
options.reloadProfile();
|
||||||
TestSuite testSuite("test/_tests.txt");
|
TestSuite testSuite("test/_tests.txt");
|
||||||
result = testSuite.run();
|
result = testSuite.run();
|
||||||
|
int totalTests = testSuite.nbTests + testSuite.nbAITests;
|
||||||
delete wagicCore;
|
delete wagicCore;
|
||||||
DebugTrace("TestSuite done: failed test: " << result << " out of " << testSuite.nbTests + testSuite.nbAITests << " total");
|
DebugTrace("TestSuite done: failed test: " << result << " out of " << totalTests << " total");
|
||||||
#ifdef CAPTURE_STDERR
|
#ifdef CAPTURE_STDERR
|
||||||
OutputCapturer::debugAndClear();
|
OutputCapturer::debugAndClear();
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
+11
-18
@@ -9,11 +9,11 @@
|
|||||||
#include <QtDeclarative>
|
#include <QtDeclarative>
|
||||||
#include "qmlapplicationviewer.h"
|
#include "qmlapplicationviewer.h"
|
||||||
#endif //QT_WIDGET
|
#endif //QT_WIDGET
|
||||||
#include "Downloader.h"
|
#include "filedownloader.h"
|
||||||
#include "GameApp.h"
|
#include "GameApp.h"
|
||||||
#include "corewrapper.h"
|
#include "corewrapper.h"
|
||||||
|
|
||||||
WagicCore* g_glwidget = NULL;
|
QWidget* g_glwidget = NULL;
|
||||||
|
|
||||||
static const struct { LocalKeySym keysym; JButton keycode; } gDefaultBindings[] =
|
static const struct { LocalKeySym keysym; JButton keycode; } gDefaultBindings[] =
|
||||||
{
|
{
|
||||||
@@ -69,25 +69,18 @@ int main(int argc, char* argv[])
|
|||||||
|
|
||||||
#endif //QT_WIDGET
|
#endif //QT_WIDGET
|
||||||
|
|
||||||
|
if(argc >= 2 && strcmp(argv[1], "testsuite")==0)
|
||||||
|
{
|
||||||
|
int result = 0;
|
||||||
|
result += WagicCore::runTestSuite();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
app->setApplicationName(WagicCore::getApplicationName());
|
app->setApplicationName(WagicCore::getApplicationName());
|
||||||
DownloadRequest* downloadRequest = NULL;
|
FileDownloader fileDownloader(USERDIR, WAGIC_RESOURCE_NAME);
|
||||||
#ifdef WAGIC_RESOURCE_URL
|
|
||||||
Downloader*downloader = Downloader::GetInstance();
|
|
||||||
downloadRequest = downloader->Get(
|
|
||||||
"core.zip",
|
|
||||||
WAGIC_RESOURCE_URL
|
|
||||||
);
|
|
||||||
#endif
|
|
||||||
#ifdef QT_WIDGET
|
#ifdef QT_WIDGET
|
||||||
g_glwidget = new WagicCore();
|
g_glwidget = new WagicCore();
|
||||||
if(!downloadRequest || downloadRequest->getDownloadStatus() == DownloadRequest::DOWNLOADED)
|
g_glwidget->connect(&fileDownloader, SIGNAL(finished(int)), SLOT(start(int)));
|
||||||
{
|
|
||||||
g_glwidget->start(0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
g_glwidget->connect(downloadRequest, SIGNAL(statusChanged(int)), SLOT(start(int)));
|
|
||||||
}
|
|
||||||
#else
|
#else
|
||||||
qmlRegisterType<WagicCore>("CustomComponents", 1, 0, "WagicCore");
|
qmlRegisterType<WagicCore>("CustomComponents", 1, 0, "WagicCore");
|
||||||
|
|
||||||
|
|||||||
@@ -80,19 +80,6 @@ extern "C" void Java_org_libsdl_app_SDLActivity_nativeResume(
|
|||||||
return;
|
return;
|
||||||
g_engine->Resume();
|
g_engine->Resume();
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "Wagic_Version.h"
|
|
||||||
extern "C" jstring Java_org_libsdl_app_SDLActivity_getResourceName(
|
|
||||||
JNIEnv* env, jclass cls)
|
|
||||||
{
|
|
||||||
return env->NewStringUTF (WAGIC_RESOURCE_NAME);
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C" jstring Java_org_libsdl_app_SDLActivity_getResourceUrl(
|
|
||||||
JNIEnv* env, jclass cls)
|
|
||||||
{
|
|
||||||
return env->NewStringUTF (WAGIC_RESOURCE_URL);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+18
-4
@@ -166,11 +166,12 @@ void DestroyGame(void)
|
|||||||
[menuKeyRecognizer requireGestureRecognizerToFail: selectKeyRecognizer];
|
[menuKeyRecognizer requireGestureRecognizerToFail: selectKeyRecognizer];
|
||||||
[self addGestureRecognizer:menuKeyRecognizer];
|
[self addGestureRecognizer:menuKeyRecognizer];
|
||||||
|
|
||||||
/*
|
// initialize the scaling factor
|
||||||
|
lastScale = 1.f;
|
||||||
UIPinchGestureRecognizer *pinchZoomRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinchZoom:)];
|
UIPinchGestureRecognizer *pinchZoomRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinchZoom:)];
|
||||||
[self addGestureRecognizer:pinchZoomRecognizer];
|
[self addGestureRecognizer:pinchZoomRecognizer];
|
||||||
[pinchZoomRecognizer release];
|
[pinchZoomRecognizer release];
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Create a single tap recognizer to select the nearest object.
|
Create a single tap recognizer to select the nearest object.
|
||||||
@@ -391,8 +392,6 @@ void DestroyGame(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
- (BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
|
- (BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
|
||||||
{
|
{
|
||||||
return YES;
|
return YES;
|
||||||
@@ -425,6 +424,21 @@ void DestroyGame(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark Gesture Recognizer callbacks
|
#pragma mark Gesture Recognizer callbacks
|
||||||
|
- (void)handlePinchZoom: (UIPinchGestureRecognizer *) pinchGesture {
|
||||||
|
[[[pinchGesture view] layer] removeAllAnimations];
|
||||||
|
CGFloat currentScaleFactor = [pinchGesture scale];
|
||||||
|
|
||||||
|
if (pinchGesture.state == UIGestureRecognizerStateEnded) {
|
||||||
|
if (lastScale < 1.3f) {
|
||||||
|
lastScale *= currentScaleFactor;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
lastScale = 1;
|
||||||
|
[self displayGameMenu];
|
||||||
|
}
|
||||||
|
pinchGesture.scale = 1.f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
- (void)handlePanMotion: (UIPanGestureRecognizer *) panGesture
|
- (void)handlePanMotion: (UIPanGestureRecognizer *) panGesture
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -47,7 +47,6 @@
|
|||||||
|
|
||||||
- (void)viewDidLoad {
|
- (void)viewDidLoad {
|
||||||
NSLog(@"EAGL ViewController - view Did Load");
|
NSLog(@"EAGL ViewController - view Did Load");
|
||||||
|
|
||||||
[super viewDidLoad];
|
[super viewDidLoad];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -56,7 +55,6 @@
|
|||||||
[self.view resumeGame];
|
[self.view resumeGame];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
- (void)viewWillDisappear:(BOOL)animated
|
- (void)viewWillDisappear:(BOOL)animated
|
||||||
{
|
{
|
||||||
[self.view pauseGame];
|
[self.view pauseGame];
|
||||||
@@ -77,6 +75,10 @@
|
|||||||
[self.view endGame];
|
[self.view endGame];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (UIStatusBarStyle)preferredStatusBarStyle {
|
||||||
|
return UIStatusBarStyleLightContent;
|
||||||
|
}
|
||||||
|
|
||||||
- (void)viewDidAppear:(BOOL)animated {
|
- (void)viewDidAppear:(BOOL)animated {
|
||||||
|
|
||||||
NSLog(@"EAGL ViewController - view Did Appear");
|
NSLog(@"EAGL ViewController - view Did Appear");
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
#include "JFileSystem.h"
|
#include "JFileSystem.h"
|
||||||
#include "JRenderer.h"
|
#include "JRenderer.h"
|
||||||
#include "JGameLauncher.h"
|
#include "JGameLauncher.h"
|
||||||
|
#include "UIScreen+Util.h"
|
||||||
|
|
||||||
#define ACTUAL_SCREEN_WIDTH (SCREEN_WIDTH)
|
#define ACTUAL_SCREEN_WIDTH (SCREEN_WIDTH)
|
||||||
#define ACTUAL_SCREEN_HEIGHT (SCREEN_HEIGHT)
|
#define ACTUAL_SCREEN_HEIGHT (SCREEN_HEIGHT)
|
||||||
@@ -61,7 +62,7 @@ bool checkFramebufferStatus();
|
|||||||
// for retina devices. because of the 568 px, the ratio between height-width skews the
|
// for retina devices. because of the 568 px, the ratio between height-width skews the
|
||||||
// frame a bit
|
// frame a bit
|
||||||
|
|
||||||
if ( backingHeight == 568 || backingWidth == 568) {
|
if ( [UIScreen isRetinaDisplay]) {
|
||||||
viewPort.left = 0;
|
viewPort.left = 0;
|
||||||
viewPort.top = -((backingWidth/ACTUAL_RATIO)-backingHeight)/2 + 22; // account for status bar
|
viewPort.top = -((backingWidth/ACTUAL_RATIO)-backingHeight)/2 + 22; // account for status bar
|
||||||
viewPort.right = backingWidth;
|
viewPort.right = backingWidth;
|
||||||
|
|||||||
+2
-2
@@ -343,7 +343,7 @@ void JQuad::SetHotSpot(float x, float y)
|
|||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
JTexture::JTexture() : mWidth(0), mHeight(0), mBuffer(NULL)
|
JTexture::JTexture() : mBuffer(NULL)
|
||||||
{
|
{
|
||||||
mTexId = -1;
|
mTexId = -1;
|
||||||
}
|
}
|
||||||
@@ -2486,7 +2486,7 @@ void JRenderer::Enable2D()
|
|||||||
#if (defined GL_VERSION_ES_CM_1_1) || (defined GL_OES_VERSION_1_1)
|
#if (defined GL_VERSION_ES_CM_1_1) || (defined GL_OES_VERSION_1_1)
|
||||||
glOrthof(0.0f, SCREEN_WIDTH_F, 0.0f, SCREEN_HEIGHT_F-1.0f, -1.0f, 1.0f);
|
glOrthof(0.0f, SCREEN_WIDTH_F, 0.0f, SCREEN_HEIGHT_F-1.0f, -1.0f, 1.0f);
|
||||||
#else
|
#else
|
||||||
glOrtho(0.0f, SCREEN_WIDTH_F, 0.0f, SCREEN_HEIGHT_F-1.0f, -1.0f, 1.0f);
|
gluOrtho2D(0.0f, SCREEN_WIDTH_F, 0.0f, SCREEN_HEIGHT_F-1.0f);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
glMatrixMode (GL_MODELVIEW); // Select The Modelview Matrix
|
glMatrixMode (GL_MODELVIEW); // Select The Modelview Matrix
|
||||||
|
|||||||
+18
-70
@@ -22,8 +22,6 @@
|
|||||||
JMusic::JMusic()
|
JMusic::JMusic()
|
||||||
#ifdef USE_PHONON
|
#ifdef USE_PHONON
|
||||||
: mOutput(0), mMediaObject(0)
|
: mOutput(0), mMediaObject(0)
|
||||||
#elif defined QT_CONFIG
|
|
||||||
: playlist(0), player(0)
|
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -42,16 +40,11 @@ int JMusic::getPlayTime(){
|
|||||||
|
|
||||||
JMusic::~JMusic()
|
JMusic::~JMusic()
|
||||||
{
|
{
|
||||||
#if defined USE_PHONON
|
#ifdef USE_PHONON
|
||||||
if(mOutput)
|
if(mOutput)
|
||||||
delete mOutput;
|
delete mOutput;
|
||||||
if(mMediaObject)
|
if(mMediaObject)
|
||||||
delete mMediaObject;
|
delete mMediaObject;
|
||||||
#elif defined QT_CONFIG
|
|
||||||
if(player)
|
|
||||||
delete player;
|
|
||||||
if(playlist)
|
|
||||||
delete playlist;
|
|
||||||
#elif defined WITH_FMOD
|
#elif defined WITH_FMOD
|
||||||
JSoundSystem::GetInstance()->StopMusic(this);
|
JSoundSystem::GetInstance()->StopMusic(this);
|
||||||
if (mTrack) FSOUND_Sample_Free(mTrack);
|
if (mTrack) FSOUND_Sample_Free(mTrack);
|
||||||
@@ -67,9 +60,7 @@ void JMusic::seekAtTheBegining()
|
|||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
JSample::JSample()
|
JSample::JSample()
|
||||||
#ifdef QT_CONFIG
|
#ifdef USE_PHONON
|
||||||
: effect(0)
|
|
||||||
#elif (defined USE_PHONON)
|
|
||||||
: mOutput(0), mMediaObject(0)
|
: mOutput(0), mMediaObject(0)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
@@ -78,12 +69,7 @@ JSample::JSample()
|
|||||||
|
|
||||||
JSample::~JSample()
|
JSample::~JSample()
|
||||||
{
|
{
|
||||||
#if (defined QT_CONFIG) && (!defined USE_PHONON)
|
#ifdef USE_PHONON
|
||||||
if(effect) {
|
|
||||||
delete effect;
|
|
||||||
effect = 0;
|
|
||||||
}
|
|
||||||
#elif (defined USE_PHONON)
|
|
||||||
if(mOutput)
|
if(mOutput)
|
||||||
delete mOutput;
|
delete mOutput;
|
||||||
if(mMediaObject)
|
if(mMediaObject)
|
||||||
@@ -158,20 +144,8 @@ void JSoundSystem::DestroySoundSystem()
|
|||||||
|
|
||||||
JMusic *JSoundSystem::LoadMusic(const char *fileName)
|
JMusic *JSoundSystem::LoadMusic(const char *fileName)
|
||||||
{
|
{
|
||||||
JMusic* music = NULL;
|
#ifdef USE_PHONON
|
||||||
#if (defined QT_CONFIG) && (!defined USE_PHONON)
|
JMusic* music = new JMusic();
|
||||||
music = new JMusic();
|
|
||||||
if (music)
|
|
||||||
{
|
|
||||||
music->player = new QMediaPlayer;
|
|
||||||
music->player->setVolume(100);
|
|
||||||
music->playlist = new QMediaPlaylist;
|
|
||||||
music->fullpath = JFileSystem::GetInstance()->GetResourceFile(fileName);
|
|
||||||
music->playlist->addMedia(QUrl::fromLocalFile(music->fullpath.c_str()));
|
|
||||||
music->playlist->setCurrentIndex(0);
|
|
||||||
}
|
|
||||||
#elif defined USE_PHONON
|
|
||||||
music = new JMusic();
|
|
||||||
if (music)
|
if (music)
|
||||||
{
|
{
|
||||||
music->mOutput = new Phonon::AudioOutput(Phonon::GameCategory, 0);
|
music->mOutput = new Phonon::AudioOutput(Phonon::GameCategory, 0);
|
||||||
@@ -181,8 +155,9 @@ JMusic *JSoundSystem::LoadMusic(const char *fileName)
|
|||||||
Phonon::Path mediapath = Phonon::createPath(music->mMediaObject, music->mOutput);
|
Phonon::Path mediapath = Phonon::createPath(music->mMediaObject, music->mOutput);
|
||||||
Q_ASSERT(mediapath.isValid());
|
Q_ASSERT(mediapath.isValid());
|
||||||
}
|
}
|
||||||
|
return music;
|
||||||
#elif (defined WITH_FMOD)
|
#elif (defined WITH_FMOD)
|
||||||
music = new JMusic();
|
JMusic* music = new JMusic();
|
||||||
if (music)
|
if (music)
|
||||||
{
|
{
|
||||||
JFileSystem* fileSystem = JFileSystem::GetInstance();
|
JFileSystem* fileSystem = JFileSystem::GetInstance();
|
||||||
@@ -197,25 +172,17 @@ JMusic *JSoundSystem::LoadMusic(const char *fileName)
|
|||||||
fileSystem->CloseFile();
|
fileSystem->CloseFile();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return music;
|
||||||
#else
|
#else
|
||||||
cerr << fileName << endl;
|
cerr << fileName << endl;
|
||||||
|
return NULL;
|
||||||
#endif
|
#endif
|
||||||
return music;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void JSoundSystem::PlayMusic(JMusic *music, bool looping)
|
void JSoundSystem::PlayMusic(JMusic *music, bool looping)
|
||||||
{
|
{
|
||||||
#if (defined QT_CONFIG) && (!defined USE_PHONON)
|
#ifdef USE_PHONON
|
||||||
if(music && music->player && music->playlist)
|
|
||||||
{
|
|
||||||
if(looping)
|
|
||||||
music->playlist->setPlaybackMode(QMediaPlaylist::Loop);
|
|
||||||
|
|
||||||
music->player->setPlaylist(music->playlist);
|
|
||||||
music->player->play();
|
|
||||||
}
|
|
||||||
#elif USE_PHONON
|
|
||||||
if (music && music->mMediaObject && music->mOutput)
|
if (music && music->mMediaObject && music->mOutput)
|
||||||
{
|
{
|
||||||
if(looping)
|
if(looping)
|
||||||
@@ -246,12 +213,7 @@ void JSoundSystem::PlayMusic(JMusic *music, bool looping)
|
|||||||
|
|
||||||
void JSoundSystem::StopMusic(JMusic *music)
|
void JSoundSystem::StopMusic(JMusic *music)
|
||||||
{
|
{
|
||||||
#if (defined QT_CONFIG) && (!defined USE_PHONON)
|
#ifdef USE_PHONON
|
||||||
if (music && music->player && music->playlist)
|
|
||||||
{
|
|
||||||
music->player->stop();
|
|
||||||
}
|
|
||||||
#elif defined USE_PHONON
|
|
||||||
if (music && music->mMediaObject && music->mOutput)
|
if (music && music->mMediaObject && music->mOutput)
|
||||||
{
|
{
|
||||||
music->mMediaObject->stop();
|
music->mMediaObject->stop();
|
||||||
@@ -302,19 +264,8 @@ void JSoundSystem::SetSfxVolume(int volume){
|
|||||||
|
|
||||||
JSample *JSoundSystem::LoadSample(const char *fileName)
|
JSample *JSoundSystem::LoadSample(const char *fileName)
|
||||||
{
|
{
|
||||||
JSample* sample = NULL;
|
#if (defined USE_PHONON)
|
||||||
#if (defined QT_CONFIG) && (!defined USE_PHONON)
|
JSample* sample = new JSample();
|
||||||
sample = new JSample();
|
|
||||||
if (sample)
|
|
||||||
{
|
|
||||||
string fullpath = JFileSystem::GetInstance()->GetResourceFile(fileName);
|
|
||||||
sample->effect = new QMediaPlayer;
|
|
||||||
sample->effect->setMedia(QUrl::fromLocalFile(fullpath.c_str()));
|
|
||||||
sample->effect->setVolume(100);
|
|
||||||
sample->mSample = &(sample->effect);
|
|
||||||
}
|
|
||||||
#elif (defined USE_PHONON)
|
|
||||||
sample = new JSample();
|
|
||||||
if (sample)
|
if (sample)
|
||||||
{
|
{
|
||||||
sample->mOutput = new Phonon::AudioOutput(Phonon::GameCategory, 0);
|
sample->mOutput = new Phonon::AudioOutput(Phonon::GameCategory, 0);
|
||||||
@@ -324,8 +275,9 @@ JSample *JSoundSystem::LoadSample(const char *fileName)
|
|||||||
Phonon::Path mediapath = Phonon::createPath(sample->mMediaObject, sample->mOutput);
|
Phonon::Path mediapath = Phonon::createPath(sample->mMediaObject, sample->mOutput);
|
||||||
Q_ASSERT(mediapath.isValid());
|
Q_ASSERT(mediapath.isValid());
|
||||||
}
|
}
|
||||||
|
return sample;
|
||||||
#elif (defined WITH_FMOD)
|
#elif (defined WITH_FMOD)
|
||||||
sample = new JSample();
|
JSample* sample = new JSample();
|
||||||
if (sample)
|
if (sample)
|
||||||
{
|
{
|
||||||
JFileSystem* fileSystem = JFileSystem::GetInstance();
|
JFileSystem* fileSystem = JFileSystem::GetInstance();
|
||||||
@@ -342,21 +294,17 @@ JSample *JSoundSystem::LoadSample(const char *fileName)
|
|||||||
sample->mSample = NULL;
|
sample->mSample = NULL;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
return sample;
|
||||||
#else
|
#else
|
||||||
cerr << fileName << endl;
|
cerr << fileName << endl;
|
||||||
|
return NULL;
|
||||||
#endif
|
#endif
|
||||||
return sample;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void JSoundSystem::PlaySample(JSample *sample)
|
void JSoundSystem::PlaySample(JSample *sample)
|
||||||
{
|
{
|
||||||
#if (defined QT_CONFIG) && (!defined USE_PHONON)
|
#ifdef USE_PHONON
|
||||||
if(sample)
|
|
||||||
{
|
|
||||||
sample->effect->play();
|
|
||||||
}
|
|
||||||
#elif defined USE_PHONON
|
|
||||||
if (sample && sample->mMediaObject && sample->mOutput)
|
if (sample && sample->mMediaObject && sample->mOutput)
|
||||||
{
|
{
|
||||||
sample->mOutput->setVolume((qreal)mSampleVolume*0.01);
|
sample->mOutput->setVolume((qreal)mSampleVolume*0.01);
|
||||||
|
|||||||
+29
-29
@@ -335,7 +335,7 @@ void WagicCore::resizeGL(int width, int height)
|
|||||||
#if (defined GL_VERSION_ES_CM_1_1 || defined GL_OES_VERSION_1_1)
|
#if (defined GL_VERSION_ES_CM_1_1 || defined GL_OES_VERSION_1_1)
|
||||||
glOrthof(0.0f, (float) (m_viewPort.right()-m_viewPort.left())-1.0f, 0.0f, (float) (m_viewPort.bottom()-m_viewPort.top())-1.0f, -1.0f, 1.0f);
|
glOrthof(0.0f, (float) (m_viewPort.right()-m_viewPort.left())-1.0f, 0.0f, (float) (m_viewPort.bottom()-m_viewPort.top())-1.0f, -1.0f, 1.0f);
|
||||||
#else
|
#else
|
||||||
glOrtho(0.0f, (float) (m_viewPort.right()-m_viewPort.left())-1.0f, 0.0f, (float) (m_viewPort.bottom()-m_viewPort.top())-1.0f, -1.0f, 1.0f);
|
gluOrtho2D(0.0f, (float) (m_viewPort.right()-m_viewPort.left())-1.0f, 0.0f, (float) (m_viewPort.bottom()-m_viewPort.top())-1.0f);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
glMatrixMode (GL_MODELVIEW); // Select The Modelview Matrix
|
glMatrixMode (GL_MODELVIEW); // Select The Modelview Matrix
|
||||||
@@ -418,29 +418,29 @@ void WagicCore::mousePressEvent(QMouseEvent *event)
|
|||||||
{
|
{
|
||||||
if(event->button() == Qt::LeftButton)
|
if(event->button() == Qt::LeftButton)
|
||||||
{
|
{
|
||||||
m_lastPos = event->pos();
|
QPoint lastPos = event->pos();
|
||||||
// this is intended to convert window coordinate into game coordinate.
|
// this is intended to convert window coordinate into game coordinate.
|
||||||
// this is correct only if the game and window have the same aspect ratio, otherwise, it's just wrong
|
// this is correct only if the game and window have the same aspect ratio, otherwise, it's just wrong
|
||||||
int actualWidth = (int) JRenderer::GetInstance()->GetActualWidth();
|
int actualWidth = (int) JRenderer::GetInstance()->GetActualWidth();
|
||||||
int actualHeight = (int) JRenderer::GetInstance()->GetActualHeight();
|
int actualHeight = (int) JRenderer::GetInstance()->GetActualHeight();
|
||||||
|
|
||||||
if (lastPosy() >= m_viewPort.top() &&
|
if (lastPos.y() >= m_viewPort.top() &&
|
||||||
lastPosy() <= m_viewPort.bottom() &&
|
lastPos.y() <= m_viewPort.bottom() &&
|
||||||
lastPosx() <= m_viewPort.right() &&
|
lastPos.x() <= m_viewPort.right() &&
|
||||||
lastPosx() >= m_viewPort.left()) {
|
lastPos.x() >= m_viewPort.left()) {
|
||||||
m_engine->LeftClicked(
|
m_engine->LeftClicked(
|
||||||
((lastPosx()-m_viewPort.left())*SCREEN_WIDTH)/actualWidth,
|
((lastPos.x()-m_viewPort.left())*SCREEN_WIDTH)/actualWidth,
|
||||||
((lastPosy()-m_viewPort.top())*SCREEN_HEIGHT)/actualHeight);
|
((lastPos.y()-m_viewPort.top())*SCREEN_HEIGHT)/actualHeight);
|
||||||
#if (!defined Q_WS_MAEMO_5) && (!defined MEEGO_EDITION_HARMATTAN) && (!defined Q_WS_ANDROID)
|
#if (!defined Q_WS_MAEMO_5) && (!defined MEEGO_EDITION_HARMATTAN) && (!defined Q_WS_ANDROID)
|
||||||
m_engine->HoldKey_NoRepeat(JGE_BTN_OK);
|
m_engine->HoldKey_NoRepeat(JGE_BTN_OK);
|
||||||
#else
|
#else
|
||||||
mMouseDownX = lastPosx();
|
mMouseDownX = lastPos.x();
|
||||||
mMouseDownY = lastPosy();
|
mMouseDownY = lastPos.y();
|
||||||
mLastFingerDownTime = g_startTimer.elapsed();
|
mLastFingerDownTime = g_startTimer.elapsed();
|
||||||
#endif
|
#endif
|
||||||
} else if(lastPosy()<m_viewPort.top()) {
|
} else if(lastPos.y()<m_viewPort.top()) {
|
||||||
m_engine->HoldKey_NoRepeat(JGE_BTN_MENU);
|
m_engine->HoldKey_NoRepeat(JGE_BTN_MENU);
|
||||||
} else if(lastPosy()>m_viewPort.bottom()) {
|
} else if(lastPos.y()>m_viewPort.bottom()) {
|
||||||
m_engine->HoldKey_NoRepeat(JGE_BTN_NEXT);
|
m_engine->HoldKey_NoRepeat(JGE_BTN_NEXT);
|
||||||
}
|
}
|
||||||
event->accept();
|
event->accept();
|
||||||
@@ -465,33 +465,33 @@ void WagicCore::mouseReleaseEvent(QMouseEvent *event)
|
|||||||
{
|
{
|
||||||
if(event->button() == Qt::LeftButton)
|
if(event->button() == Qt::LeftButton)
|
||||||
{
|
{
|
||||||
m_lastPos = event->pos();
|
QPoint lastPos = event->pos();
|
||||||
|
|
||||||
if (lastPosy() >= m_viewPort.top() &&
|
if (lastPos.y() >= m_viewPort.top() &&
|
||||||
lastPosy() <= m_viewPort.bottom() &&
|
lastPos.y() <= m_viewPort.bottom() &&
|
||||||
lastPosx() <= m_viewPort.right() &&
|
lastPos.x() <= m_viewPort.right() &&
|
||||||
lastPosx() >= m_viewPort.left()) {
|
lastPos.x() >= m_viewPort.left()) {
|
||||||
#if (defined Q_WS_MAEMO_5) || (defined MEEGO_EDITION_HARMATTAN) || (defined Q_WS_ANDROID)
|
#if (defined Q_WS_MAEMO_5) || (defined MEEGO_EDITION_HARMATTAN) || (defined Q_WS_ANDROID)
|
||||||
if(g_startTimer.elapsed() - mLastFingerDownTime <= kTapEventTimeout )
|
if(g_startTimer.elapsed() - mLastFingerDownTime <= kTapEventTimeout )
|
||||||
{
|
{
|
||||||
if(abs(mMouseDownX - lastPosx()) < kHitzonePliancy &&
|
if(abs(mMouseDownX - lastPos.x()) < kHitzonePliancy &&
|
||||||
abs(mMouseDownY - lastPosy()) < kHitzonePliancy)
|
abs(mMouseDownY - lastPos.y()) < kHitzonePliancy)
|
||||||
{
|
{
|
||||||
m_engine->HoldKey_NoRepeat(JGE_BTN_OK);
|
m_engine->HoldKey_NoRepeat(JGE_BTN_OK);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (g_startTimer.elapsed() - mLastFingerDownTime >= kSwipeEventMinDuration)
|
else if (g_startTimer.elapsed() - mLastFingerDownTime >= kSwipeEventMinDuration)
|
||||||
{ // Let's swipe
|
{ // Let's swipe
|
||||||
m_engine->Scroll(lastPosx()-mMouseDownX, lastPosy()-mMouseDownY);
|
m_engine->Scroll(lastPos.x()-mMouseDownX, lastPos.y()-mMouseDownY);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
//#if (!defined Q_WS_MAEMO_5) && (!defined MEEGO_EDITION_HARMATTAN)
|
//#if (!defined Q_WS_MAEMO_5) && (!defined MEEGO_EDITION_HARMATTAN)
|
||||||
m_engine->ReleaseKey(JGE_BTN_OK);
|
m_engine->ReleaseKey(JGE_BTN_OK);
|
||||||
#endif
|
#endif
|
||||||
m_engine->ReleaseKey(JGE_BTN_MENU);
|
m_engine->ReleaseKey(JGE_BTN_MENU);
|
||||||
} else if(lastPosy() < m_viewPort.top()) {
|
} else if(lastPos.y() < m_viewPort.top()) {
|
||||||
m_engine->ReleaseKey(JGE_BTN_MENU);
|
m_engine->ReleaseKey(JGE_BTN_MENU);
|
||||||
} else if(lastPosy() > m_viewPort.bottom()) {
|
} else if(lastPos.y() > m_viewPort.bottom()) {
|
||||||
m_engine->ReleaseKey(JGE_BTN_NEXT);
|
m_engine->ReleaseKey(JGE_BTN_NEXT);
|
||||||
}
|
}
|
||||||
event->accept();
|
event->accept();
|
||||||
@@ -517,15 +517,15 @@ void WagicCore::mouseMoveEvent(QMouseEvent *event)
|
|||||||
int actualWidth = (int) JRenderer::GetInstance()->GetActualWidth();
|
int actualWidth = (int) JRenderer::GetInstance()->GetActualWidth();
|
||||||
int actualHeight = (int) JRenderer::GetInstance()->GetActualHeight();
|
int actualHeight = (int) JRenderer::GetInstance()->GetActualHeight();
|
||||||
|
|
||||||
m_lastPos = event->pos();
|
QPoint lastPos = event->pos();
|
||||||
|
|
||||||
if (lastPosy() >= m_viewPort.top() &&
|
if (lastPos.y() >= m_viewPort.top() &&
|
||||||
lastPosy() <= m_viewPort.bottom() &&
|
lastPos.y() <= m_viewPort.bottom() &&
|
||||||
lastPosx() <= m_viewPort.right() &&
|
lastPos.x() <= m_viewPort.right() &&
|
||||||
lastPosx() >= m_viewPort.left()) {
|
lastPos.x() >= m_viewPort.left()) {
|
||||||
m_engine->LeftClicked(
|
m_engine->LeftClicked(
|
||||||
((lastPosx()-m_viewPort.left())*SCREEN_WIDTH)/actualWidth,
|
((lastPos.x()-m_viewPort.left())*SCREEN_WIDTH)/actualWidth,
|
||||||
((lastPosy()-m_viewPort.top())*SCREEN_HEIGHT)/actualHeight);
|
((lastPos.y()-m_viewPort.top())*SCREEN_HEIGHT)/actualHeight);
|
||||||
event->accept();
|
event->accept();
|
||||||
} else {
|
} else {
|
||||||
super::mouseMoveEvent(event);
|
super::mouseMoveEvent(event);
|
||||||
|
|||||||
@@ -106,7 +106,6 @@ public:
|
|||||||
virtual int overflow(int c = EOF);
|
virtual int overflow(int c = EOF);
|
||||||
virtual int underflow();
|
virtual int underflow();
|
||||||
virtual int sync();
|
virtual int sync();
|
||||||
using std::streambuf::setbuf;
|
|
||||||
virtual std::streambuf * setbuf(char * pr, int nLength);
|
virtual std::streambuf * setbuf(char * pr, int nLength);
|
||||||
virtual std::streampos seekoff(std::streamoff, std::ios::seekdir, std::ios::openmode);
|
virtual std::streampos seekoff(std::streamoff, std::ios::seekdir, std::ios::openmode);
|
||||||
|
|
||||||
@@ -132,7 +131,6 @@ public:
|
|||||||
virtual int overflow(int c = EOF);
|
virtual int overflow(int c = EOF);
|
||||||
virtual int underflow();
|
virtual int underflow();
|
||||||
virtual int sync();
|
virtual int sync();
|
||||||
using std::streambuf::setbuf;
|
|
||||||
virtual std::streambuf * setbuf(char * pr, int nLength);
|
virtual std::streambuf * setbuf(char * pr, int nLength);
|
||||||
virtual std::streampos seekoff(std::streamoff, std::ios::seekdir, std::ios::openmode);
|
virtual std::streampos seekoff(std::streamoff, std::ios::seekdir, std::ios::openmode);
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,6 @@
|
|||||||
|
|
||||||
|
|
||||||
[](https://travis-ci.org/WagicProject/wagic)
|
[](https://travis-ci.org/WagicProject/wagic)
|
||||||
[](https://ci.appveyor.com/project/xawotihs/wagic/branch/master)
|
|
||||||
[](https://coveralls.io/r/WagicProject/wagic?branch=master)
|
|
||||||
|
|
||||||
## Description
|
## Description
|
||||||
|
|
||||||
@@ -18,11 +16,6 @@ Wagic, the Homebrew, is a C++ game engine that allows to play card games against
|
|||||||
It is highly customizable and allows the player to tweak the rules / create their own cards, their own themes, etc...
|
It is highly customizable and allows the player to tweak the rules / create their own cards, their own themes, etc...
|
||||||
|
|
||||||
|
|
||||||
Info, downloads, discussions and more at http://wololo.net/forum/index.php
|
Info, Downloads, and more at http://wololo.net
|
||||||
|
|
||||||
-
|
-
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### Sample round play-through video
|
|
||||||
[](http://www.youtube.com/watch?v=WUFSAPZuDIk)
|
|
||||||
|
|||||||
@@ -1,76 +0,0 @@
|
|||||||
# Notes:
|
|
||||||
# - Minimal appveyor.yml file is an empty file. All sections are optional.
|
|
||||||
# - Indent each level of configuration with 2 spaces. Do not use tabs!
|
|
||||||
# - All section names are case-sensitive.
|
|
||||||
# - Section names should be unique on each level.
|
|
||||||
|
|
||||||
# branches to build
|
|
||||||
branches:
|
|
||||||
# blacklist
|
|
||||||
except:
|
|
||||||
- travis_mac_osx
|
|
||||||
# Do not build on tags (GitHub only)
|
|
||||||
skip_tags: true
|
|
||||||
|
|
||||||
#---------------------------------#
|
|
||||||
# environment configuration #
|
|
||||||
#---------------------------------#
|
|
||||||
|
|
||||||
environment:
|
|
||||||
GH_TOKEN:
|
|
||||||
secure: dYnBDQkiY5oVjIlswzBX9BJigNtBGXgGlp1tK3XbHzrDEDrs2vaKD5m+Oz5OSz1C
|
|
||||||
|
|
||||||
# scripts that run after cloning repository
|
|
||||||
install:
|
|
||||||
- ps: (new-object net.webclient).DownloadFile('https://raw.github.com/pypa/pip/master/contrib/get-pip.py', 'C:/get-pip.py')
|
|
||||||
- "C:/Python27/python.exe C:/get-pip.py"
|
|
||||||
- "C:/Python27/Scripts/pip.exe install pyjavaproperties"
|
|
||||||
- "C:/Python27/Scripts/pip.exe install github3.py"
|
|
||||||
|
|
||||||
#---------------------------------#
|
|
||||||
# build configuration #
|
|
||||||
#---------------------------------#
|
|
||||||
|
|
||||||
# build Configuration, i.e. Debug, Release, etc.
|
|
||||||
configuration: Release
|
|
||||||
|
|
||||||
build:
|
|
||||||
project: projects/mtg/mtg_vs2010.sln # path to Visual Studio solution or project
|
|
||||||
|
|
||||||
#---------------------------------#
|
|
||||||
# tests configuration #
|
|
||||||
#---------------------------------#
|
|
||||||
|
|
||||||
# to disable automatic tests
|
|
||||||
test: off
|
|
||||||
|
|
||||||
|
|
||||||
#---------------------------------#
|
|
||||||
# artifacts configuration #
|
|
||||||
#---------------------------------#
|
|
||||||
|
|
||||||
artifacts:
|
|
||||||
# pushing windows package
|
|
||||||
- path: projects\mtg\bin\Wagic-windows*.zip
|
|
||||||
|
|
||||||
|
|
||||||
#---------------------------------#
|
|
||||||
# deployment configuration #
|
|
||||||
#---------------------------------#
|
|
||||||
|
|
||||||
# scripts to run before deployment
|
|
||||||
before_deploy:
|
|
||||||
- cd projects/mtg/bin
|
|
||||||
- "C:/Python27/python.exe createWindowsZip.py"
|
|
||||||
- cd ../../..
|
|
||||||
|
|
||||||
# scripts to run after deployment
|
|
||||||
after_deploy:
|
|
||||||
|
|
||||||
# to run your custom scripts instead of provider deployments
|
|
||||||
deploy_script:
|
|
||||||
- "C:/Python27/python.exe tools/upload-binaries.py -t %GH_TOKEN% -s %APPVEYOR_REPO_COMMIT% -l projects/mtg/bin/Wagic-windows.zip -r Wagic-windows.zip -b %APPVEYOR_REPO_BRANCH%"
|
|
||||||
|
|
||||||
# to disable deployment
|
|
||||||
#deploy: off
|
|
||||||
|
|
||||||
@@ -14,7 +14,7 @@ PNG_PATH := $(JGE_PATH)/Dependencies/libpng
|
|||||||
DEBUG ?= DEBUG
|
DEBUG ?= DEBUG
|
||||||
|
|
||||||
LOCAL_CFLAGS += -DLINUX -DANDROID -DSDL_CONFIG -D_$(DEBUG)
|
LOCAL_CFLAGS += -DLINUX -DANDROID -DSDL_CONFIG -D_$(DEBUG)
|
||||||
LOCAL_CFLAGS += -D_STLP_USE_SIMPLE_NODE_ALLOC -DTIXML_USE_STL
|
LOCAL_CFLAGS += -D_STLP_USE_SIMPLE_NODE_ALLOC
|
||||||
LOCAL_CFLAGS += -D__arm__ -D_REENTRANT -D_GLIBCXX__PTHREADS
|
LOCAL_CFLAGS += -D__arm__ -D_REENTRANT -D_GLIBCXX__PTHREADS
|
||||||
LOCAL_STATIC_LIBRARIES := libpng libjpeg
|
LOCAL_STATIC_LIBRARIES := libpng libjpeg
|
||||||
LOCAL_SHARED_LIBRARIES := SDL
|
LOCAL_SHARED_LIBRARIES := SDL
|
||||||
@@ -57,6 +57,7 @@ LOCAL_SRC_FILES := $(SDL_PATH)/src/main/android/SDL_android_main.cpp \
|
|||||||
$(MTG_PATH)/src/DeckMetaData.cpp \
|
$(MTG_PATH)/src/DeckMetaData.cpp \
|
||||||
$(MTG_PATH)/src/DeckStats.cpp \
|
$(MTG_PATH)/src/DeckStats.cpp \
|
||||||
$(MTG_PATH)/src/DuelLayers.cpp \
|
$(MTG_PATH)/src/DuelLayers.cpp \
|
||||||
|
$(MTG_PATH)/src/Effects.cpp \
|
||||||
$(MTG_PATH)/src/ExtraCost.cpp \
|
$(MTG_PATH)/src/ExtraCost.cpp \
|
||||||
$(MTG_PATH)/src/GameApp.cpp \
|
$(MTG_PATH)/src/GameApp.cpp \
|
||||||
$(MTG_PATH)/src/GameLauncher.cpp \
|
$(MTG_PATH)/src/GameLauncher.cpp \
|
||||||
@@ -135,9 +136,6 @@ LOCAL_SRC_FILES := $(SDL_PATH)/src/main/android/SDL_android_main.cpp \
|
|||||||
$(MTG_PATH)/src/WFont.cpp \
|
$(MTG_PATH)/src/WFont.cpp \
|
||||||
$(MTG_PATH)/src/WGui.cpp \
|
$(MTG_PATH)/src/WGui.cpp \
|
||||||
$(MTG_PATH)/src/WResourceManager.cpp \
|
$(MTG_PATH)/src/WResourceManager.cpp \
|
||||||
$(MTG_PATH)/src/DeckView.cpp \
|
|
||||||
$(MTG_PATH)/src/CarouselDeckView.cpp \
|
|
||||||
$(MTG_PATH)/src/GridDeckView.cpp \
|
|
||||||
$(JGE_PATH)/src/SDLmain.cpp \
|
$(JGE_PATH)/src/SDLmain.cpp \
|
||||||
$(JGE_PATH)/src/Encoding.cpp \
|
$(JGE_PATH)/src/Encoding.cpp \
|
||||||
$(JGE_PATH)/src/JAnimator.cpp \
|
$(JGE_PATH)/src/JAnimator.cpp \
|
||||||
|
|||||||
@@ -80,6 +80,7 @@ public class SDLActivity extends Activity implements OnKeyListener
|
|||||||
public Boolean mErrorHappened = false;
|
public Boolean mErrorHappened = false;
|
||||||
public final static String RES_FOLDER = Environment.getExternalStorageDirectory().getPath() + "/Wagic/Res/";
|
public final static String RES_FOLDER = Environment.getExternalStorageDirectory().getPath() + "/Wagic/Res/";
|
||||||
public static String RES_FILENAME = "core_0184.zip";
|
public static String RES_FILENAME = "core_0184.zip";
|
||||||
|
public static final String RES_URL = "http://wagic.googlecode.com/files/";
|
||||||
|
|
||||||
public String systemFolder = Environment.getExternalStorageDirectory().getPath() + "/Wagic/Res/";
|
public String systemFolder = Environment.getExternalStorageDirectory().getPath() + "/Wagic/Res/";
|
||||||
private String userFolder;
|
private String userFolder;
|
||||||
@@ -306,7 +307,7 @@ public class SDLActivity extends Activity implements OnKeyListener
|
|||||||
|
|
||||||
private void startDownload()
|
private void startDownload()
|
||||||
{
|
{
|
||||||
String url = getResourceUrl();
|
String url = RES_URL + RES_FILENAME;
|
||||||
if (!checkStorageState())
|
if (!checkStorageState())
|
||||||
{
|
{
|
||||||
Log.e(TAG, "Error in initializing storage space.");
|
Log.e(TAG, "Error in initializing storage space.");
|
||||||
@@ -436,7 +437,7 @@ public class SDLActivity extends Activity implements OnKeyListener
|
|||||||
mContext = this.getApplicationContext();
|
mContext = this.getApplicationContext();
|
||||||
// get the current version of the app to set the core filename
|
// get the current version of the app to set the core filename
|
||||||
String versionCodeString = getApplicationCode();
|
String versionCodeString = getApplicationCode();
|
||||||
RES_FILENAME = getResourceName();
|
RES_FILENAME = "core_" + versionCodeString + ".zip";
|
||||||
|
|
||||||
StorageOptions.determineStorageOptions();
|
StorageOptions.determineStorageOptions();
|
||||||
checkStorageLocationPreference();
|
checkStorageLocationPreference();
|
||||||
@@ -524,9 +525,6 @@ public class SDLActivity extends Activity implements OnKeyListener
|
|||||||
}
|
}
|
||||||
|
|
||||||
// C functions we call
|
// C functions we call
|
||||||
public static native String getResourceUrl();
|
|
||||||
public static native String getResourceName();
|
|
||||||
|
|
||||||
public static native void nativeInit();
|
public static native void nativeInit();
|
||||||
|
|
||||||
public static native void nativeQuit();
|
public static native void nativeQuit();
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<key>NSPrincipalClass</key>
|
|
||||||
<string>NSApplication</string>
|
|
||||||
<key>CFBundlePackageType</key>
|
|
||||||
<string>APPL</string>
|
|
||||||
<key>CFBundleGetInfoString</key>
|
|
||||||
<string>Created by Qt/QMake</string>
|
|
||||||
<key>CFBundleSignature</key>
|
|
||||||
<string>????</string>
|
|
||||||
<key>CFBundleExecutable</key>
|
|
||||||
<string>wagic.launcher</string>
|
|
||||||
<key>CFBundleIdentifier</key>
|
|
||||||
<string>wagic.wagic</string>
|
|
||||||
<key>NOTE</key>
|
|
||||||
<string>This file was generated by Qt/QMake.</string>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
||||||
Binary file not shown.
@@ -1,5 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
cd ${0%/*/*}/Resources
|
|
||||||
#cd ../Resources
|
|
||||||
exec ../MacOS/wagic -platformpluginpath ../PlugIns >> ../logs/out.log 2> ../logs/err.log
|
|
||||||
@@ -6,7 +6,7 @@ OBJS = objs/InteractiveButton.o objs/AbilityParser.o objs/ActionElement.o\
|
|||||||
objs/Counters.o objs/Credits.o objs/Damage.o objs/DamagerDamaged.o\
|
objs/Counters.o objs/Credits.o objs/Damage.o objs/DamagerDamaged.o\
|
||||||
objs/DeckDataWrapper.o objs/DeckEditorMenu.o objs/DeckMenu.o\
|
objs/DeckDataWrapper.o objs/DeckEditorMenu.o objs/DeckMenu.o\
|
||||||
objs/DeckMenuItem.o objs/DeckMetaData.o objs/DeckStats.o objs/DuelLayers.o\
|
objs/DeckMenuItem.o objs/DeckMetaData.o objs/DeckStats.o objs/DuelLayers.o\
|
||||||
objs/ExtraCost.o objs/GameApp.o objs/GameLauncher.o\
|
objs/Effects.o objs/ExtraCost.o objs/GameApp.o objs/GameLauncher.o\
|
||||||
objs/GameObserver.o objs/GameOptions.o objs/GameState.o\
|
objs/GameObserver.o objs/GameOptions.o objs/GameState.o\
|
||||||
objs/GameStateAwards.o objs/GameStateDeckViewer.o objs/GameStateDuel.o\
|
objs/GameStateAwards.o objs/GameStateDeckViewer.o objs/GameStateDuel.o\
|
||||||
objs/DeckManager.o objs/GameStateMenu.o objs/GameStateOptions.o\
|
objs/DeckManager.o objs/GameStateMenu.o objs/GameStateOptions.o\
|
||||||
@@ -27,7 +27,7 @@ OBJS = objs/InteractiveButton.o objs/AbilityParser.o objs/ActionElement.o\
|
|||||||
objs/ThisDescriptor.o objs/Token.o objs/Translate.o objs/TranslateKeys.o\
|
objs/ThisDescriptor.o objs/Token.o objs/Translate.o objs/TranslateKeys.o\
|
||||||
objs/Trash.o objs/utils.o objs/WEvent.o objs/WResourceManager.o\
|
objs/Trash.o objs/utils.o objs/WEvent.o objs/WResourceManager.o\
|
||||||
objs/WCachedResource.o objs/WDataSrc.o objs/WGui.o objs/WFilter.o objs/Tasks.o\
|
objs/WCachedResource.o objs/WDataSrc.o objs/WGui.o objs/WFilter.o objs/Tasks.o\
|
||||||
objs/WFont.o objs/CarouselDeckView.o objs/GridDeckView.o objs/DeckView.o
|
objs/WFont.o
|
||||||
DEPS = $(patsubst objs/%.o, deps/%.d, $(OBJS))
|
DEPS = $(patsubst objs/%.o, deps/%.d, $(OBJS))
|
||||||
|
|
||||||
RESULT = $(shell psp-config --psp-prefix 2> Makefile.cache)
|
RESULT = $(shell psp-config --psp-prefix 2> Makefile.cache)
|
||||||
@@ -73,7 +73,7 @@ PSP_EBOOT_UNKPNG = pic0.png
|
|||||||
PSP_EBOOT_PIC1 = pic1.png
|
PSP_EBOOT_PIC1 = pic1.png
|
||||||
INCDIR = ../../JGE/include ../../JGE/src/zipFS ../../JGE/include/psp ../../JGE/include/psp/freetype2 ../../JGE/src ../../projects/mtg/include ../../Boost
|
INCDIR = ../../JGE/include ../../JGE/src/zipFS ../../JGE/include/psp ../../JGE/include/psp/freetype2 ../../JGE/src ../../projects/mtg/include ../../Boost
|
||||||
LIBDIR = ../../JGE/lib/psp
|
LIBDIR = ../../JGE/lib/psp
|
||||||
CFLAGS = -O2 -G0 -DPSPFW3XX -DDEVHOOK -DUSE_PRECOMPILED_HEADERS=1 -DPSP -DTIXML_USE_STL
|
CFLAGS = -O2 -G0 -DPSPFW3XX -DDEVHOOK -DUSE_PRECOMPILED_HEADERS=1 -DPSP
|
||||||
else
|
else
|
||||||
OBJS += objs/TestSuiteAI.o
|
OBJS += objs/TestSuiteAI.o
|
||||||
INCDIR = -I../../JGE/include -I../../JGE/src -I/usr/X11/include -I../../projects/mtg/include -I../../Boost -I../../JGE/src/zipFS
|
INCDIR = -I../../JGE/include -I../../JGE/src -I/usr/X11/include -I../../projects/mtg/include -I../../Boost -I../../JGE/src/zipFS
|
||||||
@@ -86,7 +86,7 @@ all: $(DEFAULT_RULE)
|
|||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
CFLAGS := -Wall -W -Wno-unused $(CFLAGS)
|
CFLAGS := -Wall -W -Werror -Wno-unused $(CFLAGS)
|
||||||
CXXFLAGS += $(CFLAGS)
|
CXXFLAGS += $(CFLAGS)
|
||||||
# -fno-exceptions
|
# -fno-exceptions
|
||||||
|
|
||||||
|
|||||||
@@ -7,13 +7,10 @@ from optparse import OptionParser
|
|||||||
def createResZipFile(filename):
|
def createResZipFile(filename):
|
||||||
|
|
||||||
utilities = ZipUtilities()
|
utilities = ZipUtilities()
|
||||||
rename = False
|
|
||||||
if not os.path.isfile('settings/options.txt'):
|
if not os.path.isfile('settings/options.txt'):
|
||||||
os.rename('settings/options.orig.txt', 'settings/options.txt')
|
os.rename('settings/options.orig.txt', 'settings/options.txt')
|
||||||
remame = True
|
|
||||||
if not os.path.isfile('player/options.txt'):
|
if not os.path.isfile('player/options.txt'):
|
||||||
os.rename('player/options.orig.txt', 'player/options.txt')
|
os.rename('player/options.orig.txt', 'player/options.txt')
|
||||||
rename = True
|
|
||||||
|
|
||||||
zip_file = zipfile.ZipFile(filename, 'w', zipfile.ZIP_STORED)
|
zip_file = zipfile.ZipFile(filename, 'w', zipfile.ZIP_STORED)
|
||||||
utilities.addFolderToZip(zip_file, 'themes')
|
utilities.addFolderToZip(zip_file, 'themes')
|
||||||
@@ -29,10 +26,6 @@ def createResZipFile(filename):
|
|||||||
utilities.addFolderToZip(zip_file, 'ai')
|
utilities.addFolderToZip(zip_file, 'ai')
|
||||||
zip_file.close()
|
zip_file.close()
|
||||||
|
|
||||||
if rename:
|
|
||||||
os.rename('settings/options.txt', 'settings/options.orig.txt')
|
|
||||||
os.rename('player/options.txt', 'player/options.orig.txt')
|
|
||||||
|
|
||||||
def getFilename():
|
def getFilename():
|
||||||
p = Properties();
|
p = Properties();
|
||||||
p.load(open('../../build.number.properties'));
|
p.load(open('../../build.number.properties'));
|
||||||
@@ -44,17 +37,15 @@ def getFilename():
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
def createStandardResFile(filename):
|
def createStandardResFile():
|
||||||
print('Creating Standard Resource File')
|
print "Creating Standard Resource File"
|
||||||
if not filename:
|
|
||||||
filename = getFilename() + '.zip'
|
filename = getFilename() + '.zip'
|
||||||
createResZipFile( filename )
|
createResZipFile( filename )
|
||||||
print >> sys.stderr, 'Created Resource Package for Standard Distribution: {0}'.format( filename)
|
print >> sys.stderr, 'Created Resource Package for Standard Distribution: {0}'.format( filename)
|
||||||
|
|
||||||
def createIosResFile(filename):
|
def createIosResFile():
|
||||||
print('Preparing Resource Package for iOS')
|
print 'Preparing Resource Package for iOS'
|
||||||
utilities = ZipUtilities()
|
utilities = ZipUtilities()
|
||||||
if not filename:
|
|
||||||
filename = getFilename() + '_iOS.zip'
|
filename = getFilename() + '_iOS.zip'
|
||||||
#createResZipFile( filename )
|
#createResZipFile( filename )
|
||||||
zip_file = zipfile.ZipFile(filename, 'a', zipfile.ZIP_STORED)
|
zip_file = zipfile.ZipFile(filename, 'a', zipfile.ZIP_STORED)
|
||||||
@@ -80,10 +71,10 @@ class ZipUtilities:
|
|||||||
if file != '.svn':
|
if file != '.svn':
|
||||||
full_path = os.path.join(folder, file)
|
full_path = os.path.join(folder, file)
|
||||||
if os.path.isfile(full_path):
|
if os.path.isfile(full_path):
|
||||||
print('File added: ' + str(full_path))
|
print 'File added: ' + str(full_path)
|
||||||
zip_file.write(full_path)
|
zip_file.write(full_path)
|
||||||
elif os.path.isdir(full_path):
|
elif os.path.isdir(full_path):
|
||||||
print('Entering folder: ' + str(full_path))
|
print 'Entering folder: ' + str(full_path)
|
||||||
self.addFolderToZip(zip_file, full_path)
|
self.addFolderToZip(zip_file, full_path)
|
||||||
|
|
||||||
|
|
||||||
@@ -92,17 +83,16 @@ def main():
|
|||||||
|
|
||||||
parser = OptionParser()
|
parser = OptionParser()
|
||||||
parser.add_option("-p", "--platform", help="PLATFORM: specify custom build. (eg ios, android, etc)", metavar="PLATFORM", dest="platform")
|
parser.add_option("-p", "--platform", help="PLATFORM: specify custom build. (eg ios, android, etc)", metavar="PLATFORM", dest="platform")
|
||||||
parser.add_option("-n", "--name", help="NAME: specify resource file name", metavar="NAME", dest="name")
|
|
||||||
|
|
||||||
(options, args) = parser.parse_args()
|
(options, args) = parser.parse_args()
|
||||||
|
|
||||||
if (options.platform):
|
if (options.platform):
|
||||||
if (options.platform == "ios"):
|
if (options.platform == "ios"):
|
||||||
createIosResFile(options.name)
|
createIosResFile()
|
||||||
else:
|
else:
|
||||||
createStandardResFile(options.name)
|
createStandardResFile()
|
||||||
else:
|
else:
|
||||||
createStandardResFile(options.name)
|
createStandardResFile()
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ auto=flashbackrule
|
|||||||
auto=retracerule
|
auto=retracerule
|
||||||
auto=suspendrule
|
auto=suspendrule
|
||||||
auto=morphrule
|
auto=morphrule
|
||||||
auto=playfromgraveyardrule
|
|
||||||
auto=attackrule
|
auto=attackrule
|
||||||
auto=blockrule
|
auto=blockrule
|
||||||
auto=combattriggerrule
|
auto=combattriggerrule
|
||||||
|
|||||||
@@ -1,846 +0,0 @@
|
|||||||
[meta]
|
|
||||||
author=Wagic Team
|
|
||||||
name=Born of the Gods
|
|
||||||
year=2014
|
|
||||||
block=Theros
|
|
||||||
[/meta]
|
|
||||||
[card]
|
|
||||||
primitive=Acolyte's Reward
|
|
||||||
id=378373
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Aerie Worshippers
|
|
||||||
id=378402
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Akroan Conscriptor
|
|
||||||
id=378459
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Akroan Phalanx
|
|
||||||
id=378374
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Akroan Skyguard
|
|
||||||
id=378375
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Arbiter of the Ideal
|
|
||||||
id=378403
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Archetype of Aggression
|
|
||||||
id=378460
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Archetype of Courage
|
|
||||||
id=378376
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Archetype of Endurance
|
|
||||||
id=378488
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Archetype of Finality
|
|
||||||
id=378430
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Archetype of Imagination
|
|
||||||
id=378404
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Ashiok's Adept
|
|
||||||
id=378431
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Aspect of Hydra
|
|
||||||
id=378489
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Asphyxiate
|
|
||||||
id=378432
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Astral Cornucopia
|
|
||||||
id=378529
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Bile Blight
|
|
||||||
id=378433
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Black Oak of Odunos
|
|
||||||
id=378434
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Bolt of Keranos
|
|
||||||
id=378461
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Brimaz, King of Oreskos
|
|
||||||
id=378377
|
|
||||||
rarity=M
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Champion of Stray Souls
|
|
||||||
id=378435
|
|
||||||
rarity=M
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Charging Badger
|
|
||||||
id=378490
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Chorus of the Tides
|
|
||||||
id=378405
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Chromanticore
|
|
||||||
id=378516
|
|
||||||
rarity=M
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Claim of Erebos
|
|
||||||
id=378436
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Courser of Kruphix
|
|
||||||
id=378491
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Crypsis
|
|
||||||
id=378406
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Culling Mark
|
|
||||||
id=378492
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Cyclops of One-Eyed Pass
|
|
||||||
id=378462
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Dawn to Dusk
|
|
||||||
id=378378
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Deepwater Hypnotist
|
|
||||||
id=378407
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Divination
|
|
||||||
id=378408
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Drown in Sorrow
|
|
||||||
id=378437
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Eater of Hope
|
|
||||||
id=378438
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Eidolon of Countless Battles
|
|
||||||
id=378379
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Elite Skirmisher
|
|
||||||
id=378380
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Ephara, God of the Polis
|
|
||||||
id=378517
|
|
||||||
rarity=M
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Ephara's Enlightenment
|
|
||||||
id=378518
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Ephara's Radiance
|
|
||||||
id=378381
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Epiphany Storm
|
|
||||||
id=378463
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Eternity Snare
|
|
||||||
id=378409
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Evanescent Intellect
|
|
||||||
id=378410
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Everflame Eidolon
|
|
||||||
id=378464
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Excoriate
|
|
||||||
id=378382
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Eye Gouge
|
|
||||||
id=378439
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Fall of the Hammer
|
|
||||||
id=378465
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Fanatic of Xenagos
|
|
||||||
id=378519
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Fate Unraveler
|
|
||||||
id=378440
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Fated Conflagration
|
|
||||||
id=378466
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Fated Infatuation
|
|
||||||
id=378411
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Fated Intervention
|
|
||||||
id=378493
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Fated Retribution
|
|
||||||
id=378383
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Fated Return
|
|
||||||
id=378441
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Fearsome Temper
|
|
||||||
id=378467
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Felhide Brawler
|
|
||||||
id=378442
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Felhide Spiritbinder
|
|
||||||
id=378468
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Flame-Wreathed Phoenix
|
|
||||||
id=378469
|
|
||||||
rarity=M
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Flitterstep Eidolon
|
|
||||||
id=378412
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Floodtide Serpent
|
|
||||||
id=378413
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Forgestoker Dragon
|
|
||||||
id=378470
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Forlorn Pseudamma
|
|
||||||
id=378443
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Forsaken Drifters
|
|
||||||
id=378444
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Ghostblade Eidolon
|
|
||||||
id=378384
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Gild
|
|
||||||
id=378445
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Gold
|
|
||||||
id=-378445
|
|
||||||
rarity=T
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Glimpse the Sun God
|
|
||||||
id=378385
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=God-Favored General
|
|
||||||
id=378386
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Gorgon's Head
|
|
||||||
id=378530
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Graverobber Spider
|
|
||||||
id=378494
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Great Hart
|
|
||||||
id=378387
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Griffin Dreamfinder
|
|
||||||
id=378388
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Grisly Transformation
|
|
||||||
id=378446
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Herald of Torment
|
|
||||||
id=378447
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Hero of Iroas
|
|
||||||
id=378389
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Hero of Leina Tower
|
|
||||||
id=378495
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Heroes' Podium
|
|
||||||
id=378531
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Hold at Bay
|
|
||||||
id=378390
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Hunter's Prowess
|
|
||||||
id=378496
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Impetuous Sunchaser
|
|
||||||
id=378471
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Karametra, God of Harvests
|
|
||||||
id=378520
|
|
||||||
rarity=M
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Karametra's Favor
|
|
||||||
id=378497
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Kiora, the Crashing Wave
|
|
||||||
id=378521
|
|
||||||
rarity=M
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Kiora's Prevention
|
|
||||||
id=37852101
|
|
||||||
rarity=T
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Kiora's Kraken
|
|
||||||
id=-378521
|
|
||||||
rarity=T
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Kiora's Follower
|
|
||||||
id=378522
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Kragma Butcher
|
|
||||||
id=378472
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Kraken of the Straits
|
|
||||||
id=378414
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Lightning Volley
|
|
||||||
id=378473
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Loyal Pegasus
|
|
||||||
id=378391
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Marshmist Titan
|
|
||||||
id=378448
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Meletis Astronomer
|
|
||||||
id=378415
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Mindreaver
|
|
||||||
id=378416
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Mischief and Mayhem
|
|
||||||
id=378498
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Mogis, God of Slaughter
|
|
||||||
id=378523
|
|
||||||
rarity=M
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Mortal's Ardor
|
|
||||||
id=378392
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Mortal's Resolve
|
|
||||||
id=378499
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Necrobite
|
|
||||||
id=378449
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Nessian Demolok
|
|
||||||
id=378500
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Nessian Wilds Ravager
|
|
||||||
id=378501
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Noble Quarry
|
|
||||||
id=378502
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Nullify
|
|
||||||
id=378417
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Nyxborn Eidolon
|
|
||||||
id=378450
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Nyxborn Rollicker
|
|
||||||
id=378474
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Nyxborn Shieldmate
|
|
||||||
id=378393
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Nyxborn Triton
|
|
||||||
id=378418
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Nyxborn Wolf
|
|
||||||
id=378503
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Odunos River Trawler
|
|
||||||
id=378451
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Oracle of Bones
|
|
||||||
id=378475
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Oracle's Insight
|
|
||||||
id=378419
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Oreskos Sun Guide
|
|
||||||
id=378394
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Ornitharch
|
|
||||||
id=378395
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Pain Seer
|
|
||||||
id=378452
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Peregrination
|
|
||||||
id=378504
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Perplexing Chimera
|
|
||||||
id=378420
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Pharagax Giant
|
|
||||||
id=378476
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Phenax, God of Deception
|
|
||||||
id=378524
|
|
||||||
rarity=M
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Pheres-Band Raiders
|
|
||||||
id=378505
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Pheres-Band Tromper
|
|
||||||
id=378506
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Pillar of War
|
|
||||||
id=378532
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Pinnacle of Rage
|
|
||||||
id=378477
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Plea for Guidance
|
|
||||||
id=378396
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Ragemonger
|
|
||||||
id=378525
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Raised by Wolves
|
|
||||||
id=378507
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Reap what is Sown
|
|
||||||
id=378526
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Reckless Reveler
|
|
||||||
id=378478
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Retraction Helix
|
|
||||||
id=378421
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Revoke Existence
|
|
||||||
id=378397
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Rise to the Challenge
|
|
||||||
id=378479
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Sanguimancy
|
|
||||||
id=378453
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Satyr Firedancer
|
|
||||||
id=378480
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Satyr Nyx-Smith
|
|
||||||
id=378481
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Satyr Wayfinder
|
|
||||||
id=378508
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Scourge of Skola Vale
|
|
||||||
id=378509
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Scouring Sands
|
|
||||||
id=378482
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Searing Blood
|
|
||||||
id=378483
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Servant of Tymaret
|
|
||||||
id=378454
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Setessan Oathsworn
|
|
||||||
id=378510
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Setessan Starbreaker
|
|
||||||
id=378511
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Shrike Harpy
|
|
||||||
id=378455
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Silent Sentinel
|
|
||||||
id=378398
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Siren of the Fanged Coast
|
|
||||||
id=378422
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Siren of the Silent Song
|
|
||||||
id=378527
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Siren Song Lyre
|
|
||||||
id=378533
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Skyreaping
|
|
||||||
id=378512
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Snake of the Golden Grove
|
|
||||||
id=378513
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Sphinx's Disciple
|
|
||||||
id=378423
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Spirit of the Labyrinth
|
|
||||||
id=378399
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Spiteful Returned
|
|
||||||
id=378456
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Springleaf Drum
|
|
||||||
id=378534
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Stormcaller of Keranos
|
|
||||||
id=378484
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Stratus Walk
|
|
||||||
id=378424
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Sudden Storm
|
|
||||||
id=378425
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Sunbond
|
|
||||||
id=378400
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Swordwise Centaur
|
|
||||||
id=378514
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Temple of Enlightenment
|
|
||||||
id=378535
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Temple of Malice
|
|
||||||
id=378536
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Temple of Plenty
|
|
||||||
id=378537
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Thassa's Rebuff
|
|
||||||
id=378426
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Thunder Brute
|
|
||||||
id=378485
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Thunderous Might
|
|
||||||
id=378486
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Tromokratis
|
|
||||||
id=378427
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Unravel the AEther
|
|
||||||
id=378515
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Vanguard of Brimaz
|
|
||||||
id=378401
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Vortex Elemental
|
|
||||||
id=378428
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Warchanter of Mogis
|
|
||||||
id=378457
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Weight of the Underworld
|
|
||||||
id=378458
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Whelming Wave
|
|
||||||
id=378429
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Whims of the Fates
|
|
||||||
id=378487
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Xenagos, God of Revels
|
|
||||||
id=378528
|
|
||||||
rarity=M
|
|
||||||
[/card]
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,21 +0,0 @@
|
|||||||
<PACK name="Dragons of Tarkir" type="Booster" pool="all set:DTK;" price="700">
|
|
||||||
<slot copies="1">
|
|
||||||
<random_card>rarity:mythic;</random_card>
|
|
||||||
<random_card>rarity:rare;</random_card>
|
|
||||||
<random_card>rarity:rare;</random_card>
|
|
||||||
<random_card>rarity:rare;</random_card>
|
|
||||||
<random_card>rarity:rare;</random_card>
|
|
||||||
<random_card>rarity:rare;</random_card>
|
|
||||||
<random_card>rarity:rare;</random_card>
|
|
||||||
<random_card>rarity:rare;</random_card>
|
|
||||||
</slot>
|
|
||||||
<slot copies="3">
|
|
||||||
<random_card>rarity:uncommon;</random_card>
|
|
||||||
</slot>
|
|
||||||
<slot copies="1">
|
|
||||||
<random_card>rarity:special;</random_card>
|
|
||||||
</slot>
|
|
||||||
<slot copies="10">
|
|
||||||
<random_card>rarity:common;</random_card>
|
|
||||||
</slot>
|
|
||||||
</PACK>
|
|
||||||
@@ -1,934 +0,0 @@
|
|||||||
[meta]
|
|
||||||
author=Wagic Team
|
|
||||||
year=2015
|
|
||||||
[/meta]
|
|
||||||
[card]
|
|
||||||
primitive=Abzan Advantage
|
|
||||||
id=391781
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Abzan Beastmaster
|
|
||||||
id=391782
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Abzan Kin-Guard
|
|
||||||
id=391783
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Abzan Runemark
|
|
||||||
id=391784
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Abzan Skycaptain
|
|
||||||
id=391785
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Ainok Guide
|
|
||||||
id=391786
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Alesha, Who Smiles at Death
|
|
||||||
id=391787
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Alesha's Vanguard
|
|
||||||
id=391788
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Ambush Krotiq
|
|
||||||
id=391789
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Ancestral Vengeance
|
|
||||||
id=391790
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Arashin Cleric
|
|
||||||
id=391791
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Arashin War Beast
|
|
||||||
id=391792
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Arcbond
|
|
||||||
id=391793
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Archers of Qarsi
|
|
||||||
id=391794
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Archfiend of Depravity
|
|
||||||
id=391795
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Atarka, World Render
|
|
||||||
id=391796
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Aven Skirmisher
|
|
||||||
id=391797
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Aven Surveyor
|
|
||||||
id=391798
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Bathe in Dragonfire
|
|
||||||
id=391799
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Battle Brawler
|
|
||||||
id=391800
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Battlefront Krushok
|
|
||||||
id=391801
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Bloodfell Caves
|
|
||||||
id=391802
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Bloodfire Enforcers
|
|
||||||
id=391803
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Blossoming Sands
|
|
||||||
id=391804
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Break Through the Line
|
|
||||||
id=391805
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Brutal Hordechief
|
|
||||||
id=391806
|
|
||||||
rarity=M
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Cached Defenses
|
|
||||||
id=391807
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Channel Harm
|
|
||||||
id=391808
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Citadel Siege
|
|
||||||
id=391809
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Cloudform
|
|
||||||
id=391810
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Collateral Damage
|
|
||||||
id=391811
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Crucible of the Spirit Dragon
|
|
||||||
id=391812
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Crux of Fate
|
|
||||||
id=391813
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Cunning Strike
|
|
||||||
id=391814
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Daghatar the Adamant
|
|
||||||
id=391815
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Dark Deal
|
|
||||||
id=391816
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Defiant Ogre
|
|
||||||
id=391817
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Destructor Dragon
|
|
||||||
id=391818
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Diplomacy of the Wastes
|
|
||||||
id=391819
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Dismal Backwater
|
|
||||||
id=391820
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Douse in Gloom
|
|
||||||
id=391821
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Dragon Bell Monk
|
|
||||||
id=391822
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Dragonrage
|
|
||||||
id=391823
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Dragonscale General
|
|
||||||
id=391824
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Dromoka, the Eternal
|
|
||||||
id=391825
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Elite Scaleguard
|
|
||||||
id=391826
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Enhanced Awareness
|
|
||||||
id=391827
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Ethereal Ambush
|
|
||||||
id=391828
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Fascination
|
|
||||||
id=391829
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Fearsome Awakening
|
|
||||||
id=391830
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Feral Krushok
|
|
||||||
id=391831
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Fierce Invocation
|
|
||||||
id=391832
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Flamerush Rider
|
|
||||||
id=391833
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Flamewake Phoenix
|
|
||||||
id=391834
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Forest
|
|
||||||
id=391836
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Formless Nurturing
|
|
||||||
id=391837
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Friendly Fire
|
|
||||||
id=391838
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Frontier Mastodon
|
|
||||||
id=391839
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Frontier Siege
|
|
||||||
id=391840
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Frost Walker
|
|
||||||
id=391841
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Fruit of the First Tree
|
|
||||||
id=391842
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Ghastly Conscription
|
|
||||||
id=391843
|
|
||||||
rarity=M
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Goblin Boom Keg
|
|
||||||
id=391844
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Goblin Heelcutter
|
|
||||||
id=391845
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Gore Swine
|
|
||||||
id=391846
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Grave Strength
|
|
||||||
id=391847
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Great-Horn Krushok
|
|
||||||
id=391848
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Grim Contest
|
|
||||||
id=391849
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Gurmag Angler
|
|
||||||
id=391850
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Harsh Sustenance
|
|
||||||
id=391851
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Hero's Blade
|
|
||||||
id=391852
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Hewed Stone Retainers
|
|
||||||
id=391853
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Honor's Reward
|
|
||||||
id=391854
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Hooded Assassin
|
|
||||||
id=391855
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Humble Defector
|
|
||||||
id=391856
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Hungering Yeti
|
|
||||||
id=391857
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Hunt the Weak
|
|
||||||
id=391858
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Island
|
|
||||||
id=391859
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Jeskai Barricade
|
|
||||||
id=391861
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Jeskai Infiltrator
|
|
||||||
id=391862
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Jeskai Runemark
|
|
||||||
id=391863
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Jeskai Sage
|
|
||||||
id=391864
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Jungle Hollow
|
|
||||||
id=391865
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Kolaghan, the Storm's Fury
|
|
||||||
id=391866
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Lightform
|
|
||||||
id=391867
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Lightning Shrieker
|
|
||||||
id=391868
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Lotus Path Djinn
|
|
||||||
id=391869
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Lotus-Eye Mystics
|
|
||||||
id=391870
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Map the Wastes
|
|
||||||
id=391871
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Marang River Prowler
|
|
||||||
id=391872
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Mardu Runemark
|
|
||||||
id=391873
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Mardu Scout
|
|
||||||
id=391874
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Mardu Shadowspear
|
|
||||||
id=391875
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Mardu Strike Leader
|
|
||||||
id=391876
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Mardu Woe-Reaper
|
|
||||||
id=391877
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Mastery of the Unseen
|
|
||||||
id=391878
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Merciless Executioner
|
|
||||||
id=391879
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Mindscour Dragon
|
|
||||||
id=391880
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Mistfire Adept
|
|
||||||
id=391881
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Mob Rule
|
|
||||||
id=391882
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Monastery Mentor
|
|
||||||
id=391883
|
|
||||||
rarity=M
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Monk Token
|
|
||||||
id=-391883
|
|
||||||
rarity=T
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Monastery Siege
|
|
||||||
id=391884
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Mountain
|
|
||||||
id=391885
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Neutralizing Blast
|
|
||||||
id=391887
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Noxious Dragon
|
|
||||||
id=391888
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Ojutai, Soul of Winter
|
|
||||||
id=391889
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Orc Sureshot
|
|
||||||
id=391890
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Outpost Siege
|
|
||||||
id=391891
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Palace Siege
|
|
||||||
id=391892
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Pilgrim of the Fires
|
|
||||||
id=391893
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Plains
|
|
||||||
id=391895
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Pressure Point
|
|
||||||
id=391896
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Pyrotechnics
|
|
||||||
id=391897
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Qarsi High Priest
|
|
||||||
id=391898
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Rageform
|
|
||||||
id=391899
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Rakshasa's Disdain
|
|
||||||
id=391900
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Rally the Ancestors
|
|
||||||
id=391901
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Reach of Shadows
|
|
||||||
id=391902
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Reality Shift
|
|
||||||
id=391903
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Refocus
|
|
||||||
id=391904
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Renowned Weaponsmith
|
|
||||||
id=391905
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Return to the Earth
|
|
||||||
id=391906
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Rite of Undoing
|
|
||||||
id=391907
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Rugged Highlands
|
|
||||||
id=391908
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Ruthless Instincts
|
|
||||||
id=391909
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Sage-Eye Avengers
|
|
||||||
id=391911
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Sage's Reverie
|
|
||||||
id=391910
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Sandblast
|
|
||||||
id=391912
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Sandsteppe Mastodon
|
|
||||||
id=391913
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Sandsteppe Outcast
|
|
||||||
id=391914
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Scoured Barrens
|
|
||||||
id=391915
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Scroll of the Masters
|
|
||||||
id=391916
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Shaman of the Great Hunt
|
|
||||||
id=391917
|
|
||||||
rarity=M
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Shamanic Revelation
|
|
||||||
id=391918
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Shifting Loyalties
|
|
||||||
id=391919
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Shockmaw Dragon
|
|
||||||
id=391920
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Shu Yun, the Silent Tempest
|
|
||||||
id=391921
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Sibsig Host
|
|
||||||
id=391922
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Sibsig Muckdraggers
|
|
||||||
id=391923
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Silumgar, the Drifting Death
|
|
||||||
id=391924
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Smoldering Efreet
|
|
||||||
id=391925
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Soul Summons
|
|
||||||
id=391926
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Soulfire Grand Master
|
|
||||||
id=391927
|
|
||||||
rarity=M
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Soulflayer
|
|
||||||
id=391928
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Sudden Reclamation
|
|
||||||
id=391929
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Sultai Emissary
|
|
||||||
id=391930
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Sultai Runemark
|
|
||||||
id=391931
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Sultai Skullkeeper
|
|
||||||
id=391932
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Supplant Form
|
|
||||||
id=391933
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Swamp
|
|
||||||
id=391934
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Swiftwater Cliffs
|
|
||||||
id=391936
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Tasigur, the Golden Fang
|
|
||||||
id=391937
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Tasigur's Cruelty
|
|
||||||
id=391938
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Temporal Trespass
|
|
||||||
id=391939
|
|
||||||
rarity=M
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Temur Battle Rage
|
|
||||||
id=391940
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Temur Runemark
|
|
||||||
id=391941
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Temur Sabertooth
|
|
||||||
id=391942
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Temur War Shaman
|
|
||||||
id=391943
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Thornwood Falls
|
|
||||||
id=391944
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Torrent Elemental
|
|
||||||
id=391945
|
|
||||||
rarity=M
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Tranquil Cove
|
|
||||||
id=391946
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Typhoid Rats
|
|
||||||
id=391947
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Ugin, the Spirit Dragon
|
|
||||||
id=391948
|
|
||||||
rarity=M
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Ugin's Construct
|
|
||||||
id=391949
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Valorous Stance
|
|
||||||
id=391950
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Vaultbreaker
|
|
||||||
id=391951
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Wandering Champion
|
|
||||||
id=391952
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=War Flare
|
|
||||||
id=391953
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Warden of the First Tree
|
|
||||||
id=391954
|
|
||||||
rarity=M
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Wardscale Dragon
|
|
||||||
id=391955
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Whisk Away
|
|
||||||
id=391956
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Whisperer of the Wilds
|
|
||||||
id=391957
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Whisperwood Elemental
|
|
||||||
id=391958
|
|
||||||
rarity=M
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Wild Slash
|
|
||||||
id=391959
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Wildcall
|
|
||||||
id=391960
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Will of the Naga
|
|
||||||
id=391961
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Winds of Qal Sisma
|
|
||||||
id=391962
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Wind-Scarred Crag
|
|
||||||
id=391963
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Write into Being
|
|
||||||
id=391964
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Yasova Dragonclaw
|
|
||||||
id=391965
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Forest
|
|
||||||
id=391835
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Island
|
|
||||||
id=391860
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Mountain
|
|
||||||
id=391886
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Plains
|
|
||||||
id=391894
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Swamp
|
|
||||||
id=391935
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
<PACK name="Fate Reforged" type="Booster" pool="all set:FRF;" price="700">
|
|
||||||
<slot copies="1">
|
|
||||||
<random_card>rarity:mythic;</random_card>
|
|
||||||
<random_card>rarity:rare;</random_card>
|
|
||||||
<random_card>rarity:rare;</random_card>
|
|
||||||
<random_card>rarity:rare;</random_card>
|
|
||||||
<random_card>rarity:rare;</random_card>
|
|
||||||
<random_card>rarity:rare;</random_card>
|
|
||||||
<random_card>rarity:rare;</random_card>
|
|
||||||
<random_card>rarity:rare;</random_card>
|
|
||||||
</slot>
|
|
||||||
<slot copies="3">
|
|
||||||
<random_card>rarity:uncommon;</random_card>
|
|
||||||
</slot>
|
|
||||||
<slot copies="1">
|
|
||||||
<random_card>rarity:special;</random_card>
|
|
||||||
</slot>
|
|
||||||
<slot copies="10">
|
|
||||||
<random_card>rarity:common;</random_card>
|
|
||||||
</slot>
|
|
||||||
</PACK>
|
|
||||||
@@ -1,830 +0,0 @@
|
|||||||
[meta]
|
|
||||||
author=Wagic Team
|
|
||||||
year=2014
|
|
||||||
block=Theros
|
|
||||||
[/meta]
|
|
||||||
[card]
|
|
||||||
primitive=Aegis of the Gods
|
|
||||||
id=380364
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Aerial Formation
|
|
||||||
id=380365
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Agent of Erebos
|
|
||||||
id=380366
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Ajani, Mentor of Heroes
|
|
||||||
id=380367
|
|
||||||
rarity=M
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Ajani's Presence
|
|
||||||
id=380368
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Akroan Line Breaker
|
|
||||||
id=380369
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Akroan Mastiff
|
|
||||||
id=380370
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Armament of Nyx
|
|
||||||
id=380371
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Armory of Iroas
|
|
||||||
id=380372
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Aspect of Gorgon
|
|
||||||
id=380373
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Athreos, God of Passage
|
|
||||||
id=380374
|
|
||||||
rarity=M
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Banishing Light
|
|
||||||
id=380375
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Bassara Tower Archer
|
|
||||||
id=380376
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Battlefield Thaumaturge
|
|
||||||
id=380377
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Bearer of the Heavens
|
|
||||||
id=380378
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Bladetusk Boar
|
|
||||||
id=380379
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Blinding Flare
|
|
||||||
id=380380
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Bloodcrazed Hoplite
|
|
||||||
id=380381
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Brain Maggot
|
|
||||||
id=380382
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Cast into Darkness
|
|
||||||
id=380383
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Chariot of Victory
|
|
||||||
id=380384
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Cloaked Siren
|
|
||||||
id=380385
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Colossal Heroics
|
|
||||||
id=380386
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Consign to Dust
|
|
||||||
id=380387
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Countermand
|
|
||||||
id=380388
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Cruel Feeding
|
|
||||||
id=380389
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Crystalline Nautilus
|
|
||||||
id=380390
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Cyclops of Eternal Fury
|
|
||||||
id=380391
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Dakra Mystic
|
|
||||||
id=380392
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Daring Thief
|
|
||||||
id=380393
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Dawnbringer Charioteers
|
|
||||||
id=380394
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Deicide
|
|
||||||
id=380395
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Desecration Plague
|
|
||||||
id=380396
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Deserter's Quarters
|
|
||||||
id=380397
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Desperate Stand
|
|
||||||
id=380398
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Dictate of Erebos
|
|
||||||
id=380399
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Dictate of Heliod
|
|
||||||
id=380400
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Dictate of Karametra
|
|
||||||
id=380401
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Dictate of Kruphix
|
|
||||||
id=380402
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Dictate of the Twin Gods
|
|
||||||
id=380403
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Disciple of Deceit
|
|
||||||
id=380404
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Doomwake Giant
|
|
||||||
id=380405
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Dreadbringer Lampads
|
|
||||||
id=380406
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Eagle of the Watch
|
|
||||||
id=380407
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Eidolon of Blossoms
|
|
||||||
id=380408
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Eidolon of Rhetoric
|
|
||||||
id=380409
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Eidolon of the Great Revel
|
|
||||||
id=380410
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Extinguish All Hope
|
|
||||||
id=380411
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Feast of Dreams
|
|
||||||
id=380412
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Felhide Petrifier
|
|
||||||
id=380413
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Flamespeaker's Will
|
|
||||||
id=380414
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Fleetfeather Cockatrice
|
|
||||||
id=380415
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Flurry of Horns
|
|
||||||
id=380416
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Font of Fertility
|
|
||||||
id=380417
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Font of Fortunes
|
|
||||||
id=380418
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Font of Ire
|
|
||||||
id=380419
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Font of Return
|
|
||||||
id=380420
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Font of Vigor
|
|
||||||
id=380421
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Forgeborn Oreads
|
|
||||||
id=380422
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Gluttonous Cyclops
|
|
||||||
id=380423
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Gnarled Scarhide
|
|
||||||
id=380424
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Godhunter Octopus
|
|
||||||
id=380425
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Godsend
|
|
||||||
id=380426
|
|
||||||
rarity=M
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Golden Hind
|
|
||||||
id=380427
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Goldenhide Ox
|
|
||||||
id=380428
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Gold-Forged Sentinel
|
|
||||||
id=380429
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Grim Guardian
|
|
||||||
id=380430
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Hall of Triumph
|
|
||||||
id=380431
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Harness by Force
|
|
||||||
id=380432
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Harvestguard Alseids
|
|
||||||
id=380433
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Heroes' Bane
|
|
||||||
id=380434
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Hour of Need
|
|
||||||
id=380435
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Hubris
|
|
||||||
id=380436
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Humbler of Mortals
|
|
||||||
id=380437
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Hydra Broodmaster
|
|
||||||
id=380438
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Hypnotic Siren
|
|
||||||
id=380439
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Interpret the Signs
|
|
||||||
id=380440
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Iroas, God of Victory
|
|
||||||
id=380441
|
|
||||||
rarity=M
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Keranos, God of Storms
|
|
||||||
id=380442
|
|
||||||
rarity=M
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=King Macar, the Gold-Cursed
|
|
||||||
id=380443
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Kiora's Dismissal
|
|
||||||
id=380444
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Knowledge and Power
|
|
||||||
id=380445
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Kruphix, God of Horizons
|
|
||||||
id=380446
|
|
||||||
rarity=M
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Kruphix's Insight
|
|
||||||
id=380447
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Lagonna-Band Trailblazer
|
|
||||||
id=380448
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Launch the Fleet
|
|
||||||
id=380449
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Leonin Iconoclast
|
|
||||||
id=380450
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Lightning Diadem
|
|
||||||
id=380451
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Magma Spray
|
|
||||||
id=380452
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Mana Confluence
|
|
||||||
id=380453
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Market Festival
|
|
||||||
id=380454
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Master of the Feast
|
|
||||||
id=380455
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Mogis's Warhound
|
|
||||||
id=380456
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Mortal Obstinacy
|
|
||||||
id=380457
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Nature's Panoply
|
|
||||||
id=380458
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Nessian Game Warden
|
|
||||||
id=380459
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Nightmarish End
|
|
||||||
id=380460
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Nyx Infusion
|
|
||||||
id=380461
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Nyx Weaver
|
|
||||||
id=380462
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Nyx-Fleece Ram
|
|
||||||
id=380463
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Oakheart Dryads
|
|
||||||
id=380464
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Oppressive Rays
|
|
||||||
id=380465
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Oreskos Swiftclaw
|
|
||||||
id=380466
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Pensive Minotaur
|
|
||||||
id=380467
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Phalanx Formation
|
|
||||||
id=380468
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Pharika, God of Affliction
|
|
||||||
id=380469
|
|
||||||
rarity=M
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Pharika's Chosen
|
|
||||||
id=380470
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Pheres-Band Thunderhoof
|
|
||||||
id=380471
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Pheres-Band Warchief
|
|
||||||
id=380472
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Pin to the Earth
|
|
||||||
id=380473
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Polymorphous Rush
|
|
||||||
id=380474
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Prophetic Flamespeaker
|
|
||||||
id=380475
|
|
||||||
rarity=M
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Pull from the Deep
|
|
||||||
id=380476
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Quarry Colossus
|
|
||||||
id=380477
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Ravenous Leucrocota
|
|
||||||
id=380478
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Renowned Weaver
|
|
||||||
id=380479
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Reprisal
|
|
||||||
id=380480
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Returned Reveler
|
|
||||||
id=380481
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Revel of the Fallen God
|
|
||||||
id=380482
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Reviving Melody
|
|
||||||
id=380483
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Riddle of Lightning
|
|
||||||
id=380484
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Riptide Chimera
|
|
||||||
id=380485
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Rise of Eagles
|
|
||||||
id=380486
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Ritual of the Returned
|
|
||||||
id=380487
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Rollick of Abandon
|
|
||||||
id=380488
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Rotted Hulk
|
|
||||||
id=380489
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Rouse the Mob
|
|
||||||
id=380490
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Sage of Hours
|
|
||||||
id=380491
|
|
||||||
rarity=M
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Satyr Grovedancer
|
|
||||||
id=380492
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Satyr Hoplite
|
|
||||||
id=380493
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Scourge of Fleets
|
|
||||||
id=380494
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Setessan Tactics
|
|
||||||
id=380495
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Sightless Brawler
|
|
||||||
id=380496
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Sigiled Skink
|
|
||||||
id=380497
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Sigiled Starfish
|
|
||||||
id=380498
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Silence the Believers
|
|
||||||
id=380499
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Skybind
|
|
||||||
id=380500
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Skyspear Cavalry
|
|
||||||
id=380501
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Solidarity of Heroes
|
|
||||||
id=380502
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Spawn of Thraxes
|
|
||||||
id=380503
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Spirespine
|
|
||||||
id=380504
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Spite of Mogis
|
|
||||||
id=380505
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Spiteful Blow
|
|
||||||
id=380506
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Squelching Leeches
|
|
||||||
id=380507
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Starfall
|
|
||||||
id=380508
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Stonewise Fortifier
|
|
||||||
id=380509
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Stormchaser Chimera
|
|
||||||
id=380510
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Strength from the Fallen
|
|
||||||
id=380511
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Supply-Line Cranes
|
|
||||||
id=380512
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Swarmborn Giant
|
|
||||||
id=380513
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Temple of Epiphany
|
|
||||||
id=380514
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Temple of Malady
|
|
||||||
id=380515
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Tethmos High Priest
|
|
||||||
id=380516
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Thassa's Devourer
|
|
||||||
id=380517
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Thassa's Ire
|
|
||||||
id=380518
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Thoughtrender Lamia
|
|
||||||
id=380519
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Tormented Thoughts
|
|
||||||
id=380520
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Triton Cavalry
|
|
||||||
id=380521
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Triton Shorestalker
|
|
||||||
id=380522
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Twinflame
|
|
||||||
id=380523
|
|
||||||
rarity=R
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Underworld Coinsmith
|
|
||||||
id=380524
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=War-Wing Siren
|
|
||||||
id=380525
|
|
||||||
rarity=C
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Whitewater Naiads
|
|
||||||
id=380526
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Wildfire Cerberus
|
|
||||||
id=380527
|
|
||||||
rarity=U
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
primitive=Worst Fears
|
|
||||||
id=380528
|
|
||||||
rarity=M
|
|
||||||
[/card]
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
<PACK name="Journey Into Nyx" type="Booster" pool="all set:JOU;" price="700">
|
|
||||||
<slot copies="1">
|
|
||||||
<random_card>rarity:mythic;</random_card>
|
|
||||||
<random_card>rarity:rare;</random_card>
|
|
||||||
<random_card>rarity:rare;</random_card>
|
|
||||||
<random_card>rarity:rare;</random_card>
|
|
||||||
<random_card>rarity:rare;</random_card>
|
|
||||||
<random_card>rarity:rare;</random_card>
|
|
||||||
<random_card>rarity:rare;</random_card>
|
|
||||||
<random_card>rarity:rare;</random_card>
|
|
||||||
</slot>
|
|
||||||
<slot copies="3">
|
|
||||||
<random_card>rarity:uncommon;</random_card>
|
|
||||||
</slot>
|
|
||||||
<slot copies="1">
|
|
||||||
<random_card>rarity:special;</random_card>
|
|
||||||
</slot>
|
|
||||||
<slot copies="10">
|
|
||||||
<random_card>rarity:common;</random_card>
|
|
||||||
</slot>
|
|
||||||
</PACK>
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,21 +0,0 @@
|
|||||||
<PACK name="Khans of Tarkir" type="Booster" pool="all set:KTK;" price="700">
|
|
||||||
<slot copies="1">
|
|
||||||
<random_card>rarity:mythic;</random_card>
|
|
||||||
<random_card>rarity:rare;</random_card>
|
|
||||||
<random_card>rarity:rare;</random_card>
|
|
||||||
<random_card>rarity:rare;</random_card>
|
|
||||||
<random_card>rarity:rare;</random_card>
|
|
||||||
<random_card>rarity:rare;</random_card>
|
|
||||||
<random_card>rarity:rare;</random_card>
|
|
||||||
<random_card>rarity:rare;</random_card>
|
|
||||||
</slot>
|
|
||||||
<slot copies="3">
|
|
||||||
<random_card>rarity:uncommon;</random_card>
|
|
||||||
</slot>
|
|
||||||
<slot copies="1">
|
|
||||||
<random_card>rarity:special;</random_card>
|
|
||||||
</slot>
|
|
||||||
<slot copies="10">
|
|
||||||
<random_card>rarity:common;</random_card>
|
|
||||||
</slot>
|
|
||||||
</PACK>
|
|
||||||
@@ -1248,8 +1248,3 @@ primitive=Zombie Goliath
|
|||||||
id=190545
|
id=190545
|
||||||
rarity=C
|
rarity=C
|
||||||
[/card]
|
[/card]
|
||||||
[card]
|
|
||||||
primitive=Avatar Token
|
|
||||||
id=-191239
|
|
||||||
rarity=T
|
|
||||||
[/card]
|
|
||||||
|
|||||||
@@ -1258,8 +1258,3 @@ primitive=Yavimaya Wurm
|
|||||||
id=205221
|
id=205221
|
||||||
rarity=C
|
rarity=C
|
||||||
[/card]
|
[/card]
|
||||||
[card]
|
|
||||||
primitive=Avatar Token
|
|
||||||
id=-205957
|
|
||||||
rarity=T
|
|
||||||
[/card]
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -86,6 +86,17 @@ mana={5}{U}
|
|||||||
type=Sorcery
|
type=Sorcery
|
||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
|
name=Gravecrawler
|
||||||
|
abilities=cantblock
|
||||||
|
autograveyard=aslongas(zombie|myBattlefield) {B}:name(cast from graveyard) activate name(cast from graveyard) castcard(normal) assorcery
|
||||||
|
text=Gravecrawler can't block. -- You may cast Gravecrawler from your graveyard as long as you control a Zombie.
|
||||||
|
mana={B}
|
||||||
|
type=Creature
|
||||||
|
subtype=Zombie
|
||||||
|
power=2
|
||||||
|
toughness=1
|
||||||
|
[/card]
|
||||||
|
[card]
|
||||||
name=Ivy Seer
|
name=Ivy Seer
|
||||||
auto={2}{G}{T}:foreach(*[green]|myhand) 1/1 target(creature)
|
auto={2}{G}{T}:foreach(*[green]|myhand) 1/1 target(creature)
|
||||||
text={2}{G}, {T}: Reveal any number of green cards in your hand. Target creature gets +X/+X until end of turn, where X is the number of cards revealed this way.
|
text={2}{G}, {T}: Reveal any number of green cards in your hand. Target creature gets +X/+X until end of turn, where X is the number of cards revealed this way.
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -3187,6 +3187,19 @@ mana={2}
|
|||||||
type=Artifact
|
type=Artifact
|
||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
|
name=Crucible of Worlds
|
||||||
|
auto={0}:may moveTo(myBattlefield) target(land|mygraveyard) limit:1 myTurnOnly
|
||||||
|
# Above line does not work: "May moveto" from graveyards does
|
||||||
|
# not work due to interface issues. The "limit:1" doesn't work
|
||||||
|
# here either. Even if both worked, then the card would allow
|
||||||
|
# you to play lands *in addition* to the 1 land you can play per
|
||||||
|
# turn. Instead it should just give you the option to play this
|
||||||
|
# 1 land from your hand or your graveyard.
|
||||||
|
text=You may play land cards from your graveyard.
|
||||||
|
mana={3}
|
||||||
|
type=Artifact
|
||||||
|
[/card]
|
||||||
|
[card]
|
||||||
name=Cruel Deceiver
|
name=Cruel Deceiver
|
||||||
text={1}: Look at the top card of your library. -- {2}: Reveal the top card of your library. If it's a land card, Cruel Deceiver gains "Whenever Cruel Deceiver deals damage to a creature, destroy that creature" until end of turn. Activate this ability only once each turn.
|
text={1}: Look at the top card of your library. -- {2}: Reveal the top card of your library. If it's a land card, Cruel Deceiver gains "Whenever Cruel Deceiver deals damage to a creature, destroy that creature" until end of turn. Activate this ability only once each turn.
|
||||||
mana={1}{B}
|
mana={1}{B}
|
||||||
@@ -4149,6 +4162,15 @@ mana={U}{U}
|
|||||||
type=Sorcery
|
type=Sorcery
|
||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
|
name=Draining Whelk
|
||||||
|
text=Flash (You may cast this spell any time you could cast an instant.) -- Flying -- When Draining Whelk enters the battlefield, counter target spell. Put X +1/+1 counters on Draining Whelk, where X is that spell's converted mana cost.
|
||||||
|
mana={4}{U}{U}
|
||||||
|
type=Creature
|
||||||
|
subtype=Illusion
|
||||||
|
power=1
|
||||||
|
toughness=1
|
||||||
|
[/card]
|
||||||
|
[card]
|
||||||
name=Drake Umbra
|
name=Drake Umbra
|
||||||
mana={4}{U}
|
mana={4}{U}
|
||||||
type=Enchantment
|
type=Enchantment
|
||||||
@@ -7036,6 +7058,16 @@ mana={2}{G}
|
|||||||
type=Enchantment
|
type=Enchantment
|
||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
|
name=Heartlash Cinder
|
||||||
|
abilities=haste
|
||||||
|
text=Haste -- Chroma - When Heartlash Cinder enters the battlefield, it gets +X/+0 until end of turn, where X is the number of red mana symbols in the mana costs of permanents you control.
|
||||||
|
mana={1}{R}
|
||||||
|
type=Creature
|
||||||
|
subtype=Elemental Warrior
|
||||||
|
power=1
|
||||||
|
toughness=1
|
||||||
|
[/card]
|
||||||
|
[card]
|
||||||
name=Heartstone
|
name=Heartstone
|
||||||
text=Activated abilities of creatures cost {1} less to activate. This effect can't reduce the amount of mana an ability costs to activate to less than one mana.
|
text=Activated abilities of creatures cost {1} less to activate. This effect can't reduce the amount of mana an ability costs to activate to less than one mana.
|
||||||
mana={3}
|
mana={3}
|
||||||
@@ -7667,6 +7699,12 @@ type=Instant
|
|||||||
text=As an additional cost to cast Induce Despair, reveal a creature card from your hand. Target creature gets -X/-X until end of turn, where X is the revealed card's converted mana cost.
|
text=As an additional cost to cast Induce Despair, reveal a creature card from your hand. Target creature gets -X/-X until end of turn, where X is the revealed card's converted mana cost.
|
||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
|
name=Induce Paranoia
|
||||||
|
text=Counter target spell. If {B} was spent to cast Induce Paranoia, that spell's controller puts the top X cards of his or her library into his or her graveyard, where X is the spell's converted mana cost.
|
||||||
|
mana={2}{U}{U}
|
||||||
|
type=Instant
|
||||||
|
[/card]
|
||||||
|
[card]
|
||||||
name=Inescapable Brute
|
name=Inescapable Brute
|
||||||
text=Wither (This deals damage to creatures in the form of -1/-1 counters.) -- Inescapable Brute must be blocked if able.
|
text=Wither (This deals damage to creatures in the form of -1/-1 counters.) -- Inescapable Brute must be blocked if able.
|
||||||
mana={5}{R}
|
mana={5}{R}
|
||||||
@@ -11465,6 +11503,15 @@ mana={X}{R}
|
|||||||
type=Instant
|
type=Instant
|
||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
|
name=Outrage Shaman
|
||||||
|
text=Chroma - When Outrage Shaman enters the battlefield, it deals damage to target creature equal to the number of red mana symbols in the mana costs of permanents you control.
|
||||||
|
mana={3}{R}{R}
|
||||||
|
type=Creature
|
||||||
|
subtype=Goblin Shaman
|
||||||
|
power=2
|
||||||
|
toughness=2
|
||||||
|
[/card]
|
||||||
|
[card]
|
||||||
name=Outrider en-Kor
|
name=Outrider en-Kor
|
||||||
text=Flanking (Whenever a creature without flanking blocks this creature, the blocking creature gets -1/-1 until end of turn.) -- {0}: The next 1 damage that would be dealt to Outrider en-Kor this turn is dealt to target creature you control instead.
|
text=Flanking (Whenever a creature without flanking blocks this creature, the blocking creature gets -1/-1 until end of turn.) -- {0}: The next 1 damage that would be dealt to Outrider en-Kor this turn is dealt to target creature you control instead.
|
||||||
mana={2}{W}
|
mana={2}{W}
|
||||||
@@ -12316,6 +12363,15 @@ power=2
|
|||||||
toughness=2
|
toughness=2
|
||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
|
name=Primalcrux
|
||||||
|
text=Trample -- Chroma - Primalcrux's power and toughness are each equal to the number of green mana symbols in the mana costs of permanents you control.
|
||||||
|
mana={G}{G}{G}{G}{G}{G}
|
||||||
|
type=Creature
|
||||||
|
subtype=Elemental
|
||||||
|
power=*
|
||||||
|
toughness=*
|
||||||
|
[/card]
|
||||||
|
[card]
|
||||||
name=Primitive Etchings
|
name=Primitive Etchings
|
||||||
text=Reveal the first card you draw each turn. Whenever you reveal a creature card this way, draw a card.
|
text=Reveal the first card you draw each turn. Whenever you reveal a creature card this way, draw a card.
|
||||||
mana={2}{G}{G}
|
mana={2}{G}{G}
|
||||||
@@ -12862,6 +12918,13 @@ mana={R}{R}
|
|||||||
type=Enchantment
|
type=Enchantment
|
||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
|
name=Ral Zarek
|
||||||
|
text=+1: Tap target permanent, then untap another target permanent. -- -2: Ral Zarek deals 3 damage to target creature or player. -- -7: Flip five coins. Take an extra turn after this one for each coin that comes up heads.
|
||||||
|
mana={2}{U}{R}
|
||||||
|
type=Planeswalker
|
||||||
|
subtype=Ral
|
||||||
|
[/card]
|
||||||
|
[card]
|
||||||
name=Raiding Party
|
name=Raiding Party
|
||||||
text=Raiding Party can't be the target of white spells or abilities from white sources. -- Sacrifice an Orc: Each player may tap any number of untapped white creatures he or she controls. For each creature tapped this way, that player chooses up to two Plains. Then destroy all Plains that weren't chosen this way by any player.
|
text=Raiding Party can't be the target of white spells or abilities from white sources. -- Sacrifice an Orc: Each player may tap any number of untapped white creatures he or she controls. For each creature tapped this way, that player chooses up to two Plains. Then destroy all Plains that weren't chosen this way by any player.
|
||||||
mana={2}{R}
|
mana={2}{R}
|
||||||
@@ -14491,6 +14554,12 @@ mana={W}
|
|||||||
type=Enchantment
|
type=Enchantment
|
||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
|
name=Serum Powder
|
||||||
|
text={T}: Add {1} to your mana pool. -- Any time you could mulligan and Serum Powder is in your hand, you may exile all the cards from your hand, then draw that many cards. (You can do this in addition to taking mulligans.)
|
||||||
|
mana={3}
|
||||||
|
type=Artifact
|
||||||
|
[/card]
|
||||||
|
[card]
|
||||||
name=Serum Visions
|
name=Serum Visions
|
||||||
text=Draw a card. -- Scry 2. (To scry 2, look at the top two cards of your library, then put any number of them on the bottom of your library and the rest on top in any order.)
|
text=Draw a card. -- Scry 2. (To scry 2, look at the top two cards of your library, then put any number of them on the bottom of your library and the rest on top in any order.)
|
||||||
mana={U}
|
mana={U}
|
||||||
@@ -15774,6 +15843,15 @@ text={T}: Add {1} to your mana pool. -- {4}, {T}: Put a 0/1 white Goat creature
|
|||||||
type=Land
|
type=Land
|
||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
|
name=Springjack Shepherd
|
||||||
|
text=Chroma - When Springjack Shepherd enters the battlefield, put a 0/1 white Goat creature token onto the battlefield for each white mana symbol in the mana costs of permanents you control.
|
||||||
|
mana={3}{W}
|
||||||
|
type=Creature
|
||||||
|
subtype=Kithkin Wizard
|
||||||
|
power=1
|
||||||
|
toughness=2
|
||||||
|
[/card]
|
||||||
|
[card]
|
||||||
name=Sprout Swarm
|
name=Sprout Swarm
|
||||||
text=Convoke (Each creature you tap while casting this spell reduces its total cost by {1} or by one mana of that creature's color.) -- Buyback {3} (You may pay an additional {3} as you cast this spell. If you do, put this card into your hand as it resolves.) -- Put a 1/1 green Saproling creature token onto the battlefield.
|
text=Convoke (Each creature you tap while casting this spell reduces its total cost by {1} or by one mana of that creature's color.) -- Buyback {3} (You may pay an additional {3} as you cast this spell. If you do, put this card into your hand as it resolves.) -- Put a 1/1 green Saproling creature token onto the battlefield.
|
||||||
mana={1}{G}
|
mana={1}{G}
|
||||||
@@ -17566,6 +17644,15 @@ toughness=2
|
|||||||
text=Auras attached to permanents you control have totem armor. (If an enchanted permanent you control would be destroyed, instead remove all damage from it and destroy an Aura attached to it.)
|
text=Auras attached to permanents you control have totem armor. (If an enchanted permanent you control would be destroyed, instead remove all damage from it and destroy an Aura attached to it.)
|
||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
|
name=Umbra Stalker
|
||||||
|
text=Chroma - Umbra Stalker's power and toughness are each equal to the number of black mana symbols in the mana costs of cards in your graveyard.
|
||||||
|
mana={4}{B}{B}{B}
|
||||||
|
type=Creature
|
||||||
|
subtype=Elemental
|
||||||
|
power=*
|
||||||
|
toughness=*
|
||||||
|
[/card]
|
||||||
|
[card]
|
||||||
name=Unblinking Bleb
|
name=Unblinking Bleb
|
||||||
text=Morph {2}{U} (You may cast this face down as a 2/2 creature for {3}. Turn it face up any time for its morph cost.) -- Whenever Unblinking Bleb or another permanent is turned face up, you may scry 2. (To scry 2, look at the top two cards of your library, then put any number of them on the bottom of your library and the rest on top in any order.)
|
text=Morph {2}{U} (You may cast this face down as a 2/2 creature for {3}. Turn it face up any time for its morph cost.) -- Whenever Unblinking Bleb or another permanent is turned face up, you may scry 2. (To scry 2, look at the top two cards of your library, then put any number of them on the bottom of your library and the rest on top in any order.)
|
||||||
mana={3}{U}
|
mana={3}{U}
|
||||||
|
|||||||
@@ -204,7 +204,6 @@ brass_man.txt
|
|||||||
brass_man_i161.txt
|
brass_man_i161.txt
|
||||||
briarhorn.txt
|
briarhorn.txt
|
||||||
bringer_of_the_red_dawn.txt
|
bringer_of_the_red_dawn.txt
|
||||||
buyback.txt
|
|
||||||
cage_of_hands.txt
|
cage_of_hands.txt
|
||||||
Call_to_Heel_1.txt
|
Call_to_Heel_1.txt
|
||||||
Call_to_Heel_2.txt
|
Call_to_Heel_2.txt
|
||||||
@@ -250,7 +249,6 @@ curiosity2_i217.txt
|
|||||||
crimson_kobolds.txt
|
crimson_kobolds.txt
|
||||||
crosis_s_catacombs_1.txt
|
crosis_s_catacombs_1.txt
|
||||||
crosis_s_catacombs_2.txt
|
crosis_s_catacombs_2.txt
|
||||||
crucible_of_worlds.txt
|
|
||||||
crumble.txt
|
crumble.txt
|
||||||
crystal_rod_i172.txt
|
crystal_rod_i172.txt
|
||||||
cursed_land1_i188.txt
|
cursed_land1_i188.txt
|
||||||
@@ -309,9 +307,6 @@ evil_presence3.txt
|
|||||||
evil_presence_i647.txt
|
evil_presence_i647.txt
|
||||||
evil_presence_i647_2.txt
|
evil_presence_i647_2.txt
|
||||||
exaltedsourcekilled.txt
|
exaltedsourcekilled.txt
|
||||||
executioners_swing.txt
|
|
||||||
executioners_swing2.txt
|
|
||||||
executioners_swing3.txt
|
|
||||||
explore.txt
|
explore.txt
|
||||||
Faceless_Butcher.txt
|
Faceless_Butcher.txt
|
||||||
fading.txt
|
fading.txt
|
||||||
@@ -345,7 +340,6 @@ foratog.txt
|
|||||||
force_of_nature.txt
|
force_of_nature.txt
|
||||||
force_of_nature2.txt
|
force_of_nature2.txt
|
||||||
force_of_nature3.txt
|
force_of_nature3.txt
|
||||||
formidable.txt
|
|
||||||
fountain_of_youth.txt
|
fountain_of_youth.txt
|
||||||
Frogmite.txt
|
Frogmite.txt
|
||||||
fungus_sliver.txt
|
fungus_sliver.txt
|
||||||
@@ -662,8 +656,6 @@ tidal_warrior_i649.txt
|
|||||||
tidal_warrior_i652.txt
|
tidal_warrior_i652.txt
|
||||||
Timely_Reinforcements.txt
|
Timely_Reinforcements.txt
|
||||||
titanic_ultimatum.txt
|
titanic_ultimatum.txt
|
||||||
tokenizer.txt
|
|
||||||
tokenizer2.txt
|
|
||||||
torture.txt
|
torture.txt
|
||||||
tranquil_domain.txt
|
tranquil_domain.txt
|
||||||
turn_to_slag.txt
|
turn_to_slag.txt
|
||||||
@@ -717,5 +709,4 @@ momir/overcost.txt
|
|||||||
#AI Tests
|
#AI Tests
|
||||||
########################
|
########################
|
||||||
ai/goblin_artillery.txt
|
ai/goblin_artillery.txt
|
||||||
#I don’t understand why this test works, and it breaks the redo, so I deactivate it.
|
ai/proliferate_simple.txt
|
||||||
#ai/proliferate_simple.txt
|
|
||||||
|
|||||||
@@ -1,30 +0,0 @@
|
|||||||
# Cast card once with buyback and second time without.
|
|
||||||
# The card must be in the graveyard, not in the hand
|
|
||||||
[INIT]
|
|
||||||
FIRSTMAIN
|
|
||||||
|
|
||||||
[PLAYER1]
|
|
||||||
hand:Capsize
|
|
||||||
manapool:{5}{U}{U}{U}{U}
|
|
||||||
|
|
||||||
[PLAYER2]
|
|
||||||
inplay:Swamp,Island
|
|
||||||
|
|
||||||
[DO]
|
|
||||||
Capsize
|
|
||||||
# pay buyback
|
|
||||||
choice 1
|
|
||||||
Swamp
|
|
||||||
Capsize
|
|
||||||
Island
|
|
||||||
|
|
||||||
[ASSERT]
|
|
||||||
FIRSTMAIN
|
|
||||||
|
|
||||||
[PLAYER1]
|
|
||||||
graveyard:Capsize
|
|
||||||
|
|
||||||
[PLAYER2]
|
|
||||||
hand:Swamp,Island
|
|
||||||
|
|
||||||
[END]
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
# Testing crucible of worlds (keyword: CANPLAYFROMGRAVEYARD)
|
|
||||||
|
|
||||||
# name=Crucible of Worlds
|
|
||||||
# text=You may play land cards from your graveyard.
|
|
||||||
|
|
||||||
[INIT]
|
|
||||||
FIRSTMAIN
|
|
||||||
[PLAYER1]
|
|
||||||
hand:island,plains
|
|
||||||
inplay:crucible of worlds
|
|
||||||
graveyard:forest,mountain
|
|
||||||
[PLAYER2]
|
|
||||||
[DO]
|
|
||||||
forest
|
|
||||||
# all next lands shouldn't be played
|
|
||||||
island
|
|
||||||
mountain
|
|
||||||
plains
|
|
||||||
[ASSERT]
|
|
||||||
FIRSTMAIN
|
|
||||||
[PLAYER1]
|
|
||||||
inplay:crucible of worlds,forest
|
|
||||||
hand:island,plains
|
|
||||||
graveyard:mountain
|
|
||||||
[PLAYER2]
|
|
||||||
[END]
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
#NAME: Executioner's Swing
|
|
||||||
#DESC: Checks targetability
|
|
||||||
#DESC: Test that can target creature that damaged creature this turn
|
|
||||||
|
|
||||||
[INIT]
|
|
||||||
combatattackers
|
|
||||||
|
|
||||||
[PLAYER1]
|
|
||||||
inplay:Grizzly Bears
|
|
||||||
|
|
||||||
[PLAYER2]
|
|
||||||
inplay:Flying Men,Swamp,Plains
|
|
||||||
hand:Executioner's Swing
|
|
||||||
|
|
||||||
[DO]
|
|
||||||
Grizzly Bears
|
|
||||||
next
|
|
||||||
Flying Men
|
|
||||||
next
|
|
||||||
next
|
|
||||||
next
|
|
||||||
|
|
||||||
# second main
|
|
||||||
# kill bear
|
|
||||||
yes
|
|
||||||
Swamp
|
|
||||||
Plains
|
|
||||||
Executioner's Swing
|
|
||||||
Grizzly Bears
|
|
||||||
endinterruption
|
|
||||||
|
|
||||||
[ASSERT]
|
|
||||||
secondmain
|
|
||||||
|
|
||||||
[PLAYER1]
|
|
||||||
graveyard:Grizzly Bears
|
|
||||||
|
|
||||||
[PLAYER2]
|
|
||||||
graveyard:Executioner's Swing,Flying Men
|
|
||||||
inplay:Plains,Swamp
|
|
||||||
|
|
||||||
[END]
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
#NAME: Executioner's Swing
|
|
||||||
#DESC: Checks targetability
|
|
||||||
#DESC: Test that can target creature that damaged player
|
|
||||||
|
|
||||||
[INIT]
|
|
||||||
combatattackers
|
|
||||||
|
|
||||||
[PLAYER1]
|
|
||||||
inplay:Grizzly Bears
|
|
||||||
|
|
||||||
[PLAYER2]
|
|
||||||
inplay:Swamp,Plains
|
|
||||||
hand:Executioner's Swing
|
|
||||||
|
|
||||||
[DO]
|
|
||||||
Grizzly Bears
|
|
||||||
next
|
|
||||||
next
|
|
||||||
next
|
|
||||||
next
|
|
||||||
|
|
||||||
# second main
|
|
||||||
# kill bear
|
|
||||||
yes
|
|
||||||
Swamp
|
|
||||||
Plains
|
|
||||||
Executioner's Swing
|
|
||||||
Grizzly Bears
|
|
||||||
endinterruption
|
|
||||||
|
|
||||||
[ASSERT]
|
|
||||||
secondmain
|
|
||||||
|
|
||||||
[PLAYER1]
|
|
||||||
graveyard:Grizzly Bears
|
|
||||||
|
|
||||||
[PLAYER2]
|
|
||||||
graveyard:Executioner's Swing
|
|
||||||
inplay:Plains,Swamp
|
|
||||||
life:18
|
|
||||||
|
|
||||||
[END]
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
#NAME: Executioner's Swing
|
|
||||||
#DESC: Checks targetability
|
|
||||||
#DESC: Prove that can't target passive creature
|
|
||||||
|
|
||||||
[INIT]
|
|
||||||
secondmain
|
|
||||||
|
|
||||||
[PLAYER1]
|
|
||||||
inplay:Grizzly Bears
|
|
||||||
|
|
||||||
[PLAYER2]
|
|
||||||
manapool:{B}{W}
|
|
||||||
hand:Executioner's Swing
|
|
||||||
|
|
||||||
[DO]
|
|
||||||
# attempt to kill bear
|
|
||||||
yes
|
|
||||||
Swamp
|
|
||||||
Plains
|
|
||||||
Executioner's Swing
|
|
||||||
Grizzly Bears
|
|
||||||
endinterruption
|
|
||||||
|
|
||||||
[ASSERT]
|
|
||||||
secondmain
|
|
||||||
|
|
||||||
[PLAYER1]
|
|
||||||
inplay:Grizzly Bears
|
|
||||||
|
|
||||||
[PLAYER2]
|
|
||||||
hand:Executioner's Swing
|
|
||||||
manapool:{W}{B}
|
|
||||||
|
|
||||||
[END]
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
#Testing Atarka Beastbreaker,Stampeding Elk Herd -- Formidable
|
|
||||||
#Atarka Beastbreaker will become 6/6, and then attacks along with Stampeding Elk Herd, trample effect will trigger
|
|
||||||
#then p2 will block with Steel Wall, p2 must have 13 life...
|
|
||||||
[INIT]
|
|
||||||
COMBATATTACKERS
|
|
||||||
[PLAYER1]
|
|
||||||
inplay:Atarka Beastbreaker,Krosan Tusker,Stampeding Elk Herd
|
|
||||||
manapool:{4}{G}
|
|
||||||
[PLAYER2]
|
|
||||||
inplay:Steel Wall
|
|
||||||
life:20
|
|
||||||
[DO]
|
|
||||||
Atarka Beastbreaker
|
|
||||||
choice 1
|
|
||||||
Atarka Beastbreaker
|
|
||||||
Stampeding Elk Herd
|
|
||||||
next
|
|
||||||
Steel Wall
|
|
||||||
#blockers
|
|
||||||
next
|
|
||||||
#combatdamage 2
|
|
||||||
next
|
|
||||||
next
|
|
||||||
#endofcombat 2
|
|
||||||
[ASSERT]
|
|
||||||
COMBATEND
|
|
||||||
[PLAYER1]
|
|
||||||
inplay:Atarka Beastbreaker,Krosan Tusker,Stampeding Elk Herd
|
|
||||||
manapool:{0}
|
|
||||||
[PLAYER2]
|
|
||||||
graveyard:Steel Wall
|
|
||||||
life:13
|
|
||||||
[END]
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
#Testing Griselbrand with the new specific life cost {L:7}
|
|
||||||
#Player has 8 life and you cannot use the ability the second time if you cannot pay life.
|
|
||||||
#Must change griselbrand code to {L:7}:draw:7 instead of {L}{L}{L}{L}{L}{L}{L}:draw:7
|
|
||||||
[INIT]
|
|
||||||
FIRSTMAIN
|
|
||||||
[PLAYER1]
|
|
||||||
inplay:Griselbrand
|
|
||||||
life:8
|
|
||||||
library:forest,forest,forest,forest,forest,forest,forest,plains,mountain,mountain,mountain,mountain,mountain,mountain,island
|
|
||||||
[PLAYER2]
|
|
||||||
life:20
|
|
||||||
[DO]
|
|
||||||
Griselbrand
|
|
||||||
Griselbrand
|
|
||||||
[ASSERT]
|
|
||||||
FIRSTMAIN
|
|
||||||
[PLAYER1]
|
|
||||||
inplay:Griselbrand
|
|
||||||
life:1
|
|
||||||
hand:mountain,mountain,mountain,mountain,mountain,mountain,island
|
|
||||||
library:forest,forest,forest,forest,forest,forest,forest,plains
|
|
||||||
[PLAYER2]
|
|
||||||
life:20
|
|
||||||
[END]
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
#Testing guild keyword gruul for Xenagos, God of Revels. You must have Born of the gods set (BNG)
|
|
||||||
#[card]
|
|
||||||
#name=Xenagos, God of Revels
|
|
||||||
#abilities=indestructible
|
|
||||||
#auto=@each my combatbegins:name(haste and +x/+x) target(other creature|mybattlefield) transforms((,newability[haste],newability[power/power])) ueot
|
|
||||||
#auto=this(variable{gruul}>6) transforms((Creature))
|
|
||||||
#text=Indestructible -- As long as your devotion to red and green is less than seven, Xenagos isn't a creature. -- At the beginning of combat on your turn, another target creature you control gains haste and gets +X/+X until end of turn, where X is that creature's power.
|
|
||||||
#mana={3}{R}{G}
|
|
||||||
#type=Legendary Enchantment
|
|
||||||
#subtype=God
|
|
||||||
#power=6
|
|
||||||
#toughness=5
|
|
||||||
#[/card]
|
|
||||||
[INIT]
|
|
||||||
FIRSTMAIN
|
|
||||||
[PLAYER1]
|
|
||||||
inplay:378528
|
|
||||||
hand:19869
|
|
||||||
life:20
|
|
||||||
manapool:{G}{G}{G}{G}{G}
|
|
||||||
[PLAYER2]
|
|
||||||
life:20
|
|
||||||
[DO]
|
|
||||||
19869
|
|
||||||
next
|
|
||||||
choice 0
|
|
||||||
19869
|
|
||||||
next
|
|
||||||
19869
|
|
||||||
eot
|
|
||||||
[ASSERT]
|
|
||||||
UNTAP
|
|
||||||
[PLAYER1]
|
|
||||||
inplay:378528,19869
|
|
||||||
life:20
|
|
||||||
[PLAYER2]
|
|
||||||
life:12
|
|
||||||
[END]
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
# Testing Tokenizer - Parallel Lives (ISD) 249662
|
|
||||||
# Dragon Fodder (ALA) 174936
|
|
||||||
# text=Put two 1/1 red Goblin creature tokens into play.
|
|
||||||
# Tokens must be 2.. since there are no tokenizer.
|
|
||||||
[INIT]
|
|
||||||
FIRSTMAIN
|
|
||||||
[PLAYER1]
|
|
||||||
hand:174936
|
|
||||||
manapool:{R}{1}
|
|
||||||
inplay:249662
|
|
||||||
[PLAYER2]
|
|
||||||
hand:Demystify
|
|
||||||
manapool:{W}
|
|
||||||
[DO]
|
|
||||||
174936
|
|
||||||
no
|
|
||||||
yes
|
|
||||||
Demystify
|
|
||||||
249662
|
|
||||||
endinterruption
|
|
||||||
[ASSERT]
|
|
||||||
FIRSTMAIN
|
|
||||||
[PLAYER1]
|
|
||||||
graveyard:249662,174936
|
|
||||||
inplay:-174936,-174936
|
|
||||||
[PLAYER2]
|
|
||||||
graveyard:Demystify
|
|
||||||
life:20
|
|
||||||
[END]
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
# Testing Tokenizer - Parallel Lives (ISD) 249662
|
|
||||||
# Dragon Fodder (ALA) 174936
|
|
||||||
# text=Put two 1/1 red Goblin creature tokens into play.
|
|
||||||
# Tokens must be 8.. since there are two tokenizer... original value
|
|
||||||
# is 2 with first tokenizer it will become 4, with the second tokenizer
|
|
||||||
# the value will be 8...
|
|
||||||
[INIT]
|
|
||||||
FIRSTMAIN
|
|
||||||
[PLAYER1]
|
|
||||||
hand:174936
|
|
||||||
manapool:{R}{1}
|
|
||||||
inplay:249662,249662
|
|
||||||
[PLAYER2]
|
|
||||||
inplay:plains
|
|
||||||
hand:Demystify
|
|
||||||
[DO]
|
|
||||||
174936
|
|
||||||
[ASSERT]
|
|
||||||
FIRSTMAIN
|
|
||||||
[PLAYER1]
|
|
||||||
graveyard:174936
|
|
||||||
inplay:249662,249662,-174936,-174936,-174936,-174936,-174936,-174936,-174936,-174936
|
|
||||||
[PLAYER2]
|
|
||||||
hand:Demystify
|
|
||||||
inplay:plains
|
|
||||||
life:20
|
|
||||||
[END]
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
import sys
|
|
||||||
import os
|
|
||||||
import zipfile
|
|
||||||
from pyjavaproperties import Properties
|
|
||||||
from optparse import OptionParser
|
|
||||||
|
|
||||||
def createWindowsZipFile(filename):
|
|
||||||
utilities = ZipUtilities()
|
|
||||||
zip_file = zipfile.ZipFile(filename, 'w', zipfile.ZIP_STORED)
|
|
||||||
zip_file.write('../../../LICENSE')
|
|
||||||
zip_file.write('libpng13.dll')
|
|
||||||
zip_file.write('SDL.dll')
|
|
||||||
zip_file.write('fmod.dll')
|
|
||||||
zip_file.write('zlib1.dll')
|
|
||||||
zip_file.write('Wagic.exe')
|
|
||||||
zip_file.write('Res/' + getFilename('core') + '.zip')
|
|
||||||
zip_file.close()
|
|
||||||
|
|
||||||
def getFilename(filename):
|
|
||||||
p = Properties();
|
|
||||||
p.load(open('../build.number.properties'));
|
|
||||||
minor = p['build.minor'];
|
|
||||||
major = p['build.major'];
|
|
||||||
point = p['build.point'];
|
|
||||||
filename = filename + '-' + major + minor + point
|
|
||||||
return filename
|
|
||||||
|
|
||||||
def createStandardResFile():
|
|
||||||
print "Creating Resource File"
|
|
||||||
cmd = 'python createResourceZip.py -n ' + getFilename('core') + '.zip'
|
|
||||||
os.chdir("Res")
|
|
||||||
os.system(cmd)
|
|
||||||
os.chdir("..")
|
|
||||||
print "Creating Windows Package File"
|
|
||||||
filename = 'Wagic-windows.zip'
|
|
||||||
createWindowsZipFile( filename )
|
|
||||||
print >> sys.stderr, 'Created Windows Package: {0}'.format( filename)
|
|
||||||
|
|
||||||
class ZipUtilities:
|
|
||||||
|
|
||||||
def toZip(self, file, filename):
|
|
||||||
zip_file = zipfile.ZipFile(filename, 'w')
|
|
||||||
if os.path.isfile(file):
|
|
||||||
zip_file.write(file)
|
|
||||||
else:
|
|
||||||
self.addFolderToZip(zip_file, file)
|
|
||||||
zip_file.close()
|
|
||||||
|
|
||||||
def addFolderToZip(self, zip_file, folder):
|
|
||||||
zip_file.writestr(folder + '/', '')
|
|
||||||
for file in os.listdir(folder):
|
|
||||||
if file != '.svn':
|
|
||||||
full_path = os.path.join(folder, file)
|
|
||||||
if os.path.isfile(full_path):
|
|
||||||
print 'File added: ' + str(full_path)
|
|
||||||
zip_file.write(full_path)
|
|
||||||
elif os.path.isdir(full_path):
|
|
||||||
print 'Entering folder: ' + str(full_path)
|
|
||||||
self.addFolderToZip(zip_file, full_path)
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
## using optparse instead of argParse for now since python 2.7 may not be installed.
|
|
||||||
|
|
||||||
parser = OptionParser()
|
|
||||||
parser.add_option("-p", "--platform", help="PLATFORM: specify custom build. (eg ios, android, etc)", metavar="PLATFORM", dest="platform")
|
|
||||||
|
|
||||||
(options, args) = parser.parse_args()
|
|
||||||
|
|
||||||
createStandardResFile()
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
@@ -2,7 +2,6 @@
|
|||||||
<!-- build.properties should contain the values for major, minor and point -->
|
<!-- build.properties should contain the values for major, minor and point -->
|
||||||
<property file="build.properties" />
|
<property file="build.properties" />
|
||||||
<property file="build.number.properties" />
|
<property file="build.number.properties" />
|
||||||
<property environment="env"/>
|
|
||||||
|
|
||||||
<path id="groovy.class.path" >
|
<path id="groovy.class.path" >
|
||||||
<fileset dir="${groovy.dir}" />
|
<fileset dir="${groovy.dir}" />
|
||||||
@@ -77,22 +76,19 @@ Author: Michael Nguyen
|
|||||||
#define WAGIC_VERSION_MAJOR ${build.major}
|
#define WAGIC_VERSION_MAJOR ${build.major}
|
||||||
#define WAGIC_VERSION_MEDIUM ${build.minor}
|
#define WAGIC_VERSION_MEDIUM ${build.minor}
|
||||||
#define WAGIC_VERSION_MINOR ${build.point}
|
#define WAGIC_VERSION_MINOR ${build.point}
|
||||||
#define WAGIC_VERSION_REVISION ${env.TRAVIS_BUILD_NUMBER}
|
|
||||||
|
|
||||||
#define VERSION_DOT(a, b, c, d) a ##.## b ##.## c ##.## d
|
#define VERSION_DOT(a, b, c) a ##.## b ##.## c
|
||||||
#define VERSION_WITHOUT_DOT(a, b, c) a ## b ## c
|
#define VERSION_WITHOUT_DOT(a, b, c) a ## b ## c
|
||||||
#define VERSION_GAME(a, b, c, d) VERSION_DOT(a, b, c, d)
|
#define VERSION_GAME(a, b, c) VERSION_DOT(a, b, c)
|
||||||
#define VERSION_FILE(a, b, c) VERSION_WITHOUT_DOT(a, b, c)
|
#define VERSION_FILE(a, b, c) VERSION_WITHOUT_DOT(a, b, c)
|
||||||
#define VERSION_TOSTRING(a) #a
|
#define VERSION_TOSTRING(a) #a
|
||||||
#define VERSION_STRINGIFY(a) VERSION_TOSTRING(a)
|
#define VERSION_STRINGIFY(a) VERSION_TOSTRING(a)
|
||||||
|
|
||||||
#define WAGIC_VERSION VERSION_GAME(WAGIC_VERSION_MAJOR, WAGIC_VERSION_MEDIUM, WAGIC_VERSION_MINOR, WAGIC_VERSION_REVISION)
|
#define WAGIC_VERSION VERSION_GAME(WAGIC_VERSION_MAJOR, WAGIC_VERSION_MEDIUM, WAGIC_VERSION_MINOR)
|
||||||
#define WAGIC_RESOURCE_VERSION VERSION_FILE(WAGIC_VERSION_MAJOR, WAGIC_VERSION_MEDIUM, WAGIC_VERSION_MINOR)
|
#define WAGIC_RESOURCE_VERSION VERSION_FILE(WAGIC_VERSION_MAJOR, WAGIC_VERSION_MEDIUM, WAGIC_VERSION_MINOR)
|
||||||
#define WAGIC_VERSION_STRING VERSION_STRINGIFY(WAGIC_VERSION)
|
#define WAGIC_VERSION_STRING VERSION_STRINGIFY(WAGIC_VERSION)
|
||||||
#define WAGIC_CORE_VERSION_STRING "core_" VERSION_STRINGIFY(WAGIC_RESOURCE_VERSION)
|
#define WAGIC_CORE_VERSION_STRING "core_" VERSION_STRINGIFY(WAGIC_RESOURCE_VERSION)
|
||||||
#define WAGIC_RESOURCE_NAME "Wagic-core.zip"
|
#define WAGIC_RESOURCE_NAME WAGIC_CORE_VERSION_STRING ".zip"
|
||||||
#define WAGIC_RELEASE_NAME "${env.RELEASE_NAME}"
|
|
||||||
#define WAGIC_RESOURCE_URL "https://github.com/WagicProject/wagic/releases/download/" WAGIC_RELEASE_NAME "/" WAGIC_RESOURCE_NAME
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
//
|
||||||
|
// UIScreen+Util.h
|
||||||
|
// wagic
|
||||||
|
//
|
||||||
|
// Created by Michael Nguyen on 11/27/13.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
@interface UIScreen (Util)
|
||||||
|
|
||||||
|
+(BOOL)isRetinaDisplay;
|
||||||
|
@end
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
//
|
||||||
|
// UIScreen+Util.m
|
||||||
|
// wagic
|
||||||
|
//
|
||||||
|
// Created by Michael Nguyen on 11/27/13.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
#include "UIScreen+Util.h"
|
||||||
|
|
||||||
|
static BOOL isRetinaScreen = NO;
|
||||||
|
static BOOL didRetinaCheck = NO;
|
||||||
|
|
||||||
|
@implementation UIScreen (Util)
|
||||||
|
+ (BOOL)isRetinaDisplay
|
||||||
|
{
|
||||||
|
if (!didRetinaCheck) {
|
||||||
|
isRetinaScreen = ([[self mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] &&
|
||||||
|
([self mainScreen].scale == 2.0));
|
||||||
|
didRetinaCheck = YES;
|
||||||
|
}
|
||||||
|
return isRetinaScreen;
|
||||||
|
}
|
||||||
|
@end
|
||||||
@@ -12,8 +12,6 @@ using std::vector;
|
|||||||
class ManaCost;
|
class ManaCost;
|
||||||
class MTGAbility;
|
class MTGAbility;
|
||||||
|
|
||||||
namespace AI {
|
|
||||||
|
|
||||||
class AIHint
|
class AIHint
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -68,6 +66,4 @@ public:
|
|||||||
~AIHints();
|
~AIHints();
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -3,8 +3,6 @@
|
|||||||
|
|
||||||
#include "AIPlayerBaka.h"
|
#include "AIPlayerBaka.h"
|
||||||
|
|
||||||
namespace AI {
|
|
||||||
|
|
||||||
class AIMomirPlayer: public AIPlayerBaka
|
class AIMomirPlayer: public AIPlayerBaka
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -16,6 +14,4 @@ public:
|
|||||||
MTGAbility * getMomirAbility();
|
MTGAbility * getMomirAbility();
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -18,44 +18,20 @@
|
|||||||
#include "Player.h"
|
#include "Player.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
#include <queue>
|
#include <queue>
|
||||||
using std::queue;
|
using std::queue;
|
||||||
using std::vector;
|
|
||||||
|
|
||||||
|
|
||||||
namespace AI {
|
|
||||||
|
|
||||||
class AIStats;
|
class AIStats;
|
||||||
class AIPlayer;
|
class AIPlayer;
|
||||||
|
|
||||||
|
|
||||||
class Action
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
GameObserver* m_pObserver;
|
|
||||||
bool parseLine(const string& s);
|
|
||||||
|
|
||||||
public:
|
|
||||||
Action(GameObserver* g, const string& s) : m_pObserver(g)
|
|
||||||
{
|
|
||||||
parseLine(s);
|
|
||||||
};
|
|
||||||
|
|
||||||
friend ostream& operator<<(ostream&, const Action&);
|
|
||||||
friend istream& operator>>(istream&, Action&);
|
|
||||||
};
|
|
||||||
|
|
||||||
class AIAction
|
class AIAction
|
||||||
{
|
{
|
||||||
protected:
|
|
||||||
int clickMultiAct(vector<Targetable*>&actionTargets);
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
AIPlayer * owner;
|
AIPlayer * owner;
|
||||||
MTGAbility * ability;
|
MTGAbility * ability;
|
||||||
|
NestedAbility * nability;
|
||||||
Player * player;
|
Player * player;
|
||||||
// int id;
|
int id;
|
||||||
MTGCardInstance * click;
|
MTGCardInstance * click;
|
||||||
MTGCardInstance * target; // TODO Improve
|
MTGCardInstance * target; // TODO Improve
|
||||||
vector<Targetable*>mAbilityTargets;
|
vector<Targetable*>mAbilityTargets;
|
||||||
@@ -84,10 +60,7 @@ public:
|
|||||||
{
|
{
|
||||||
};
|
};
|
||||||
int Act();
|
int Act();
|
||||||
ostream& logSimpleAct(ostream& out, MTGCardInstance* click) const;
|
int clickMultiAct(vector<Targetable*>&actionTargets);
|
||||||
ostream& logMultiAct(ostream& out, const vector<Targetable *> &actionTargets) const;
|
|
||||||
|
|
||||||
friend ostream& operator<<(ostream& out, const AIAction& a);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -104,20 +77,8 @@ protected:
|
|||||||
int clickMultiTarget(TargetChooser * tc,vector<Targetable*>&potentialTargets);
|
int clickMultiTarget(TargetChooser * tc,vector<Targetable*>&potentialTargets);
|
||||||
int clickSingleTarget(TargetChooser * tc,vector<Targetable*>&potentialTargets, MTGCardInstance * Choosencard = NULL);
|
int clickSingleTarget(TargetChooser * tc,vector<Targetable*>&potentialTargets, MTGCardInstance * Choosencard = NULL);
|
||||||
RandomGenerator randomGenerator;
|
RandomGenerator randomGenerator;
|
||||||
virtual bool canFirstStrikeKill(MTGCardInstance * card, MTGCardInstance *ennemy);
|
|
||||||
virtual bool canPlay(MTGCardInstance * card);
|
|
||||||
virtual int getCreaturesInfo(Player * player, int neededInfo = INFO_NBCREATURES , int untapMode = 0, int canAttack = 0);
|
|
||||||
|
|
||||||
virtual int createAbilityPotentialsActions(MTGAbility * a, MTGCardInstance * c, vector<AIAction>& actions);
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
enum {
|
|
||||||
INFO_NBCREATURES,
|
|
||||||
INFO_CREATURESPOWER,
|
|
||||||
INFO_CREATURESRANK,
|
|
||||||
INFO_CREATURESTOUGHNESS,
|
|
||||||
INFO_CREATURESATTACKINGPOWER
|
|
||||||
};
|
|
||||||
|
|
||||||
//These variables are used by TestSuite and Rules.cpp... TODO change that?
|
//These variables are used by TestSuite and Rules.cpp... TODO change that?
|
||||||
int agressivity;
|
int agressivity;
|
||||||
@@ -128,7 +89,7 @@ public:
|
|||||||
virtual int receiveEvent(WEvent * event);
|
virtual int receiveEvent(WEvent * event);
|
||||||
virtual void Render();
|
virtual void Render();
|
||||||
|
|
||||||
AIPlayer(GameObserver *observer, string deckFile, string deckFileSmall, string avatarFile, MTGDeck * deck = NULL);
|
AIPlayer(GameObserver *observer, string deckFile, string deckFileSmall, MTGDeck * deck = NULL);
|
||||||
virtual ~AIPlayer();
|
virtual ~AIPlayer();
|
||||||
|
|
||||||
virtual int chooseTarget(TargetChooser * tc = NULL, Player * forceTarget = NULL, MTGCardInstance * Chosencard = NULL, bool checkonly = false) = 0;
|
virtual int chooseTarget(TargetChooser * tc = NULL, Player * forceTarget = NULL, MTGCardInstance * Chosencard = NULL, bool checkonly = false) = 0;
|
||||||
@@ -155,6 +116,5 @@ class AIPlayerFactory{
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -4,8 +4,6 @@
|
|||||||
#include "AIPlayer.h"
|
#include "AIPlayer.h"
|
||||||
#include "AllAbilities.h"
|
#include "AllAbilities.h"
|
||||||
|
|
||||||
namespace AI {
|
|
||||||
|
|
||||||
class AIStats;
|
class AIStats;
|
||||||
class AIHints;
|
class AIHints;
|
||||||
class AIHint;
|
class AIHint;
|
||||||
@@ -59,7 +57,7 @@ public:
|
|||||||
OrderedAIAction* a2Ptr = const_cast<OrderedAIAction*>(&a2);
|
OrderedAIAction* a2Ptr = const_cast<OrderedAIAction*>(&a2);
|
||||||
int e1 = a1Ptr->getEfficiency();
|
int e1 = a1Ptr->getEfficiency();
|
||||||
int e2 = a2Ptr->getEfficiency();
|
int e2 = a2Ptr->getEfficiency();
|
||||||
// if (e1 == e2) return a1Ptr->id < a2Ptr->id;
|
if (e1 == e2) return a1Ptr->id < a2Ptr->id;
|
||||||
return (e1 > e2);
|
return (e1 > e2);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -74,7 +72,7 @@ class AIPlayerBaka: public AIPlayer{
|
|||||||
virtual int interruptIfICan();
|
virtual int interruptIfICan();
|
||||||
virtual int chooseAttackers();
|
virtual int chooseAttackers();
|
||||||
virtual int chooseBlockers();
|
virtual int chooseBlockers();
|
||||||
virtual bool canFirstStrikeKill(MTGCardInstance * card, MTGCardInstance *ennemy);
|
virtual int canFirstStrikeKill(MTGCardInstance * card, MTGCardInstance *ennemy);
|
||||||
virtual int effectBadOrGood(MTGCardInstance * card, int mode = MODE_PUTINTOPLAY, TargetChooser * tc = NULL);
|
virtual int effectBadOrGood(MTGCardInstance * card, int mode = MODE_PUTINTOPLAY, TargetChooser * tc = NULL);
|
||||||
|
|
||||||
|
|
||||||
@@ -107,10 +105,19 @@ class AIPlayerBaka: public AIPlayer{
|
|||||||
virtual int getEfficiency(OrderedAIAction * action);
|
virtual int getEfficiency(OrderedAIAction * action);
|
||||||
virtual int getEfficiency(MTGAbility * ability);
|
virtual int getEfficiency(MTGAbility * ability);
|
||||||
virtual bool payTheManaCost(ManaCost * cost, MTGCardInstance * card = NULL,vector<MTGAbility*> gotPayment = vector<MTGAbility*>());
|
virtual bool payTheManaCost(ManaCost * cost, MTGCardInstance * card = NULL,vector<MTGAbility*> gotPayment = vector<MTGAbility*>());
|
||||||
|
virtual int getCreaturesInfo(Player * player, int neededInfo = INFO_NBCREATURES , int untapMode = 0, int canAttack = 0);
|
||||||
virtual ManaCost * getPotentialMana(MTGCardInstance * card = NULL);
|
virtual ManaCost * getPotentialMana(MTGCardInstance * card = NULL);
|
||||||
virtual int selectAbility();
|
virtual int selectAbility();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
enum {
|
||||||
|
INFO_NBCREATURES,
|
||||||
|
INFO_CREATURESPOWER,
|
||||||
|
INFO_CREATURESRANK,
|
||||||
|
INFO_CREATURESTOUGHNESS,
|
||||||
|
INFO_CREATURESATTACKINGPOWER
|
||||||
|
};
|
||||||
|
|
||||||
vector<MTGAbility*>gotPayments;
|
vector<MTGAbility*>gotPayments;
|
||||||
|
|
||||||
AIPlayerBaka(GameObserver *observer, string deckFile, string deckfileSmall, string avatarFile, MTGDeck * deck = NULL);
|
AIPlayerBaka(GameObserver *observer, string deckFile, string deckfileSmall, string avatarFile, MTGDeck * deck = NULL);
|
||||||
@@ -130,5 +137,4 @@ class AIPlayerBaka: public AIPlayer{
|
|||||||
virtual int createAbilityTargets(MTGAbility * a, MTGCardInstance * c, RankingContainer& ranking);
|
virtual int createAbilityTargets(MTGAbility * a, MTGCardInstance * c, RankingContainer& ranking);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -11,8 +11,6 @@ class AIStats;
|
|||||||
class AIHints;
|
class AIHints;
|
||||||
|
|
||||||
|
|
||||||
namespace AI {
|
|
||||||
|
|
||||||
class AIPlayerBakaB: public AIPlayerBaka{
|
class AIPlayerBakaB: public AIPlayerBaka{
|
||||||
protected:
|
protected:
|
||||||
int orderBlockers();
|
int orderBlockers();
|
||||||
@@ -20,7 +18,7 @@ protected:
|
|||||||
int interruptIfICan();
|
int interruptIfICan();
|
||||||
int chooseAttackers();
|
int chooseAttackers();
|
||||||
int chooseBlockers();
|
int chooseBlockers();
|
||||||
bool canFirstStrikeKill(MTGCardInstance * card, MTGCardInstance *ennemy);
|
int canFirstStrikeKill(MTGCardInstance * card, MTGCardInstance *ennemy);
|
||||||
int effectBadOrGood(MTGCardInstance * card, int mode = MODE_PUTINTOPLAY, TargetChooser * tc = NULL);
|
int effectBadOrGood(MTGCardInstance * card, int mode = MODE_PUTINTOPLAY, TargetChooser * tc = NULL);
|
||||||
|
|
||||||
|
|
||||||
@@ -63,8 +61,6 @@ protected:
|
|||||||
int createAbilityTargets(MTGAbility * a, MTGCardInstance * c, RankingContainer& ranking);
|
int createAbilityTargets(MTGAbility * a, MTGCardInstance * c, RankingContainer& ranking);
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1,34 +0,0 @@
|
|||||||
/*
|
|
||||||
* Wagic, The Homebrew ?! is licensed under the BSD license
|
|
||||||
* See LICENSE in the Folder's root
|
|
||||||
* http://wololo.net/wagic/
|
|
||||||
|
|
||||||
AIPlayerMinMax is the MinMax implementation of the AIPlayer interface
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _IAPLAYER_MINMAX_H
|
|
||||||
#define _IAPLAYER_MINMAX_H
|
|
||||||
|
|
||||||
#include "AIPlayer.h"
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
namespace AI {
|
|
||||||
|
|
||||||
class AIPlayerMinMax: public AIPlayer{
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void LookAround();
|
|
||||||
|
|
||||||
public:
|
|
||||||
AIPlayerMinMax(GameObserver *observer, string deckFile, string deckFileSmall, string avatarFile, MTGDeck * deck = NULL);
|
|
||||||
virtual ~AIPlayerMinMax();
|
|
||||||
|
|
||||||
virtual int chooseTarget(TargetChooser * tc = NULL, Player * forceTarget = NULL, MTGCardInstance * Chosencard = NULL, bool checkonly = false) = 0;
|
|
||||||
virtual int affectCombatDamages(CombatStep) = 0;
|
|
||||||
virtual int Act(float dt) = 0;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -18,8 +18,6 @@ class MTGCard;
|
|||||||
class Damage;
|
class Damage;
|
||||||
class WEvent;
|
class WEvent;
|
||||||
|
|
||||||
namespace AI {
|
|
||||||
|
|
||||||
class AIStat
|
class AIStat
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -51,6 +49,4 @@ public:
|
|||||||
void Render();
|
void Render();
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ public:
|
|||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
virtual const string getMenuText()
|
virtual const char * getMenuText()
|
||||||
{
|
{
|
||||||
return "Ability";
|
return "Ability";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
Interruptible(GameObserver* observer, int inID = 0, bool hasFocus = false)
|
Interruptible(GameObserver* observer, int inID = 0, bool hasFocus = false)
|
||||||
: PlayGuiObject(40, 0.0f, 0.0f, inID, hasFocus), Targetable(observer), state(NOT_RESOLVED), display(0), source(NULL)
|
: PlayGuiObject(40, x, y, inID, hasFocus), Targetable(observer), state(NOT_RESOLVED), display(0), source(NULL)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -204,6 +204,7 @@ protected:
|
|||||||
JQuadPtr pspIcons[8];
|
JQuadPtr pspIcons[8];
|
||||||
InterruptDecision interruptDecision[2];
|
InterruptDecision interruptDecision[2];
|
||||||
float timer;
|
float timer;
|
||||||
|
int currentState;
|
||||||
ActionStackMode mode;
|
ActionStackMode mode;
|
||||||
int checked;
|
int checked;
|
||||||
ATutorialMessage* currentTutorial;
|
ATutorialMessage* currentTutorial;
|
||||||
@@ -223,7 +224,7 @@ public:
|
|||||||
int getNextIndex(Interruptible * previous, int type = 0, int state = 0 , int display = -1);
|
int getNextIndex(Interruptible * previous, int type = 0, int state = 0 , int display = -1);
|
||||||
void Fizzle(Interruptible * action, FizzleMode fizzleMode = PUT_IN_GRAVEARD);
|
void Fizzle(Interruptible * action, FizzleMode fizzleMode = PUT_IN_GRAVEARD);
|
||||||
Interruptible * getAt(int id);
|
Interruptible * getAt(int id);
|
||||||
void cancelInterruptOffer(Player* p = 0, InterruptDecision cancelMode = DONT_INTERRUPT, bool log = true);
|
void cancelInterruptOffer(InterruptDecision cancelMode = DONT_INTERRUPT, bool log = true);
|
||||||
void endOfInterruption(bool log = true);
|
void endOfInterruption(bool log = true);
|
||||||
Interruptible * getLatest(int state);
|
Interruptible * getLatest(int state);
|
||||||
Player * askIfWishesToInterrupt;
|
Player * askIfWishesToInterrupt;
|
||||||
@@ -250,9 +251,7 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
void setCurrentTutorial(ATutorialMessage* message) {currentTutorial = message;};
|
void setCurrentTutorial(ATutorialMessage* message) {currentTutorial = message;};
|
||||||
ATutorialMessage* getCurrentTutorial() {return currentTutorial;};
|
ATutorialMessage* getCurrentTutorial() {return currentTutorial;};
|
||||||
bool isNotUndecided() {
|
bool isCalm() {return interruptDecision[0] == NOT_DECIDED && interruptDecision[1] == NOT_DECIDED;};
|
||||||
return (interruptDecision[0] == NOT_DECIDED && interruptDecision[1] == NOT_DECIDED);
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -172,206 +172,6 @@ private:
|
|||||||
{
|
{
|
||||||
intValue = target->getManaCost()->getConvertedCost();
|
intValue = target->getManaCost()->getConvertedCost();
|
||||||
}
|
}
|
||||||
else if (s == "azorius")//devotion blue white
|
|
||||||
{
|
|
||||||
TargetChooserFactory dtf(card->getObserver());
|
|
||||||
TargetChooser * dtc = dtf.createTargetChooser("*",NULL);
|
|
||||||
for (int i = 0; i < 2; i++)
|
|
||||||
{
|
|
||||||
Player * dp = card->getObserver()->players[i];
|
|
||||||
MTGGameZone * dzones[] = { dp->game->inPlay, dp->game->graveyard, dp->game->hand, dp->game->library };
|
|
||||||
for (int k = 0; k < 4; k++)
|
|
||||||
{
|
|
||||||
MTGGameZone * zone = dzones[k];
|
|
||||||
if (dtc->targetsZone(zone, card)&&dp == card->controller())
|
|
||||||
{
|
|
||||||
intValue += zone->countDevotion(dtc, 2);
|
|
||||||
intValue += zone->countDevotion(dtc, 5);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SAFE_DELETE(dtc);
|
|
||||||
}
|
|
||||||
else if (s == "boros")//devotion red white
|
|
||||||
{
|
|
||||||
TargetChooserFactory dtf(card->getObserver());
|
|
||||||
TargetChooser * dtc = dtf.createTargetChooser("*",NULL);
|
|
||||||
for (int i = 0; i < 2; i++)
|
|
||||||
{
|
|
||||||
Player * dp = card->getObserver()->players[i];
|
|
||||||
MTGGameZone * dzones[] = { dp->game->inPlay, dp->game->graveyard, dp->game->hand, dp->game->library };
|
|
||||||
for (int k = 0; k < 4; k++)
|
|
||||||
{
|
|
||||||
MTGGameZone * zone = dzones[k];
|
|
||||||
if (dtc->targetsZone(zone, card)&&dp == card->controller())
|
|
||||||
{
|
|
||||||
intValue += zone->countDevotion(dtc, 3);
|
|
||||||
intValue += zone->countDevotion(dtc, 5);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SAFE_DELETE(dtc);
|
|
||||||
}
|
|
||||||
else if (s == "dimir")//devotion blue black
|
|
||||||
{
|
|
||||||
TargetChooserFactory dtf(card->getObserver());
|
|
||||||
TargetChooser * dtc = dtf.createTargetChooser("*",NULL);
|
|
||||||
for (int i = 0; i < 2; i++)
|
|
||||||
{
|
|
||||||
Player * dp = card->getObserver()->players[i];
|
|
||||||
MTGGameZone * dzones[] = { dp->game->inPlay, dp->game->graveyard, dp->game->hand, dp->game->library };
|
|
||||||
for (int k = 0; k < 4; k++)
|
|
||||||
{
|
|
||||||
MTGGameZone * zone = dzones[k];
|
|
||||||
if (dtc->targetsZone(zone, card)&&dp == card->controller())
|
|
||||||
{
|
|
||||||
intValue += zone->countDevotion(dtc, 2);
|
|
||||||
intValue += zone->countDevotion(dtc, 4);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SAFE_DELETE(dtc);
|
|
||||||
}
|
|
||||||
else if (s == "golgari")//devotion to green black
|
|
||||||
{
|
|
||||||
TargetChooserFactory dtf(card->getObserver());
|
|
||||||
TargetChooser * dtc = dtf.createTargetChooser("*",NULL);
|
|
||||||
for (int i = 0; i < 2; i++)
|
|
||||||
{
|
|
||||||
Player * dp = card->getObserver()->players[i];
|
|
||||||
MTGGameZone * dzones[] = { dp->game->inPlay, dp->game->graveyard, dp->game->hand, dp->game->library };
|
|
||||||
for (int k = 0; k < 4; k++)
|
|
||||||
{
|
|
||||||
MTGGameZone * zone = dzones[k];
|
|
||||||
if (dtc->targetsZone(zone, card)&&dp == card->controller())
|
|
||||||
{
|
|
||||||
intValue += zone->countDevotion(dtc, 1);
|
|
||||||
intValue += zone->countDevotion(dtc, 4);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SAFE_DELETE(dtc);
|
|
||||||
}
|
|
||||||
else if (s == "gruul")//devotion to green red
|
|
||||||
{
|
|
||||||
TargetChooserFactory dtf(card->getObserver());
|
|
||||||
TargetChooser * dtc = dtf.createTargetChooser("*",NULL);
|
|
||||||
for (int i = 0; i < 2; i++)
|
|
||||||
{
|
|
||||||
Player * dp = card->getObserver()->players[i];
|
|
||||||
MTGGameZone * dzones[] = { dp->game->inPlay, dp->game->graveyard, dp->game->hand, dp->game->library };
|
|
||||||
for (int k = 0; k < 4; k++)
|
|
||||||
{
|
|
||||||
MTGGameZone * zone = dzones[k];
|
|
||||||
if (dtc->targetsZone(zone, card)&&dp == card->controller())
|
|
||||||
{
|
|
||||||
intValue += zone->countDevotion(dtc, 1);
|
|
||||||
intValue += zone->countDevotion(dtc, 3);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SAFE_DELETE(dtc);
|
|
||||||
}
|
|
||||||
else if (s == "izzet")//devotion to red blue
|
|
||||||
{
|
|
||||||
TargetChooserFactory dtf(card->getObserver());
|
|
||||||
TargetChooser * dtc = dtf.createTargetChooser("*",NULL);
|
|
||||||
for (int i = 0; i < 2; i++)
|
|
||||||
{
|
|
||||||
Player * dp = card->getObserver()->players[i];
|
|
||||||
MTGGameZone * dzones[] = { dp->game->inPlay, dp->game->graveyard, dp->game->hand, dp->game->library };
|
|
||||||
for (int k = 0; k < 4; k++)
|
|
||||||
{
|
|
||||||
MTGGameZone * zone = dzones[k];
|
|
||||||
if (dtc->targetsZone(zone, card)&&dp == card->controller())
|
|
||||||
{
|
|
||||||
intValue += zone->countDevotion(dtc, 2);
|
|
||||||
intValue += zone->countDevotion(dtc, 3);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SAFE_DELETE(dtc);
|
|
||||||
}
|
|
||||||
else if (s == "orzhov")//devotion to white black
|
|
||||||
{
|
|
||||||
TargetChooserFactory dtf(card->getObserver());
|
|
||||||
TargetChooser * dtc = dtf.createTargetChooser("*",NULL);
|
|
||||||
for (int i = 0; i < 2; i++)
|
|
||||||
{
|
|
||||||
Player * dp = card->getObserver()->players[i];
|
|
||||||
MTGGameZone * dzones[] = { dp->game->inPlay, dp->game->graveyard, dp->game->hand, dp->game->library };
|
|
||||||
for (int k = 0; k < 4; k++)
|
|
||||||
{
|
|
||||||
MTGGameZone * zone = dzones[k];
|
|
||||||
if (dtc->targetsZone(zone, card)&&dp == card->controller())
|
|
||||||
{
|
|
||||||
intValue += zone->countDevotion(dtc, 4);
|
|
||||||
intValue += zone->countDevotion(dtc, 5);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SAFE_DELETE(dtc);
|
|
||||||
}
|
|
||||||
else if (s == "rakdos")//devotion to red black
|
|
||||||
{
|
|
||||||
TargetChooserFactory dtf(card->getObserver());
|
|
||||||
TargetChooser * dtc = dtf.createTargetChooser("*",NULL);
|
|
||||||
for (int i = 0; i < 2; i++)
|
|
||||||
{
|
|
||||||
Player * dp = card->getObserver()->players[i];
|
|
||||||
MTGGameZone * dzones[] = { dp->game->inPlay, dp->game->graveyard, dp->game->hand, dp->game->library };
|
|
||||||
for (int k = 0; k < 4; k++)
|
|
||||||
{
|
|
||||||
MTGGameZone * zone = dzones[k];
|
|
||||||
if (dtc->targetsZone(zone, card)&&dp == card->controller())
|
|
||||||
{
|
|
||||||
intValue += zone->countDevotion(dtc, 3);
|
|
||||||
intValue += zone->countDevotion(dtc, 4);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SAFE_DELETE(dtc);
|
|
||||||
}
|
|
||||||
else if (s == "selesnya")//devotion to green white
|
|
||||||
{
|
|
||||||
TargetChooserFactory dtf(card->getObserver());
|
|
||||||
TargetChooser * dtc = dtf.createTargetChooser("*",NULL);
|
|
||||||
for (int i = 0; i < 2; i++)
|
|
||||||
{
|
|
||||||
Player * dp = card->getObserver()->players[i];
|
|
||||||
MTGGameZone * dzones[] = { dp->game->inPlay, dp->game->graveyard, dp->game->hand, dp->game->library };
|
|
||||||
for (int k = 0; k < 4; k++)
|
|
||||||
{
|
|
||||||
MTGGameZone * zone = dzones[k];
|
|
||||||
if (dtc->targetsZone(zone, card)&&dp == card->controller())
|
|
||||||
{
|
|
||||||
intValue += zone->countDevotion(dtc, 1);
|
|
||||||
intValue += zone->countDevotion(dtc, 5);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SAFE_DELETE(dtc);
|
|
||||||
}
|
|
||||||
else if (s == "simic")//devotion to green blue
|
|
||||||
{
|
|
||||||
TargetChooserFactory dtf(card->getObserver());
|
|
||||||
TargetChooser * dtc = dtf.createTargetChooser("*",NULL);
|
|
||||||
for (int i = 0; i < 2; i++)
|
|
||||||
{
|
|
||||||
Player * dp = card->getObserver()->players[i];
|
|
||||||
MTGGameZone * dzones[] = { dp->game->inPlay, dp->game->graveyard, dp->game->hand, dp->game->library };
|
|
||||||
for (int k = 0; k < 4; k++)
|
|
||||||
{
|
|
||||||
MTGGameZone * zone = dzones[k];
|
|
||||||
if (dtc->targetsZone(zone, card)&&dp == card->controller())
|
|
||||||
{
|
|
||||||
intValue += zone->countDevotion(dtc, 1);
|
|
||||||
intValue += zone->countDevotion(dtc, 2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SAFE_DELETE(dtc);
|
|
||||||
}
|
|
||||||
else if (s.find("type:") != string::npos)
|
else if (s.find("type:") != string::npos)
|
||||||
{
|
{
|
||||||
size_t begins = s.find("type:");
|
size_t begins = s.find("type:");
|
||||||
@@ -635,17 +435,6 @@ private:
|
|||||||
{
|
{
|
||||||
intValue = target->controller()->opponent()->game->hand->nb_cards;
|
intValue = target->controller()->opponent()->game->hand->nb_cards;
|
||||||
}
|
}
|
||||||
else if (s == "powertotalinplay")//Count Total Power of Creatures you control... Formidable
|
|
||||||
{
|
|
||||||
intValue = 0;
|
|
||||||
for (int j = card->controller()->game->inPlay->nb_cards - 1; j >= 0; --j)
|
|
||||||
{
|
|
||||||
if (card->controller()->game->inPlay->cards[j]->hasType(Subtypes::TYPE_CREATURE))
|
|
||||||
{
|
|
||||||
intValue += card->controller()->game->inPlay->cards[j]->power;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
intValue = atoi(s.c_str());
|
intValue = atoi(s.c_str());
|
||||||
@@ -1292,7 +1081,7 @@ public:
|
|||||||
ManaCost * cost = NULL);
|
ManaCost * cost = NULL);
|
||||||
|
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char* getMenuText();
|
||||||
AACounter * clone() const;
|
AACounter * clone() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1311,7 +1100,7 @@ public:
|
|||||||
bool all,ManaCost * cost = NULL);
|
bool all,ManaCost * cost = NULL);
|
||||||
|
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char* getMenuText();
|
||||||
AARemoveAllCounter * clone() const;
|
AARemoveAllCounter * clone() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1321,7 +1110,7 @@ class AAResetDamage: public ActivatedAbility
|
|||||||
public:
|
public:
|
||||||
AAResetDamage(GameObserver* observer, int id, MTGCardInstance * source, MTGCardInstance * target, ManaCost * cost = NULL);
|
AAResetDamage(GameObserver* observer, int id, MTGCardInstance * source, MTGCardInstance * target, ManaCost * cost = NULL);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char* getMenuText();
|
||||||
AAResetDamage * clone() const;
|
AAResetDamage * clone() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1331,7 +1120,7 @@ public:
|
|||||||
string named;
|
string named;
|
||||||
AAFakeAbility(GameObserver* observer, int id, MTGCardInstance * source, MTGCardInstance * target,string _newName, ManaCost * cost = NULL);
|
AAFakeAbility(GameObserver* observer, int id, MTGCardInstance * source, MTGCardInstance * target,string _newName, ManaCost * cost = NULL);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char* getMenuText();
|
||||||
AAFakeAbility * clone() const;
|
AAFakeAbility * clone() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1342,7 +1131,7 @@ public:
|
|||||||
|
|
||||||
AAFizzler(GameObserver* observer, int _id, MTGCardInstance * card, Spell * _target, ManaCost * _cost = NULL);
|
AAFizzler(GameObserver* observer, int _id, MTGCardInstance * card, Spell * _target, ManaCost * _cost = NULL);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
AAFizzler* clone() const;
|
AAFizzler* clone() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1371,7 +1160,7 @@ public:
|
|||||||
string Cond;
|
string Cond;
|
||||||
IfThenAbility(GameObserver* observer, int _id,MTGAbility * delayedAbility = NULL,MTGAbility * delayedElseAbility = NULL, MTGCardInstance * _source=NULL, Targetable * target = NULL, int type = 1,string Cond = "");
|
IfThenAbility(GameObserver* observer, int _id,MTGAbility * delayedAbility = NULL,MTGAbility * delayedElseAbility = NULL, MTGCardInstance * _source=NULL, Targetable * target = NULL, int type = 1,string Cond = "");
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
IfThenAbility * clone() const;
|
IfThenAbility * clone() const;
|
||||||
~IfThenAbility();
|
~IfThenAbility();
|
||||||
};
|
};
|
||||||
@@ -1390,7 +1179,7 @@ public:
|
|||||||
|
|
||||||
void Update(float dt);
|
void Update(float dt);
|
||||||
|
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
int testDestroy();
|
int testDestroy();
|
||||||
|
|
||||||
int isReactingToTargetClick(Targetable * card);
|
int isReactingToTargetClick(Targetable * card);
|
||||||
@@ -1420,7 +1209,7 @@ public:
|
|||||||
bool CheckUserInput(JButton key);
|
bool CheckUserInput(JButton key);
|
||||||
void Update(float dt);
|
void Update(float dt);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
int testDestroy();
|
int testDestroy();
|
||||||
int isReactingToTargetClick(Targetable * card);
|
int isReactingToTargetClick(Targetable * card);
|
||||||
int reactToTargetClick(Targetable * object);
|
int reactToTargetClick(Targetable * object);
|
||||||
@@ -1436,7 +1225,7 @@ class AAProliferate: public ActivatedAbility
|
|||||||
public:
|
public:
|
||||||
AAProliferate(GameObserver* observer, int id, MTGCardInstance * source, Targetable * target,ManaCost * cost = NULL);
|
AAProliferate(GameObserver* observer, int id, MTGCardInstance * source, Targetable * target,ManaCost * cost = NULL);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char* getMenuText();
|
||||||
AAProliferate * clone() const;
|
AAProliferate * clone() const;
|
||||||
~AAProliferate();
|
~AAProliferate();
|
||||||
};
|
};
|
||||||
@@ -1454,7 +1243,7 @@ public:
|
|||||||
int resolve();
|
int resolve();
|
||||||
int addToGame();
|
int addToGame();
|
||||||
int destroy();
|
int destroy();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
MultiAbility * clone() const;
|
MultiAbility * clone() const;
|
||||||
~MultiAbility();
|
~MultiAbility();
|
||||||
};
|
};
|
||||||
@@ -1469,9 +1258,8 @@ public:
|
|||||||
|
|
||||||
GenericActivatedAbility(GameObserver* observer, string newName,string castRestriction,int _id, MTGCardInstance * card, MTGAbility * a, ManaCost * _cost, string limit = "",MTGAbility * sideEffects = NULL,string usesBeforeSideEffects = "",
|
GenericActivatedAbility(GameObserver* observer, string newName,string castRestriction,int _id, MTGCardInstance * card, MTGAbility * a, ManaCost * _cost, string limit = "",MTGAbility * sideEffects = NULL,string usesBeforeSideEffects = "",
|
||||||
int restrictions = 0, MTGGameZone * dest = NULL);
|
int restrictions = 0, MTGGameZone * dest = NULL);
|
||||||
GenericActivatedAbility(const GenericActivatedAbility& other);
|
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
int isReactingToClick(MTGCardInstance * card, ManaCost * mana = NULL);
|
int isReactingToClick(MTGCardInstance * card, ManaCost * mana = NULL);
|
||||||
void Update(float dt);
|
void Update(float dt);
|
||||||
int testDestroy();
|
int testDestroy();
|
||||||
@@ -1486,7 +1274,7 @@ class AALibraryBottom: public ActivatedAbility
|
|||||||
public:
|
public:
|
||||||
AALibraryBottom(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target = NULL, ManaCost * _cost = NULL);
|
AALibraryBottom(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target = NULL, ManaCost * _cost = NULL);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
AALibraryBottom * clone() const;
|
AALibraryBottom * clone() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1496,7 +1284,7 @@ class AACopier: public ActivatedAbility
|
|||||||
public:
|
public:
|
||||||
AACopier(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target = NULL, ManaCost * _cost = NULL);
|
AACopier(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target = NULL, ManaCost * _cost = NULL);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
AACopier * clone() const;
|
AACopier * clone() const;
|
||||||
};
|
};
|
||||||
//imprint
|
//imprint
|
||||||
@@ -1505,7 +1293,7 @@ class AAPhaseOut: public ActivatedAbility
|
|||||||
public:
|
public:
|
||||||
AAPhaseOut(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target = NULL, ManaCost * _cost = NULL);
|
AAPhaseOut(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target = NULL, ManaCost * _cost = NULL);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
AAPhaseOut * clone() const;
|
AAPhaseOut * clone() const;
|
||||||
};
|
};
|
||||||
//cloning...this makes a token thats a copy of the target.
|
//cloning...this makes a token thats a copy of the target.
|
||||||
@@ -1522,7 +1310,7 @@ public:
|
|||||||
AACloner(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target = NULL, ManaCost * _cost = NULL, int who = 0,
|
AACloner(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target = NULL, ManaCost * _cost = NULL, int who = 0,
|
||||||
string abilitiesStringList = "",string typeslist = "");
|
string abilitiesStringList = "",string typeslist = "");
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
virtual ostream& toString(ostream& out) const;
|
virtual ostream& toString(ostream& out) const;
|
||||||
AACloner * clone() const;
|
AACloner * clone() const;
|
||||||
~AACloner();
|
~AACloner();
|
||||||
@@ -1538,7 +1326,7 @@ public:
|
|||||||
AAMover(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target, string dest,string _name, ManaCost * _cost = NULL);
|
AAMover(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target, string dest,string _name, ManaCost * _cost = NULL);
|
||||||
MTGGameZone * destinationZone(Targetable * target = NULL);
|
MTGGameZone * destinationZone(Targetable * target = NULL);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
const char * getMenuText(TargetChooser * fromTc);
|
const char * getMenuText(TargetChooser * fromTc);
|
||||||
AAMover * clone() const;
|
AAMover * clone() const;
|
||||||
~AAMover();
|
~AAMover();
|
||||||
@@ -1554,7 +1342,7 @@ public:
|
|||||||
AARandomMover(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target, string tcs, string from, string to);
|
AARandomMover(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target, string tcs, string from, string to);
|
||||||
MTGGameZone * destinationZone(Targetable * target = NULL,string zone = "");
|
MTGGameZone * destinationZone(Targetable * target = NULL,string zone = "");
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
AARandomMover * clone() const;
|
AARandomMover * clone() const;
|
||||||
~AARandomMover();
|
~AARandomMover();
|
||||||
};
|
};
|
||||||
@@ -1568,7 +1356,7 @@ public:
|
|||||||
string menu;
|
string menu;
|
||||||
AABuryCard(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target);
|
AABuryCard(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
AABuryCard * clone() const;
|
AABuryCard * clone() const;
|
||||||
~AABuryCard();
|
~AABuryCard();
|
||||||
};
|
};
|
||||||
@@ -1579,7 +1367,7 @@ public:
|
|||||||
MTGAbility * andAbility;
|
MTGAbility * andAbility;
|
||||||
AADestroyCard(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target);
|
AADestroyCard(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
AADestroyCard * clone() const;
|
AADestroyCard * clone() const;
|
||||||
~AADestroyCard();
|
~AADestroyCard();
|
||||||
};
|
};
|
||||||
@@ -1590,7 +1378,7 @@ public:
|
|||||||
MTGAbility * andAbility;
|
MTGAbility * andAbility;
|
||||||
AASacrificeCard(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target);
|
AASacrificeCard(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
AASacrificeCard * clone() const;
|
AASacrificeCard * clone() const;
|
||||||
~AASacrificeCard();
|
~AASacrificeCard();
|
||||||
};
|
};
|
||||||
@@ -1601,7 +1389,7 @@ public:
|
|||||||
MTGAbility * andAbility;
|
MTGAbility * andAbility;
|
||||||
AADiscardCard(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target);
|
AADiscardCard(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
AADiscardCard * clone() const;
|
AADiscardCard * clone() const;
|
||||||
~AADiscardCard();
|
~AADiscardCard();
|
||||||
};
|
};
|
||||||
@@ -1621,7 +1409,7 @@ public:
|
|||||||
string tcString;
|
string tcString;
|
||||||
|
|
||||||
GenericTargetAbility(GameObserver* observer, string newName, string castRestriction, int _id, MTGCardInstance * _source, TargetChooser * _tc, MTGAbility * a, ManaCost * _cost = NULL, string limit = "",MTGAbility * sideEffects = NULL,string usesBeforeSideEffects = "", int restrictions = 0, MTGGameZone * dest = NULL,string tcString ="");
|
GenericTargetAbility(GameObserver* observer, string newName, string castRestriction, int _id, MTGCardInstance * _source, TargetChooser * _tc, MTGAbility * a, ManaCost * _cost = NULL, string limit = "",MTGAbility * sideEffects = NULL,string usesBeforeSideEffects = "", int restrictions = 0, MTGGameZone * dest = NULL,string tcString ="");
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
~GenericTargetAbility();
|
~GenericTargetAbility();
|
||||||
GenericTargetAbility * clone() const;
|
GenericTargetAbility * clone() const;
|
||||||
int resolve();
|
int resolve();
|
||||||
@@ -1659,7 +1447,7 @@ public:
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
const string getMenuText()
|
const char * getMenuText()
|
||||||
{
|
{
|
||||||
return "Ninjutsu";
|
return "Ninjutsu";
|
||||||
}
|
}
|
||||||
@@ -1691,7 +1479,7 @@ public:
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
const string getMenuText()
|
const char * getMenuText()
|
||||||
{
|
{
|
||||||
return "Remove From Combat";
|
return "Remove From Combat";
|
||||||
}
|
}
|
||||||
@@ -1713,7 +1501,7 @@ public:
|
|||||||
AADrawer(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target, ManaCost * _cost,string nbcardsStr, int who =
|
AADrawer(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target, ManaCost * _cost,string nbcardsStr, int who =
|
||||||
TargetChooser::UNSET,bool noReplace = false);
|
TargetChooser::UNSET,bool noReplace = false);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
AADrawer * clone() const;
|
AADrawer * clone() const;
|
||||||
int getNumCards();
|
int getNumCards();
|
||||||
};
|
};
|
||||||
@@ -1733,7 +1521,7 @@ public:
|
|||||||
ACastRestriction(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target, TargetChooser * _restrictionsScope, WParsedInt * _value, bool _modifyExisting, int _zoneId, int who = TargetChooser::UNSET);
|
ACastRestriction(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target, TargetChooser * _restrictionsScope, WParsedInt * _value, bool _modifyExisting, int _zoneId, int who = TargetChooser::UNSET);
|
||||||
int addToGame();
|
int addToGame();
|
||||||
int destroy();
|
int destroy();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
ACastRestriction * clone() const;
|
ACastRestriction * clone() const;
|
||||||
~ACastRestriction();
|
~ACastRestriction();
|
||||||
|
|
||||||
@@ -1748,7 +1536,7 @@ public:
|
|||||||
|
|
||||||
AInstantCastRestrictionUEOT(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target, TargetChooser * _restrictionsScope, WParsedInt * _value, bool _modifyExisting, int _zoneId, int who = TargetChooser::UNSET);
|
AInstantCastRestrictionUEOT(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target, TargetChooser * _restrictionsScope, WParsedInt * _value, bool _modifyExisting, int _zoneId, int who = TargetChooser::UNSET);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
AInstantCastRestrictionUEOT * clone() const;
|
AInstantCastRestrictionUEOT * clone() const;
|
||||||
~AInstantCastRestrictionUEOT();
|
~AInstantCastRestrictionUEOT();
|
||||||
};
|
};
|
||||||
@@ -1761,7 +1549,7 @@ public:
|
|||||||
AALifer(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target,string life_s, ManaCost * _cost = NULL,
|
AALifer(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target,string life_s, ManaCost * _cost = NULL,
|
||||||
int who = TargetChooser::UNSET);
|
int who = TargetChooser::UNSET);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
AALifer * clone() const;
|
AALifer * clone() const;
|
||||||
int getLife();
|
int getLife();
|
||||||
|
|
||||||
@@ -1774,7 +1562,7 @@ public:
|
|||||||
AAWinGame(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target, ManaCost * _cost = NULL, int who =
|
AAWinGame(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target, ManaCost * _cost = NULL, int who =
|
||||||
TargetChooser::UNSET);
|
TargetChooser::UNSET);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
AAWinGame * clone() const;
|
AAWinGame * clone() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1815,7 +1603,7 @@ public:
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
const string getMenuText()
|
const char * getMenuText()
|
||||||
{
|
{
|
||||||
return Constants::MTGBasicAbilities[ability];
|
return Constants::MTGBasicAbilities[ability];
|
||||||
}
|
}
|
||||||
@@ -1857,7 +1645,7 @@ public:
|
|||||||
return InstantAbility::addToGame();
|
return InstantAbility::addToGame();
|
||||||
}
|
}
|
||||||
|
|
||||||
const string getMenuText()
|
const char * getMenuText()
|
||||||
{
|
{
|
||||||
return Constants::MTGBasicAbilities[ability];
|
return Constants::MTGBasicAbilities[ability];
|
||||||
}
|
}
|
||||||
@@ -1918,7 +1706,7 @@ public:
|
|||||||
return ActivatedAbility::addToGame();
|
return ActivatedAbility::addToGame();
|
||||||
}
|
}
|
||||||
|
|
||||||
const string getMenuText()
|
const char * getMenuText()
|
||||||
{
|
{
|
||||||
return ability->getMenuText();
|
return ability->getMenuText();
|
||||||
}
|
}
|
||||||
@@ -2074,7 +1862,7 @@ public:
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
const string getMenuText()
|
const char * getMenuText()
|
||||||
{
|
{
|
||||||
sprintf(menuText,"Protection from %s",tcstr.c_str());
|
sprintf(menuText,"Protection from %s",tcstr.c_str());
|
||||||
return menuText;
|
return menuText;
|
||||||
@@ -2266,7 +2054,7 @@ public:
|
|||||||
((MTGCardInstance *) target)->addToToughness(-wppt->toughness.getValue());
|
((MTGCardInstance *) target)->addToToughness(-wppt->toughness.getValue());
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
const string getMenuText()
|
const char * getMenuText()
|
||||||
{
|
{
|
||||||
if(PT.size())
|
if(PT.size())
|
||||||
{
|
{
|
||||||
@@ -2359,7 +2147,7 @@ public:
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
const string getMenuText()
|
const char * getMenuText()
|
||||||
{
|
{
|
||||||
return ability->getMenuText();
|
return ability->getMenuText();
|
||||||
}
|
}
|
||||||
@@ -2401,7 +2189,7 @@ public:
|
|||||||
return toAdd->addToGame();
|
return toAdd->addToGame();
|
||||||
}
|
}
|
||||||
|
|
||||||
const string getMenuText()
|
const char * getMenuText()
|
||||||
{
|
{
|
||||||
return ability->getMenuText();
|
return ability->getMenuText();
|
||||||
}
|
}
|
||||||
@@ -2499,7 +2287,7 @@ public:
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
const string getMenuText()
|
const char * getMenuText()
|
||||||
{
|
{
|
||||||
return "Regenerate";
|
return "Regenerate";
|
||||||
}
|
}
|
||||||
@@ -2706,7 +2494,7 @@ public:
|
|||||||
SAFE_DELETE(ability);
|
SAFE_DELETE(ability);
|
||||||
}
|
}
|
||||||
|
|
||||||
const string getMenuText()
|
const char * getMenuText()
|
||||||
{
|
{
|
||||||
if(ability)
|
if(ability)
|
||||||
{
|
{
|
||||||
@@ -2819,8 +2607,7 @@ public:
|
|||||||
|
|
||||||
int removed(MTGCardInstance * card)
|
int removed(MTGCardInstance * card)
|
||||||
{
|
{
|
||||||
if (abilities.find(card) != abilities.end()
|
if (abilities.find(card) != abilities.end() && !(forceDestroy == -1 && forcedAlive == 1))//only embelms have forcedestroy = -1 and forcedalive = 1
|
||||||
&& !(forceDestroy == -1 && forcedAlive == 1)) //only embelms have forcedestroy = -1 and forcedalive = 1
|
|
||||||
{
|
{
|
||||||
game->removeObserver(abilities[card]);
|
game->removeObserver(abilities[card]);
|
||||||
abilities.erase(card);
|
abilities.erase(card);
|
||||||
@@ -2833,7 +2620,7 @@ public:
|
|||||||
SAFE_DELETE(ability);
|
SAFE_DELETE(ability);
|
||||||
}
|
}
|
||||||
|
|
||||||
const string getMenuText()
|
const char * getMenuText()
|
||||||
{
|
{
|
||||||
//Special case for move
|
//Special case for move
|
||||||
if (AAMover * move = dynamic_cast<AAMover *>(ability))
|
if (AAMover * move = dynamic_cast<AAMover *>(ability))
|
||||||
@@ -3019,7 +2806,7 @@ public:
|
|||||||
int equip(MTGCardInstance * equipped);
|
int equip(MTGCardInstance * equipped);
|
||||||
|
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
|
|
||||||
int testDestroy();
|
int testDestroy();
|
||||||
int destroy();
|
int destroy();
|
||||||
@@ -3140,7 +2927,7 @@ public:
|
|||||||
SAFE_DELETE(NewPow);
|
SAFE_DELETE(NewPow);
|
||||||
SAFE_DELETE(NewTou);
|
SAFE_DELETE(NewTou);
|
||||||
}
|
}
|
||||||
for (int i = 0; i < Tokenizer(); ++i)
|
for (int i = 0; i < multiplier->getValue(); ++i)
|
||||||
{
|
{
|
||||||
//MTGCardInstance * myToken;
|
//MTGCardInstance * myToken;
|
||||||
if (tokenId)
|
if (tokenId)
|
||||||
@@ -3199,23 +2986,6 @@ public:
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Tokenizer()//tokenizer
|
|
||||||
{
|
|
||||||
int tokenize = 1;
|
|
||||||
if (source->controller()->game->battlefield->hasAbility(Constants::TOKENIZER))
|
|
||||||
{
|
|
||||||
int nbcards = source->controller()->game->battlefield->nb_cards;
|
|
||||||
for (int j = 0; j < nbcards; j++)
|
|
||||||
{
|
|
||||||
if (source->controller()->game->battlefield->cards[j]->has(Constants::TOKENIZER))
|
|
||||||
tokenize *= 2;
|
|
||||||
}
|
|
||||||
return multiplier->getValue()*tokenize;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return multiplier->getValue();
|
|
||||||
}
|
|
||||||
|
|
||||||
void setTokenOwner()
|
void setTokenOwner()
|
||||||
{
|
{
|
||||||
switch(who)
|
switch(who)
|
||||||
@@ -3264,7 +3034,7 @@ public:
|
|||||||
card->setAttacker(1);
|
card->setAttacker(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
const string getMenuText()
|
const char * getMenuText()
|
||||||
{
|
{
|
||||||
sprintf(menuText, "Create %s", name.c_str());
|
sprintf(menuText, "Create %s", name.c_str());
|
||||||
return menuText;
|
return menuText;
|
||||||
@@ -3365,7 +3135,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const string getMenuText()
|
const char * getMenuText()
|
||||||
{
|
{
|
||||||
if(name.size())
|
if(name.size())
|
||||||
return name.c_str();
|
return name.c_str();
|
||||||
@@ -3538,7 +3308,7 @@ public:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
const string getMenuText()
|
const char * getMenuText()
|
||||||
{
|
{
|
||||||
return ability->getMenuText();
|
return ability->getMenuText();
|
||||||
}
|
}
|
||||||
@@ -3750,7 +3520,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const string getMenuText()
|
const char * getMenuText()
|
||||||
{
|
{
|
||||||
return ability->getMenuText();
|
return ability->getMenuText();
|
||||||
}
|
}
|
||||||
@@ -3773,7 +3543,7 @@ public:
|
|||||||
AASetHand(GameObserver* observer, int _id, MTGCardInstance * _source, Targetable * _target, int hand, ManaCost * _cost = NULL,
|
AASetHand(GameObserver* observer, int _id, MTGCardInstance * _source, Targetable * _target, int hand, ManaCost * _cost = NULL,
|
||||||
int who = TargetChooser::UNSET);
|
int who = TargetChooser::UNSET);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
AASetHand * clone() const;
|
AASetHand * clone() const;
|
||||||
|
|
||||||
};
|
};
|
||||||
@@ -3787,7 +3557,7 @@ public:
|
|||||||
AALifeSet(GameObserver* observer, int _id, MTGCardInstance * _source, Targetable * _target, WParsedInt * life, ManaCost * _cost = NULL,
|
AALifeSet(GameObserver* observer, int _id, MTGCardInstance * _source, Targetable * _target, WParsedInt * life, ManaCost * _cost = NULL,
|
||||||
int who = TargetChooser::UNSET);
|
int who = TargetChooser::UNSET);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
AALifeSet * clone() const;
|
AALifeSet * clone() const;
|
||||||
~AALifeSet();
|
~AALifeSet();
|
||||||
|
|
||||||
@@ -3804,7 +3574,7 @@ public:
|
|||||||
AADamager(GameObserver* observer, int _id, MTGCardInstance * _source, Targetable * _target, string d, ManaCost * _cost = NULL,
|
AADamager(GameObserver* observer, int _id, MTGCardInstance * _source, Targetable * _target, string d, ManaCost * _cost = NULL,
|
||||||
int who = TargetChooser::UNSET);
|
int who = TargetChooser::UNSET);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
int getDamage();
|
int getDamage();
|
||||||
AADamager * clone() const;
|
AADamager * clone() const;
|
||||||
|
|
||||||
@@ -3818,7 +3588,7 @@ public:
|
|||||||
|
|
||||||
AADamagePrevent(GameObserver* observer, int _id, MTGCardInstance * _source, Targetable * _target, int preventing, ManaCost * _cost = NULL, int who = TargetChooser::UNSET);
|
AADamagePrevent(GameObserver* observer, int _id, MTGCardInstance * _source, Targetable * _target, int preventing, ManaCost * _cost = NULL, int who = TargetChooser::UNSET);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
AADamagePrevent * clone() const;
|
AADamagePrevent * clone() const;
|
||||||
~AADamagePrevent();
|
~AADamagePrevent();
|
||||||
};
|
};
|
||||||
@@ -3832,7 +3602,7 @@ public:
|
|||||||
AAAlterPoison(GameObserver* observer, int _id, MTGCardInstance * _source, Targetable * _target, int poison, ManaCost * _cost = NULL,
|
AAAlterPoison(GameObserver* observer, int _id, MTGCardInstance * _source, Targetable * _target, int poison, ManaCost * _cost = NULL,
|
||||||
int who = TargetChooser::UNSET);
|
int who = TargetChooser::UNSET);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
AAAlterPoison * clone() const;
|
AAAlterPoison * clone() const;
|
||||||
~AAAlterPoison();
|
~AAAlterPoison();
|
||||||
};
|
};
|
||||||
@@ -3860,7 +3630,7 @@ class AATapper: public ActivatedAbility
|
|||||||
public:
|
public:
|
||||||
AATapper(GameObserver* observer, int id, MTGCardInstance * card, MTGCardInstance * _target, ManaCost * _cost = NULL);
|
AATapper(GameObserver* observer, int id, MTGCardInstance * card, MTGCardInstance * _target, ManaCost * _cost = NULL);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
AATapper * clone() const;
|
AATapper * clone() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -3870,7 +3640,7 @@ class AAUntapper: public ActivatedAbility
|
|||||||
public:
|
public:
|
||||||
AAUntapper(GameObserver* observer, int id, MTGCardInstance * card, MTGCardInstance * _target, ManaCost * _cost = NULL);
|
AAUntapper(GameObserver* observer, int id, MTGCardInstance * card, MTGCardInstance * _target, ManaCost * _cost = NULL);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
AAUntapper * clone() const;
|
AAUntapper * clone() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -3891,7 +3661,7 @@ class AAFrozen: public ActivatedAbility
|
|||||||
public:
|
public:
|
||||||
AAFrozen(GameObserver* observer, int id, MTGCardInstance * card, MTGCardInstance * _target, ManaCost * _cost = NULL);
|
AAFrozen(GameObserver* observer, int id, MTGCardInstance * card, MTGCardInstance * _target, ManaCost * _cost = NULL);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
AAFrozen * clone() const;
|
AAFrozen * clone() const;
|
||||||
};
|
};
|
||||||
/* ghetto new target*/
|
/* ghetto new target*/
|
||||||
@@ -3901,7 +3671,7 @@ public:
|
|||||||
bool retarget;
|
bool retarget;
|
||||||
AANewTarget(GameObserver* observer, int id, MTGCardInstance * card, MTGCardInstance * _target,bool retarget = false, ManaCost * _cost = NULL);
|
AANewTarget(GameObserver* observer, int id, MTGCardInstance * card, MTGCardInstance * _target,bool retarget = false, ManaCost * _cost = NULL);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
AANewTarget * clone() const;
|
AANewTarget * clone() const;
|
||||||
};
|
};
|
||||||
/* morph*/
|
/* morph*/
|
||||||
@@ -3912,7 +3682,7 @@ public:
|
|||||||
AAMorph(GameObserver* observer, int id, MTGCardInstance * card, MTGCardInstance * _target, ManaCost * _cost = NULL);
|
AAMorph(GameObserver* observer, int id, MTGCardInstance * card, MTGCardInstance * _target, ManaCost * _cost = NULL);
|
||||||
int resolve();
|
int resolve();
|
||||||
int testDestroy();
|
int testDestroy();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
AAMorph * clone() const;
|
AAMorph * clone() const;
|
||||||
};
|
};
|
||||||
/* flip*/
|
/* flip*/
|
||||||
@@ -3924,7 +3694,7 @@ public:
|
|||||||
AAFlip(GameObserver* observer, int id, MTGCardInstance * card, MTGCardInstance * _target,string flipStats);
|
AAFlip(GameObserver* observer, int id, MTGCardInstance * card, MTGCardInstance * _target,string flipStats);
|
||||||
int resolve();
|
int resolve();
|
||||||
int testDestroy();
|
int testDestroy();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
AAFlip * clone() const;
|
AAFlip * clone() const;
|
||||||
};
|
};
|
||||||
/* dynamic ability build*/
|
/* dynamic ability build*/
|
||||||
@@ -3989,7 +3759,7 @@ string menu;
|
|||||||
int resolve();
|
int resolve();
|
||||||
int activateMainAbility(MTGAbility * toActivate,MTGCardInstance * source , Damageable * target);
|
int activateMainAbility(MTGAbility * toActivate,MTGCardInstance * source , Damageable * target);
|
||||||
int activateStored();
|
int activateStored();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
AADynamic * clone() const;
|
AADynamic * clone() const;
|
||||||
~AADynamic();
|
~AADynamic();
|
||||||
};
|
};
|
||||||
@@ -4042,7 +3812,7 @@ public:
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
const string getMenuText()
|
const char * getMenuText()
|
||||||
{
|
{
|
||||||
return "Swap power and toughness";
|
return "Swap power and toughness";
|
||||||
}
|
}
|
||||||
@@ -4058,7 +3828,7 @@ public:
|
|||||||
AAExchangeLife(GameObserver* observer, int _id, MTGCardInstance * _source, Targetable * _target, ManaCost * _cost = NULL,
|
AAExchangeLife(GameObserver* observer, int _id, MTGCardInstance * _source, Targetable * _target, ManaCost * _cost = NULL,
|
||||||
int who = TargetChooser::UNSET);
|
int who = TargetChooser::UNSET);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
AAExchangeLife * clone() const;
|
AAExchangeLife * clone() const;
|
||||||
|
|
||||||
};
|
};
|
||||||
@@ -4294,7 +4064,7 @@ public:
|
|||||||
int reapplyCountersBonus(MTGCardInstance * rtarget= NULL,bool powerapplied=false,bool toughnessapplied=false);
|
int reapplyCountersBonus(MTGCardInstance * rtarget= NULL,bool powerapplied=false,bool toughnessapplied=false);
|
||||||
int testDestroy();
|
int testDestroy();
|
||||||
int destroy();
|
int destroy();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
ATransformer * clone() const;
|
ATransformer * clone() const;
|
||||||
~ATransformer();
|
~ATransformer();
|
||||||
};
|
};
|
||||||
@@ -4317,7 +4087,7 @@ public:
|
|||||||
|
|
||||||
ATransformerInstant(GameObserver* observer, int id, MTGCardInstance * source, MTGCardInstance * target, string types = "", string abilities = "",string newpower = "",bool newpowerfound = false,string newtoughness = "",bool newtoughnessfound = false,vector<string>newAbilitiesList = vector<string>(),bool newAbilityFound = false,bool aForever = false, bool UYNT = false,string menutext = "");
|
ATransformerInstant(GameObserver* observer, int id, MTGCardInstance * source, MTGCardInstance * target, string types = "", string abilities = "",string newpower = "",bool newpowerfound = false,string newtoughness = "",bool newtoughnessfound = false,vector<string>newAbilitiesList = vector<string>(),bool newAbilityFound = false,bool aForever = false, bool UYNT = false,string menutext = "");
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
ATransformerInstant * clone() const;
|
ATransformerInstant * clone() const;
|
||||||
~ATransformerInstant();
|
~ATransformerInstant();
|
||||||
};
|
};
|
||||||
@@ -4333,7 +4103,7 @@ public:
|
|||||||
WParsedPT * newWppt;
|
WParsedPT * newWppt;
|
||||||
PTInstant(GameObserver* observer, int id, MTGCardInstance * source, MTGCardInstance * target, WParsedPT * wppt,string s = "",bool nonstatic = false);
|
PTInstant(GameObserver* observer, int id, MTGCardInstance * source, MTGCardInstance * target, WParsedPT * wppt,string s = "",bool nonstatic = false);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
PTInstant * clone() const;
|
PTInstant * clone() const;
|
||||||
~PTInstant();
|
~PTInstant();
|
||||||
};
|
};
|
||||||
@@ -4392,7 +4162,7 @@ public:
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
const string getMenuText()
|
const char * getMenuText()
|
||||||
{
|
{
|
||||||
return "Exalted";
|
return "Exalted";
|
||||||
}
|
}
|
||||||
@@ -4410,7 +4180,7 @@ public:
|
|||||||
ASwapPT * ability;
|
ASwapPT * ability;
|
||||||
ASwapPTUEOT(GameObserver* observer, int id, MTGCardInstance * source, MTGCardInstance * target);
|
ASwapPTUEOT(GameObserver* observer, int id, MTGCardInstance * source, MTGCardInstance * target);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
ASwapPTUEOT * clone() const;
|
ASwapPTUEOT * clone() const;
|
||||||
~ASwapPTUEOT();
|
~ASwapPTUEOT();
|
||||||
};
|
};
|
||||||
@@ -4487,7 +4257,7 @@ public:
|
|||||||
APreventDamageTypesUEOT(GameObserver* observer, int id, MTGCardInstance * source, string to, string from, int type = 0);
|
APreventDamageTypesUEOT(GameObserver* observer, int id, MTGCardInstance * source, string to, string from, int type = 0);
|
||||||
int resolve();
|
int resolve();
|
||||||
int destroy();
|
int destroy();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
APreventDamageTypesUEOT * clone() const;
|
APreventDamageTypesUEOT * clone() const;
|
||||||
~APreventDamageTypesUEOT();
|
~APreventDamageTypesUEOT();
|
||||||
};
|
};
|
||||||
@@ -4504,7 +4274,7 @@ public:
|
|||||||
AVanishing(GameObserver* observer, int _id, MTGCardInstance * card, ManaCost * _cost, int restrictions = 0,int amount = 0,string counterName = "");
|
AVanishing(GameObserver* observer, int _id, MTGCardInstance * card, ManaCost * _cost, int restrictions = 0,int amount = 0,string counterName = "");
|
||||||
void Update(float dt);
|
void Update(float dt);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
AVanishing * clone() const;
|
AVanishing * clone() const;
|
||||||
~AVanishing();
|
~AVanishing();
|
||||||
};
|
};
|
||||||
@@ -4526,7 +4296,7 @@ public:
|
|||||||
void Update(float dt);
|
void Update(float dt);
|
||||||
int isReactingToClick(MTGCardInstance * card, ManaCost * mana = NULL);
|
int isReactingToClick(MTGCardInstance * card, ManaCost * mana = NULL);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
virtual ostream& toString(ostream& out) const;
|
virtual ostream& toString(ostream& out) const;
|
||||||
AUpkeep * clone() const;
|
AUpkeep * clone() const;
|
||||||
~AUpkeep();
|
~AUpkeep();
|
||||||
@@ -4552,7 +4322,7 @@ public:
|
|||||||
MTG_PHASE_UPKEEP,bool forcedestroy = false,bool next = true,bool myturn = true,bool opponentturn = true,bool once = false);
|
MTG_PHASE_UPKEEP,bool forcedestroy = false,bool next = true,bool myturn = true,bool opponentturn = true,bool once = false);
|
||||||
void Update(float dt);
|
void Update(float dt);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
APhaseAction * clone() const;
|
APhaseAction * clone() const;
|
||||||
~APhaseAction();
|
~APhaseAction();
|
||||||
};
|
};
|
||||||
@@ -4566,7 +4336,7 @@ public:
|
|||||||
APhaseActionGeneric(GameObserver* observer, int _id, MTGCardInstance * card, MTGCardInstance * target, string sAbility, int restrictions = 0, int _phase =
|
APhaseActionGeneric(GameObserver* observer, int _id, MTGCardInstance * card, MTGCardInstance * target, string sAbility, int restrictions = 0, int _phase =
|
||||||
MTG_PHASE_UPKEEP,bool forcedestroy = false,bool next = true,bool myturn = false,bool opponentturn = false,bool once = false);
|
MTG_PHASE_UPKEEP,bool forcedestroy = false,bool next = true,bool myturn = false,bool opponentturn = false,bool once = false);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
APhaseActionGeneric * clone() const;
|
APhaseActionGeneric * clone() const;
|
||||||
~APhaseActionGeneric();
|
~APhaseActionGeneric();
|
||||||
|
|
||||||
@@ -4586,7 +4356,7 @@ public:
|
|||||||
void Update(float dt);
|
void Update(float dt);
|
||||||
void resolveBlink();
|
void resolveBlink();
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
ABlink * clone() const;
|
ABlink * clone() const;
|
||||||
~ABlink();
|
~ABlink();
|
||||||
private:
|
private:
|
||||||
@@ -4604,7 +4374,7 @@ public:
|
|||||||
MTGAbility * stored;
|
MTGAbility * stored;
|
||||||
ABlinkGeneric(GameObserver* observer, int _id, MTGCardInstance * card, MTGCardInstance * _target,bool blinkueot=false,bool blinkForSource = false,bool blinkhand = false,MTGAbility * stored = NULL);
|
ABlinkGeneric(GameObserver* observer, int _id, MTGCardInstance * card, MTGCardInstance * _target,bool blinkueot=false,bool blinkForSource = false,bool blinkhand = false,MTGAbility * stored = NULL);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
ABlinkGeneric * clone() const;
|
ABlinkGeneric * clone() const;
|
||||||
~ABlinkGeneric();
|
~ABlinkGeneric();
|
||||||
|
|
||||||
@@ -5510,7 +5280,7 @@ public:
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
const string getMenuText()
|
const char * getMenuText()
|
||||||
{
|
{
|
||||||
return "phase alter";
|
return "phase alter";
|
||||||
}
|
}
|
||||||
@@ -5529,7 +5299,7 @@ public:
|
|||||||
AADepleter(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target,string nbcardsStr, ManaCost * _cost = NULL,
|
AADepleter(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target,string nbcardsStr, ManaCost * _cost = NULL,
|
||||||
int who = TargetChooser::UNSET);
|
int who = TargetChooser::UNSET);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
AADepleter * clone() const;
|
AADepleter * clone() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -5542,7 +5312,7 @@ public:
|
|||||||
AAModTurn(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target,string nbTurnStr, ManaCost * _cost = NULL,
|
AAModTurn(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target,string nbTurnStr, ManaCost * _cost = NULL,
|
||||||
int who = TargetChooser::UNSET);
|
int who = TargetChooser::UNSET);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
AAModTurn * clone() const;
|
AAModTurn * clone() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -5553,21 +5323,10 @@ public:
|
|||||||
AAShuffle(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target, ManaCost * _cost = NULL, int who =
|
AAShuffle(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target, ManaCost * _cost = NULL, int who =
|
||||||
TargetChooser::UNSET);
|
TargetChooser::UNSET);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
AAShuffle * clone() const;
|
AAShuffle * clone() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
//Mulligan
|
|
||||||
class AAMulligan: public ActivatedAbilityTP
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
AAMulligan(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target, ManaCost * _cost = NULL, int who =
|
|
||||||
TargetChooser::UNSET);
|
|
||||||
int resolve();
|
|
||||||
const string getMenuText();
|
|
||||||
AAMulligan * clone() const;
|
|
||||||
};
|
|
||||||
|
|
||||||
//Remove Mana From ManaPool
|
//Remove Mana From ManaPool
|
||||||
class AARemoveMana: public ActivatedAbilityTP
|
class AARemoveMana: public ActivatedAbilityTP
|
||||||
{
|
{
|
||||||
@@ -5577,7 +5336,7 @@ public:
|
|||||||
|
|
||||||
AARemoveMana(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target, string ManaDesc, int who = TargetChooser::UNSET);
|
AARemoveMana(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target, string ManaDesc, int who = TargetChooser::UNSET);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
AARemoveMana * clone() const;
|
AARemoveMana * clone() const;
|
||||||
~AARemoveMana();
|
~AARemoveMana();
|
||||||
|
|
||||||
@@ -5592,7 +5351,7 @@ public:
|
|||||||
AARandomDiscarder(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target,string nbcardsStr, ManaCost * _cost = NULL,
|
AARandomDiscarder(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target,string nbcardsStr, ManaCost * _cost = NULL,
|
||||||
int who = TargetChooser::UNSET);
|
int who = TargetChooser::UNSET);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
AARandomDiscarder * clone() const;
|
AARandomDiscarder * clone() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -5764,7 +5523,7 @@ public:
|
|||||||
|
|
||||||
int testDestroy(){return 0;};
|
int testDestroy(){return 0;};
|
||||||
void Update(float dt);
|
void Update(float dt);
|
||||||
const string getMenuText();
|
const char * getMenuText();
|
||||||
int isReactingToTargetClick(Targetable * card);
|
int isReactingToTargetClick(Targetable * card);
|
||||||
int reactToTargetClick(Targetable * object);
|
int reactToTargetClick(Targetable * object);
|
||||||
MTGCardInstance * makeCard();
|
MTGCardInstance * makeCard();
|
||||||
@@ -5881,7 +5640,7 @@ public:
|
|||||||
MTGAbility * abilityAltered;
|
MTGAbility * abilityAltered;
|
||||||
AASetColorChosen(GameObserver* observer, int id, MTGCardInstance * source, MTGCardInstance * target, int _color = 0 ,string toAdd = "");
|
AASetColorChosen(GameObserver* observer, int id, MTGCardInstance * source, MTGCardInstance * target, int _color = 0 ,string toAdd = "");
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char* getMenuText();
|
||||||
AASetColorChosen * clone() const;
|
AASetColorChosen * clone() const;
|
||||||
~AASetColorChosen();
|
~AASetColorChosen();
|
||||||
};
|
};
|
||||||
@@ -5894,7 +5653,7 @@ public:
|
|||||||
MTGAbility * abilityAltered;
|
MTGAbility * abilityAltered;
|
||||||
AASetTypeChosen(GameObserver* observer, int id, MTGCardInstance * source, MTGCardInstance * target, int _type = 0,string menu = "error" ,string toAdd = "");
|
AASetTypeChosen(GameObserver* observer, int id, MTGCardInstance * source, MTGCardInstance * target, int _type = 0,string menu = "error" ,string toAdd = "");
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char* getMenuText();
|
||||||
AASetTypeChosen * clone() const;
|
AASetTypeChosen * clone() const;
|
||||||
~AASetTypeChosen();
|
~AASetTypeChosen();
|
||||||
};
|
};
|
||||||
@@ -5908,7 +5667,7 @@ public:
|
|||||||
bool ANonWall;
|
bool ANonWall;
|
||||||
GenericChooseTypeColor(GameObserver* observer, int id, MTGCardInstance * source, Targetable * target, string toAdd = "",bool chooseColor = false,bool nonwall = false, ManaCost * cost = NULL);
|
GenericChooseTypeColor(GameObserver* observer, int id, MTGCardInstance * source, Targetable * target, string toAdd = "",bool chooseColor = false,bool nonwall = false, ManaCost * cost = NULL);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char* getMenuText();
|
||||||
GenericChooseTypeColor * clone() const;
|
GenericChooseTypeColor * clone() const;
|
||||||
~GenericChooseTypeColor();
|
~GenericChooseTypeColor();
|
||||||
|
|
||||||
@@ -5925,7 +5684,7 @@ public:
|
|||||||
MTGAbility * abilityAltered;
|
MTGAbility * abilityAltered;
|
||||||
AASetCoin(GameObserver* observer, int id, MTGCardInstance * source, MTGCardInstance * target, int side = -1,string toAdd = "");
|
AASetCoin(GameObserver* observer, int id, MTGCardInstance * source, MTGCardInstance * target, int side = -1,string toAdd = "");
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char* getMenuText();
|
||||||
AASetCoin * clone() const;
|
AASetCoin * clone() const;
|
||||||
~AASetCoin();
|
~AASetCoin();
|
||||||
};
|
};
|
||||||
@@ -5936,7 +5695,7 @@ public:
|
|||||||
AASetCoin * setCoin;
|
AASetCoin * setCoin;
|
||||||
GenericFlipACoin(GameObserver* observer, int id, MTGCardInstance * source, Targetable * target, string toAdd = "", ManaCost * cost = NULL);
|
GenericFlipACoin(GameObserver* observer, int id, MTGCardInstance * source, Targetable * target, string toAdd = "", ManaCost * cost = NULL);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char* getMenuText();
|
||||||
GenericFlipACoin * clone() const;
|
GenericFlipACoin * clone() const;
|
||||||
~GenericFlipACoin();
|
~GenericFlipACoin();
|
||||||
|
|
||||||
@@ -5955,7 +5714,7 @@ public:
|
|||||||
|
|
||||||
GenericPaidAbility(GameObserver* observer, int id, MTGCardInstance * source, Targetable * target,string _newName,string _castRestriction,string _mayCost, string toAdd, ManaCost * cost = NULL);
|
GenericPaidAbility(GameObserver* observer, int id, MTGCardInstance * source, Targetable * target,string _newName,string _castRestriction,string _mayCost, string toAdd, ManaCost * cost = NULL);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const char* getMenuText();
|
||||||
GenericPaidAbility * clone() const;
|
GenericPaidAbility * clone() const;
|
||||||
~GenericPaidAbility();
|
~GenericPaidAbility();
|
||||||
|
|
||||||
|
|||||||
@@ -64,7 +64,6 @@ class CardDescriptor: public MTGCardInstance
|
|||||||
string compareName;
|
string compareName;
|
||||||
int CDopponentDamaged;
|
int CDopponentDamaged;
|
||||||
int CDcontrollerDamaged;
|
int CDcontrollerDamaged;
|
||||||
int CDdamager;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ protected:
|
|||||||
/*
|
/*
|
||||||
** Tries to render the Big version of a card picture, backups to text version in case of failure
|
** Tries to render the Big version of a card picture, backups to text version in case of failure
|
||||||
*/
|
*/
|
||||||
static void RenderBig(MTGCard * card, const Pos& pos, bool thumb = false);
|
static void RenderBig(MTGCard * card, const Pos& pos);
|
||||||
|
|
||||||
static void RenderCountersBig(MTGCard * card, const Pos& pos, int drawMode = DrawMode::kNormal);
|
static void RenderCountersBig(MTGCard * card, const Pos& pos, int drawMode = DrawMode::kNormal);
|
||||||
static void AlternateRender(MTGCard * card, const Pos& pos);
|
static void AlternateRender(MTGCard * card, const Pos& pos);
|
||||||
@@ -55,8 +55,8 @@ public:
|
|||||||
virtual void Render();
|
virtual void Render();
|
||||||
virtual void Update(float dt);
|
virtual void Update(float dt);
|
||||||
|
|
||||||
void DrawCard(const Pos& inPosition, int inMode = DrawMode::kNormal, bool thumb = false);
|
void DrawCard(const Pos& inPosition, int inMode = DrawMode::kNormal);
|
||||||
static void DrawCard(MTGCard* inCard, const Pos& inPosition, int inMode = DrawMode::kNormal, bool thumb = false);
|
static void DrawCard(MTGCard* inCard, const Pos& inPosition, int inMode = DrawMode::kNormal);
|
||||||
|
|
||||||
static JQuadPtr AlternateThumbQuad(MTGCard * card);
|
static JQuadPtr AlternateThumbQuad(MTGCard * card);
|
||||||
virtual ostream& toString(ostream&) const;
|
virtual ostream& toString(ostream&) const;
|
||||||
|
|||||||
@@ -101,9 +101,10 @@ public:
|
|||||||
int removeType(string value, int removeAll = 0);
|
int removeType(string value, int removeAll = 0);
|
||||||
int removeType(int value, int removeAll = 0);
|
int removeType(int value, int removeAll = 0);
|
||||||
bool hasSubtype(int _subtype);
|
bool hasSubtype(int _subtype);
|
||||||
|
bool hasSubtype(const char * _subtype);
|
||||||
bool hasSubtype(const string& _subtype);
|
bool hasSubtype(const string& _subtype);
|
||||||
bool hasType(int _type);
|
bool hasType(int _type);
|
||||||
bool hasType(const string& type);
|
bool hasType(const char * type);
|
||||||
|
|
||||||
void setManaCost(const string& value);
|
void setManaCost(const string& value);
|
||||||
ManaCost * getManaCost();
|
ManaCost * getManaCost();
|
||||||
|
|||||||
@@ -1,45 +0,0 @@
|
|||||||
#ifndef _CAROUSEL_DECK_VIEW_H_
|
|
||||||
#define _CAROUSEL_DECK_VIEW_H_
|
|
||||||
|
|
||||||
#include "DeckView.h"
|
|
||||||
#include "Easing.h"
|
|
||||||
|
|
||||||
class CarouselDeckView : public DeckView
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
static const float max_scale;
|
|
||||||
static const float x_center;
|
|
||||||
static const float right_border;
|
|
||||||
static const float slide_animation_duration;
|
|
||||||
static const float scroll_animation_duration;
|
|
||||||
|
|
||||||
public:
|
|
||||||
CarouselDeckView();
|
|
||||||
virtual ~CarouselDeckView();
|
|
||||||
void Reset();
|
|
||||||
|
|
||||||
void UpdateViewState(float dt);
|
|
||||||
void UpdateCardPosition(int index);
|
|
||||||
void renderCard(int index)
|
|
||||||
{
|
|
||||||
int alpha = (int) (255 * (mCards[index].scale + 1.0 - max_scale));
|
|
||||||
DeckView::renderCard(index, alpha);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Render();
|
|
||||||
|
|
||||||
bool ButtonPressed(Buttons button);
|
|
||||||
MTGCard * Click(int x, int y);
|
|
||||||
MTGCard * Click();
|
|
||||||
|
|
||||||
void changePositionAnimated(int offset);
|
|
||||||
void changeFilterAnimated(int offset);
|
|
||||||
|
|
||||||
MTGCard *getActiveCard();
|
|
||||||
private:
|
|
||||||
float mScrollOffset, mSlideOffset;
|
|
||||||
InOutQuadEasing mScrollEasing;
|
|
||||||
InOutQuadEasing mSlideEasing;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif //_CAROUSEL_DECK_VIEW_H_
|
|
||||||
@@ -17,7 +17,7 @@ private:
|
|||||||
StatsWrapper *stw;
|
StatsWrapper *stw;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DeckEditorMenu(int id, JGuiListener* listener = NULL, int fontId = 1, const string& _title = "", DeckDataWrapper *selectedDeck = NULL, StatsWrapper *stats = NULL);
|
DeckEditorMenu(int id, JGuiListener* listener = NULL, int fontId = 1, const char * _title = "", DeckDataWrapper *selectedDeck = NULL, StatsWrapper *stats = NULL);
|
||||||
void Render();
|
void Render();
|
||||||
virtual ~DeckEditorMenu();
|
virtual ~DeckEditorMenu();
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ public:
|
|||||||
virtual void Render();
|
virtual void Render();
|
||||||
virtual void Update(float dt);
|
virtual void Update(float dt);
|
||||||
using JGuiController::Add;
|
using JGuiController::Add;
|
||||||
virtual void Add(int id, const string& Text, const string& desc = "", bool forceFocus = false, DeckMetaData *deckMetaData = NULL);
|
virtual void Add(int id, const char * Text, string desc = "", bool forceFocus = false, DeckMetaData *deckMetaData = NULL);
|
||||||
virtual void Close();
|
virtual void Close();
|
||||||
void updateScroller();
|
void updateScroller();
|
||||||
void RenderBackground();
|
void RenderBackground();
|
||||||
|
|||||||
@@ -77,7 +77,9 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Setters
|
// Setters
|
||||||
void setDescription( const string& description ) { mDescription = description; }
|
void setDescription( const string description ) { mDescription = description; };
|
||||||
|
|
||||||
|
;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ public:
|
|||||||
string getManaColorIndex();
|
string getManaColorIndex();
|
||||||
void updateStats(string filename, MTGAllCards * collection);
|
void updateStats(string filename, MTGAllCards * collection);
|
||||||
void updateStats(DeckDataWrapper *mtgDeck);
|
void updateStats(DeckDataWrapper *mtgDeck);
|
||||||
int countCardsByType(const string& _type, DeckDataWrapper * myDeck);
|
int countCardsByType(const char * _type, DeckDataWrapper * myDeck);
|
||||||
float noLuck(int n, int a, int x);
|
float noLuck(int n, int a, int x);
|
||||||
|
|
||||||
vector<string> aiDeckNames;
|
vector<string> aiDeckNames;
|
||||||
|
|||||||
@@ -1,241 +0,0 @@
|
|||||||
#ifndef _DECK_VIEW_H_
|
|
||||||
#define _DECK_VIEW_H_
|
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
#include "MTGCard.h"
|
|
||||||
#include "DeckDataWrapper.h"
|
|
||||||
#include "WFont.h"
|
|
||||||
#include "WResourceManager.h"
|
|
||||||
#include "Pos.h"
|
|
||||||
|
|
||||||
/*! \brief A abstract base class for deck views
|
|
||||||
*
|
|
||||||
* The deck editor uses a deck view to present the cards
|
|
||||||
* e.g. in a circular "Carousel" layout or in a flat grid
|
|
||||||
* layout. Both layouts inherit this base class to ensure
|
|
||||||
* a common interface which the deck editor can rely on.
|
|
||||||
*/
|
|
||||||
class DeckView
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
/*! \brief defines the delay until additional card informations get shown
|
|
||||||
*
|
|
||||||
* \note I am not entirely sure about that
|
|
||||||
*/
|
|
||||||
static const float no_user_activity_show_card_delay;
|
|
||||||
|
|
||||||
/*! \brief Represents a card for internal use in the deck view
|
|
||||||
*
|
|
||||||
* It stores positional information and a pointer to the actual card structure.
|
|
||||||
*/
|
|
||||||
struct CardRep{
|
|
||||||
float x;
|
|
||||||
float y;
|
|
||||||
float scale;
|
|
||||||
MTGCard * card;
|
|
||||||
};
|
|
||||||
public:
|
|
||||||
/*! \brief Defines if the filter needs an update
|
|
||||||
*
|
|
||||||
* The owner of the deck that is shown is responsible for updating the filters.
|
|
||||||
*/
|
|
||||||
bool dirtyFilters;
|
|
||||||
|
|
||||||
/*! \brief Defines if the card positions need an update
|
|
||||||
*
|
|
||||||
* If the card positions are dirty, UpdateCardPosition will get called on
|
|
||||||
* all cards during Update(float dt);
|
|
||||||
*
|
|
||||||
* \see Update
|
|
||||||
* \see UpdateCardPosition
|
|
||||||
*/
|
|
||||||
bool dirtyCardPos;
|
|
||||||
|
|
||||||
/*! \brief Constructs the view and initializes datamembers
|
|
||||||
*
|
|
||||||
* It sets the dirty states to true, the currently shown deck to NULL and selects filter 0.
|
|
||||||
*
|
|
||||||
* \param numberOfCards the number of cards the view handles (this includes hidden cards for caching)
|
|
||||||
*/
|
|
||||||
DeckView(int numberOfCards);
|
|
||||||
|
|
||||||
/*! \brief Does nothing but is needed to ensure proper deletion of derived classes.
|
|
||||||
*/
|
|
||||||
virtual ~DeckView();
|
|
||||||
|
|
||||||
/*! \brief Resets nearly all datamembers to their initial values
|
|
||||||
*
|
|
||||||
* Does not reset mCards.
|
|
||||||
*/
|
|
||||||
virtual void Reset();
|
|
||||||
|
|
||||||
/*! \brief Advances the view by dt time units
|
|
||||||
*
|
|
||||||
* This method calls UpdateViewState unconditionally and UpdateCardPosition on every card
|
|
||||||
* if dirtyCardPos is set. It then resets dirtyCardPos.
|
|
||||||
*
|
|
||||||
* \param dt the number of time units to advance
|
|
||||||
* \see UpdateViewState
|
|
||||||
* \see UpdateCardPosition
|
|
||||||
*/
|
|
||||||
void Update(float dt);
|
|
||||||
|
|
||||||
/*! \brief Sets the deck that this view shows
|
|
||||||
*
|
|
||||||
* This method replaces the currently shown deck with toShow, sets all dirty states and
|
|
||||||
* reloads the mtg cards. No ownership changes.
|
|
||||||
*
|
|
||||||
* \param toShow the deck to show
|
|
||||||
* \see reloadIndexes
|
|
||||||
*/
|
|
||||||
void SetDeck(DeckDataWrapper *toShow);
|
|
||||||
|
|
||||||
/*! \brief Returns a pointer to the current deck.
|
|
||||||
*/
|
|
||||||
DeckDataWrapper *deck();
|
|
||||||
|
|
||||||
/*! \brief Performs an immediate switch of the filter without animations
|
|
||||||
*
|
|
||||||
* This method rotates the currently selected filter by delta and sets dirtyFilters.
|
|
||||||
*
|
|
||||||
* \param delta the filter to select relatively to the currently selected filter
|
|
||||||
* \see dirtyFilters
|
|
||||||
*/
|
|
||||||
void changeFilter(int delta);
|
|
||||||
|
|
||||||
/*! \brief Performs an immediate switch of the position without animations
|
|
||||||
*
|
|
||||||
* If the i-th card stored in mCards points to the j-th card in the deck, it will point
|
|
||||||
* to the (j+delta)-th card after this method is called. No dirty states are set.
|
|
||||||
*
|
|
||||||
* \param delta the number of cards to advances
|
|
||||||
* \see mCards
|
|
||||||
*/
|
|
||||||
void changePosition(int delta);
|
|
||||||
|
|
||||||
/*! \brief Returns the number of the currently selected filter
|
|
||||||
*
|
|
||||||
* \return the currently selected filter
|
|
||||||
*/
|
|
||||||
int filter();
|
|
||||||
|
|
||||||
/*! \brief Reloads the mtg card pointers of mCards from the deck
|
|
||||||
*
|
|
||||||
* This is called when: We change the position in the deck or the deck structure changes
|
|
||||||
* (due to filtering or addition or removal of cards).
|
|
||||||
*/
|
|
||||||
void reloadIndexes();
|
|
||||||
|
|
||||||
/*! \brief Returns the current position in the deck
|
|
||||||
*/
|
|
||||||
int getPosition();
|
|
||||||
|
|
||||||
/*! \brief Renders the view
|
|
||||||
*/
|
|
||||||
virtual void Render() = 0;
|
|
||||||
|
|
||||||
/*! \brief Reacts to selections by a pointer device (e. g. mouse, touch)
|
|
||||||
*
|
|
||||||
* If the selection in view internal i. e. a card got selected, there is
|
|
||||||
* no outside action performed and this method will return NULL. If a action got
|
|
||||||
* triggered i. e. a selected card was activated, it returns that card
|
|
||||||
* for further handling by the caller.
|
|
||||||
*
|
|
||||||
* \param x the x coordinate of the pointer during the action
|
|
||||||
* \param y the y coordinate of the pointer during the action
|
|
||||||
* \returns the card the action corresponds to
|
|
||||||
*/
|
|
||||||
virtual MTGCard * Click(int x, int y) = 0;
|
|
||||||
|
|
||||||
/*! \brief Reacts to selections by pointerless devices (e. g. buttons)
|
|
||||||
*
|
|
||||||
* \see Click(int x, int y)
|
|
||||||
* \returns the card the actions corresponds to
|
|
||||||
*/
|
|
||||||
virtual MTGCard * Click() = 0;
|
|
||||||
|
|
||||||
/*! \brief Handles ordinary button presses
|
|
||||||
*
|
|
||||||
* \param the pressed JButton
|
|
||||||
* \returns true if the view reacted to the button and false otherwise
|
|
||||||
*/
|
|
||||||
virtual bool ButtonPressed(Buttons button) = 0;
|
|
||||||
|
|
||||||
/*! \brief Returns the currently active card
|
|
||||||
*/
|
|
||||||
virtual MTGCard *getActiveCard() = 0;
|
|
||||||
|
|
||||||
/*! \brief Changes the position by a given offset
|
|
||||||
*
|
|
||||||
* Advances the view by offset cards and animates the change.
|
|
||||||
*
|
|
||||||
* \param offset the number of positions to advance
|
|
||||||
*/
|
|
||||||
virtual void changePositionAnimated(int offset) = 0;
|
|
||||||
|
|
||||||
/*! \brief Changes the filter by a given offset
|
|
||||||
*
|
|
||||||
* Rotates the selected filter by the given offset and animates the change.
|
|
||||||
*/
|
|
||||||
virtual void changeFilterAnimated(int offset) = 0;
|
|
||||||
protected:
|
|
||||||
|
|
||||||
/*! \brief The number of time units since an user activity occurred
|
|
||||||
*/
|
|
||||||
float last_user_activity;
|
|
||||||
|
|
||||||
/*! \brief The currently selected filter
|
|
||||||
*/
|
|
||||||
int mFilter;
|
|
||||||
|
|
||||||
/*! \brief The currently selected deck
|
|
||||||
*
|
|
||||||
* This class does not take ownership of the deck
|
|
||||||
*/
|
|
||||||
DeckDataWrapper *mCurrentDeck;
|
|
||||||
|
|
||||||
/*! \brief The card positions and pointers
|
|
||||||
*/
|
|
||||||
vector<CardRep> mCards;
|
|
||||||
|
|
||||||
/*! \brief Renders a card with given alpha value
|
|
||||||
*
|
|
||||||
* \param index of the card in mCards to render
|
|
||||||
* \param alpha the alpha value of the card
|
|
||||||
* \param asThumbnail renders the thumbnail image of the card if set to true
|
|
||||||
*
|
|
||||||
* \see mCards
|
|
||||||
*/
|
|
||||||
void renderCard(int index, int alpha, bool asThumbnail = false);
|
|
||||||
|
|
||||||
/*! \brief Returns the index in mCards of the card that is nearest to the given point
|
|
||||||
*
|
|
||||||
* \note This method uses the euclidian distance to the center of the card
|
|
||||||
*
|
|
||||||
* \param x the reference points x coordinate
|
|
||||||
* \param y the reference points y coordinate
|
|
||||||
* \returns the index of the nearest card to the reference point and -1 of mCards is empty
|
|
||||||
*/
|
|
||||||
int getCardIndexNextTo(int x, int y);
|
|
||||||
private:
|
|
||||||
|
|
||||||
/*! \brief Updates the state of the view e. g. view transitions
|
|
||||||
*
|
|
||||||
* \param dt the passes time since the last update
|
|
||||||
*/
|
|
||||||
virtual void UpdateViewState(float dt) = 0;
|
|
||||||
|
|
||||||
/*! \brief Updates the given card reps positional members
|
|
||||||
*
|
|
||||||
* This method is called from Update when dirtyCardPos is set
|
|
||||||
*
|
|
||||||
* \param index the index in mCards of the card to update
|
|
||||||
*
|
|
||||||
* \see Update
|
|
||||||
* \see mCards
|
|
||||||
*/
|
|
||||||
virtual void UpdateCardPosition(int index) = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // _DECK_VIEW_H_
|
|
||||||
@@ -1,245 +0,0 @@
|
|||||||
#ifndef _EASING_H_
|
|
||||||
#define _EASING_H_
|
|
||||||
|
|
||||||
/*! \brief A class for eased floats for use in animations
|
|
||||||
*
|
|
||||||
* Animations often defines values a floating point variable
|
|
||||||
* should have at given times and interpolates between them to
|
|
||||||
* calculate the value of that variable at any given intermediate
|
|
||||||
* time step.
|
|
||||||
*
|
|
||||||
* The simplest case would be linear interpolation:
|
|
||||||
* Suppose a float "position" should be a at time = 0 and
|
|
||||||
* b at time = x. If the current time is y, the value of
|
|
||||||
* "position" is then a + (b-a)*y/x.
|
|
||||||
*
|
|
||||||
* This class defines the interface needed to implement different
|
|
||||||
* kind of interpolations with a common interface. See
|
|
||||||
* http://www.gizma.com/easing/ for more information for a few
|
|
||||||
* examples.
|
|
||||||
*/
|
|
||||||
class Easing
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
/*! \brief The value at the start of an animation.
|
|
||||||
*
|
|
||||||
* start_value is undefined if no animation is running.
|
|
||||||
*/
|
|
||||||
float start_value;
|
|
||||||
|
|
||||||
/*! \brief The amount the value should change during the animation.
|
|
||||||
*
|
|
||||||
* delta_value is undefined if no animation is running.
|
|
||||||
*/
|
|
||||||
float delta_value;
|
|
||||||
|
|
||||||
/*! \brief The current value.
|
|
||||||
*
|
|
||||||
* Use this member to read the value or to write the value without
|
|
||||||
* to animate intermediate values and. Make sure that the easing
|
|
||||||
* is not used once value is deleted.
|
|
||||||
*/
|
|
||||||
float& value;
|
|
||||||
|
|
||||||
/*! \brief The duration the animation should take
|
|
||||||
*
|
|
||||||
* It is not relevant which unit is used. This value is undefined
|
|
||||||
* if no animation is running.
|
|
||||||
*/
|
|
||||||
float duration;
|
|
||||||
|
|
||||||
/*! \brief The accumulated time the animation did run until now.
|
|
||||||
*
|
|
||||||
* It is not relevant which unit is used. This values is undefined
|
|
||||||
* if no animation is running.
|
|
||||||
*/
|
|
||||||
float time_acc;
|
|
||||||
|
|
||||||
/*! \brief Sets Easing::float to val and sets the animation as not running.
|
|
||||||
*
|
|
||||||
* Make sure that the easing is not used once value is deleted.
|
|
||||||
*
|
|
||||||
* \param val The value to ease
|
|
||||||
*/
|
|
||||||
Easing(float& val): start_value(val), delta_value(0), value(val), duration(0), time_acc(0)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/*! \brief Resets the animation to its initial value
|
|
||||||
*
|
|
||||||
* This method does set the value to the start value and sets the passed time to 0.
|
|
||||||
* If there is no animation animation running, the resulting value is undefined.
|
|
||||||
*/
|
|
||||||
void reset()
|
|
||||||
{
|
|
||||||
value = start_value;
|
|
||||||
time_acc = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*! \brief Finishes the animation immediately
|
|
||||||
*
|
|
||||||
* Sets the value to the animations target value and the passed time to the
|
|
||||||
* animations duration. If there is no animation running, the behaviour is undefined.
|
|
||||||
*/
|
|
||||||
void finish()
|
|
||||||
{
|
|
||||||
value = start_value + delta_value;
|
|
||||||
time_acc = duration;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*! \brief Lets dt time pass
|
|
||||||
*
|
|
||||||
* Advances the animation by dt time units and updates the value accordingly.
|
|
||||||
*
|
|
||||||
* \val dt The amount of time to jump forward
|
|
||||||
*/
|
|
||||||
void update(float dt)
|
|
||||||
{
|
|
||||||
if(time_acc < duration)
|
|
||||||
{
|
|
||||||
time_acc += dt;
|
|
||||||
|
|
||||||
if(time_acc > duration)
|
|
||||||
{
|
|
||||||
time_acc = duration;
|
|
||||||
value = start_value + delta_value;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
updateValue();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*! \brief Calculates the value from all other members.
|
|
||||||
*
|
|
||||||
* This method gets implemented by all specific easing classes.
|
|
||||||
*/
|
|
||||||
virtual void updateValue() = 0;
|
|
||||||
|
|
||||||
/*! \brief Starts the animation.
|
|
||||||
*
|
|
||||||
* Starts the interpolation from the current value (now) to
|
|
||||||
* targetValue (in now + _duration).
|
|
||||||
*
|
|
||||||
* If the animation is currently running, it gets replaced.
|
|
||||||
*
|
|
||||||
* \param targetValue The value to interpolate to
|
|
||||||
* \param _duration The duration the interpolation should take
|
|
||||||
*/
|
|
||||||
void start(float targetValue, float _duration)
|
|
||||||
{
|
|
||||||
start_value = value;
|
|
||||||
delta_value = targetValue - start_value;
|
|
||||||
time_acc = 0;
|
|
||||||
duration = _duration;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*! \brief Translates the current value and the target value by delta_value
|
|
||||||
*
|
|
||||||
* This method is mainly used for trickery. Suppose there is one object in the
|
|
||||||
* middle of the screen that should move to the top until it is outside of the
|
|
||||||
* screen and gets replaced by a second one entering the screen from the lower
|
|
||||||
* side once the first one disappeared. This method can be used to simulate this
|
|
||||||
* effect with one animation by translating (i.e. moving) the animation from the
|
|
||||||
* top to the bottom:
|
|
||||||
*
|
|
||||||
* Object1 and object2 are the same object: object1 whose y position is bound to value
|
|
||||||
* To start the transition, use start(SCREEN_HEIGHT, desired time); Once the first
|
|
||||||
* object left the screen (i.e. object.y < 0), change objects appearance to object2
|
|
||||||
* and translate the easing by (SCREEN_HEIGHT).
|
|
||||||
*
|
|
||||||
* \param delta_value The change in start_value and value
|
|
||||||
*/
|
|
||||||
void translate(float delta_value)
|
|
||||||
{
|
|
||||||
start_value += delta_value;
|
|
||||||
value += delta_value;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*! \brief Returns if the passed time exceeds duration.
|
|
||||||
*
|
|
||||||
* If ther is no animation running, it is ensured that this is true.
|
|
||||||
*/
|
|
||||||
bool finished()
|
|
||||||
{
|
|
||||||
return time_acc >= duration;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/*! \brief This class defines an easing with quadratic acceleration
|
|
||||||
*/
|
|
||||||
class InQuadEasing : public Easing
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
/*! \brief Calls Easing::Easing(val).
|
|
||||||
*
|
|
||||||
* \see Easing::Easing(float& val)
|
|
||||||
*/
|
|
||||||
InQuadEasing(float& val): Easing(val) {}
|
|
||||||
|
|
||||||
/*! \brief Implements the value calculation.
|
|
||||||
*
|
|
||||||
* \see Easing::updateValue()
|
|
||||||
*/
|
|
||||||
void updateValue()
|
|
||||||
{
|
|
||||||
float time_tmp = time_acc / duration;
|
|
||||||
value = delta_value * time_tmp * time_tmp + start_value;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/*! \brief This class defines an easing with quadratic decceleration
|
|
||||||
*/
|
|
||||||
class OutQuadEasing : public Easing
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
/*! \brief Calls Easing::Easing(val).
|
|
||||||
*
|
|
||||||
* \see Easing::Easing(float& val)
|
|
||||||
*/
|
|
||||||
OutQuadEasing(float& val): Easing(val) {}
|
|
||||||
|
|
||||||
/*! \brief Implements the value calculation.
|
|
||||||
*
|
|
||||||
* \see Easing::updateValue()
|
|
||||||
*/
|
|
||||||
void updateValue()
|
|
||||||
{
|
|
||||||
float time_tmp = time_acc / duration;
|
|
||||||
value = (-delta_value) * time_tmp * (time_tmp - 2.0f) + start_value;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/*! \brief This class defines an easing with quadratic acceleration and decceleration.
|
|
||||||
*/
|
|
||||||
class InOutQuadEasing : public Easing
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
/*! \brief Calls Easing::Easing(val).
|
|
||||||
*
|
|
||||||
* \see Easing::Easing(float& val)
|
|
||||||
*/
|
|
||||||
InOutQuadEasing(float& val): Easing(val) {}
|
|
||||||
|
|
||||||
/*! \brief Implements the value calculation.
|
|
||||||
*
|
|
||||||
* \see Easing::updateValue()
|
|
||||||
*/
|
|
||||||
void updateValue()
|
|
||||||
{
|
|
||||||
float time_tmp = (time_acc * 2) / duration;
|
|
||||||
if (time_tmp < 1)
|
|
||||||
{
|
|
||||||
value = (float)(delta_value * 0.5 * time_tmp * time_tmp + start_value);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
time_tmp -= 1;
|
|
||||||
value = (float)(- delta_value * 0.5 * (time_tmp * (time_tmp - 2) - 1) + start_value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
#endif //_EASING_H_
|
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
#ifndef _EFFECTS_H_
|
||||||
|
#define _EFFECTS_H_
|
||||||
|
|
||||||
|
#include <JGui.h>
|
||||||
|
|
||||||
|
class Effect: public JGuiObject
|
||||||
|
{
|
||||||
|
static int id_counter;
|
||||||
|
public:
|
||||||
|
Effect() : JGuiObject(++id_counter) {};
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _EFFECTS_H_
|
||||||
@@ -90,19 +90,6 @@ public:
|
|||||||
virtual LifeCost * clone() const;
|
virtual LifeCost * clone() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
//Specific life cost
|
|
||||||
class SpecificLifeCost : public ExtraCost
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
int slc;
|
|
||||||
|
|
||||||
public:
|
|
||||||
SpecificLifeCost(TargetChooser *_tc = NULL, int slc = 0);
|
|
||||||
virtual int canPay();
|
|
||||||
virtual int doPay();
|
|
||||||
virtual SpecificLifeCost * clone() const;
|
|
||||||
};
|
|
||||||
|
|
||||||
//phyrexian mana
|
//phyrexian mana
|
||||||
class LifeorManaCost : public ExtraCost
|
class LifeorManaCost : public ExtraCost
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ class GameObserver{
|
|||||||
string startupGameSerialized;
|
string startupGameSerialized;
|
||||||
bool parseLine(const string& s);
|
bool parseLine(const string& s);
|
||||||
virtual void logAction(const string& s);
|
virtual void logAction(const string& s);
|
||||||
|
bool processAction(const string& s);
|
||||||
bool processActions(bool undo
|
bool processActions(bool undo
|
||||||
#ifdef TESTSUITE
|
#ifdef TESTSUITE
|
||||||
, TestSuiteGame* testgame
|
, TestSuiteGame* testgame
|
||||||
@@ -68,7 +69,6 @@ class GameObserver{
|
|||||||
);
|
);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
bool processAction(const string& s);
|
|
||||||
int currentPlayerId;
|
int currentPlayerId;
|
||||||
CombatStep combatStep;
|
CombatStep combatStep;
|
||||||
int turn;
|
int turn;
|
||||||
@@ -78,7 +78,7 @@ class GameObserver{
|
|||||||
vector<list<Phase*> >gameTurn;
|
vector<list<Phase*> >gameTurn;
|
||||||
int cancelCurrentAction();
|
int cancelCurrentAction();
|
||||||
ExtraCosts * mExtraPayment;
|
ExtraCosts * mExtraPayment;
|
||||||
GamePhase oldGamePhase;
|
int oldGamePhase;
|
||||||
TargetChooser * targetChooser;
|
TargetChooser * targetChooser;
|
||||||
DuelLayers * mLayers;
|
DuelLayers * mLayers;
|
||||||
ReplacementEffects *replacementEffects;
|
ReplacementEffects *replacementEffects;
|
||||||
@@ -98,8 +98,8 @@ class GameObserver{
|
|||||||
int cardClick(MTGCardInstance * card,Targetable * _object = NULL, bool log = true);
|
int cardClick(MTGCardInstance * card,Targetable * _object = NULL, bool log = true);
|
||||||
GamePhase getCurrentGamePhase();
|
GamePhase getCurrentGamePhase();
|
||||||
void setCurrentGamePhase(GamePhase phase) { mCurrentGamePhase = phase; };
|
void setCurrentGamePhase(GamePhase phase) { mCurrentGamePhase = phase; };
|
||||||
const string& getCurrentGamePhaseName();
|
const char * getCurrentGamePhaseName();
|
||||||
const string& getNextGamePhaseName();
|
const char * getNextGamePhaseName();
|
||||||
void nextCombatStep();
|
void nextCombatStep();
|
||||||
void userRequestNextGamePhase(bool allowInterrupt = true, bool log = true);
|
void userRequestNextGamePhase(bool allowInterrupt = true, bool log = true);
|
||||||
void cleanupPhase();
|
void cleanupPhase();
|
||||||
@@ -111,7 +111,6 @@ class GameObserver{
|
|||||||
void loadPlayer(int playerId, PlayerType playerType = PLAYER_TYPE_HUMAN, int decknb=0, bool premadeDeck=false);
|
void loadPlayer(int playerId, PlayerType playerType = PLAYER_TYPE_HUMAN, int decknb=0, bool premadeDeck=false);
|
||||||
virtual void loadPlayer(int playerId, Player* player);
|
virtual void loadPlayer(int playerId, Player* player);
|
||||||
|
|
||||||
int getPlayerId(Player* player) {if(player == players[0]) return 1; else if(player == players[1]) return 2; else return 0;};
|
|
||||||
Player * currentPlayer;
|
Player * currentPlayer;
|
||||||
Player * currentActionPlayer;
|
Player * currentActionPlayer;
|
||||||
Player * isInterrupting;
|
Player * isInterrupting;
|
||||||
@@ -139,7 +138,6 @@ class GameObserver{
|
|||||||
int receiveEvent(WEvent * event);
|
int receiveEvent(WEvent * event);
|
||||||
bool connectRule;
|
bool connectRule;
|
||||||
|
|
||||||
void logActionMomir(MTGCardInstance * card_to_discard, int cardId);
|
|
||||||
void logAction(Player* player, const string& s="");
|
void logAction(Player* player, const string& s="");
|
||||||
void logAction(int playerId, const string& s="") {
|
void logAction(int playerId, const string& s="") {
|
||||||
logAction(players[playerId], s);
|
logAction(players[playerId], s);
|
||||||
@@ -153,7 +151,6 @@ class GameObserver{
|
|||||||
bool undo();
|
bool undo();
|
||||||
bool isLoading(){ return mLoading; };
|
bool isLoading(){ return mLoading; };
|
||||||
void Mulligan(Player* player = NULL);
|
void Mulligan(Player* player = NULL);
|
||||||
void serumMulligan(Player* player = NULL);
|
|
||||||
Player* getPlayer(size_t index) { return players[index];};
|
Player* getPlayer(size_t index) { return players[index];};
|
||||||
bool isStarted() { return (mLayers!=NULL);};
|
bool isStarted() { return (mLayers!=NULL);};
|
||||||
RandomGenerator* getRandomGenerator() { return &randomGenerator; };
|
RandomGenerator* getRandomGenerator() { return &randomGenerator; };
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ private:
|
|||||||
WSrcCards * setSrc;
|
WSrcCards * setSrc;
|
||||||
SimpleMenu * menu;
|
SimpleMenu * menu;
|
||||||
bool showMenu;
|
bool showMenu;
|
||||||
|
bool showAlt;
|
||||||
bool saveMe;
|
bool saveMe;
|
||||||
int mState;
|
int mState;
|
||||||
int mDetailItem;
|
int mDetailItem;
|
||||||
|
|||||||
@@ -19,7 +19,22 @@
|
|||||||
#include "WGui.h"
|
#include "WGui.h"
|
||||||
#include "InteractiveButton.h"
|
#include "InteractiveButton.h"
|
||||||
|
|
||||||
class DeckView;
|
#define NO_USER_ACTIVITY_HELP_DELAY 10
|
||||||
|
#define NO_USER_ACTIVITY_SHOWCARD_DELAY 0.1
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
STAGE_TRANSITION_RIGHT = 0,
|
||||||
|
STAGE_TRANSITION_LEFT = 1,
|
||||||
|
STAGE_WAITING = 2,
|
||||||
|
STAGE_TRANSITION_UP = 3,
|
||||||
|
STAGE_TRANSITION_DOWN = 4,
|
||||||
|
STAGE_ONSCREEN_MENU = 5,
|
||||||
|
STAGE_WELCOME = 6,
|
||||||
|
STAGE_MENU = 7,
|
||||||
|
STAGE_FILTERS = 8,
|
||||||
|
STAGE_TRANSITION_SELECTED = 9
|
||||||
|
};
|
||||||
|
|
||||||
// TODO: need a better name for MENU_FIRST_MENU, this is reused for the 1st submenu of
|
// TODO: need a better name for MENU_FIRST_MENU, this is reused for the 1st submenu of
|
||||||
// available options in the duel menu
|
// available options in the duel menu
|
||||||
@@ -29,7 +44,7 @@ enum
|
|||||||
MENU_DECK_SELECTION = 10,
|
MENU_DECK_SELECTION = 10,
|
||||||
MENU_DECK_BUILDER = 11,
|
MENU_DECK_BUILDER = 11,
|
||||||
MENU_FIRST_DUEL_SUBMENU = 102,
|
MENU_FIRST_DUEL_SUBMENU = 102,
|
||||||
MENU_LANGUAGE_SELECTION = 103
|
MENU_LANGUAGE_SELECTION = 103,
|
||||||
};
|
};
|
||||||
|
|
||||||
// enums for menu options
|
// enums for menu options
|
||||||
@@ -49,69 +64,79 @@ enum DECK_VIEWER_MENU_ITEMS
|
|||||||
MENU_ITEM_NO = 21,
|
MENU_ITEM_NO = 21,
|
||||||
MENU_ITEM_FILTER_BY = 22,
|
MENU_ITEM_FILTER_BY = 22,
|
||||||
MENUITEM_MORE_INFO = kInfoMenuID
|
MENUITEM_MORE_INFO = kInfoMenuID
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define ALL_COLORS -1
|
||||||
|
|
||||||
|
#define ROTATE_LEFT 1;
|
||||||
|
#define ROTATE_RIGHT 0;
|
||||||
|
|
||||||
|
#define HIGH_SPEED 15.0
|
||||||
|
#define MED_SPEED 5.0f
|
||||||
|
#define LOW_SPEED 1.5
|
||||||
|
|
||||||
|
#define MAX_SAVED_FILTERS Constants::NB_Colors + 1
|
||||||
|
#define CARDS_DISPLAYED 10
|
||||||
|
|
||||||
class GameStateDeckViewer: public GameState, public JGuiListener
|
class GameStateDeckViewer: public GameState, public JGuiListener
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
enum DeckViewerStages
|
|
||||||
{
|
|
||||||
STAGE_WAITING = 0,
|
|
||||||
STAGE_ONSCREEN_MENU,
|
|
||||||
STAGE_WELCOME,
|
|
||||||
STAGE_MENU,
|
|
||||||
STAGE_FILTERS
|
|
||||||
};
|
|
||||||
|
|
||||||
vector<JQuadPtr> mIcons;
|
vector<JQuadPtr> mIcons;
|
||||||
JQuadPtr pspIcons[8];
|
JQuadPtr pspIcons[8];
|
||||||
JTexture * pspIconsTexture;
|
JTexture * pspIconsTexture;
|
||||||
float last_user_activity;
|
float last_user_activity;
|
||||||
float onScreenTransition;
|
float onScreenTransition;
|
||||||
DeckViewerStages mStage;
|
float mRotation;
|
||||||
|
float mSlide;
|
||||||
|
int mAlpha;
|
||||||
|
int mStage;
|
||||||
|
int useFilter;
|
||||||
JMusic * bgMusic;
|
JMusic * bgMusic;
|
||||||
|
int lastPos;
|
||||||
|
int lastTotal;
|
||||||
|
int mSelected;
|
||||||
|
|
||||||
InteractiveButton *toggleDeckButton, *sellCardButton, *statsPrevButton, *filterButton, *toggleViewButton;
|
InteractiveButton *toggleDeckButton, *sellCardButton, *statsPrevButton, *filterButton;
|
||||||
|
|
||||||
WGuiFilters * filterMenu;
|
WGuiFilters * filterMenu;
|
||||||
WSrcDeckViewer * source;
|
WSrcDeckViewer * source;
|
||||||
|
|
||||||
DeckEditorMenu * welcome_menu;
|
DeckEditorMenu * welcome_menu;
|
||||||
SimpleMenu * subMenu;
|
SimpleMenu * subMenu;
|
||||||
DeckEditorMenu * deckMenu;
|
DeckEditorMenu * menu;
|
||||||
PriceList* pricelist;
|
PriceList* pricelist;
|
||||||
PlayerData * playerdata;
|
PlayerData * playerdata;
|
||||||
|
int price;
|
||||||
|
DeckDataWrapper * displayed_deck;
|
||||||
DeckDataWrapper * myDeck;
|
DeckDataWrapper * myDeck;
|
||||||
DeckDataWrapper * myCollection;
|
DeckDataWrapper * myCollection;
|
||||||
StatsWrapper * mStatsWrapper;
|
MTGCard * cardIndex[CARDS_DISPLAYED];
|
||||||
|
StatsWrapper *stw;
|
||||||
|
|
||||||
int hudAlpha;
|
int hudAlpha;
|
||||||
string newDeckname;
|
string newDeckname;
|
||||||
bool isAIDeckSave;
|
bool isAIDeckSave;
|
||||||
bool mSwitching;
|
bool mSwitching;
|
||||||
|
|
||||||
enum AvailableView{
|
|
||||||
CAROUSEL_VIEW,
|
|
||||||
GRID_VIEW
|
|
||||||
};
|
|
||||||
DeckView* mView;
|
|
||||||
AvailableView mCurrentView;
|
|
||||||
|
|
||||||
void saveDeck(); //Saves the deck and additional necessary information
|
void saveDeck(); //Saves the deck and additional necessary information
|
||||||
void saveAsAIDeck(string deckName); // saves deck as an AI Deck
|
void saveAsAIDeck(string deckName); // saves deck as an AI Deck
|
||||||
|
int getCurrentPos();
|
||||||
void sellCard();
|
void sellCard();
|
||||||
void setButtonState(bool state);
|
void setButtonState(bool state);
|
||||||
bool userPressedButton();
|
bool userPressedButton();
|
||||||
void RenderButtons();
|
void RenderButtons();
|
||||||
void setupView(AvailableView view, DeckDataWrapper *deck);
|
|
||||||
void toggleView();
|
pair<float, float> cardsCoordinates[CARDS_DISPLAYED];
|
||||||
|
|
||||||
public:
|
public:
|
||||||
GameStateDeckViewer(GameApp* parent);
|
GameStateDeckViewer(GameApp* parent);
|
||||||
virtual ~GameStateDeckViewer();
|
virtual ~GameStateDeckViewer();
|
||||||
void updateDecks();
|
void updateDecks();
|
||||||
|
void rotateCards(int direction);
|
||||||
|
void loadIndexes();
|
||||||
void updateFilters();
|
void updateFilters();
|
||||||
void rebuildFilters();
|
void rebuildFilters();
|
||||||
void toggleCollection();
|
void switchDisplay();
|
||||||
void Start();
|
void Start();
|
||||||
virtual void End();
|
virtual void End();
|
||||||
void addRemove(MTGCard * card);
|
void addRemove(MTGCard * card);
|
||||||
@@ -120,8 +145,11 @@ public:
|
|||||||
void renderSlideBar();
|
void renderSlideBar();
|
||||||
void renderDeckBackground();
|
void renderDeckBackground();
|
||||||
void renderOnScreenMenu();
|
void renderOnScreenMenu();
|
||||||
|
virtual void renderCard(int id, float rotation);
|
||||||
|
virtual void renderCard(int id);
|
||||||
virtual void Render();
|
virtual void Render();
|
||||||
int loadDeck(int deckid);
|
int loadDeck(int deckid);
|
||||||
|
void LoadDeckStatistics(int deckId);
|
||||||
|
|
||||||
void OnScroll(int inXVelocity, int inYVelocity);
|
void OnScroll(int inXVelocity, int inYVelocity);
|
||||||
|
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ private:
|
|||||||
JQuadPtr pspIcons[8];
|
JQuadPtr pspIcons[8];
|
||||||
WSrcCards * srcCards;
|
WSrcCards * srcCards;
|
||||||
TaskList * taskList;
|
TaskList * taskList;
|
||||||
|
float mElapsed;
|
||||||
WGuiMenu * shopMenu;
|
WGuiMenu * shopMenu;
|
||||||
WGuiFilters * filterMenu; //Filter menu slides in sideways from right, or up from bottom.
|
WGuiFilters * filterMenu; //Filter menu slides in sideways from right, or up from bottom.
|
||||||
WGuiCardImage * bigDisplay;
|
WGuiCardImage * bigDisplay;
|
||||||
|
|||||||
@@ -1,154 +0,0 @@
|
|||||||
#ifndef _GRID_DECK_VIEW_H
|
|
||||||
#define _GRID_DECK_VIEW_H
|
|
||||||
|
|
||||||
#include "DeckView.h"
|
|
||||||
#include "Easing.h"
|
|
||||||
|
|
||||||
/*! \brief Implements a grid view
|
|
||||||
*
|
|
||||||
* This view displays 12 cards in two rows as thumbnails. The currently
|
|
||||||
* selected card is dislayed bigger than the rest and uses the fullsize
|
|
||||||
* image. Scrolling the view horizontally and toggeling filters is
|
|
||||||
* animated and uses quadratic easing.
|
|
||||||
*
|
|
||||||
* It also implements a button mode for pointerless devices.
|
|
||||||
*/
|
|
||||||
class GridDeckView : public DeckView
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
static const float scroll_animation_duration;
|
|
||||||
static const float slide_animation_duration;
|
|
||||||
static const float card_scale_small;
|
|
||||||
static const float card_scale_big;
|
|
||||||
public:
|
|
||||||
/*! \brief Constructs a grid view with no decks set
|
|
||||||
*/
|
|
||||||
GridDeckView();
|
|
||||||
|
|
||||||
/*! \brief Does nothing but is needed to ensure proper deletion of derived classes.
|
|
||||||
*/
|
|
||||||
virtual ~GridDeckView();
|
|
||||||
|
|
||||||
/*! \brief Resets almost all member variables but mRows and mCols
|
|
||||||
*/
|
|
||||||
void Reset();
|
|
||||||
|
|
||||||
/*! \brief Advances scrolling and sliding animations
|
|
||||||
*
|
|
||||||
* \param dt the time since the last update
|
|
||||||
*
|
|
||||||
* \see DeckView::UpdateViewState()
|
|
||||||
*/
|
|
||||||
void UpdateViewState(float dt);
|
|
||||||
|
|
||||||
/*! \brief Updates the cards position
|
|
||||||
*
|
|
||||||
* \see DeckView::UpdateCardPosition()
|
|
||||||
*/
|
|
||||||
void UpdateCardPosition(int index);
|
|
||||||
|
|
||||||
/*! \brief Renders the view
|
|
||||||
*
|
|
||||||
* This method prefetches all rendered cards as thumbnails except the
|
|
||||||
* selected card to reduce cache pressure.
|
|
||||||
*/
|
|
||||||
void Render();
|
|
||||||
|
|
||||||
/*! \brief Handles button presses
|
|
||||||
*
|
|
||||||
* The mapping is as follows:
|
|
||||||
* JGE_BTN_LEFT moves the position to the left if not in button mode
|
|
||||||
* moves the selection otherwise
|
|
||||||
* JGE_BTN_RIGHT move the position to the right if not in button mode
|
|
||||||
* moves the selection otherwise
|
|
||||||
* JGE_BTN_UP select the previous filter if not in button mode
|
|
||||||
* moves the selection otherwise
|
|
||||||
* JGE_BTN_DOWN select the next filter if not in button mode
|
|
||||||
* moves the selection otherwise
|
|
||||||
* JGE_BTN_CTRL deactivate button mode
|
|
||||||
*
|
|
||||||
* \param button the pressed button
|
|
||||||
* \returns if the view handled the button
|
|
||||||
*/
|
|
||||||
bool ButtonPressed(Buttons button);
|
|
||||||
|
|
||||||
/*! \brief Handles clicks and triggers scrolling and the selection of cards
|
|
||||||
*
|
|
||||||
* This method deactivates the button mode and searches for the nearest
|
|
||||||
* card to the given position. If this card is in column 0 or 1 it scrolls
|
|
||||||
* left. If it is in column (mCols-1) or (mCols-2) it scrolls to the right.
|
|
||||||
* In any other case, it selects the card.
|
|
||||||
*
|
|
||||||
* \param x the clicks x coordinate
|
|
||||||
* \param y the clicks y coordinate
|
|
||||||
*
|
|
||||||
* \return selected card c if c was already selected and no animation is running, NULL otherwise
|
|
||||||
*/
|
|
||||||
MTGCard * Click(int x, int y);
|
|
||||||
|
|
||||||
/*! \brief Handles pointerless clicks (JGE_BTN_OK)
|
|
||||||
*
|
|
||||||
* If no card is selected, this method activates button mode and selects a card.
|
|
||||||
*
|
|
||||||
* \returns selected card, NULL otherwise
|
|
||||||
*/
|
|
||||||
MTGCard * Click();
|
|
||||||
|
|
||||||
/*! \brief Scrolls the view horizontally
|
|
||||||
*
|
|
||||||
* \param offset the number of columns to scroll
|
|
||||||
*/
|
|
||||||
void changePositionAnimated(int offset);
|
|
||||||
|
|
||||||
/*! \brief Rotates the selected filter and slides vertically
|
|
||||||
*
|
|
||||||
* \param the number of filters to rotate
|
|
||||||
*/
|
|
||||||
void changeFilterAnimated(int offset);
|
|
||||||
|
|
||||||
/*! \brief Returns the currently selected card
|
|
||||||
*
|
|
||||||
* \returns card c if c is selected and in column 4 to 6 and NULL otherwise*/
|
|
||||||
MTGCard *getActiveCard();
|
|
||||||
private:
|
|
||||||
/*! \brief The amount of columns (visible and hidden)
|
|
||||||
*/
|
|
||||||
const int mCols;
|
|
||||||
|
|
||||||
/*! \brief The amount of rows
|
|
||||||
*/
|
|
||||||
const int mRows;
|
|
||||||
|
|
||||||
/*! \brief The current scrolling offset
|
|
||||||
*/
|
|
||||||
float mScrollOffset;
|
|
||||||
|
|
||||||
/*! \brief The current sliding offset
|
|
||||||
*/
|
|
||||||
float mSlideOffset;
|
|
||||||
|
|
||||||
/*! \brief The easing functor that gets applied while scrolling
|
|
||||||
*/
|
|
||||||
InOutQuadEasing mScrollEasing;
|
|
||||||
|
|
||||||
/*! \brief The easing functor that gets applied while sliding
|
|
||||||
*/
|
|
||||||
InOutQuadEasing mSlideEasing;
|
|
||||||
|
|
||||||
/*! \brief The current selected card index
|
|
||||||
*/
|
|
||||||
int mCurrentSelection;
|
|
||||||
|
|
||||||
/*! \brief Stores if we are in button mode.
|
|
||||||
*/
|
|
||||||
bool mButtonMode;
|
|
||||||
|
|
||||||
/*! \brief Moves the card selection by an offset.
|
|
||||||
*
|
|
||||||
* \param offset the offset to move the selection
|
|
||||||
* \param alignIfOutOfBounds the view will scroll if the selection moves out of bound if set to true
|
|
||||||
*/
|
|
||||||
void moveSelection(int offset, bool alignIfOutOfBounds);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif //_GRID_DECK_VIEW_H
|
|
||||||
@@ -6,9 +6,8 @@
|
|||||||
#include <hge/hgeparticle.h>
|
#include <hge/hgeparticle.h>
|
||||||
#include "JGE.h"
|
#include "JGE.h"
|
||||||
#include "MTGDefinitions.h"
|
#include "MTGDefinitions.h"
|
||||||
#include "Pos.h"
|
#include "GameApp.h"
|
||||||
#include "GuiLayers.h"
|
#include "GuiLayers.h"
|
||||||
#include "WResource_Fwd.h"
|
|
||||||
|
|
||||||
class ManaIcon : public Pos
|
class ManaIcon : public Pos
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -4,25 +4,15 @@
|
|||||||
#include "GuiLayers.h"
|
#include "GuiLayers.h"
|
||||||
#include "PhaseRing.h"
|
#include "PhaseRing.h"
|
||||||
#include "WEvent.h"
|
#include "WEvent.h"
|
||||||
#include "PlayGuiObject.h"
|
|
||||||
|
|
||||||
#include "Easing.h"
|
|
||||||
|
|
||||||
class GuiPhaseBar: public GuiLayer, public PlayGuiObject
|
class GuiPhaseBar: public GuiLayer, public PlayGuiObject
|
||||||
{
|
{
|
||||||
private:
|
protected:
|
||||||
static const float zoom_big;
|
Phase* phase;
|
||||||
static const float zoom_small;
|
|
||||||
static const float step;
|
|
||||||
|
|
||||||
int displayedPhaseId;
|
|
||||||
float angle;
|
float angle;
|
||||||
float zoomFactor;
|
float zoomFactor;
|
||||||
OutQuadEasing angleEasing;
|
|
||||||
InOutQuadEasing zoomFactorEasing;
|
|
||||||
DuelLayers* mpDuelLayers;
|
DuelLayers* mpDuelLayers;
|
||||||
|
|
||||||
void DrawGlyph(JQuad *inQuad, int phaseId, float x, float y, float scale);
|
|
||||||
public:
|
public:
|
||||||
GuiPhaseBar(DuelLayers* duelLayers);
|
GuiPhaseBar(DuelLayers* duelLayers);
|
||||||
~GuiPhaseBar();
|
~GuiPhaseBar();
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user