aboutsummaryrefslogtreecommitdiff
path: root/games
diff options
context:
space:
mode:
authorAntoine Brodin <antoine@FreeBSD.org>2021-01-01 10:11:34 +0000
committerAntoine Brodin <antoine@FreeBSD.org>2021-01-01 10:11:34 +0000
commit26b4c8f71f91d22e081b27814782686edde0c90a (patch)
tree1c321c39372c25d8634e75b5c8e08edc676b296d /games
parent548f16bd1a2915f08878b716eed92ff3267e6de2 (diff)
downloadports-26b4c8f71f91d22e081b27814782686edde0c90a.tar.gz
ports-26b4c8f71f91d22e081b27814782686edde0c90a.zip
Revert r559792 to unbreak INDEX and bulk -a
It seems a lot of reverse dependencies were missed With hat: portmgr
Notes
Notes: svn path=/head/; revision=559822
Diffstat (limited to 'games')
-rw-r--r--games/0ad/Makefile92
-rw-r--r--games/0ad/distinfo5
-rw-r--r--games/0ad/files/patch-build_premake_extern__libs5.lua21
-rw-r--r--games/0ad/files/patch-build_premake_premake5.lua17
-rw-r--r--games/0ad/files/patch-build_workspaces_update-workspaces.sh13
-rw-r--r--games/0ad/files/patch-icu6817
-rw-r--r--games/0ad/files/patch-libraries_source_fcollada_src_FCollada_FUtils_FUStringBuilder.hpp157
-rw-r--r--games/0ad/files/patch-libraries_source_fcollada_src_Makefile11
-rw-r--r--games/0ad/files/patch-libraries_source_spidermonkey_FixpsutilFreeBSD.diff168
-rw-r--r--games/0ad/files/patch-libraries_source_spidermonkey_build.sh17
-rw-r--r--games/0ad/files/patch-source_lib_allocators_page__aligned.cpp20
-rw-r--r--games/0ad/files/patch-source_lib_sysdep_os_unix_uvm.cpp20
-rw-r--r--games/0ad/files/patch-source_tools_atlas_AtlasObject_AtlasObjectImpl.cpp30
-rw-r--r--games/0ad/files/patch-source_tools_atlas_AtlasUI_CustomControls_MapDialog_MapDialog.cpp34
-rw-r--r--games/0ad/files/patch-source_tools_atlas_AtlasUI_ScenarioEditor_ScenarioEditor.cpp56
-rw-r--r--games/0ad/pkg-descr16
-rw-r--r--games/0ad/pkg-plist12
-rw-r--r--games/Makefile8
-rw-r--r--games/dangerdeep/Makefile56
-rw-r--r--games/dangerdeep/distinfo2
-rw-r--r--games/dangerdeep/files/patch-SConstruct104
-rw-r--r--games/dangerdeep/files/patch-src__condvar.h18
-rw-r--r--games/dangerdeep/files/patch-src__faulthandler.h10
-rw-r--r--games/dangerdeep/files/patch-src__mutex.h20
-rw-r--r--games/dangerdeep/files/patch-src__subsim.cpp19
-rw-r--r--games/dangerdeep/files/patch-src__thread.h19
-rw-r--r--games/dangerdeep/files/patch-src_coastmap.h20
-rw-r--r--games/dangerdeep/files/patch-src_shader.cpp26
-rw-r--r--games/dangerdeep/pkg-descr6
-rw-r--r--games/freera/Makefile41
-rw-r--r--games/freera/distinfo2
-rw-r--r--games/freera/files/SConstruct27
-rw-r--r--games/freera/files/patch-src-freera.cpp13
-rw-r--r--games/freera/files/patch-src_game_loadmap.cpp11
-rw-r--r--games/freera/files/pkg-message.in14
-rw-r--r--games/freera/pkg-descr6
-rw-r--r--games/glob2/Makefile80
-rw-r--r--games/glob2/distinfo2
-rw-r--r--games/glob2/files/patch-SConstruct84
-rw-r--r--games/glob2/files/patch-boost-1.6917
-rw-r--r--games/glob2/files/patch-data__SConscript9
-rw-r--r--games/glob2/files/patch-src_EditorMainMenu.cpp11
-rw-r--r--games/glob2/files/patch-src_LANMenuScreen.cpp11
-rw-r--r--games/glob2/files/patch-src_YOGClientLobbyScreen.cpp11
-rw-r--r--games/glob2/files/patch-src__ConfigFiles.h15
-rw-r--r--games/glob2/files/patch-src__Game.h36
-rw-r--r--games/glob2/files/pkg-message.in20
-rw-r--r--games/glob2/pkg-descr12
-rw-r--r--games/glob2/pkg-plist1746
-rw-r--r--games/marsnomercy/Makefile55
-rw-r--r--games/marsnomercy/distinfo2
-rw-r--r--games/marsnomercy/files/mars-nomercy.in12
-rw-r--r--games/marsnomercy/files/patch-SConstruct108
-rw-r--r--games/marsnomercy/files/pkg-message.in14
-rw-r--r--games/marsnomercy/pkg-descr21
-rw-r--r--games/netpanzer/Makefile53
-rw-r--r--games/netpanzer/distinfo3
-rw-r--r--games/netpanzer/files/patch-SConstruct19
-rw-r--r--games/netpanzer/files/patch-src_Lib_Network_Address.hpp11
-rw-r--r--games/netpanzer/files/patch-src_Lib_Network_SocketBase.cpp11
-rw-r--r--games/netpanzer/files/patch-src_Lib_optionmm_command__line.hpp17
-rw-r--r--games/netpanzer/pkg-descr8
-rw-r--r--games/pingus/Makefile48
-rw-r--r--games/pingus/distinfo5
-rw-r--r--games/pingus/files/patch-SConscript13
-rw-r--r--games/pingus/files/patch-boost-signals2380
-rw-r--r--games/pingus/files/patch-src-lisp-getters.hpp11
-rw-r--r--games/pingus/files/patch-src__pingus__pingus_main.cpp11
-rw-r--r--games/pingus/files/patch-src__pingus__screens__pingus_menu.cpp11
-rw-r--r--games/pingus/files/patch-src__util__file_reader.hpp10
-rw-r--r--games/pingus/files/patch-src_pingus_screens_demo__session.cpp10
-rw-r--r--games/pingus/pkg-descr5
-rw-r--r--games/renpy/Makefile109
-rw-r--r--games/renpy/distinfo3
-rw-r--r--games/renpy/files/patch-issue86911
-rw-r--r--games/renpy/files/patch-system-fribidi57
-rw-r--r--games/renpy/pkg-descr9
77 files changed, 4209 insertions, 0 deletions
diff --git a/games/0ad/Makefile b/games/0ad/Makefile
new file mode 100644
index 000000000000..fd1ae3e6da87
--- /dev/null
+++ b/games/0ad/Makefile
@@ -0,0 +1,92 @@
+# $FreeBSD$
+
+PORTNAME= 0ad
+PORTVERSION= 0.0.23b
+PORTREVISION= 12
+CATEGORIES= games
+MASTER_SITES= http://releases.wildfiregames.com/ \
+ SF/zero-ad/releases
+DISTFILES= ${PORTNAME}-${PORTVERSION}-alpha-unix-build.tar.xz \
+ ${PORTNAME}-${PORTVERSION}-alpha-unix-data.tar.xz
+
+MAINTAINER= madpilot@FreeBSD.org
+COMMENT= Real-time strategy (RTS) game of ancient warfare
+
+DEPRECATED= Uses deprecated version of python
+EXPIRATION_DATE= 2020-12-31
+
+BUILD_DEPENDS= zip:archivers/zip \
+ cmake:devel/cmake
+LIB_DEPENDS= libboost_thread.so:devel/boost-libs \
+ libicui18n.so:devel/icu \
+ libpng.so:graphics/png \
+ libogg.so:audio/libogg \
+ libvorbis.so:audio/libvorbis \
+ libcurl.so:ftp/curl \
+ libgloox.so:net-im/gloox \
+ libminiupnpc.so:net/miniupnpc \
+ libnspr4.so:devel/nspr \
+ libenet.so:net/enet \
+ libtiff.so:graphics/tiff \
+ libsodium.so:security/libsodium
+
+USES= compiler:c++11-lib desktop-file-utils dos2unix gl gmake gnome \
+ iconv jpeg openal:al pkgconfig python:2.7,build sdl tar:xz xorg
+USE_GNOME= libxml2
+USE_GL= gl
+USE_SDL= sdl2
+USE_XORG= x11 xcursor
+
+WRKSRC= ${WRKDIR}/${PORTNAME}-${PORTVERSION}-alpha
+BUILD_WRKSRC= ${WRKSRC}/build/workspaces/gcc
+MAKE_ARGS= config=release verbose=1
+CPPFLAGS+= -DU_USING_ICU_NAMESPACE=1
+BUNDLE_LIBS= yes
+DOS2UNIX_REGEX= .*\.([ch]p{0,2}|make)
+BINARY_ALIAS= python=${PYTHON_CMD}
+
+USE_WX= 3.0+
+WX_COMPS= wx:lib
+MAKE_ENV+= JOBS=${_MAKE_JOBS}
+
+BROKEN_aarch64= fails to compile: no member named verifyHeapAccessDisassembly
+BROKEN_armv6= fails to link: fatal error: conftest: Unknown error: -1
+BROKEN_armv7= fails to link: fatal error: conftest: Unknown error: -1
+BROKEN_powerpc64= fails to compile: _psutil_bsd.c: error: 'struct xtcpcb' has no member named 'xt_tp'
+
+PORTDATA= *
+
+.include <bsd.port.pre.mk>
+
+post-patch:
+ @${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|' \
+ -e 's|%%CC%%|${CC}|' \
+ ${WRKSRC}/build/premake/premake5.lua ${WRKSRC}/build/premake/extern_libs5.lua
+.if ${ARCH} == i386 && ${CHOSEN_COMPILER_TYPE} == gcc
+ @${REINPLACE_CMD} -e '1055,1251s/-rdynamic/-lssp_nonshared &/' \
+ -e '1441s/"execinfo",/& "ssp_nonshared",/' \
+ ${WRKSRC}/build/premake/premake5.lua
+.endif
+ @${REINPLACE_CMD} 's,^\(Exec=\)/usr/local,\1${PREFIX},' \
+ ${WRKSRC}/build/resources/0ad.desktop
+ @${REINPLACE_CMD} 's|%%PREFIX%%|${PREFIX}|' \
+ ${WRKSRC}/build/resources/0ad.sh
+
+pre-build:
+ (cd ${WRKSRC}/build/workspaces && ${SETENV} ${MAKE_ENV} ./update-workspaces.sh --bindir=${PREFIX}/bin --datadir=${DATADIR} --libdir=${PREFIX}/lib/${PORTNAME})
+
+do-install:
+ ${INSTALL_PROGRAM} ${WRKSRC}/binaries/system/pyrogenesis ${STAGEDIR}${PREFIX}/bin
+ ${INSTALL_SCRIPT} ${WRKSRC}/build/resources/0ad.sh ${STAGEDIR}${PREFIX}/bin/0ad
+ ${INSTALL_PROGRAM} ${WRKSRC}/binaries/system/ActorEditor ${STAGEDIR}${PREFIX}/bin
+ ${MKDIR} ${STAGEDIR}${PREFIX}/lib/${PORTNAME}
+ (cd ${WRKSRC}/binaries/system && ${INSTALL_LIB} libAtlasUI.so libCollada.so libmozjs38-ps-release.so libnvcore.so libnvimage.so libnvmath.so libnvtt.so ${STAGEDIR}${PREFIX}/lib/${PORTNAME})
+ ${INSTALL_DATA} ${WRKSRC}/build/resources/0ad.desktop ${STAGEDIR}${PREFIX}/share/applications
+ ${INSTALL_DATA} ${WRKSRC}/build/resources/0ad.png ${STAGEDIR}${PREFIX}/share/pixmaps
+ ${MKDIR} ${STAGEDIR}${DATADIR}
+ (cd ${WRKSRC}/binaries/data && ${COPYTREE_SHARE} "config l10n tests tools" ${STAGEDIR}${DATADIR})
+ ${MKDIR} ${STAGEDIR}${DATADIR}/mods/public ${STAGEDIR}${DATADIR}/mods/mod
+ ${TAR} xf ${WRKSRC}/binaries/data/mods/public/public.zip -C ${STAGEDIR}${DATADIR}/mods/public --no-same-permissions
+ ${TAR} xf ${WRKSRC}/binaries/data/mods/mod/mod.zip -C ${STAGEDIR}${DATADIR}/mods/mod --no-same-permissions
+
+.include <bsd.port.post.mk>
diff --git a/games/0ad/distinfo b/games/0ad/distinfo
new file mode 100644
index 000000000000..7aa206213e7b
--- /dev/null
+++ b/games/0ad/distinfo
@@ -0,0 +1,5 @@
+TIMESTAMP = 1545588170
+SHA256 (0ad-0.0.23b-alpha-unix-build.tar.xz) = 01bff7641ee08cac896c54d518d7e4b01752513105558f212e3199d747512a37
+SIZE (0ad-0.0.23b-alpha-unix-build.tar.xz) = 31922812
+SHA256 (0ad-0.0.23b-alpha-unix-data.tar.xz) = e11b4ade7ede954cbbdc1fe6e2e4b25ac6b8d5a644133b640ffc9b099338a713
+SIZE (0ad-0.0.23b-alpha-unix-data.tar.xz) = 691280800
diff --git a/games/0ad/files/patch-build_premake_extern__libs5.lua b/games/0ad/files/patch-build_premake_extern__libs5.lua
new file mode 100644
index 000000000000..946c30375b72
--- /dev/null
+++ b/games/0ad/files/patch-build_premake_extern__libs5.lua
@@ -0,0 +1,21 @@
+--- build/premake/extern_libs5.lua.orig 2018-04-29 15:44:48 UTC
++++ build/premake/extern_libs5.lua
+@@ -191,7 +191,7 @@ extern_lib_defs = {
+ end
+ -- TODO: This actually applies to most libraries we use on BSDs, make this a global setting.
+ if os.istarget("bsd") then
+- sysincludedirs { "/usr/local/include" }
++ sysincludedirs { "%%LOCALBASE%%/include" }
+ end
+ end,
+ link_settings = function()
+@@ -301,9 +301,6 @@ extern_lib_defs = {
+ elseif os.istarget("macosx") then
+ add_default_include_paths("iconv")
+ defines { "LIBICONV_STATIC" }
+- elseif os.getversion().description == "FreeBSD" then
+- defines { "HAVE_ICONV_CONST" }
+- defines { "ICONV_CONST=const" }
+ end
+ end,
+ link_settings = function()
diff --git a/games/0ad/files/patch-build_premake_premake5.lua b/games/0ad/files/patch-build_premake_premake5.lua
new file mode 100644
index 000000000000..edd965ab45dd
--- /dev/null
+++ b/games/0ad/files/patch-build_premake_premake5.lua
@@ -0,0 +1,17 @@
+--- build/premake/premake5.lua.orig 2018-04-22 18:14:45 UTC
++++ build/premake/premake5.lua
+@@ -376,11 +376,11 @@ function project_add_x11_dirs()
+ sysincludedirs {
+ "/usr/X11R6/include/X11",
+ "/usr/X11R6/include",
+- "/usr/local/include/X11",
+- "/usr/local/include",
++ "%%LOCALBASE%%/include/X11",
++ "%%LOCALBASE%%/include",
+ "/usr/include/X11"
+ }
+- libdirs { "/usr/X11R6/lib" }
++ libdirs { "%%LOCALBASE%%/lib" }
+ end
+ end
+
diff --git a/games/0ad/files/patch-build_workspaces_update-workspaces.sh b/games/0ad/files/patch-build_workspaces_update-workspaces.sh
new file mode 100644
index 000000000000..311f65a0c84f
--- /dev/null
+++ b/games/0ad/files/patch-build_workspaces_update-workspaces.sh
@@ -0,0 +1,13 @@
+--- build/workspaces/update-workspaces.sh.orig 2014-09-20 19:02:24 UTC
++++ build/workspaces/update-workspaces.sh
+@@ -1,10 +1,5 @@
+ #!/bin/sh
+
+-if [ "$(id -u)" = "0" ]; then
+- echo "Running as root will mess up file permissions. Aborting ..." 1>&2
+- exit 1
+-fi
+-
+ die()
+ {
+ echo ERROR: $*
diff --git a/games/0ad/files/patch-icu68 b/games/0ad/files/patch-icu68
new file mode 100644
index 000000000000..5e9199d89535
--- /dev/null
+++ b/games/0ad/files/patch-icu68
@@ -0,0 +1,17 @@
+Regressed by https://github.com/unicode-org/icu/commit/c3fe7e09d844
+
+../../../source/i18n/L10n.cpp:208:82: error: use of undeclared identifier 'TRUE'
+ currentLocaleIsOriginalGameLocale = (currentLocale == icu::Locale::getUS()) == TRUE;
+ ^
+
+--- source/i18n/L10n.cpp.orig 2018-04-10 18:13:32 UTC
++++ source/i18n/L10n.cpp
+@@ -205,7 +205,7 @@ void L10n::ReevaluateCurrentLocaleAndReload()
+ else
+ {
+ GetDictionaryLocale(locale, currentLocale);
+- currentLocaleIsOriginalGameLocale = (currentLocale == icu::Locale::getUS()) == TRUE;
++ currentLocaleIsOriginalGameLocale = (currentLocale == icu::Locale::getUS()) == true;
+ useLongStrings = false;
+ }
+ LoadDictionaryForCurrentLocale();
diff --git a/games/0ad/files/patch-libraries_source_fcollada_src_FCollada_FUtils_FUStringBuilder.hpp b/games/0ad/files/patch-libraries_source_fcollada_src_FCollada_FUtils_FUStringBuilder.hpp
new file mode 100644
index 000000000000..1e7b881a41fb
--- /dev/null
+++ b/games/0ad/files/patch-libraries_source_fcollada_src_FCollada_FUtils_FUStringBuilder.hpp
@@ -0,0 +1,157 @@
+--- libraries/source/fcollada/src/FCollada/FUtils/FUStringBuilder.hpp.orig 2017-07-28 19:57:27 UTC
++++ libraries/source/fcollada/src/FCollada/FUtils/FUStringBuilder.hpp
+@@ -26,63 +26,6 @@
+ #define SAFE_DELETE_ARRAY(ptr) if (ptr != NULL) { delete [] ptr; ptr = NULL; }
+ #endif
+
+-template <class Char, class FloatType>
+-void FloatToString(FloatType f, Char* sz)
+-{
+- Char* buffer = sz + 1;
+- static const int digitCount = 6;
+- int decimal, sign;
+-
+- // ecvt rounds the string for us: http://www.datafocus.com/docs/man3/ecvt.3.asp
+- char* end = ecvt(f, digitCount, &decimal, &sign);
+-
+- if (sign != 0) (*buffer++) = '-';
+- int count = digitCount;
+- if (decimal > digitCount)
+- {
+- // We use the scientific notation: P.MeX
+- (*buffer++) = (*end++); // P is one character.
+- (*buffer++) = '.';
+-
+- // Mantissa (cleaned for zeroes)
+- for (--count; count > 0; --count) if (end[count - 1] != '0') break;
+- for (int i = 0; i < count; ++i) (*buffer++) = (*end++);
+- if (buffer[-1] == '.') --buffer;
+-
+- // Exponent
+- (*buffer++) = 'e';
+- uint32 exponent = decimal - 1; // X
+- if (exponent >= 10) (*buffer++) = (Char) ('0' + (exponent / 10));
+- (*buffer++) = (Char) ('0' + (exponent % 10));
+- (*buffer) = 0;
+- return;
+- }
+- else if (decimal > 0)
+- {
+- // Simple number: A.B
+- for (int i = 0; i < decimal; ++i) (*buffer++) = (*end++);
+- if (decimal < digitCount) (*buffer++) = '.';
+- count = digitCount - decimal;
+- }
+- else if (decimal < -digitCount)
+- {
+- // What case is this?
+- decimal = count = 0;
+- }
+- else if (decimal < 0 || (decimal == 0 && *end != '0'))
+- {
+- // Tiny number: 0.Me-X
+- (*buffer++) = '0'; (*buffer++) = '.';
+- for (int i = 0; i < -decimal; ++i) (*buffer++) = '0';
+- count = digitCount + decimal;
+- }
+- for (; count > 0; --count) if (end[count - 1] != '0') break;
+- for (int i = 0; i < count; ++i) (*buffer++) = (*end++);
+- if (decimal == 0 && count == 0) (*buffer++) = '0';
+- if (buffer[-1] == '.') --buffer;
+- (*buffer) = 0;
+-}
+-
+ template <class Char>
+ FUStringBuilderT<Char>::FUStringBuilderT(const String& sz)
+ {
+@@ -234,53 +177,50 @@ void FUStringBuilderT<Char>::append(const FUStringBuil
+ template <class Char>
+ void FUStringBuilderT<Char>::append(float f)
+ {
+-#ifdef WIN32
+- // use <float.h> _isnan method to detect the 1.#IND00 NaN.
+- if (f != std::numeric_limits<float>::infinity() && f != -std::numeric_limits<float>::infinity() && f != std::numeric_limits<float>::quiet_NaN() && f != std::numeric_limits<float>::signaling_NaN() && !_isnan((double)f))
+-#else
+- if (f != std::numeric_limits<float>::infinity() && f != -std::numeric_limits<float>::infinity() && f != std::numeric_limits<float>::quiet_NaN() && f != std::numeric_limits<float>::signaling_NaN())
+-#endif
+- {
+- if (IsEquivalent(f, 0.0f, std::numeric_limits<float>::epsilon())) append((Char)'0');
+- else
+- {
+- Char sz[128];
+- FloatToString(f, sz);
+- append(sz + 1);
+- }
+- }
+- else if (f == std::numeric_limits<float>::infinity())
+- { append((Char)'I'); append((Char)'N'); append((Char)'F'); }
+- else if (f == -std::numeric_limits<float>::infinity())
+- { append((Char)'-'); append((Char)'I'); append((Char)'N'); append((Char)'F'); }
+- else
+- { append((Char)'N'); append((Char)'a'); append((Char)'N'); }
++ append((double)f);
+ }
+
+ template <class Char>
+ void FUStringBuilderT<Char>::append(double f)
+ {
+-#ifdef WIN32
+- // use <float.h> _isnan method to detect the .#IND00 NaN.
+- if (f != std::numeric_limits<float>::infinity() && f != -std::numeric_limits<float>::infinity() && f != std::numeric_limits<float>::quiet_NaN() && f != std::numeric_limits<float>::signaling_NaN() && !_isnan(f))
+-#else
+- if (f != std::numeric_limits<float>::infinity() && f != -std::numeric_limits<float>::infinity() && f != std::numeric_limits<float>::quiet_NaN() && f != std::numeric_limits<float>::signaling_NaN())
+-#endif
+- {
+- if (IsEquivalent(f, 0.0, std::numeric_limits<double>::epsilon())) append((Char)'0');
+- else
+- {
+- Char sz[128];
+- FloatToString(f, sz);
+- append(sz + 1);
+- }
++ if (f == -std::numeric_limits<double>::infinity()) {
++ append("-INF");
++ return;
++ } else if (f == std::numeric_limits<double>::infinity()) {
++ append("INF");
++ return;
++ } else if (f != f) {
++ append("NaN");
++ return;
++ } else if (-std::numeric_limits<double>::epsilon() < f && f < std::numeric_limits<double>::epsilon()) {
++ append("0.0E0");
++ return;
+ }
+- else if (f == std::numeric_limits<double>::infinity())
+- { append((Char)'I'); append((Char)'N'); append((Char)'F'); }
+- else if (f == -std::numeric_limits<double>::infinity())
+- { append((Char)'-'); append((Char)'I'); append((Char)'N'); append((Char)'F'); }
++
++ if (f < 0.0) {
++ f = -f;
++ append('-');
++ }
++
++ int e = 0;
++// e = floor(log10(f));
++// f = f / pow(10.0, e);
++
++ if (f < 1.0)
++ for (; f < 1.0; f *= 10.0)
++ e--;
+ else
+- { append((Char)'N'); append((Char)'a'); append((Char)'N'); }
++ for (; f >= 10.0; f /= 10.0)
++ e++;
++
++ char tmp[10];
++ sprintf(tmp, "%.6g", f);
++ append(tmp);
++ if (tmp[1] == 0) // only one digit, add missing part according canonical representation
++ append(".0");
++
++ sprintf(tmp, "E%d", e);
++ append(tmp);
+ }
+
+ template <class Char>
diff --git a/games/0ad/files/patch-libraries_source_fcollada_src_Makefile b/games/0ad/files/patch-libraries_source_fcollada_src_Makefile
new file mode 100644
index 000000000000..5221789a8bcb
--- /dev/null
+++ b/games/0ad/files/patch-libraries_source_fcollada_src_Makefile
@@ -0,0 +1,11 @@
+--- libraries/source/fcollada/src/Makefile.orig 2019-04-26 13:27:39 UTC
++++ libraries/source/fcollada/src/Makefile
+@@ -227,7 +227,7 @@ OBJECTS_ALL = $(OBJECTS_DEBUG) $(OBJECTS_RELEASE) $(OB
+ all: output/libFColladaSD.a output/libFColladaSR.a install
+
+ output_dirs:
+- bash -c 'mkdir -p output/{debug,release,test}/{FCollada/{FCDocument,FMath,FUtils,FColladaTest/{FCTestAssetManagement,FCTestExportImport,FCTestXRef}},FColladaPlugins/FArchiveXML}'
++ for x in debug release test; do for y in FCDocument FMath FUtils FColladaTest; do for z in FCTestAssetManagement FCTestExportImport FCTestXRef; do mkdir -p output/$$x/FCollada/$$y/$$z; done; done; mkdir -p output/$$x/FColladaPlugins/FArchiveXML; done
+
+ test: FCollada/FColladaTest/ output/FColladaTest
+ ( cd FCollada/FColladaTest/ ; ../../output/FColladaTest )
diff --git a/games/0ad/files/patch-libraries_source_spidermonkey_FixpsutilFreeBSD.diff b/games/0ad/files/patch-libraries_source_spidermonkey_FixpsutilFreeBSD.diff
new file mode 100644
index 000000000000..78701a995867
--- /dev/null
+++ b/games/0ad/files/patch-libraries_source_spidermonkey_FixpsutilFreeBSD.diff
@@ -0,0 +1,168 @@
+--- libraries/source/spidermonkey/FixpsutilFreeBSD.diff.orig 2017-09-13 00:10:27 UTC
++++ libraries/source/spidermonkey/FixpsutilFreeBSD.diff
+@@ -1,6 +1,6 @@
+---- python/psutil/psutil/_psutil_bsd.c
+-+++ python/psutil/psutil/_psutil_bsd.c
+-@@ -957,11 +957,19 @@ psutil_sockaddr_matches(int family, int port, void *pc
++--- ./python/psutil/psutil/_psutil_bsd.c.orig 2015-09-17 22:12:23.000000000 +0200
+++++ ./python/psutil/psutil/_psutil_bsd.c
++@@ -957,11 +957,19 @@
+ psutil_sockaddr_addrlen(family)) == 0);
+ }
+
+@@ -20,7 +20,7 @@
+ struct xinpgen *xig, *oxig;
+ struct xsocket *so;
+
+-@@ -969,9 +977,15 @@ psutil_search_tcplist(char *buf, struct kinfo_file *ki
++@@ -969,9 +977,15 @@
+ for (xig = (struct xinpgen *)((char *)xig + xig->xig_len);
+ xig->xig_len > sizeof(struct xinpgen);
+ xig = (struct xinpgen *)((char *)xig + xig->xig_len)) {
+@@ -36,7 +36,44 @@
+
+ if (so->so_type != kif->kf_sock_type ||
+ so->xso_family != kif->kf_sock_domain ||
+-@@ -1019,7 +1033,11 @@ psutil_proc_connections(PyObject *self, PyObject *args
++@@ -981,20 +995,36 @@
++ if (kif->kf_sock_domain == AF_INET) {
++ if (!psutil_sockaddr_matches(
++ AF_INET, inp->inp_lport, &inp->inp_laddr,
+++#if __FreeBSD_version < 1200031
++ &kif->kf_sa_local))
+++#else
+++ &kif->kf_un.kf_sock.kf_sa_local))
+++#endif
++ continue;
++ if (!psutil_sockaddr_matches(
++ AF_INET, inp->inp_fport, &inp->inp_faddr,
+++#if __FreeBSD_version < 1200031
++ &kif->kf_sa_peer))
+++#else
+++ &kif->kf_un.kf_sock.kf_sa_peer))
+++#endif
++ continue;
++ } else {
++ if (!psutil_sockaddr_matches(
++ AF_INET6, inp->inp_lport, &inp->in6p_laddr,
+++#if __FreeBSD_version < 1200031
++ &kif->kf_sa_local))
+++#else
+++ &kif->kf_un.kf_sock.kf_sa_peer))
+++#endif
++ continue;
++ if (!psutil_sockaddr_matches(
++ AF_INET6, inp->inp_fport, &inp->in6p_faddr,
+++#if __FreeBSD_version < 1200031
++ &kif->kf_sa_peer))
+++#else
+++ &kif->kf_un.kf_sock.kf_sa_peer))
+++#endif
++ continue;
++ }
++
++@@ -1019,7 +1049,11 @@
+ struct kinfo_file *freep = NULL;
+ struct kinfo_file *kif;
+ char *tcplist = NULL;
+@@ -48,3 +85,100 @@
+
+ PyObject *retList = PyList_New(0);
+ PyObject *tuple = NULL;
++@@ -1094,19 +1128,35 @@
++ inet_ntop(
++ kif->kf_sock_domain,
++ psutil_sockaddr_addr(kif->kf_sock_domain,
+++#if __FreeBSD_version < 1200031
++ &kif->kf_sa_local),
+++#else
+++ &kif->kf_un.kf_sock.kf_sa_local),
+++#endif
++ lip,
++ sizeof(lip));
++ inet_ntop(
++ kif->kf_sock_domain,
++ psutil_sockaddr_addr(kif->kf_sock_domain,
+++#if __FreeBSD_version < 1200031
++ &kif->kf_sa_peer),
+++#else
+++ &kif->kf_un.kf_sock.kf_sa_peer),
+++#endif
++ rip,
++ sizeof(rip));
++ lport = htons(psutil_sockaddr_port(kif->kf_sock_domain,
+++#if __FreeBSD_version < 1200031
++ &kif->kf_sa_local));
+++#else
+++ &kif->kf_un.kf_sock.kf_sa_local));
+++#endif
++ rport = htons(psutil_sockaddr_port(kif->kf_sock_domain,
+++#if __FreeBSD_version < 1200031
++ &kif->kf_sa_peer));
+++#else
+++ &kif->kf_un.kf_sock.kf_sa_peer));
+++#endif
++
++ // construct python tuple/list
++ laddr = Py_BuildValue("(si)", lip, lport);
++@@ -1137,7 +1187,11 @@
++ else if (kif->kf_sock_domain == AF_UNIX) {
++ struct sockaddr_un *sun;
++
+++#if __FreeBSD_version < 1200031
++ sun = (struct sockaddr_un *)&kif->kf_sa_local;
+++#else
+++ sun = (struct sockaddr_un *)&kif->kf_un.kf_sock.kf_sa_local;
+++#endif
++ snprintf(
++ path, sizeof(path), "%.*s",
++ (sun->sun_len - (sizeof(*sun) - sizeof(sun->sun_path))),
++@@ -1779,7 +1833,11 @@
++ struct xinpgen *xig, *exig;
++ struct xinpcb *xip;
++ struct xtcpcb *xtp;
+++#if __FreeBSD_version >= 1200026
+++ struct xinpcb *inp;
+++#else
++ struct inpcb *inp;
+++#endif
++ struct xsocket *so;
++ struct sock *sock;
++ const char *varname;
++@@ -1849,13 +1907,21 @@
++ PyErr_Format(PyExc_RuntimeError, "struct xinpcb size mismatch");
++ goto error;
++ }
+++#if __FreeBSD_version >= 1200026
+++ inp = xip;
+++#else
++ inp = &xip->xi_inp;
+++#endif
++ so = &xip->xi_socket;
++ break;
++ }
++
++ inp = &xtp->xt_inp;
+++#if __FreeBSD_version >= 1200026
+++ so = &xtp->xt_inp.xi_socket;
+++#else
++ so = &xtp->xt_socket;
+++#endif
++ char lip[200], rip[200];
++ int family, lport, rport, pid, status;
++
++@@ -1863,9 +1929,14 @@
++ pid = psutil_get_pid_from_sock(hash);
++ if (pid < 0)
++ continue;
+++
++ lport = ntohs(inp->inp_lport);
++ rport = ntohs(inp->inp_fport);
+++#if __FreeBSD_version >= 1200026
+++ status = xtp->t_state;
+++#else
++ status = xtp->xt_tp.t_state;
+++#endif
++
++ if (inp->inp_vflag & INP_IPV4) {
++ family = AF_INET;
diff --git a/games/0ad/files/patch-libraries_source_spidermonkey_build.sh b/games/0ad/files/patch-libraries_source_spidermonkey_build.sh
new file mode 100644
index 000000000000..661627fc0407
--- /dev/null
+++ b/games/0ad/files/patch-libraries_source_spidermonkey_build.sh
@@ -0,0 +1,17 @@
+--- libraries/source/spidermonkey/build.sh.orig 2016-10-04 15:01:34 UTC
++++ libraries/source/spidermonkey/build.sh
+@@ -96,6 +96,14 @@ cd js/src
+ rm -rf build-debug
+ rm -rf build-release
+
++cp jsnativestack.cpp jsnativestack.cpp.orig
++sed 's/# include <pthread_np.h>/#pragma GCC visibility push(default)\
++#include <pthread_np.h>\
++#pragma GCC visibility pop/' jsnativestack.cpp.orig >jsnativestack.cpp
++
++cp configure configure.orig
++sed -e 's/"$ac_cv_have_visibility_class_bug" = "no"; then/"$ac_cv_have_visibility_class_bug" = "no" -a "$OS_ARCH" != "FreeBSD" ; then/' -e 's/-Werror=conversion-null//' configure.orig >configure
++
+ # We want separate debug/release versions of the library, so we have to change
+ # the LIBRARY_NAME for each build.
+ # (We use perl instead of sed so that it works with MozillaBuild on Windows,
diff --git a/games/0ad/files/patch-source_lib_allocators_page__aligned.cpp b/games/0ad/files/patch-source_lib_allocators_page__aligned.cpp
new file mode 100644
index 000000000000..87d3081a43e7
--- /dev/null
+++ b/games/0ad/files/patch-source_lib_allocators_page__aligned.cpp
@@ -0,0 +1,20 @@
+--- source/lib/allocators/page_aligned.cpp.orig 2017-07-28 19:57:26 UTC
++++ source/lib/allocators/page_aligned.cpp
+@@ -49,7 +49,7 @@ static const int mmap_flags = MAP_PRIVATE|MAP_ANONYMOU
+ Status mem_Reserve(size_t size, u8** pp)
+ {
+ errno = 0;
+- void* ret = mmap(0, size, PROT_NONE, mmap_flags|MAP_NORESERVE, -1, 0);
++ void* ret = mmap(0, size, PROT_NONE, mmap_flags, -1, 0);
+ *pp = (u8*)ret;
+ return StatusFromMap(ret);
+ }
+@@ -76,7 +76,7 @@ Status mem_Commit(u8* p, size_t size, int prot)
+ Status mem_Decommit(u8* p, size_t size)
+ {
+ errno = 0;
+- void* ret = mmap(p, size, PROT_NONE, mmap_flags|MAP_NORESERVE|MAP_FIXED, -1, 0);
++ void* ret = mmap(p, size, PROT_NONE, mmap_flags|MAP_FIXED, -1, 0);
+ return StatusFromMap(ret);
+ }
+
diff --git a/games/0ad/files/patch-source_lib_sysdep_os_unix_uvm.cpp b/games/0ad/files/patch-source_lib_sysdep_os_unix_uvm.cpp
new file mode 100644
index 000000000000..09152b8501de
--- /dev/null
+++ b/games/0ad/files/patch-source_lib_sysdep_os_unix_uvm.cpp
@@ -0,0 +1,20 @@
+--- source/lib/sysdep/os/unix/uvm.cpp.orig 2017-07-28 19:57:26 UTC
++++ source/lib/sysdep/os/unix/uvm.cpp
+@@ -40,7 +40,7 @@ namespace vm {
+ void* ReserveAddressSpace(size_t size, size_t UNUSED(commitSize), PageType UNUSED(pageType), int UNUSED(prot))
+ {
+ errno = 0;
+- void* p = mmap(0, size, PROT_NONE, mmap_flags|MAP_NORESERVE, -1, 0);
++ void* p = mmap(0, size, PROT_NONE, mmap_flags, -1, 0);
+ if(p == MAP_FAILED)
+ return 0;
+ return p;
+@@ -77,7 +77,7 @@ bool Commit(uintptr_t address, size_t size, PageType U
+ bool Decommit(uintptr_t address, size_t size)
+ {
+ errno = 0;
+- if(mmap((void*)address, size, PROT_NONE, mmap_flags|MAP_NORESERVE|MAP_FIXED, -1, 0) == MAP_FAILED)
++ if(mmap((void*)address, size, PROT_NONE, mmap_flags|MAP_FIXED, -1, 0) == MAP_FAILED)
+ return false;
+ return true;
+ }
diff --git a/games/0ad/files/patch-source_tools_atlas_AtlasObject_AtlasObjectImpl.cpp b/games/0ad/files/patch-source_tools_atlas_AtlasObject_AtlasObjectImpl.cpp
new file mode 100644
index 000000000000..b67f4c71c6e6
--- /dev/null
+++ b/games/0ad/files/patch-source_tools_atlas_AtlasObject_AtlasObjectImpl.cpp
@@ -0,0 +1,30 @@
+--- source/tools/atlas/AtlasObject/AtlasObjectImpl.cpp.orig 2016-11-23 14:09:58 UTC
++++ source/tools/atlas/AtlasObject/AtlasObjectImpl.cpp
+@@ -164,7 +164,12 @@ void AtObj::add(const char* key, AtObj& data)
+
+ void AtObj::add(const char* key, const wxString& value)
+ {
+- add(key, value.wc_str());
++ const AtNode* o = new AtNode(value.wc_str());
++
++ if (!p)
++ p = new AtNode();
++
++ p = p->addChild(key, AtNode::Ptr(o));
+ }
+
+ void AtObj::add(const char* key, const wchar_t* value)
+@@ -187,7 +192,12 @@ void AtObj::set(const char* key, AtObj& data)
+
+ void AtObj::set(const char* key, const wxString& value)
+ {
+- set(key, value.wc_str());
++ const AtNode* o = new AtNode(value.wc_str());
++
++ if (!p)
++ p = new AtNode();
++
++ p = p->setChild(key, AtNode::Ptr(o));
+ }
+
+ void AtObj::set(const char* key, const wchar_t* value)
diff --git a/games/0ad/files/patch-source_tools_atlas_AtlasUI_CustomControls_MapDialog_MapDialog.cpp b/games/0ad/files/patch-source_tools_atlas_AtlasUI_CustomControls_MapDialog_MapDialog.cpp
new file mode 100644
index 000000000000..d9653b27468f
--- /dev/null
+++ b/games/0ad/files/patch-source_tools_atlas_AtlasUI_CustomControls_MapDialog_MapDialog.cpp
@@ -0,0 +1,34 @@
+--- source/tools/atlas/AtlasUI/CustomControls/MapDialog/MapDialog.cpp.orig 2018-03-13 20:26:30 UTC
++++ source/tools/atlas/AtlasUI/CustomControls/MapDialog/MapDialog.cpp
+@@ -166,11 +166,11 @@ void MapDialog::OnListBox(wxCommandEvent& evt)
+ else
+ {
+ wxString filePath = GetSelectedFilePath();
+- AtlasMessage::qVFSFileExists qry(filePath.wc_str());
++ AtlasMessage::qVFSFileExists qry(filePath.ToStdWstring());
+ qry.Post();
+ if (!filePath.IsEmpty() && qry.exists)
+ {
+- AtlasMessage::qVFSFileRealPath qry(filePath.wc_str());
++ AtlasMessage::qVFSFileRealPath qry(filePath.ToStdWstring());
+ qry.Post();
+ wxDynamicCast(FindWindow(ID_MapDialogFilename), wxTextCtrl)->ChangeValue(*qry.realPath);
+ }
+@@ -221,7 +221,7 @@ void MapDialog::OpenFile()
+ if (filePath.empty())
+ return;
+
+- AtlasMessage::qVFSFileExists qry(filePath.wc_str());
++ AtlasMessage::qVFSFileExists qry(filePath.ToStdWstring());
+ qry.Post();
+ if (!qry.exists)
+ return;
+@@ -236,7 +236,7 @@ void MapDialog::SaveFile()
+ return;
+
+ // TODO: this test would work better outside the VFS
+- AtlasMessage::qVFSFileExists qry(filePath.wc_str());
++ AtlasMessage::qVFSFileExists qry(filePath.ToStdWstring());
+ qry.Post();
+ if (qry.exists)
+ {
diff --git a/games/0ad/files/patch-source_tools_atlas_AtlasUI_ScenarioEditor_ScenarioEditor.cpp b/games/0ad/files/patch-source_tools_atlas_AtlasUI_ScenarioEditor_ScenarioEditor.cpp
new file mode 100644
index 000000000000..4b1b88917a8c
--- /dev/null
+++ b/games/0ad/files/patch-source_tools_atlas_AtlasUI_ScenarioEditor_ScenarioEditor.cpp
@@ -0,0 +1,56 @@
+--- source/tools/atlas/AtlasUI/ScenarioEditor/ScenarioEditor.cpp.orig 2018-03-13 20:20:45 UTC
++++ source/tools/atlas/AtlasUI/ScenarioEditor/ScenarioEditor.cpp
+@@ -723,7 +723,7 @@ bool ScenarioEditor::OpenFile(const wxString& name, co
+ wxBusyInfo busy(_("Loading ") + name);
+ wxBusyCursor busyc;
+
+- AtlasMessage::qVFSFileExists qry(filename.wc_str());
++ AtlasMessage::qVFSFileExists qry(filename.ToStdWstring());
+ qry.Post();
+ if (!qry.exists)
+ return false;
+@@ -733,7 +733,7 @@ bool ScenarioEditor::OpenFile(const wxString& name, co
+ m_ToolManager.SetCurrentTool(_T(""));
+ // TODO: clear the undo buffer, etc
+
+- std::wstring map(filename.wc_str());
++ std::wstring map(filename.ToStdWstring());
+ POST_MESSAGE(LoadMap, (map));
+
+ SetOpenFilename(name);
+@@ -786,7 +786,7 @@ void ScenarioEditor::OnImportHeightmap(wxCommandEvent&
+
+ OpenFile(_T(""), _T("maps/scenarios/_default.xml"));
+
+- std::wstring image(dlg.GetPath().wc_str());
++ std::wstring image(dlg.GetPath().ToStdWstring());
+ POST_MESSAGE(ImportHeightmap, (image));
+
+ // TODO: Make this a non-undoable command
+@@ -830,7 +830,7 @@ void ScenarioEditor::OnSave(wxCommandEvent& event)
+ // the preview units.)
+ m_ToolManager.SetCurrentTool(_T(""));
+
+- std::wstring map(m_OpenFilename.wc_str());
++ std::wstring map(m_OpenFilename.ToStdWstring());
+ POST_MESSAGE(SaveMap, (map));
+
+ // Wait for it to finish saving
+@@ -852,7 +852,7 @@ void ScenarioEditor::OnSaveAs(wxCommandEvent& WXUNUSED
+
+ m_ToolManager.SetCurrentTool(_T(""));
+
+- std::wstring map(filePath.wc_str());
++ std::wstring map(filePath.ToStdWstring());
+ POST_MESSAGE(SaveMap, (map));
+
+ SetOpenFilename(filePath);
+@@ -920,7 +920,7 @@ void ScenarioEditor::OnJavaScript(wxCommandEvent& WXUN
+ wxString cmd = ::wxGetTextFromUser(_T(""), _("JS command"), _T(""), this);
+ if (cmd.IsEmpty())
+ return;
+- POST_MESSAGE(JavaScript, ((std::wstring)cmd.wc_str()));
++ POST_MESSAGE(JavaScript, ((std::wstring)cmd.ToStdWstring()));
+ }
+
+ void ScenarioEditor::OnCameraReset(wxCommandEvent& WXUNUSED(event))
diff --git a/games/0ad/pkg-descr b/games/0ad/pkg-descr
new file mode 100644
index 000000000000..948039bd24f9
--- /dev/null
+++ b/games/0ad/pkg-descr
@@ -0,0 +1,16 @@
+0 A.D. (pronounced "zero ey-dee") is a free, open-source, cross-platform
+real-time strategy (RTS) game of ancient warfare. In short, it is
+a historically-based war/economy game that allows players to relive
+or rewrite the history of Western civilizations, focusing on the
+years between 500 B.C. and 500 A.D. The project is highly ambitious,
+involving state-of-the-art 3D graphics, detailed artwork, sound,
+and a flexible and powerful custom-built game engine.
+
+The game has been in development by Wildfire Games (WFG), a group
+of volunteer, hobbyist game developers, since 2001. The code and
+data are available under the GPL license, and the art, sound and
+documentation are available under CC-BY-SA. In short, we consider
+0 A.D. an educational celebration of game development and ancient
+history.
+
+WWW: https://play0ad.com/
diff --git a/games/0ad/pkg-plist b/games/0ad/pkg-plist
new file mode 100644
index 000000000000..75d3e4e5b2c5
--- /dev/null
+++ b/games/0ad/pkg-plist
@@ -0,0 +1,12 @@
+bin/pyrogenesis
+bin/0ad
+bin/ActorEditor
+lib/0ad/libAtlasUI.so
+lib/0ad/libCollada.so
+lib/0ad/libmozjs38-ps-release.so
+lib/0ad/libnvcore.so
+lib/0ad/libnvimage.so
+lib/0ad/libnvmath.so
+lib/0ad/libnvtt.so
+share/applications/0ad.desktop
+share/pixmaps/0ad.png
diff --git a/games/Makefile b/games/Makefile
index 46bb221398c8..f13fa6103bd4 100644
--- a/games/Makefile
+++ b/games/Makefile
@@ -3,6 +3,7 @@
COMMENT = Games and related software
+ SUBDIR += 0ad
SUBDIR += 0verkill
SUBDIR += 2048
SUBDIR += 2048-qt
@@ -183,6 +184,7 @@
SUBDIR += d2x
SUBDIR += dMagnetic
SUBDIR += dangen
+ SUBDIR += dangerdeep
SUBDIR += dangerdeep-data
SUBDIR += darkplaces
SUBDIR += defendguin
@@ -289,6 +291,7 @@
SUBDIR += freeminer
SUBDIR += freeminer-default
SUBDIR += freeorion
+ SUBDIR += freera
SUBDIR += freesweep
SUBDIR += freesynd
SUBDIR += freetennis
@@ -316,6 +319,7 @@
SUBDIR += glest-data
SUBDIR += glightoff
SUBDIR += glmaze
+ SUBDIR += glob2
SUBDIR += glsfcave
SUBDIR += gltron
SUBDIR += gmastermind
@@ -589,6 +593,7 @@
SUBDIR += mancala
SUBDIR += mangband
SUBDIR += mari0
+ SUBDIR += marsnomercy
SUBDIR += masterserver
SUBDIR += maxr
SUBDIR += meandmyshadow
@@ -637,6 +642,7 @@
SUBDIR += nethack36
SUBDIR += nethack36-nox11
SUBDIR += netherearth
+ SUBDIR += netpanzer
SUBDIR += netradiant
SUBDIR += netrek-BRMH-bin
SUBDIR += netrek-client-cow
@@ -739,6 +745,7 @@
SUBDIR += phlipple
SUBDIR += picmi
SUBDIR += pinball
+ SUBDIR += pingus
SUBDIR += pink-pony
SUBDIR += pioneer
SUBDIR += pioneers
@@ -821,6 +828,7 @@
SUBDIR += redorblack
SUBDIR += regoth
SUBDIR += reminiscence
+ SUBDIR += renpy
SUBDIR += rescue
SUBDIR += residualvm
SUBDIR += retroarch
diff --git a/games/dangerdeep/Makefile b/games/dangerdeep/Makefile
new file mode 100644
index 000000000000..b8250b4c9282
--- /dev/null
+++ b/games/dangerdeep/Makefile
@@ -0,0 +1,56 @@
+# Created by: Jose Alonso Cardenas Marquez <acardenas@bsd.org.pe>
+# $FreeBSD$
+
+PORTNAME= dangerdeep
+PORTVERSION= 0.3.0
+PORTREVISION= 15
+CATEGORIES= games
+MASTER_SITES= SF/${PORTNAME}/danger_from_the_deep-src/${PORTVERSION}
+DIST_SUBDIR= ${PORTNAME}
+
+MAINTAINER= ports@FreeBSD.org
+COMMENT= Open source World War II German submarine simulation
+
+LIB_DEPENDS= libfftw3.so:math/fftw3
+RUN_DEPENDS= dangerdeep-data>0:games/dangerdeep-data
+
+USES= compiler gl scons:python2 sdl
+USE_GL= yes
+USE_SDL= sdl mixer image net
+
+CXXFLAGS+= ${CXXFLAGS_${CHOSEN_COMPILER_TYPE}}
+CXXFLAGS_clang= -Wno-c++11-narrowing
+MAKE_ARGS= installbindir=${PREFIX}/bin installdatadir=${DATADIR}
+MAKE_ENV= X11BASE=${LOCALBASE}
+
+PLIST_FILES= bin/dangerdeep bin/crosssection bin/damagemodel \
+ bin/oceantest bin/portal bin/viewmodel \
+ man/man6/dangerdeep.6.gz
+
+PORTDOCS= CREDITS README
+
+OPTIONS_DEFINE= DOCS
+
+.include <bsd.port.pre.mk>
+
+.if defined(PACKAGE_BUILDING)
+MAKE_ARGS+= usex86sse=-1 # disable MMX/SSE on the build cluster
+.endif
+
+post-patch:
+ @${REINPLACE_CMD} -e 's|/usr/share/games/dangerdeep|${DATADIR}|; \
+ s|Linux|"Danger from the Deep"|' ${WRKSRC}/doc/man/dangerdeep.6
+ @${REINPLACE_CMD} -e 's|/usr/X11BASE|${LOCALBASE}|g' \
+ ${WRKSRC}/SConstruct
+
+do-install:
+ @cd ${WRKSRC}/build/freebsd && \
+ ${INSTALL_PROGRAM} dangerdeep crosssection damagemodel oceantest \
+ portal viewmodel ${STAGEDIR}${PREFIX}/bin
+
+ ${INSTALL_MAN} ${WRKSRC}/doc/man/dangerdeep.6 ${STAGEDIR}${PREFIX}/man/man6
+ ${GZIP_CMD} ${STAGEDIR}${PREFIX}/man/man6/dangerdeep.6
+ ${MKDIR} ${STAGEDIR}${DOCSDIR}
+ ${INSTALL_DATA} ${PORTDOCS:S|^|${WRKSRC}/|} ${STAGEDIR}${DOCSDIR}
+
+.include <bsd.port.post.mk>
diff --git a/games/dangerdeep/distinfo b/games/dangerdeep/distinfo
new file mode 100644
index 000000000000..c89dfb7286ee
--- /dev/null
+++ b/games/dangerdeep/distinfo
@@ -0,0 +1,2 @@
+SHA256 (dangerdeep/dangerdeep-0.3.0.tar.gz) = bdab6b9b1c2b5f8e618f5c346965ec1f48c9edc9bff1d4f5ff7c8d235464283f
+SIZE (dangerdeep/dangerdeep-0.3.0.tar.gz) = 1100972
diff --git a/games/dangerdeep/files/patch-SConstruct b/games/dangerdeep/files/patch-SConstruct
new file mode 100644
index 000000000000..b64410a3f260
--- /dev/null
+++ b/games/dangerdeep/files/patch-SConstruct
@@ -0,0 +1,104 @@
+--- SConstruct.orig 2007-06-11 18:29:13 UTC
++++ SConstruct
+@@ -46,7 +46,7 @@ if sys.platform == 'win32':
+ env.Append(CPPDEFINES = ['USE_SSE'])
+ print 'Using x86 SSE/MMX optimizations with GCC intrinsics.'
+ datadir = './data' # use slashes as separator always. C/C++ want it so.
+- build_dir = 'win32'
++ variant_dir = 'win32'
+ elif sys.platform == 'darwin':
+ print "Compiling for MacOSX"
+ env = Environment(ENV = os.environ)
+@@ -57,12 +57,12 @@ elif sys.platform == 'darwin':
+ env.Append(CCFLAGS = '-Wall -g -O2 `sdl-config --cflags`')
+ env.Append(LINKFLAGS = '-F/System/Library/Frameworks -framework AGL -framework OpenGL -framework GLUT -framework Cocoa -framework SDL -framework SDL_image -framework SDL_mixer -framework SDL_net')
+ datadir = './data' # use slashes as separator always. C/C++ want it so.
+- build_dir = 'macosx'
++ variant_dir = 'macosx'
+ osspecificsrc = Split("""Mac/SDLMain.m""")
+ if (debug == 1):
+ env.Append(CCFLAGS = '-g')
+ env.Append(CPPDEFINES = ['DEBUG'])
+-elif (sys.platform == 'freebsd5') or (sys.platform == 'freebsd6') or (sys.platform == 'freebsd7'):
++elif sys.platform.startswith('freebsd'):
+ print "Compiling for FreeBSD Environment"
+ env = Environment(ENV = os.environ)
+ LOCALBASE = os.environ['LOCALBASE']
+@@ -70,7 +70,7 @@ elif (sys.platform == 'freebsd5') or (sys.platform ==
+ SDL_CONFIG = os.environ['SDL_CONFIG']
+ env.Replace(CC = os.environ['CC'])
+ env.Replace(CXX = os.environ['CXX'])
+- env.Append(CPPPATH = [LOCALBASE + '/include', LOCALBASE + '/include/SDL11', X11BASE + '/include', X11BASE + '/include/GL'])
++ env.Append(CPPPATH = [LOCALBASE + '/include', LOCALBASE + '/include/SDL', X11BASE + '/include', X11BASE + '/include/GL'])
+ libpath = [LOCALBASE + '/lib', X11BASE + '/lib']
+ gllibs = ['GL', 'GLU']
+ sdllibs = ['SDL_image']
+@@ -79,7 +79,7 @@ elif (sys.platform == 'freebsd5') or (sys.platform ==
+ cpuinfol = cpuinfof.readlines()
+ mmxsupported = False
+ ssesupported = False
+- for i in cpuinfol:
++ for i in cpuinfol:
+ if i == '1\n':
+ mmxsupported = True
+ ssesupported = True
+@@ -91,14 +91,15 @@ elif (sys.platform == 'freebsd5') or (sys.platform ==
+ osspecificsrc += []
+ print 'Using x86 SSE/MMX optimizations.'
+
+- env.Replace(CCFLAGS = os.environ['CFLAGS'])
++ env.Replace(CCFLAGS = os.environ['CFLAGS'])
+ if (debug == 1):
+ env.Append(CCFLAGS = '-g')
+ env.Append(CPPDEFINES = ['DEBUG'])
+- env.Replace(CXXFLAGS = os.environ['CXXFLAGS'] + ' `' + SDL_CONFIG + ' --cflags`')
+- env.Append(LINKFLAGS = '`' + SDL_CONFIG + ' --libs`')
+- datadir = '/usr/local/share/dangerdeep'
+- build_dir = 'freebsd'
++ env.Replace(CXXFLAGS = os.environ['CXXFLAGS'] + ' `' + SDL_CONFIG + ' --cflags`')
++ env.Append(LINKFLAGS = '`' + SDL_CONFIG + ' --libs`')
++ env.Append(LIBPATH = [LOCALBASE + '/lib', X11BASE + '/lib'])
++ datadir = '/usr/local/share/dangerdeep'
++ variant_dir = 'freebsd'
+
+ if (os.system('grep glBindProgram ' + X11BASE + '/include/GL/gl*.h > /dev/null') == 0):
+ gllibdirs = [X11BASE + '/lib/', '/usr/lib/', LOCALBASE + '/lib/']
+@@ -179,7 +180,7 @@ else:
+ print 'Using x86 SSE/MMX optimizations with GCC intrinsics.'
+ env.Append(CCFLAGS = ccflags)
+ datadir = '/usr/local/share/dangerdeep'
+- build_dir = 'linux'
++ variant_dir = 'linux'
+ # check for broken libGL, ignore undefined symbols then
+ if (os.system('grep glBindProgram /usr/include/GL/gl*.h > /dev/null') == 0):
+ gllibdirs = ['/usr/X11R6/lib/', '/usr/lib/', '/usr/local/lib/']
+@@ -208,7 +209,7 @@ if ARGUMENTS.get('installbindir', 0):
+ print 'Install binary path: ' + installbindir
+ print 'Using data dir: ' + datadir
+
+-target_dir = '#build' + os.sep + build_dir
++target_dir = '#build' + os.sep + variant_dir
+ source_base_dir = 'src'
+
+ ################ configure
+@@ -273,9 +274,9 @@ f.close()
+
+ Export('env', 'gfxlibs', 'alllibs', 'installbindir', 'datadir', 'version', 'osspecificsrc')
+
+-SConscript(source_base_dir + os.sep + 'SConscript', build_dir = target_dir, duplicate = 0)
++SConscript(source_base_dir + os.sep + 'SConscript', variant_dir = target_dir, duplicate = 0)
+
+-BuildDir(target_dir, source_base_dir, duplicate=0)
++VariantDir(target_dir, source_base_dir, duplicate=0)
+
+ ############### Helper functions
+ def findCVS(basedir):
+@@ -304,7 +305,7 @@ def findCVS(basedir):
+
+ ############### option so that "scons tarball" builds a tarball of source
+ # tar building works only on linux
+-if (( build_dir == 'linux' ) or ( build_dir == 'freebsd' )) and (os.path.isdir('./CVS')):
++if (( variant_dir == 'linux' ) or ( variant_dir == 'freebsd' )) and (os.path.isdir('./CVS')):
+ basetarfilename = 'dangerdeep-' + version
+ os.system('rm -rf ' + basetarfilename)
+ os.system('ln -s . ' + basetarfilename)
diff --git a/games/dangerdeep/files/patch-src__condvar.h b/games/dangerdeep/files/patch-src__condvar.h
new file mode 100644
index 000000000000..06f52b5bea5f
--- /dev/null
+++ b/games/dangerdeep/files/patch-src__condvar.h
@@ -0,0 +1,18 @@
+--- ./src/condvar.h.orig 2007-06-11 11:16:23.000000000 -0400
++++ ./src/condvar.h 2014-08-11 09:56:15.000000000 -0400
+@@ -43,13 +43,13 @@
+
+ /// wait on condition
+ ///@param m - mutex to encapsulate waiting condition
+- void wait(mutex& m);
++ void wait(::mutex& m);
+
+ /// wait on condition with timeout
+ ///@param m - mutex to encapsulate waiting condition
+ ///@param ms - timeout value in milliseconds
+ ///@return true when woken up by signal, false on timeout
+- bool timed_wait(mutex& m, unsigned ms);
++ bool timed_wait(::mutex& m, unsigned ms);
+
+ /// send signal to threads that are waiting on the condition.
+ ///@note Note that before sending the signal you must make the condition false that would
diff --git a/games/dangerdeep/files/patch-src__faulthandler.h b/games/dangerdeep/files/patch-src__faulthandler.h
new file mode 100644
index 000000000000..ee8b4ab008d8
--- /dev/null
+++ b/games/dangerdeep/files/patch-src__faulthandler.h
@@ -0,0 +1,10 @@
+--- ./src/faulthandler.h.orig 2007-06-11 14:29:30.000000000 -0400
++++ ./src/faulthandler.h 2014-08-11 10:17:47.000000000 -0400
+@@ -46,6 +46,7 @@
+ #include <execinfo.h>
+ #include <stdio.h>
+ #include <stdlib.h>
++#include <unistd.h>
+ #include <cxxabi.h> // Needed for __cxa_demangle
+ #include <signal.h>
+ #include <string>
diff --git a/games/dangerdeep/files/patch-src__mutex.h b/games/dangerdeep/files/patch-src__mutex.h
new file mode 100644
index 000000000000..e769fdb33b8d
--- /dev/null
+++ b/games/dangerdeep/files/patch-src__mutex.h
@@ -0,0 +1,20 @@
+--- ./src/mutex.h.orig 2007-06-11 11:16:23.000000000 -0400
++++ ./src/mutex.h 2014-08-11 09:59:15.000000000 -0400
+@@ -58,7 +58,7 @@
+ class mutex_locker
+ {
+ protected:
+- mutex& mymutex;
++ ::mutex& mymutex;
+ private:
+ mutex_locker();
+ mutex_locker(const mutex_locker& );
+@@ -67,7 +67,7 @@
+ /// create mutex locker
+ ///@param mtx - mutex to lock
+ ///@note will instantly lock the mutex that was given as parameter
+- mutex_locker(mutex& mtx) : mymutex(mtx) { mymutex.lock(); }
++ mutex_locker(::mutex& mtx) : mymutex(mtx) { mymutex.lock(); }
+
+ /// destroy mutex locker
+ ///@note will unlock the mutex that was given to the constructor
diff --git a/games/dangerdeep/files/patch-src__subsim.cpp b/games/dangerdeep/files/patch-src__subsim.cpp
new file mode 100644
index 000000000000..e8155a51c6a4
--- /dev/null
+++ b/games/dangerdeep/files/patch-src__subsim.cpp
@@ -0,0 +1,19 @@
+--- src/subsim.cpp.orig 2007-06-11 15:16:23 UTC
++++ src/subsim.cpp
+@@ -31,6 +31,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ #else
+ #include "oglext/OglExt.h"
+ #endif
++#include <unistd.h>
+ #include <glu.h>
+ #include <SDL.h>
+ #include <SDL_net.h>
+@@ -1735,7 +1736,7 @@ int mymain(list<string>& args)
+ glEnable(GL_LIGHT0);
+
+ // create and start thread for music handling.
+- thread::auto_ptr<music> mmusic(new music(use_sound));
++ ::thread::auto_ptr<music> mmusic(new music(use_sound));
+ mmusic->start();
+
+ reset_loading_screen();
diff --git a/games/dangerdeep/files/patch-src__thread.h b/games/dangerdeep/files/patch-src__thread.h
new file mode 100644
index 000000000000..ece066ec7311
--- /dev/null
+++ b/games/dangerdeep/files/patch-src__thread.h
@@ -0,0 +1,19 @@
+--- ./src/thread.h.orig 2007-06-11 11:16:23.000000000 -0400
++++ ./src/thread.h 2014-08-11 10:14:00.000000000 -0400
+@@ -25,6 +25,7 @@
+
+ #include "condvar.h"
+ #include <stdexcept>
++#include <string>
+ #include <stdint.h>
+
+ /// base class for threads.
+@@ -47,7 +48,7 @@
+ struct SDL_Thread* thread_id;
+ bool thread_abort_request;
+ thread_state_t thread_state;
+- mutex thread_state_mutex;
++ ::mutex thread_state_mutex;
+ condvar thread_start_cond;
+ std::string thread_error_message; // to pass exception texts via thread boundaries
+
diff --git a/games/dangerdeep/files/patch-src_coastmap.h b/games/dangerdeep/files/patch-src_coastmap.h
new file mode 100644
index 000000000000..b71f6a5a6517
--- /dev/null
+++ b/games/dangerdeep/files/patch-src_coastmap.h
@@ -0,0 +1,20 @@
+--- src/coastmap.h.orig 2020-03-29 09:04:12 UTC
++++ src/coastmap.h
+@@ -151,7 +151,7 @@ class coastmap
+ void process_coastline(int x, int y);
+ void process_segment(int x, int y);
+
+- class worker : public thread
++ class worker : public ::thread
+ {
+ coastmap& cm;
+ public:
+@@ -163,7 +163,7 @@ class coastmap
+ }
+ };
+
+- thread::auto_ptr<worker> myworker;
++ ::thread::auto_ptr<worker> myworker;
+ void construction_threaded();
+
+ public:
diff --git a/games/dangerdeep/files/patch-src_shader.cpp b/games/dangerdeep/files/patch-src_shader.cpp
new file mode 100644
index 000000000000..77a90990d7a9
--- /dev/null
+++ b/games/dangerdeep/files/patch-src_shader.cpp
@@ -0,0 +1,26 @@
+compiling failed, log:
+0:2(1): preprocessor error: #version must appear on the first line
+
+--- src/shader.cpp.orig 2020-03-29 17:02:18 UTC
++++ src/shader.cpp
+@@ -74,6 +74,8 @@ glsl_shader::glsl_shader(const string& filename, type
+ // the program as string
+ string prg;
+
++ prg += "#version 110\n";
++
+ // add defines to top of list for preprocessor
+ for (defines_list::const_iterator it = dl.begin(); it != dl.end(); ++it) {
+ prg += string("#define ") + *it + "\n";
+@@ -83,7 +85,10 @@ glsl_shader::glsl_shader(const string& filename, type
+ while (!ifprg.eof()) {
+ string s;
+ getline(ifprg, s);
+- prg += s + "\n";
++ string prefix("#version");
++ if (0 != s.compare(0, prefix.size(), prefix)) {
++ prg += s + "\n";
++ }
+ }
+
+ const char* prg_cstr = prg.c_str();
diff --git a/games/dangerdeep/pkg-descr b/games/dangerdeep/pkg-descr
new file mode 100644
index 000000000000..5d14b30a85b7
--- /dev/null
+++ b/games/dangerdeep/pkg-descr
@@ -0,0 +1,6 @@
+Danger from the deep (aka dangerdeep) is a Free / Open Source World War II
+German submarine simulation. It is currently available for FreeBSD, Linux/i386
+and Windows, but since it uses SDL/OpenGL it should be portable to other
+operating systems or platforms.
+
+WWW: http://dangerdeep.sourceforge.net/
diff --git a/games/freera/Makefile b/games/freera/Makefile
new file mode 100644
index 000000000000..1d5b5a62a984
--- /dev/null
+++ b/games/freera/Makefile
@@ -0,0 +1,41 @@
+# Created by: Dmitry Marakasov <amdmi3@amdmi3.ru>
+# $FreeBSD$
+
+PORTNAME= freera
+PORTVERSION= 080203
+PORTREVISION= 8
+CATEGORIES= games
+MASTER_SITES= SF/${PORTNAME}/${PORTVERSION}%20${PORTNAME}%2B%2B/0.47%20beta
+DISTNAME= ${PORTVERSION}_freera++_src
+
+MAINTAINER= amdmi3@FreeBSD.org
+COMMENT= Westwood red alert game engine
+
+LICENSE= GPLv2
+LICENSE_FILE= ${WRKSRC}/doc/gpl.txt
+
+USES= compiler:c++11-lang scons:python2 sdl
+USE_SDL= sdl mixer
+
+WRKSRC= ${WRKDIR}/freera++
+
+SUB_FILES= pkg-message
+
+PLIST_FILES= bin/${PORTNAME}
+PORTDATA= *
+PLIST_DIRS= %%DATADIR%%/mix
+
+post-patch:
+ @${MV} ${WRKSRC}/SConstruct ${WRKSRC}/SConstruct.orig
+ @${CP} ${FILESDIR}/SConstruct ${WRKSRC}/
+ @${REINPLACE_CMD} -e 's|data/|${DATADIR}/|' ${WRKSRC}/src/video/renderer.cpp \
+ ${WRKSRC}/src/video/graphicsengine.cpp ${WRKSRC}/src/vfs/vfs.cpp \
+ ${WRKSRC}/data/settings/files.ini
+ @${RM} ${WRKSRC}/data/settings/files.ini.bak
+ @${RM} -r ${WRKSRC}/data/settings/ra/.svn ${WRKSRC}/data/settings/td/.svn
+
+do-install:
+ ${INSTALL_PROGRAM} ${WRKSRC}/freera ${STAGEDIR}${PREFIX}/bin/
+ @cd ${WRKSRC}/data && ${COPYTREE_SHARE} . ${STAGEDIR}${DATADIR}/
+
+.include <bsd.port.mk>
diff --git a/games/freera/distinfo b/games/freera/distinfo
new file mode 100644
index 000000000000..3f5358bd54f8
--- /dev/null
+++ b/games/freera/distinfo
@@ -0,0 +1,2 @@
+SHA256 (080203_freera++_src.tar.gz) = dc75ebcf58398170614a21fa01f09d08f7ef86758473e1c815a680c713c9645e
+SIZE (080203_freera++_src.tar.gz) = 492205
diff --git a/games/freera/files/SConstruct b/games/freera/files/SConstruct
new file mode 100644
index 000000000000..38790806b03e
--- /dev/null
+++ b/games/freera/files/SConstruct
@@ -0,0 +1,27 @@
+#!/usr/bin/scons
+
+from os import environ
+from glob import glob
+
+# Source files
+source = ["src/freera.cpp"]
+source += glob("src/*/*.cpp")
+source += glob("src/*/*/*.cpp")
+source += glob("src/lua/*.c")
+# This is blatent overkill
+exclude = ["src/misc/fibheap.cpp"]
+source = filter(lambda x: x not in exclude, source)
+
+env = Environment( CPPPATH = ["#/src/include", "#/src/include/lua"],
+ LIBS = [ "SDL_mixer"], ENV = environ )
+
+for key in [ 'CC', 'CCFLAGS', 'CXX', 'CXXFLAGS' ]:
+ if environ.has_key(key):
+ env.Replace( **{key: environ[key].split(' ')} )
+
+env.Append( CCFLAGS = [ "-Wall", "-Wconversion", "-Wno-unused-parameter" ],
+ CXXFLAGS = [ "-Wall", "-Wconversion", "-Wno-unused-parameter" ] )
+
+env.ParseConfig(environ["SDL_CONFIG"] + " --cflags --libs")
+
+env.Program(target = "freera", source = source)
diff --git a/games/freera/files/patch-src-freera.cpp b/games/freera/files/patch-src-freera.cpp
new file mode 100644
index 000000000000..3ce38d29bb3f
--- /dev/null
+++ b/games/freera/files/patch-src-freera.cpp
@@ -0,0 +1,13 @@
+--- src/freera.cpp.orig 2007-04-20 00:35:26.000000000 +0400
++++ src/freera.cpp 2008-02-05 02:42:33.000000000 +0300
+@@ -58,8 +58,8 @@
+ }
+
+ const string& binpath = determineBinaryLocation(argv[0]);
+- string lf(binpath);
+- lf += "/freera.log";
++ string lf(getenv("HOME"));
++ lf += "/.freera.log";
+
+ VFS_PreInit(binpath.c_str());
+ // Log level is so that only errors are shown on stdout by default
diff --git a/games/freera/files/patch-src_game_loadmap.cpp b/games/freera/files/patch-src_game_loadmap.cpp
new file mode 100644
index 000000000000..c5366d63581b
--- /dev/null
+++ b/games/freera/files/patch-src_game_loadmap.cpp
@@ -0,0 +1,11 @@
+--- src/game/loadmap.cpp.orig 2008-01-30 22:37:44 UTC
++++ src/game/loadmap.cpp
+@@ -63,7 +63,7 @@ std::ostringstream TempString;
+ throw LoadMapError();
+ }
+
+- if (missionData.player != '\0')
++ if (missionData.player != nullptr)
+ printf ("%s line %i: Player = %s\n", __FILE__, __LINE__, missionData.player);
+
+ if (gamemode == GAME_MODE_SINGLE_PLAYER){
diff --git a/games/freera/files/pkg-message.in b/games/freera/files/pkg-message.in
new file mode 100644
index 000000000000..92960a8aa224
--- /dev/null
+++ b/games/freera/files/pkg-message.in
@@ -0,0 +1,14 @@
+[
+{ type: install
+ message: <<EOM
+FreeRA requires original .mix files from Red Alert. Copy those files from
+Red Alert CD's to %%DATADIR%%/mix/ directory:
+
+ main.mix
+ redalert.mix
+
+PS. Both files can be found on either Red Alert CD. Both CDs have the
+ maps for both campaigns but only the videos for one.
+EOM
+}
+]
diff --git a/games/freera/pkg-descr b/games/freera/pkg-descr
new file mode 100644
index 000000000000..f12fb4807b7f
--- /dev/null
+++ b/games/freera/pkg-descr
@@ -0,0 +1,6 @@
+This is a rebuild of the (westwood) red alert game engine (based
+on FreeCNC). It is a real time strategy game. To play the game with
+this engine you need the original game (mix files). The only game
+supported is red alert 1 ;)
+
+WWW: http://freera.sourceforge.net/
diff --git a/games/glob2/Makefile b/games/glob2/Makefile
new file mode 100644
index 000000000000..0cd514a64b7e
--- /dev/null
+++ b/games/glob2/Makefile
@@ -0,0 +1,80 @@
+# Created by: thierry@pompo.net
+# $FreeBSD$
+
+PORTNAME= glob2
+PORTVERSION= 0.9.4.4
+PORTREVISION= 29
+CATEGORIES= games
+MASTER_SITES= SAVANNAH/${PORTNAME}/${PORTVERSION:R}/
+
+MAINTAINER= ports@FreeBSD.org
+COMMENT= Globulation 2, free and innovative strategy game
+
+LICENSE= GPLv3+
+LICENSE_FILE= ${WRKSRC}/COPYING
+
+LIB_DEPENDS= libvorbis.so:audio/libvorbis \
+ libspeex.so:audio/speex \
+ libfribidi.so:converters/fribidi \
+ libboost_thread.so:devel/boost-libs \
+ libfreetype.so:print/freetype2
+
+OPTIONS_DEFINE= DOCS PORTAUDIO
+
+USES= compiler:c++11-lang gl gnome pkgconfig scons:python2 sdl
+USE_SDL= image net sdl ttf
+USE_GL= gl glu
+MAKE_ARGS= CCFLAGS="${CFLAGS}" \
+ LINKFLAGS="${LDFLAGS}" \
+ BINDIR="${STAGEDIR}${PREFIX}/bin" \
+ INSTALLDIR="${STAGEDIR}${PREFIX}/share" \
+ DATADIR="${DATADIR}"
+INSTALLS_ICONS= yes
+
+CFLAGS+= -I${LOCALBASE}/include -Wno-return-type
+LDFLAGS+= -lpthread -L${LOCALBASE}/lib
+
+PORTDOCS= README
+SUB_FILES= pkg-message
+
+.include <bsd.port.options.mk>
+
+.if ${PORT_OPTIONS:MPORTAUDIO}
+LIB_DEPENDS+= libportaudio.so:audio/portaudio
+MAKE_ARGS+= --portaudio=true
+.else
+MAKE_ARGS+= --portaudio=false
+.endif
+
+pre-configure:
+ ${REINPLACE_CMD} -e \
+ 's|"-g"|""|' \
+ ${WRKSRC}/SConstruct
+ ${REINPLACE_CMD} -e \
+ '/^Icon/s|=.*|=${PORTNAME}|' \
+ ${WRKSRC}/data/${PORTNAME}.desktop
+ ${REINPLACE_CMD} -e \
+ '/(PACKAGE_SOURCE_DIR)/s|^|//|' \
+ ${WRKSRC}/libgag/src/FileManager.cpp
+
+manual-regression-test:
+# Don't enable these tests on pointyhat, they take too long.
+.if defined(MAINTAINER_MODE)
+ (cd ${WRKSRC}/src && ./glob2 -test-games)
+.else
+ (cd ${WRKSRC}/src && ./glob2 -test-games-nox)
+.endif
+
+post-install:
+.for s in 16 24 32 48 64 128
+ ${MKDIR} ${STAGEDIR}${PREFIX}/share/icons/hicolor/${s}x${s}/apps
+ (cd ${WRKSRC}/data/icons && ${INSTALL_DATA} glob2-icon-${s}x${s}.png \
+ ${STAGEDIR}${PREFIX}/share/icons/hicolor/${s}x${s}/apps/${PORTNAME}.png)
+.endfor
+ ${RLN} ${STAGEDIR}${PREFIX}/share/icons/hicolor/48x48/apps/${PORTNAME}.png \
+ ${STAGEDIR}${PREFIX}/share/pixmaps
+ ${MKDIR} ${STAGEDIR}${DOCSDIR}
+ (cd ${WRKSRC} && ${INSTALL_DATA} README ${STAGEDIR}${DOCSDIR})
+ ${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/glob2
+
+.include <bsd.port.mk>
diff --git a/games/glob2/distinfo b/games/glob2/distinfo
new file mode 100644
index 000000000000..aad6c9c01af7
--- /dev/null
+++ b/games/glob2/distinfo
@@ -0,0 +1,2 @@
+SHA256 (glob2-0.9.4.4.tar.gz) = 0f4d898ec6b05ce27b4a12ef242cc26571304b90d2509932a4743c71311314b8
+SIZE (glob2-0.9.4.4.tar.gz) = 11338986
diff --git a/games/glob2/files/patch-SConstruct b/games/glob2/files/patch-SConstruct
new file mode 100644
index 000000000000..4e8789ee9234
--- /dev/null
+++ b/games/glob2/files/patch-SConstruct
@@ -0,0 +1,84 @@
+--- SConstruct.orig 2009-08-30 19:23:30 UTC
++++ SConstruct
+@@ -12,9 +12,11 @@ isLinuxPlatform = sys.platform=='linux2'
+ isDarwinPlatform = sys.platform=='darwin'
+
+
+-def establish_options(env):
+- opts = Options('options_cache.py')
++def establish_variables(env):
++ opts = Variables('variables_cache.py')
++ opts.Add("CCFLAGS", "Manually add to the CCFLAGS", "")
+ opts.Add("CXXFLAGS", "Manually add to the CXXFLAGS", "-g")
++ opts.Add("LIBPATH", "Manually add to the LIBPATH", "")
+ opts.Add("LINKFLAGS", "Manually add to the LINKFLAGS", "-g")
+ if isDarwinPlatform:
+ opts.Add(PathOption("INSTALLDIR", "Installation Directory", "./"))
+@@ -22,14 +24,14 @@ def establish_options(env):
+ opts.Add("INSTALLDIR", "Installation Directory", "/usr/local/share")
+ opts.Add("BINDIR", "Binary Installation Directory", "/usr/local/bin")
+ opts.Add("DATADIR", "Directory where data will be put, set to the same as INSTALLDIR", "/usr/local/share")
+- opts.Add(BoolOption("release", "Build for release", 0))
+- opts.Add(BoolOption("profile", "Build with profiling on", 0))
+- opts.Add(BoolOption("mingw", "Build with mingw enabled if not auto-detected", 0))
+- opts.Add(BoolOption("server", "Build only the YOG server, excluding the game and any GUI/sound components", 0))
++ opts.Add(BoolVariable("release", "Build for release", 0))
++ opts.Add(BoolVariable("profile", "Build with profiling on", 0))
++ opts.Add(BoolVariable("mingw", "Build with mingw enabled if not auto-detected", 0))
++ opts.Add(BoolVariable("server", "Build only the YOG server, excluding the game and any GUI/sound components", 0))
+ opts.Add("font", "Build the game using an alternative font placed in the data/font folder", "sans.ttf")
+ Help(opts.GenerateHelpText(env))
+ opts.Update(env)
+- opts.Save("options_cache.py", env)
++ opts.Save("variables_cache.py", env)
+
+
+ class Configuration:
+@@ -111,14 +113,17 @@ def configure(env):
+ missing.append("zlib")
+
+ boost_thread = ''
++ boost_system = ''
+ if conf.CheckLib("boost_thread") and conf.CheckCXXHeader("boost/thread/thread.hpp"):
+ boost_thread="boost_thread"
++ boost_system="boost_system"
+ elif conf.CheckLib("boost_thread-mt") and conf.CheckCXXHeader("boost/thread/thread.hpp"):
+ boost_thread="boost_thread-mt"
+ else:
+ print "Could not find libboost_thread or libboost_thread-mt or boost/thread/thread.hpp"
+ missing.append("libboost_thread")
+ env.Append(LIBS=[boost_thread])
++ env.Append(LIBS=[boost_system])
+
+ boost_date_time = ''
+ if conf.CheckLib("boost_date_time") and conf.CheckCXXHeader("boost/date_time/posix_time/posix_time.hpp"):
+@@ -186,7 +191,7 @@ def configure(env):
+ env.Append(LIBS=['fribidi'])
+
+ #Do checks for portaudio
+- if conf.CheckLib('portaudio') and conf.CheckCXXHeader('portaudio.h'):
++ if conf.CheckLib('portaudio2') and conf.CheckCXXHeader('portaudio.h'):
+ if env['mingw'] or isWindowsPlatform:
+ print "--------"
+ print "NOTE: It appears you are compiling under Windows. At this stage, PortAudio crashes Globulation 2 when voice chat is used."
+@@ -194,9 +199,9 @@ def configure(env):
+ print "--------"
+ else:
+ if GetOption('portaudio'):
+- print "trying to use portaudio"
++ print "trying to use portaudio2"
+ configfile.add("HAVE_PORTAUDIO ", "Defined when Port Audio support is present and compiled")
+- env.Append(LIBS=['portaudio'])
++ env.Append(LIBS=['portaudio2'])
+ else:
+ print " no portaudio"
+ print " no portaudio - although portaudio was found to be installed, you have "
+@@ -236,7 +241,7 @@ def main():
+ Exit(1)
+
+ env["VERSION"] = "0.9.4.4"
+- establish_options(env)
++ establish_variables(env)
+ #Add the paths to important mingw libraries
+ if env['mingw'] or isWindowsPlatform:
+ env.Append(LIBPATH=["C:/msys/1.0/local/lib", "C:/msys/1.0/lib"])
diff --git a/games/glob2/files/patch-boost-1.69 b/games/glob2/files/patch-boost-1.69
new file mode 100644
index 000000000000..2b12ddb3dbac
--- /dev/null
+++ b/games/glob2/files/patch-boost-1.69
@@ -0,0 +1,17 @@
+After https://github.com/boostorg/logic/commit/23cd89d4c80f build fails:
+
+src/AIEcho.cpp:4390:9: error: no viable conversion from returned value of type 'boost::logic::tribool' to function return type 'bool'
+ return is_end!=rhs.is_end || team!=rhs.team || building_type!=rhs.building_type || level!=rhs.level || construction_site!=rhs.construction_site;
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+--- src/AIEcho.cpp.orig 2009-08-29 20:39:05 UTC
++++ src/AIEcho.cpp
+@@ -4387,7 +4387,7 @@ bool enemy_building_iterator::operator!=(const enemy_b
+ {
+ if(is_end && rhs.is_end)
+ return false;
+- return is_end!=rhs.is_end || team!=rhs.team || building_type!=rhs.building_type || level!=rhs.level || construction_site!=rhs.construction_site;
++ return bool(is_end!=rhs.is_end || team!=rhs.team || building_type!=rhs.building_type || level!=rhs.level || construction_site!=rhs.construction_site);
+ }
+
+
diff --git a/games/glob2/files/patch-data__SConscript b/games/glob2/files/patch-data__SConscript
new file mode 100644
index 000000000000..3959d9adf2c6
--- /dev/null
+++ b/games/glob2/files/patch-data__SConscript
@@ -0,0 +1,9 @@
+--- ./data/SConscript.orig 2009-06-14 12:11:30.000000000 +0200
++++ ./data/SConscript 2013-10-28 01:26:26.000000000 +0100
+@@ -19,6 +19,5 @@
+ SConscript("fonts/SConscript")
+ SConscript("gfx/SConscript")
+ SConscript("gui/SConscript")
+-SConscript("icons/SConscript")
+ SConscript("zik/SConscript")
+
diff --git a/games/glob2/files/patch-src_EditorMainMenu.cpp b/games/glob2/files/patch-src_EditorMainMenu.cpp
new file mode 100644
index 000000000000..da8b9a3ba5a0
--- /dev/null
+++ b/games/glob2/files/patch-src_EditorMainMenu.cpp
@@ -0,0 +1,11 @@
+--- src/EditorMainMenu.cpp.orig 2018-08-26 04:04:18 UTC
++++ src/EditorMainMenu.cpp
+@@ -90,7 +90,7 @@ void EditorMainMenu::onAction(Widget *source, Action a
+ }
+ else if (par1==LOADMAP)
+ {
+- ChooseMapScreen chooseMapScreen("maps", "map", false, "games", "game", false);
++ ChooseMapScreen chooseMapScreen("maps", "map", false, "games", "game", NULL);
+ int rc=chooseMapScreen.execute(globalContainer->gfx, 40);
+ if (rc==ChooseMapScreen::OK)
+ {
diff --git a/games/glob2/files/patch-src_LANMenuScreen.cpp b/games/glob2/files/patch-src_LANMenuScreen.cpp
new file mode 100644
index 000000000000..95e4513fe79b
--- /dev/null
+++ b/games/glob2/files/patch-src_LANMenuScreen.cpp
@@ -0,0 +1,11 @@
+--- src/LANMenuScreen.cpp.orig 2018-08-26 04:11:03 UTC
++++ src/LANMenuScreen.cpp
+@@ -62,7 +62,7 @@ void LANMenuScreen::onAction(Widget *source, Action ac
+ }
+ else if(par1 == HOST)
+ {
+- ChooseMapScreen cms("maps", "map", false, "games", "game", false);
++ ChooseMapScreen cms("maps", "map", false, "games", "game", NULL);
+ int rc = cms.execute(globalContainer->gfx, 40);
+ if(rc == ChooseMapScreen::OK)
+ {
diff --git a/games/glob2/files/patch-src_YOGClientLobbyScreen.cpp b/games/glob2/files/patch-src_YOGClientLobbyScreen.cpp
new file mode 100644
index 000000000000..9d03f470e21f
--- /dev/null
+++ b/games/glob2/files/patch-src_YOGClientLobbyScreen.cpp
@@ -0,0 +1,11 @@
+--- src/YOGClientLobbyScreen.cpp.orig 2018-08-26 04:08:24 UTC
++++ src/YOGClientLobbyScreen.cpp
+@@ -326,7 +326,7 @@ void YOGClientLobbyScreen::playerListUpdated()
+
+ void YOGClientLobbyScreen::hostGame()
+ {
+- ChooseMapScreen cms("maps", "map", false, "games", "game", false);
++ ChooseMapScreen cms("maps", "map", false, "games", "game", NULL);
+ int rc = cms.execute(globalContainer->gfx, 40);
+ if(rc == ChooseMapScreen::OK)
+ {
diff --git a/games/glob2/files/patch-src__ConfigFiles.h b/games/glob2/files/patch-src__ConfigFiles.h
new file mode 100644
index 000000000000..8f1c30ca2069
--- /dev/null
+++ b/games/glob2/files/patch-src__ConfigFiles.h
@@ -0,0 +1,15 @@
+--- ./src/ConfigFiles.h.orig 2009-06-14 12:11:34.000000000 +0200
++++ ./src/ConfigFiles.h 2013-10-28 01:26:26.000000000 +0100
+@@ -178,7 +178,11 @@
+ else
+ {
+ std::cerr << "ConfigVector::get(" << static_cast<unsigned int>(id) << ") : warning : id is not valid, returning default" << std::endl;
+- assert(false);
++ // FreeBSD: patch impoted from glob2's CVS
++ // assert(false);
++ // I commented the assert because it crashed glob2
++ // sometimes, when a building was repaired.
++ // This has to be really fixed!
+ return &defaultEntry;
+ }
+ }
diff --git a/games/glob2/files/patch-src__Game.h b/games/glob2/files/patch-src__Game.h
new file mode 100644
index 000000000000..ed710bb7bad6
--- /dev/null
+++ b/games/glob2/files/patch-src__Game.h
@@ -0,0 +1,36 @@
+--- src/Game.h.orig
++++ src/Game.h
+@@ -82,6 +82,16 @@
+ DRAW_OVERLAY = 0x100,
+ };
+
++ struct BuildProject
++ {
++ int posX;
++ int posY;
++ int teamNumber;
++ int typeNum;
++ int unitWorking;
++ int unitWorkingFuture;
++ };
++
+ /// This method will prepare the game with this mapHeader
+ void setMapHeader(const MapHeader& mapHeader);
+
+@@ -149,16 +159,6 @@
+ BOTTOM_TO_TOP
+ };
+
+- struct BuildProject
+- {
+- int posX;
+- int posY;
+- int teamNumber;
+- int typeNum;
+- int unitWorking;
+- int unitWorkingFuture;
+- };
+-
+ ///Initiates Game
+ void init(GameGUI *gui, MapEdit* edit);
+
diff --git a/games/glob2/files/pkg-message.in b/games/glob2/files/pkg-message.in
new file mode 100644
index 000000000000..95b6f098faac
--- /dev/null
+++ b/games/glob2/files/pkg-message.in
@@ -0,0 +1,20 @@
+[
+{ type: install
+ message: <<EOM
+Globulation 2 has been installed.
+
+You can try to launch it typing
+
+ glob2
+
+Anyway, it will not always work, so it is suggested that you type
+
+ glob2 --help
+
+and read about command lines arguments.
+
+Try to use -G option if you have problems with dri and glx (OpenGL),
+or -m if you have problems with sound, or -C to disable custom cursor.
+EOM
+}
+]
diff --git a/games/glob2/pkg-descr b/games/glob2/pkg-descr
new file mode 100644
index 000000000000..371eb74a2c24
--- /dev/null
+++ b/games/glob2/pkg-descr
@@ -0,0 +1,12 @@
+Globulation 2 is an innovative high quality Real-Time Strategy [RTS],
+which minimizes micro-management by automatically assigning tasks to
+the units. The player has to choose the number of units he wants for
+the different tasks, and the units will do their best to satisfy the
+requests. This allows to manage more units and to focus on the strategy.
+
+It can be played alone, through your Local Area Network [LAN], or through
+Internet thanks to Ysagoon Online Game [YOG], a meta-server. It also
+features a scripting language for versatile gameplay or tutorials and an
+integrated map editor.
+
+WWW: http://globulation2.org/
diff --git a/games/glob2/pkg-plist b/games/glob2/pkg-plist
new file mode 100644
index 000000000000..f3772c10391d
--- /dev/null
+++ b/games/glob2/pkg-plist
@@ -0,0 +1,1746 @@
+bin/glob2
+share/applications/glob2.desktop
+%%DATADIR%%/campaigns/Tutorial_Campaign.txt
+%%DATADIR%%/campaigns/tutorial-part1.map
+%%DATADIR%%/campaigns/tutorial-part2.map
+%%DATADIR%%/campaigns/tutorial-part3.map
+%%DATADIR%%/campaigns/tutorial-part4.map
+%%DATADIR%%/data/authors.txt
+%%DATADIR%%/data/buildings.default.txt
+%%DATADIR%%/data/buildings.txt
+%%DATADIR%%/data/fonts/sans.ttf
+%%DATADIR%%/data/gfx/IntroMN.png
+%%DATADIR%%/data/gfx/area0.png
+%%DATADIR%%/data/gfx/area1.png
+%%DATADIR%%/data/gfx/area10.png
+%%DATADIR%%/data/gfx/area11.png
+%%DATADIR%%/data/gfx/area12.png
+%%DATADIR%%/data/gfx/area13.png
+%%DATADIR%%/data/gfx/area14.png
+%%DATADIR%%/data/gfx/area15.png
+%%DATADIR%%/data/gfx/area16.png
+%%DATADIR%%/data/gfx/area17.png
+%%DATADIR%%/data/gfx/area18.png
+%%DATADIR%%/data/gfx/area19.png
+%%DATADIR%%/data/gfx/area2.png
+%%DATADIR%%/data/gfx/area20.png
+%%DATADIR%%/data/gfx/area21.png
+%%DATADIR%%/data/gfx/area22.png
+%%DATADIR%%/data/gfx/area23.png
+%%DATADIR%%/data/gfx/area3.png
+%%DATADIR%%/data/gfx/area4.png
+%%DATADIR%%/data/gfx/area5.png
+%%DATADIR%%/data/gfx/area6.png
+%%DATADIR%%/data/gfx/area7.png
+%%DATADIR%%/data/gfx/area8.png
+%%DATADIR%%/data/gfx/area9.png
+%%DATADIR%%/data/gfx/barracks0b0.png
+%%DATADIR%%/data/gfx/barracks0b0r.png
+%%DATADIR%%/data/gfx/barracks1b0.png
+%%DATADIR%%/data/gfx/barracks1b0r.png
+%%DATADIR%%/data/gfx/barracks2b0.png
+%%DATADIR%%/data/gfx/barracks2b0r.png
+%%DATADIR%%/data/gfx/black0.png
+%%DATADIR%%/data/gfx/black1.png
+%%DATADIR%%/data/gfx/black10.png
+%%DATADIR%%/data/gfx/black11.png
+%%DATADIR%%/data/gfx/black12.png
+%%DATADIR%%/data/gfx/black13.png
+%%DATADIR%%/data/gfx/black14.png
+%%DATADIR%%/data/gfx/black15.png
+%%DATADIR%%/data/gfx/black2.png
+%%DATADIR%%/data/gfx/black3.png
+%%DATADIR%%/data/gfx/black4.png
+%%DATADIR%%/data/gfx/black5.png
+%%DATADIR%%/data/gfx/black6.png
+%%DATADIR%%/data/gfx/black7.png
+%%DATADIR%%/data/gfx/black8.png
+%%DATADIR%%/data/gfx/black9.png
+%%DATADIR%%/data/gfx/brush0.png
+%%DATADIR%%/data/gfx/brush1.png
+%%DATADIR%%/data/gfx/brush2.png
+%%DATADIR%%/data/gfx/brush3.png
+%%DATADIR%%/data/gfx/brush4.png
+%%DATADIR%%/data/gfx/brush5.png
+%%DATADIR%%/data/gfx/brush6.png
+%%DATADIR%%/data/gfx/brush7.png
+%%DATADIR%%/data/gfx/brush8.png
+%%DATADIR%%/data/gfx/brush9.png
+%%DATADIR%%/data/gfx/buildingsite0.png
+%%DATADIR%%/data/gfx/buildingsite1.png
+%%DATADIR%%/data/gfx/buildingsite2.png
+%%DATADIR%%/data/gfx/buildingsite3.png
+%%DATADIR%%/data/gfx/buildingsite4.png
+%%DATADIR%%/data/gfx/buildingsite5.png
+%%DATADIR%%/data/gfx/bullet0.png
+%%DATADIR%%/data/gfx/bullet1.png
+%%DATADIR%%/data/gfx/clearingflag0r.png
+%%DATADIR%%/data/gfx/cloud0.png
+%%DATADIR%%/data/gfx/cursor/click0r.png
+%%DATADIR%%/data/gfx/cursor/click1r.png
+%%DATADIR%%/data/gfx/cursor/click2r.png
+%%DATADIR%%/data/gfx/cursor/click3r.png
+%%DATADIR%%/data/gfx/cursor/click4r.png
+%%DATADIR%%/data/gfx/cursor/click5r.png
+%%DATADIR%%/data/gfx/cursor/click6r.png
+%%DATADIR%%/data/gfx/cursor/click7r.png
+%%DATADIR%%/data/gfx/cursor/click8r.png
+%%DATADIR%%/data/gfx/cursor/click9r.png
+%%DATADIR%%/data/gfx/cursor/direction_d0r.png
+%%DATADIR%%/data/gfx/cursor/direction_d10r.png
+%%DATADIR%%/data/gfx/cursor/direction_d11r.png
+%%DATADIR%%/data/gfx/cursor/direction_d12r.png
+%%DATADIR%%/data/gfx/cursor/direction_d13r.png
+%%DATADIR%%/data/gfx/cursor/direction_d14r.png
+%%DATADIR%%/data/gfx/cursor/direction_d15r.png
+%%DATADIR%%/data/gfx/cursor/direction_d16r.png
+%%DATADIR%%/data/gfx/cursor/direction_d17r.png
+%%DATADIR%%/data/gfx/cursor/direction_d18r.png
+%%DATADIR%%/data/gfx/cursor/direction_d19r.png
+%%DATADIR%%/data/gfx/cursor/direction_d1r.png
+%%DATADIR%%/data/gfx/cursor/direction_d2r.png
+%%DATADIR%%/data/gfx/cursor/direction_d3r.png
+%%DATADIR%%/data/gfx/cursor/direction_d4r.png
+%%DATADIR%%/data/gfx/cursor/direction_d5r.png
+%%DATADIR%%/data/gfx/cursor/direction_d6r.png
+%%DATADIR%%/data/gfx/cursor/direction_d7r.png
+%%DATADIR%%/data/gfx/cursor/direction_d8r.png
+%%DATADIR%%/data/gfx/cursor/direction_d9r.png
+%%DATADIR%%/data/gfx/cursor/direction_l0r.png
+%%DATADIR%%/data/gfx/cursor/direction_l10r.png
+%%DATADIR%%/data/gfx/cursor/direction_l11r.png
+%%DATADIR%%/data/gfx/cursor/direction_l12r.png
+%%DATADIR%%/data/gfx/cursor/direction_l13r.png
+%%DATADIR%%/data/gfx/cursor/direction_l14r.png
+%%DATADIR%%/data/gfx/cursor/direction_l15r.png
+%%DATADIR%%/data/gfx/cursor/direction_l16r.png
+%%DATADIR%%/data/gfx/cursor/direction_l17r.png
+%%DATADIR%%/data/gfx/cursor/direction_l18r.png
+%%DATADIR%%/data/gfx/cursor/direction_l19r.png
+%%DATADIR%%/data/gfx/cursor/direction_l1r.png
+%%DATADIR%%/data/gfx/cursor/direction_l2r.png
+%%DATADIR%%/data/gfx/cursor/direction_l3r.png
+%%DATADIR%%/data/gfx/cursor/direction_l4r.png
+%%DATADIR%%/data/gfx/cursor/direction_l5r.png
+%%DATADIR%%/data/gfx/cursor/direction_l6r.png
+%%DATADIR%%/data/gfx/cursor/direction_l7r.png
+%%DATADIR%%/data/gfx/cursor/direction_l8r.png
+%%DATADIR%%/data/gfx/cursor/direction_l9r.png
+%%DATADIR%%/data/gfx/cursor/direction_ld0r.png
+%%DATADIR%%/data/gfx/cursor/direction_ld1r.png
+%%DATADIR%%/data/gfx/cursor/direction_ld2r.png
+%%DATADIR%%/data/gfx/cursor/direction_ld3r.png
+%%DATADIR%%/data/gfx/cursor/direction_ld4r.png
+%%DATADIR%%/data/gfx/cursor/direction_ld5r.png
+%%DATADIR%%/data/gfx/cursor/direction_ld6r.png
+%%DATADIR%%/data/gfx/cursor/direction_ld7r.png
+%%DATADIR%%/data/gfx/cursor/direction_ld8r.png
+%%DATADIR%%/data/gfx/cursor/direction_ld9r.png
+%%DATADIR%%/data/gfx/cursor/direction_lu0r.png
+%%DATADIR%%/data/gfx/cursor/direction_lu1r.png
+%%DATADIR%%/data/gfx/cursor/direction_lu2r.png
+%%DATADIR%%/data/gfx/cursor/direction_lu3r.png
+%%DATADIR%%/data/gfx/cursor/direction_lu4r.png
+%%DATADIR%%/data/gfx/cursor/direction_lu5r.png
+%%DATADIR%%/data/gfx/cursor/direction_lu6r.png
+%%DATADIR%%/data/gfx/cursor/direction_lu7r.png
+%%DATADIR%%/data/gfx/cursor/direction_lu8r.png
+%%DATADIR%%/data/gfx/cursor/direction_lu9r.png
+%%DATADIR%%/data/gfx/cursor/direction_r0r.png
+%%DATADIR%%/data/gfx/cursor/direction_r10r.png
+%%DATADIR%%/data/gfx/cursor/direction_r11r.png
+%%DATADIR%%/data/gfx/cursor/direction_r12r.png
+%%DATADIR%%/data/gfx/cursor/direction_r13r.png
+%%DATADIR%%/data/gfx/cursor/direction_r14r.png
+%%DATADIR%%/data/gfx/cursor/direction_r15r.png
+%%DATADIR%%/data/gfx/cursor/direction_r16r.png
+%%DATADIR%%/data/gfx/cursor/direction_r17r.png
+%%DATADIR%%/data/gfx/cursor/direction_r18r.png
+%%DATADIR%%/data/gfx/cursor/direction_r19r.png
+%%DATADIR%%/data/gfx/cursor/direction_r1r.png
+%%DATADIR%%/data/gfx/cursor/direction_r2r.png
+%%DATADIR%%/data/gfx/cursor/direction_r3r.png
+%%DATADIR%%/data/gfx/cursor/direction_r4r.png
+%%DATADIR%%/data/gfx/cursor/direction_r5r.png
+%%DATADIR%%/data/gfx/cursor/direction_r6r.png
+%%DATADIR%%/data/gfx/cursor/direction_r7r.png
+%%DATADIR%%/data/gfx/cursor/direction_r8r.png
+%%DATADIR%%/data/gfx/cursor/direction_r9r.png
+%%DATADIR%%/data/gfx/cursor/direction_rd0r.png
+%%DATADIR%%/data/gfx/cursor/direction_rd1r.png
+%%DATADIR%%/data/gfx/cursor/direction_rd2r.png
+%%DATADIR%%/data/gfx/cursor/direction_rd3r.png
+%%DATADIR%%/data/gfx/cursor/direction_rd4r.png
+%%DATADIR%%/data/gfx/cursor/direction_rd5r.png
+%%DATADIR%%/data/gfx/cursor/direction_rd6r.png
+%%DATADIR%%/data/gfx/cursor/direction_rd7r.png
+%%DATADIR%%/data/gfx/cursor/direction_rd8r.png
+%%DATADIR%%/data/gfx/cursor/direction_rd9r.png
+%%DATADIR%%/data/gfx/cursor/direction_ru0r.png
+%%DATADIR%%/data/gfx/cursor/direction_ru1r.png
+%%DATADIR%%/data/gfx/cursor/direction_ru2r.png
+%%DATADIR%%/data/gfx/cursor/direction_ru3r.png
+%%DATADIR%%/data/gfx/cursor/direction_ru4r.png
+%%DATADIR%%/data/gfx/cursor/direction_ru5r.png
+%%DATADIR%%/data/gfx/cursor/direction_ru6r.png
+%%DATADIR%%/data/gfx/cursor/direction_ru7r.png
+%%DATADIR%%/data/gfx/cursor/direction_ru8r.png
+%%DATADIR%%/data/gfx/cursor/direction_ru9r.png
+%%DATADIR%%/data/gfx/cursor/direction_u0r.png
+%%DATADIR%%/data/gfx/cursor/direction_u10r.png
+%%DATADIR%%/data/gfx/cursor/direction_u11r.png
+%%DATADIR%%/data/gfx/cursor/direction_u12r.png
+%%DATADIR%%/data/gfx/cursor/direction_u13r.png
+%%DATADIR%%/data/gfx/cursor/direction_u14r.png
+%%DATADIR%%/data/gfx/cursor/direction_u15r.png
+%%DATADIR%%/data/gfx/cursor/direction_u16r.png
+%%DATADIR%%/data/gfx/cursor/direction_u17r.png
+%%DATADIR%%/data/gfx/cursor/direction_u18r.png
+%%DATADIR%%/data/gfx/cursor/direction_u19r.png
+%%DATADIR%%/data/gfx/cursor/direction_u1r.png
+%%DATADIR%%/data/gfx/cursor/direction_u2r.png
+%%DATADIR%%/data/gfx/cursor/direction_u3r.png
+%%DATADIR%%/data/gfx/cursor/direction_u4r.png
+%%DATADIR%%/data/gfx/cursor/direction_u5r.png
+%%DATADIR%%/data/gfx/cursor/direction_u6r.png
+%%DATADIR%%/data/gfx/cursor/direction_u7r.png
+%%DATADIR%%/data/gfx/cursor/direction_u8r.png
+%%DATADIR%%/data/gfx/cursor/direction_u9r.png
+%%DATADIR%%/data/gfx/cursor/mark0r.png
+%%DATADIR%%/data/gfx/cursor/mark10r.png
+%%DATADIR%%/data/gfx/cursor/mark11r.png
+%%DATADIR%%/data/gfx/cursor/mark12r.png
+%%DATADIR%%/data/gfx/cursor/mark13r.png
+%%DATADIR%%/data/gfx/cursor/mark14r.png
+%%DATADIR%%/data/gfx/cursor/mark15r.png
+%%DATADIR%%/data/gfx/cursor/mark16r.png
+%%DATADIR%%/data/gfx/cursor/mark17r.png
+%%DATADIR%%/data/gfx/cursor/mark18r.png
+%%DATADIR%%/data/gfx/cursor/mark19r.png
+%%DATADIR%%/data/gfx/cursor/mark1r.png
+%%DATADIR%%/data/gfx/cursor/mark2r.png
+%%DATADIR%%/data/gfx/cursor/mark3r.png
+%%DATADIR%%/data/gfx/cursor/mark4r.png
+%%DATADIR%%/data/gfx/cursor/mark5r.png
+%%DATADIR%%/data/gfx/cursor/mark6r.png
+%%DATADIR%%/data/gfx/cursor/mark7r.png
+%%DATADIR%%/data/gfx/cursor/mark8r.png
+%%DATADIR%%/data/gfx/cursor/mark9r.png
+%%DATADIR%%/data/gfx/cursor/normal0r.png
+%%DATADIR%%/data/gfx/cursor/normal10r.png
+%%DATADIR%%/data/gfx/cursor/normal11r.png
+%%DATADIR%%/data/gfx/cursor/normal12r.png
+%%DATADIR%%/data/gfx/cursor/normal13r.png
+%%DATADIR%%/data/gfx/cursor/normal14r.png
+%%DATADIR%%/data/gfx/cursor/normal15r.png
+%%DATADIR%%/data/gfx/cursor/normal16r.png
+%%DATADIR%%/data/gfx/cursor/normal17r.png
+%%DATADIR%%/data/gfx/cursor/normal18r.png
+%%DATADIR%%/data/gfx/cursor/normal19r.png
+%%DATADIR%%/data/gfx/cursor/normal1r.png
+%%DATADIR%%/data/gfx/cursor/normal2r.png
+%%DATADIR%%/data/gfx/cursor/normal3r.png
+%%DATADIR%%/data/gfx/cursor/normal4r.png
+%%DATADIR%%/data/gfx/cursor/normal5r.png
+%%DATADIR%%/data/gfx/cursor/normal6r.png
+%%DATADIR%%/data/gfx/cursor/normal7r.png
+%%DATADIR%%/data/gfx/cursor/normal8r.png
+%%DATADIR%%/data/gfx/cursor/normal9r.png
+%%DATADIR%%/data/gfx/cursor/wait0r.png
+%%DATADIR%%/data/gfx/cursor/wait10r.png
+%%DATADIR%%/data/gfx/cursor/wait11r.png
+%%DATADIR%%/data/gfx/cursor/wait12r.png
+%%DATADIR%%/data/gfx/cursor/wait13r.png
+%%DATADIR%%/data/gfx/cursor/wait14r.png
+%%DATADIR%%/data/gfx/cursor/wait15r.png
+%%DATADIR%%/data/gfx/cursor/wait16r.png
+%%DATADIR%%/data/gfx/cursor/wait17r.png
+%%DATADIR%%/data/gfx/cursor/wait18r.png
+%%DATADIR%%/data/gfx/cursor/wait19r.png
+%%DATADIR%%/data/gfx/cursor/wait1r.png
+%%DATADIR%%/data/gfx/cursor/wait2r.png
+%%DATADIR%%/data/gfx/cursor/wait3r.png
+%%DATADIR%%/data/gfx/cursor/wait4r.png
+%%DATADIR%%/data/gfx/cursor/wait5r.png
+%%DATADIR%%/data/gfx/cursor/wait6r.png
+%%DATADIR%%/data/gfx/cursor/wait7r.png
+%%DATADIR%%/data/gfx/cursor/wait8r.png
+%%DATADIR%%/data/gfx/cursor/wait9r.png
+%%DATADIR%%/data/gfx/death0r.png
+%%DATADIR%%/data/gfx/death1r.png
+%%DATADIR%%/data/gfx/death2r.png
+%%DATADIR%%/data/gfx/death3r.png
+%%DATADIR%%/data/gfx/death4r.png
+%%DATADIR%%/data/gfx/death5r.png
+%%DATADIR%%/data/gfx/death6r.png
+%%DATADIR%%/data/gfx/death7r.png
+%%DATADIR%%/data/gfx/death8r.png
+%%DATADIR%%/data/gfx/death9r.png
+%%DATADIR%%/data/gfx/defencetower0b0.png
+%%DATADIR%%/data/gfx/defencetower0b0r.png
+%%DATADIR%%/data/gfx/defencetower1b0.png
+%%DATADIR%%/data/gfx/defencetower1b0r.png
+%%DATADIR%%/data/gfx/defencetower1b1.png
+%%DATADIR%%/data/gfx/defencetower1b1r.png
+%%DATADIR%%/data/gfx/defencetower1b2.png
+%%DATADIR%%/data/gfx/defencetower1b2r.png
+%%DATADIR%%/data/gfx/defencetower2b0.png
+%%DATADIR%%/data/gfx/defencetower2b0r.png
+%%DATADIR%%/data/gfx/explorationflag0r.png
+%%DATADIR%%/data/gfx/explosion0.png
+%%DATADIR%%/data/gfx/explosion1.png
+%%DATADIR%%/data/gfx/explosion2.png
+%%DATADIR%%/data/gfx/explosion3.png
+%%DATADIR%%/data/gfx/explosion4.png
+%%DATADIR%%/data/gfx/explosion5.png
+%%DATADIR%%/data/gfx/gamegui0.png
+%%DATADIR%%/data/gfx/gamegui1.png
+%%DATADIR%%/data/gfx/gamegui10.png
+%%DATADIR%%/data/gfx/gamegui11.png
+%%DATADIR%%/data/gfx/gamegui12.png
+%%DATADIR%%/data/gfx/gamegui13.png
+%%DATADIR%%/data/gfx/gamegui14.png
+%%DATADIR%%/data/gfx/gamegui15.png
+%%DATADIR%%/data/gfx/gamegui16.png
+%%DATADIR%%/data/gfx/gamegui17.png
+%%DATADIR%%/data/gfx/gamegui18.png
+%%DATADIR%%/data/gfx/gamegui19.png
+%%DATADIR%%/data/gfx/gamegui2.png
+%%DATADIR%%/data/gfx/gamegui20.png
+%%DATADIR%%/data/gfx/gamegui21.png
+%%DATADIR%%/data/gfx/gamegui22.png
+%%DATADIR%%/data/gfx/gamegui23.png
+%%DATADIR%%/data/gfx/gamegui24.png
+%%DATADIR%%/data/gfx/gamegui25.png
+%%DATADIR%%/data/gfx/gamegui26.png
+%%DATADIR%%/data/gfx/gamegui27.png
+%%DATADIR%%/data/gfx/gamegui28.png
+%%DATADIR%%/data/gfx/gamegui29.png
+%%DATADIR%%/data/gfx/gamegui3.png
+%%DATADIR%%/data/gfx/gamegui30r.png
+%%DATADIR%%/data/gfx/gamegui31.png
+%%DATADIR%%/data/gfx/gamegui32.png
+%%DATADIR%%/data/gfx/gamegui33.png
+%%DATADIR%%/data/gfx/gamegui34.png
+%%DATADIR%%/data/gfx/gamegui35.png
+%%DATADIR%%/data/gfx/gamegui36.png
+%%DATADIR%%/data/gfx/gamegui37.png
+%%DATADIR%%/data/gfx/gamegui38.png
+%%DATADIR%%/data/gfx/gamegui39.png
+%%DATADIR%%/data/gfx/gamegui4.png
+%%DATADIR%%/data/gfx/gamegui40.png
+%%DATADIR%%/data/gfx/gamegui41.png
+%%DATADIR%%/data/gfx/gamegui42.png
+%%DATADIR%%/data/gfx/gamegui43.png
+%%DATADIR%%/data/gfx/gamegui5.png
+%%DATADIR%%/data/gfx/gamegui6.png
+%%DATADIR%%/data/gfx/gamegui7.png
+%%DATADIR%%/data/gfx/gamegui8.png
+%%DATADIR%%/data/gfx/gamegui9.png
+%%DATADIR%%/data/gfx/guitheme0.png
+%%DATADIR%%/data/gfx/guitheme1.png
+%%DATADIR%%/data/gfx/guitheme10.png
+%%DATADIR%%/data/gfx/guitheme11.png
+%%DATADIR%%/data/gfx/guitheme12.png
+%%DATADIR%%/data/gfx/guitheme13.png
+%%DATADIR%%/data/gfx/guitheme14.png
+%%DATADIR%%/data/gfx/guitheme15.png
+%%DATADIR%%/data/gfx/guitheme16.png
+%%DATADIR%%/data/gfx/guitheme17.png
+%%DATADIR%%/data/gfx/guitheme18.png
+%%DATADIR%%/data/gfx/guitheme19.png
+%%DATADIR%%/data/gfx/guitheme2.png
+%%DATADIR%%/data/gfx/guitheme20.png
+%%DATADIR%%/data/gfx/guitheme21.png
+%%DATADIR%%/data/gfx/guitheme22.png
+%%DATADIR%%/data/gfx/guitheme23.png
+%%DATADIR%%/data/gfx/guitheme24.png
+%%DATADIR%%/data/gfx/guitheme3.png
+%%DATADIR%%/data/gfx/guitheme4.png
+%%DATADIR%%/data/gfx/guitheme5.png
+%%DATADIR%%/data/gfx/guitheme6.png
+%%DATADIR%%/data/gfx/guitheme7.png
+%%DATADIR%%/data/gfx/guitheme8.png
+%%DATADIR%%/data/gfx/guitheme9.png
+%%DATADIR%%/data/gfx/hosp0b0.png
+%%DATADIR%%/data/gfx/hosp0b0r.png
+%%DATADIR%%/data/gfx/hosp0b1.png
+%%DATADIR%%/data/gfx/hosp0c0.png
+%%DATADIR%%/data/gfx/hosp1b0.png
+%%DATADIR%%/data/gfx/hosp1b0r.png
+%%DATADIR%%/data/gfx/hosp1c0.png
+%%DATADIR%%/data/gfx/hosp2b0.png
+%%DATADIR%%/data/gfx/hosp2b0r.png
+%%DATADIR%%/data/gfx/hosp2c0.png
+%%DATADIR%%/data/gfx/image.png
+%%DATADIR%%/data/gfx/inn0b0.png
+%%DATADIR%%/data/gfx/inn0b0r.png
+%%DATADIR%%/data/gfx/inn0b1.png
+%%DATADIR%%/data/gfx/inn0c0.png
+%%DATADIR%%/data/gfx/inn1b0.png
+%%DATADIR%%/data/gfx/inn1b0r.png
+%%DATADIR%%/data/gfx/inn1b1.png
+%%DATADIR%%/data/gfx/inn1b1r.png
+%%DATADIR%%/data/gfx/inn1c0.png
+%%DATADIR%%/data/gfx/inn2b0.png
+%%DATADIR%%/data/gfx/inn2b0r.png
+%%DATADIR%%/data/gfx/inn2c0.png
+%%DATADIR%%/data/gfx/inn3c0.png
+%%DATADIR%%/data/gfx/magiceffect0.png
+%%DATADIR%%/data/gfx/magiceffect0r.png
+%%DATADIR%%/data/gfx/market0b0.png
+%%DATADIR%%/data/gfx/market0b0r.png
+%%DATADIR%%/data/gfx/minibarracks0b0.png
+%%DATADIR%%/data/gfx/minibarracks0b0r.png
+%%DATADIR%%/data/gfx/minibarracks1b0.png
+%%DATADIR%%/data/gfx/minibarracks1b0r.png
+%%DATADIR%%/data/gfx/minibarracks2b0.png
+%%DATADIR%%/data/gfx/minibarracks2b0r.png
+%%DATADIR%%/data/gfx/minibuildingsite0.png
+%%DATADIR%%/data/gfx/minibuildingsite1.png
+%%DATADIR%%/data/gfx/minibuildingsite2.png
+%%DATADIR%%/data/gfx/minibuildingsite3.png
+%%DATADIR%%/data/gfx/minibuildingsite4.png
+%%DATADIR%%/data/gfx/minibuildingsite5.png
+%%DATADIR%%/data/gfx/minidefencetower0b0.png
+%%DATADIR%%/data/gfx/minidefencetower0b0r.png
+%%DATADIR%%/data/gfx/minidefencetower1b0.png
+%%DATADIR%%/data/gfx/minidefencetower1b0r.png
+%%DATADIR%%/data/gfx/minidefencetower2b0.png
+%%DATADIR%%/data/gfx/minidefencetower2b0r.png
+%%DATADIR%%/data/gfx/minihosp0b0.png
+%%DATADIR%%/data/gfx/minihosp0b0r.png
+%%DATADIR%%/data/gfx/minihosp0c0.png
+%%DATADIR%%/data/gfx/minihosp1b0.png
+%%DATADIR%%/data/gfx/minihosp1b0r.png
+%%DATADIR%%/data/gfx/minihosp1c0.png
+%%DATADIR%%/data/gfx/minihosp2b0.png
+%%DATADIR%%/data/gfx/minihosp2b0r.png
+%%DATADIR%%/data/gfx/minihosp2c0.png
+%%DATADIR%%/data/gfx/miniinn0b0.png
+%%DATADIR%%/data/gfx/miniinn0b0r.png
+%%DATADIR%%/data/gfx/miniinn0c0.png
+%%DATADIR%%/data/gfx/miniinn1b0.png
+%%DATADIR%%/data/gfx/miniinn1b0r.png
+%%DATADIR%%/data/gfx/miniinn1c0.png
+%%DATADIR%%/data/gfx/miniinn2b0.png
+%%DATADIR%%/data/gfx/miniinn2b0r.png
+%%DATADIR%%/data/gfx/miniinn2c0.png
+%%DATADIR%%/data/gfx/minimarket0b0.png
+%%DATADIR%%/data/gfx/minimarket0b0r.png
+%%DATADIR%%/data/gfx/minipool0b0.png
+%%DATADIR%%/data/gfx/minipool0b0r.png
+%%DATADIR%%/data/gfx/minipool0c0.png
+%%DATADIR%%/data/gfx/minipool1b0.png
+%%DATADIR%%/data/gfx/minipool1b0r.png
+%%DATADIR%%/data/gfx/minipool2b0.png
+%%DATADIR%%/data/gfx/minipool2b0r.png
+%%DATADIR%%/data/gfx/miniracetrack0b0.png
+%%DATADIR%%/data/gfx/miniracetrack0b0r.png
+%%DATADIR%%/data/gfx/miniracetrack0c0.png
+%%DATADIR%%/data/gfx/miniracetrack0c0r.png
+%%DATADIR%%/data/gfx/miniracetrack1b0.png
+%%DATADIR%%/data/gfx/miniracetrack1b0r.png
+%%DATADIR%%/data/gfx/miniracetrack2b0.png
+%%DATADIR%%/data/gfx/miniracetrack2b0r.png
+%%DATADIR%%/data/gfx/minischool0b0.png
+%%DATADIR%%/data/gfx/minischool1b0.png
+%%DATADIR%%/data/gfx/minischool1b0r.png
+%%DATADIR%%/data/gfx/minischool1c0.png
+%%DATADIR%%/data/gfx/minischool1c0r.png
+%%DATADIR%%/data/gfx/minischool2b0.png
+%%DATADIR%%/data/gfx/minischool2b0r.png
+%%DATADIR%%/data/gfx/miniswarm0b0.png
+%%DATADIR%%/data/gfx/miniswarm0b0r.png
+%%DATADIR%%/data/gfx/miniswarm0c0r.png
+%%DATADIR%%/data/gfx/out.png
+%%DATADIR%%/data/gfx/particle0.png
+%%DATADIR%%/data/gfx/particle0r.png
+%%DATADIR%%/data/gfx/particle1.png
+%%DATADIR%%/data/gfx/particle1r.png
+%%DATADIR%%/data/gfx/particle2.png
+%%DATADIR%%/data/gfx/particle2r.png
+%%DATADIR%%/data/gfx/particle3.png
+%%DATADIR%%/data/gfx/pool0b0.png
+%%DATADIR%%/data/gfx/pool0b0r.png
+%%DATADIR%%/data/gfx/pool0b1.png
+%%DATADIR%%/data/gfx/pool0b1r.png
+%%DATADIR%%/data/gfx/pool0c0.png
+%%DATADIR%%/data/gfx/pool1b0.png
+%%DATADIR%%/data/gfx/pool1b0r.png
+%%DATADIR%%/data/gfx/pool2b0.png
+%%DATADIR%%/data/gfx/pool2b0r.png
+%%DATADIR%%/data/gfx/racetrack0b0.png
+%%DATADIR%%/data/gfx/racetrack0b0r.png
+%%DATADIR%%/data/gfx/racetrack0b1.png
+%%DATADIR%%/data/gfx/racetrack0b1r.png
+%%DATADIR%%/data/gfx/racetrack0b2.png
+%%DATADIR%%/data/gfx/racetrack0b2r.png
+%%DATADIR%%/data/gfx/racetrack0c0.png
+%%DATADIR%%/data/gfx/racetrack0c0r.png
+%%DATADIR%%/data/gfx/racetrack1b0.png
+%%DATADIR%%/data/gfx/racetrack1b0r.png
+%%DATADIR%%/data/gfx/racetrack1b1.png
+%%DATADIR%%/data/gfx/racetrack1b1r.png
+%%DATADIR%%/data/gfx/racetrack1b2.png
+%%DATADIR%%/data/gfx/racetrack1b2r.png
+%%DATADIR%%/data/gfx/racetrack2b0.png
+%%DATADIR%%/data/gfx/racetrack2b0r.png
+%%DATADIR%%/data/gfx/ressource0.png
+%%DATADIR%%/data/gfx/ressource1.png
+%%DATADIR%%/data/gfx/ressource10.png
+%%DATADIR%%/data/gfx/ressource11.png
+%%DATADIR%%/data/gfx/ressource12.png
+%%DATADIR%%/data/gfx/ressource13.png
+%%DATADIR%%/data/gfx/ressource14.png
+%%DATADIR%%/data/gfx/ressource15.png
+%%DATADIR%%/data/gfx/ressource16.png
+%%DATADIR%%/data/gfx/ressource17.png
+%%DATADIR%%/data/gfx/ressource18.png
+%%DATADIR%%/data/gfx/ressource19.png
+%%DATADIR%%/data/gfx/ressource2.png
+%%DATADIR%%/data/gfx/ressource20.png
+%%DATADIR%%/data/gfx/ressource21.png
+%%DATADIR%%/data/gfx/ressource22.png
+%%DATADIR%%/data/gfx/ressource23.png
+%%DATADIR%%/data/gfx/ressource24.png
+%%DATADIR%%/data/gfx/ressource25.png
+%%DATADIR%%/data/gfx/ressource26.png
+%%DATADIR%%/data/gfx/ressource27.png
+%%DATADIR%%/data/gfx/ressource28.png
+%%DATADIR%%/data/gfx/ressource29.png
+%%DATADIR%%/data/gfx/ressource3.png
+%%DATADIR%%/data/gfx/ressource30.png
+%%DATADIR%%/data/gfx/ressource31.png
+%%DATADIR%%/data/gfx/ressource32.png
+%%DATADIR%%/data/gfx/ressource33.png
+%%DATADIR%%/data/gfx/ressource34.png
+%%DATADIR%%/data/gfx/ressource35.png
+%%DATADIR%%/data/gfx/ressource36.png
+%%DATADIR%%/data/gfx/ressource37.png
+%%DATADIR%%/data/gfx/ressource38.png
+%%DATADIR%%/data/gfx/ressource39.png
+%%DATADIR%%/data/gfx/ressource4.png
+%%DATADIR%%/data/gfx/ressource40.png
+%%DATADIR%%/data/gfx/ressource41.png
+%%DATADIR%%/data/gfx/ressource42.png
+%%DATADIR%%/data/gfx/ressource43.png
+%%DATADIR%%/data/gfx/ressource44.png
+%%DATADIR%%/data/gfx/ressource45.png
+%%DATADIR%%/data/gfx/ressource46.png
+%%DATADIR%%/data/gfx/ressource47.png
+%%DATADIR%%/data/gfx/ressource48.png
+%%DATADIR%%/data/gfx/ressource49.png
+%%DATADIR%%/data/gfx/ressource5.png
+%%DATADIR%%/data/gfx/ressource50.png
+%%DATADIR%%/data/gfx/ressource51.png
+%%DATADIR%%/data/gfx/ressource52.png
+%%DATADIR%%/data/gfx/ressource53.png
+%%DATADIR%%/data/gfx/ressource54.png
+%%DATADIR%%/data/gfx/ressource55.png
+%%DATADIR%%/data/gfx/ressource56.png
+%%DATADIR%%/data/gfx/ressource57.png
+%%DATADIR%%/data/gfx/ressource58.png
+%%DATADIR%%/data/gfx/ressource59.png
+%%DATADIR%%/data/gfx/ressource6.png
+%%DATADIR%%/data/gfx/ressource60.png
+%%DATADIR%%/data/gfx/ressource61.png
+%%DATADIR%%/data/gfx/ressource62.png
+%%DATADIR%%/data/gfx/ressource63.png
+%%DATADIR%%/data/gfx/ressource64.png
+%%DATADIR%%/data/gfx/ressource7.png
+%%DATADIR%%/data/gfx/ressource8.png
+%%DATADIR%%/data/gfx/ressource9.png
+%%DATADIR%%/data/gfx/ressourcemini0.png
+%%DATADIR%%/data/gfx/ressourcemini1.png
+%%DATADIR%%/data/gfx/ressourcemini2.png
+%%DATADIR%%/data/gfx/ressourcemini3.png
+%%DATADIR%%/data/gfx/ressourcemini4.png
+%%DATADIR%%/data/gfx/ressourcemini5.png
+%%DATADIR%%/data/gfx/ressourcemini6.png
+%%DATADIR%%/data/gfx/ressourcemini7.png
+%%DATADIR%%/data/gfx/rotatingEarth0.png
+%%DATADIR%%/data/gfx/rotatingEarth1.png
+%%DATADIR%%/data/gfx/rotatingEarth10.png
+%%DATADIR%%/data/gfx/rotatingEarth11.png
+%%DATADIR%%/data/gfx/rotatingEarth12.png
+%%DATADIR%%/data/gfx/rotatingEarth13.png
+%%DATADIR%%/data/gfx/rotatingEarth14.png
+%%DATADIR%%/data/gfx/rotatingEarth15.png
+%%DATADIR%%/data/gfx/rotatingEarth16.png
+%%DATADIR%%/data/gfx/rotatingEarth17.png
+%%DATADIR%%/data/gfx/rotatingEarth18.png
+%%DATADIR%%/data/gfx/rotatingEarth19.png
+%%DATADIR%%/data/gfx/rotatingEarth2.png
+%%DATADIR%%/data/gfx/rotatingEarth3.png
+%%DATADIR%%/data/gfx/rotatingEarth4.png
+%%DATADIR%%/data/gfx/rotatingEarth5.png
+%%DATADIR%%/data/gfx/rotatingEarth6.png
+%%DATADIR%%/data/gfx/rotatingEarth7.png
+%%DATADIR%%/data/gfx/rotatingEarth8.png
+%%DATADIR%%/data/gfx/rotatingEarth9.png
+%%DATADIR%%/data/gfx/rotatingEarthi.png
+%%DATADIR%%/data/gfx/school0b0.png
+%%DATADIR%%/data/gfx/school0b1.png
+%%DATADIR%%/data/gfx/school1b0.png
+%%DATADIR%%/data/gfx/school1b0r.png
+%%DATADIR%%/data/gfx/school1b1.png
+%%DATADIR%%/data/gfx/school1b1r.png
+%%DATADIR%%/data/gfx/school1b2.png
+%%DATADIR%%/data/gfx/school1b2r.png
+%%DATADIR%%/data/gfx/school1c0.png
+%%DATADIR%%/data/gfx/school1c0r.png
+%%DATADIR%%/data/gfx/school2b0.png
+%%DATADIR%%/data/gfx/school2b0r.png
+%%DATADIR%%/data/gfx/shade0.png
+%%DATADIR%%/data/gfx/shade1.png
+%%DATADIR%%/data/gfx/shade10.png
+%%DATADIR%%/data/gfx/shade11.png
+%%DATADIR%%/data/gfx/shade12.png
+%%DATADIR%%/data/gfx/shade13.png
+%%DATADIR%%/data/gfx/shade14.png
+%%DATADIR%%/data/gfx/shade15.png
+%%DATADIR%%/data/gfx/shade16.png
+%%DATADIR%%/data/gfx/shade17.png
+%%DATADIR%%/data/gfx/shade18.png
+%%DATADIR%%/data/gfx/shade19.png
+%%DATADIR%%/data/gfx/shade2.png
+%%DATADIR%%/data/gfx/shade20.png
+%%DATADIR%%/data/gfx/shade3.png
+%%DATADIR%%/data/gfx/shade4.png
+%%DATADIR%%/data/gfx/shade5.png
+%%DATADIR%%/data/gfx/shade6.png
+%%DATADIR%%/data/gfx/shade7.png
+%%DATADIR%%/data/gfx/shade8.png
+%%DATADIR%%/data/gfx/shade9.png
+%%DATADIR%%/data/gfx/swarm0b0.png
+%%DATADIR%%/data/gfx/swarm0b0r.png
+%%DATADIR%%/data/gfx/swarm0c0r.png
+%%DATADIR%%/data/gfx/terrain0.png
+%%DATADIR%%/data/gfx/terrain1.png
+%%DATADIR%%/data/gfx/terrain10.png
+%%DATADIR%%/data/gfx/terrain100.png
+%%DATADIR%%/data/gfx/terrain101.png
+%%DATADIR%%/data/gfx/terrain102.png
+%%DATADIR%%/data/gfx/terrain103.png
+%%DATADIR%%/data/gfx/terrain104.png
+%%DATADIR%%/data/gfx/terrain105.png
+%%DATADIR%%/data/gfx/terrain106.png
+%%DATADIR%%/data/gfx/terrain107.png
+%%DATADIR%%/data/gfx/terrain108.png
+%%DATADIR%%/data/gfx/terrain109.png
+%%DATADIR%%/data/gfx/terrain11.png
+%%DATADIR%%/data/gfx/terrain110.png
+%%DATADIR%%/data/gfx/terrain111.png
+%%DATADIR%%/data/gfx/terrain112.png
+%%DATADIR%%/data/gfx/terrain113.png
+%%DATADIR%%/data/gfx/terrain114.png
+%%DATADIR%%/data/gfx/terrain115.png
+%%DATADIR%%/data/gfx/terrain116.png
+%%DATADIR%%/data/gfx/terrain117.png
+%%DATADIR%%/data/gfx/terrain118.png
+%%DATADIR%%/data/gfx/terrain119.png
+%%DATADIR%%/data/gfx/terrain12.png
+%%DATADIR%%/data/gfx/terrain120.png
+%%DATADIR%%/data/gfx/terrain121.png
+%%DATADIR%%/data/gfx/terrain122.png
+%%DATADIR%%/data/gfx/terrain123.png
+%%DATADIR%%/data/gfx/terrain124.png
+%%DATADIR%%/data/gfx/terrain125.png
+%%DATADIR%%/data/gfx/terrain126.png
+%%DATADIR%%/data/gfx/terrain127.png
+%%DATADIR%%/data/gfx/terrain128.png
+%%DATADIR%%/data/gfx/terrain129.png
+%%DATADIR%%/data/gfx/terrain13.png
+%%DATADIR%%/data/gfx/terrain130.png
+%%DATADIR%%/data/gfx/terrain131.png
+%%DATADIR%%/data/gfx/terrain132.png
+%%DATADIR%%/data/gfx/terrain133.png
+%%DATADIR%%/data/gfx/terrain134.png
+%%DATADIR%%/data/gfx/terrain135.png
+%%DATADIR%%/data/gfx/terrain136.png
+%%DATADIR%%/data/gfx/terrain137.png
+%%DATADIR%%/data/gfx/terrain138.png
+%%DATADIR%%/data/gfx/terrain139.png
+%%DATADIR%%/data/gfx/terrain14.png
+%%DATADIR%%/data/gfx/terrain140.png
+%%DATADIR%%/data/gfx/terrain141.png
+%%DATADIR%%/data/gfx/terrain142.png
+%%DATADIR%%/data/gfx/terrain143.png
+%%DATADIR%%/data/gfx/terrain144.png
+%%DATADIR%%/data/gfx/terrain145.png
+%%DATADIR%%/data/gfx/terrain146.png
+%%DATADIR%%/data/gfx/terrain147.png
+%%DATADIR%%/data/gfx/terrain148.png
+%%DATADIR%%/data/gfx/terrain149.png
+%%DATADIR%%/data/gfx/terrain15.png
+%%DATADIR%%/data/gfx/terrain150.png
+%%DATADIR%%/data/gfx/terrain151.png
+%%DATADIR%%/data/gfx/terrain152.png
+%%DATADIR%%/data/gfx/terrain153.png
+%%DATADIR%%/data/gfx/terrain154.png
+%%DATADIR%%/data/gfx/terrain155.png
+%%DATADIR%%/data/gfx/terrain156.png
+%%DATADIR%%/data/gfx/terrain157.png
+%%DATADIR%%/data/gfx/terrain158.png
+%%DATADIR%%/data/gfx/terrain159.png
+%%DATADIR%%/data/gfx/terrain16.png
+%%DATADIR%%/data/gfx/terrain160.png
+%%DATADIR%%/data/gfx/terrain161.png
+%%DATADIR%%/data/gfx/terrain162.png
+%%DATADIR%%/data/gfx/terrain163.png
+%%DATADIR%%/data/gfx/terrain164.png
+%%DATADIR%%/data/gfx/terrain165.png
+%%DATADIR%%/data/gfx/terrain166.png
+%%DATADIR%%/data/gfx/terrain167.png
+%%DATADIR%%/data/gfx/terrain168.png
+%%DATADIR%%/data/gfx/terrain169.png
+%%DATADIR%%/data/gfx/terrain17.png
+%%DATADIR%%/data/gfx/terrain170.png
+%%DATADIR%%/data/gfx/terrain171.png
+%%DATADIR%%/data/gfx/terrain172.png
+%%DATADIR%%/data/gfx/terrain173.png
+%%DATADIR%%/data/gfx/terrain174.png
+%%DATADIR%%/data/gfx/terrain175.png
+%%DATADIR%%/data/gfx/terrain176.png
+%%DATADIR%%/data/gfx/terrain177.png
+%%DATADIR%%/data/gfx/terrain178.png
+%%DATADIR%%/data/gfx/terrain179.png
+%%DATADIR%%/data/gfx/terrain18.png
+%%DATADIR%%/data/gfx/terrain180.png
+%%DATADIR%%/data/gfx/terrain181.png
+%%DATADIR%%/data/gfx/terrain182.png
+%%DATADIR%%/data/gfx/terrain183.png
+%%DATADIR%%/data/gfx/terrain184.png
+%%DATADIR%%/data/gfx/terrain185.png
+%%DATADIR%%/data/gfx/terrain186.png
+%%DATADIR%%/data/gfx/terrain187.png
+%%DATADIR%%/data/gfx/terrain188.png
+%%DATADIR%%/data/gfx/terrain189.png
+%%DATADIR%%/data/gfx/terrain19.png
+%%DATADIR%%/data/gfx/terrain190.png
+%%DATADIR%%/data/gfx/terrain191.png
+%%DATADIR%%/data/gfx/terrain192.png
+%%DATADIR%%/data/gfx/terrain193.png
+%%DATADIR%%/data/gfx/terrain194.png
+%%DATADIR%%/data/gfx/terrain195.png
+%%DATADIR%%/data/gfx/terrain196.png
+%%DATADIR%%/data/gfx/terrain197.png
+%%DATADIR%%/data/gfx/terrain198.png
+%%DATADIR%%/data/gfx/terrain199.png
+%%DATADIR%%/data/gfx/terrain2.png
+%%DATADIR%%/data/gfx/terrain20.png
+%%DATADIR%%/data/gfx/terrain200.png
+%%DATADIR%%/data/gfx/terrain201.png
+%%DATADIR%%/data/gfx/terrain202.png
+%%DATADIR%%/data/gfx/terrain203.png
+%%DATADIR%%/data/gfx/terrain204.png
+%%DATADIR%%/data/gfx/terrain205.png
+%%DATADIR%%/data/gfx/terrain206.png
+%%DATADIR%%/data/gfx/terrain207.png
+%%DATADIR%%/data/gfx/terrain208.png
+%%DATADIR%%/data/gfx/terrain209.png
+%%DATADIR%%/data/gfx/terrain21.png
+%%DATADIR%%/data/gfx/terrain210.png
+%%DATADIR%%/data/gfx/terrain211.png
+%%DATADIR%%/data/gfx/terrain212.png
+%%DATADIR%%/data/gfx/terrain213.png
+%%DATADIR%%/data/gfx/terrain214.png
+%%DATADIR%%/data/gfx/terrain215.png
+%%DATADIR%%/data/gfx/terrain216.png
+%%DATADIR%%/data/gfx/terrain217.png
+%%DATADIR%%/data/gfx/terrain218.png
+%%DATADIR%%/data/gfx/terrain219.png
+%%DATADIR%%/data/gfx/terrain22.png
+%%DATADIR%%/data/gfx/terrain220.png
+%%DATADIR%%/data/gfx/terrain221.png
+%%DATADIR%%/data/gfx/terrain222.png
+%%DATADIR%%/data/gfx/terrain223.png
+%%DATADIR%%/data/gfx/terrain224.png
+%%DATADIR%%/data/gfx/terrain225.png
+%%DATADIR%%/data/gfx/terrain226.png
+%%DATADIR%%/data/gfx/terrain227.png
+%%DATADIR%%/data/gfx/terrain228.png
+%%DATADIR%%/data/gfx/terrain229.png
+%%DATADIR%%/data/gfx/terrain23.png
+%%DATADIR%%/data/gfx/terrain230.png
+%%DATADIR%%/data/gfx/terrain231.png
+%%DATADIR%%/data/gfx/terrain232.png
+%%DATADIR%%/data/gfx/terrain233.png
+%%DATADIR%%/data/gfx/terrain234.png
+%%DATADIR%%/data/gfx/terrain235.png
+%%DATADIR%%/data/gfx/terrain236.png
+%%DATADIR%%/data/gfx/terrain237.png
+%%DATADIR%%/data/gfx/terrain238.png
+%%DATADIR%%/data/gfx/terrain239.png
+%%DATADIR%%/data/gfx/terrain24.png
+%%DATADIR%%/data/gfx/terrain240.png
+%%DATADIR%%/data/gfx/terrain241.png
+%%DATADIR%%/data/gfx/terrain242.png
+%%DATADIR%%/data/gfx/terrain243.png
+%%DATADIR%%/data/gfx/terrain244.png
+%%DATADIR%%/data/gfx/terrain245.png
+%%DATADIR%%/data/gfx/terrain246.png
+%%DATADIR%%/data/gfx/terrain247.png
+%%DATADIR%%/data/gfx/terrain248.png
+%%DATADIR%%/data/gfx/terrain249.png
+%%DATADIR%%/data/gfx/terrain25.png
+%%DATADIR%%/data/gfx/terrain250.png
+%%DATADIR%%/data/gfx/terrain251.png
+%%DATADIR%%/data/gfx/terrain252.png
+%%DATADIR%%/data/gfx/terrain253.png
+%%DATADIR%%/data/gfx/terrain254.png
+%%DATADIR%%/data/gfx/terrain255.png
+%%DATADIR%%/data/gfx/terrain256.png
+%%DATADIR%%/data/gfx/terrain257.png
+%%DATADIR%%/data/gfx/terrain258.png
+%%DATADIR%%/data/gfx/terrain259.png
+%%DATADIR%%/data/gfx/terrain26.png
+%%DATADIR%%/data/gfx/terrain260.png
+%%DATADIR%%/data/gfx/terrain261.png
+%%DATADIR%%/data/gfx/terrain262.png
+%%DATADIR%%/data/gfx/terrain263.png
+%%DATADIR%%/data/gfx/terrain264.png
+%%DATADIR%%/data/gfx/terrain265.png
+%%DATADIR%%/data/gfx/terrain266.png
+%%DATADIR%%/data/gfx/terrain267.png
+%%DATADIR%%/data/gfx/terrain268.png
+%%DATADIR%%/data/gfx/terrain269.png
+%%DATADIR%%/data/gfx/terrain27.png
+%%DATADIR%%/data/gfx/terrain270.png
+%%DATADIR%%/data/gfx/terrain271.png
+%%DATADIR%%/data/gfx/terrain28.png
+%%DATADIR%%/data/gfx/terrain29.png
+%%DATADIR%%/data/gfx/terrain3.png
+%%DATADIR%%/data/gfx/terrain30.png
+%%DATADIR%%/data/gfx/terrain31.png
+%%DATADIR%%/data/gfx/terrain32.png
+%%DATADIR%%/data/gfx/terrain33.png
+%%DATADIR%%/data/gfx/terrain34.png
+%%DATADIR%%/data/gfx/terrain35.png
+%%DATADIR%%/data/gfx/terrain36.png
+%%DATADIR%%/data/gfx/terrain37.png
+%%DATADIR%%/data/gfx/terrain38.png
+%%DATADIR%%/data/gfx/terrain39.png
+%%DATADIR%%/data/gfx/terrain4.png
+%%DATADIR%%/data/gfx/terrain40.png
+%%DATADIR%%/data/gfx/terrain41.png
+%%DATADIR%%/data/gfx/terrain42.png
+%%DATADIR%%/data/gfx/terrain43.png
+%%DATADIR%%/data/gfx/terrain44.png
+%%DATADIR%%/data/gfx/terrain45.png
+%%DATADIR%%/data/gfx/terrain46.png
+%%DATADIR%%/data/gfx/terrain47.png
+%%DATADIR%%/data/gfx/terrain48.png
+%%DATADIR%%/data/gfx/terrain49.png
+%%DATADIR%%/data/gfx/terrain5.png
+%%DATADIR%%/data/gfx/terrain50.png
+%%DATADIR%%/data/gfx/terrain51.png
+%%DATADIR%%/data/gfx/terrain52.png
+%%DATADIR%%/data/gfx/terrain53.png
+%%DATADIR%%/data/gfx/terrain54.png
+%%DATADIR%%/data/gfx/terrain55.png
+%%DATADIR%%/data/gfx/terrain56.png
+%%DATADIR%%/data/gfx/terrain57.png
+%%DATADIR%%/data/gfx/terrain58.png
+%%DATADIR%%/data/gfx/terrain59.png
+%%DATADIR%%/data/gfx/terrain6.png
+%%DATADIR%%/data/gfx/terrain60.png
+%%DATADIR%%/data/gfx/terrain61.png
+%%DATADIR%%/data/gfx/terrain62.png
+%%DATADIR%%/data/gfx/terrain63.png
+%%DATADIR%%/data/gfx/terrain64.png
+%%DATADIR%%/data/gfx/terrain65.png
+%%DATADIR%%/data/gfx/terrain66.png
+%%DATADIR%%/data/gfx/terrain67.png
+%%DATADIR%%/data/gfx/terrain68.png
+%%DATADIR%%/data/gfx/terrain69.png
+%%DATADIR%%/data/gfx/terrain7.png
+%%DATADIR%%/data/gfx/terrain70.png
+%%DATADIR%%/data/gfx/terrain71.png
+%%DATADIR%%/data/gfx/terrain72.png
+%%DATADIR%%/data/gfx/terrain73.png
+%%DATADIR%%/data/gfx/terrain74.png
+%%DATADIR%%/data/gfx/terrain75.png
+%%DATADIR%%/data/gfx/terrain76.png
+%%DATADIR%%/data/gfx/terrain77.png
+%%DATADIR%%/data/gfx/terrain78.png
+%%DATADIR%%/data/gfx/terrain79.png
+%%DATADIR%%/data/gfx/terrain8.png
+%%DATADIR%%/data/gfx/terrain80.png
+%%DATADIR%%/data/gfx/terrain81.png
+%%DATADIR%%/data/gfx/terrain82.png
+%%DATADIR%%/data/gfx/terrain83.png
+%%DATADIR%%/data/gfx/terrain84.png
+%%DATADIR%%/data/gfx/terrain85.png
+%%DATADIR%%/data/gfx/terrain86.png
+%%DATADIR%%/data/gfx/terrain87.png
+%%DATADIR%%/data/gfx/terrain88.png
+%%DATADIR%%/data/gfx/terrain89.png
+%%DATADIR%%/data/gfx/terrain9.png
+%%DATADIR%%/data/gfx/terrain90.png
+%%DATADIR%%/data/gfx/terrain91.png
+%%DATADIR%%/data/gfx/terrain92.png
+%%DATADIR%%/data/gfx/terrain93.png
+%%DATADIR%%/data/gfx/terrain94.png
+%%DATADIR%%/data/gfx/terrain95.png
+%%DATADIR%%/data/gfx/terrain96.png
+%%DATADIR%%/data/gfx/terrain97.png
+%%DATADIR%%/data/gfx/terrain98.png
+%%DATADIR%%/data/gfx/terrain99.png
+%%DATADIR%%/data/gfx/title.png
+%%DATADIR%%/data/gfx/unit0r.png
+%%DATADIR%%/data/gfx/unit100.png
+%%DATADIR%%/data/gfx/unit100r.png
+%%DATADIR%%/data/gfx/unit101.png
+%%DATADIR%%/data/gfx/unit101r.png
+%%DATADIR%%/data/gfx/unit102.png
+%%DATADIR%%/data/gfx/unit102r.png
+%%DATADIR%%/data/gfx/unit103.png
+%%DATADIR%%/data/gfx/unit103r.png
+%%DATADIR%%/data/gfx/unit104.png
+%%DATADIR%%/data/gfx/unit104r.png
+%%DATADIR%%/data/gfx/unit105.png
+%%DATADIR%%/data/gfx/unit105r.png
+%%DATADIR%%/data/gfx/unit106.png
+%%DATADIR%%/data/gfx/unit106r.png
+%%DATADIR%%/data/gfx/unit107.png
+%%DATADIR%%/data/gfx/unit107r.png
+%%DATADIR%%/data/gfx/unit108.png
+%%DATADIR%%/data/gfx/unit108r.png
+%%DATADIR%%/data/gfx/unit109.png
+%%DATADIR%%/data/gfx/unit109r.png
+%%DATADIR%%/data/gfx/unit10r.png
+%%DATADIR%%/data/gfx/unit110.png
+%%DATADIR%%/data/gfx/unit110r.png
+%%DATADIR%%/data/gfx/unit111.png
+%%DATADIR%%/data/gfx/unit111r.png
+%%DATADIR%%/data/gfx/unit112.png
+%%DATADIR%%/data/gfx/unit112r.png
+%%DATADIR%%/data/gfx/unit113.png
+%%DATADIR%%/data/gfx/unit113r.png
+%%DATADIR%%/data/gfx/unit114.png
+%%DATADIR%%/data/gfx/unit114r.png
+%%DATADIR%%/data/gfx/unit115.png
+%%DATADIR%%/data/gfx/unit115r.png
+%%DATADIR%%/data/gfx/unit116.png
+%%DATADIR%%/data/gfx/unit116r.png
+%%DATADIR%%/data/gfx/unit117.png
+%%DATADIR%%/data/gfx/unit117r.png
+%%DATADIR%%/data/gfx/unit118.png
+%%DATADIR%%/data/gfx/unit118r.png
+%%DATADIR%%/data/gfx/unit119.png
+%%DATADIR%%/data/gfx/unit119r.png
+%%DATADIR%%/data/gfx/unit11r.png
+%%DATADIR%%/data/gfx/unit120.png
+%%DATADIR%%/data/gfx/unit120r.png
+%%DATADIR%%/data/gfx/unit121.png
+%%DATADIR%%/data/gfx/unit121r.png
+%%DATADIR%%/data/gfx/unit122.png
+%%DATADIR%%/data/gfx/unit122r.png
+%%DATADIR%%/data/gfx/unit123.png
+%%DATADIR%%/data/gfx/unit123r.png
+%%DATADIR%%/data/gfx/unit124.png
+%%DATADIR%%/data/gfx/unit124r.png
+%%DATADIR%%/data/gfx/unit125.png
+%%DATADIR%%/data/gfx/unit125r.png
+%%DATADIR%%/data/gfx/unit126.png
+%%DATADIR%%/data/gfx/unit126r.png
+%%DATADIR%%/data/gfx/unit127.png
+%%DATADIR%%/data/gfx/unit127r.png
+%%DATADIR%%/data/gfx/unit128r.png
+%%DATADIR%%/data/gfx/unit129r.png
+%%DATADIR%%/data/gfx/unit12r.png
+%%DATADIR%%/data/gfx/unit130r.png
+%%DATADIR%%/data/gfx/unit131r.png
+%%DATADIR%%/data/gfx/unit132r.png
+%%DATADIR%%/data/gfx/unit133r.png
+%%DATADIR%%/data/gfx/unit134r.png
+%%DATADIR%%/data/gfx/unit135r.png
+%%DATADIR%%/data/gfx/unit136r.png
+%%DATADIR%%/data/gfx/unit137r.png
+%%DATADIR%%/data/gfx/unit138r.png
+%%DATADIR%%/data/gfx/unit139r.png
+%%DATADIR%%/data/gfx/unit13r.png
+%%DATADIR%%/data/gfx/unit140r.png
+%%DATADIR%%/data/gfx/unit141r.png
+%%DATADIR%%/data/gfx/unit142r.png
+%%DATADIR%%/data/gfx/unit143r.png
+%%DATADIR%%/data/gfx/unit144r.png
+%%DATADIR%%/data/gfx/unit145r.png
+%%DATADIR%%/data/gfx/unit146r.png
+%%DATADIR%%/data/gfx/unit147r.png
+%%DATADIR%%/data/gfx/unit148r.png
+%%DATADIR%%/data/gfx/unit149r.png
+%%DATADIR%%/data/gfx/unit14r.png
+%%DATADIR%%/data/gfx/unit150r.png
+%%DATADIR%%/data/gfx/unit151r.png
+%%DATADIR%%/data/gfx/unit152r.png
+%%DATADIR%%/data/gfx/unit153r.png
+%%DATADIR%%/data/gfx/unit154r.png
+%%DATADIR%%/data/gfx/unit155r.png
+%%DATADIR%%/data/gfx/unit156r.png
+%%DATADIR%%/data/gfx/unit157r.png
+%%DATADIR%%/data/gfx/unit158r.png
+%%DATADIR%%/data/gfx/unit159r.png
+%%DATADIR%%/data/gfx/unit15r.png
+%%DATADIR%%/data/gfx/unit160r.png
+%%DATADIR%%/data/gfx/unit161r.png
+%%DATADIR%%/data/gfx/unit162r.png
+%%DATADIR%%/data/gfx/unit163r.png
+%%DATADIR%%/data/gfx/unit164r.png
+%%DATADIR%%/data/gfx/unit165r.png
+%%DATADIR%%/data/gfx/unit166r.png
+%%DATADIR%%/data/gfx/unit167r.png
+%%DATADIR%%/data/gfx/unit168r.png
+%%DATADIR%%/data/gfx/unit169r.png
+%%DATADIR%%/data/gfx/unit16r.png
+%%DATADIR%%/data/gfx/unit170r.png
+%%DATADIR%%/data/gfx/unit171r.png
+%%DATADIR%%/data/gfx/unit172r.png
+%%DATADIR%%/data/gfx/unit173r.png
+%%DATADIR%%/data/gfx/unit174r.png
+%%DATADIR%%/data/gfx/unit175r.png
+%%DATADIR%%/data/gfx/unit176r.png
+%%DATADIR%%/data/gfx/unit177r.png
+%%DATADIR%%/data/gfx/unit178r.png
+%%DATADIR%%/data/gfx/unit179r.png
+%%DATADIR%%/data/gfx/unit17r.png
+%%DATADIR%%/data/gfx/unit180r.png
+%%DATADIR%%/data/gfx/unit181r.png
+%%DATADIR%%/data/gfx/unit182r.png
+%%DATADIR%%/data/gfx/unit183r.png
+%%DATADIR%%/data/gfx/unit184r.png
+%%DATADIR%%/data/gfx/unit185r.png
+%%DATADIR%%/data/gfx/unit186r.png
+%%DATADIR%%/data/gfx/unit187r.png
+%%DATADIR%%/data/gfx/unit188r.png
+%%DATADIR%%/data/gfx/unit189r.png
+%%DATADIR%%/data/gfx/unit18r.png
+%%DATADIR%%/data/gfx/unit190r.png
+%%DATADIR%%/data/gfx/unit191r.png
+%%DATADIR%%/data/gfx/unit192.png
+%%DATADIR%%/data/gfx/unit192r.png
+%%DATADIR%%/data/gfx/unit193.png
+%%DATADIR%%/data/gfx/unit193r.png
+%%DATADIR%%/data/gfx/unit194.png
+%%DATADIR%%/data/gfx/unit194r.png
+%%DATADIR%%/data/gfx/unit195.png
+%%DATADIR%%/data/gfx/unit195r.png
+%%DATADIR%%/data/gfx/unit196.png
+%%DATADIR%%/data/gfx/unit196r.png
+%%DATADIR%%/data/gfx/unit197.png
+%%DATADIR%%/data/gfx/unit197r.png
+%%DATADIR%%/data/gfx/unit198.png
+%%DATADIR%%/data/gfx/unit198r.png
+%%DATADIR%%/data/gfx/unit199.png
+%%DATADIR%%/data/gfx/unit199r.png
+%%DATADIR%%/data/gfx/unit19r.png
+%%DATADIR%%/data/gfx/unit1r.png
+%%DATADIR%%/data/gfx/unit200.png
+%%DATADIR%%/data/gfx/unit200r.png
+%%DATADIR%%/data/gfx/unit201.png
+%%DATADIR%%/data/gfx/unit201r.png
+%%DATADIR%%/data/gfx/unit202.png
+%%DATADIR%%/data/gfx/unit202r.png
+%%DATADIR%%/data/gfx/unit203.png
+%%DATADIR%%/data/gfx/unit203r.png
+%%DATADIR%%/data/gfx/unit204.png
+%%DATADIR%%/data/gfx/unit204r.png
+%%DATADIR%%/data/gfx/unit205.png
+%%DATADIR%%/data/gfx/unit205r.png
+%%DATADIR%%/data/gfx/unit206.png
+%%DATADIR%%/data/gfx/unit206r.png
+%%DATADIR%%/data/gfx/unit207.png
+%%DATADIR%%/data/gfx/unit207r.png
+%%DATADIR%%/data/gfx/unit208.png
+%%DATADIR%%/data/gfx/unit208r.png
+%%DATADIR%%/data/gfx/unit209.png
+%%DATADIR%%/data/gfx/unit209r.png
+%%DATADIR%%/data/gfx/unit20r.png
+%%DATADIR%%/data/gfx/unit210.png
+%%DATADIR%%/data/gfx/unit210r.png
+%%DATADIR%%/data/gfx/unit211.png
+%%DATADIR%%/data/gfx/unit211r.png
+%%DATADIR%%/data/gfx/unit212.png
+%%DATADIR%%/data/gfx/unit212r.png
+%%DATADIR%%/data/gfx/unit213.png
+%%DATADIR%%/data/gfx/unit213r.png
+%%DATADIR%%/data/gfx/unit214.png
+%%DATADIR%%/data/gfx/unit214r.png
+%%DATADIR%%/data/gfx/unit215.png
+%%DATADIR%%/data/gfx/unit215r.png
+%%DATADIR%%/data/gfx/unit216.png
+%%DATADIR%%/data/gfx/unit216r.png
+%%DATADIR%%/data/gfx/unit217.png
+%%DATADIR%%/data/gfx/unit217r.png
+%%DATADIR%%/data/gfx/unit218.png
+%%DATADIR%%/data/gfx/unit218r.png
+%%DATADIR%%/data/gfx/unit219.png
+%%DATADIR%%/data/gfx/unit219r.png
+%%DATADIR%%/data/gfx/unit21r.png
+%%DATADIR%%/data/gfx/unit220.png
+%%DATADIR%%/data/gfx/unit220r.png
+%%DATADIR%%/data/gfx/unit221.png
+%%DATADIR%%/data/gfx/unit221r.png
+%%DATADIR%%/data/gfx/unit222.png
+%%DATADIR%%/data/gfx/unit222r.png
+%%DATADIR%%/data/gfx/unit223.png
+%%DATADIR%%/data/gfx/unit223r.png
+%%DATADIR%%/data/gfx/unit224.png
+%%DATADIR%%/data/gfx/unit224r.png
+%%DATADIR%%/data/gfx/unit225.png
+%%DATADIR%%/data/gfx/unit225r.png
+%%DATADIR%%/data/gfx/unit226.png
+%%DATADIR%%/data/gfx/unit226r.png
+%%DATADIR%%/data/gfx/unit227.png
+%%DATADIR%%/data/gfx/unit227r.png
+%%DATADIR%%/data/gfx/unit228.png
+%%DATADIR%%/data/gfx/unit228r.png
+%%DATADIR%%/data/gfx/unit229.png
+%%DATADIR%%/data/gfx/unit229r.png
+%%DATADIR%%/data/gfx/unit22r.png
+%%DATADIR%%/data/gfx/unit230.png
+%%DATADIR%%/data/gfx/unit230r.png
+%%DATADIR%%/data/gfx/unit231.png
+%%DATADIR%%/data/gfx/unit231r.png
+%%DATADIR%%/data/gfx/unit232.png
+%%DATADIR%%/data/gfx/unit232r.png
+%%DATADIR%%/data/gfx/unit233.png
+%%DATADIR%%/data/gfx/unit233r.png
+%%DATADIR%%/data/gfx/unit234.png
+%%DATADIR%%/data/gfx/unit234r.png
+%%DATADIR%%/data/gfx/unit235.png
+%%DATADIR%%/data/gfx/unit235r.png
+%%DATADIR%%/data/gfx/unit236.png
+%%DATADIR%%/data/gfx/unit236r.png
+%%DATADIR%%/data/gfx/unit237.png
+%%DATADIR%%/data/gfx/unit237r.png
+%%DATADIR%%/data/gfx/unit238.png
+%%DATADIR%%/data/gfx/unit238r.png
+%%DATADIR%%/data/gfx/unit239.png
+%%DATADIR%%/data/gfx/unit239r.png
+%%DATADIR%%/data/gfx/unit23r.png
+%%DATADIR%%/data/gfx/unit240.png
+%%DATADIR%%/data/gfx/unit240r.png
+%%DATADIR%%/data/gfx/unit241.png
+%%DATADIR%%/data/gfx/unit241r.png
+%%DATADIR%%/data/gfx/unit242.png
+%%DATADIR%%/data/gfx/unit242r.png
+%%DATADIR%%/data/gfx/unit243.png
+%%DATADIR%%/data/gfx/unit243r.png
+%%DATADIR%%/data/gfx/unit244.png
+%%DATADIR%%/data/gfx/unit244r.png
+%%DATADIR%%/data/gfx/unit245.png
+%%DATADIR%%/data/gfx/unit245r.png
+%%DATADIR%%/data/gfx/unit246.png
+%%DATADIR%%/data/gfx/unit246r.png
+%%DATADIR%%/data/gfx/unit247.png
+%%DATADIR%%/data/gfx/unit247r.png
+%%DATADIR%%/data/gfx/unit248.png
+%%DATADIR%%/data/gfx/unit248r.png
+%%DATADIR%%/data/gfx/unit249.png
+%%DATADIR%%/data/gfx/unit249r.png
+%%DATADIR%%/data/gfx/unit24r.png
+%%DATADIR%%/data/gfx/unit250.png
+%%DATADIR%%/data/gfx/unit250r.png
+%%DATADIR%%/data/gfx/unit251.png
+%%DATADIR%%/data/gfx/unit251r.png
+%%DATADIR%%/data/gfx/unit252.png
+%%DATADIR%%/data/gfx/unit252r.png
+%%DATADIR%%/data/gfx/unit253.png
+%%DATADIR%%/data/gfx/unit253r.png
+%%DATADIR%%/data/gfx/unit254.png
+%%DATADIR%%/data/gfx/unit254r.png
+%%DATADIR%%/data/gfx/unit255.png
+%%DATADIR%%/data/gfx/unit255r.png
+%%DATADIR%%/data/gfx/unit256.png
+%%DATADIR%%/data/gfx/unit256r.png
+%%DATADIR%%/data/gfx/unit257.png
+%%DATADIR%%/data/gfx/unit257r.png
+%%DATADIR%%/data/gfx/unit258.png
+%%DATADIR%%/data/gfx/unit258r.png
+%%DATADIR%%/data/gfx/unit259.png
+%%DATADIR%%/data/gfx/unit259r.png
+%%DATADIR%%/data/gfx/unit25r.png
+%%DATADIR%%/data/gfx/unit260.png
+%%DATADIR%%/data/gfx/unit260r.png
+%%DATADIR%%/data/gfx/unit261.png
+%%DATADIR%%/data/gfx/unit261r.png
+%%DATADIR%%/data/gfx/unit262.png
+%%DATADIR%%/data/gfx/unit262r.png
+%%DATADIR%%/data/gfx/unit263.png
+%%DATADIR%%/data/gfx/unit263r.png
+%%DATADIR%%/data/gfx/unit264.png
+%%DATADIR%%/data/gfx/unit264r.png
+%%DATADIR%%/data/gfx/unit265.png
+%%DATADIR%%/data/gfx/unit265r.png
+%%DATADIR%%/data/gfx/unit266.png
+%%DATADIR%%/data/gfx/unit266r.png
+%%DATADIR%%/data/gfx/unit267.png
+%%DATADIR%%/data/gfx/unit267r.png
+%%DATADIR%%/data/gfx/unit268.png
+%%DATADIR%%/data/gfx/unit268r.png
+%%DATADIR%%/data/gfx/unit269.png
+%%DATADIR%%/data/gfx/unit269r.png
+%%DATADIR%%/data/gfx/unit26r.png
+%%DATADIR%%/data/gfx/unit270.png
+%%DATADIR%%/data/gfx/unit270r.png
+%%DATADIR%%/data/gfx/unit271.png
+%%DATADIR%%/data/gfx/unit271r.png
+%%DATADIR%%/data/gfx/unit272.png
+%%DATADIR%%/data/gfx/unit272r.png
+%%DATADIR%%/data/gfx/unit273.png
+%%DATADIR%%/data/gfx/unit273r.png
+%%DATADIR%%/data/gfx/unit274.png
+%%DATADIR%%/data/gfx/unit274r.png
+%%DATADIR%%/data/gfx/unit275.png
+%%DATADIR%%/data/gfx/unit275r.png
+%%DATADIR%%/data/gfx/unit276.png
+%%DATADIR%%/data/gfx/unit276r.png
+%%DATADIR%%/data/gfx/unit277.png
+%%DATADIR%%/data/gfx/unit277r.png
+%%DATADIR%%/data/gfx/unit278.png
+%%DATADIR%%/data/gfx/unit278r.png
+%%DATADIR%%/data/gfx/unit279.png
+%%DATADIR%%/data/gfx/unit279r.png
+%%DATADIR%%/data/gfx/unit27r.png
+%%DATADIR%%/data/gfx/unit280.png
+%%DATADIR%%/data/gfx/unit280r.png
+%%DATADIR%%/data/gfx/unit281.png
+%%DATADIR%%/data/gfx/unit281r.png
+%%DATADIR%%/data/gfx/unit282.png
+%%DATADIR%%/data/gfx/unit282r.png
+%%DATADIR%%/data/gfx/unit283.png
+%%DATADIR%%/data/gfx/unit283r.png
+%%DATADIR%%/data/gfx/unit284.png
+%%DATADIR%%/data/gfx/unit284r.png
+%%DATADIR%%/data/gfx/unit285.png
+%%DATADIR%%/data/gfx/unit285r.png
+%%DATADIR%%/data/gfx/unit286.png
+%%DATADIR%%/data/gfx/unit286r.png
+%%DATADIR%%/data/gfx/unit287.png
+%%DATADIR%%/data/gfx/unit287r.png
+%%DATADIR%%/data/gfx/unit288.png
+%%DATADIR%%/data/gfx/unit288r.png
+%%DATADIR%%/data/gfx/unit289.png
+%%DATADIR%%/data/gfx/unit289r.png
+%%DATADIR%%/data/gfx/unit28r.png
+%%DATADIR%%/data/gfx/unit290.png
+%%DATADIR%%/data/gfx/unit290r.png
+%%DATADIR%%/data/gfx/unit291.png
+%%DATADIR%%/data/gfx/unit291r.png
+%%DATADIR%%/data/gfx/unit292.png
+%%DATADIR%%/data/gfx/unit292r.png
+%%DATADIR%%/data/gfx/unit293.png
+%%DATADIR%%/data/gfx/unit293r.png
+%%DATADIR%%/data/gfx/unit294.png
+%%DATADIR%%/data/gfx/unit294r.png
+%%DATADIR%%/data/gfx/unit295.png
+%%DATADIR%%/data/gfx/unit295r.png
+%%DATADIR%%/data/gfx/unit296.png
+%%DATADIR%%/data/gfx/unit296r.png
+%%DATADIR%%/data/gfx/unit297.png
+%%DATADIR%%/data/gfx/unit297r.png
+%%DATADIR%%/data/gfx/unit298.png
+%%DATADIR%%/data/gfx/unit298r.png
+%%DATADIR%%/data/gfx/unit299.png
+%%DATADIR%%/data/gfx/unit299r.png
+%%DATADIR%%/data/gfx/unit29r.png
+%%DATADIR%%/data/gfx/unit2r.png
+%%DATADIR%%/data/gfx/unit300.png
+%%DATADIR%%/data/gfx/unit300r.png
+%%DATADIR%%/data/gfx/unit301.png
+%%DATADIR%%/data/gfx/unit301r.png
+%%DATADIR%%/data/gfx/unit302.png
+%%DATADIR%%/data/gfx/unit302r.png
+%%DATADIR%%/data/gfx/unit303.png
+%%DATADIR%%/data/gfx/unit303r.png
+%%DATADIR%%/data/gfx/unit304.png
+%%DATADIR%%/data/gfx/unit304r.png
+%%DATADIR%%/data/gfx/unit305.png
+%%DATADIR%%/data/gfx/unit305r.png
+%%DATADIR%%/data/gfx/unit306.png
+%%DATADIR%%/data/gfx/unit306r.png
+%%DATADIR%%/data/gfx/unit307.png
+%%DATADIR%%/data/gfx/unit307r.png
+%%DATADIR%%/data/gfx/unit308.png
+%%DATADIR%%/data/gfx/unit308r.png
+%%DATADIR%%/data/gfx/unit309.png
+%%DATADIR%%/data/gfx/unit309r.png
+%%DATADIR%%/data/gfx/unit30r.png
+%%DATADIR%%/data/gfx/unit310.png
+%%DATADIR%%/data/gfx/unit310r.png
+%%DATADIR%%/data/gfx/unit311.png
+%%DATADIR%%/data/gfx/unit311r.png
+%%DATADIR%%/data/gfx/unit312.png
+%%DATADIR%%/data/gfx/unit312r.png
+%%DATADIR%%/data/gfx/unit313.png
+%%DATADIR%%/data/gfx/unit313r.png
+%%DATADIR%%/data/gfx/unit314.png
+%%DATADIR%%/data/gfx/unit314r.png
+%%DATADIR%%/data/gfx/unit315.png
+%%DATADIR%%/data/gfx/unit315r.png
+%%DATADIR%%/data/gfx/unit316.png
+%%DATADIR%%/data/gfx/unit316r.png
+%%DATADIR%%/data/gfx/unit317.png
+%%DATADIR%%/data/gfx/unit317r.png
+%%DATADIR%%/data/gfx/unit318.png
+%%DATADIR%%/data/gfx/unit318r.png
+%%DATADIR%%/data/gfx/unit319.png
+%%DATADIR%%/data/gfx/unit319r.png
+%%DATADIR%%/data/gfx/unit31r.png
+%%DATADIR%%/data/gfx/unit320r.png
+%%DATADIR%%/data/gfx/unit321r.png
+%%DATADIR%%/data/gfx/unit322r.png
+%%DATADIR%%/data/gfx/unit323r.png
+%%DATADIR%%/data/gfx/unit324r.png
+%%DATADIR%%/data/gfx/unit325r.png
+%%DATADIR%%/data/gfx/unit326r.png
+%%DATADIR%%/data/gfx/unit327r.png
+%%DATADIR%%/data/gfx/unit328r.png
+%%DATADIR%%/data/gfx/unit329r.png
+%%DATADIR%%/data/gfx/unit32r.png
+%%DATADIR%%/data/gfx/unit330r.png
+%%DATADIR%%/data/gfx/unit331r.png
+%%DATADIR%%/data/gfx/unit332r.png
+%%DATADIR%%/data/gfx/unit333r.png
+%%DATADIR%%/data/gfx/unit334r.png
+%%DATADIR%%/data/gfx/unit335r.png
+%%DATADIR%%/data/gfx/unit336r.png
+%%DATADIR%%/data/gfx/unit337r.png
+%%DATADIR%%/data/gfx/unit338r.png
+%%DATADIR%%/data/gfx/unit339r.png
+%%DATADIR%%/data/gfx/unit33r.png
+%%DATADIR%%/data/gfx/unit340r.png
+%%DATADIR%%/data/gfx/unit341r.png
+%%DATADIR%%/data/gfx/unit342r.png
+%%DATADIR%%/data/gfx/unit343r.png
+%%DATADIR%%/data/gfx/unit344r.png
+%%DATADIR%%/data/gfx/unit345r.png
+%%DATADIR%%/data/gfx/unit346r.png
+%%DATADIR%%/data/gfx/unit347r.png
+%%DATADIR%%/data/gfx/unit348r.png
+%%DATADIR%%/data/gfx/unit349r.png
+%%DATADIR%%/data/gfx/unit34r.png
+%%DATADIR%%/data/gfx/unit350r.png
+%%DATADIR%%/data/gfx/unit351r.png
+%%DATADIR%%/data/gfx/unit352r.png
+%%DATADIR%%/data/gfx/unit353r.png
+%%DATADIR%%/data/gfx/unit354r.png
+%%DATADIR%%/data/gfx/unit355r.png
+%%DATADIR%%/data/gfx/unit356r.png
+%%DATADIR%%/data/gfx/unit357r.png
+%%DATADIR%%/data/gfx/unit358r.png
+%%DATADIR%%/data/gfx/unit359r.png
+%%DATADIR%%/data/gfx/unit35r.png
+%%DATADIR%%/data/gfx/unit360r.png
+%%DATADIR%%/data/gfx/unit361r.png
+%%DATADIR%%/data/gfx/unit362r.png
+%%DATADIR%%/data/gfx/unit363r.png
+%%DATADIR%%/data/gfx/unit364r.png
+%%DATADIR%%/data/gfx/unit365r.png
+%%DATADIR%%/data/gfx/unit366r.png
+%%DATADIR%%/data/gfx/unit367r.png
+%%DATADIR%%/data/gfx/unit368r.png
+%%DATADIR%%/data/gfx/unit369r.png
+%%DATADIR%%/data/gfx/unit36r.png
+%%DATADIR%%/data/gfx/unit370r.png
+%%DATADIR%%/data/gfx/unit371r.png
+%%DATADIR%%/data/gfx/unit372r.png
+%%DATADIR%%/data/gfx/unit373r.png
+%%DATADIR%%/data/gfx/unit374r.png
+%%DATADIR%%/data/gfx/unit375r.png
+%%DATADIR%%/data/gfx/unit376r.png
+%%DATADIR%%/data/gfx/unit377r.png
+%%DATADIR%%/data/gfx/unit378r.png
+%%DATADIR%%/data/gfx/unit379r.png
+%%DATADIR%%/data/gfx/unit37r.png
+%%DATADIR%%/data/gfx/unit380r.png
+%%DATADIR%%/data/gfx/unit381r.png
+%%DATADIR%%/data/gfx/unit382r.png
+%%DATADIR%%/data/gfx/unit383r.png
+%%DATADIR%%/data/gfx/unit384.png
+%%DATADIR%%/data/gfx/unit384r.png
+%%DATADIR%%/data/gfx/unit385.png
+%%DATADIR%%/data/gfx/unit385r.png
+%%DATADIR%%/data/gfx/unit386.png
+%%DATADIR%%/data/gfx/unit386r.png
+%%DATADIR%%/data/gfx/unit387.png
+%%DATADIR%%/data/gfx/unit387r.png
+%%DATADIR%%/data/gfx/unit388.png
+%%DATADIR%%/data/gfx/unit388r.png
+%%DATADIR%%/data/gfx/unit389.png
+%%DATADIR%%/data/gfx/unit389r.png
+%%DATADIR%%/data/gfx/unit38r.png
+%%DATADIR%%/data/gfx/unit390.png
+%%DATADIR%%/data/gfx/unit390r.png
+%%DATADIR%%/data/gfx/unit391.png
+%%DATADIR%%/data/gfx/unit391r.png
+%%DATADIR%%/data/gfx/unit392.png
+%%DATADIR%%/data/gfx/unit392r.png
+%%DATADIR%%/data/gfx/unit393.png
+%%DATADIR%%/data/gfx/unit393r.png
+%%DATADIR%%/data/gfx/unit394.png
+%%DATADIR%%/data/gfx/unit394r.png
+%%DATADIR%%/data/gfx/unit395.png
+%%DATADIR%%/data/gfx/unit395r.png
+%%DATADIR%%/data/gfx/unit396.png
+%%DATADIR%%/data/gfx/unit396r.png
+%%DATADIR%%/data/gfx/unit397.png
+%%DATADIR%%/data/gfx/unit397r.png
+%%DATADIR%%/data/gfx/unit398.png
+%%DATADIR%%/data/gfx/unit398r.png
+%%DATADIR%%/data/gfx/unit399.png
+%%DATADIR%%/data/gfx/unit399r.png
+%%DATADIR%%/data/gfx/unit39r.png
+%%DATADIR%%/data/gfx/unit3r.png
+%%DATADIR%%/data/gfx/unit400.png
+%%DATADIR%%/data/gfx/unit400r.png
+%%DATADIR%%/data/gfx/unit401.png
+%%DATADIR%%/data/gfx/unit401r.png
+%%DATADIR%%/data/gfx/unit402.png
+%%DATADIR%%/data/gfx/unit402r.png
+%%DATADIR%%/data/gfx/unit403.png
+%%DATADIR%%/data/gfx/unit403r.png
+%%DATADIR%%/data/gfx/unit404.png
+%%DATADIR%%/data/gfx/unit404r.png
+%%DATADIR%%/data/gfx/unit405.png
+%%DATADIR%%/data/gfx/unit405r.png
+%%DATADIR%%/data/gfx/unit406.png
+%%DATADIR%%/data/gfx/unit406r.png
+%%DATADIR%%/data/gfx/unit407.png
+%%DATADIR%%/data/gfx/unit407r.png
+%%DATADIR%%/data/gfx/unit408.png
+%%DATADIR%%/data/gfx/unit408r.png
+%%DATADIR%%/data/gfx/unit409.png
+%%DATADIR%%/data/gfx/unit409r.png
+%%DATADIR%%/data/gfx/unit40r.png
+%%DATADIR%%/data/gfx/unit410.png
+%%DATADIR%%/data/gfx/unit410r.png
+%%DATADIR%%/data/gfx/unit411.png
+%%DATADIR%%/data/gfx/unit411r.png
+%%DATADIR%%/data/gfx/unit412.png
+%%DATADIR%%/data/gfx/unit412r.png
+%%DATADIR%%/data/gfx/unit413.png
+%%DATADIR%%/data/gfx/unit413r.png
+%%DATADIR%%/data/gfx/unit414.png
+%%DATADIR%%/data/gfx/unit414r.png
+%%DATADIR%%/data/gfx/unit415.png
+%%DATADIR%%/data/gfx/unit415r.png
+%%DATADIR%%/data/gfx/unit416.png
+%%DATADIR%%/data/gfx/unit416r.png
+%%DATADIR%%/data/gfx/unit417.png
+%%DATADIR%%/data/gfx/unit417r.png
+%%DATADIR%%/data/gfx/unit418.png
+%%DATADIR%%/data/gfx/unit418r.png
+%%DATADIR%%/data/gfx/unit419.png
+%%DATADIR%%/data/gfx/unit419r.png
+%%DATADIR%%/data/gfx/unit41r.png
+%%DATADIR%%/data/gfx/unit420.png
+%%DATADIR%%/data/gfx/unit420r.png
+%%DATADIR%%/data/gfx/unit421.png
+%%DATADIR%%/data/gfx/unit421r.png
+%%DATADIR%%/data/gfx/unit422.png
+%%DATADIR%%/data/gfx/unit422r.png
+%%DATADIR%%/data/gfx/unit423.png
+%%DATADIR%%/data/gfx/unit423r.png
+%%DATADIR%%/data/gfx/unit424.png
+%%DATADIR%%/data/gfx/unit424r.png
+%%DATADIR%%/data/gfx/unit425.png
+%%DATADIR%%/data/gfx/unit425r.png
+%%DATADIR%%/data/gfx/unit426.png
+%%DATADIR%%/data/gfx/unit426r.png
+%%DATADIR%%/data/gfx/unit427.png
+%%DATADIR%%/data/gfx/unit427r.png
+%%DATADIR%%/data/gfx/unit428.png
+%%DATADIR%%/data/gfx/unit428r.png
+%%DATADIR%%/data/gfx/unit429.png
+%%DATADIR%%/data/gfx/unit429r.png
+%%DATADIR%%/data/gfx/unit42r.png
+%%DATADIR%%/data/gfx/unit430.png
+%%DATADIR%%/data/gfx/unit430r.png
+%%DATADIR%%/data/gfx/unit431.png
+%%DATADIR%%/data/gfx/unit431r.png
+%%DATADIR%%/data/gfx/unit432.png
+%%DATADIR%%/data/gfx/unit432r.png
+%%DATADIR%%/data/gfx/unit433.png
+%%DATADIR%%/data/gfx/unit433r.png
+%%DATADIR%%/data/gfx/unit434.png
+%%DATADIR%%/data/gfx/unit434r.png
+%%DATADIR%%/data/gfx/unit435.png
+%%DATADIR%%/data/gfx/unit435r.png
+%%DATADIR%%/data/gfx/unit436.png
+%%DATADIR%%/data/gfx/unit436r.png
+%%DATADIR%%/data/gfx/unit437.png
+%%DATADIR%%/data/gfx/unit437r.png
+%%DATADIR%%/data/gfx/unit438.png
+%%DATADIR%%/data/gfx/unit438r.png
+%%DATADIR%%/data/gfx/unit439.png
+%%DATADIR%%/data/gfx/unit439r.png
+%%DATADIR%%/data/gfx/unit43r.png
+%%DATADIR%%/data/gfx/unit440.png
+%%DATADIR%%/data/gfx/unit440r.png
+%%DATADIR%%/data/gfx/unit441.png
+%%DATADIR%%/data/gfx/unit441r.png
+%%DATADIR%%/data/gfx/unit442.png
+%%DATADIR%%/data/gfx/unit442r.png
+%%DATADIR%%/data/gfx/unit443.png
+%%DATADIR%%/data/gfx/unit443r.png
+%%DATADIR%%/data/gfx/unit444.png
+%%DATADIR%%/data/gfx/unit444r.png
+%%DATADIR%%/data/gfx/unit445.png
+%%DATADIR%%/data/gfx/unit445r.png
+%%DATADIR%%/data/gfx/unit446.png
+%%DATADIR%%/data/gfx/unit446r.png
+%%DATADIR%%/data/gfx/unit447.png
+%%DATADIR%%/data/gfx/unit447r.png
+%%DATADIR%%/data/gfx/unit44r.png
+%%DATADIR%%/data/gfx/unit45r.png
+%%DATADIR%%/data/gfx/unit46r.png
+%%DATADIR%%/data/gfx/unit47r.png
+%%DATADIR%%/data/gfx/unit48r.png
+%%DATADIR%%/data/gfx/unit49r.png
+%%DATADIR%%/data/gfx/unit4r.png
+%%DATADIR%%/data/gfx/unit50r.png
+%%DATADIR%%/data/gfx/unit51r.png
+%%DATADIR%%/data/gfx/unit52r.png
+%%DATADIR%%/data/gfx/unit53r.png
+%%DATADIR%%/data/gfx/unit54r.png
+%%DATADIR%%/data/gfx/unit55r.png
+%%DATADIR%%/data/gfx/unit56r.png
+%%DATADIR%%/data/gfx/unit57r.png
+%%DATADIR%%/data/gfx/unit58r.png
+%%DATADIR%%/data/gfx/unit59r.png
+%%DATADIR%%/data/gfx/unit5r.png
+%%DATADIR%%/data/gfx/unit60r.png
+%%DATADIR%%/data/gfx/unit61r.png
+%%DATADIR%%/data/gfx/unit62r.png
+%%DATADIR%%/data/gfx/unit63r.png
+%%DATADIR%%/data/gfx/unit64.png
+%%DATADIR%%/data/gfx/unit64r.png
+%%DATADIR%%/data/gfx/unit65.png
+%%DATADIR%%/data/gfx/unit65r.png
+%%DATADIR%%/data/gfx/unit66.png
+%%DATADIR%%/data/gfx/unit66r.png
+%%DATADIR%%/data/gfx/unit67.png
+%%DATADIR%%/data/gfx/unit67r.png
+%%DATADIR%%/data/gfx/unit68.png
+%%DATADIR%%/data/gfx/unit68r.png
+%%DATADIR%%/data/gfx/unit69.png
+%%DATADIR%%/data/gfx/unit69r.png
+%%DATADIR%%/data/gfx/unit6r.png
+%%DATADIR%%/data/gfx/unit70.png
+%%DATADIR%%/data/gfx/unit70r.png
+%%DATADIR%%/data/gfx/unit71.png
+%%DATADIR%%/data/gfx/unit71r.png
+%%DATADIR%%/data/gfx/unit72.png
+%%DATADIR%%/data/gfx/unit72r.png
+%%DATADIR%%/data/gfx/unit73.png
+%%DATADIR%%/data/gfx/unit73r.png
+%%DATADIR%%/data/gfx/unit74.png
+%%DATADIR%%/data/gfx/unit74r.png
+%%DATADIR%%/data/gfx/unit75.png
+%%DATADIR%%/data/gfx/unit75r.png
+%%DATADIR%%/data/gfx/unit76.png
+%%DATADIR%%/data/gfx/unit76r.png
+%%DATADIR%%/data/gfx/unit77.png
+%%DATADIR%%/data/gfx/unit77r.png
+%%DATADIR%%/data/gfx/unit78.png
+%%DATADIR%%/data/gfx/unit78r.png
+%%DATADIR%%/data/gfx/unit79.png
+%%DATADIR%%/data/gfx/unit79r.png
+%%DATADIR%%/data/gfx/unit7r.png
+%%DATADIR%%/data/gfx/unit80.png
+%%DATADIR%%/data/gfx/unit80r.png
+%%DATADIR%%/data/gfx/unit81.png
+%%DATADIR%%/data/gfx/unit81r.png
+%%DATADIR%%/data/gfx/unit82.png
+%%DATADIR%%/data/gfx/unit82r.png
+%%DATADIR%%/data/gfx/unit83.png
+%%DATADIR%%/data/gfx/unit83r.png
+%%DATADIR%%/data/gfx/unit84.png
+%%DATADIR%%/data/gfx/unit84r.png
+%%DATADIR%%/data/gfx/unit85.png
+%%DATADIR%%/data/gfx/unit85r.png
+%%DATADIR%%/data/gfx/unit86.png
+%%DATADIR%%/data/gfx/unit86r.png
+%%DATADIR%%/data/gfx/unit87.png
+%%DATADIR%%/data/gfx/unit87r.png
+%%DATADIR%%/data/gfx/unit88.png
+%%DATADIR%%/data/gfx/unit88r.png
+%%DATADIR%%/data/gfx/unit89.png
+%%DATADIR%%/data/gfx/unit89r.png
+%%DATADIR%%/data/gfx/unit8r.png
+%%DATADIR%%/data/gfx/unit90.png
+%%DATADIR%%/data/gfx/unit90r.png
+%%DATADIR%%/data/gfx/unit91.png
+%%DATADIR%%/data/gfx/unit91r.png
+%%DATADIR%%/data/gfx/unit92.png
+%%DATADIR%%/data/gfx/unit92r.png
+%%DATADIR%%/data/gfx/unit93.png
+%%DATADIR%%/data/gfx/unit93r.png
+%%DATADIR%%/data/gfx/unit94.png
+%%DATADIR%%/data/gfx/unit94r.png
+%%DATADIR%%/data/gfx/unit95.png
+%%DATADIR%%/data/gfx/unit95r.png
+%%DATADIR%%/data/gfx/unit96.png
+%%DATADIR%%/data/gfx/unit96r.png
+%%DATADIR%%/data/gfx/unit97.png
+%%DATADIR%%/data/gfx/unit97r.png
+%%DATADIR%%/data/gfx/unit98.png
+%%DATADIR%%/data/gfx/unit98r.png
+%%DATADIR%%/data/gfx/unit99.png
+%%DATADIR%%/data/gfx/unit99r.png
+%%DATADIR%%/data/gfx/unit9r.png
+%%DATADIR%%/data/gfx/unitmini0r.png
+%%DATADIR%%/data/gfx/unitmini1r.png
+%%DATADIR%%/data/gfx/unitmini2r.png
+%%DATADIR%%/data/gfx/wall0.png
+%%DATADIR%%/data/gfx/wall0r.png
+%%DATADIR%%/data/gfx/wall1.png
+%%DATADIR%%/data/gfx/wall10.png
+%%DATADIR%%/data/gfx/wall10r.png
+%%DATADIR%%/data/gfx/wall11.png
+%%DATADIR%%/data/gfx/wall11r.png
+%%DATADIR%%/data/gfx/wall12.png
+%%DATADIR%%/data/gfx/wall12r.png
+%%DATADIR%%/data/gfx/wall13.png
+%%DATADIR%%/data/gfx/wall13r.png
+%%DATADIR%%/data/gfx/wall14.png
+%%DATADIR%%/data/gfx/wall14r.png
+%%DATADIR%%/data/gfx/wall15.png
+%%DATADIR%%/data/gfx/wall15r.png
+%%DATADIR%%/data/gfx/wall1r.png
+%%DATADIR%%/data/gfx/wall2.png
+%%DATADIR%%/data/gfx/wall2r.png
+%%DATADIR%%/data/gfx/wall3.png
+%%DATADIR%%/data/gfx/wall3r.png
+%%DATADIR%%/data/gfx/wall4.png
+%%DATADIR%%/data/gfx/wall4r.png
+%%DATADIR%%/data/gfx/wall5.png
+%%DATADIR%%/data/gfx/wall5r.png
+%%DATADIR%%/data/gfx/wall6.png
+%%DATADIR%%/data/gfx/wall6r.png
+%%DATADIR%%/data/gfx/wall7.png
+%%DATADIR%%/data/gfx/wall7r.png
+%%DATADIR%%/data/gfx/wall8.png
+%%DATADIR%%/data/gfx/wall8r.png
+%%DATADIR%%/data/gfx/wall9.png
+%%DATADIR%%/data/gfx/wall9r.png
+%%DATADIR%%/data/gfx/wallc0.png
+%%DATADIR%%/data/gfx/wallc0r.png
+%%DATADIR%%/data/gfx/warflag0r.png
+%%DATADIR%%/data/gfx/water0.png
+%%DATADIR%%/data/gfx/water1.png
+%%DATADIR%%/data/gui/editor0.png
+%%DATADIR%%/data/gui/editor1.png
+%%DATADIR%%/data/gui/editor10.png
+%%DATADIR%%/data/gui/editor11.png
+%%DATADIR%%/data/gui/editor12.png
+%%DATADIR%%/data/gui/editor13.png
+%%DATADIR%%/data/gui/editor14.png
+%%DATADIR%%/data/gui/editor15.png
+%%DATADIR%%/data/gui/editor16.png
+%%DATADIR%%/data/gui/editor17.png
+%%DATADIR%%/data/gui/editor18.png
+%%DATADIR%%/data/gui/editor19.png
+%%DATADIR%%/data/gui/editor2.png
+%%DATADIR%%/data/gui/editor20.png
+%%DATADIR%%/data/gui/editor21.png
+%%DATADIR%%/data/gui/editor22.png
+%%DATADIR%%/data/gui/editor23.png
+%%DATADIR%%/data/gui/editor24.png
+%%DATADIR%%/data/gui/editor25.png
+%%DATADIR%%/data/gui/editor26.png
+%%DATADIR%%/data/gui/editor27.png
+%%DATADIR%%/data/gui/editor28.png
+%%DATADIR%%/data/gui/editor29.png
+%%DATADIR%%/data/gui/editor3.png
+%%DATADIR%%/data/gui/editor30.png
+%%DATADIR%%/data/gui/editor31.png
+%%DATADIR%%/data/gui/editor32.png
+%%DATADIR%%/data/gui/editor33.png
+%%DATADIR%%/data/gui/editor4.png
+%%DATADIR%%/data/gui/editor5.png
+%%DATADIR%%/data/gui/editor6.png
+%%DATADIR%%/data/gui/editor7.png
+%%DATADIR%%/data/gui/editor8.png
+%%DATADIR%%/data/gui/editor9.png
+%%DATADIR%%/data/gui/yog0.png
+%%DATADIR%%/data/gui/yog1.png
+%%DATADIR%%/data/keyboard-gui.default.txt
+%%DATADIR%%/data/keyboard-mapedit.default.txt
+%%DATADIR%%/data/nicowar.default.txt
+%%DATADIR%%/data/nicowar.txt
+%%DATADIR%%/data/pal.txt
+%%DATADIR%%/data/ressources.txt
+%%DATADIR%%/data/texts.ar.txt
+%%DATADIR%%/data/texts.br.txt
+%%DATADIR%%/data/texts.ca.txt
+%%DATADIR%%/data/texts.cz.txt
+%%DATADIR%%/data/texts.de.txt
+%%DATADIR%%/data/texts.dk.txt
+%%DATADIR%%/data/texts.en.txt
+%%DATADIR%%/data/texts.es.txt
+%%DATADIR%%/data/texts.eu.txt
+%%DATADIR%%/data/texts.fr.txt
+%%DATADIR%%/data/texts.gr.txt
+%%DATADIR%%/data/texts.hu.txt
+%%DATADIR%%/data/texts.incomplete.txt
+%%DATADIR%%/data/texts.it.txt
+%%DATADIR%%/data/texts.keys.txt
+%%DATADIR%%/data/texts.list.txt
+%%DATADIR%%/data/texts.nl.txt
+%%DATADIR%%/data/texts.pl.txt
+%%DATADIR%%/data/texts.pt.txt
+%%DATADIR%%/data/texts.ro.txt
+%%DATADIR%%/data/texts.ru.txt
+%%DATADIR%%/data/texts.si.txt
+%%DATADIR%%/data/texts.sk.txt
+%%DATADIR%%/data/texts.sr.txt
+%%DATADIR%%/data/texts.sv.txt
+%%DATADIR%%/data/texts.tr.txt
+%%DATADIR%%/data/texts.zh-tw.txt
+%%DATADIR%%/data/units.txt
+%%DATADIR%%/data/unitsSkins.txt
+%%DATADIR%%/data/zik/a1.ogg
+%%DATADIR%%/data/zik/a2.ogg
+%%DATADIR%%/data/zik/a3.ogg
+%%DATADIR%%/data/zik/intro.ogg
+%%DATADIR%%/data/zik/menu.ogg
+%%DATADIR%%/maps/A_big_pond.map
+%%DATADIR%%/maps/Centerfolds_2.map
+%%DATADIR%%/maps/Easy_Three.map
+%%DATADIR%%/maps/FourSquares1.map
+%%DATADIR%%/maps/G2.map
+%%DATADIR%%/maps/Garden_3.map
+%%DATADIR%%/maps/Holiday_Island_2.map
+%%DATADIR%%/maps/Isles.map
+%%DATADIR%%/maps/Migration.map
+%%DATADIR%%/maps/Muka.map
+%%DATADIR%%/maps/One_on_One.map
+%%DATADIR%%/maps/Playground.map
+%%DATADIR%%/maps/Scarse_Supply.map
+%%DATADIR%%/maps/SmallForTwo.map
+%%DATADIR%%/maps/Tower_Defense_for_2.map
+%%DATADIR%%/maps/Triangle.map
+%%DATADIR%%/maps/WaterInTheDesert.map
+%%DATADIR%%/maps/Wild_River.map
+%%DATADIR%%/maps/a_new_try.map
+%%DATADIR%%/maps/newislands_green_blue.map
+%%DATADIR%%/maps/stone_bases.map
+%%DATADIR%%/maps/strange2.map
+%%DATADIR%%/maps/the_sand_square.map
+%%DATADIR%%/maps/weakness.map
+%%DATADIR%%/scripts/tutorial_part1.sgsl
+%%DATADIR%%/scripts/tutorial_part2.sgsl
+%%DATADIR%%/scripts/tutorial_part3.sgsl
+%%DATADIR%%/scripts/tutorial_part4.sgsl
+share/icons/hicolor/128x128/apps/glob2.png
+share/icons/hicolor/16x16/apps/glob2.png
+share/icons/hicolor/24x24/apps/glob2.png
+share/icons/hicolor/32x32/apps/glob2.png
+share/icons/hicolor/48x48/apps/glob2.png
+share/icons/hicolor/64x64/apps/glob2.png
+share/pixmaps/glob2.png
diff --git a/games/marsnomercy/Makefile b/games/marsnomercy/Makefile
new file mode 100644
index 000000000000..e495ee113738
--- /dev/null
+++ b/games/marsnomercy/Makefile
@@ -0,0 +1,55 @@
+# Created by: Jose Alonso Cardenas Marquez <acardenas@bsd.org.pe>
+# $FreeBSD$
+
+PORTNAME= marsnomercy
+PORTVERSION= 0.2.1
+PORTREVISION= 13
+CATEGORIES= games
+MASTER_SITES= SF/mars/mars/${PORTVERSION}
+DISTNAME= mars-${PORTVERSION}-src
+
+MAINTAINER= ports@FreeBSD.org
+COMMENT= Turn-based strategy game setting on Mars
+
+LICENSE= GPLv2 # version unspecified actually
+
+LIB_DEPENDS= libpng.so:graphics/png
+
+USES= compiler gl scons:python2 sdl
+USE_GL= gl
+USE_SDL= sdl image ttf
+SCONS_ARGS= prefix=${PREFIX}
+
+CXXFLAGS+= ${CXXFLAGS_${CHOSEN_COMPILER_TYPE}}
+CXXFLAGS_clang= -Wno-c++11-narrowing
+SUB_FILES= mars-nomercy pkg-message
+WRKSRC= ${WRKDIR}/mars-${PORTVERSION}
+
+PLIST_FILES= bin/mars-nomercy \
+ libexec/mars
+PLIST_DIRS= %%DATADIR%%/img/units/mercenaries
+PORTDATA= *
+
+OPTIONS_DEFINE= DEBUG OPENGL
+
+.include <bsd.port.options.mk>
+
+.if ${PORT_OPTIONS:MDEBUG}
+SCONS_ARGS+= debug=1
+.else
+SCONS_ARGS+= debug=0
+.endif
+
+.if ${PORT_OPTIONS:MOPENGL}
+SCONS_ARGS+= with_opengl=1
+.else
+SCONS_ARGS+= with_opengl=0
+.endif
+
+do-install:
+ ${INSTALL_SCRIPT} ${WRKDIR}/mars-nomercy ${STAGEDIR}${PREFIX}/bin/
+ ${INSTALL_PROGRAM} ${WRKSRC}/mars ${STAGEDIR}${PREFIX}/libexec/mars
+ cd ${WRKSRC}/data && ${COPYTREE_SHARE} . ${STAGEDIR}${DATADIR}
+ @${RM} ${STAGEDIR}${DATADIR}/SConscript
+
+.include <bsd.port.mk>
diff --git a/games/marsnomercy/distinfo b/games/marsnomercy/distinfo
new file mode 100644
index 000000000000..0e0e54bca95e
--- /dev/null
+++ b/games/marsnomercy/distinfo
@@ -0,0 +1,2 @@
+SHA256 (mars-0.2.1-src.tar.gz) = 6c3f78a505f6b2989dd024ee3b1e707a38981ebe0177d6eca32b40e70ed16f49
+SIZE (mars-0.2.1-src.tar.gz) = 2728661
diff --git a/games/marsnomercy/files/mars-nomercy.in b/games/marsnomercy/files/mars-nomercy.in
new file mode 100644
index 000000000000..77318dc2d453
--- /dev/null
+++ b/games/marsnomercy/files/mars-nomercy.in
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+if [ -d "~/.marsnomercy" ]; then
+ cd ~/.marsomercy || exit 1
+ exec %%PREFIX%%/libexec/mars "$@"
+else
+ cd %%DATADIR%% || exit 1
+ find * -type d -exec mkdir -p ~/.marsnomercy/data/{} \; || exit 1
+ find * -type f -exec ln -s %%DATADIR%%/{} ~/.marsnomercy/data/{} \; 2>/dev/null || exit 1
+ cd ~/.marsnomercy || exit 1
+ exec %%PREFIX%%/libexec/mars "$@"
+fi
diff --git a/games/marsnomercy/files/patch-SConstruct b/games/marsnomercy/files/patch-SConstruct
new file mode 100644
index 000000000000..a6286c75b53a
--- /dev/null
+++ b/games/marsnomercy/files/patch-SConstruct
@@ -0,0 +1,108 @@
+--- SConstruct.orig 2006-12-19 00:56:15 UTC
++++ SConstruct
+@@ -1,22 +1,22 @@
+ import sys, os
+
+-# create build environment and options
++# create build environment and variables
+ env = Environment()
+-opts = Options()
++opts = Variables()
+
+ # OPTION debug
+-opts.Add(BoolOption('debug', 'Set to yes (or 1) to build for debug', 'no'))
++opts.Add(BoolVariable('debug', 'Set to yes (or 1) to build for debug', 'no'))
+ # OPTION strip
+-opts.Add(BoolOption('strip', 'Set to no (or 0) to avoid stripping binaries', 'yes'))
++opts.Add(BoolVariable('strip', 'Set to no (or 0) to avoid stripping binaries', 'yes'))
+ # OPTION warning
+-opts.Add(BoolOption('warnings', 'Set to yes (or 1) to print all warnings', 'yes'))
++opts.Add(BoolVariable('warnings', 'Set to yes (or 1) to print all warnings', 'yes'))
+ # OPTION with_opengl
+-opts.Add(BoolOption('with_opengl', 'Set to no (or 0) if you do not want OpenGL support in the game', 'yes'))
++opts.Add(BoolVariable('with_opengl', 'Set to no (or 0) if you do not want OpenGL support in the game', 'yes'))
+ # OPTION root & prefix
+-opts.Add(PathOption('root', 'Path to the fakeroot directory', '/'))
+-opts.Add(PathOption('prefix', 'Path to prefix to default destinations', '/usr/local'))
+-# Adding options to the environment
+-env = Environment(options = opts)
++opts.Add(PathVariable('root', 'Path to the fakeroot directory', '/'))
++opts.Add(PathVariable('prefix', 'Path to prefix to default destinations', '/usr/local'))
++# Adding variables to the environment
++env = Environment(variables = opts)
+
+ if 'install' in sys.argv:
+ root = ARGUMENTS.get('root', '/')
+@@ -33,17 +33,17 @@ else:
+
+ # OPTION no_mingw
+ if env['PLATFORM'] == 'cygwin':
+- opts.Add(BoolOption('no_mingw', 'Set to yes (or 1) to build without mingw', 'no'))
+- env = Environment(options = opts)
++ opts.Add(BoolVariable('no_mingw', 'Set to yes (or 1) to build without mingw', 'no'))
++ env = Environment(variables = opts)
+
+ # PLATFORM mingw under cygwin
+ if env['PLATFORM'] == 'cygwin' and not int(env['no_mingw']):
+- # add mingw specific options
+- opts.AddOptions(
+- PathOption('mingw_cygdir', 'where your mingw installation is located under cygwin', '/mingw'),
+- PathOption('mingw_windir', 'where your mingw installation is located under cygwin', 'F:/Programmi/Dev-Cpp')
++ # add mingw specific variables
++ opts.AddVariables(
++ PathVariable('mingw_cygdir', 'where your mingw installation is located under cygwin', '/mingw'),
++ PathVariable('mingw_windir', 'where your mingw installation is located under cygwin', 'F:/Programmi/Dev-Cpp')
+ )
+- env = Environment(options = opts)
++ env = Environment(variables = opts)
+
+ mingw_cygdir = env['mingw_cygdir']
+ mingw_windir = env['mingw_windir']
+@@ -57,15 +57,21 @@ if env['PLATFORM'] == 'cygwin' and not i
+
+ # PLATFORM posix or pure cygwin
+ else:
++ # Section used for FreeBSD port
++ LOCALBASE = os.environ['LOCALBASE']
++ LOCALBASE = os.environ['LOCALBASE']
+ # determine compiler and linker flags for SDL
+- env.ParseConfig('sdl-config --cflags')
+- env.ParseConfig('sdl-config --libs')
++ SDL_CONFIG = os.environ['SDL_CONFIG']
++ env.ParseConfig(SDL_CONFIG + ' --cflags')
++ env.ParseConfig(SDL_CONFIG + ' --libs')
+ # add additional compiler flags
+- if not int(env['debug']):
+- env.Append(CXXFLAGS = ['-O2'])
+-
++ env.Replace(CC = os.environ['CC'])
++ env.Replace(CXX = os.environ['CXX'])
++ env.Replace(CPPPATH = [LOCALBASE + '/include',LOCALBASE+ '/include'])
++ env.Replace(LIBPATH = [LOCALBASE + '/lib',LOCALBASE+ '/lib'])
++ env.Append(CXXFLAGS = os.environ['CXXFLAGS'] + ' `' + SDL_CONFIG + ' --cflags`')
+
+-# generate help for options
++# generate help for variables
+ Help(opts.GenerateHelpText(env))
+
+ # build for debug
+@@ -92,16 +98,16 @@ if data_dir != '': # installation requir
+ if not env.GetOption('clean'):
+ print ":: Checking for libs"
+ conf = Configure(env)
+- if not conf.CheckLibWithHeader('SDL', 'SDL.h', 'c', 'SDL_Init(SDL_INIT_VIDEO);', autoadd = 0):
++ if not conf.CheckLibWithHeader('SDL', 'SDL/SDL.h', 'c', 'SDL_Init(SDL_INIT_VIDEO);', autoadd = 0):
+ print 'Did not find libSDL, exiting!'
+ Exit(1)
+ if not conf.CheckLibWithHeader('png', 'png.h', 'c', 'png_error(NULL, "test");'):
+ print 'Did not find libpng, exiting!'
+ Exit(1)
+- if not conf.CheckLibWithHeader('SDL_image', 'SDL_image.h', 'c', 'IMG_GetError();'):
++ if not conf.CheckLibWithHeader('SDL_image', 'SDL/SDL_image.h', 'c', 'IMG_GetError();'):
+ print 'Did not find libSDL_image, exiting!'
+ Exit(1)
+- if not conf.CheckLibWithHeader('SDL_ttf', 'SDL_ttf.h', 'c', 'TTF_Init();'):
++ if not conf.CheckLibWithHeader('SDL_ttf', 'SDL/SDL_ttf.h', 'c', 'TTF_Init();'):
+ print 'Did not find libSDL_ttf, exiting!'
+ Exit(1)
+ if int(env['with_opengl']):
diff --git a/games/marsnomercy/files/pkg-message.in b/games/marsnomercy/files/pkg-message.in
new file mode 100644
index 000000000000..d09c1cd95abc
--- /dev/null
+++ b/games/marsnomercy/files/pkg-message.in
@@ -0,0 +1,14 @@
+[
+{ type: install
+ message: <<EOM
+1) I renamed this port to marsnomercy (Mars Land of No Mercy), because exist a
+ port using mars name (cad/mars).
+
+2) Run mars:
+
+ # mars-nomercy
+
+3) Enjoy it ;)
+EOM
+}
+]
diff --git a/games/marsnomercy/pkg-descr b/games/marsnomercy/pkg-descr
new file mode 100644
index 000000000000..071384d6a487
--- /dev/null
+++ b/games/marsnomercy/pkg-descr
@@ -0,0 +1,21 @@
+Mars, Land of No Mercy is a turn-based strategy game setting on Mars during the
+early stages of human colonization.The player embodies the leader of a
+mercenary team, landed on Mars to take advantage of conqueror battles between
+the Worldwide Colonizer Corporations.
+
+The main purpose is to command his team trying to find them commissions,
+training and leading them in battle, while still being aware of financial and
+instrumental resources by administering them.The Mech is the fundamental craft
+used by mercenaries, but they won't lack of other kind of units, as well as
+troops.
+
+The game most remarkable point is the incredible liberty given to the player
+and therefore the great strategic side that derives. It is indeed up to the
+player to decide how to behave towards the one who recruited him, and the
+enemies of turn.
+
+Basically every action leads to a reaction, so it is strongly recommended to
+keep a good and consistent behavior to achieve confidence from Corporations,
+and avoid being excluded by them.
+
+WWW: http://mars.sourceforge.net/
diff --git a/games/netpanzer/Makefile b/games/netpanzer/Makefile
new file mode 100644
index 000000000000..7a0bf9b1a855
--- /dev/null
+++ b/games/netpanzer/Makefile
@@ -0,0 +1,53 @@
+# $FreeBSD$
+
+PORTNAME= netpanzer
+PORTVERSION= 0.8.7
+DISTVERSIONSUFFIX= -source
+CATEGORIES= games
+MASTER_SITES= http://www.netpanzer.info/Download/NetPanzer/Releases/${PORTVERSION}/
+
+MAINTAINER= madpilot@FreeBSD.org
+COMMENT= Real time, isometric view, tank multiplayer strategy game
+
+LICENSE= GPLv2
+LICENSE_FILE= ${WRKSRC}/COPYING
+
+LDFLAGS+= -lpthreads
+
+USES= gnome scons:python2 sdl zip
+USE_SDL= sdl mixer image
+USE_GNOME= libxml2
+MAKE_ARGS+= datadir="${DATADIR}"
+NO_WRKSUBDIR= yes
+
+PLIST_FILES= bin/netpanzer \
+ share/applications/netpanzer.desktop \
+ share/pixmaps/netpanzer.png \
+ share/pixmaps/netpanzer.xpm
+
+PORTDOCS= *
+PORTDATA= *
+
+OPTIONS_DEFINE= DOCS
+
+post-configure:
+ ${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|g' ${WRKSRC}/SConstruct
+
+do-install:
+ ${INSTALL_PROGRAM} ${WRKSRC}/netpanzer ${STAGEDIR}${PREFIX}/bin
+ ${MKDIR} ${STAGEDIR}${DATADIR}
+ (cd ${WRKSRC} && ${COPYTREE_SHARE} "cache maps pics powerups scripts sound units wads" \
+ ${STAGEDIR}${DATADIR})
+ ${INSTALL_DATA} ${WRKSRC}/support/win32/netpanzer.desktop ${STAGEDIR}${PREFIX}/share/applications
+ ${INSTALL_DATA} ${WRKSRC}/netpanzer.png ${WRKSRC}/support/icon/netpanzer.xpm \
+ ${STAGEDIR}${PREFIX}/share/pixmaps
+ ${MKDIR} ${STAGEDIR}${DOCSDIR}
+ (cd ${WRKSRC} && ${INSTALL_DATA} COPYING README ${STAGEDIR}${DOCSDIR})
+ (cd ${WRKSRC}/docs && ${INSTALL_DATA} code-notes.txt coding.txt old/serverhowto.html \
+ ${STAGEDIR}${DOCSDIR})
+
+do-fetch-svn:
+ svn export svn://svn.berlios.de/${PORTNAME}/tags/${PORTNAME}/${PORTVERSION} ${PORTNAME}-${PORTVERSION}
+ tar cjf ${PORTNAME}-${PORTVERSION}.tar.bz2 ${PORTNAME}-${PORTVERSION}
+
+.include <bsd.port.mk>
diff --git a/games/netpanzer/distinfo b/games/netpanzer/distinfo
new file mode 100644
index 000000000000..0b7f77bf3ba1
--- /dev/null
+++ b/games/netpanzer/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1516265645
+SHA256 (netpanzer-0.8.7-source.zip) = 90e2b78d43cc32fb3f6af027788162dc9d272941f9630b43fc34f203a55c86a7
+SIZE (netpanzer-0.8.7-source.zip) = 13466285
diff --git a/games/netpanzer/files/patch-SConstruct b/games/netpanzer/files/patch-SConstruct
new file mode 100644
index 000000000000..a4bf784e5ad8
--- /dev/null
+++ b/games/netpanzer/files/patch-SConstruct
@@ -0,0 +1,19 @@
+--- SConstruct.orig 2016-04-09 13:14:00 UTC
++++ SConstruct
+@@ -95,7 +95,7 @@ opts.AddVariables(
+ ('compilerprefix', 'sets the prefix for the cross linux compiler, example: i686-pc-linux-gnu-', ''),
+ )
+
+-env = Environment(ENV = os.environ, options = opts)
++env = Environment(ENV = os.environ, options = opts, CC = os.environ['CC'], CXX = os.environ['CXX'])
+ Help(opts.GenerateHelpText(env))
+
+ env.Append( CCFLAGS = [ '-DPACKAGE_VERSION=\\"' + NPVERSION + '\\"' ] )
+@@ -202,6 +202,7 @@ elif thisplatform == 'win32':
+ else:
+ networkenv.ParseConfig(env['sdlconfig'] + ' --cflags --libs')
+ env.ParseConfig(env['sdlconfig'] + ' --cflags --libs')
++ env.Append( _LIBFLAGS = [ '-L%%LOCALBASE%%/lib' ] )
+ # note: for some magic reason, now doesn't need to put the full path for
+ # SDL_mixer when using mingw crosscompilation
+ env.Append( LIBS = ['SDL_mixer' ] )
diff --git a/games/netpanzer/files/patch-src_Lib_Network_Address.hpp b/games/netpanzer/files/patch-src_Lib_Network_Address.hpp
new file mode 100644
index 000000000000..64e303d095ca
--- /dev/null
+++ b/games/netpanzer/files/patch-src_Lib_Network_Address.hpp
@@ -0,0 +1,11 @@
+--- src/Lib/Network/Address.hpp.orig 2016-04-09 13:14:00 UTC
++++ src/Lib/Network/Address.hpp
+@@ -62,7 +62,7 @@ class Address (public)
+ struct sockaddr * getSockaddr() const { return (struct sockaddr *)&ss; };
+ socklen_t getSockaddrLen() const
+ {
+-#ifdef __APPLE__
++#if defined(__APPLE__) || defined(__FreeBSD__)
+ return sizeof(sockaddr_in);
+ #else
+ return ss_len;
diff --git a/games/netpanzer/files/patch-src_Lib_Network_SocketBase.cpp b/games/netpanzer/files/patch-src_Lib_Network_SocketBase.cpp
new file mode 100644
index 000000000000..e73e49b5f30d
--- /dev/null
+++ b/games/netpanzer/files/patch-src_Lib_Network_SocketBase.cpp
@@ -0,0 +1,11 @@
+--- src/Lib/Network/SocketBase.cpp.orig 2016-04-09 13:14:00 UTC
++++ src/Lib/Network/SocketBase.cpp
+@@ -147,7 +147,7 @@ SocketBase::bindSocketTo(const Address& toaddr) throw(
+ {
+ if ( state == CONFIGURED )
+ {
+- int res = bind(sockfd, toaddr.getSockaddr(), toaddr.getSockaddrLen());
++ int res = ::bind(sockfd, toaddr.getSockaddr(), toaddr.getSockaddrLen());
+ if(res == SOCKET_ERROR) {
+ lastError = GET_NET_ERROR();
+ doClose();
diff --git a/games/netpanzer/files/patch-src_Lib_optionmm_command__line.hpp b/games/netpanzer/files/patch-src_Lib_optionmm_command__line.hpp
new file mode 100644
index 000000000000..f3fd7b704651
--- /dev/null
+++ b/games/netpanzer/files/patch-src_Lib_optionmm_command__line.hpp
@@ -0,0 +1,17 @@
+--- src/Lib/optionmm/command_line.hpp.orig 2007-04-16 13:36:42 UTC
++++ src/Lib/optionmm/command_line.hpp
+@@ -212,7 +212,13 @@ struct toggle_value<bool>
+ {
+ x = !x;
+ }
+-#if defined(__GNUC__) && __GNUC__ >= 2
++
++#if defined(__clang__)
++ inline void operator()(std::__bit_reference<std::vector<bool> > x)
++ {
++ x.flip();
++ }
++#elif defined(__GNUC__) && __GNUC__ >= 2
+ inline void operator()(std::_Bit_reference x)
+ {
+ x.flip();
diff --git a/games/netpanzer/pkg-descr b/games/netpanzer/pkg-descr
new file mode 100644
index 000000000000..397b69683180
--- /dev/null
+++ b/games/netpanzer/pkg-descr
@@ -0,0 +1,8 @@
+netPanzer is an online multiplayer tactical warfare game designed
+for FAST ACTION combat. Gameplay concentrates on the core -- no
+resource management is needed. The game is based on quick tactical
+action and unit management in real-time. Battles progress quickly
+and constantly as destroyed players respawn with a set of new units.
+Players can join or leave multiplayer games at any time.
+
+WWW: http://www.netpanzer.org/
diff --git a/games/pingus/Makefile b/games/pingus/Makefile
new file mode 100644
index 000000000000..d9c1f593d9b3
--- /dev/null
+++ b/games/pingus/Makefile
@@ -0,0 +1,48 @@
+# Created by: Jose Alonso Cardenas Marquez <acm@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= pingus
+PORTVERSION= 0.7.6
+PORTREVISION= 22
+CATEGORIES= games
+MASTER_SITES= https://mirror.amdmi3.ru/distfiles/
+
+MAINTAINER= amdmi3@FreeBSD.org
+COMMENT= Free Lemmings-like game
+
+LICENSE= GPLv3+
+LICENSE_FILE= ${WRKSRC}/COPYING
+
+BUILD_DEPENDS= ${LOCALBASE}/include/boost/signals2.hpp:devel/boost-libs
+LIB_DEPENDS= libpng.so:graphics/png
+
+USES= compiler:c++11-lib gl iconv scons:python2 sdl tar:bzip2 xorg
+USE_GL= gl
+USE_SDL= sdl image mixer
+LIBS+= ${ICONV_LIB}
+MAKE_ARGS= LIBS="${LIBS}"
+
+PLIST_FILES= bin/${PORTNAME} \
+ share/pixmaps/${PORTNAME}.png
+PORTDATA= *
+
+DESKTOP_ENTRIES="Pingus" \
+ "" \
+ "${PORTNAME}" \
+ "${PORTNAME}" \
+ "Game;LogicGame;" \
+ false
+
+post-patch:
+ @${REINPLACE_CMD} -e '/g_path_manager.set_path("data")/ s|data|${DATADIR}|g' \
+ ${WRKSRC}/src/pingus/pingus_main.cpp
+ @${REINPLACE_CMD} -e '/CheckLib.*iconv/ d' ${WRKSRC}/SConscript
+
+do-install:
+ (cd ${WRKSRC}/data && \
+ ${COPYTREE_SHARE} . ${STAGEDIR}${DATADIR})
+ ${INSTALL_PROGRAM} ${WRKSRC}/build/${PORTNAME} ${STAGEDIR}${PREFIX}/bin/${PORTNAME}
+ ${INSTALL_DATA} ${WRKSRC}/data/images/icons/pingus-icon.png \
+ ${STAGEDIR}${PREFIX}/share/pixmaps/${PORTNAME}.png
+
+.include <bsd.port.mk>
diff --git a/games/pingus/distinfo b/games/pingus/distinfo
new file mode 100644
index 000000000000..74b7bcfbbd9c
--- /dev/null
+++ b/games/pingus/distinfo
@@ -0,0 +1,5 @@
+TIMESTAMP = 1324763207
+SHA256 (pingus-0.7.6.tar.bz2) = 759c1253075d1e72691bc1e770b24cdd51917041fd1857c1daf85b65a6686460
+SIZE (pingus-0.7.6.tar.bz2) = 12622268
+SHA256 (fef8cf6512fa.patch) = cb4788d014fd4c479d95203c442ffb65a8bdb4223219a3cc5e3ab09f9b3a4894
+SIZE (fef8cf6512fa.patch) = 12316
diff --git a/games/pingus/files/patch-SConscript b/games/pingus/files/patch-SConscript
new file mode 100644
index 000000000000..214f4d3ebb2f
--- /dev/null
+++ b/games/pingus/files/patch-SConscript
@@ -0,0 +1,13 @@
+Properly split multiple arguments passed via CXXFLAGS
+--- SConscript.orig 2011-12-24 21:46:47 UTC
++++ SConscript
+@@ -120,6 +120,9 @@ class Project:
+ 'CheckSDLLib': CheckSDLLib,
+ 'CheckIconv': CheckIconv,
+ })
++
++ self.env["CXXFLAGS"] = sum(map (lambda x: x.split(" "), self.env["CXXFLAGS"]), [])
++
+ self.fatal_error = ""
+ self.reports = ""
+
diff --git a/games/pingus/files/patch-boost-signals2 b/games/pingus/files/patch-boost-signals2
new file mode 100644
index 000000000000..e412ffbb2e73
--- /dev/null
+++ b/games/pingus/files/patch-boost-signals2
@@ -0,0 +1,380 @@
+From fef8cf6512fa4aa09e87643c22ef66de9ec7bb41 Mon Sep 17 00:00:00 2001
+From: Ingo Ruhnke <grumbel@gmail.com>
+Date: Sat, 26 Jul 2014 20:49:11 +0200
+Subject: [PATCH] Switched to boost::signals2
+
+---
+ SConscript | 5 ++---
+ src/editor/button.hpp | 4 ++--
+ src/editor/checkbox.hpp | 4 ++--
+ src/editor/combobox.hpp | 4 ++--
+ src/editor/file_list.hpp | 4 ++--
+ src/editor/inputbox.hpp | 6 +++---
+ src/editor/message_box.hpp | 2 +-
+ src/editor/object_selector.cpp | 4 ++--
+ src/editor/viewport.hpp | 4 ++--
+ src/pingus/components/check_box.hpp | 4 ++--
+ src/pingus/components/choice_box.hpp | 4 ++--
+ src/pingus/components/slider_box.hpp | 4 ++--
+ src/pingus/config_manager.hpp | 28 ++++++++++++++--------------
+ src/pingus/screens/option_menu.hpp | 4 ++--
+ 14 files changed, 40 insertions(+), 41 deletions(-)
+
+diff --git a/SConscript b/SConscript
+index 758567f51..c4d25a8a9 100644
+--- SConscript
++++ SConscript
+@@ -187,9 +187,8 @@ class Project:
+ 'src/engine/input/xinput/xinput_device.cpp'])
+
+ def configure_boost(self):
+- if not self.conf.CheckLibWithHeader('boost_signals', 'boost/signals.hpp', 'c++'):
+- if not self.conf.CheckLibWithHeader('boost_signals-mt', 'boost/signals.hpp', 'c++'):
+- self.fatal_error += " * library 'boost_signals' not found\n"
++ if not self.conf.CheckHeader('boost/signals2.hpp', '<>', 'c++'):
++ self.fatal_error += " * library 'boost_signals2' not found\n"
+
+ def configure_png(self):
+ if self.conf.CheckMyProgram('pkg-config'):
+diff --git a/src/editor/button.hpp b/src/editor/button.hpp
+index c85d7da9e..d89dfe669 100644
+--- src/editor/button.hpp
++++ src/editor/button.hpp
+@@ -17,7 +17,7 @@
+ #ifndef HEADER_PINGUS_EDITOR_BUTTON_HPP
+ #define HEADER_PINGUS_EDITOR_BUTTON_HPP
+
+-#include <boost/signal.hpp>
++#include <boost/signals2.hpp>
+
+ #include "engine/gui/rect_component.hpp"
+
+@@ -48,7 +48,7 @@ public:
+ void enable() { enabled = true; }
+ void disable() { enabled = false; }
+
+- boost::signal<void()> on_click;
++ boost::signals2::signal<void()> on_click;
+
+ private:
+ Button (const Button&);
+diff --git a/src/editor/checkbox.hpp b/src/editor/checkbox.hpp
+index 7c3bc835f..66382d79b 100644
+--- src/editor/checkbox.hpp
++++ src/editor/checkbox.hpp
+@@ -17,7 +17,7 @@
+ #ifndef HEADER_PINGUS_EDITOR_CHECKBOX_HPP
+ #define HEADER_PINGUS_EDITOR_CHECKBOX_HPP
+
+-#include <boost/signal.hpp>
++#include <boost/signals2.hpp>
+
+ #include "engine/gui/rect_component.hpp"
+
+@@ -40,7 +40,7 @@ public:
+ bool is_checked() const { return checked; }
+ void on_primary_button_press(int x, int y);
+
+- boost::signal<void (bool)> on_change;
++ boost::signals2::signal<void (bool)> on_change;
+
+ private:
+ Checkbox (const Checkbox&);
+diff --git a/src/editor/combobox.hpp b/src/editor/combobox.hpp
+index 0ca742593..603556bd9 100644
+--- src/editor/combobox.hpp
++++ src/editor/combobox.hpp
+@@ -18,7 +18,7 @@
+ #ifndef HEADER_PINGUS_EDITOR_COMBOBOX_HPP
+ #define HEADER_PINGUS_EDITOR_COMBOBOX_HPP
+
+-#include <boost/signal.hpp>
++#include <boost/signals2.hpp>
+
+ #include "engine/display/sprite.hpp"
+ #include "engine/gui/rect_component.hpp"
+@@ -88,7 +88,7 @@ public:
+
+ void update_layout() {}
+
+- boost::signal<void (const ComboItem&)> on_select;
++ boost::signals2::signal<void (const ComboItem&)> on_select;
+
+ private:
+ Combobox();
+diff --git a/src/editor/file_list.hpp b/src/editor/file_list.hpp
+index cc4bba2de..85efe6aa0 100644
+--- src/editor/file_list.hpp
++++ src/editor/file_list.hpp
+@@ -17,7 +17,7 @@
+ #ifndef HEADER_PINGUS_EDITOR_FILE_LIST_HPP
+ #define HEADER_PINGUS_EDITOR_FILE_LIST_HPP
+
+-#include <boost/signal.hpp>
++#include <boost/signals2.hpp>
+
+ #include "engine/display/sprite.hpp"
+ #include "engine/gui/rect_component.hpp"
+@@ -61,7 +61,7 @@ public:
+ bool has_more_next_pages();
+ bool has_more_prev_pages();
+
+- boost::signal<void (const System::DirectoryEntry&)> on_click;
++ boost::signals2::signal<void (const System::DirectoryEntry&)> on_click;
+
+ private:
+ int items_per_page();
+diff --git a/src/editor/inputbox.hpp b/src/editor/inputbox.hpp
+index cad9663ec..87321dbba 100644
+--- src/editor/inputbox.hpp
++++ src/editor/inputbox.hpp
+@@ -17,7 +17,7 @@
+ #ifndef HEADER_PINGUS_EDITOR_INPUTBOX_HPP
+ #define HEADER_PINGUS_EDITOR_INPUTBOX_HPP
+
+-#include <boost/signal.hpp>
++#include <boost/signals2.hpp>
+
+ #include "engine/gui/rect_component.hpp"
+
+@@ -40,8 +40,8 @@ public:
+
+ void update_layout() {}
+
+- boost::signal<void (const std::string&)> on_change;
+- boost::signal<void (const std::string&)> on_enter;
++ boost::signals2::signal<void (const std::string&)> on_change;
++ boost::signals2::signal<void (const std::string&)> on_enter;
+
+ private:
+ Inputbox (const Inputbox&);
+diff --git a/src/editor/message_box.hpp b/src/editor/message_box.hpp
+index 385387a61..d885767cf 100644
+--- src/editor/message_box.hpp
++++ src/editor/message_box.hpp
+@@ -45,7 +45,7 @@ public:
+ void on_cancel_button();
+
+ public:
+- boost::signal<void()> on_ok;
++ boost::signals2::signal<void()> on_ok;
+
+ private:
+ MessageBox(const MessageBox&);
+diff --git a/src/editor/object_selector.cpp b/src/editor/object_selector.cpp
+index 28e306826..f3a36b5e8 100644
+--- src/editor/object_selector.cpp
++++ src/editor/object_selector.cpp
+@@ -16,7 +16,7 @@
+
+ #include "editor/object_selector.hpp"
+
+-#include <boost/signal.hpp>
++#include <boost/signals2.hpp>
+
+ #include "editor/generic_level_obj.hpp"
+ #include "editor/gui_style.hpp"
+@@ -47,7 +47,7 @@ private:
+ std::string tooltip;
+
+ public:
+- boost::signal<void()> on_click;
++ boost::signals2::signal<void()> on_click;
+
+ public:
+ ObjectSelectorButton(ObjectSelectorList* object_list_,
+diff --git a/src/editor/viewport.hpp b/src/editor/viewport.hpp
+index 1ae9eff7c..18868254d 100644
+--- src/editor/viewport.hpp
++++ src/editor/viewport.hpp
+@@ -18,7 +18,7 @@
+ #ifndef HEADER_PINGUS_EDITOR_VIEWPORT_HPP
+ #define HEADER_PINGUS_EDITOR_VIEWPORT_HPP
+
+-#include <boost/signal.hpp>
++#include <boost/signals2.hpp>
+ #include <set>
+
+ #include "editor/selection.hpp"
+@@ -148,7 +148,7 @@ public:
+
+ void clear_selection();
+
+- boost::signal<void (const Selection&)> selection_changed;
++ boost::signals2::signal<void (const Selection&)> selection_changed;
+ private:
+ Viewport();
+ Viewport (const Viewport&);
+diff --git a/src/pingus/components/check_box.hpp b/src/pingus/components/check_box.hpp
+index 00e23b764..5bef50f6b 100644
+--- src/pingus/components/check_box.hpp
++++ src/pingus/components/check_box.hpp
+@@ -17,7 +17,7 @@
+ #ifndef HEADER_PINGUS_PINGUS_COMPONENTS_CHECK_BOX_HPP
+ #define HEADER_PINGUS_PINGUS_COMPONENTS_CHECK_BOX_HPP
+
+-#include <boost/signal.hpp>
++#include <boost/signals2.hpp>
+
+ #include "engine/display/sprite.hpp"
+ #include "engine/gui/rect_component.hpp"
+@@ -39,7 +39,7 @@ public:
+
+ void set_state(bool v, bool send_signal);
+
+- boost::signal<void (bool)> on_change;
++ boost::signals2::signal<void (bool)> on_change;
+
+ private:
+ CheckBox (const CheckBox&);
+diff --git a/src/pingus/components/choice_box.hpp b/src/pingus/components/choice_box.hpp
+index 49d6e1948..ef51b6dd2 100644
+--- src/pingus/components/choice_box.hpp
++++ src/pingus/components/choice_box.hpp
+@@ -17,7 +17,7 @@
+ #ifndef HEADER_PINGUS_PINGUS_COMPONENTS_CHOICE_BOX_HPP
+ #define HEADER_PINGUS_PINGUS_COMPONENTS_CHOICE_BOX_HPP
+
+-#include <boost/signal.hpp>
++#include <boost/signals2.hpp>
+
+ #include "engine/gui/rect_component.hpp"
+
+@@ -36,7 +36,7 @@ public:
+ void add_choice(const std::string& str);
+ void set_current_choice(int choice);
+
+- boost::signal<void (std::string)> on_change;
++ boost::signals2::signal<void (std::string)> on_change;
+
+ private:
+ ChoiceBox (const ChoiceBox&);
+diff --git a/src/pingus/components/slider_box.hpp b/src/pingus/components/slider_box.hpp
+index ae4d92406..75118eac2 100644
+--- src/pingus/components/slider_box.hpp
++++ src/pingus/components/slider_box.hpp
+@@ -17,7 +17,7 @@
+ #ifndef HEADER_PINGUS_PINGUS_COMPONENTS_SLIDER_BOX_HPP
+ #define HEADER_PINGUS_PINGUS_COMPONENTS_SLIDER_BOX_HPP
+
+-#include <boost/signal.hpp>
++#include <boost/signals2.hpp>
+
+ #include "engine/gui/rect_component.hpp"
+
+@@ -39,7 +39,7 @@ public:
+
+ void set_value(int v);
+
+- boost::signal<void (int)> on_change;
++ boost::signals2::signal<void (int)> on_change;
+
+ private:
+ SliderBox (const SliderBox&);
+diff --git a/src/pingus/config_manager.hpp b/src/pingus/config_manager.hpp
+index b07b83e65..4cf08e046 100644
+--- src/pingus/config_manager.hpp
++++ src/pingus/config_manager.hpp
+@@ -17,7 +17,7 @@
+ #ifndef HEADER_PINGUS_PINGUS_CONFIG_MANAGER_HPP
+ #define HEADER_PINGUS_PINGUS_CONFIG_MANAGER_HPP
+
+-#include <boost/signal.hpp>
++#include <boost/signals2.hpp>
+
+ #include "math/size.hpp"
+ #include "pingus/options.hpp"
+@@ -39,55 +39,55 @@ public:
+
+ void set_master_volume(int);
+ int get_master_volume() const;
+- boost::signal<void(int)> on_master_volume_change;
++ boost::signals2::signal<void(int)> on_master_volume_change;
+
+ void set_sound_volume(int);
+ int get_sound_volume() const;
+- boost::signal<void(int)> on_sound_volume_change;
++ boost::signals2::signal<void(int)> on_sound_volume_change;
+
+ void set_music_volume(int);
+ int get_music_volume() const;
+- boost::signal<void(int)> on_music_volume_change;
++ boost::signals2::signal<void(int)> on_music_volume_change;
+
+ void set_fullscreen_resolution(const Size& size);
+ Size get_fullscreen_resolution() const;
+- boost::signal<void(Size)> on_fullscreen_resolution_change;
++ boost::signals2::signal<void(Size)> on_fullscreen_resolution_change;
+
+ void set_fullscreen(bool);
+ bool get_fullscreen() const;
+- boost::signal<void(bool)> on_fullscreen_change;
++ boost::signals2::signal<void(bool)> on_fullscreen_change;
+
+ void set_renderer(FramebufferType type);
+ FramebufferType get_renderer() const;
+- boost::signal<void(FramebufferType)> on_renderer_change;
++ boost::signals2::signal<void(FramebufferType)> on_renderer_change;
+
+ void set_resizable(bool);
+ bool get_resizable() const;
+- boost::signal<void(bool)> on_resizable_change;
++ boost::signals2::signal<void(bool)> on_resizable_change;
+
+ void set_mouse_grab(bool);
+ bool get_mouse_grab() const;
+- boost::signal<void(bool)> on_mouse_grab_change;
++ boost::signals2::signal<void(bool)> on_mouse_grab_change;
+
+ void set_print_fps(bool);
+ bool get_print_fps() const;
+- boost::signal<void(bool)> on_print_fps_change;
++ boost::signals2::signal<void(bool)> on_print_fps_change;
+
+ void set_language(const tinygettext::Language&);
+ tinygettext::Language get_language() const;
+- boost::signal<void(const tinygettext::Language&)> on_language_change;
++ boost::signals2::signal<void(const tinygettext::Language&)> on_language_change;
+
+ void set_software_cursor(bool);
+ bool get_software_cursor() const;
+- boost::signal<void(bool)> on_software_cursor_change;
++ boost::signals2::signal<void(bool)> on_software_cursor_change;
+
+ void set_auto_scrolling(bool);
+ bool get_auto_scrolling() const;
+- boost::signal<void(bool)> on_auto_scrolling_change;
++ boost::signals2::signal<void(bool)> on_auto_scrolling_change;
+
+ void set_drag_drop_scrolling(bool);
+ bool get_drag_drop_scrolling() const;
+- boost::signal<void(bool)> on_drag_drop_scrolling_change;
++ boost::signals2::signal<void(bool)> on_drag_drop_scrolling_change;
+
+ private:
+ ConfigManager (const ConfigManager&);
+diff --git a/src/pingus/screens/option_menu.hpp b/src/pingus/screens/option_menu.hpp
+index 60b1578d2..154ef0f69 100644
+--- src/pingus/screens/option_menu.hpp
++++ src/pingus/screens/option_menu.hpp
+@@ -17,7 +17,7 @@
+ #ifndef HEADER_PINGUS_PINGUS_SCREENS_OPTION_MENU_HPP
+ #define HEADER_PINGUS_PINGUS_SCREENS_OPTION_MENU_HPP
+
+-#include <boost/signals.hpp>
++#include <boost/signals2.hpp>
+ #include <map>
+ #include <vector>
+
+@@ -66,7 +66,7 @@ private:
+ //Label* defaults_label;
+ //CheckBox* defaults_box;
+
+- typedef std::vector<boost::signals::connection> Connections;
++ typedef std::vector<boost::signals2::connection> Connections;
+ Connections connections;
+
+ tinygettext::Language m_language;
+--
+2.18.1
+
diff --git a/games/pingus/files/patch-src-lisp-getters.hpp b/games/pingus/files/patch-src-lisp-getters.hpp
new file mode 100644
index 000000000000..f600918f5631
--- /dev/null
+++ b/games/pingus/files/patch-src-lisp-getters.hpp
@@ -0,0 +1,11 @@
+--- src/lisp/getters.hpp.orig 2011-12-24 21:46:47 UTC
++++ src/lisp/getters.hpp
+@@ -30,7 +30,7 @@ static inline bool property_get(const Li
+ if(lisp->get_list_size() != 2)
+ return false;
+
+- const Lisp* el = lisp->get_list_elem(1);
++ const Lisp* el = lisp->get_list_elem(1).get();
+ return get(el, val);
+ }
+
diff --git a/games/pingus/files/patch-src__pingus__pingus_main.cpp b/games/pingus/files/patch-src__pingus__pingus_main.cpp
new file mode 100644
index 000000000000..397af2466e38
--- /dev/null
+++ b/games/pingus/files/patch-src__pingus__pingus_main.cpp
@@ -0,0 +1,11 @@
+--- src/pingus/pingus_main.cpp.orig 2011-12-24 21:46:47 UTC
++++ src/pingus/pingus_main.cpp
+@@ -465,7 +465,7 @@ PingusMain::init_path_finder()
+ void
+ PingusMain::print_greeting_message()
+ {
+- std::string greeting = "Welcome to Pingus "VERSION;
++ std::string greeting = "Welcome to Pingus " VERSION;
+ greeting += "!";
+ std::cout << greeting << std::endl;
+ for (unsigned int i = 0; i < greeting.length(); ++i)
diff --git a/games/pingus/files/patch-src__pingus__screens__pingus_menu.cpp b/games/pingus/files/patch-src__pingus__screens__pingus_menu.cpp
new file mode 100644
index 000000000000..2474af27c201
--- /dev/null
+++ b/games/pingus/files/patch-src__pingus__screens__pingus_menu.cpp
@@ -0,0 +1,11 @@
+--- src/pingus/screens/pingus_menu.cpp.orig 2011-12-24 21:46:47 UTC
++++ src/pingus/screens/pingus_menu.cpp
+@@ -153,7 +153,7 @@ PingusMenu::draw_background(DrawingConte
+ gc.get_height()/2 - 280));
+
+ gc.print_left(Fonts::pingus_small, Vector2i(gc.get_width()/2 - 400 + 25, gc.get_height()-140),
+- "Pingus "VERSION" - Copyright (C) 1998-2011 Ingo Ruhnke <grumbel@gmail.com>\n"
++ "Pingus " VERSION " - Copyright (C) 1998-2011 Ingo Ruhnke <grumbel@gmail.com>\n"
+ "See the file AUTHORS for a complete list of contributors.\n"
+ "Pingus comes with ABSOLUTELY NO WARRANTY. This is free software, and you are\n"
+ "welcome to redistribute it under certain conditions; see the file COPYING for details.\n");
diff --git a/games/pingus/files/patch-src__util__file_reader.hpp b/games/pingus/files/patch-src__util__file_reader.hpp
new file mode 100644
index 000000000000..c56f58917c3a
--- /dev/null
+++ b/games/pingus/files/patch-src__util__file_reader.hpp
@@ -0,0 +1,10 @@
+--- src/util/file_reader.hpp.orig 2011-12-24 21:46:47 UTC
++++ src/util/file_reader.hpp
+@@ -19,6 +19,7 @@
+
+ #include <memory>
+ #include <vector>
++#include <string>
+
+ class Size;
+ class Color;
diff --git a/games/pingus/files/patch-src_pingus_screens_demo__session.cpp b/games/pingus/files/patch-src_pingus_screens_demo__session.cpp
new file mode 100644
index 000000000000..8146968392f2
--- /dev/null
+++ b/games/pingus/files/patch-src_pingus_screens_demo__session.cpp
@@ -0,0 +1,10 @@
+--- src/pingus/screens/demo_session.cpp.orig 2018-11-02 16:05:42 UTC
++++ src/pingus/screens/demo_session.cpp
+@@ -17,6 +17,7 @@
+ #include "pingus/screens/demo_session.hpp"
+
+ #include <algorithm>
++#include <functional>
+ #include <iostream>
+
+ #include "engine/gui/gui_manager.hpp"
diff --git a/games/pingus/pkg-descr b/games/pingus/pkg-descr
new file mode 100644
index 000000000000..c8c426180f43
--- /dev/null
+++ b/games/pingus/pkg-descr
@@ -0,0 +1,5 @@
+Pingus is a free Lemmings-like game covered under the GNU GPL. It features
+currently 22 playable levels and runs under a wide variety of operating systems
+(FreeBSD, Linux, Windows, etc.)
+
+WWW: https://pingus.seul.org/
diff --git a/games/renpy/Makefile b/games/renpy/Makefile
new file mode 100644
index 000000000000..102a70a2429b
--- /dev/null
+++ b/games/renpy/Makefile
@@ -0,0 +1,109 @@
+# $FreeBSD$
+
+PORTNAME= renpy
+PORTVERSION= 7.3.5
+DISTVERSIONSUFFIX=-sdk
+CATEGORIES= games devel
+MASTER_SITES= https://www.renpy.org/dl/${PORTVERSION}/
+
+MAINTAINER= jbeich@FreeBSD.org
+COMMENT= Framework for developing visual-novel type games
+
+LICENSE= APACHE20 BSD3CLAUSE DejaVu LGPL21+ MIT OFL11 ZLIB
+LICENSE_COMB= multi
+LICENSE_NAME_DejaVu= Bitstream Vera and Arev fonts license
+LICENSE_FILE_DejaVu= ${WRKSRC}/renpy/common/DejaVuSans.txt
+LICENSE_PERMS_DejaVu= dist-mirror dist-sell pkg-mirror pkg-sell auto-accept
+
+# Extend expiration if lang/python27 is also extended
+# https://github.com/renpy/renpy/issues/2003
+DEPRECATED= Uses deprecated version of python
+EXPIRATION_DATE= 2020-12-31
+
+BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}game_sdl2>0:devel/py-game_sdl2@${PY_FLAVOR}
+LIB_DEPENDS= libfribidi.so:converters/fribidi \
+ libpng.so:graphics/png \
+ libavcodec.so:multimedia/ffmpeg \
+ libfreetype.so:print/freetype2
+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}game_sdl2>=${PORTVERSION}:devel/py-game_sdl2@${PY_FLAVOR}
+
+# Upstream tends to reroll distfiles before moving under /release/
+PORTSCOUT= site:http://www.renpy.org/dl/release/
+
+USES= gl python:2.7 sdl shebangfix tar:bz2
+USE_GL= glew
+USE_PYTHON= autoplist distutils cython
+USE_SDL= sdl2
+EXCLUDE= gen 'module/*.py[co]' 'renpy/*.py[co]'
+EXTRACT_AFTER_ARGS=${EXCLUDE:S,^,--exclude ,}
+SHEBANG_FILES= renpy.py launcher/game/tkaskdir.py
+TARGET_ORDER_OVERRIDE=610:fix-shebang
+BUILD_WRKSRC= ${WRKSRC}/module
+INSTALL_WRKSRC= ${BUILD_WRKSRC}
+MAKE_ENV+= RENPY_DEPS_INSTALL="${LOCALBASE}" \
+ RENPY_CYTHON=cython-${PYTHON_VER}
+PORTDATA= gui launcher renpy renpy.py
+PORTDOCS= *
+PLIST_FILES= bin/${PORTNAME}
+
+DESKTOP_ENTRIES="Ren'Py" \
+ "" \
+ "${DATADIR}/launcher/game/images/logo32.png" \
+ "${PORTNAME} %f" \
+ "Development;Game;AdventureGame;" \
+ ""
+
+OPTIONS_DEFAULT=TKINTER DIST
+OPTIONS_DEFINE= DOCS DIST EXAMPLES TKINTER
+
+DIST_DESC= Distribution runtimes for Windows, OS X, Linux
+DIST_VARS= LICENSE+="ART20 PSFL" \
+ PORTDATA+="lib renpy.app renpy.exe renpy.sh"
+EXAMPLES_VARS= PORTDATA+="the_question tutorial"
+TKINTER_DESC= Install Tkinter to allow choosing Projects Directory
+TKINTER_RUN_DEPENDS=${PYTHON_PKGNAMEPREFIX}tkinter>0:x11-toolkits/py-tkinter@${PY_FLAVOR}
+
+. for lic in FREETYPE LIBJPEG LIBPNG MSVCR90
+DIST_VARS+= LICENSE+=${lic}
+LICENSE_NAME_${lic}= ${lic} license
+LICENSE_FILE_${lic}= ${WRKSRC}/LICENSE.txt
+LICENSE_PERMS_${lic}= dist-mirror dist-sell pkg-mirror pkg-sell auto-accept
+. endfor
+
+post-extract:
+ @${FIND} ${WRKSRC}/lib ${WRKSRC}/renpy.app -type d -empty -delete
+
+post-patch:
+ @${REINPLACE_CMD} -e 's,/usr/bin/python,${PYTHON_CMD},' \
+ ${WRKSRC}/launcher/game/choose_directory.rpy
+# Avoid having to add -I/usr/include -L/usr/lib
+ @${REINPLACE_CMD} '/library("z")/d' ${BUILD_WRKSRC}/${PYSETUP}
+
+post-build:
+ @${PYTHON_CMD} -m compileall -d ${DATADIR} ${WRKSRC}
+ @${PYTHON_CMD} -O -m compileall -d ${DATADIR} ${WRKSRC}
+
+add-plist-post: add-empty-dirs
+add-empty-dirs:
+# Keep images directory in gui and templates, see renpy@d81ea29
+ ${FIND} ${WRKSRC} -type d -empty \
+ ! \( -name "saves" -or -name "pysdlsound" \) | \
+ ${SED} 's,^${WRKSRC},@dir ${DATADIR},' >>${TMPPLIST}
+
+post-install:
+ ${FIND} ${STAGEDIR}${PYTHONPREFIX_SITELIBDIR} -name \*.so \
+ -exec ${STRIP_CMD} {} +
+ ${LN} -fs ../${DATADIR_REL}/renpy.py \
+ ${STAGEDIR}${PREFIX}/bin/${PORTNAME}
+ (cd ${WRKSRC} && ${COPYTREE_SHARE} \
+ "${PORTDATA}" ${STAGEDIR}${DATADIR} \
+ "! -name *.orig ! -name *.bak \
+ ! -name saves ! -name log.txt")
+ ${CHMOD} +x ${STAGEDIR}${DATADIR}/renpy.py
+
+post-install-DOCS-on:
+ (cd ${WRKSRC}/doc && ${COPYTREE_SHARE} \
+ . ${STAGEDIR}${DOCSDIR} \
+ "! -name *.orig ! -name *.bak")
+
+.include <bsd.port.mk>
diff --git a/games/renpy/distinfo b/games/renpy/distinfo
new file mode 100644
index 000000000000..6d61d83c9702
--- /dev/null
+++ b/games/renpy/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1571355531
+SHA256 (renpy-7.3.5-sdk.tar.bz2) = dbbd087f2578d70dc1bc3912259f5794d563e3404068c96c15d7127853dec40d
+SIZE (renpy-7.3.5-sdk.tar.bz2) = 95049773
diff --git a/games/renpy/files/patch-issue869 b/games/renpy/files/patch-issue869
new file mode 100644
index 000000000000..4a4d0c4b7c53
--- /dev/null
+++ b/games/renpy/files/patch-issue869
@@ -0,0 +1,11 @@
+Restore shebang before ecd36ec.
+
+--- renpy.py.orig 2016-01-27 03:31:10 UTC
++++ renpy.py
+@@ -1,4 +1,5 @@
+-#!/usr/bin/env python #@PydevCodeAnalysisIgnore
++#!/usr/bin/env python
++#@PydevCodeAnalysisIgnore
+
+ # This file is part of Ren'Py. The license below applies to Ren'Py only.
+ # Games and other projects that use Ren'Py may use a different license.
diff --git a/games/renpy/files/patch-system-fribidi b/games/renpy/files/patch-system-fribidi
new file mode 100644
index 000000000000..0232db728876
--- /dev/null
+++ b/games/renpy/files/patch-system-fribidi
@@ -0,0 +1,57 @@
+Partially revert 4a9efc0cab7d as module/fribidi-src/ is missing from source archive.
+
+gen/_renpybidi.c:564:10: fatal error: 'fribidi.h' file not found
+#include "fribidi.h"
+ ^
+
+--- module/renpybidicore.c.orig 2018-07-11 04:11:19 UTC
++++ module/renpybidicore.c
+@@ -1,5 +1,5 @@
+ #include <Python.h>
+-#include <fribidi-src/lib/fribidi.h>
++#include <fribidi.h>
+ #include <stdlib.h>
+
+ #ifndef alloca
+--- module/setup.py.orig 2018-07-11 04:29:32 UTC
++++ module/setup.py
+@@ -92,6 +92,7 @@ has_avresample = library("avresample", optional=True)
+ has_swresample = library("swresample", optional=True)
+ has_swscale = library("swscale", optional=True)
+ library("freetype")
++has_fribidi = include("fribidi.h", directory="fribidi", optional=True) and library("fribidi", optional=True)
+ library("z")
+ has_libglew = library("GLEW", optional=True)
+ has_libglew32 = library("glew32", optional=True)
+@@ -105,6 +106,16 @@ else:
+ sdl = [ 'SDL2' ]
+ png = 'png'
+
++
++if has_fribidi and (not android) and (not ios):
++ try:
++ # Some versions of fribidi require glib, and it doesn't hurt to include it in
++ # our path.
++ glib_flags = subprocess.check_output(["pkg-config", "--cflags", "glib-2.0"])
++ setuplib.extra_compile_args.extend(glib_flags.split())
++ except:
++ pass
++
+ steam_sdk = os.environ.get("RENPY_STEAM_SDK", None)
+ steam_platform = os.environ.get("RENPY_STEAM_PLATFORM", "")
+
+@@ -134,11 +145,12 @@ renpybidicore.c
+ """.split()
+ cython(
+ "_renpybidi",
+- FRIBIDI_SOURCES,
+- includes=[
++ has_fribidi and [ i for i in FRIBIDI_SOURCES if 'fribidi-src' not in i ] or FRIBIDI_SOURCES,
++ includes=has_fribidi and [] or [
+ BASE + "/fribidi-src/",
+ BASE + "/fribidi-src/lib/",
+ ],
++ libs=has_fribidi and ['fribidi'] or [],
+ define_macros=[
+ ("FRIBIDI_ENTRY", ""),
+ ("HAVE_CONFIG_H", "1"),
diff --git a/games/renpy/pkg-descr b/games/renpy/pkg-descr
new file mode 100644
index 000000000000..cc760ec52918
--- /dev/null
+++ b/games/renpy/pkg-descr
@@ -0,0 +1,9 @@
+Ren'Py is a visual novel engine – used by thousands of creators from
+around the world – that helps you use words, images, and sounds to
+tell interactive stories that run on computers and mobile
+devices. These can be both visual novels and life simulation
+games. The easy to learn script language allows anyone to efficiently
+write large visual novels, while its Python scripting is enough for
+complex simulation games.
+
+WWW: https://www.renpy.org/