git: f6f0a939cb7c - main - games/sokobano: new port had been added (+)

From: Alexey Dokuchaev <danfe_at_FreeBSD.org>
Date: Thu, 06 Jan 2022 14:25:02 UTC
The branch main has been updated by danfe:

URL: https://cgit.FreeBSD.org/ports/commit/?id=f6f0a939cb7c6ad54ed318ef37cdd727a347c650

commit f6f0a939cb7c6ad54ed318ef37cdd727a347c650
Author:     Alexey Dokuchaev <danfe@FreeBSD.org>
AuthorDate: 2022-01-06 14:23:24 +0000
Commit:     Alexey Dokuchaev <danfe@FreeBSD.org>
CommitDate: 2022-01-06 14:23:24 +0000

    games/sokobano: new port had been added (+)
    
    Sokobano is an entertaining, OpenGL-based Sokoban game implementation
    written in Java.  Source code had been modified to keep the settings,
    player's profile, progress, and score board in user's home directory.
    
    Inspired by:    https://habr.com/ru/post/597857/
---
 games/Makefile                                     |   1 +
 games/sokobano/Makefile                            |  45 +++
 games/sokobano/distinfo                            |   3 +
 games/sokobano/files/makefile                      |  41 ++
 .../patch-src_gdi1sokoban_logic_ConfigManager.java |  13 +
 .../patch-src_gdi1sokoban_logic_LevelManager.java  |  25 ++
 ...atch-src_gdi1sokoban_logic_LevelSetManager.java |  63 +++
 .../patch-src_gdi1sokoban_logic_PlayerManager.java |  23 ++
 games/sokobano/files/sokobano.sh.in                |  25 ++
 games/sokobano/pkg-descr                           |  11 +
 games/sokobano/pkg-plist                           | 443 +++++++++++++++++++++
 11 files changed, 693 insertions(+)

diff --git a/games/Makefile b/games/Makefile
index 8b5761a81d8c..19b2dd19e22c 100644
--- a/games/Makefile
+++ b/games/Makefile
@@ -903,6 +903,7 @@
     SUBDIR += slashem-tty
     SUBDIR += slump
     SUBDIR += sokoban
+    SUBDIR += sokobano
     SUBDIR += sol
     SUBDIR += solarconquest
     SUBDIR += solarus
diff --git a/games/sokobano/Makefile b/games/sokobano/Makefile
new file mode 100644
index 000000000000..d3cde6d60266
--- /dev/null
+++ b/games/sokobano/Makefile
@@ -0,0 +1,45 @@
+# Created by: Alexey Dokuchaev <danfe@FreeBSD.org>
+
+PORTNAME=	sokobano
+DISTVERSION=	1.0.3
+CATEGORIES=	games java
+MASTER_SITES=	SF/${PORTNAME}/${PORTNAME}/${PORTNAME}%20${PORTVERSION}
+DISTFILES=	Sokobano.zip
+
+MAINTAINER=	danfe@FreeBSD.org
+COMMENT=	Entertaining Sokoban game with nice 3D graphics
+
+LICENSE=	GPLv2
+
+BUILD_DEPENDS=	${LOCALBASE}/share/java/classes/lwjgl/lwjgl.jar:games/lwjgl
+RUN_DEPENDS:=	${LOCALBASE}/share/java/classes/jmf.jar:java/jmf \
+		${BUILD_DEPENDS}
+
+USES=		gmake
+USE_JAVA=	8
+MAKEFILE=	${FILESDIR}/makefile
+MAKE_ENV=	JAVA_VERSION=${JAVA_VERSION}
+WRKSRC=		${WRKDIR}/Sokobano
+BUILD_WRKSRC=	${WRKSRC}/src/gdi1sokoban
+
+JARNAME=	Sokobano-${PORTVERSION}.jar
+SUB_FILES=	${PORTNAME}.sh
+SUB_LIST=	JARNAME=${JARNAME}
+
+post-extract:
+# All levels must be named as ``Level_$id.txt'' (uppercase `L')
+	@for f in ${WRKSRC}/res/levelSet/[67]/level_*.txt; do \
+		${MV} $$f $${f%le*}L$${f##*/l}; done
+
+do-install:
+	${INSTALL_DATA} ${WRKSRC}/bin/Sokobano.jar \
+		${STAGEDIR}${JAVAJARDIR}/${JARNAME}
+	${INSTALL_SCRIPT} ${WRKDIR}/${PORTNAME}.sh \
+		${STAGEDIR}${PREFIX}/bin/${PORTNAME}
+	cd ${WRKSRC}/res && ${COPYTREE_SHARE} "fonts levelSet mesh \
+		skins sounds textures" ${STAGEDIR}${DATADIR}/res \
+		"! -name highScores.xml"
+
+.include <bsd.port.mk>
+
+PATCH_ARGS+=	-l
diff --git a/games/sokobano/distinfo b/games/sokobano/distinfo
new file mode 100644
index 000000000000..5d6f10af1ee5
--- /dev/null
+++ b/games/sokobano/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1270821316
+SHA256 (Sokobano.zip) = a05f04d76b9570ea27814f2b3929a3ef4e50ace53bb0abd1eb20c3a188461623
+SIZE (Sokobano.zip) = 14465072
diff --git a/games/sokobano/files/makefile b/games/sokobano/files/makefile
new file mode 100644
index 000000000000..adb73d110ecc
--- /dev/null
+++ b/games/sokobano/files/makefile
@@ -0,0 +1,41 @@
+# Makefile to rebuild a limited subset of *.java files (only those that
+# we patch in the port).
+
+empty:=
+space:=$(empty) $(empty)
+
+JAR?=		jar
+JAVAC?=		javac -encoding ISO-8859-1 -XDenableSunApiLintControl
+BUILD_CLASSPATHS=	\
+		.. $(LOCALBASE)/share/java/classes/lwjgl/lwjgl.jar
+
+CLASS_FILES=	$(JAVA_FILES:.java=.class)
+JAVA_FILES=	logic/ConfigManager.java \
+		logic/LevelManager.java \
+		logic/LevelSetManager.java \
+		logic/PlayerManager.java
+
+BINDIR=		../../bin
+VPATH=		$(BINDIR)/gdi1sokoban
+
+$(CLASS_FILES): %.class: %.java
+	JAVA_VERSION=$(JAVA_VERSION) $(JAVAC) \
+		-d $(BINDIR) \
+		-cp $(subst $(space),:,$(BUILD_CLASSPATHS)) \
+		$<
+
+RUNTIME_CLASSPATHS=	\
+	$(LOCALBASE)/share/java/classes/lwjgl/lwjgl.jar \
+	$(LOCALBASE)/share/java/classes/lwjgl/lwjgl_util.jar \
+	$(LOCALBASE)/share/java/classes/jmf.jar
+
+manifest-addition:
+	@echo 'Class-Path: $(RUNTIME_CLASSPATHS)' > $@
+	@echo 'Main-Class: gdi1sokoban.Application' >> $@
+
+Sokobano.jar: manifest-addition $(CLASS_FILES)
+	$(JAR) cfm $(BINDIR)/$@ $< -C $(BINDIR) gdi1sokoban
+
+all: Sokobano.jar
+
+.PHONY: all
diff --git a/games/sokobano/files/patch-src_gdi1sokoban_logic_ConfigManager.java b/games/sokobano/files/patch-src_gdi1sokoban_logic_ConfigManager.java
new file mode 100644
index 000000000000..ec4ad463b256
--- /dev/null
+++ b/games/sokobano/files/patch-src_gdi1sokoban_logic_ConfigManager.java
@@ -0,0 +1,13 @@
+--- src/gdi1sokoban/logic/ConfigManager.java.orig	2009-03-26 21:46:24 UTC
++++ src/gdi1sokoban/logic/ConfigManager.java
+@@ -10,7 +10,9 @@ import java.io.ObjectOutputStream;
+ 
+ public class ConfigManager {
+ 
+-	private static final String GL_CONFIG_PATH ="res"+File.separator+"config"+File.separator+"global.cfg";
++	private static final String GL_CONFIG_PATH =
++	    System.getProperty("user.home") + File.separator + ".config" +
++	    File.separator + "sokobano" + File.separator + "global.cfg";
+ 
+ 	private static ConfigManager _instance;
+ 
diff --git a/games/sokobano/files/patch-src_gdi1sokoban_logic_LevelManager.java b/games/sokobano/files/patch-src_gdi1sokoban_logic_LevelManager.java
new file mode 100644
index 000000000000..3030d575bc1b
--- /dev/null
+++ b/games/sokobano/files/patch-src_gdi1sokoban_logic_LevelManager.java
@@ -0,0 +1,25 @@
+--- src/gdi1sokoban/logic/LevelManager.java.orig	2009-03-26 21:46:34 UTC
++++ src/gdi1sokoban/logic/LevelManager.java
+@@ -168,7 +168,11 @@ public class LevelManager extends IdentifierManager{
+ 		try{
+ 			DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
+ 			DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
+-			Document doc = docBuilder.parse(new File("res"+File.separator+"levelSet"+File.separator+_levelSetId+File.separator+"highScores.xml"));
++			String path = System.getProperty("user.home") +
++			    File.separator + ".config" + File.separator +
++			    "sokobano" + File.separator;
++			Document doc = docBuilder.parse(new File(path +
++			    _levelSetId + "-highScores.xml"));
+ 			NodeList levelList = doc.getElementsByTagName("level");
+ 			for (int i = 0; i < levelList.getLength(); i++) {
+ 				Node tmp = levelList.item(i);
+@@ -181,7 +185,8 @@ public class LevelManager extends IdentifierManager{
+ 				}
+ 			}
+ 			OutputFormat format = new OutputFormat(doc);
+-			FileOutputStream outputFile =new FileOutputStream("res"+File.separator+"levelSet"+File.separator+_levelSetId+File.separator+"highScores.xml");
++			FileOutputStream outputFile = new FileOutputStream(
++			    path + _levelSetId + "-highScores.xml");
+ 			XMLSerializer ser = new XMLSerializer(outputFile,format);
+ 			ser.serialize(doc.getDocumentElement());
+ 			outputFile.close();
diff --git a/games/sokobano/files/patch-src_gdi1sokoban_logic_LevelSetManager.java b/games/sokobano/files/patch-src_gdi1sokoban_logic_LevelSetManager.java
new file mode 100644
index 000000000000..92c83563ec91
--- /dev/null
+++ b/games/sokobano/files/patch-src_gdi1sokoban_logic_LevelSetManager.java
@@ -0,0 +1,63 @@
+--- src/gdi1sokoban/logic/LevelSetManager.java.orig	2009-03-26 21:46:48 UTC
++++ src/gdi1sokoban/logic/LevelSetManager.java
+@@ -191,7 +191,11 @@ public class LevelSetManager extends IdentifierManager
+ 		try {
+ 			DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
+ 			DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
+-			Document doc = docBuilder.parse(new File(_lvlSetPath+levelSetId+File.separator+"highScores.xml"));
++			String path = System.getProperty("user.home") +
++			    File.separator + ".config" + File.separator +
++			    "sokobano" + File.separator;
++			Document doc = docBuilder.parse(new File(path +
++			    levelSetId + "-highScores.xml"));
+ 
+ 			Node first = doc.getFirstChild();
+ 			NodeList levelNodes = doc.getElementsByTagName("level");
+@@ -268,7 +272,9 @@ public class LevelSetManager extends IdentifierManager
+ 			// If statistics have changed, write back to file:
+ 			if (isAdded) {
+ 				OutputFormat format = new OutputFormat(doc);
+-				FileOutputStream fileOut = new FileOutputStream(_lvlSetPath + levelSetId + File.separator + "highScores.xml");
++				FileOutputStream fileOut = new
++				    FileOutputStream(path + levelSetId +
++				    "-highScores.xml");
+ 				XMLSerializer ser = new XMLSerializer(fileOut,format);
+ 				ser.serialize(doc.getDocumentElement());
+ 				fileOut.close();
+@@ -294,7 +300,12 @@ public class LevelSetManager extends IdentifierManager
+ 			try{
+ 				DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
+ 				DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
+-				Document doc = docBuilder.parse(new File(_lvlSetPath+i.getId()+File.separator+"highScores.xml"));
++				String path = System.getProperty("user.home") +
++				    File.separator + ".config" +
++				    File.separator + "sokobano" +
++				    File.separator;
++				Document doc = docBuilder.parse(new File(
++				    path + i.getId() + "-highScores.xml"));
+ 				NodeList playerStatNameList = doc.getElementsByTagName("PlayerStatistic");
+ 				//Node first =doc.getFirstChild();
+ 				ArrayList<Node> nodeToDelete = new ArrayList<Node>();
+@@ -313,7 +324,9 @@ public class LevelSetManager extends IdentifierManager
+ 				}
+ 
+ 				OutputFormat format = new OutputFormat(doc);
+-				FileOutputStream outputFile =new FileOutputStream(_lvlSetPath+i.getId()+File.separator+"highScores.xml");
++				FileOutputStream outputFile = new
++				    FileOutputStream(path + i.getId() +
++				    "-highScores.xml");
+ 				XMLSerializer ser = new XMLSerializer(outputFile,format);
+ 				ser.serialize(doc.getDocumentElement());
+ 				outputFile.close();
+@@ -338,7 +351,10 @@ public class LevelSetManager extends IdentifierManager
+ 		try{
+ 			DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
+ 			DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
+-			Document doc = docBuilder.parse(new File(_lvlSetPath+id+File.separator+"highScores.xml"));
++			Document doc = docBuilder.parse(new File(
++			    System.getProperty("user.home") + File.separator +
++			    ".config" + File.separator + "sokobano" +
++			    File.separator + id + "-highScores.xml"));
+ 
+ 			NodeList levelNameList = doc.getElementsByTagName("level");
+ 			//int currId
diff --git a/games/sokobano/files/patch-src_gdi1sokoban_logic_PlayerManager.java b/games/sokobano/files/patch-src_gdi1sokoban_logic_PlayerManager.java
new file mode 100644
index 000000000000..60bb9da73977
--- /dev/null
+++ b/games/sokobano/files/patch-src_gdi1sokoban_logic_PlayerManager.java
@@ -0,0 +1,23 @@
+--- src/gdi1sokoban/logic/PlayerManager.java.orig	2009-03-26 21:46:56 UTC
++++ src/gdi1sokoban/logic/PlayerManager.java
+@@ -46,7 +46,10 @@ public class PlayerManager extends IdentifierManager{
+ 
+ 
+ 	//path to player resource directory
+-	private String _playerPath ="res"+File.separator+"player"+File.separator;
++	private static final String _playerPath =
++	    System.getProperty("user.home") + File.separator + ".config" +
++	    File.separator + "sokobano" + File.separator + "player" +
++	    File.separator;
+ 	//HashMap of LevelStatistic for given player and level set
+ 	private HashMap<Integer,LevelStatistic> _levelSetStatistic = null;
+ 	//level set id of last statistic, that have been loaded  
+@@ -77,7 +80,7 @@ public class PlayerManager extends IdentifierManager{
+ 	 * Singleton constructor that  sets the path to players.xml
+ 	 */
+ 	private PlayerManager(){
+-		super("res"+File.separator+"player"+File.separator+"players.xml");
++		super(_playerPath + "players.xml");
+ 		_playerIdentifiers = new ArrayList<PlayerIdentifier>();
+ 		for(IdentifierRecord i : _identifierRecords){
+ 			_playerIdentifiers.add(new PlayerIdentifier(i.getName(), i.getId(), i.getUri()));
diff --git a/games/sokobano/files/sokobano.sh.in b/games/sokobano/files/sokobano.sh.in
new file mode 100644
index 000000000000..85ce241d7779
--- /dev/null
+++ b/games/sokobano/files/sokobano.sh.in
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+XML_HEADER='<?xml version="1.0" encoding="UTF-8"?>'
+PLAYERS_XML="$HOME/.config/sokobano/player/players.xml"
+
+if [ ! -f "$PLAYERS_XML" ]
+then
+	mkdir -p "$(dirname "$PLAYERS_XML")"
+	echo "$XML_HEADER" > "$PLAYERS_XML"
+	echo '<players></players>' >> "$PLAYERS_XML"
+	for n in $(jot 9 0); do
+		echo "$XML_HEADER" \
+		> "$HOME/.config/sokobano/$n-highScores.xml"
+		echo '<levelSetHighScore></levelSetHighScore>' \
+		>> "$HOME/.config/sokobano/$n-highScores.xml"
+	done
+fi
+
+JAVA="%%LOCALBASE%%/bin/java"
+SOKOBANO_JAR="%%JAVALIBDIR%%/%%JARNAME%%"
+
+cd "%%DATADIR%%" || exit 1
+
+exec "${JAVA}" -Xmx128m -Djava.library.path="%%LOCALBASE%%/lib/lwjgl" \
+	-jar "${SOKOBANO_JAR}" "$@"
diff --git a/games/sokobano/pkg-descr b/games/sokobano/pkg-descr
new file mode 100644
index 000000000000..c9f7bbf3ea85
--- /dev/null
+++ b/games/sokobano/pkg-descr
@@ -0,0 +1,11 @@
+An entertaining implementation of the old Japanese game Sokoban featuring
+nice 3D graphics and intuitive controls.  Written in Java (requires Java
+version 6 or above).  Features include:
+
+  - 3D graphics, skins, and workers
+  - Several level sets of increasing difficulty
+  - Resume and replay mode
+  - Intuitive mouse and keyboard control
+  - Background audio and sounds
+
+WWW: http://sokobano.sourceforge.net/
diff --git a/games/sokobano/pkg-plist b/games/sokobano/pkg-plist
new file mode 100644
index 000000000000..580884a031e5
--- /dev/null
+++ b/games/sokobano/pkg-plist
@@ -0,0 +1,443 @@
+bin/sokobano
+%%JAVAJARDIR%%/Sokobano-1.0.3.jar
+%%DATADIR%%/res/fonts/AMERIKA_.ttf
+%%DATADIR%%/res/levelSet/0/Level_01.txt
+%%DATADIR%%/res/levelSet/0/Level_02.txt
+%%DATADIR%%/res/levelSet/0/Level_03.txt
+%%DATADIR%%/res/levelSet/0/Level_04.txt
+%%DATADIR%%/res/levelSet/0/Level_05.txt
+%%DATADIR%%/res/levelSet/0/Level_06.txt
+%%DATADIR%%/res/levelSet/0/Level_07.txt
+%%DATADIR%%/res/levelSet/0/Level_08.txt
+%%DATADIR%%/res/levelSet/0/Level_09.txt
+%%DATADIR%%/res/levelSet/0/Level_10.txt
+%%DATADIR%%/res/levelSet/0/Level_11.txt
+%%DATADIR%%/res/levelSet/0/Level_12.txt
+%%DATADIR%%/res/levelSet/0/Level_13.txt
+%%DATADIR%%/res/levelSet/0/Level_14.txt
+%%DATADIR%%/res/levelSet/0/Level_15.txt
+%%DATADIR%%/res/levelSet/0/Level_16.txt
+%%DATADIR%%/res/levelSet/0/Level_17.txt
+%%DATADIR%%/res/levelSet/0/Level_18.txt
+%%DATADIR%%/res/levelSet/0/Level_19.txt
+%%DATADIR%%/res/levelSet/0/Level_20.txt
+%%DATADIR%%/res/levelSet/0/Level_21.txt
+%%DATADIR%%/res/levelSet/0/Level_22.txt
+%%DATADIR%%/res/levelSet/0/Level_23.txt
+%%DATADIR%%/res/levelSet/0/Level_24.txt
+%%DATADIR%%/res/levelSet/0/Level_25.txt
+%%DATADIR%%/res/levelSet/0/Level_26.txt
+%%DATADIR%%/res/levelSet/0/Level_27.txt
+%%DATADIR%%/res/levelSet/0/Level_28.txt
+%%DATADIR%%/res/levelSet/0/Level_29.txt
+%%DATADIR%%/res/levelSet/0/Level_30.txt
+%%DATADIR%%/res/levelSet/0/Level_31.txt
+%%DATADIR%%/res/levelSet/0/Level_32.txt
+%%DATADIR%%/res/levelSet/0/Level_33.txt
+%%DATADIR%%/res/levelSet/0/Level_34.txt
+%%DATADIR%%/res/levelSet/0/Level_35.txt
+%%DATADIR%%/res/levelSet/0/Level_36.txt
+%%DATADIR%%/res/levelSet/0/Level_37.txt
+%%DATADIR%%/res/levelSet/0/Level_38.txt
+%%DATADIR%%/res/levelSet/0/Level_39.txt
+%%DATADIR%%/res/levelSet/0/Level_40.txt
+%%DATADIR%%/res/levelSet/0/levelIdentifiers.xml
+%%DATADIR%%/res/levelSet/1/Level_01.txt
+%%DATADIR%%/res/levelSet/1/Level_02.txt
+%%DATADIR%%/res/levelSet/1/Level_03.txt
+%%DATADIR%%/res/levelSet/1/Level_04.txt
+%%DATADIR%%/res/levelSet/1/Level_05.txt
+%%DATADIR%%/res/levelSet/1/Level_06.txt
+%%DATADIR%%/res/levelSet/1/Level_07.txt
+%%DATADIR%%/res/levelSet/1/Level_08.txt
+%%DATADIR%%/res/levelSet/1/Level_09.txt
+%%DATADIR%%/res/levelSet/1/Level_10.txt
+%%DATADIR%%/res/levelSet/1/Level_11.txt
+%%DATADIR%%/res/levelSet/1/Level_12.txt
+%%DATADIR%%/res/levelSet/1/Level_13.txt
+%%DATADIR%%/res/levelSet/1/Level_14.txt
+%%DATADIR%%/res/levelSet/1/Level_15.txt
+%%DATADIR%%/res/levelSet/1/Level_16.txt
+%%DATADIR%%/res/levelSet/1/Level_17.txt
+%%DATADIR%%/res/levelSet/1/Level_18.txt
+%%DATADIR%%/res/levelSet/1/Level_19.txt
+%%DATADIR%%/res/levelSet/1/Level_20.txt
+%%DATADIR%%/res/levelSet/1/Level_21.txt
+%%DATADIR%%/res/levelSet/1/Level_22.txt
+%%DATADIR%%/res/levelSet/1/Level_23.txt
+%%DATADIR%%/res/levelSet/1/Level_24.txt
+%%DATADIR%%/res/levelSet/1/Level_25.txt
+%%DATADIR%%/res/levelSet/1/Level_26.txt
+%%DATADIR%%/res/levelSet/1/Level_27.txt
+%%DATADIR%%/res/levelSet/1/Level_28.txt
+%%DATADIR%%/res/levelSet/1/Level_29.txt
+%%DATADIR%%/res/levelSet/1/Level_30.txt
+%%DATADIR%%/res/levelSet/1/Level_31.txt
+%%DATADIR%%/res/levelSet/1/Level_32.txt
+%%DATADIR%%/res/levelSet/1/Level_33.txt
+%%DATADIR%%/res/levelSet/1/Level_34.txt
+%%DATADIR%%/res/levelSet/1/Level_35.txt
+%%DATADIR%%/res/levelSet/1/Level_36.txt
+%%DATADIR%%/res/levelSet/1/Level_37.txt
+%%DATADIR%%/res/levelSet/1/Level_38.txt
+%%DATADIR%%/res/levelSet/1/Level_39.txt
+%%DATADIR%%/res/levelSet/1/Level_40.txt
+%%DATADIR%%/res/levelSet/1/levelIdentifiers.xml
+%%DATADIR%%/res/levelSet/2/Level_01.txt
+%%DATADIR%%/res/levelSet/2/Level_02.txt
+%%DATADIR%%/res/levelSet/2/Level_03.txt
+%%DATADIR%%/res/levelSet/2/Level_05.txt
+%%DATADIR%%/res/levelSet/2/Level_06.txt
+%%DATADIR%%/res/levelSet/2/Level_07.txt
+%%DATADIR%%/res/levelSet/2/Level_08.txt
+%%DATADIR%%/res/levelSet/2/Level_09.txt
+%%DATADIR%%/res/levelSet/2/Level_10.txt
+%%DATADIR%%/res/levelSet/2/Level_11.txt
+%%DATADIR%%/res/levelSet/2/Level_12.txt
+%%DATADIR%%/res/levelSet/2/Level_13.txt
+%%DATADIR%%/res/levelSet/2/Level_14.txt
+%%DATADIR%%/res/levelSet/2/Level_15.txt
+%%DATADIR%%/res/levelSet/2/Level_16.txt
+%%DATADIR%%/res/levelSet/2/levelIdentifiers.xml
+%%DATADIR%%/res/levelSet/3/Level_01.txt
+%%DATADIR%%/res/levelSet/3/Level_02.txt
+%%DATADIR%%/res/levelSet/3/Level_03.txt
+%%DATADIR%%/res/levelSet/3/Level_04.txt
+%%DATADIR%%/res/levelSet/3/Level_05.txt
+%%DATADIR%%/res/levelSet/3/Level_06.txt
+%%DATADIR%%/res/levelSet/3/Level_07.txt
+%%DATADIR%%/res/levelSet/3/Level_08.txt
+%%DATADIR%%/res/levelSet/3/Level_09.txt
+%%DATADIR%%/res/levelSet/3/Level_10.txt
+%%DATADIR%%/res/levelSet/3/levelIdentifiers.xml
+%%DATADIR%%/res/levelSet/4/Level_01.txt
+%%DATADIR%%/res/levelSet/4/Level_02.txt
+%%DATADIR%%/res/levelSet/4/Level_03.txt
+%%DATADIR%%/res/levelSet/4/Level_04.txt
+%%DATADIR%%/res/levelSet/4/Level_05.txt
+%%DATADIR%%/res/levelSet/4/Level_06.txt
+%%DATADIR%%/res/levelSet/4/Level_07.txt
+%%DATADIR%%/res/levelSet/4/Level_08.txt
+%%DATADIR%%/res/levelSet/4/Level_09.txt
+%%DATADIR%%/res/levelSet/4/Level_10.txt
+%%DATADIR%%/res/levelSet/4/Level_11.txt
+%%DATADIR%%/res/levelSet/4/Level_12.txt
+%%DATADIR%%/res/levelSet/4/Level_13.txt
+%%DATADIR%%/res/levelSet/4/Level_14.txt
+%%DATADIR%%/res/levelSet/4/Level_15.txt
+%%DATADIR%%/res/levelSet/4/Level_16.txt
+%%DATADIR%%/res/levelSet/4/Level_17.txt
+%%DATADIR%%/res/levelSet/4/Level_18.txt
+%%DATADIR%%/res/levelSet/4/Level_19.txt
+%%DATADIR%%/res/levelSet/4/Level_20.txt
+%%DATADIR%%/res/levelSet/4/Level_21.txt
+%%DATADIR%%/res/levelSet/4/Level_22.txt
+%%DATADIR%%/res/levelSet/4/Level_23.txt
+%%DATADIR%%/res/levelSet/4/Level_24.txt
+%%DATADIR%%/res/levelSet/4/Level_25.txt
+%%DATADIR%%/res/levelSet/4/Level_26.txt
+%%DATADIR%%/res/levelSet/4/Level_27.txt
+%%DATADIR%%/res/levelSet/4/Level_28.txt
+%%DATADIR%%/res/levelSet/4/Level_29.txt
+%%DATADIR%%/res/levelSet/4/Level_30.txt
+%%DATADIR%%/res/levelSet/4/Level_31.txt
+%%DATADIR%%/res/levelSet/4/Level_32.txt
+%%DATADIR%%/res/levelSet/4/Level_33.txt
+%%DATADIR%%/res/levelSet/4/Level_34.txt
+%%DATADIR%%/res/levelSet/4/Level_35.txt
+%%DATADIR%%/res/levelSet/4/Level_36.txt
+%%DATADIR%%/res/levelSet/4/Level_37.txt
+%%DATADIR%%/res/levelSet/4/Level_38.txt
+%%DATADIR%%/res/levelSet/4/Level_39.txt
+%%DATADIR%%/res/levelSet/4/Level_40.txt
+%%DATADIR%%/res/levelSet/4/Level_41.txt
+%%DATADIR%%/res/levelSet/4/Level_42.txt
+%%DATADIR%%/res/levelSet/4/Level_43.txt
+%%DATADIR%%/res/levelSet/4/Level_44.txt
+%%DATADIR%%/res/levelSet/4/Level_45.txt
+%%DATADIR%%/res/levelSet/4/Level_46.txt
+%%DATADIR%%/res/levelSet/4/Level_47.txt
+%%DATADIR%%/res/levelSet/4/Level_48.txt
+%%DATADIR%%/res/levelSet/4/Level_49.txt
+%%DATADIR%%/res/levelSet/4/Level_50.txt
+%%DATADIR%%/res/levelSet/4/levelIdentifiers.xml
+%%DATADIR%%/res/levelSet/5/Level_01.txt
+%%DATADIR%%/res/levelSet/5/Level_02.txt
+%%DATADIR%%/res/levelSet/5/Level_03.txt
+%%DATADIR%%/res/levelSet/5/Level_04.txt
+%%DATADIR%%/res/levelSet/5/Level_05.txt
+%%DATADIR%%/res/levelSet/5/Level_06.txt
+%%DATADIR%%/res/levelSet/5/Level_07.txt
+%%DATADIR%%/res/levelSet/5/Level_08.txt
+%%DATADIR%%/res/levelSet/5/Level_09.txt
+%%DATADIR%%/res/levelSet/5/Level_10.txt
+%%DATADIR%%/res/levelSet/5/Level_11.txt
+%%DATADIR%%/res/levelSet/5/Level_12.txt
+%%DATADIR%%/res/levelSet/5/Level_13.txt
+%%DATADIR%%/res/levelSet/5/Level_14.txt
+%%DATADIR%%/res/levelSet/5/Level_15.txt
+%%DATADIR%%/res/levelSet/5/Level_16.txt
+%%DATADIR%%/res/levelSet/5/Level_17.txt
+%%DATADIR%%/res/levelSet/5/Level_18.txt
+%%DATADIR%%/res/levelSet/5/Level_19.txt
+%%DATADIR%%/res/levelSet/5/Level_20.txt
+%%DATADIR%%/res/levelSet/5/Level_21.txt
+%%DATADIR%%/res/levelSet/5/Level_22.txt
+%%DATADIR%%/res/levelSet/5/Level_23.txt
+%%DATADIR%%/res/levelSet/5/Level_24.txt
+%%DATADIR%%/res/levelSet/5/Level_25.txt
+%%DATADIR%%/res/levelSet/5/Level_26.txt
+%%DATADIR%%/res/levelSet/5/Level_27.txt
+%%DATADIR%%/res/levelSet/5/Level_28.txt
+%%DATADIR%%/res/levelSet/5/levelIdentifiers.xml
+%%DATADIR%%/res/levelSet/6/Level_01.txt
+%%DATADIR%%/res/levelSet/6/Level_02.txt
+%%DATADIR%%/res/levelSet/6/Level_03.txt
+%%DATADIR%%/res/levelSet/6/Level_04.txt
+%%DATADIR%%/res/levelSet/6/Level_05.txt
+%%DATADIR%%/res/levelSet/6/Level_06.txt
+%%DATADIR%%/res/levelSet/6/Level_07.txt
+%%DATADIR%%/res/levelSet/6/Level_08.txt
+%%DATADIR%%/res/levelSet/6/Level_09.txt
+%%DATADIR%%/res/levelSet/6/Level_10.txt
+%%DATADIR%%/res/levelSet/6/Level_11.txt
+%%DATADIR%%/res/levelSet/6/Level_12.txt
+%%DATADIR%%/res/levelSet/6/Level_13.txt
+%%DATADIR%%/res/levelSet/6/Level_14.txt
+%%DATADIR%%/res/levelSet/6/Level_15.txt
+%%DATADIR%%/res/levelSet/6/Level_16.txt
+%%DATADIR%%/res/levelSet/6/levelIdentifiers.xml
+%%DATADIR%%/res/levelSet/7/Level_01.txt
+%%DATADIR%%/res/levelSet/7/Level_02.txt
+%%DATADIR%%/res/levelSet/7/Level_03.txt
+%%DATADIR%%/res/levelSet/7/Level_04.txt
+%%DATADIR%%/res/levelSet/7/Level_05.txt
+%%DATADIR%%/res/levelSet/7/Level_06.txt
+%%DATADIR%%/res/levelSet/7/Level_07.txt
+%%DATADIR%%/res/levelSet/7/Level_08.txt
+%%DATADIR%%/res/levelSet/7/Level_09.txt
+%%DATADIR%%/res/levelSet/7/Level_10.txt
+%%DATADIR%%/res/levelSet/7/Level_11.txt
+%%DATADIR%%/res/levelSet/7/Level_12.txt
+%%DATADIR%%/res/levelSet/7/Level_13.txt
+%%DATADIR%%/res/levelSet/7/Level_14.txt
+%%DATADIR%%/res/levelSet/7/Level_15.txt
+%%DATADIR%%/res/levelSet/7/Level_16.txt
+%%DATADIR%%/res/levelSet/7/Level_17.txt
+%%DATADIR%%/res/levelSet/7/Level_18.txt
+%%DATADIR%%/res/levelSet/7/Level_19.txt
+%%DATADIR%%/res/levelSet/7/Level_20.txt
+%%DATADIR%%/res/levelSet/7/Level_21.txt
+%%DATADIR%%/res/levelSet/7/Level_22.txt
+%%DATADIR%%/res/levelSet/7/Level_23.txt
+%%DATADIR%%/res/levelSet/7/Level_24.txt
+%%DATADIR%%/res/levelSet/7/Level_25.txt
+%%DATADIR%%/res/levelSet/7/Level_26.txt
+%%DATADIR%%/res/levelSet/7/Level_27.txt
+%%DATADIR%%/res/levelSet/7/Level_28.txt
+%%DATADIR%%/res/levelSet/7/Level_29.txt
+%%DATADIR%%/res/levelSet/7/Level_30.txt
+%%DATADIR%%/res/levelSet/7/Level_31.txt
+%%DATADIR%%/res/levelSet/7/Level_32.txt
+%%DATADIR%%/res/levelSet/7/Level_33.txt
+%%DATADIR%%/res/levelSet/7/Level_34.txt
+%%DATADIR%%/res/levelSet/7/Level_35.txt
+%%DATADIR%%/res/levelSet/7/Level_36.txt
+%%DATADIR%%/res/levelSet/7/Level_40.txt
+%%DATADIR%%/res/levelSet/7/Level_41.txt
+%%DATADIR%%/res/levelSet/7/Level_42.txt
+%%DATADIR%%/res/levelSet/7/Level_43.txt
+%%DATADIR%%/res/levelSet/7/Level_44.txt
+%%DATADIR%%/res/levelSet/7/Level_45.txt
+%%DATADIR%%/res/levelSet/7/Level_46.txt
+%%DATADIR%%/res/levelSet/7/Level_47.txt
+%%DATADIR%%/res/levelSet/7/Level_48.txt
+%%DATADIR%%/res/levelSet/7/levelIdentifiers.xml
+%%DATADIR%%/res/levelSet/8/Level_01.txt
+%%DATADIR%%/res/levelSet/8/Level_02.txt
+%%DATADIR%%/res/levelSet/8/Level_03.txt
+%%DATADIR%%/res/levelSet/8/Level_04.txt
+%%DATADIR%%/res/levelSet/8/Level_05.txt
+%%DATADIR%%/res/levelSet/8/Level_06.txt
+%%DATADIR%%/res/levelSet/8/Level_07.txt
+%%DATADIR%%/res/levelSet/8/Level_08.txt
+%%DATADIR%%/res/levelSet/8/Level_09.txt
+%%DATADIR%%/res/levelSet/8/Level_10.txt
+%%DATADIR%%/res/levelSet/8/Level_11.txt
+%%DATADIR%%/res/levelSet/8/Level_12.txt
+%%DATADIR%%/res/levelSet/8/Level_13.txt
+%%DATADIR%%/res/levelSet/8/Level_14.txt
+%%DATADIR%%/res/levelSet/8/Level_15.txt
+%%DATADIR%%/res/levelSet/8/Level_16.txt
+%%DATADIR%%/res/levelSet/8/Level_17.txt
+%%DATADIR%%/res/levelSet/8/Level_18.txt
+%%DATADIR%%/res/levelSet/8/Level_19.txt
+%%DATADIR%%/res/levelSet/8/Level_20.txt
+%%DATADIR%%/res/levelSet/8/Level_21.txt
+%%DATADIR%%/res/levelSet/8/Level_22.txt
+%%DATADIR%%/res/levelSet/8/Level_23.txt
+%%DATADIR%%/res/levelSet/8/Level_24.txt
+%%DATADIR%%/res/levelSet/8/Level_25.txt
+%%DATADIR%%/res/levelSet/8/Level_26.txt
+%%DATADIR%%/res/levelSet/8/Level_27.txt
+%%DATADIR%%/res/levelSet/8/Level_28.txt
+%%DATADIR%%/res/levelSet/8/Level_29.txt
+%%DATADIR%%/res/levelSet/8/Level_30.txt
+%%DATADIR%%/res/levelSet/8/Level_31.txt
+%%DATADIR%%/res/levelSet/8/Level_32.txt
+%%DATADIR%%/res/levelSet/8/Level_33.txt
+%%DATADIR%%/res/levelSet/8/Level_34.txt
+%%DATADIR%%/res/levelSet/8/Level_35.txt
+%%DATADIR%%/res/levelSet/8/Level_36.txt
+%%DATADIR%%/res/levelSet/8/Level_37.txt
+%%DATADIR%%/res/levelSet/8/Level_38.txt
+%%DATADIR%%/res/levelSet/8/Level_39.txt
+%%DATADIR%%/res/levelSet/8/Level_40.txt
+%%DATADIR%%/res/levelSet/8/levelIdentifiers.xml
+%%DATADIR%%/res/levelSet/levelSets.xml
+%%DATADIR%%/res/mesh/crateAscii.mdl
+%%DATADIR%%/res/mesh/crateAscii.mtl
+%%DATADIR%%/res/mesh/crateAscii.obj
+%%DATADIR%%/res/mesh/crateSteel01.mdl
+%%DATADIR%%/res/mesh/crateSteel01.mtl
+%%DATADIR%%/res/mesh/crateSteel01.obj
+%%DATADIR%%/res/mesh/crateWood01.mdl
+%%DATADIR%%/res/mesh/crateWood01.mtl
+%%DATADIR%%/res/mesh/crateWood01.obj
+%%DATADIR%%/res/mesh/floorAscii.mtl
+%%DATADIR%%/res/mesh/floorAscii.obj
+%%DATADIR%%/res/mesh/floorAsia.mtl
+%%DATADIR%%/res/mesh/floorAsia.obj
+%%DATADIR%%/res/mesh/floorCurveIndustrial.mtl
+%%DATADIR%%/res/mesh/floorCurveIndustrial.obj
+%%DATADIR%%/res/mesh/floorIndustrial.mtl
+%%DATADIR%%/res/mesh/floorIndustrial.obj
+%%DATADIR%%/res/mesh/highlight.mtl
+%%DATADIR%%/res/mesh/highlight.obj
+%%DATADIR%%/res/mesh/highlightCrate.mtl
+%%DATADIR%%/res/mesh/highlightCrate.obj
+%%DATADIR%%/res/mesh/pipe01.mtl
+%%DATADIR%%/res/mesh/pipe01.obj
+%%DATADIR%%/res/mesh/pipe02.mtl
+%%DATADIR%%/res/mesh/pipe02.obj
+%%DATADIR%%/res/mesh/pipeCurve.obj
+%%DATADIR%%/res/mesh/pipeEnd.obj
+%%DATADIR%%/res/mesh/pipeJunktion.obj
+%%DATADIR%%/res/mesh/pipeNormal.obj
+%%DATADIR%%/res/mesh/pipeSingle.obj
+%%DATADIR%%/res/mesh/pipeSquare.obj
+%%DATADIR%%/res/mesh/pipeStand.obj
+%%DATADIR%%/res/mesh/pipeStart.obj
+%%DATADIR%%/res/mesh/selection.mdl
+%%DATADIR%%/res/mesh/selection.mtl
+%%DATADIR%%/res/mesh/selection.obj
+%%DATADIR%%/res/mesh/skybox01.mtl
+%%DATADIR%%/res/mesh/skybox01.obj
+%%DATADIR%%/res/mesh/skybox02.mtl
+%%DATADIR%%/res/mesh/skybox02.obj
+%%DATADIR%%/res/mesh/skybox06.mtl
+%%DATADIR%%/res/mesh/skybox06.obj
+%%DATADIR%%/res/mesh/targetAscii.mtl
+%%DATADIR%%/res/mesh/targetAscii.obj
+%%DATADIR%%/res/mesh/targetAsia.mtl
+%%DATADIR%%/res/mesh/targetAsia.obj
+%%DATADIR%%/res/mesh/targetIndustrial.mtl
+%%DATADIR%%/res/mesh/targetIndustrial.obj
+%%DATADIR%%/res/mesh/wallAscii.mtl
+%%DATADIR%%/res/mesh/wallAscii.obj
+%%DATADIR%%/res/mesh/wallAsia.mtl
+%%DATADIR%%/res/mesh/wallCurve.obj
+%%DATADIR%%/res/mesh/wallIndustrial.mtl
+%%DATADIR%%/res/mesh/wallJunktion.obj
+%%DATADIR%%/res/mesh/wallNormal.obj
+%%DATADIR%%/res/mesh/wallSingle.obj
+%%DATADIR%%/res/mesh/wallSquare.obj
+%%DATADIR%%/res/mesh/wallStart.obj
+%%DATADIR%%/res/mesh/worker01.mdl
+%%DATADIR%%/res/mesh/worker01.mtl
+%%DATADIR%%/res/mesh/worker02.mdl
+%%DATADIR%%/res/mesh/worker02.mtl
+%%DATADIR%%/res/mesh/workerArm01.obj
+%%DATADIR%%/res/mesh/workerArm02.obj
+%%DATADIR%%/res/mesh/workerBody01.obj
+%%DATADIR%%/res/mesh/workerBody02.obj
+%%DATADIR%%/res/mesh/workerHead01.obj
+%%DATADIR%%/res/skins/0/skin.txt
+%%DATADIR%%/res/skins/1/skin.txt
+%%DATADIR%%/res/skins/2/skin.txt
+%%DATADIR%%/res/skins/skins.xml
+%%DATADIR%%/res/sounds/Cheer.mp2
+%%DATADIR%%/res/sounds/Credits2.mp2
+%%DATADIR%%/res/sounds/Deadlock electro.mp2
+%%DATADIR%%/res/sounds/During play - lotus.mp2
+%%DATADIR%%/res/sounds/Highscore.mp2
+%%DATADIR%%/res/sounds/Menu 1.mp2
+%%DATADIR%%/res/sounds/cheat.mp2
+%%DATADIR%%/res/sounds/menuToggle.wav
+%%DATADIR%%/res/sounds/push.wav
+%%DATADIR%%/res/sounds/redo.mp2
+%%DATADIR%%/res/textures/crateAscii.png.tex
+%%DATADIR%%/res/textures/crateSteel.png.tex
+%%DATADIR%%/res/textures/crateWood.png.tex
+%%DATADIR%%/res/textures/cursor.png.tex
+%%DATADIR%%/res/textures/flare.png.tex
+%%DATADIR%%/res/textures/floorAscii.png.tex
+%%DATADIR%%/res/textures/floorAsia.png.tex
+%%DATADIR%%/res/textures/floorCurveIndustrial.png.tex
+%%DATADIR%%/res/textures/floorIndustrial.png.tex
+%%DATADIR%%/res/textures/gui/Sav7845.tmp
+%%DATADIR%%/res/textures/gui/apply_icon.png.tex
+%%DATADIR%%/res/textures/gui/back_icon.png.tex
+%%DATADIR%%/res/textures/gui/bkgnd_highscore.png.tex
+%%DATADIR%%/res/textures/gui/btn_down.png.tex
+%%DATADIR%%/res/textures/gui/btn_down_l.png.tex
+%%DATADIR%%/res/textures/gui/btn_down_r.png.tex
+%%DATADIR%%/res/textures/gui/btn_hover.png.tex
+%%DATADIR%%/res/textures/gui/btn_hover_l.png.tex
+%%DATADIR%%/res/textures/gui/btn_hover_r.png.tex
+%%DATADIR%%/res/textures/gui/btn_normal.png.tex
+%%DATADIR%%/res/textures/gui/btn_normal_l.png.tex
+%%DATADIR%%/res/textures/gui/btn_normal_r.png.tex
+%%DATADIR%%/res/textures/gui/clock_icon.png.tex
+%%DATADIR%%/res/textures/gui/config_icon.png.tex
+%%DATADIR%%/res/textures/gui/credits_icon.png.tex
+%%DATADIR%%/res/textures/gui/delete_icon.png.tex
+%%DATADIR%%/res/textures/gui/exit_icon.png.tex
+%%DATADIR%%/res/textures/gui/next_icon.png.tex
+%%DATADIR%%/res/textures/gui/prev_icon.png.tex
+%%DATADIR%%/res/textures/gui/redo_icon.png.tex
+%%DATADIR%%/res/textures/gui/restart_icon.png.tex
+%%DATADIR%%/res/textures/gui/return_menu_icon.png.tex
+%%DATADIR%%/res/textures/gui/score_icon.png.tex
+%%DATADIR%%/res/textures/gui/start_icon.png.tex
+%%DATADIR%%/res/textures/gui/step_icon.png.tex
+%%DATADIR%%/res/textures/gui/undo_icon.png.tex
+%%DATADIR%%/res/textures/highlight.png.tex
+%%DATADIR%%/res/textures/highlightCrate.png.tex
+%%DATADIR%%/res/textures/selection.png.tex
+%%DATADIR%%/res/textures/skyboxes/skybox01_0.jpg.tex
+%%DATADIR%%/res/textures/skyboxes/skybox01_1.jpg.tex
+%%DATADIR%%/res/textures/skyboxes/skybox01_2.jpg.tex
+%%DATADIR%%/res/textures/skyboxes/skybox01_3.jpg.tex
+%%DATADIR%%/res/textures/skyboxes/skybox01_4.jpg.tex
+%%DATADIR%%/res/textures/skyboxes/skybox01_5.jpg.tex
+%%DATADIR%%/res/textures/skyboxes/skybox02_0.jpg.tex
+%%DATADIR%%/res/textures/skyboxes/skybox02_1.jpg.tex
+%%DATADIR%%/res/textures/skyboxes/skybox02_2.jpg.tex
+%%DATADIR%%/res/textures/skyboxes/skybox02_3.jpg.tex
+%%DATADIR%%/res/textures/skyboxes/skybox02_4.jpg.tex
+%%DATADIR%%/res/textures/skyboxes/skybox02_5.jpg.tex
+%%DATADIR%%/res/textures/skyboxes/skybox06_0.png.tex
+%%DATADIR%%/res/textures/skyboxes/skybox06_1.png.tex
+%%DATADIR%%/res/textures/targetAscii.png.tex
+%%DATADIR%%/res/textures/targetAsia.png.tex
+%%DATADIR%%/res/textures/targetIndustrial.png.tex
+%%DATADIR%%/res/textures/title.png.tex
+%%DATADIR%%/res/textures/wallAscii.png.tex
+%%DATADIR%%/res/textures/wallAsia.png.tex
+%%DATADIR%%/res/textures/wallIndustrial.png.tex
+%%DATADIR%%/res/textures/workerArm01.png.tex
+%%DATADIR%%/res/textures/workerArm02.png.tex
+%%DATADIR%%/res/textures/workerBody01.png.tex
+%%DATADIR%%/res/textures/workerBody02.png.tex
+%%DATADIR%%/res/textures/workerHead01.png.tex