aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Dokuchaev <danfe@FreeBSD.org>2022-01-06 14:23:24 +0000
committerAlexey Dokuchaev <danfe@FreeBSD.org>2022-01-06 14:23:24 +0000
commitf6f0a939cb7c6ad54ed318ef37cdd727a347c650 (patch)
treea9fbff6a50c5acd3d3787ee682bb52cbfd4bacf7
parent42b06145403e7b4aaf54bb033766084236a50812 (diff)
downloadports-f6f0a939cb7c6ad54ed318ef37cdd727a347c650.tar.gz
ports-f6f0a939cb7c6ad54ed318ef37cdd727a347c650.zip
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/
-rw-r--r--games/Makefile1
-rw-r--r--games/sokobano/Makefile45
-rw-r--r--games/sokobano/distinfo3
-rw-r--r--games/sokobano/files/makefile41
-rw-r--r--games/sokobano/files/patch-src_gdi1sokoban_logic_ConfigManager.java13
-rw-r--r--games/sokobano/files/patch-src_gdi1sokoban_logic_LevelManager.java25
-rw-r--r--games/sokobano/files/patch-src_gdi1sokoban_logic_LevelSetManager.java63
-rw-r--r--games/sokobano/files/patch-src_gdi1sokoban_logic_PlayerManager.java23
-rw-r--r--games/sokobano/files/sokobano.sh.in25
-rw-r--r--games/sokobano/pkg-descr11
-rw-r--r--games/sokobano/pkg-plist443
11 files changed, 693 insertions, 0 deletions
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