Stuart Henderson wrote:
> On 2019/07/17 17:05, Neon King wrote:
>> Hello dear ports@readers,
>>
>> The following diff upgrades Teeworlds game to the latest version. Changelog
>> is available on their homepage https://teeworlds.com/
I've fixed up this port and updated teeworlds to version 0.7.5.
Note that version 0.7.x is incompatible with servers from 0.6.x.
- switched to GH_*
- moved to cmake and dropped BAM
- dropped unnecessary patches (all of them)
- avoid git from running (new patch)
- the strict-alignment crash *should* be resolved. The TODO in the code
is gone and the function looks different now
- replaced SDL with SDL2
- update to python3
All the fixes for build.lua, configure.lua and scripts/* are not
necessary anymore because the cmake build is not using these files.
The only file used in the script/ folder is cmd5.py.
The maps (teeworlds-data) are optional. They are downloaded on demand
when playing. I'm not sure if they are necessary when hosting a game.
The previous port did not contain them. But as Neon King got them
hosted, I included them as well.
I tried to go around the local copy of DejavuSans.ttf. Unfortunately the
current version does not pick up the system font. It shows buttons
without text. System wavpack and zlib are still used. The bundled
pnglite is used.
Portcheck and make port-lib-depends-check are happy. Tested on amd64.
I also played this for a few hours on various servers.
I won't mind taking MAINTAINER for this port, but as Neon King and
Donovan (CC) offered port updates earlier, I won't mind if they pick
this up.
OK?
Best Regards,
Stefan
Index: games/teeworlds/Makefile
===================================================================
RCS file: /cvs/ports/games/teeworlds/Makefile,v
retrieving revision 1.28
diff -u -p -u -p -r1.28 Makefile
--- games/teeworlds/Makefile 23 Feb 2021 19:39:23 -0000 1.28
+++ games/teeworlds/Makefile 8 Aug 2021 19:58:01 -0000
@@ -1,76 +1,56 @@
# $OpenBSD: Makefile,v 1.28 2021/02/23 19:39:23 sthen Exp $
-# Crashes on strict-alignment archs, see: src/base/system.c:164
ONLY_FOR_ARCHS= amd64 i386 powerpc
COMMENT= platform game featuring buggers equipped with weapons
-V= 0.6.4
-DISTNAME= teeworlds-${V}-src
-PKGNAME= teeworlds-${V}
+V= 0.7.5
+GH_ACCOUNT= teeworlds
+GH_PROJECT= teeworlds
+GH_TAGNAME= ${V}
+
CATEGORIES= games
-REVISION= 3
-HOMEPAGE= https://www.teeworlds.com/
+HOMEPAGE= https://www.teeworlds.com
-BAM_VERSION= 0.4.0
-BAM_WRKSRC= ${WRKSRC}/bam-${BAM_VERSION}
+PKGNAME= ${GH_PROJECT}-${V}
+DISTNAME= ${PKGNAME}-src
-MASTER_SITES= https://downloads.teeworlds.com/
-DISTFILES= ${DISTNAME}${EXTRACT_SUFX} bam-${BAM_VERSION}${EXTRACT_SUFX}
+MASTER_SITES= https://github.com/teeworlds/teeworlds/releases/download/${V}/
+# maps repo without tags/releases on
https://github.com/teeworlds/teeworlds-maps
+# therefore hosted as archive on perso.pw
+MASTER_SITES0= http://distfiles-openbsd.perso.pw/
+DISTFILES= ${DISTNAME}${EXTRACT_SUFX} teeworlds-data.tar.gz:0
# BSD-like
PERMIT_PACKAGE= Yes
-WANTLIB= GL GLU SDL X11 c freetype m pthread ${COMPILER_LIBCXX} wavpack z
+WANTLIB= GL SDL2 X11 c crypto freetype m pthread ${COMPILER_LIBCXX}
+WANTLIB+= wavpack z
COMPILER = base-clang ports-gcc
LIB_DEPENDS= audio/wavpack \
- devel/sdl
+ devel/sdl2
-MODULES= lang/python
-MODPY_VERSION = ${MODPY_DEFAULT_VERSION_2}
+MODULES= devel/cmake lang/python
+MODPY_VERSION = ${MODPY_DEFAULT_VERSION_3}
MODPY_RUNDEP= No
-SUBST_VARS= CC CXX CFLAGS CXXFLAGS X11BASE
+CONFIGURE_STYLE= cmake
+CONFIGURE_ARGS= -DPYTHON_EXECUTABLE="${MODPY_BIN}"
NO_TEST= Yes
+WRKSRC= ${WRKDIR}/${DISTNAME}
+WRKDIST= ${WRKSRC}
+
# Give it a chance on ppc
CXXFLAGS+= -fsigned-char
-post-extract:
- @mv ${WRKDIR}/bam-${BAM_VERSION} ${BAM_WRKSRC}
-
-pre-configure:
- @${SUBST_CMD} ${WRKSRC}/src/engine/shared/storage.cpp \
- ${WRKSRC}/src/game/client/gameclient.cpp \
- ${WRKSRC}/scripts/build.py \
- ${WRKSRC}/scripts/compiler.py \
- ${WRKSRC}/scripts/font_installer.sh \
- ${WRKSRC}/scripts/make_src.py \
- ${WRKSRC}/bam.lua \
- ${WRKSRC}/configure.lua \
- ${BAM_WRKSRC}/make_unix.sh \
- ${BAM_WRKSRC}/src/driver_gcc.lua \
- ${BAM_WRKSRC}/src/base.lua
- # Make sure internal wavpack and zlib can't be picked up
- rm -rf ${WRKSRC}/src/engine/external/{wavpack,zlib}
- # Don't provide an extra copy of DejaVu
- rm -rf ${WRKSRC}/data/fonts
-
-# build bam executable - teeworlds own build system
-pre-build:
- cd ${BAM_WRKSRC} && /bin/sh -v make_unix.sh
-
-do-build:
- cd ${WRKSRC} && CC=${CC} ${BAM_WRKSRC}/bam -a -v release
wavpack=${LOCALBASE}
-
-do-install:
- ${INSTALL_PROGRAM} ${WRKSRC}/teeworlds ${PREFIX}/bin
- ${INSTALL_PROGRAM} ${WRKSRC}/teeworlds_srv ${PREFIX}/bin
- ${INSTALL_DATA_DIR} ${PREFIX}/share/teeworlds
- cd ${WRKSRC}; tar cf - data | tar xf - -C ${PREFIX}/share/teeworlds
+post-install:
+ mv ${WRKDIR}/maps/* ${WRKDIST}/datasrc/maps ; \
+ mv ${WRKDIR}/languages/* ${WRKDIST}/datasrc/languages ; \
+ rm -rf ${WRKDIR}/maps ; rm -rf ${WRKDIR}/languages ;
.include <bsd.port.mk>
Index: games/teeworlds/distinfo
===================================================================
RCS file: /cvs/ports/games/teeworlds/distinfo,v
retrieving revision 1.6
diff -u -p -u -p -r1.6 distinfo
--- games/teeworlds/distinfo 30 Nov 2016 18:17:03 -0000 1.6
+++ games/teeworlds/distinfo 8 Aug 2021 19:58:01 -0000
@@ -1,4 +1,4 @@
-SHA256 (bam-0.4.0.tar.gz) = Xk5JILTSZdpYL2Z3TpseyN37513cAo+6hsEvaG6hjbM=
-SHA256 (teeworlds-0.6.4-src.tar.gz) =
wmHRnrsAtUUfqizrSnypRcrSrdSLBgRutDtAzMn9mOI=
-SIZE (bam-0.4.0.tar.gz) = 206780
-SIZE (teeworlds-0.6.4-src.tar.gz) = 8771622
+SHA256 (teeworlds-0.7.5-src.tar.gz) =
/N4iIzmOAnQ07JYxUQPphh/EWBYbSbFZCNxWuOeo7Nk=
+SHA256 (teeworlds-data.tar.gz) = My+UViTDKr75PkYu8/IfHWJGpPqF0ynJN49vEG4h6iI=
+SIZE (teeworlds-0.7.5-src.tar.gz) = 8935505
+SIZE (teeworlds-data.tar.gz) = 304464
Index: games/teeworlds/patches/patch-CMakeLists_txt
===================================================================
RCS file: games/teeworlds/patches/patch-CMakeLists_txt
diff -N games/teeworlds/patches/patch-CMakeLists_txt
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ games/teeworlds/patches/patch-CMakeLists_txt 8 Aug 2021 19:58:01
-0000
@@ -0,0 +1,86 @@
+$OpenBSD$
+
+- fstack-clash-protection is unused
+- don't execute git
+
+Index: CMakeLists.txt
+--- CMakeLists.txt.orig
++++ CMakeLists.txt
+@@ -155,7 +155,7 @@ if(NOT MSVC)
+ add_c_compiler_flag_if_supported(OUR_FLAGS -fstack-protector-strong)
+
+ # Protect the stack from clashing.
+- add_c_compiler_flag_if_supported(OUR_FLAGS -fstack-clash-protection)
++ # add_c_compiler_flag_if_supported(OUR_FLAGS -fstack-clash-protection)
+
+ # Control-flow protection. Should protect against ROP.
+ add_c_compiler_flag_if_supported(OUR_FLAGS -fcf-protection)
+@@ -1222,29 +1222,29 @@ function(generate_source output_file script_parameter)
+ endfunction()
+
+ file(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/src/generated/")
+-if(GIT_FOUND)
+- execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --git-dir
+- ERROR_QUIET
+- OUTPUT_VARIABLE PROJECT_GIT_DIR
+- OUTPUT_STRIP_TRAILING_WHITESPACE
+- RESULT_VARIABLE PROJECT_GIT_DIR_ERROR
+- )
+- if(NOT PROJECT_GIT_DIR_ERROR)
+- set(GIT_REVISION_EXTRA_DEPS
+- ${PROJECT_GIT_DIR}/index
+- ${PROJECT_GIT_DIR}/logs/HEAD
+- )
+- endif()
+-endif()
+-add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src/generated/git_revision.cpp
+- COMMAND ${PYTHON_EXECUTABLE}
+- scripts/git_revision.py
+- >${PROJECT_BINARY_DIR}/src/generated/git_revision.cpp
+- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+- DEPENDS
+- ${GIT_REVISION_EXTRA_DEPS}
+- scripts/git_revision.py
+-)
++#if(GIT_FOUND)
++# execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --git-dir
++# ERROR_QUIET
++# OUTPUT_VARIABLE PROJECT_GIT_DIR
++# OUTPUT_STRIP_TRAILING_WHITESPACE
++# RESULT_VARIABLE PROJECT_GIT_DIR_ERROR
++# )
++# if(NOT PROJECT_GIT_DIR_ERROR)
++# set(GIT_REVISION_EXTRA_DEPS
++# ${PROJECT_GIT_DIR}/index
++# ${PROJECT_GIT_DIR}/logs/HEAD
++# )
++# endif()
++#endif()
++#add_custom_command(OUTPUT
${PROJECT_BINARY_DIR}/src/generated/git_revision.cpp
++# COMMAND ${PYTHON_EXECUTABLE}
++# scripts/git_revision.py
++# >${PROJECT_BINARY_DIR}/src/generated/git_revision.cpp
++# WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
++# DEPENDS
++# ${GIT_REVISION_EXTRA_DEPS}
++# scripts/git_revision.py
++#)
+ chash("src/generated/nethash.cpp"
+ "src/engine/shared/protocol.h"
+ "src/game/tuning.h"
+@@ -1375,7 +1375,6 @@ set_src(GAME_SHARED GLOB src/game
+ voting.h
+ )
+ set(GAME_GENERATED_SHARED
+- src/generated/git_revision.cpp
+ src/generated/nethash.cpp
+ src/generated/protocol.h
+ )
+@@ -1724,7 +1723,6 @@ if(GTEST_FOUND OR DOWNLOAD_GTEST)
+ set_src(TESTS GLOB src/test
+ datafile.cpp
+ fs.cpp
+- git_revision.cpp
+ hash.cpp
+ jsonwriter.cpp
+ storage.cpp
Index: games/teeworlds/patches/patch-bam-0_4_0_make_unix_sh
===================================================================
RCS file: games/teeworlds/patches/patch-bam-0_4_0_make_unix_sh
diff -N games/teeworlds/patches/patch-bam-0_4_0_make_unix_sh
--- games/teeworlds/patches/patch-bam-0_4_0_make_unix_sh 27 Dec 2015
17:56:22 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,13 +0,0 @@
-$OpenBSD: patch-bam-0_4_0_make_unix_sh,v 1.1 2015/12/27 17:56:22 jasper Exp $
-
-Don't hardcode compiler path and flags.
-
---- bam-0.4.0/make_unix.sh.orig Mon Aug 9 20:08:24 2010
-+++ bam-0.4.0/make_unix.sh Sat Mar 17 15:05:51 2012
-@@ -1,4 +1,4 @@
- #!/bin/sh
--gcc -Wall -ansi -pedantic src/tools/txt2c.c -o src/tools/txt2c
-+${CC} ${CFLAGS} -Wall -ansi -pedantic src/tools/txt2c.c -o src/tools/txt2c
- src/tools/txt2c src/base.lua src/tools.lua src/driver_gcc.lua
src/driver_cl.lua >src/internal_base.h
--gcc -Wall -ansi -pedantic src/*.c src/lua/*.c -o bam -I src/lua -lm -lpthread
-ldl -O2 -rdynamic $*
-+${CC} ${CFLAGS} -Wall -ansi -pedantic src/*.c src/lua/*.c -o bam -I src/lua
-lm -lpthread -rdynamic $*
Index: games/teeworlds/patches/patch-bam-0_4_0_src_driver_gcc_lua
===================================================================
RCS file: games/teeworlds/patches/patch-bam-0_4_0_src_driver_gcc_lua
diff -N games/teeworlds/patches/patch-bam-0_4_0_src_driver_gcc_lua
--- games/teeworlds/patches/patch-bam-0_4_0_src_driver_gcc_lua 27 Dec 2015
17:56:22 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,52 +0,0 @@
-$OpenBSD: patch-bam-0_4_0_src_driver_gcc_lua,v 1.1 2015/12/27 17:56:22 jasper
Exp $
-
-Don't hardcode compiler path and flags.
-
---- bam-0.4.0/src/driver_gcc.lua.orig Mon Aug 9 20:08:24 2010
-+++ bam-0.4.0/src/driver_gcc.lua Sat Mar 17 15:14:24 2012
-@@ -13,7 +13,6 @@ function DriverGCC_Get(exe, cache_name, flags_name)
- local f = cc.flags:ToString()
- f = f .. cc[flags_name]:ToString()
- if settings.debug >0 then f = f .. "-g " end
-- if settings.optimize >0 then f = f .. "-O2 " end
-
- cache.str = cc[exe] .. " " .. f .. "-c " .. d .. i .. "
-o "
- end
-@@ -27,7 +26,7 @@ function DriverGCC_CTest(code, options)
- f:write(code)
- f:write("\n")
- f:close()
-- local ret = ExecuteSilent("gcc _test.c -o _test " .. options)
-+ local ret = ExecuteSilent("${CC} _test.c -o _test " .. options)
- os.remove("_test.c")
- os.remove("_test")
- return ret==0
-@@ -80,8 +79,8 @@ end
- function SetDriversGCC(settings)
- if settings.cc then
- settings.cc.extension = ".o"
-- settings.cc.exe_c = "gcc"
-- settings.cc.exe_cxx = "g++"
-+ settings.cc.exe_c = "${CC} ${CFLAGS}"
-+ settings.cc.exe_cxx = "${CXX} ${CXXFLAGS}"
- settings.cc.DriverCTest = DriverGCC_CTest
- settings.cc.DriverC = DriverGCC_Get("exe_c", "_c_cache",
"flags_c")
- settings.cc.DriverCXX = DriverGCC_Get("exe_cxx", "_cxx_cache",
"flags_cxx")
-@@ -89,7 +88,7 @@ function SetDriversGCC(settings)
-
- if settings.link then
- settings.link.extension = ""
-- settings.link.exe = "g++"
-+ settings.link.exe = "${CXX}"
- settings.link.Driver = DriverGCC_Link
- end
-
-@@ -108,7 +107,7 @@ function SetDriversGCC(settings)
- settings.dll.prefix = ""
- settings.dll.extension = ".so"
- end
-- settings.dll.exe = "g++"
-+ settings.dll.exe = "${CXX}"
- settings.dll.Driver = DriverGCC_DLL
- end
- end
Index: games/teeworlds/patches/patch-bam_lua
===================================================================
RCS file: games/teeworlds/patches/patch-bam_lua
diff -N games/teeworlds/patches/patch-bam_lua
--- games/teeworlds/patches/patch-bam_lua 27 Dec 2015 17:56:22 -0000
1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,73 +0,0 @@
-$OpenBSD: patch-bam_lua,v 1.1 2015/12/27 17:56:22 jasper Exp $
-
-- Don't enforce stack protector
-- Don't hardcode python
-- Make it possible to use wavpack as an external dependency (from Debian)
-- Fix zlib external dependency (from Debian)
-
---- bam.lua.orig Wed May 1 13:47:39 2013
-+++ bam.lua Thu May 8 16:13:57 2014
-@@ -7,12 +7,12 @@ Import("other/freetype/freetype.lua")
- --- Setup Config -------
- config = NewConfig()
- config:Add(OptCCompiler("compiler"))
--config:Add(OptTestCompileC("stackprotector", "int main(){return 0;}",
"-fstack-protector -fstack-protector-all"))
- config:Add(OptTestCompileC("minmacosxsdk", "int main(){return 0;}",
"-mmacosx-version-min=10.5 -isysroot /Developer/SDKs/MacOSX10.5.sdk"))
- config:Add(OptTestCompileC("macosxppc", "int main(){return 0;}", "-arch ppc"))
- config:Add(OptLibrary("zlib", "zlib.h", false))
- config:Add(SDL.OptFind("sdl", true))
- config:Add(FreeType.OptFind("freetype", true))
-+config:Add(OptLibrary("wavpack", "wavpack/wavpack.h", false))
- config:Finalize("config.lua")
-
- -- data compiler
-@@ -20,7 +20,7 @@ function Script(name)
- if family == "windows" then
- return str_replace(name, "/", "\\")
- end
-- return "python " .. name
-+ return "${MODPY_BIN} " .. name
- end
-
- function CHash(output, ...)
-@@ -157,9 +157,6 @@ function build(settings)
- settings.cc.flags:Add("-isysroot
/Developer/SDKs/MacOSX10.5.sdk")
- settings.link.flags:Add("-isysroot
/Developer/SDKs/MacOSX10.5.sdk")
- end
-- elseif config.stackprotector.value == 1 then
-- settings.cc.flags:Add("-fstack-protector",
"-fstack-protector-all")
-- settings.link.flags:Add("-fstack-protector",
"-fstack-protector-all")
- end
- end
-
-@@ -187,7 +184,7 @@ function build(settings)
- end
-
- -- compile zlib if needed
-- if config.zlib.value == 1 then
-+ if config.zlib.value then
- settings.link.libs:Add("z")
- if config.zlib.include_path then
- settings.cc.includes:Add(config.zlib.include_path)
-@@ -198,8 +195,20 @@ function build(settings)
- settings.cc.includes:Add("src/engine/external/zlib")
- end
-
-+ -- compile wavpack if needed
-+ if config.wavpack.value then
-+ settings.link.libs:Add("wavpack")
-+ if config.wavpack.include_path then
-+ settings.cc.includes:Add(config.wavpack.include_path ..
"/include")
-+ settings.link.libpath:Add(config.wavpack.include_path
.. "/lib")
-+ end
-+ wavpack = {}
-+ else
-+ wavpack = Compile(settings,
Collect("src/engine/external/wavpack/*.c"))
-+ settings.cc.includes:Add("src/engine/external")
-+ end
-+
- -- build the small libraries
-- wavpack = Compile(settings, Collect("src/engine/external/wavpack/*.c"))
- pnglite = Compile(settings, Collect("src/engine/external/pnglite/*.c"))
-
- -- build game components
Index: games/teeworlds/patches/patch-configure_lua
===================================================================
RCS file: games/teeworlds/patches/patch-configure_lua
diff -N games/teeworlds/patches/patch-configure_lua
--- games/teeworlds/patches/patch-configure_lua 1 Mar 2017 20:42:57 -0000
1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,36 +0,0 @@
-$OpenBSD: patch-configure_lua,v 1.1 2017/03/01 20:42:57 naddy Exp $
-
-Accept more compilers than a hardcoded gcc.
-
-(SetDriversClang() is also a no-op)
-
---- configure.lua.orig Sun Nov 13 16:41:35 2016
-+++ configure.lua Tue Feb 28 19:34:03 2017
-@@ -362,10 +362,9 @@ function OptCCompiler(name, default_driver, default_c,
- else
- if ExecuteSilent("cl") == 0 then
- option.driver = "cl"
-- elseif ExecuteSilent("g++ -v") == 0 then
-- option.driver = "gcc"
- else
-- error("no c/c++ compiler found")
-+ -- Assume GCC compatible
-+ option.driver = "${CC}"
- end
- end
- --setup_compiler(option.value)
-@@ -374,12 +373,9 @@ function OptCCompiler(name, default_driver, default_c,
- local apply = function(option, settings)
- if option.driver == "cl" then
- SetDriversCL(settings)
-- elseif option.driver == "gcc" then
-- SetDriversGCC(settings)
-- elseif option.driver == "clang" then
-- SetDriversClang(settings)
- else
-- error(option.driver.." is not a known c/c++ compile
driver")
-+ -- Assume GCC compatible
-+ SetDriversGCC(settings)
- end
-
- if option.c_compiler then settings.cc.c_compiler =
option.c_compiler end
Index: games/teeworlds/patches/patch-scripts_build_py
===================================================================
RCS file: games/teeworlds/patches/patch-scripts_build_py
diff -N games/teeworlds/patches/patch-scripts_build_py
--- games/teeworlds/patches/patch-scripts_build_py 27 Dec 2015 17:56:22
-0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,12 +0,0 @@
-$OpenBSD: patch-scripts_build_py,v 1.1 2015/12/27 17:56:22 jasper Exp $
---- scripts/build.py.orig Sun Jul 31 23:17:00 2011
-+++ scripts/build.py Sat Mar 17 15:19:47 2012
-@@ -276,7 +276,7 @@ if flag_make_release:
- os.chdir(src_dir_teeworlds)
- command = '"%s/%s/scripts/make_release.py" %s %s' % (work_dir,
src_dir_teeworlds, version_teeworlds, platform)
- if os.name != "nt":
-- command = "python %s" % command
-+ command = "${MODPY_BIN} %s" % command
- if os.system(command) != 0:
- bail("failed to make a relase of %s" % name)
- final_output = "FAIL"
Index: games/teeworlds/patches/patch-scripts_compiler_py
===================================================================
RCS file: games/teeworlds/patches/patch-scripts_compiler_py
diff -N games/teeworlds/patches/patch-scripts_compiler_py
--- games/teeworlds/patches/patch-scripts_compiler_py 27 Dec 2015 17:56:22
-0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,9 +0,0 @@
-$OpenBSD: patch-scripts_compiler_py,v 1.1 2015/12/27 17:56:22 jasper Exp $
---- scripts/compiler.py.orig Sun Jul 31 23:17:00 2011
-+++ scripts/compiler.py Sat Mar 17 15:22:43 2012
-@@ -1,4 +1,4 @@
--#!/usr/bin/python
-+#!${MODPY_BIN}
-
- import sys
- import struct
Index: games/teeworlds/patches/patch-scripts_font_installer_sh
===================================================================
RCS file: games/teeworlds/patches/patch-scripts_font_installer_sh
diff -N games/teeworlds/patches/patch-scripts_font_installer_sh
--- games/teeworlds/patches/patch-scripts_font_installer_sh 27 Dec 2015
17:56:22 -0000 1.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,8 +0,0 @@
-$OpenBSD: patch-scripts_font_installer_sh,v 1.2 2015/12/27 17:56:22 jasper Exp
$
---- scripts/font_installer.sh.orig Sun Jul 31 23:17:00 2011
-+++ scripts/font_installer.sh Sat Mar 17 15:19:57 2012
-@@ -1,3 +1,3 @@
- echo Generating .fnts...
- ../../font_generator/a.out
--python ../scripts/font_converter.py default*.fnt
-+${MODPY_BIN} ../scripts/font_converter.py default*.fnt
Index: games/teeworlds/patches/patch-src_base_detect_h
===================================================================
RCS file: games/teeworlds/patches/patch-src_base_detect_h
diff -N games/teeworlds/patches/patch-src_base_detect_h
--- games/teeworlds/patches/patch-src_base_detect_h 27 Dec 2015 17:56:22
-0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,25 +0,0 @@
-$OpenBSD: patch-src_base_detect_h,v 1.1 2015/12/27 17:56:22 jasper Exp $
-
-Fix endianness detection.
-
---- src/base/detect.h.orig Wed Nov 19 23:08:22 2014
-+++ src/base/detect.h Sat Aug 22 16:44:40 2015
-@@ -78,15 +78,15 @@
-
- /* use gcc endianness definitions when available */
- #if defined(__GNUC__) && !defined(__APPLE__) && !defined(__MINGW32__) &&
!defined(__sun)
-- #if defined(__FreeBSD__) || defined(__OpenBSD__)
-+ #if defined(__FreeBSD__)
- #include <sys/endian.h>
- #else
- #include <endian.h>
- #endif
-
-- #if __BYTE_ORDER == __LITTLE_ENDIAN
-+ #if BYTE_ORDER == LITTLE_ENDIAN
- #define CONF_ARCH_ENDIAN_LITTLE 1
-- #elif __BYTE_ORDER == __BIG_ENDIAN
-+ #elif BYTE_ORDER == BIG_ENDIAN
- #define CONF_ARCH_ENDIAN_BIG 1
- #endif
- #endif
Index: games/teeworlds/patches/patch-src_engine_client_sound_cpp
===================================================================
RCS file: games/teeworlds/patches/patch-src_engine_client_sound_cpp
diff -N games/teeworlds/patches/patch-src_engine_client_sound_cpp
--- games/teeworlds/patches/patch-src_engine_client_sound_cpp 30 Nov 2016
18:19:33 -0000 1.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,82 +0,0 @@
-$OpenBSD: patch-src_engine_client_sound_cpp,v 1.2 2016/11/30 18:19:33 jca Exp $
-
-Make it possible to compile with an external and newer wavpack.
-From Debian.
-
---- src/engine/client/sound.cpp.orig Sun Nov 13 16:41:35 2016
-+++ src/engine/client/sound.cpp Wed Nov 30 19:18:11 2016
-@@ -13,7 +13,7 @@
- #include "sound.h"
-
- extern "C" { // wavpack
-- #include <engine/external/wavpack/wavpack.h>
-+ #include <wavpack/wavpack.h>
- }
- #include <math.h>
-
-@@ -328,17 +328,14 @@ void CSound::RateConvert(int SampleID)
- pSample->m_NumFrames = NumFrames;
- }
-
--int CSound::ReadData(void *pBuffer, int Size)
--{
-- return io_read(ms_File, pBuffer, Size);
--}
--
- int CSound::LoadWV(const char *pFilename)
- {
- CSample *pSample;
- int SampleID = -1;
- char aError[100];
- WavpackContext *pContext;
-+ char aWholePath[1024];
-+ IOHANDLE File;
-
- // don't waste memory on sound when we are stress testing
- if(g_Config.m_DbgStress)
-@@ -351,19 +348,23 @@ int CSound::LoadWV(const char *pFilename)
- if(!m_pStorage)
- return -1;
-
-- ms_File = m_pStorage->OpenFile(pFilename, IOFLAG_READ,
IStorage::TYPE_ALL);
-- if(!ms_File)
-+ File = m_pStorage->OpenFile(pFilename, IOFLAG_READ, IStorage::TYPE_ALL,
aWholePath, sizeof(aWholePath));
-+ if(!File)
- {
- dbg_msg("sound/wv", "failed to open file. filename='%s'",
pFilename);
- return -1;
- }
-+ else
-+ {
-+ io_close(File);
-+ }
-
- SampleID = AllocID();
- if(SampleID < 0)
- return -1;
- pSample = &m_aSamples[SampleID];
-
-- pContext = WavpackOpenFileInput(ReadData, aError);
-+ pContext = WavpackOpenFileInput(aWholePath, aError, OPEN_2CH_MAX, 0);
- if (pContext)
- {
- int m_aSamples = WavpackGetNumSamples(pContext);
-@@ -419,9 +420,6 @@ int CSound::LoadWV(const char *pFilename)
- dbg_msg("sound/wv", "failed to open %s: %s", pFilename, aError);
- }
-
-- io_close(ms_File);
-- ms_File = NULL;
--
- if(g_Config.m_Debug)
- dbg_msg("sound/wv", "loaded %s", pFilename);
-
-@@ -526,8 +524,6 @@ void CSound::StopAll()
- }
- lock_unlock(m_SoundLock);
- }
--
--IOHANDLE CSound::ms_File = 0;
-
- IEngineSound *CreateEngineSound() { return new CSound; }
-
Index: games/teeworlds/patches/patch-src_engine_client_sound_h
===================================================================
RCS file: games/teeworlds/patches/patch-src_engine_client_sound_h
diff -N games/teeworlds/patches/patch-src_engine_client_sound_h
--- games/teeworlds/patches/patch-src_engine_client_sound_h 27 Dec 2015
17:56:22 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,18 +0,0 @@
-$OpenBSD: patch-src_engine_client_sound_h,v 1.1 2015/12/27 17:56:22 jasper Exp
$
-
-Make it possible to compile with an external and newer wavpack.
-From Debian.
-
---- src/engine/client/sound.h.orig Wed May 1 13:47:39 2013
-+++ src/engine/client/sound.h Thu May 8 15:58:08 2014
-@@ -21,10 +21,6 @@ class CSound : public IEngineSound (public)
-
- static void RateConvert(int SampleID);
-
-- // TODO: Refactor: clean this mess up
-- static IOHANDLE ms_File;
-- static int ReadData(void *pBuffer, int Size);
--
- virtual bool IsSoundEnabled() { return m_SoundEnabled != 0; }
-
- virtual int LoadWV(const char *pFilename);
Index: games/teeworlds/patches/patch-src_engine_shared_netban_cpp
===================================================================
RCS file: games/teeworlds/patches/patch-src_engine_shared_netban_cpp
diff -N games/teeworlds/patches/patch-src_engine_shared_netban_cpp
--- games/teeworlds/patches/patch-src_engine_shared_netban_cpp 6 May 2017
13:42:17 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,12 +0,0 @@
-$OpenBSD: patch-src_engine_shared_netban_cpp,v 1.1 2017/05/06 13:42:17 espie
Exp $
-
-Index: src/engine/shared/netban.cpp
---- src/engine/shared/netban.cpp.orig
-+++ src/engine/shared/netban.cpp
-@@ -601,3 +601,6 @@ void CNetBan::ConBansSave(IConsole::IResult *pResult,
- str_format(aBuf, sizeof(aBuf), "saved banlist to '%s'",
pResult->GetString(0));
- pThis->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "net_ban",
aBuf);
- }
-+
-+template class CNetBan::CBanPool<NETADDR, 1>;
-+template class CNetBan::CBanPool<CNetRange, 16>;
Index: games/teeworlds/patches/patch-src_engine_shared_storage_cpp
===================================================================
RCS file: games/teeworlds/patches/patch-src_engine_shared_storage_cpp
diff -N games/teeworlds/patches/patch-src_engine_shared_storage_cpp
--- games/teeworlds/patches/patch-src_engine_shared_storage_cpp 27 Dec 2015
17:56:22 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,12 +0,0 @@
-$OpenBSD: patch-src_engine_shared_storage_cpp,v 1.1 2015/12/27 17:56:22 jasper
Exp $
---- src/engine/shared/storage.cpp.orig Sun Jul 31 23:17:00 2011
-+++ src/engine/shared/storage.cpp Sat Mar 17 15:21:21 2012
-@@ -5,7 +5,7 @@
- #include "linereader.h"
-
- // compiled-in data-dir path
--#define DATA_DIR "data"
-+#define DATA_DIR "${PREFIX}/share/teeworlds/data"
-
- class CStorage : public IStorage
- {
Index: games/teeworlds/patches/patch-src_game_client_gameclient_cpp
===================================================================
RCS file: games/teeworlds/patches/patch-src_game_client_gameclient_cpp
diff -N games/teeworlds/patches/patch-src_game_client_gameclient_cpp
--- games/teeworlds/patches/patch-src_game_client_gameclient_cpp 27 Dec
2015 17:56:59 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,24 +0,0 @@
-$OpenBSD: patch-src_game_client_gameclient_cpp,v 1.1 2015/12/27 17:56:59
jasper Exp $
-
-Don't require a local copy of DejavuSans.ttf.
-
---- src/game/client/gameclient.cpp.orig Wed May 1 13:47:39 2013
-+++ src/game/client/gameclient.cpp Thu May 8 16:59:57 2014
-@@ -240,7 +240,7 @@ void CGameClient::OnInit()
- // load default font
- static CFont *pDefaultFont = 0;
- char aFilename[512];
-- IOHANDLE File = Storage()->OpenFile("fonts/DejaVuSans.ttf",
IOFLAG_READ, IStorage::TYPE_ALL, aFilename, sizeof(aFilename));
-+ IOHANDLE File =
Storage()->OpenFile("${X11BASE}/lib/X11/fonts/TTF/DejaVuSans.ttf", IOFLAG_READ,
IStorage::TYPE_ALL, aFilename, sizeof(aFilename));
- if(File)
- {
- io_close(File);
-@@ -248,7 +248,7 @@ void CGameClient::OnInit()
- TextRender()->SetDefaultFont(pDefaultFont);
- }
- if(!pDefaultFont)
-- Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "gameclient",
"failed to load font. filename='fonts/DejaVuSans.ttf'");
-+ Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "gameclient",
"failed to load font. filename='DejaVuSans.ttf'");
-
- // init all components
- for(int i = m_All.m_Num-1; i >= 0; --i)
Index: games/teeworlds/pkg/PLIST
===================================================================
RCS file: /cvs/ports/games/teeworlds/pkg/PLIST,v
retrieving revision 1.3
diff -u -p -u -p -r1.3 PLIST
--- games/teeworlds/pkg/PLIST 30 Nov 2016 18:17:03 -0000 1.3
+++ games/teeworlds/pkg/PLIST 8 Aug 2021 19:58:01 -0000
@@ -110,6 +110,12 @@ share/teeworlds/data/audio/wp_hammer_hit
share/teeworlds/data/audio/wp_hammer_swing-01.wv
share/teeworlds/data/audio/wp_hammer_swing-02.wv
share/teeworlds/data/audio/wp_hammer_swing-03.wv
+share/teeworlds/data/audio/wp_laser_bnce-01.wv
+share/teeworlds/data/audio/wp_laser_bnce-02.wv
+share/teeworlds/data/audio/wp_laser_bnce-03.wv
+share/teeworlds/data/audio/wp_laser_fire-01.wv
+share/teeworlds/data/audio/wp_laser_fire-02.wv
+share/teeworlds/data/audio/wp_laser_fire-03.wv
share/teeworlds/data/audio/wp_ninja_attack-01.wv
share/teeworlds/data/audio/wp_ninja_attack-02.wv
share/teeworlds/data/audio/wp_ninja_attack-03.wv
@@ -123,22 +129,12 @@ share/teeworlds/data/audio/wp_noammo-02.
share/teeworlds/data/audio/wp_noammo-03.wv
share/teeworlds/data/audio/wp_noammo-04.wv
share/teeworlds/data/audio/wp_noammo-05.wv
-share/teeworlds/data/audio/wp_rifle_bnce-01.wv
-share/teeworlds/data/audio/wp_rifle_bnce-02.wv
-share/teeworlds/data/audio/wp_rifle_bnce-03.wv
-share/teeworlds/data/audio/wp_rifle_fire-01.wv
-share/teeworlds/data/audio/wp_rifle_fire-02.wv
-share/teeworlds/data/audio/wp_rifle_fire-03.wv
share/teeworlds/data/audio/wp_shotty_fire-01.wv
share/teeworlds/data/audio/wp_shotty_fire-02.wv
share/teeworlds/data/audio/wp_shotty_fire-03.wv
share/teeworlds/data/audio/wp_switch-01.wv
share/teeworlds/data/audio/wp_switch-02.wv
share/teeworlds/data/audio/wp_switch-03.wv
-share/teeworlds/data/blob.png
-share/teeworlds/data/browse_icons.png
-share/teeworlds/data/console.png
-share/teeworlds/data/console_bar.png
share/teeworlds/data/countryflags/
share/teeworlds/data/countryflags/AD.png
share/teeworlds/data/countryflags/AE.png
@@ -318,6 +314,7 @@ share/teeworlds/data/countryflags/PL.png
share/teeworlds/data/countryflags/PM.png
share/teeworlds/data/countryflags/PN.png
share/teeworlds/data/countryflags/PR.png
+share/teeworlds/data/countryflags/PS.png
share/teeworlds/data/countryflags/PT.png
share/teeworlds/data/countryflags/PW.png
share/teeworlds/data/countryflags/PY.png
@@ -377,7 +374,11 @@ share/teeworlds/data/countryflags/VN.png
share/teeworlds/data/countryflags/VU.png
share/teeworlds/data/countryflags/WF.png
share/teeworlds/data/countryflags/WS.png
+share/teeworlds/data/countryflags/XBZ.png
+share/teeworlds/data/countryflags/XCA.png
share/teeworlds/data/countryflags/XEN.png
+share/teeworlds/data/countryflags/XES.png
+share/teeworlds/data/countryflags/XGA.png
share/teeworlds/data/countryflags/XNI.png
share/teeworlds/data/countryflags/XSC.png
share/teeworlds/data/countryflags/XWA.png
@@ -386,53 +387,67 @@ share/teeworlds/data/countryflags/ZA.png
share/teeworlds/data/countryflags/ZM.png
share/teeworlds/data/countryflags/ZW.png
share/teeworlds/data/countryflags/default.png
-share/teeworlds/data/countryflags/index.txt
-share/teeworlds/data/debug_font.png
-share/teeworlds/data/demo_buttons.png
+share/teeworlds/data/countryflags/index.json
+share/teeworlds/data/deadtee.png
share/teeworlds/data/editor/
+share/teeworlds/data/editor/automap/
+share/teeworlds/data/editor/automap/desert_main.json
+share/teeworlds/data/editor/automap/grass_doodads.json
+share/teeworlds/data/editor/automap/grass_main.json
+share/teeworlds/data/editor/automap/jungle_deathtiles.json
+share/teeworlds/data/editor/automap/jungle_main.json
+share/teeworlds/data/editor/automap/winter_main.json
share/teeworlds/data/editor/background.png
share/teeworlds/data/editor/checker.png
share/teeworlds/data/editor/cursor.png
-share/teeworlds/data/editor/desert_main.rules
share/teeworlds/data/editor/entities.png
-share/teeworlds/data/editor/grass_main.rules
-share/teeworlds/data/editor/jungle_main.rules
-share/teeworlds/data/editor/winter_main.rules
share/teeworlds/data/emoticons.png
-share/teeworlds/data/file_icons.png
+share/teeworlds/data/fonts/
+share/teeworlds/data/fonts/DejaVuSans.ttf
share/teeworlds/data/game.png
-share/teeworlds/data/gui_buttons.png
-share/teeworlds/data/gui_cursor.png
-share/teeworlds/data/gui_icons.png
-share/teeworlds/data/gui_logo.png
share/teeworlds/data/languages/
-share/teeworlds/data/languages/belarusian.txt
-share/teeworlds/data/languages/bosnian.txt
-share/teeworlds/data/languages/brazilian_portuguese.txt
-share/teeworlds/data/languages/bulgarian.txt
-share/teeworlds/data/languages/chuvash.txt
-share/teeworlds/data/languages/czech.txt
-share/teeworlds/data/languages/danish.txt
-share/teeworlds/data/languages/dutch.txt
-share/teeworlds/data/languages/finnish.txt
-share/teeworlds/data/languages/french.txt
-share/teeworlds/data/languages/german.txt
-share/teeworlds/data/languages/hungarian.txt
-share/teeworlds/data/languages/index.txt
-share/teeworlds/data/languages/italian.txt
-share/teeworlds/data/languages/kyrgyz.txt
-share/teeworlds/data/languages/norwegian.txt
-share/teeworlds/data/languages/polish.txt
-share/teeworlds/data/languages/portuguese.txt
-share/teeworlds/data/languages/romanian.txt
-share/teeworlds/data/languages/russian.txt
-share/teeworlds/data/languages/sakha.txt
-share/teeworlds/data/languages/serbian.txt
-share/teeworlds/data/languages/slovak.txt
-share/teeworlds/data/languages/spanish.txt
-share/teeworlds/data/languages/swedish.txt
-share/teeworlds/data/languages/turkish.txt
-share/teeworlds/data/languages/ukrainian.txt
+share/teeworlds/data/languages/belarusian.json
+share/teeworlds/data/languages/bosnian.json
+share/teeworlds/data/languages/brazilian_portuguese.json
+share/teeworlds/data/languages/breton.json
+share/teeworlds/data/languages/bulgarian.json
+share/teeworlds/data/languages/catalan.json
+share/teeworlds/data/languages/chuvash.json
+share/teeworlds/data/languages/czech.json
+share/teeworlds/data/languages/danish.json
+share/teeworlds/data/languages/dutch.json
+share/teeworlds/data/languages/esperanto.json
+share/teeworlds/data/languages/estonian.json
+share/teeworlds/data/languages/finnish.json
+share/teeworlds/data/languages/french.json
+share/teeworlds/data/languages/gaelic_scottish.json
+share/teeworlds/data/languages/galician.json
+share/teeworlds/data/languages/german.json
+share/teeworlds/data/languages/greek.json
+share/teeworlds/data/languages/hungarian.json
+share/teeworlds/data/languages/index.json
+share/teeworlds/data/languages/irish.json
+share/teeworlds/data/languages/italian.json
+share/teeworlds/data/languages/japanese.json
+share/teeworlds/data/languages/korean.json
+share/teeworlds/data/languages/kyrgyz.json
+share/teeworlds/data/languages/license.txt
+share/teeworlds/data/languages/lithuanian.json
+share/teeworlds/data/languages/norwegian.json
+share/teeworlds/data/languages/polish.json
+share/teeworlds/data/languages/portuguese.json
+share/teeworlds/data/languages/readme.txt
+share/teeworlds/data/languages/romanian.json
+share/teeworlds/data/languages/russian.json
+share/teeworlds/data/languages/serbian.json
+share/teeworlds/data/languages/simplified_chinese.json
+share/teeworlds/data/languages/slovak.json
+share/teeworlds/data/languages/slovenian.json
+share/teeworlds/data/languages/spanish.json
+share/teeworlds/data/languages/swedish.json
+share/teeworlds/data/languages/traditional_chinese.json
+share/teeworlds/data/languages/turkish.json
+share/teeworlds/data/languages/ukrainian.json
share/teeworlds/data/mapres/
share/teeworlds/data/mapres/bg_cloud1.png
share/teeworlds/data/mapres/bg_cloud2.png
@@ -442,7 +457,10 @@ share/teeworlds/data/mapres/desert_main.
share/teeworlds/data/mapres/desert_mountains.png
share/teeworlds/data/mapres/desert_mountains2.png
share/teeworlds/data/mapres/desert_sun.png
+share/teeworlds/data/mapres/easter.png
share/teeworlds/data/mapres/generic_deathtiles.png
+share/teeworlds/data/mapres/generic_lamps.png
+share/teeworlds/data/mapres/generic_shadows.png
share/teeworlds/data/mapres/generic_unhookable.png
share/teeworlds/data/mapres/grass_doodads.png
share/teeworlds/data/mapres/grass_main.png
@@ -452,6 +470,7 @@ share/teeworlds/data/mapres/jungle_dooda
share/teeworlds/data/mapres/jungle_main.png
share/teeworlds/data/mapres/jungle_midground.png
share/teeworlds/data/mapres/jungle_unhookables.png
+share/teeworlds/data/mapres/light.png
share/teeworlds/data/mapres/moon.png
share/teeworlds/data/mapres/mountains.png
share/teeworlds/data/mapres/snow.png
@@ -470,28 +489,194 @@ share/teeworlds/data/maps/ctf4.map
share/teeworlds/data/maps/ctf5.map
share/teeworlds/data/maps/ctf6.map
share/teeworlds/data/maps/ctf7.map
+share/teeworlds/data/maps/ctf8.map
share/teeworlds/data/maps/dm1.map
share/teeworlds/data/maps/dm2.map
+share/teeworlds/data/maps/dm3.map
share/teeworlds/data/maps/dm6.map
share/teeworlds/data/maps/dm7.map
share/teeworlds/data/maps/dm8.map
share/teeworlds/data/maps/dm9.map
+share/teeworlds/data/maps/license.txt
+share/teeworlds/data/maps/lms1.map
+share/teeworlds/data/maps/readme.txt
share/teeworlds/data/particles.png
+share/teeworlds/data/race_flag.png
share/teeworlds/data/skins/
-share/teeworlds/data/skins/bluekitty.png
-share/teeworlds/data/skins/bluestripe.png
-share/teeworlds/data/skins/brownbear.png
-share/teeworlds/data/skins/cammo.png
-share/teeworlds/data/skins/cammostripes.png
-share/teeworlds/data/skins/coala.png
-share/teeworlds/data/skins/default.png
-share/teeworlds/data/skins/limekitty.png
-share/teeworlds/data/skins/pinky.png
-share/teeworlds/data/skins/redbopp.png
-share/teeworlds/data/skins/redstripe.png
-share/teeworlds/data/skins/saddo.png
-share/teeworlds/data/skins/toptri.png
-share/teeworlds/data/skins/twinbop.png
-share/teeworlds/data/skins/twintri.png
-share/teeworlds/data/skins/warpaint.png
-share/teeworlds/data/skins/x_ninja.png
+share/teeworlds/data/skins/beaver.json
+share/teeworlds/data/skins/bluekitty.json
+share/teeworlds/data/skins/bluestripe.json
+share/teeworlds/data/skins/body/
+share/teeworlds/data/skins/body/bat.png
+share/teeworlds/data/skins/body/bear.png
+share/teeworlds/data/skins/body/beaver.png
+share/teeworlds/data/skins/body/dog.png
+share/teeworlds/data/skins/body/force.png
+share/teeworlds/data/skins/body/fox.png
+share/teeworlds/data/skins/body/hippo.png
+share/teeworlds/data/skins/body/kitty.png
+share/teeworlds/data/skins/body/koala.png
+share/teeworlds/data/skins/body/monkey.png
+share/teeworlds/data/skins/body/mouse.png
+share/teeworlds/data/skins/body/piglet.png
+share/teeworlds/data/skins/body/raccoon.png
+share/teeworlds/data/skins/body/spiky.png
+share/teeworlds/data/skins/body/standard.png
+share/teeworlds/data/skins/body/x_ninja.png
+share/teeworlds/data/skins/bot.png
+share/teeworlds/data/skins/brownbear.json
+share/teeworlds/data/skins/bumbler.json
+share/teeworlds/data/skins/cammo.json
+share/teeworlds/data/skins/cammostripes.json
+share/teeworlds/data/skins/cavebat.json
+share/teeworlds/data/skins/decoration/
+share/teeworlds/data/skins/decoration/hair.png
+share/teeworlds/data/skins/decoration/twinbopp.png
+share/teeworlds/data/skins/decoration/twinmello.png
+share/teeworlds/data/skins/decoration/twinpen.png
+share/teeworlds/data/skins/decoration/unibop.png
+share/teeworlds/data/skins/decoration/unimelo.png
+share/teeworlds/data/skins/decoration/unipento.png
+share/teeworlds/data/skins/default.json
+share/teeworlds/data/skins/eyes/
+share/teeworlds/data/skins/eyes/colorable.png
+share/teeworlds/data/skins/eyes/negative.png
+share/teeworlds/data/skins/eyes/standard.png
+share/teeworlds/data/skins/eyes/standardreal.png
+share/teeworlds/data/skins/eyes/x_ninja.png
+share/teeworlds/data/skins/feet/
+share/teeworlds/data/skins/feet/standard.png
+share/teeworlds/data/skins/force.json
+share/teeworlds/data/skins/fox.json
+share/teeworlds/data/skins/greycoon.json
+share/teeworlds/data/skins/greyfox.json
+share/teeworlds/data/skins/hands/
+share/teeworlds/data/skins/hands/standard.png
+share/teeworlds/data/skins/hippo.json
+share/teeworlds/data/skins/koala.json
+share/teeworlds/data/skins/limedog.json
+share/teeworlds/data/skins/limekitty.json
+share/teeworlds/data/skins/marking/
+share/teeworlds/data/skins/marking/bear.png
+share/teeworlds/data/skins/marking/belly1.png
+share/teeworlds/data/skins/marking/belly2.png
+share/teeworlds/data/skins/marking/blush.png
+share/teeworlds/data/skins/marking/bug.png
+share/teeworlds/data/skins/marking/cammo1.png
+share/teeworlds/data/skins/marking/cammo2.png
+share/teeworlds/data/skins/marking/cammostripes.png
+share/teeworlds/data/skins/marking/coonfluff.png
+share/teeworlds/data/skins/marking/donny.png
+share/teeworlds/data/skins/marking/downdony.png
+share/teeworlds/data/skins/marking/duodonny.png
+share/teeworlds/data/skins/marking/fox.png
+share/teeworlds/data/skins/marking/hipbel.png
+share/teeworlds/data/skins/marking/lowcross.png
+share/teeworlds/data/skins/marking/lowpaint.png
+share/teeworlds/data/skins/marking/marksman.png
+share/teeworlds/data/skins/marking/mice.png
+share/teeworlds/data/skins/marking/mixture1.png
+share/teeworlds/data/skins/marking/mixture2.png
+share/teeworlds/data/skins/marking/monkey.png
+share/teeworlds/data/skins/marking/panda1.png
+share/teeworlds/data/skins/marking/panda2.png
+share/teeworlds/data/skins/marking/purelove.png
+share/teeworlds/data/skins/marking/saddo.png
+share/teeworlds/data/skins/marking/setisu.png
+share/teeworlds/data/skins/marking/sidemarks.png
+share/teeworlds/data/skins/marking/singu.png
+share/teeworlds/data/skins/marking/stripe.png
+share/teeworlds/data/skins/marking/striped.png
+share/teeworlds/data/skins/marking/stripes.png
+share/teeworlds/data/skins/marking/stripes2.png
+share/teeworlds/data/skins/marking/thunder.png
+share/teeworlds/data/skins/marking/tiger1.png
+share/teeworlds/data/skins/marking/tiger2.png
+share/teeworlds/data/skins/marking/toptri.png
+share/teeworlds/data/skins/marking/triangular.png
+share/teeworlds/data/skins/marking/tricircular.png
+share/teeworlds/data/skins/marking/tripledon.png
+share/teeworlds/data/skins/marking/tritri.png
+share/teeworlds/data/skins/marking/twinbelly.png
+share/teeworlds/data/skins/marking/twincross.png
+share/teeworlds/data/skins/marking/twintri.png
+share/teeworlds/data/skins/marking/uppy.png
+share/teeworlds/data/skins/marking/warpaint.png
+share/teeworlds/data/skins/marking/warstripes.png
+share/teeworlds/data/skins/marking/whisker.png
+share/teeworlds/data/skins/marking/wildpaint.png
+share/teeworlds/data/skins/marking/wildpatch.png
+share/teeworlds/data/skins/marking/yinyang.png
+share/teeworlds/data/skins/monkey.json
+share/teeworlds/data/skins/paintgre.json
+share/teeworlds/data/skins/pandabear.json
+share/teeworlds/data/skins/panther.json
+share/teeworlds/data/skins/pento.json
+share/teeworlds/data/skins/piggy.json
+share/teeworlds/data/skins/pinky.json
+share/teeworlds/data/skins/raccoon.json
+share/teeworlds/data/skins/redbopp.json
+share/teeworlds/data/skins/redstripe.json
+share/teeworlds/data/skins/saddo.json
+share/teeworlds/data/skins/setisu.json
+share/teeworlds/data/skins/snowti.json
+share/teeworlds/data/skins/spiky.json
+share/teeworlds/data/skins/swardy.json
+share/teeworlds/data/skins/tiger.json
+share/teeworlds/data/skins/tooxy.json
+share/teeworlds/data/skins/toptri.json
+share/teeworlds/data/skins/twinbop.json
+share/teeworlds/data/skins/twintri.json
+share/teeworlds/data/skins/warmouse.json
+share/teeworlds/data/skins/warpaint.json
+share/teeworlds/data/skins/x_ninja.json
+share/teeworlds/data/skins/xmas_hat.png
+share/teeworlds/data/ui/
+share/teeworlds/data/ui/blob.png
+share/teeworlds/data/ui/console.png
+share/teeworlds/data/ui/console_bar.png
+share/teeworlds/data/ui/debug_font.png
+share/teeworlds/data/ui/demo_buttons.png
+share/teeworlds/data/ui/file_icons.png
+share/teeworlds/data/ui/gametypes/
+share/teeworlds/data/ui/gametypes/ctf.png
+share/teeworlds/data/ui/gametypes/dm.png
+share/teeworlds/data/ui/gametypes/lms.png
+share/teeworlds/data/ui/gametypes/lts.png
+share/teeworlds/data/ui/gametypes/mod.png
+share/teeworlds/data/ui/gametypes/race.png
+share/teeworlds/data/ui/gametypes/tdm.png
+share/teeworlds/data/ui/gui_buttons.png
+share/teeworlds/data/ui/gui_cursor.png
+share/teeworlds/data/ui/gui_icons.png
+share/teeworlds/data/ui/gui_logo.png
+share/teeworlds/data/ui/icons/
+share/teeworlds/data/ui/icons/arrows.png
+share/teeworlds/data/ui/icons/browse.png
+share/teeworlds/data/ui/icons/browser.png
+share/teeworlds/data/ui/icons/chat_whisper.png
+share/teeworlds/data/ui/icons/friend.png
+share/teeworlds/data/ui/icons/level.png
+share/teeworlds/data/ui/icons/menu.png
+share/teeworlds/data/ui/icons/sidebar.png
+share/teeworlds/data/ui/icons/timer_clock.png
+share/teeworlds/data/ui/icons/tools.png
+share/teeworlds/data/ui/menuimages/
+share/teeworlds/data/ui/menuimages/demos.png
+share/teeworlds/data/ui/menuimages/editor.png
+share/teeworlds/data/ui/menuimages/local_server.png
+share/teeworlds/data/ui/menuimages/play_game.png
+share/teeworlds/data/ui/menuimages/settings.png
+share/teeworlds/data/ui/no_skinpart.png
+share/teeworlds/data/ui/sound_icons.png
+share/teeworlds/data/ui/themes/
+share/teeworlds/data/ui/themes/heavens.png
+share/teeworlds/data/ui/themes/heavens_day.map
+share/teeworlds/data/ui/themes/heavens_night.map
+share/teeworlds/data/ui/themes/jungle.png
+share/teeworlds/data/ui/themes/jungle_day.map
+share/teeworlds/data/ui/themes/jungle_night.map
+share/teeworlds/data/ui/themes/none.png
+share/teeworlds/data/ui/themes/winter.png
+share/teeworlds/data/ui/themes/winter_day.map
+share/teeworlds/data/ui/themes/winter_night.map