Compare commits

..

1 Commits

Author SHA1 Message Date
xawotihs 2b1f1d016e Auto-Updated Travis-CI configuration for Mac 2017-05-08 04:45:57 +00:00
1114 changed files with 239002 additions and 697407 deletions
-38
View File
@@ -1,38 +0,0 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]
**Smartphone (please complete the following information):**
- Device: [e.g. iPhone6]
- OS: [e.g. iOS8.1]
- Browser [e.g. stock browser, safari]
- Version [e.g. 22]
**Additional context**
Add any other context about the problem here.
-10
View File
@@ -1,10 +0,0 @@
---
name: Custom issue template
about: Describe this issue template's purpose here.
title: ''
labels: ''
assignees: ''
---
-20
View File
@@ -1,20 +0,0 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
-3
View File
@@ -1,3 +0,0 @@
[submodule "docs/wiki"]
path = docs/wiki
url = https://github.com/WagicProject/wagic.wiki
+25 -74
View File
@@ -1,79 +1,30 @@
language: cpp
dist: xenial
branches:
only:
- master
language: objective-c
before_install:
- export BUILD_PSP=YES
- export BUILD_ANDROID=YES
- export BUILD_Qt=YES
- export BUILD_MAC=NO
- echo -e "machine github.com\n login $GH_TOKEN2" > ~/.netrc
- git lfs pull
# Only building on Mac when not handling pull request
# - if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then
# export BUILD_MAC=YES;
# fi
- sudo apt-get update -qq
# Building for PSP here
- if [ "$BUILD_PSP" == "YES" ]; then
export PSPDEV="$TRAVIS_BUILD_DIR/opt/pspsdk" &&
export PSPSDK="$PSPDEV/psp/sdk" &&
export PATH="$PATH:$PSPDEV/bin:$PSPSDK/bin" &&
wget --no-check-certificate -O sdk.lzma http://downloads.sourceforge.net/project/minpspw/SDK%20%2B%20devpak/pspsdk%200.11.2/minpspw_0.11.2-amd64.tar.lzma;
fi
# Building for Qt here
- if [ "$BUILD_Qt" == "YES" ]; then
sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu xenial universe" &&
sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu xenial main" &&
sudo apt-get -qq update &&
sudo apt-get -qq install qt5-qmake qtbase5-dev qtdeclarative5-dev qttools5-dev qtmultimedia5-dev libqt5opengl5 libqt5opengl5-dev pulseaudio libpulse-dev &&
export QMAKE="qmake -qt=qt5";
fi
# Building for Android here
- if [ "$BUILD_ANDROID" == "YES" ]; then
export ANDROID="android-sdk-linux/tools/android" &&
if [ `uname -m` = x86_64 ]; then
sudo dpkg --add-architecture i386 && sudo apt-get update &&
sudo apt-get install -qq --force-yes libgd2-xpm-dev libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1 jq ant; fi &&
wget https://dl.google.com/android/repository/android-ndk-r22-linux-x86_64.zip -nv &&
wget http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz -nv;
fi
install:
- if [ "$BUILD_PSP" == "YES" ]; then
tar -x --xz -f sdk.lzma;
fi
- if [ "$BUILD_ANDROID" == "YES" ]; then
unzip android-ndk-r22-linux-x86_64.zip &&
tar -zxf android-sdk_r24.4.1-linux.tgz &&
$ANDROID list sdk --extended -a &&
echo yes | $ANDROID update sdk -a -t tools,platform-tools,build-tools-23.0.1,android-23 --no-ui --force --no-https;
sudo apt-get install openjdk-8-jdk;
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64;
export PATH=$JAVA_HOME/bin:$PATH;
fi
- brew update
- brew install qt5
- sudo pip install pyjavaproperties
- sudo pip install github3.py
- brew install dpkg ldid
#- curl -s -f -L https://raw.github.com/r-plus/dotfiles/master/install_theos.sh | bash
- mkdir theos
- cd theos
- git clone --recursive https://github.com/theos/theos.git
- export THEOS="$TRAVIS_BUILD_DIR/theos"
- cd ..
- pwd
- ls
env:
global:
secure: "EBzr1+qjQsOhn0s+tcFmXR1jP9B0xiOSXuXbRXWZ1OEHNvp8+A5/pS84LYVFlaZqmxr5dApxvPtwhgLIUbQ3EPXm8LpC3KgSD4dS+9/QMbxhe5TK4oczgFRGcDTMJQZsCzhOh7hp3tbcbJg5Gp+VT7aFjFQSHDGwhzSJXsXwh/8="
- curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py
- sudo python2 get-pip.py
- sudo python2 -m pip install --upgrade pip
- sudo python2 -m pip install setuptools-rust
- sudo python2 -m pip install pyOpenSSL
- sudo python2 -m pip install pyjavaproperties
- sudo python2 -m pip install github3.py
- sudo python2 -m pip install cpp-coveralls
- sudo python2 -m pip install certifi
before_script:
- export REQUESTS_CA_BUNDLE=/usr/local/lib/python2.7/dist-packages/certifi/cacert.pem
script: "tools/travis-script.sh"
script:
- /usr/local/opt/qt5/bin/qmake projects/mtg/wagic-qt.pro CONFIG+=graphics
- make -j 4 dmg
- cd projects/mtg/iOS
- make -j 4 package
- cd ../../..
after_success:
- coveralls -b . -e JGE/src -e JGE/include -i projects/mtg/include -i projects/mtg/src --gcov-options '\-lp'
- export VERSION=$(grep "=" projects/mtg/build.number.properties | sed 's/.*=//' | tr -d '\n\t\r ')
- python2 tools/upload-binaries.py -t $GH_TOKEN2 -s $TRAVIS_COMMIT -l core.zip -r Wagic-core-$VERSION.zip -b $TRAVIS_BRANCH
- python2 tools/upload-binaries.py -t $GH_TOKEN2 -s $TRAVIS_COMMIT -l projects/mtg/Android/bin/Wagic-debug.apk -r Wagic-$VERSION.apk -b $TRAVIS_BRANCH
- python2 tools/upload-binaries.py -t $GH_TOKEN2 -s $TRAVIS_COMMIT -l projects/mtg/psprelease.zip -r WagicPSP-$VERSION.zip -b $TRAVIS_BRANCH
- python2 tools/upload-binaries.py -t $GH_TOKEN2 -s $TRAVIS_COMMIT -l qt-gui-build/linuxqtrelease.zip -r WagicLinux-$VERSION.zip -b $TRAVIS_BRANCH
- python2 tools/upload-binaries.py -t $GH_TOKEN2 -s $TRAVIS_COMMIT -l projects/mtg/CardImageLinks.csv -r CardImageLinks.csv -b $TRAVIS_BRANCH
- python tools/upload-binaries.py -t $GH_TOKEN -s $TRAVIS_COMMIT -l wagic.dmg -r Wagic-macosx.dmg -b $TRAVIS_BRANCH
- python tools/upload-binaries.py -t $GH_TOKEN -s $TRAVIS_COMMIT -l projects/mtg/iOS/net.wagic_0.19.2-1_iphoneos-arm.deb -r Wagic-iOS.deb -b $TRAVIS_BRANCH
@@ -29,30 +29,11 @@ public:
{
int r;
#if defined(__ARM_FEATURE_LSE)
// Use LSE atomic instructions if supported
#pragma message("LSE feature detected") // This will print a message in your build logs
__asm__ __volatile__(
"ldaxr %0, [%1];" // Load-Exclusive instruction
"cbnz %0, 1f;" // If the value is non-zero, the lock is already acquired
"stlxr %w0, %2, [%1];" // Store-Exclusive instruction
"cbnz %w0, 1f;" // If the store failed, retry
"mov %0, #0;" // Success, zero indicates lock acquired
"1:"
: "=&r"(r)
: "r"(&v_), "r"(1)
: "memory", "cc"
);
#else
// Fallback for systems that don't support LSE
#pragma message("LSE feature not detected") // This will print a message in your build logs if LSE is not detected
__asm__ __volatile__(
"swp %0, %1, [%2];" // Swap instruction (used as a fallback)
: "=&r"(r) // output constraint
: "r"(1), "r"(&v_) // input constraints
: "memory", "cc" // clobbered registers
);
#endif
"swp %0, %1, [%2]":
"=&r"( r ): // outputs
"r"( 1 ), "r"( &v_ ): // inputs
"memory", "cc" );
return r == 0;
}
+2 -2
View File
@@ -20,7 +20,7 @@ namespace boost {
enum xtime_clock_types
{
TIME_UTC_=1
TIME_UTC=1
// TIME_TAI,
// TIME_MONOTONIC,
// TIME_PROCESS,
@@ -68,7 +68,7 @@ inline xtime get_xtime(boost::system_time const& abs_time)
inline int xtime_get(struct xtime* xtp, int clock_type)
{
if (clock_type == TIME_UTC_)
if (clock_type == TIME_UTC)
{
*xtp=get_xtime(get_system_time());
return clock_type;
+2 -2
View File
@@ -350,7 +350,7 @@ namespace boost
cond.timed_wait(lock, xt);
# endif
xtime cur;
xtime_get(&cur, TIME_UTC_);
xtime_get(&cur, TIME_UTC);
if (xtime_cmp(xt, cur) <= 0)
return;
}
@@ -365,7 +365,7 @@ namespace boost
BOOST_VERIFY(!pthread_yield());
# else
xtime xt;
xtime_get(&xt, TIME_UTC_);
xtime_get(&xt, TIME_UTC);
sleep(xt);
# endif
}
+8 -8
View File
@@ -20,8 +20,8 @@ const int NANOSECONDS_PER_MICROSECOND = 1000;
inline void to_time(int milliseconds, boost::xtime& xt)
{
int res = 0;
res = boost::xtime_get(&xt, boost::TIME_UTC_);
BOOST_ASSERT(res == boost::TIME_UTC_);
res = boost::xtime_get(&xt, boost::TIME_UTC);
BOOST_ASSERT(res == boost::TIME_UTC);
xt.sec += (milliseconds / MILLISECONDS_PER_SECOND);
xt.nsec += ((milliseconds % MILLISECONDS_PER_SECOND) *
@@ -57,8 +57,8 @@ inline void to_timespec_duration(const boost::xtime& xt, timespec& ts)
{
boost::xtime cur;
int res = 0;
res = boost::xtime_get(&cur, boost::TIME_UTC_);
BOOST_ASSERT(res == boost::TIME_UTC_);
res = boost::xtime_get(&cur, boost::TIME_UTC);
BOOST_ASSERT(res == boost::TIME_UTC);
if (boost::xtime_cmp(xt, cur) <= 0)
{
@@ -88,8 +88,8 @@ inline void to_duration(boost::xtime xt, int& milliseconds)
{
boost::xtime cur;
int res = 0;
res = boost::xtime_get(&cur, boost::TIME_UTC_);
BOOST_ASSERT(res == boost::TIME_UTC_);
res = boost::xtime_get(&cur, boost::TIME_UTC);
BOOST_ASSERT(res == boost::TIME_UTC);
if (boost::xtime_cmp(xt, cur) <= 0)
milliseconds = 0;
@@ -110,8 +110,8 @@ inline void to_microduration(boost::xtime xt, int& microseconds)
{
boost::xtime cur;
int res = 0;
res = boost::xtime_get(&cur, boost::TIME_UTC_);
BOOST_ASSERT(res == boost::TIME_UTC_);
res = boost::xtime_get(&cur, boost::TIME_UTC);
BOOST_ASSERT(res == boost::TIME_UTC);
if (boost::xtime_cmp(xt, cur) <= 0)
microseconds = 0;
+1 -1548
View File
File diff suppressed because it is too large Load Diff
+10 -23
View File
@@ -14,11 +14,10 @@
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not
be misrepresented as being the original software.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
*/
#include "SDL_stdinc.h"
#include "SDL_atomic.h"
@@ -31,7 +30,8 @@
#endif
/* This function is where all the magic happens... */
SDL_bool SDL_AtomicTryLock(SDL_SpinLock *lock)
SDL_bool
SDL_AtomicTryLock(SDL_SpinLock *lock)
{
#if SDL_ATOMIC_DISABLED
/* Terrible terrible damage */
@@ -85,27 +85,13 @@ SDL_bool SDL_AtomicTryLock(SDL_SpinLock *lock)
return (result == 0);
#else
/* Fallback implementation using a standard mutex */
/* You can use SDL_mutex as a fallback if no atomic instructions are available */
static SDL_mutex *mutex;
if (!mutex) {
mutex = SDL_CreateMutex();
}
SDL_mutexP(mutex);
if (*lock == 0) {
*lock = 1;
SDL_mutexV(mutex);
return SDL_TRUE;
} else {
SDL_mutexV(mutex);
return SDL_FALSE;
}
/* Need CPU instructions for spinlock here! */
__need_spinlock_implementation__
#endif
}
void SDL_AtomicLock(SDL_SpinLock *lock)
void
SDL_AtomicLock(SDL_SpinLock *lock)
{
/* FIXME: Should we have an eventual timeout? */
while (!SDL_AtomicTryLock(lock)) {
@@ -113,7 +99,8 @@ void SDL_AtomicLock(SDL_SpinLock *lock)
}
}
void SDL_AtomicUnlock(SDL_SpinLock *lock)
void
SDL_AtomicUnlock(SDL_SpinLock *lock)
{
#if defined(_MSC_VER)
_ReadWriteBarrier();
Binary file not shown.
@@ -1,10 +0,0 @@
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level='asInvoker' uiAccess='false' />
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -474,7 +474,7 @@
#ifndef PNG_VERSION_INFO_ONLY
/* include the compression library's header */
#include "../include/zlib.h"
#include "zlib.h"
#endif
/* include all user configurable info, including optional assembler routines */
+1 -1
View File
@@ -84,7 +84,7 @@ OBJS = $(GENERIC_OBJS) $(LINUX_OBJS)
TARGET_LIB = libjge.a
TARGET_HGE = libhgetools.a
INCDIR = $(shell freetype-config --cflags 2> /dev/null) -I/usr/X11/include -I/usr/include/boost -Isrc/zipFS -Iinclude/
CXXFLAGS += -DLINUX -DNETWORK_SUPPORT $(FMOD)
CXXFLAGS += -DLINUX $(FMOD)
CXXFLAGS += $(INCDIR)
LIBDIR = lib/linux
endif
-1
View File
@@ -394,7 +394,6 @@ class JGE
void SetJNIEnv(JNIEnv * env, jclass cls);
void sendJNICommand(std::string command);
std::string getFileSystemLocation();
std::string getFileUserFolderPath();
#endif
protected:
-1
View File
@@ -30,7 +30,6 @@ const int kInfoMenuID = -200;
const int kRandomPlayerMenuID = -11;
const int kRandomAIPlayerMenuID = -12;
const int kEvilTwinMenuID = -14;
const int kCommanderMenuID = -33;
class JGuiListener
{
+4 -6
View File
@@ -131,11 +131,10 @@ JFileSystem::JFileSystem(const string & _userPath, const string & _systemPath)
systemPath = [[documentsDirectory stringByAppendingString: @"/Res/"] cStringUsingEncoding:1];
#elif defined (ANDROID)
userPath = JGE::GetInstance()->getFileUserFolderPath();
systemPath = JGE::GetInstance()->getFileSystemLocation();
userPath = JGE::GetInstance()->getFileSystemLocation();
systemPath = "";
DebugTrace("User path " << userPath);
DebugTrace("System path " << systemPath);
DebugTrace("User path " << userPath);
#elif defined (QT_CONFIG)
QDir sysDir(RESDIR);
@@ -260,7 +259,6 @@ void JFileSystem::clearZipCache()
bool JFileSystem::AttachZipFile(const string &zipfile, char *password /* = NULL */)
{
#ifndef WIN32
if (mZipAvailable && mZipFile.is_open())
{
if (mZipFileName != zipfile)
@@ -268,7 +266,7 @@ bool JFileSystem::AttachZipFile(const string &zipfile, char *password /* = NULL
else
return true;
}
#endif
mZipFileName = zipfile;
mPassword = password;
+2 -31
View File
@@ -668,7 +668,7 @@ string JGE::getFileSystemLocation()
if (env == NULL)
{
DebugTrace("An Error Occurred in getting the JNI Environment whie trying to get the system folder location. Defaulting to /mnt/sdcard/net.wagic.app/Wagic");
return "/mnt/sdcard/Wagic/Res";
return "/mnt/sdcard/Wagic";
};
jclass jniClass = env->FindClass("org/libsdl/app/SDLActivity");
@@ -677,36 +677,7 @@ string JGE::getFileSystemLocation()
if (methodId == 0)
{
DebugTrace("An Error Occurred in getting the JNI methodID for getSystemFolderPath. Defaulting to /mnt/sdcard/Wagic");
return "/mnt/sdcard/Wagic/Res";
};
jstring systemPath = (jstring) env->CallStaticObjectMethod(jniClass, methodId);
// Now convert the Java String to C++ char array
const char* cstr = env->GetStringUTFChars(systemPath, 0);
string retVal (cstr);
env->ReleaseStringUTFChars(systemPath, cstr);
env->DeleteLocalRef(systemPath);
return retVal;
}
string JGE::getFileUserFolderPath()
{
JNIEnv * env = getJNIEnv();
if (env == NULL)
{
DebugTrace("An Error Occurred in getting the JNI Environment whie trying to get the system folder location. Defaulting to /mnt/sdcard/net.wagic.app/Wagic");
return "/mnt/sdcard/Wagic/User";
};
jclass jniClass = env->FindClass("org/libsdl/app/SDLActivity");
jmethodID methodId = env->GetStaticMethodID( jniClass, "getUserFolderPath", "()Ljava/lang/String;");
if (methodId == 0)
{
DebugTrace("An Error Occurred in getting the JNI methodID for getSystemFolderPath. Defaulting to /mnt/sdcard/Wagic");
return "/mnt/sdcard/Wagic/User";
return "/mnt/sdcard/Wagic";
};
jstring systemPath = (jstring) env->CallStaticObjectMethod(jniClass, methodId);
+1 -1
View File
@@ -197,7 +197,7 @@ bool JGuiController::CheckUserInput(JButton key)
mObjects[mCurr]->Entering();
}
mEngine->LeftClickedProcessed();
mEngine->ResetInput();
mEngine->ResetInput();
return true;
}
mEngine->LeftClickedProcessed();
+1 -16
View File
@@ -18,11 +18,6 @@
#include <stdexcept>
#include <iostream>
#include <math.h>
#ifndef WIN32
#include <unistd.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#if (defined FORCE_GLES)
#undef GL_ES_VERSION_2_0
@@ -58,7 +53,6 @@ JGameLauncher* g_launcher = NULL;
#ifdef ANDROID
JNIEnv * mJNIEnv = NULL;
jclass * mJNIClass = NULL;
int SDL_ResumeSyncTime = 0;
#endif
class SdlApp;
@@ -84,7 +78,6 @@ extern "C" void Java_org_libsdl_app_SDLActivity_nativeResume(
{
if (!g_engine)
return;
SDL_ResumeSyncTime = 100000;
g_engine->Resume();
}
@@ -143,16 +136,8 @@ public:
if(!g_engine->IsPaused())
OnEvent(&Event);
}
if(!g_engine->IsPaused()){
#ifdef ANDROID
// Fix for SDL crash on resuming Android app from background.
if(SDL_ResumeSyncTime){
usleep(SDL_ResumeSyncTime);
SDL_ResumeSyncTime = 0;
}
#endif
if(!g_engine->IsPaused())
OnUpdate();
}
}
}
+1 -13
View File
@@ -184,13 +184,7 @@ JMusic *JSoundSystem::LoadMusic(const char *fileName)
const SLboolean req[2] = {SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE};
result = (*engineEngine)->CreateAudioPlayer(engineEngine, &music->playerObject, &audioSrc, &audioSnk, 2, ids, req);
DebugTrace("result " << result);
if(result == SL_RESULT_MEMORY_FAILURE){
delete music;
mCurrentMusic = NULL;
return NULL;
}
// realize the player
result = (*music->playerObject)->Realize(music->playerObject, SL_BOOLEAN_FALSE);
DebugTrace("result " << result);
@@ -309,12 +303,6 @@ JSample *JSoundSystem::LoadSample(const char *fileName)
1, ids, req);
DebugTrace("result " << result);
if(result == SL_RESULT_MEMORY_FAILURE){
delete sample;
mCurrentSample = NULL;
return NULL;
}
// realize the player
result = (*sample->playerObject)->Realize(sample->playerObject, SL_BOOLEAN_FALSE);
DebugTrace("result " << result);
+1 -2
View File
@@ -96,8 +96,7 @@ hgeParticleSystem::hgeParticleSystem(hgeParticleSystemInfo *psi)
{
//hge=hgeCreate(HGE_VERSION);
if (psi)
memcpy(&info, psi, sizeof(hgeParticleSystemInfo));
memcpy(&info, psi, sizeof(hgeParticleSystemInfo));
vecLocation.x=vecPrevLocation.x=0.0f;
vecLocation.y=vecPrevLocation.y=0.0f;
+1 -3
View File
@@ -48,9 +48,7 @@ JSocket::JSocket(string ipAddr)
#ifdef WIN32
unsigned int addr_dest = inet_addr(ipAddr.c_str());
hostentptr = gethostbyaddr((char*) &addr_dest, 4, AF_INET);
if (hostentptr == NULL)
hostentptr = gethostbyname(ipAddr.c_str()); // Fix for Windows if IP Address cannot be resolved.
hostentptr=gethostbyaddr((char*) &addr_dest, 4, AF_INET);
#elif LINUX
hostentptr = gethostbyname(ipAddr.c_str());
#endif
+9 -26
View File
@@ -1,45 +1,28 @@
# Wagic the Homebrew
#Wagic the Homebrew
[![Build Status](https://travis-ci.org/WagicProject/wagic.png?branch=master)](https://travis-ci.com/WagicProject/wagic)
[![Build Status](https://travis-ci.org/WagicProject/wagic.png?branch=master)](https://travis-ci.org/WagicProject/wagic)
[![Build status](https://ci.appveyor.com/api/projects/status/7j4fbr6m62aqej59/branch/master)](https://ci.appveyor.com/project/xawotihs/wagic/branch/master)
[![Coverage Status](https://coveralls.io/repos/WagicProject/wagic/badge.png?branch=master)](https://coveralls.io/r/WagicProject/wagic?branch=master)
## Description
**Wagic, the Homebrew** is a C++ game engine that allows to play card games against an AI on:
Wagic, the Homebrew, is a C++ game engine that allows to play card games against an AI on
- Android (phones and tablets)
- iOS (iPhone/iPad)
- Sony PSP
- Windows desktops
- MacOS
- Linux and derivatives like Maemo or Meego
- Linux and derivated like Maemo or Meego
It is highly customizable and allows the player to tweak the rules, create their own cards, their own themes, etc...
#### [Download from GitHub Releases!](https://github.com/WagicProject/wagic/releases)
![Screenshot of shop from wololo.net](docs/img/shop.jpg)
It is highly customizable and allows the player to tweak the rules / create their own cards, their own themes, etc...
### Documentation
Info, downloads, discussions and more at http://wololo.net/forum/index.php
Info, downloads, discussions and more at http://wololo.net/forum/index.php (archived as of 16 Nov 2022).
![alt text](http://wololo.net/wagic/wp-content/uploads/2009/10/shop.jpg "Screenshot")
Chat with the community on the [**Wagic - MTG Game** Discord](https://discord.com/invite/JHK5pVaK5p) (Feb 2023).
Developer information from the [Wagic Wiki](https://github.com/WagicProject/wagic/wiki) is also included in the [wagic/docs/](docs) folder.
### Sample round play-through video
[![Wagic, The Homebrew sample playthrough](docs/img/Wagic%2C%20The%20Homebrew%20sample%20playthrough.jpg)](http://www.youtube.com/watch?v=WUFSAPZuDIk)
*Wagic, The Homebrew sample playthrough on YouTube by Rolz73, 6 Feb 2014*
## Sister projects
- [WagicSyntaxPlugin
](https://github.com/Vitty85/WagicSyntaxPlugin), a Wagic developer tool by Vitty85 for [Notepad++](https://notepad-plus-plus.org/downloads/)
- [Forge](https://www.slightlymagic.net/forum/viewforum.php?f=26), a Java-based game engine similar to Wagic ([Source](https://github.com/Card-Forge/forge/))
- [XMage](http://xmage.today/), a Java-based online multiplayer digital CCG ([Source](https://github.com/magefree/mage))
[![IMAGE ALT TEXT HERE](http://img.youtube.com/vi/WUFSAPZuDIk/0.jpg)](http://www.youtube.com/watch?v=WUFSAPZuDIk)
+2 -2
View File
@@ -22,8 +22,8 @@ environment:
# scripts that run after cloning repository
install:
- powershell -Command "& {(new-object net.webclient).DownloadFile('https://bootstrap.pypa.io/get-pip.py', 'C:/get-pip.py')}"
- powershell -Command "& {C:/Python27/python.exe C:/get-pip.py}"
- ps: (new-object net.webclient).DownloadFile('https://bootstrap.pypa.io/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"
Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

Submodule docs/wiki deleted from 0244ca1874
+16 -28
View File
@@ -1,28 +1,16 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="0240"
android:installLocation="preferExternal"
android:versionName="@string/app_version"
package="net.wagic.app">
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application android:icon="@drawable/icon"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
<activity android:debuggable="false"
android:configChanges="keyboard|keyboardHidden|orientation"
android:label="@string/app_name"
android:name="org.libsdl.app.SDLActivity"
android:screenOrientation="sensorLandscape">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="10"
android:targetSdkVersion="29" />
</manifest>
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="0201" android:versionName="@string/app_version" package="net.wagic.app">
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
<activity android:debuggable="false" android:configChanges="keyboard|keyboardHidden|orientation" android:label="@string/app_name" android:name="org.libsdl.app.SDLActivity" android:screenOrientation="sensorLandscape">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="10" android:targetSdkVersion="10"/>
</manifest>
+1 -1
View File
@@ -8,4 +8,4 @@
# project structure.
# Project target.
target=android-23
target=android-10
+1 -2
View File
@@ -12,7 +12,7 @@ BOOST_PATH := $(MY_WAGIC_ROOT)/Boost
JPEG_PATH := $(JGE_PATH)/Dependencies/libjpeg
PNG_PATH := $(JGE_PATH)/Dependencies/libpng
LOCAL_CFLAGS += -DLINUX -DANDROID -DSDL_CONFIG -DNETWORK_SUPPORT
LOCAL_CFLAGS += -DLINUX -DANDROID -DSDL_CONFIG
LOCAL_CFLAGS += -D_STLP_USE_SIMPLE_NODE_ALLOC -DTIXML_USE_STL
LOCAL_CFLAGS += -D__arm__ -D_REENTRANT -D_GLIBCXX__PTHREADS
LOCAL_STATIC_LIBRARIES := libpng libjpeg
@@ -133,7 +133,6 @@ LOCAL_SRC_FILES := $(SDL_PATH)/src/main/android/SDL_android_main.cpp \
$(MTG_PATH)/src/WFilter.cpp \
$(MTG_PATH)/src/WFont.cpp \
$(MTG_PATH)/src/WGui.cpp \
$(MTG_PATH)/src/WParsedInt.cpp \
$(MTG_PATH)/src/WResourceManager.cpp \
$(MTG_PATH)/src/DeckView.cpp \
$(MTG_PATH)/src/CarouselDeckView.cpp \
+2 -5
View File
@@ -1,11 +1,8 @@
APP_PROJECT_PATH := $(call my-dir)/..
APP_CPPFLAGS += -frtti -fexceptions
APP_ABI := arm64-v8a
APP_PLATFORM := android-21
APP_CFLAGS += -march=armv8.1-a
APP_CPPFLAGS += -D__ARM_FEATURE_LSE=1
APP_ABI := armeabi armeabi-v7a
#APP_ABI := x86 # mainly for emulators
APP_STL := c++_static
APP_STL := gnustl_static
APP_MODULES := libpng libjpeg main SDL
#APP_OPTIM is 'release' by default
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -11,4 +11,4 @@
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
# Project target.
target=android-23
target=android-10
-1
View File
@@ -4,7 +4,6 @@
android:id="@+id/mainLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:keepScreenOn="true"
>
<TextView
android:layout_width="fill_parent"
+2 -2
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Wagic</string>
<string name="app_version">0.20.0</string>
<string name="info_text">All Rights Reserved.</string>
<string name="app_version">0.20.1</string>
<string name="info_text">Wagic v0.20.1\\nAll Rights Reserved.</string>
</resources>
@@ -16,7 +16,7 @@ public class DeckImporter
String message = "";
String deck = "";
String deckname = "";
String prefix = "";
String prefix = "#SB:";
int cardcount = 0;
if(f.exists() && !f.isDirectory())
{
@@ -36,14 +36,7 @@ public class DeckImporter
{
String line = scanner.nextLine();
line = line.trim();
if (line.equals("")) {
line = scanner.nextLine();
prefix = "#SB:"; // Sideboard started from next card.
if (line.equals("")) {
line = scanner.nextLine(); // Sometimes there are 2 blank lines from main deck and sideboard.
}
}
if (!line.equals("")) // don't write out blank lines
if (!line.equals("") && cardcount < 61) // don't write out blank lines
{
String[] slines = line.split("\\s+");
String arranged = "";
@@ -57,57 +50,60 @@ public class DeckImporter
{
arranged = arranged.substring(5);
slines[1] = slines[1].replaceAll("\\[", "").replaceAll("\\]", "");
deck += prefix + arranged + " (" + renameSet(slines[1]) + ") * " + slines[0] + "\n";
deck += arranged + " (" + renameSet(slines[1]) + ") * " + slines[0] + "\n";
} else
{
deck += prefix + arranged + "(*) * " + slines[0] + "\n";
deck += arranged + "(*) * " + slines[0] + "\n";
}
cardcount += Integer.parseInt(slines[0]);
}
}
}
File profile = new File(activePath + "/User/settings/options.txt");
String profileName = "Default";
File profile = new File(activePath + "/Res/settings/options.txt");
if (profile.exists() && !profile.isDirectory())
profileName = getActiveProfile(profile);
File rootDecks = null;
if (!profileName.equalsIgnoreCase("Default"))
rootDecks = new File(activePath + "/User/profiles/" + profileName);
else
rootDecks = new File(activePath + "/User/player/");
if (rootDecks.exists() && rootDecks.isDirectory())
{
//save deck
int countdeck = 1;
File[] files = rootDecks.listFiles();
for (int i = 0; i < files.length; i++)
{//check if there is available deck...
if (files[i].getName().startsWith("deck"))
countdeck++;
}
File toSave = new File(rootDecks + "/deck" + countdeck + ".txt");
try
String profileName = getActiveProfile(profile);
if (profileName != "Missing!")
{
FileOutputStream fop = new FileOutputStream(toSave);
// if file doesn't exists, then create it
if (!toSave.exists())
File rootProfiles = new File(activePath + "/Res/profiles/" + profileName);
if (rootProfiles.exists() && rootProfiles.isDirectory())
{
toSave.createNewFile();
//save deck
int countdeck = 1;
File[] files = rootProfiles.listFiles();
for (int i = 0; i < files.length; i++)
{//check if there is available deck...
if (files[i].getName().startsWith("deck"))
countdeck++;
}
File toSave = new File(rootProfiles + "/deck" + countdeck + ".txt");
try
{
FileOutputStream fop = new FileOutputStream(toSave);
// if file doesn't exists, then create it
if (!toSave.exists())
{
toSave.createNewFile();
}
// get the content in bytes
byte[] contentInBytes = deck.getBytes();
fop.write(contentInBytes);
fop.flush();
fop.close();
message = "Import Deck Success!\n" + cardcount + " total cards in this deck\n\n" + deck;
} catch (IOException e)
{
message = e.getMessage();
}
} else
{
message = "Missing Folder!";
}
// get the content in bytes
byte[] contentInBytes = deck.getBytes();
fop.write(contentInBytes);
fop.flush();
fop.close();
message = "The deck has been successfully imported as: " + toSave.getName() + "\n" + cardcount + " total cards in this deck\n\n" + deck;
} catch (IOException e)
{
message = e.getMessage();
}
} else
{
message = "Problem opening decks folder: " + rootDecks.getAbsolutePath();
message = "Invalid Profile!";
}
} else
{
@@ -147,12 +143,12 @@ public class DeckImporter
}
else
{
return "Default";
return "Missing!";
}
}
catch(IOException e)
{
return "Default";
return "Missing!";
}
return name;
}
File diff suppressed because it is too large Load Diff
@@ -23,7 +23,7 @@ public class StorageOptions
public static int count = 0;
public static String defaultMountPoint;
public static void determineStorageOptions(android.content.Context mContext)
public static void determineStorageOptions()
{
initializeMountPoints();
if (findForcemount()){
@@ -36,16 +36,6 @@ public class StorageOptions
}
compareMountsWithVold();
testAndCleanMountsList();
File[] externalStorageVolumes = mContext.getExternalFilesDirs("");
for(int i = 0; i < externalStorageVolumes.length; i++){
mMounts.add(externalStorageVolumes[i].getAbsolutePath());
}
for(int i = 0; i < mMounts.size(); i++){
for(int j = 0; j < mMounts.size(); j++){
if(i!=j && mMounts.get(i).startsWith(mMounts.get(j)))
mMounts.remove(i);
}
}
setProperties();
}
@@ -274,22 +264,22 @@ public class StorageOptions
for (String path : mMounts)
{//with forcemount menu
if ("/mnt/sdcard".equalsIgnoreCase(path) || "/storage/sdcard0".equalsIgnoreCase(path))
mLabels.add("Internal SD " + "[" + path + "/]");
mLabels.add("Internal SD " + "[" + path + "]");
else if (path.contains("emulated"))
mLabels.add("Emulated SD " + " [" + path + "/]");
mLabels.add("Emulated SD " + " [" + path + "]");
else
mLabels.add("External SD " + " [" + path + "/]");
mLabels.add("External SD " + " [" + path + "]");
}
}
else
{
for (String path : mMounts)
{
// TODO: /mnt/sdcard and emulated are assumed to always mean internal storage. Use this comparison until there is a better way to do this
if ("/mnt/sdcard".equalsIgnoreCase(path) || path.contains("emulated"))
mLabels.add("Built-in Storage " + "[" + path + "/]");
// TODO: /mnt/sdcard is assumed to always mean internal storage. Use this comparison until there is a better way to do this
if ("/mnt/sdcard".equalsIgnoreCase(path))
mLabels.add("Built-in Storage");
else
mLabels.add("External SD Card " + "[" + path + "/]");
mLabels.add("External SD Card " + i++);
}
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+3 -4
View File
@@ -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/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/WFont.o objs/WParsedInt.o objs/CarouselDeckView.o objs/GridDeckView.o objs/DeckView.o
objs/WFont.o objs/CarouselDeckView.o objs/GridDeckView.o objs/DeckView.o
DEPS = $(patsubst objs/%.o, deps/%.d, $(OBJS))
RESULT = $(shell psp-config --psp-prefix 2> Makefile.cache)
@@ -68,7 +68,6 @@ EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = Wagic, the Homebrew?!
PSP_EBOOT_ICON = icon.png
#PSP_EBOOT_ICON1 = icon1.pmf
PSP_LARGE_MEMORY = 1
PSP_EBOOT_UNKPNG = pic0.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
@@ -83,7 +82,7 @@ OBJS += objs/TestSuiteAI.o
INCDIR = -I../../JGE/include -I../../JGE/src -I/usr/X11/include -I../../projects/mtg/include -I/usr/include/boost -I../../JGE/src/zipFS
LIBDIR = -L../../JGE/lib/linux -L../../JGE -L/usr/X11/lib
LIBS = -ljge -lfreetype -ljpeg -lgif -lpng -lz -lm -lstdc++ -lhgetools -lGL -lGLU -lX11 -lpthread $(FMOD)
CFLAGS = $(INCDIR) -DLINUX -DNETWORK_SUPPORT -DUSE_PRECOMPILED_HEADERS=1 -DTIXML_USE_STL -Wno-nonnull-compare
CFLAGS = $(INCDIR) -DLINUX -DUSE_PRECOMPILED_HEADERS=1 -DTIXML_USE_STL -Wno-nonnull-compare
ASFLAGS = $(CXXFLAGS)
@@ -94,7 +93,7 @@ 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
LIBDIR = -L../../JGE/lib/linux -L../../JGE -L/usr/X11/lib -L../../Boost/lib
LIBS = -ljge -lfreetype -ljpeg -lgif -lpng -lz -lm -lstdc++ -lhgetools -lGL -lGLU -lX11 -lboost_thread $(FMOD)
CFLAGS = $(INCDIR) -DLINUX -DNETWORK_SUPPORT -DUSE_PRECOMPILED_HEADERS=1 -Wno-nonnull-compare
CFLAGS = $(INCDIR) -DLINUX -DUSE_PRECOMPILED_HEADERS=1 -Wno-nonnull-compare
ASFLAGS = $(CXXFLAGS)
+3
View File
@@ -0,0 +1,3 @@
maxGrade=0: Borderline (99% OK)
keybindings_sdl=13:2,27:2,32:10,97:7,98:5,100:6,101:15,102:16,105:11,106:12,107:13,108:10,113:14,115:9,119:8,1073741903:6,1073741904:7,1073741905:9,1073741906:8,1073741912:2,1073741952:14,1073741953:13,1073742048:3,1073742052:3,1073742094:2
aidecks=10
Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Before

Width:  |  Height:  |  Size: 7.5 KiB

After

Width:  |  Height:  |  Size: 7.5 KiB

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 6.9 KiB

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

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