commit 82da8a1c
Moved a lot of files to prepare for SDL2
Changed files
diff --git a/Game/data/puzzles/copy b/Game/data/puzzles/copy
new file mode 100755
index 0000000..9617703
--- /dev/null
+++ b/Game/data/puzzles/copy
@@ -0,0 +1,339 @@
+26
+1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 1 1 -1 -1
+-1 1 0 0 -1 0
+1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 0 -1 4 -1 -1
+-1 3 4 2 -1 -1
+-1 3 0 0 -1 -1
+-1 0 2 2 -1 -1
+-1 3 0 0 4 -1
+2
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 0 1 -1 -1
+-1 -1 0 1 -1 -1
+-1 -1 1 0 -1 -1
+-1 -1 1 0 -1 -1
+-1 -1 0 1 -1 -1
+2
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 1 -1 -1
+-1 -1 -1 2 -1 -1
+-1 -1 -1 2 -1 -1
+0 -1 1 1 -1 -1
+0 -1 0 2 -1 -1
+1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 1 -1 -1 -1
+-1 -1 0 -1 -1 -1
+-1 -1 0 -1 -1 -1
+-1 -1 1 -1 -1 -1
+-1 -1 0 1 1 -1
+1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 1 -1 -1 -1 -1
+-1 0 1 -1 -1 -1
+-1 1 0 0 -1 -1
+1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 4 4 -1 -1
+-1 2 2 4 2 -1
+2
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 1 0 -1 -1
+-1 -1 1 0 1 0
+1
+-1 -1 5 -1 -1 -1
+5 5 3 -1 -1 -1
+3 3 2 -1 -1 -1
+2 2 0 -1 -1 -1
+0 0 1 -1 -1 -1
+1 1 5 -1 -1 -1
+5 5 4 -1 -1 -1
+4 4 3 -1 -1 -1
+3 3 2 -1 -1 -1
+2 2 0 -1 -1 -1
+0 0 1 0 -1 -1
+1 1 0 0 -1 -1
+2
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 0 -1 -1 -1
+-1 -1 1 -1 -1 -1
+-1 -1 1 -1 -1 -1
+-1 -1 0 1 1 -1
+-1 -1 0 1 0 -1
+2
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 1 3 -1 -1
+-1 -1 3 1 -1 -1
+1 -1 1 3 -1 3
+3
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 2 -1 -1
+-1 -1 -1 0 1 -1
+-1 -1 1 1 0 -1
+-1 1 2 2 0 1
+2
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 0 -1 -1
+-1 -1 -1 1 -1 -1
+-1 -1 -1 5 0 0
+-1 -1 -1 0 1 1
+-1 -1 -1 4 5 5
+-1 -1 -1 3 4 4
+-1 -1 -1 2 3 3
+-1 -1 -1 0 2 2
+-1 -1 -1 1 0 0
+-1 -1 0 0 1 1
+2
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 5 -1 -1
+-1 -1 -1 2 -1 -1
+-1 -1 -1 5 -1 -1
+-1 -1 -1 5 -1 -1
+-1 -1 -1 2 -1 -1
+-1 -1 2 5 -1 -1
+-1 -1 2 5 2 2
+3
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 0 1 -1 -1 -1
+-1 1 0 1 0 -1
+2
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 0 -1 -1
+-1 -1 -1 0 -1 -1
+-1 -1 1 3 -1 -1
+-1 -1 0 0 -1 -1
+-1 -1 3 1 -1 -1
+-1 1 3 1 -1 -1
+2
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 0 -1 -1
+-1 -1 3 0 -1 -1
+-1 3 3 1 -1 -1
+-1 1 1 0 -1 -1
+2
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 2 2 -1 -1
+-1 -1 1 0 0 -1
+-1 -1 1 2 1 0
+1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+0 1 2 -1 -1 -1
+3 4 5 -1 -1 -1
+5 5 3 -1 -1 -1
+3 4 2 -1 -1 -1
+3 0 0 4 1 -1
+1 4 1 1 0 -1
+2 2 0 4 0 -1
+2 2 3 4 3 -1
+0 0 1 1 0 -1
+3
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 2 -1 -1 -1
+-1 -1 2 0 -1 -1
+-1 -1 1 1 2 -1
+-1 -1 0 1 0 -1
+2
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 2 -1 -1
+-1 -1 -1 0 -1 -1
+-1 -1 -1 0 -1 -1
+-1 -1 -1 1 -1 -1
+-1 -1 -1 1 -1 -1
+-1 -1 -1 0 -1 -1
+-1 -1 -1 1 -1 -1
+-1 -1 -1 0 -1 -1
+-1 2 2 0 2 2
+3
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 3 3 -1
+-1 -1 2 0 3 -1
+-1 -1 2 1 2 -1
+-1 1 1 0 0 -1
+5
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+2 2 1 1 2 2
+0 3 4 5 3 0
+0 4 3 3 5 0
+1 4 1 1 5 1
+0 2 3 3 2 0
+3
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+2 -1 2 -1 2 -1
+0 -1 3 -1 0 -1
+1 -1 3 -1 1 -1
+0 -1 4 -1 0 -1
+1 -1 4 -1 4 -1
+0 2 3 2 0 -1
+3
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 2 -1 -1 -1
+-1 -1 3 -1 -1 -1
+-1 3 1 -1 -1 -1
+-1 0 0 -1 -1 -1
+-1 1 2 3 -1 -1
+-1 0 1 2 -1 -1
+3
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 0 1 0 -1
+1 1 0 1 1 0
+0 2 2 0 2 1
diff --git a/Game/data/puzzles/puzzle.levels b/Game/data/puzzles/puzzle.levels
new file mode 100755
index 0000000..c53240d
--- /dev/null
+++ b/Game/data/puzzles/puzzle.levels
@@ -0,0 +1,352 @@
+27
+1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 1 1 -1 -1
+-1 1 0 0 -1 0
+1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 0 -1 4 -1 -1
+-1 3 4 2 -1 -1
+-1 3 0 0 -1 -1
+-1 0 2 2 -1 -1
+-1 3 0 0 4 -1
+2
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 0 1 -1 -1
+-1 -1 0 1 -1 -1
+-1 -1 1 0 -1 -1
+-1 -1 1 0 -1 -1
+-1 -1 0 1 -1 -1
+2
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 1 -1 -1
+-1 -1 -1 2 -1 -1
+-1 -1 -1 2 -1 -1
+0 -1 1 1 -1 -1
+0 -1 0 2 -1 -1
+1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 1 -1 -1 -1
+-1 -1 0 -1 -1 -1
+-1 -1 0 -1 -1 -1
+-1 -1 1 -1 -1 -1
+-1 -1 0 1 1 -1
+1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 1 -1 -1 -1 -1
+-1 0 1 -1 -1 -1
+-1 1 0 0 -1 -1
+1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 4 4 -1 -1
+-1 2 2 4 2 -1
+2
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 1 0 -1 -1
+-1 -1 1 0 1 0
+1
+-1 -1 5 -1 -1 -1
+5 5 3 -1 -1 -1
+3 3 2 -1 -1 -1
+2 2 0 -1 -1 -1
+0 0 1 -1 -1 -1
+1 1 5 -1 -1 -1
+5 5 4 -1 -1 -1
+4 4 3 -1 -1 -1
+3 3 2 -1 -1 -1
+2 2 0 -1 -1 -1
+0 0 1 0 -1 -1
+1 1 0 0 -1 -1
+2
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 0 -1 -1 -1
+-1 -1 1 -1 -1 -1
+-1 -1 1 -1 -1 -1
+-1 -1 0 1 1 -1
+-1 -1 0 1 0 -1
+2
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 1 3 -1 -1
+-1 -1 3 1 -1 -1
+1 -1 1 3 -1 3
+3
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 2 -1 -1
+-1 -1 -1 0 1 -1
+-1 -1 1 1 0 -1
+-1 1 2 2 0 1
+2
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 0 -1 -1
+-1 -1 -1 1 -1 -1
+-1 -1 -1 5 0 0
+-1 -1 -1 0 1 1
+-1 -1 -1 4 5 5
+-1 -1 -1 3 4 4
+-1 -1 -1 2 3 3
+-1 -1 -1 0 2 2
+-1 -1 -1 1 0 0
+-1 -1 0 0 1 1
+2
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 5 -1 -1
+-1 -1 -1 2 -1 -1
+-1 -1 -1 5 -1 -1
+-1 -1 -1 5 -1 -1
+-1 -1 -1 2 -1 -1
+-1 -1 2 5 -1 -1
+-1 -1 2 5 2 2
+3
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 0 1 -1 -1 -1
+-1 1 0 1 0 -1
+2
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 0 -1 -1
+-1 -1 -1 0 -1 -1
+-1 -1 1 3 -1 -1
+-1 -1 0 0 -1 -1
+-1 -1 3 1 -1 -1
+-1 1 3 1 -1 -1
+2
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 0 -1 -1
+-1 -1 3 0 -1 -1
+-1 3 3 1 -1 -1
+-1 1 1 0 -1 -1
+2
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 2 2 -1 -1
+-1 -1 1 0 0 -1
+-1 -1 1 2 1 0
+1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+0 1 2 -1 -1 -1
+3 4 5 -1 -1 -1
+5 5 3 -1 -1 -1
+3 4 2 -1 -1 -1
+3 0 0 4 1 -1
+1 4 1 1 0 -1
+2 2 0 4 0 -1
+2 2 3 4 3 -1
+0 0 1 1 0 -1
+3
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 2 -1 -1 -1
+-1 -1 2 0 -1 -1
+-1 -1 1 1 2 -1
+-1 -1 0 1 0 -1
+2
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 2 -1 -1
+-1 -1 -1 0 -1 -1
+-1 -1 -1 0 -1 -1
+-1 -1 -1 1 -1 -1
+-1 -1 -1 1 -1 -1
+-1 -1 -1 0 -1 -1
+-1 -1 -1 1 -1 -1
+-1 -1 -1 0 -1 -1
+-1 2 2 0 2 2
+3
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 3 3 -1
+-1 -1 2 0 3 -1
+-1 -1 2 1 2 -1
+-1 1 1 0 0 -1
+5
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+2 2 1 1 2 2
+0 3 4 5 3 0
+0 4 3 3 5 0
+1 4 1 1 5 1
+0 2 3 3 2 0
+3
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+2 -1 2 -1 2 -1
+0 -1 3 -1 0 -1
+1 -1 3 -1 1 -1
+0 -1 4 -1 0 -1
+1 -1 4 -1 4 -1
+0 2 3 2 0 -1
+3
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 2 -1 -1 -1
+-1 -1 3 -1 -1 -1
+-1 3 1 -1 -1 -1
+-1 0 0 -1 -1 -1
+-1 1 2 3 -1 -1
+-1 0 1 2 -1 -1
+3
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 0 1 0 -1
+1 1 0 1 1 0
+0 2 2 0 2 1
+1
+0 2 4 3 1 5
+0 2 4 3 1 5
+3 5 1 2 0 4
+3 5 1 2 0 4
+2 4 0 5 3 1
+1 1 2 1 2 2
+2 4 0 5 3 1
+2 4 0 5 3 1
+3 5 1 2 0 4
+3 5 1 2 0 4
+0 2 4 3 1 5
+0 2 4 3 1 5
diff --git a/Game/data/puzzles/testPuzzles b/Game/data/puzzles/testPuzzles
new file mode 100644
index 0000000..807500f
--- /dev/null
+++ b/Game/data/puzzles/testPuzzles
@@ -0,0 +1,92 @@
+7
+1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+0 0 3 4 0 0
+0 0 3 4 0 0
+3 3 4 3 4 4
+0 0 3 4 0 0
+0 0 3 4 0 0
+2
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 3 -1 -1
+-1 -1 -1 0 -1 -1
+-1 2 0 1 -1 -1
+-1 3 3 0 -1 -1
+-1 2 1 3 -1 -1
+-1 2 3 1 -1 -1
+2
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 4 0 -1 -1
+-1 -1 0 4 3 3
+-1 -1 4 0 4 4
+-1 -1 0 4 3 3
+-1 -1 0 4 3 3
+2
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 5 -1 -1
+-1 -1 -1 5 -1 -1
+-1 -1 5 3 -1 -1
+-1 -1 4 4 -1 -1
+-1 -1 3 3 4 -1
+3
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 2 -1 -1 -1 -1
+-1 3 -1 -1 -1 -1
+-1 2 0 2 -1 -1
+-1 2 3 3 -1 -1
+-1 0 1 0 -1 -1
+-1 0 2 2 -1 -1
+-1 3 1 1 -1 -1
+-1 3 0 0 -1 -1
+3 0 3 3 -1 -1
+3
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 1 -1 -1 -1 -1
+-1 1 4 -1 -1 -1
+-1 3 3 1 -1 -1
+-1 3 4 4 -1 -1
+2
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 -1 -1 -1
+-1 -1 -1 3 -1 -1
+-1 -1 -1 1 -1 -1
+-1 -1 1 1 -1 -1
+-1 -1 4 4 -1 -1
+-1 4 0 0 -1 -1
+-1 0 3 3 -1 -1
diff --git a/Game/data/sounds/applause.ogg b/Game/data/sounds/applause.ogg
new file mode 100644
index 0000000..39ba789
Binary files /dev/null and b/Game/data/sounds/applause.ogg differ
diff --git a/Game/data/sounds/cameraclick.ogg b/Game/data/sounds/cameraclick.ogg
new file mode 100644
index 0000000..0c1f9a9
Binary files /dev/null and b/Game/data/sounds/cameraclick.ogg differ
diff --git a/Game/data/sounds/counter.ogg b/Game/data/sounds/counter.ogg
new file mode 100644
index 0000000..0eb3b4d
Binary files /dev/null and b/Game/data/sounds/counter.ogg differ
diff --git a/Game/data/sounds/counter_final.ogg b/Game/data/sounds/counter_final.ogg
new file mode 100644
index 0000000..f76ba7c
Binary files /dev/null and b/Game/data/sounds/counter_final.ogg differ
diff --git a/Game/data/sounds/pop.ogg b/Game/data/sounds/pop.ogg
new file mode 100644
index 0000000..9e9fc51
Binary files /dev/null and b/Game/data/sounds/pop.ogg differ
diff --git a/Game/data/sounds/typing.ogg b/Game/data/sounds/typing.ogg
new file mode 100644
index 0000000..83d95c9
Binary files /dev/null and b/Game/data/sounds/typing.ogg differ
diff --git a/Game/data/textures/BackBoard.png b/Game/data/textures/BackBoard.png
new file mode 100755
index 0000000..1043816
Binary files /dev/null and b/Game/data/textures/BackBoard.png differ
diff --git a/Game/data/textures/b1024.png b/Game/data/textures/b1024.png
new file mode 100755
index 0000000..5707fb3
Binary files /dev/null and b/Game/data/textures/b1024.png differ
diff --git a/Game/data/textures/bBack.png b/Game/data/textures/bBack.png
new file mode 100755
index 0000000..9bbe840
Binary files /dev/null and b/Game/data/textures/bBack.png differ
diff --git a/Game/data/textures/bBlank.png b/Game/data/textures/bBlank.png
new file mode 100644
index 0000000..16803bf
Binary files /dev/null and b/Game/data/textures/bBlank.png differ
diff --git a/Game/data/textures/bChange.png b/Game/data/textures/bChange.png
new file mode 100755
index 0000000..4db0cf1
Binary files /dev/null and b/Game/data/textures/bChange.png differ
diff --git a/Game/data/textures/bConfigure.png b/Game/data/textures/bConfigure.png
new file mode 100755
index 0000000..2d69ab9
Binary files /dev/null and b/Game/data/textures/bConfigure.png differ
diff --git a/Game/data/textures/bConnect.png b/Game/data/textures/bConnect.png
new file mode 100755
index 0000000..2e11b93
Binary files /dev/null and b/Game/data/textures/bConnect.png differ
diff --git a/Game/data/textures/bEndless.png b/Game/data/textures/bEndless.png
new file mode 100755
index 0000000..2bde2db
Binary files /dev/null and b/Game/data/textures/bEndless.png differ
diff --git a/Game/data/textures/bExit.png b/Game/data/textures/bExit.png
new file mode 100755
index 0000000..d22bfe3
Binary files /dev/null and b/Game/data/textures/bExit.png differ
diff --git a/Game/data/textures/bForward.png b/Game/data/textures/bForward.png
new file mode 100755
index 0000000..fbfcb0b
Binary files /dev/null and b/Game/data/textures/bForward.png differ
diff --git a/Game/data/textures/bHighScore.png b/Game/data/textures/bHighScore.png
new file mode 100755
index 0000000..028611a
Binary files /dev/null and b/Game/data/textures/bHighScore.png differ
diff --git a/Game/data/textures/bHost.png b/Game/data/textures/bHost.png
new file mode 100755
index 0000000..e68036c
Binary files /dev/null and b/Game/data/textures/bHost.png differ
diff --git a/Game/data/textures/bHowToPlay.png b/Game/data/textures/bHowToPlay.png
new file mode 100755
index 0000000..8c94b10
Binary files /dev/null and b/Game/data/textures/bHowToPlay.png differ
diff --git a/Game/data/textures/bInternet.png b/Game/data/textures/bInternet.png
new file mode 100755
index 0000000..a47b30f
Binary files /dev/null and b/Game/data/textures/bInternet.png differ
diff --git a/Game/data/textures/bLoad.png b/Game/data/textures/bLoad.png
new file mode 100755
index 0000000..86f4bb9
Binary files /dev/null and b/Game/data/textures/bLoad.png differ
diff --git a/Game/data/textures/bNetwork.png b/Game/data/textures/bNetwork.png
new file mode 100755
index 0000000..8f7723f
Binary files /dev/null and b/Game/data/textures/bNetwork.png differ
diff --git a/Game/data/textures/bNewGame.png b/Game/data/textures/bNewGame.png
new file mode 100755
index 0000000..b6e3a40
Binary files /dev/null and b/Game/data/textures/bNewGame.png differ
diff --git a/Game/data/textures/bNext.png b/Game/data/textures/bNext.png
new file mode 100644
index 0000000..c0172dd
Binary files /dev/null and b/Game/data/textures/bNext.png differ
diff --git a/Game/data/textures/bOff.png b/Game/data/textures/bOff.png
new file mode 100755
index 0000000..3dc5ead
Binary files /dev/null and b/Game/data/textures/bOff.png differ
diff --git a/Game/data/textures/bOn.png b/Game/data/textures/bOn.png
new file mode 100755
index 0000000..ee97b5b
Binary files /dev/null and b/Game/data/textures/bOn.png differ
diff --git a/Game/data/textures/bOnePlayer.png b/Game/data/textures/bOnePlayer.png
new file mode 100755
index 0000000..6f70e4b
Binary files /dev/null and b/Game/data/textures/bOnePlayer.png differ
diff --git a/Game/data/textures/bOptions.png b/Game/data/textures/bOptions.png
new file mode 100755
index 0000000..fb1ac4a
Binary files /dev/null and b/Game/data/textures/bOptions.png differ
diff --git a/Game/data/textures/bPuzzle.png b/Game/data/textures/bPuzzle.png
new file mode 100755
index 0000000..0557ab9
Binary files /dev/null and b/Game/data/textures/bPuzzle.png differ
diff --git a/Game/data/textures/bReplays.png b/Game/data/textures/bReplays.png
new file mode 100755
index 0000000..8871646
Binary files /dev/null and b/Game/data/textures/bReplays.png differ
diff --git a/Game/data/textures/bRetry.png b/Game/data/textures/bRetry.png
new file mode 100644
index 0000000..a54f4e9
Binary files /dev/null and b/Game/data/textures/bRetry.png differ
diff --git a/Game/data/textures/bSave.png b/Game/data/textures/bSave.png
new file mode 100755
index 0000000..68ccc26
Binary files /dev/null and b/Game/data/textures/bSave.png differ
diff --git a/Game/data/textures/bSelectPuzzle.png b/Game/data/textures/bSelectPuzzle.png
new file mode 100755
index 0000000..bff7802
Binary files /dev/null and b/Game/data/textures/bSelectPuzzle.png differ
diff --git a/Game/data/textures/bSkip.png b/Game/data/textures/bSkip.png
new file mode 100644
index 0000000..02feb60
Binary files /dev/null and b/Game/data/textures/bSkip.png differ
diff --git a/Game/data/textures/bStageClear.png b/Game/data/textures/bStageClear.png
new file mode 100755
index 0000000..c1e7596
Binary files /dev/null and b/Game/data/textures/bStageClear.png differ
diff --git a/Game/data/textures/bTheme.png b/Game/data/textures/bTheme.png
new file mode 100644
index 0000000..b581ac1
Binary files /dev/null and b/Game/data/textures/bTheme.png differ
diff --git a/Game/data/textures/bTimeTrial.png b/Game/data/textures/bTimeTrial.png
new file mode 100755
index 0000000..474f06c
Binary files /dev/null and b/Game/data/textures/bTimeTrial.png differ
diff --git a/Game/data/textures/bTwoPlayers.png b/Game/data/textures/bTwoPlayers.png
new file mode 100755
index 0000000..4296009
Binary files /dev/null and b/Game/data/textures/bTwoPlayers.png differ
diff --git a/Game/data/textures/bVsGame.png b/Game/data/textures/bVsGame.png
new file mode 100755
index 0000000..f50a4ef
Binary files /dev/null and b/Game/data/textures/bVsGame.png differ
diff --git a/Game/data/textures/bVsGameConfig.png b/Game/data/textures/bVsGameConfig.png
new file mode 100755
index 0000000..e582b6f
Binary files /dev/null and b/Game/data/textures/bVsGameConfig.png differ
diff --git a/Game/data/textures/background.png b/Game/data/textures/background.png
new file mode 100755
index 0000000..9d48c07
Binary files /dev/null and b/Game/data/textures/background.png differ
diff --git a/Game/data/textures/ball_blue.png b/Game/data/textures/ball_blue.png
new file mode 100755
index 0000000..b499d88
Binary files /dev/null and b/Game/data/textures/ball_blue.png differ
diff --git a/Game/data/textures/ball_gray.png b/Game/data/textures/ball_gray.png
new file mode 100755
index 0000000..b5cb6c1
Binary files /dev/null and b/Game/data/textures/ball_gray.png differ
diff --git a/Game/data/textures/ball_green.png b/Game/data/textures/ball_green.png
new file mode 100755
index 0000000..329873a
Binary files /dev/null and b/Game/data/textures/ball_green.png differ
diff --git a/Game/data/textures/ball_purple.png b/Game/data/textures/ball_purple.png
new file mode 100755
index 0000000..fb20f6a
Binary files /dev/null and b/Game/data/textures/ball_purple.png differ
diff --git a/Game/data/textures/ball_red.png b/Game/data/textures/ball_red.png
new file mode 100755
index 0000000..4451b21
Binary files /dev/null and b/Game/data/textures/ball_red.png differ
diff --git a/Game/data/textures/ball_turkish.png b/Game/data/textures/ball_turkish.png
new file mode 100755
index 0000000..60fb0bf
Binary files /dev/null and b/Game/data/textures/ball_turkish.png differ
diff --git a/Game/data/textures/ball_yellow.png b/Game/data/textures/ball_yellow.png
new file mode 100755
index 0000000..7f4720e
Binary files /dev/null and b/Game/data/textures/ball_yellow.png differ
diff --git a/Game/data/textures/blackBackGround.png b/Game/data/textures/blackBackGround.png
new file mode 100755
index 0000000..1d13c39
Binary files /dev/null and b/Game/data/textures/blackBackGround.png differ
diff --git a/Game/data/textures/blackLine.png b/Game/data/textures/blackLine.png
new file mode 100755
index 0000000..8fd8d31
Binary files /dev/null and b/Game/data/textures/blackLine.png differ
diff --git a/Game/data/textures/boardBackBack.png b/Game/data/textures/boardBackBack.png
new file mode 100755
index 0000000..df77014
Binary files /dev/null and b/Game/data/textures/boardBackBack.png differ
diff --git a/Game/data/textures/bomb.png b/Game/data/textures/bomb.png
new file mode 100644
index 0000000..cbd6a8e
Binary files /dev/null and b/Game/data/textures/bomb.png differ
diff --git a/Game/data/textures/chainFrame.png b/Game/data/textures/chainFrame.png
new file mode 100755
index 0000000..52aadb6
Binary files /dev/null and b/Game/data/textures/chainFrame.png differ
diff --git a/Game/data/textures/changeButtonsBack.png b/Game/data/textures/changeButtonsBack.png
new file mode 100755
index 0000000..63986f3
Binary files /dev/null and b/Game/data/textures/changeButtonsBack.png differ
diff --git a/Game/data/textures/changeButtonsBack1.png b/Game/data/textures/changeButtonsBack1.png
new file mode 100755
index 0000000..349dc1a
Binary files /dev/null and b/Game/data/textures/changeButtonsBack1.png differ
diff --git a/Game/data/textures/crossover.png b/Game/data/textures/crossover.png
new file mode 100755
index 0000000..14693a7
Binary files /dev/null and b/Game/data/textures/crossover.png differ
diff --git a/Game/data/textures/cursor.png b/Game/data/textures/cursor.png
new file mode 100644
index 0000000..2936d40
Binary files /dev/null and b/Game/data/textures/cursor.png differ
diff --git a/Game/data/textures/dialogbox.png b/Game/data/textures/dialogbox.png
new file mode 100755
index 0000000..a3e4402
Binary files /dev/null and b/Game/data/textures/dialogbox.png differ
diff --git a/Game/data/textures/fallback.png b/Game/data/textures/fallback.png
new file mode 100644
index 0000000..a4ca1d5
Binary files /dev/null and b/Game/data/textures/fallback.png differ
diff --git a/Game/data/textures/fileDialogbox.png b/Game/data/textures/fileDialogbox.png
new file mode 100755
index 0000000..b54d692
Binary files /dev/null and b/Game/data/textures/fileDialogbox.png differ
diff --git a/Game/data/textures/iCheckBoxArea.png b/Game/data/textures/iCheckBoxArea.png
new file mode 100755
index 0000000..66d0fbb
Binary files /dev/null and b/Game/data/textures/iCheckBoxArea.png differ
diff --git a/Game/data/textures/iDraw.png b/Game/data/textures/iDraw.png
new file mode 100755
index 0000000..3881038
Binary files /dev/null and b/Game/data/textures/iDraw.png differ
diff --git a/Game/data/textures/iGameOver.png b/Game/data/textures/iGameOver.png
new file mode 100755
index 0000000..0dd2133
Binary files /dev/null and b/Game/data/textures/iGameOver.png differ
diff --git a/Game/data/textures/iLevelCheck.png b/Game/data/textures/iLevelCheck.png
new file mode 100755
index 0000000..01eb8fe
Binary files /dev/null and b/Game/data/textures/iLevelCheck.png differ
diff --git a/Game/data/textures/iLevelCheckBox.png b/Game/data/textures/iLevelCheckBox.png
new file mode 100755
index 0000000..4f0aa0b
Binary files /dev/null and b/Game/data/textures/iLevelCheckBox.png differ
diff --git a/Game/data/textures/iLevelCheckBoxMarked.png b/Game/data/textures/iLevelCheckBoxMarked.png
new file mode 100755
index 0000000..afa580a
Binary files /dev/null and b/Game/data/textures/iLevelCheckBoxMarked.png differ
diff --git a/Game/data/textures/iLoser.png b/Game/data/textures/iLoser.png
new file mode 100755
index 0000000..d84fd68
Binary files /dev/null and b/Game/data/textures/iLoser.png differ
diff --git a/Game/data/textures/iStageClearLimit.png b/Game/data/textures/iStageClearLimit.png
new file mode 100755
index 0000000..d70b6ea
Binary files /dev/null and b/Game/data/textures/iStageClearLimit.png differ
diff --git a/Game/data/textures/iWinner.png b/Game/data/textures/iWinner.png
new file mode 100755
index 0000000..e6b012e
Binary files /dev/null and b/Game/data/textures/iWinner.png differ
diff --git a/Game/data/textures/icon.png b/Game/data/textures/icon.png
new file mode 100755
index 0000000..c6d5181
Binary files /dev/null and b/Game/data/textures/icon.png differ
diff --git a/Game/data/textures/menu_marked.png b/Game/data/textures/menu_marked.png
new file mode 100644
index 0000000..9ed8a14
Binary files /dev/null and b/Game/data/textures/menu_marked.png differ
diff --git a/Game/data/textures/menu_unmarked.png b/Game/data/textures/menu_unmarked.png
new file mode 100644
index 0000000..39132db
Binary files /dev/null and b/Game/data/textures/menu_unmarked.png differ
diff --git a/Game/data/textures/mouse.png b/Game/data/textures/mouse.png
new file mode 100755
index 0000000..0ee7026
Binary files /dev/null and b/Game/data/textures/mouse.png differ
diff --git a/Game/data/textures/options.png b/Game/data/textures/options.png
new file mode 100755
index 0000000..ca9a70a
Binary files /dev/null and b/Game/data/textures/options.png differ
diff --git a/Game/data/textures/ready.png b/Game/data/textures/ready.png
new file mode 100644
index 0000000..de22ef2
Binary files /dev/null and b/Game/data/textures/ready.png differ
diff --git a/Game/data/textures/transCover.png b/Game/data/textures/transCover.png
new file mode 100644
index 0000000..ddbad2f
Binary files /dev/null and b/Game/data/textures/transCover.png differ
diff --git a/Game/gfx/BackBoard.png b/Game/gfx/BackBoard.png
deleted file mode 100755
index 1043816..0000000
Binary files a/Game/gfx/BackBoard.png and /dev/null differ
diff --git a/Game/gfx/b1024.png b/Game/gfx/b1024.png
deleted file mode 100755
index 5707fb3..0000000
Binary files a/Game/gfx/b1024.png and /dev/null differ
diff --git a/Game/gfx/bBack.png b/Game/gfx/bBack.png
deleted file mode 100755
index 9bbe840..0000000
Binary files a/Game/gfx/bBack.png and /dev/null differ
diff --git a/Game/gfx/bBlank.png b/Game/gfx/bBlank.png
deleted file mode 100644
index 16803bf..0000000
Binary files a/Game/gfx/bBlank.png and /dev/null differ
diff --git a/Game/gfx/bChange.png b/Game/gfx/bChange.png
deleted file mode 100755
index 4db0cf1..0000000
Binary files a/Game/gfx/bChange.png and /dev/null differ
diff --git a/Game/gfx/bConfigure.png b/Game/gfx/bConfigure.png
deleted file mode 100755
index 2d69ab9..0000000
Binary files a/Game/gfx/bConfigure.png and /dev/null differ
diff --git a/Game/gfx/bConnect.png b/Game/gfx/bConnect.png
deleted file mode 100755
index 2e11b93..0000000
Binary files a/Game/gfx/bConnect.png and /dev/null differ
diff --git a/Game/gfx/bEndless.png b/Game/gfx/bEndless.png
deleted file mode 100755
index 2bde2db..0000000
Binary files a/Game/gfx/bEndless.png and /dev/null differ
diff --git a/Game/gfx/bExit.png b/Game/gfx/bExit.png
deleted file mode 100755
index d22bfe3..0000000
Binary files a/Game/gfx/bExit.png and /dev/null differ
diff --git a/Game/gfx/bForward.png b/Game/gfx/bForward.png
deleted file mode 100755
index fbfcb0b..0000000
Binary files a/Game/gfx/bForward.png and /dev/null differ
diff --git a/Game/gfx/bHighScore.png b/Game/gfx/bHighScore.png
deleted file mode 100755
index 028611a..0000000
Binary files a/Game/gfx/bHighScore.png and /dev/null differ
diff --git a/Game/gfx/bHost.png b/Game/gfx/bHost.png
deleted file mode 100755
index e68036c..0000000
Binary files a/Game/gfx/bHost.png and /dev/null differ
diff --git a/Game/gfx/bHowToPlay.png b/Game/gfx/bHowToPlay.png
deleted file mode 100755
index 8c94b10..0000000
Binary files a/Game/gfx/bHowToPlay.png and /dev/null differ
diff --git a/Game/gfx/bInternet.png b/Game/gfx/bInternet.png
deleted file mode 100755
index a47b30f..0000000
Binary files a/Game/gfx/bInternet.png and /dev/null differ
diff --git a/Game/gfx/bLoad.png b/Game/gfx/bLoad.png
deleted file mode 100755
index 86f4bb9..0000000
Binary files a/Game/gfx/bLoad.png and /dev/null differ
diff --git a/Game/gfx/bNetwork.png b/Game/gfx/bNetwork.png
deleted file mode 100755
index 8f7723f..0000000
Binary files a/Game/gfx/bNetwork.png and /dev/null differ
diff --git a/Game/gfx/bNewGame.png b/Game/gfx/bNewGame.png
deleted file mode 100755
index b6e3a40..0000000
Binary files a/Game/gfx/bNewGame.png and /dev/null differ
diff --git a/Game/gfx/bNext.png b/Game/gfx/bNext.png
deleted file mode 100644
index c0172dd..0000000
Binary files a/Game/gfx/bNext.png and /dev/null differ
diff --git a/Game/gfx/bOff.png b/Game/gfx/bOff.png
deleted file mode 100755
index 3dc5ead..0000000
Binary files a/Game/gfx/bOff.png and /dev/null differ
diff --git a/Game/gfx/bOn.png b/Game/gfx/bOn.png
deleted file mode 100755
index ee97b5b..0000000
Binary files a/Game/gfx/bOn.png and /dev/null differ
diff --git a/Game/gfx/bOnePlayer.png b/Game/gfx/bOnePlayer.png
deleted file mode 100755
index 6f70e4b..0000000
Binary files a/Game/gfx/bOnePlayer.png and /dev/null differ
diff --git a/Game/gfx/bOptions.png b/Game/gfx/bOptions.png
deleted file mode 100755
index fb1ac4a..0000000
Binary files a/Game/gfx/bOptions.png and /dev/null differ
diff --git a/Game/gfx/bPuzzle.png b/Game/gfx/bPuzzle.png
deleted file mode 100755
index 0557ab9..0000000
Binary files a/Game/gfx/bPuzzle.png and /dev/null differ
diff --git a/Game/gfx/bReplays.png b/Game/gfx/bReplays.png
deleted file mode 100755
index 8871646..0000000
Binary files a/Game/gfx/bReplays.png and /dev/null differ
diff --git a/Game/gfx/bRetry.png b/Game/gfx/bRetry.png
deleted file mode 100644
index a54f4e9..0000000
Binary files a/Game/gfx/bRetry.png and /dev/null differ
diff --git a/Game/gfx/bSave.png b/Game/gfx/bSave.png
deleted file mode 100755
index 68ccc26..0000000
Binary files a/Game/gfx/bSave.png and /dev/null differ
diff --git a/Game/gfx/bSelectPuzzle.png b/Game/gfx/bSelectPuzzle.png
deleted file mode 100755
index bff7802..0000000
Binary files a/Game/gfx/bSelectPuzzle.png and /dev/null differ
diff --git a/Game/gfx/bSkip.png b/Game/gfx/bSkip.png
deleted file mode 100644
index 02feb60..0000000
Binary files a/Game/gfx/bSkip.png and /dev/null differ
diff --git a/Game/gfx/bStageClear.png b/Game/gfx/bStageClear.png
deleted file mode 100755
index c1e7596..0000000
Binary files a/Game/gfx/bStageClear.png and /dev/null differ
diff --git a/Game/gfx/bTheme.png b/Game/gfx/bTheme.png
deleted file mode 100644
index b581ac1..0000000
Binary files a/Game/gfx/bTheme.png and /dev/null differ
diff --git a/Game/gfx/bTimeTrial.png b/Game/gfx/bTimeTrial.png
deleted file mode 100755
index 474f06c..0000000
Binary files a/Game/gfx/bTimeTrial.png and /dev/null differ
diff --git a/Game/gfx/bTwoPlayers.png b/Game/gfx/bTwoPlayers.png
deleted file mode 100755
index 4296009..0000000
Binary files a/Game/gfx/bTwoPlayers.png and /dev/null differ
diff --git a/Game/gfx/bVsGame.png b/Game/gfx/bVsGame.png
deleted file mode 100755
index f50a4ef..0000000
Binary files a/Game/gfx/bVsGame.png and /dev/null differ
diff --git a/Game/gfx/bVsGameConfig.png b/Game/gfx/bVsGameConfig.png
deleted file mode 100755
index e582b6f..0000000
Binary files a/Game/gfx/bVsGameConfig.png and /dev/null differ
diff --git a/Game/gfx/background.png b/Game/gfx/background.png
deleted file mode 100755
index 9d48c07..0000000
Binary files a/Game/gfx/background.png and /dev/null differ
diff --git a/Game/gfx/balls/ballBlue.png b/Game/gfx/balls/ballBlue.png
deleted file mode 100755
index b499d88..0000000
Binary files a/Game/gfx/balls/ballBlue.png and /dev/null differ
diff --git a/Game/gfx/balls/ballGray.png b/Game/gfx/balls/ballGray.png
deleted file mode 100755
index b5cb6c1..0000000
Binary files a/Game/gfx/balls/ballGray.png and /dev/null differ
diff --git a/Game/gfx/balls/ballGreen.png b/Game/gfx/balls/ballGreen.png
deleted file mode 100755
index 329873a..0000000
Binary files a/Game/gfx/balls/ballGreen.png and /dev/null differ
diff --git a/Game/gfx/balls/ballPurple.png b/Game/gfx/balls/ballPurple.png
deleted file mode 100755
index fb20f6a..0000000
Binary files a/Game/gfx/balls/ballPurple.png and /dev/null differ
diff --git a/Game/gfx/balls/ballRed.png b/Game/gfx/balls/ballRed.png
deleted file mode 100755
index 4451b21..0000000
Binary files a/Game/gfx/balls/ballRed.png and /dev/null differ
diff --git a/Game/gfx/balls/ballTurkish.png b/Game/gfx/balls/ballTurkish.png
deleted file mode 100755
index 60fb0bf..0000000
Binary files a/Game/gfx/balls/ballTurkish.png and /dev/null differ
diff --git a/Game/gfx/balls/ballYellow.png b/Game/gfx/balls/ballYellow.png
deleted file mode 100755
index 7f4720e..0000000
Binary files a/Game/gfx/balls/ballYellow.png and /dev/null differ
diff --git a/Game/gfx/blackBackGround.png b/Game/gfx/blackBackGround.png
deleted file mode 100755
index 1d13c39..0000000
Binary files a/Game/gfx/blackBackGround.png and /dev/null differ
diff --git a/Game/gfx/blackLine.png b/Game/gfx/blackLine.png
deleted file mode 100755
index 8fd8d31..0000000
Binary files a/Game/gfx/blackLine.png and /dev/null differ
diff --git a/Game/gfx/boardBackBack.png b/Game/gfx/boardBackBack.png
deleted file mode 100755
index df77014..0000000
Binary files a/Game/gfx/boardBackBack.png and /dev/null differ
diff --git a/Game/gfx/chainFrame.png b/Game/gfx/chainFrame.png
deleted file mode 100755
index 52aadb6..0000000
Binary files a/Game/gfx/chainFrame.png and /dev/null differ
diff --git a/Game/gfx/changeButtonsBack.png b/Game/gfx/changeButtonsBack.png
deleted file mode 100755
index 63986f3..0000000
Binary files a/Game/gfx/changeButtonsBack.png and /dev/null differ
diff --git a/Game/gfx/changeButtonsBack1.png b/Game/gfx/changeButtonsBack1.png
deleted file mode 100755
index 349dc1a..0000000
Binary files a/Game/gfx/changeButtonsBack1.png and /dev/null differ
diff --git a/Game/gfx/crossover.png b/Game/gfx/crossover.png
deleted file mode 100755
index 14693a7..0000000
Binary files a/Game/gfx/crossover.png and /dev/null differ
diff --git a/Game/gfx/dialogbox.png b/Game/gfx/dialogbox.png
deleted file mode 100755
index a3e4402..0000000
Binary files a/Game/gfx/dialogbox.png and /dev/null differ
diff --git a/Game/gfx/fileDialogbox.png b/Game/gfx/fileDialogbox.png
deleted file mode 100755
index b54d692..0000000
Binary files a/Game/gfx/fileDialogbox.png and /dev/null differ
diff --git a/Game/gfx/iCheckBoxArea.png b/Game/gfx/iCheckBoxArea.png
deleted file mode 100755
index 66d0fbb..0000000
Binary files a/Game/gfx/iCheckBoxArea.png and /dev/null differ
diff --git a/Game/gfx/iDraw.png b/Game/gfx/iDraw.png
deleted file mode 100755
index 3881038..0000000
Binary files a/Game/gfx/iDraw.png and /dev/null differ
diff --git a/Game/gfx/iGameOver.png b/Game/gfx/iGameOver.png
deleted file mode 100755
index 0dd2133..0000000
Binary files a/Game/gfx/iGameOver.png and /dev/null differ
diff --git a/Game/gfx/iLevelCheck.png b/Game/gfx/iLevelCheck.png
deleted file mode 100755
index 01eb8fe..0000000
Binary files a/Game/gfx/iLevelCheck.png and /dev/null differ
diff --git a/Game/gfx/iLevelCheckBox.png b/Game/gfx/iLevelCheckBox.png
deleted file mode 100755
index 4f0aa0b..0000000
Binary files a/Game/gfx/iLevelCheckBox.png and /dev/null differ
diff --git a/Game/gfx/iLevelCheckBoxMarked.png b/Game/gfx/iLevelCheckBoxMarked.png
deleted file mode 100755
index afa580a..0000000
Binary files a/Game/gfx/iLevelCheckBoxMarked.png and /dev/null differ
diff --git a/Game/gfx/iLoser.png b/Game/gfx/iLoser.png
deleted file mode 100755
index d84fd68..0000000
Binary files a/Game/gfx/iLoser.png and /dev/null differ
diff --git a/Game/gfx/iStageClearLimit.png b/Game/gfx/iStageClearLimit.png
deleted file mode 100755
index d70b6ea..0000000
Binary files a/Game/gfx/iStageClearLimit.png and /dev/null differ
diff --git a/Game/gfx/iWinner.png b/Game/gfx/iWinner.png
deleted file mode 100755
index e6b012e..0000000
Binary files a/Game/gfx/iWinner.png and /dev/null differ
diff --git a/Game/gfx/icon.png b/Game/gfx/icon.png
deleted file mode 100755
index c6d5181..0000000
Binary files a/Game/gfx/icon.png and /dev/null differ
diff --git a/Game/gfx/menu/marked.png b/Game/gfx/menu/marked.png
deleted file mode 100644
index 9ed8a14..0000000
Binary files a/Game/gfx/menu/marked.png and /dev/null differ
diff --git a/Game/gfx/menu/unmarked.png b/Game/gfx/menu/unmarked.png
deleted file mode 100644
index 39132db..0000000
Binary files a/Game/gfx/menu/unmarked.png and /dev/null differ
diff --git a/Game/gfx/mouse.png b/Game/gfx/mouse.png
deleted file mode 100755
index 0ee7026..0000000
Binary files a/Game/gfx/mouse.png and /dev/null differ
diff --git a/Game/gfx/options.png b/Game/gfx/options.png
deleted file mode 100755
index ca9a70a..0000000
Binary files a/Game/gfx/options.png and /dev/null differ
diff --git a/Game/gfx/transCover.png b/Game/gfx/transCover.png
deleted file mode 100644
index ddbad2f..0000000
Binary files a/Game/gfx/transCover.png and /dev/null differ
diff --git a/Game/puzzles/copy b/Game/puzzles/copy
deleted file mode 100755
index 9617703..0000000
--- a/Game/puzzles/copy
+++ /dev/null
@@ -1,339 +0,0 @@
-26
-1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 1 1 -1 -1
--1 1 0 0 -1 0
-1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 0 -1 4 -1 -1
--1 3 4 2 -1 -1
--1 3 0 0 -1 -1
--1 0 2 2 -1 -1
--1 3 0 0 4 -1
-2
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 0 1 -1 -1
--1 -1 0 1 -1 -1
--1 -1 1 0 -1 -1
--1 -1 1 0 -1 -1
--1 -1 0 1 -1 -1
-2
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 1 -1 -1
--1 -1 -1 2 -1 -1
--1 -1 -1 2 -1 -1
-0 -1 1 1 -1 -1
-0 -1 0 2 -1 -1
-1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 1 -1 -1 -1
--1 -1 0 -1 -1 -1
--1 -1 0 -1 -1 -1
--1 -1 1 -1 -1 -1
--1 -1 0 1 1 -1
-1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 1 -1 -1 -1 -1
--1 0 1 -1 -1 -1
--1 1 0 0 -1 -1
-1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 4 4 -1 -1
--1 2 2 4 2 -1
-2
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 1 0 -1 -1
--1 -1 1 0 1 0
-1
--1 -1 5 -1 -1 -1
-5 5 3 -1 -1 -1
-3 3 2 -1 -1 -1
-2 2 0 -1 -1 -1
-0 0 1 -1 -1 -1
-1 1 5 -1 -1 -1
-5 5 4 -1 -1 -1
-4 4 3 -1 -1 -1
-3 3 2 -1 -1 -1
-2 2 0 -1 -1 -1
-0 0 1 0 -1 -1
-1 1 0 0 -1 -1
-2
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 0 -1 -1 -1
--1 -1 1 -1 -1 -1
--1 -1 1 -1 -1 -1
--1 -1 0 1 1 -1
--1 -1 0 1 0 -1
-2
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 1 3 -1 -1
--1 -1 3 1 -1 -1
-1 -1 1 3 -1 3
-3
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 2 -1 -1
--1 -1 -1 0 1 -1
--1 -1 1 1 0 -1
--1 1 2 2 0 1
-2
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 0 -1 -1
--1 -1 -1 1 -1 -1
--1 -1 -1 5 0 0
--1 -1 -1 0 1 1
--1 -1 -1 4 5 5
--1 -1 -1 3 4 4
--1 -1 -1 2 3 3
--1 -1 -1 0 2 2
--1 -1 -1 1 0 0
--1 -1 0 0 1 1
-2
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 5 -1 -1
--1 -1 -1 2 -1 -1
--1 -1 -1 5 -1 -1
--1 -1 -1 5 -1 -1
--1 -1 -1 2 -1 -1
--1 -1 2 5 -1 -1
--1 -1 2 5 2 2
-3
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 0 1 -1 -1 -1
--1 1 0 1 0 -1
-2
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 0 -1 -1
--1 -1 -1 0 -1 -1
--1 -1 1 3 -1 -1
--1 -1 0 0 -1 -1
--1 -1 3 1 -1 -1
--1 1 3 1 -1 -1
-2
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 0 -1 -1
--1 -1 3 0 -1 -1
--1 3 3 1 -1 -1
--1 1 1 0 -1 -1
-2
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 2 2 -1 -1
--1 -1 1 0 0 -1
--1 -1 1 2 1 0
-1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
-0 1 2 -1 -1 -1
-3 4 5 -1 -1 -1
-5 5 3 -1 -1 -1
-3 4 2 -1 -1 -1
-3 0 0 4 1 -1
-1 4 1 1 0 -1
-2 2 0 4 0 -1
-2 2 3 4 3 -1
-0 0 1 1 0 -1
-3
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 2 -1 -1 -1
--1 -1 2 0 -1 -1
--1 -1 1 1 2 -1
--1 -1 0 1 0 -1
-2
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 2 -1 -1
--1 -1 -1 0 -1 -1
--1 -1 -1 0 -1 -1
--1 -1 -1 1 -1 -1
--1 -1 -1 1 -1 -1
--1 -1 -1 0 -1 -1
--1 -1 -1 1 -1 -1
--1 -1 -1 0 -1 -1
--1 2 2 0 2 2
-3
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 3 3 -1
--1 -1 2 0 3 -1
--1 -1 2 1 2 -1
--1 1 1 0 0 -1
-5
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
-2 2 1 1 2 2
-0 3 4 5 3 0
-0 4 3 3 5 0
-1 4 1 1 5 1
-0 2 3 3 2 0
-3
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
-2 -1 2 -1 2 -1
-0 -1 3 -1 0 -1
-1 -1 3 -1 1 -1
-0 -1 4 -1 0 -1
-1 -1 4 -1 4 -1
-0 2 3 2 0 -1
-3
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 2 -1 -1 -1
--1 -1 3 -1 -1 -1
--1 3 1 -1 -1 -1
--1 0 0 -1 -1 -1
--1 1 2 3 -1 -1
--1 0 1 2 -1 -1
-3
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 0 1 0 -1
-1 1 0 1 1 0
-0 2 2 0 2 1
diff --git a/Game/puzzles/puzzle.levels b/Game/puzzles/puzzle.levels
deleted file mode 100755
index c53240d..0000000
--- a/Game/puzzles/puzzle.levels
+++ /dev/null
@@ -1,352 +0,0 @@
-27
-1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 1 1 -1 -1
--1 1 0 0 -1 0
-1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 0 -1 4 -1 -1
--1 3 4 2 -1 -1
--1 3 0 0 -1 -1
--1 0 2 2 -1 -1
--1 3 0 0 4 -1
-2
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 0 1 -1 -1
--1 -1 0 1 -1 -1
--1 -1 1 0 -1 -1
--1 -1 1 0 -1 -1
--1 -1 0 1 -1 -1
-2
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 1 -1 -1
--1 -1 -1 2 -1 -1
--1 -1 -1 2 -1 -1
-0 -1 1 1 -1 -1
-0 -1 0 2 -1 -1
-1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 1 -1 -1 -1
--1 -1 0 -1 -1 -1
--1 -1 0 -1 -1 -1
--1 -1 1 -1 -1 -1
--1 -1 0 1 1 -1
-1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 1 -1 -1 -1 -1
--1 0 1 -1 -1 -1
--1 1 0 0 -1 -1
-1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 4 4 -1 -1
--1 2 2 4 2 -1
-2
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 1 0 -1 -1
--1 -1 1 0 1 0
-1
--1 -1 5 -1 -1 -1
-5 5 3 -1 -1 -1
-3 3 2 -1 -1 -1
-2 2 0 -1 -1 -1
-0 0 1 -1 -1 -1
-1 1 5 -1 -1 -1
-5 5 4 -1 -1 -1
-4 4 3 -1 -1 -1
-3 3 2 -1 -1 -1
-2 2 0 -1 -1 -1
-0 0 1 0 -1 -1
-1 1 0 0 -1 -1
-2
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 0 -1 -1 -1
--1 -1 1 -1 -1 -1
--1 -1 1 -1 -1 -1
--1 -1 0 1 1 -1
--1 -1 0 1 0 -1
-2
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 1 3 -1 -1
--1 -1 3 1 -1 -1
-1 -1 1 3 -1 3
-3
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 2 -1 -1
--1 -1 -1 0 1 -1
--1 -1 1 1 0 -1
--1 1 2 2 0 1
-2
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 0 -1 -1
--1 -1 -1 1 -1 -1
--1 -1 -1 5 0 0
--1 -1 -1 0 1 1
--1 -1 -1 4 5 5
--1 -1 -1 3 4 4
--1 -1 -1 2 3 3
--1 -1 -1 0 2 2
--1 -1 -1 1 0 0
--1 -1 0 0 1 1
-2
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 5 -1 -1
--1 -1 -1 2 -1 -1
--1 -1 -1 5 -1 -1
--1 -1 -1 5 -1 -1
--1 -1 -1 2 -1 -1
--1 -1 2 5 -1 -1
--1 -1 2 5 2 2
-3
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 0 1 -1 -1 -1
--1 1 0 1 0 -1
-2
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 0 -1 -1
--1 -1 -1 0 -1 -1
--1 -1 1 3 -1 -1
--1 -1 0 0 -1 -1
--1 -1 3 1 -1 -1
--1 1 3 1 -1 -1
-2
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 0 -1 -1
--1 -1 3 0 -1 -1
--1 3 3 1 -1 -1
--1 1 1 0 -1 -1
-2
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 2 2 -1 -1
--1 -1 1 0 0 -1
--1 -1 1 2 1 0
-1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
-0 1 2 -1 -1 -1
-3 4 5 -1 -1 -1
-5 5 3 -1 -1 -1
-3 4 2 -1 -1 -1
-3 0 0 4 1 -1
-1 4 1 1 0 -1
-2 2 0 4 0 -1
-2 2 3 4 3 -1
-0 0 1 1 0 -1
-3
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 2 -1 -1 -1
--1 -1 2 0 -1 -1
--1 -1 1 1 2 -1
--1 -1 0 1 0 -1
-2
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 2 -1 -1
--1 -1 -1 0 -1 -1
--1 -1 -1 0 -1 -1
--1 -1 -1 1 -1 -1
--1 -1 -1 1 -1 -1
--1 -1 -1 0 -1 -1
--1 -1 -1 1 -1 -1
--1 -1 -1 0 -1 -1
--1 2 2 0 2 2
-3
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 3 3 -1
--1 -1 2 0 3 -1
--1 -1 2 1 2 -1
--1 1 1 0 0 -1
-5
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
-2 2 1 1 2 2
-0 3 4 5 3 0
-0 4 3 3 5 0
-1 4 1 1 5 1
-0 2 3 3 2 0
-3
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
-2 -1 2 -1 2 -1
-0 -1 3 -1 0 -1
-1 -1 3 -1 1 -1
-0 -1 4 -1 0 -1
-1 -1 4 -1 4 -1
-0 2 3 2 0 -1
-3
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 2 -1 -1 -1
--1 -1 3 -1 -1 -1
--1 3 1 -1 -1 -1
--1 0 0 -1 -1 -1
--1 1 2 3 -1 -1
--1 0 1 2 -1 -1
-3
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 0 1 0 -1
-1 1 0 1 1 0
-0 2 2 0 2 1
-1
-0 2 4 3 1 5
-0 2 4 3 1 5
-3 5 1 2 0 4
-3 5 1 2 0 4
-2 4 0 5 3 1
-1 1 2 1 2 2
-2 4 0 5 3 1
-2 4 0 5 3 1
-3 5 1 2 0 4
-3 5 1 2 0 4
-0 2 4 3 1 5
-0 2 4 3 1 5
diff --git a/Game/puzzles/testPuzzles b/Game/puzzles/testPuzzles
deleted file mode 100644
index 807500f..0000000
--- a/Game/puzzles/testPuzzles
+++ /dev/null
@@ -1,92 +0,0 @@
-7
-1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
-0 0 3 4 0 0
-0 0 3 4 0 0
-3 3 4 3 4 4
-0 0 3 4 0 0
-0 0 3 4 0 0
-2
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 3 -1 -1
--1 -1 -1 0 -1 -1
--1 2 0 1 -1 -1
--1 3 3 0 -1 -1
--1 2 1 3 -1 -1
--1 2 3 1 -1 -1
-2
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 4 0 -1 -1
--1 -1 0 4 3 3
--1 -1 4 0 4 4
--1 -1 0 4 3 3
--1 -1 0 4 3 3
-2
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 5 -1 -1
--1 -1 -1 5 -1 -1
--1 -1 5 3 -1 -1
--1 -1 4 4 -1 -1
--1 -1 3 3 4 -1
-3
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 2 -1 -1 -1 -1
--1 3 -1 -1 -1 -1
--1 2 0 2 -1 -1
--1 2 3 3 -1 -1
--1 0 1 0 -1 -1
--1 0 2 2 -1 -1
--1 3 1 1 -1 -1
--1 3 0 0 -1 -1
-3 0 3 3 -1 -1
-3
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 1 -1 -1 -1 -1
--1 1 4 -1 -1 -1
--1 3 3 1 -1 -1
--1 3 4 4 -1 -1
-2
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1
--1 -1 -1 3 -1 -1
--1 -1 -1 1 -1 -1
--1 -1 1 1 -1 -1
--1 -1 4 4 -1 -1
--1 4 0 0 -1 -1
--1 0 3 3 -1 -1
diff --git a/Game/sound/applause.ogg b/Game/sound/applause.ogg
deleted file mode 100644
index 39ba789..0000000
Binary files a/Game/sound/applause.ogg and /dev/null differ
diff --git a/Game/sound/cameraclick.ogg b/Game/sound/cameraclick.ogg
deleted file mode 100644
index 0c1f9a9..0000000
Binary files a/Game/sound/cameraclick.ogg and /dev/null differ
diff --git a/Game/sound/counter.ogg b/Game/sound/counter.ogg
deleted file mode 100644
index 0eb3b4d..0000000
Binary files a/Game/sound/counter.ogg and /dev/null differ
diff --git a/Game/sound/counterFinal.ogg b/Game/sound/counterFinal.ogg
deleted file mode 100644
index f76ba7c..0000000
Binary files a/Game/sound/counterFinal.ogg and /dev/null differ
diff --git a/Game/sound/pop.ogg b/Game/sound/pop.ogg
deleted file mode 100644
index 9e9fc51..0000000
Binary files a/Game/sound/pop.ogg and /dev/null differ
diff --git a/Game/sound/typing.ogg b/Game/sound/typing.ogg
deleted file mode 100644
index 83d95c9..0000000
Binary files a/Game/sound/typing.ogg and /dev/null differ
diff --git a/source/code/sago/LICENSE b/source/code/sago/LICENSE
new file mode 100644
index 0000000..fe6d772
--- /dev/null
+++ b/source/code/sago/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Poul Sander
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/source/code/sago/Makefile.sago b/source/code/sago/Makefile.sago
new file mode 100644
index 0000000..5e4f0d4
--- /dev/null
+++ b/source/code/sago/Makefile.sago
@@ -0,0 +1,4 @@
+
+
+SAGO_BASE_LIBS+= -lphysfs -ljsoncpp
+SAGO_O_FILES+= sago/SagoDataHolder.o sago/SagoSprite.o sago/SagoSpriteHolder.o sago/SagoMisc.o
\ No newline at end of file
diff --git a/source/code/sago/SagoDataHolder.cpp b/source/code/sago/SagoDataHolder.cpp
new file mode 100644
index 0000000..62f7254
--- /dev/null
+++ b/source/code/sago/SagoDataHolder.cpp
@@ -0,0 +1,238 @@
+/*
+ Copyright (c) 2015 Poul Sander
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation files
+ (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge,
+ publish, distribute, sublicense, and/or sell copies of the Software,
+ and to permit persons to whom the Software is furnished to do so,
+ subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+*/
+
+#include "SagoDataHolder.hpp"
+#include <iostream>
+#include <mutex>
+#include <map>
+#include <vector>
+#include <physfs.h>
+#include <memory>
+#include <SDL/SDL_mixer.h>
+
+namespace sago {
+
+struct SagoDataHolder::SagoDataHolderData {
+ std::map<std::string, SDL_Texture*> textures;
+ std::map<std::string, std::map<int, TTF_Font*> > fonts; //font, ptsize
+ std::map<std::string, Mix_Music*> music;
+ std::map<std::string, Mix_Chunk*> sounds;
+ std::vector<SDL_RWops*> rwOpsToFree;
+ std::vector<std::unique_ptr<char[]>> dataToFree;
+ SDL_Renderer* renderer = nullptr;
+};
+
+namespace {
+std::mutex mutex_texture_load;
+} //anonymous namespace
+
+SagoDataHolder::SagoDataHolder(SDL_Renderer* renderer) {
+ data = new SagoDataHolderData();
+ data->renderer = renderer;
+}
+
+SagoDataHolder::~SagoDataHolder() {
+ for (auto& item : data->textures) {
+ SDL_DestroyTexture(item.second);
+ }
+ for (auto& item : data->music) {
+ Mix_FreeMusic(item.second);
+ }
+ for (auto& item : data->sounds) {
+ Mix_FreeChunk(item.second);
+ }
+ for (auto& item : data->fonts) {
+ for (auto& item2 : item.second) {
+ TTF_CloseFont(item2.second);
+ }
+ }
+ for (auto& item : data->rwOpsToFree) {
+ SDL_FreeRW(item);
+ }
+ delete data;
+}
+
+SDL_Texture* SagoDataHolder::getTexturePtr(const std::string& textureName) const {
+ std::lock_guard<std::mutex> guard(mutex_texture_load);
+ SDL_Texture* ret = data->textures[textureName];
+ if (ret) {
+ return ret;
+ }
+ std::string path = "textures/"+textureName+".png";
+ if (!PHYSFS_exists(path.c_str())) {
+ std::cerr << "getTextureFailed - Texture does not exists: " << path << std::endl;
+ return ret;
+ }
+ PHYSFS_file* myfile = PHYSFS_openRead(path.c_str());
+ unsigned int m_size = PHYSFS_fileLength(myfile);
+ //char* m_data = new char[m_size];
+ std::unique_ptr<char[]> m_data(new char[m_size]);
+ int length_read = PHYSFS_read (myfile, m_data.get(), 1, m_size);
+ if (length_read != (int)m_size) {
+ PHYSFS_close(myfile);
+ std::cerr << "Error: Curropt data file: " << path << std::endl;
+ return ret;
+ }
+ PHYSFS_close(myfile);
+ SDL_RWops* rw = SDL_RWFromMem (m_data.get(), m_size);
+ //The above might fail an return null.
+ if (!rw) {
+ PHYSFS_close(myfile);
+ std::cerr << "Error. Curropt data file!" << std::endl;
+ return NULL;
+ }
+ SDL_Surface* surface = IMG_Load_RW(rw,true);
+
+ ret = SDL_CreateTextureFromSurface(data->renderer, surface);
+
+ if (!ret) {
+ std::cerr << "getTextureFailed to load " << path << std::endl;
+ }
+ SDL_FreeSurface(surface);
+ std::cerr << path << " loaded" << std::endl;
+ data->textures[textureName] = ret;
+ return ret;
+}
+
+TTF_Font* SagoDataHolder::getFontPtr(const std::string& fontName, int ptsize) const {
+ std::lock_guard<std::mutex> guard(mutex_texture_load);
+ TTF_Font* ret = data->fonts[fontName][ptsize];
+ if (ret) {
+ return ret;
+ }
+ std::string path = "fonts/"+fontName+".ttf";
+ if (!PHYSFS_exists(path.c_str())) {
+ std::cerr << "getFontPtr - Font does not exists: " << path << std::endl;
+ return ret;
+ }
+ PHYSFS_file* myfile = PHYSFS_openRead(path.c_str());
+ unsigned int m_size = PHYSFS_fileLength(myfile);
+ std::unique_ptr<char[]> m_data(new char[m_size]);
+ int length_read = PHYSFS_read (myfile, m_data.get(), 1, m_size);
+ if (length_read != (int)m_size) {
+ PHYSFS_close(myfile);
+ std::cerr << "Error: Curropt data file: " << path << std::endl;
+ return ret;
+ }
+ PHYSFS_close(myfile);
+
+ SDL_RWops* rw = SDL_RWFromMem (m_data.get(), m_size);
+
+ //The above might fail an return null.
+ if (!rw) {
+ PHYSFS_close(myfile);
+ std::cerr << "Error: Curropt data file!" << std::endl;
+ return ret;
+ }
+
+ ret = TTF_OpenFontRW(rw, SDL_FALSE, ptsize);
+ //delete [] m_data;
+ if (!ret) {
+ std::cerr << "Error openening font: " << fontName << " because: " << TTF_GetError() << std::endl;
+ }
+ data->fonts[fontName][ptsize] = ret;
+ data->dataToFree.push_back(std::move(m_data));
+ data->rwOpsToFree.push_back(rw);
+ return ret;
+}
+
+Mix_Music* SagoDataHolder::getMusicPtr(const std::string& musicName) const {
+ std::lock_guard<std::mutex> guard(mutex_texture_load);
+ Mix_Music* ret = data->music[musicName];
+ if (ret) {
+ return ret;
+ }
+ std::string path = "music/"+musicName+".ogg";
+ if (!PHYSFS_exists(path.c_str())) {
+ std::cerr << "getMusicPtr - Music file does not exists: " << path << std::endl;
+ return ret;
+ }
+ PHYSFS_file* myfile = PHYSFS_openRead(path.c_str());
+ unsigned int m_size = PHYSFS_fileLength(myfile);
+ std::unique_ptr<char[]> m_data(new char[m_size]);
+ int length_read = PHYSFS_read (myfile, m_data.get(), 1, m_size);
+ if (length_read != (int)m_size) {
+ PHYSFS_close(myfile);
+ std::cerr << "Error: Curropt data file: " << path << std::endl;
+ return ret;
+ }
+ PHYSFS_close(myfile);
+ SDL_RWops* rw = SDL_RWFromMem (m_data.get(), m_size);
+
+ //The above might fail an return null.
+ if (!rw) {
+ PHYSFS_close(myfile);
+ std::cerr << "Error. Curropt data file!" << std::endl;
+ return NULL;
+ }
+
+ ret = Mix_LoadMUS_RW(rw, SDL_TRUE); //SDL_TRUE causes rw to be freed
+
+ if (!ret) {
+ std::cerr << "getMusicPtr to load " << path << " because: " << Mix_GetError() << std::endl;
+ }
+ std::cout << path << " loaded" << std::endl;
+ data->music[musicName] = ret;
+ return ret;
+}
+
+
+Mix_Chunk* SagoDataHolder::getSoundPtr(const std::string& soundName) const {
+ std::lock_guard<std::mutex> guard(mutex_texture_load);
+ Mix_Chunk* ret = data->sounds[soundName];
+ if (ret) {
+ return ret;
+ }
+ std::string path = "sounds/"+soundName+".ogg";
+ if (!PHYSFS_exists(path.c_str())) {
+ std::cerr << "getSoundPtr - Sound file does not exists: " << path << std::endl;
+ return ret;
+ }
+ PHYSFS_file* myfile = PHYSFS_openRead(path.c_str());
+ unsigned int m_size = PHYSFS_fileLength(myfile);
+ std::unique_ptr<char[]> m_data(new char[m_size]);
+ int length_read = PHYSFS_read (myfile, m_data.get(), 1, m_size);
+ if (length_read != (int)m_size) {
+ PHYSFS_close(myfile);
+ std::cerr << "Error: Curropt data file: " << path << std::endl;
+ return ret;
+ }
+ PHYSFS_close(myfile);
+ SDL_RWops* rw = SDL_RWFromMem (m_data.get(), m_size);
+
+ //The above might fail an return null.
+ if (!rw) {
+ PHYSFS_close(myfile);
+ std::cerr << "Error. Curropt data file!" << std::endl;
+ return NULL;
+ }
+
+ ret = Mix_LoadWAV_RW(rw, SDL_TRUE);
+
+ std::cout << path << " loaded" << std::endl;
+ data->sounds[soundName] = ret;
+ return ret;
+}
+
+} //name space sago
diff --git a/source/code/sago/SagoDataHolder.hpp b/source/code/sago/SagoDataHolder.hpp
new file mode 100644
index 0000000..10fb36f
--- /dev/null
+++ b/source/code/sago/SagoDataHolder.hpp
@@ -0,0 +1,60 @@
+/*
+ Copyright (c) 2015 Poul Sander
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation files
+ (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge,
+ publish, distribute, sublicense, and/or sell copies of the Software,
+ and to permit persons to whom the Software is furnished to do so,
+ subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+*/
+
+#include "SDL.h"
+#include <SDL_mixer.h> //Used for sound & music
+#include <SDL_image.h> //To load PNG images!
+#include <SDL_ttf.h>
+#include <physfs.h> //Abstract file system. To use containers
+#include <string>
+
+#ifndef TEXTUREHOLDER_HPP
+#define TEXTUREHOLDER_HPP
+
+namespace sago {
+
+class SagoDataHolder {
+public:
+ SagoDataHolder(SDL_Renderer* renderer);
+ /**
+ * Return a pointer to the given texture. The pointer is valid for the lifetime of SagoDataHolder object it was taken from.
+ * @param textureName Name of the texture
+ * @return Pointer to the loaded texture
+ */
+ SDL_Texture* getTexturePtr(const std::string &textureName) const;
+ TTF_Font* getFontPtr(const std::string &fontName, int ptsize) const;
+ Mix_Music* getMusicPtr(const std::string &musicName) const;
+ Mix_Chunk* getSoundPtr(const std::string &soundName) const;
+ virtual ~SagoDataHolder();
+private:
+ SagoDataHolder(const SagoDataHolder& base) = delete;
+ SagoDataHolder& operator=(const SagoDataHolder& base) = delete;
+ struct SagoDataHolderData;
+ mutable SagoDataHolderData *data;
+};
+
+} //namespace sago
+
+#endif /* TEXTUREHOLDER_HPP */
+
diff --git a/source/code/sago/SagoMisc.cpp b/source/code/sago/SagoMisc.cpp
new file mode 100644
index 0000000..cb7ae43
--- /dev/null
+++ b/source/code/sago/SagoMisc.cpp
@@ -0,0 +1,85 @@
+/*
+ Copyright (c) 2015 Poul Sander
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation files
+ (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge,
+ publish, distribute, sublicense, and/or sell copies of the Software,
+ and to permit persons to whom the Software is furnished to do so,
+ subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+*/
+
+#include "SagoMisc.hpp"
+#include <physfs.h>
+#include <iostream>
+#include <iconv.h>
+#include <string.h>
+#include <memory>
+
+using namespace std;
+
+namespace sago {
+
+
+std::vector<std::string> GetFileList(const char* dir) {
+ std::vector<std::string> ret;
+ char** rc = PHYSFS_enumerateFiles(dir);
+ for (char** i = rc; *i != NULL; i++) {
+ ret.push_back(*i);
+ }
+ PHYSFS_freeList(rc);
+ return ret;
+}
+
+bool FileExists(const char* filename) {
+ return PHYSFS_exists(filename);
+}
+
+std::string GetFileContent(const char* filename) {
+ std::string ret;
+ if (!PHYSFS_exists(filename)) {
+ std::cerr << "GetFileContent - File does not exists: " << filename << std::endl;
+ return ret;
+ }
+ PHYSFS_file* myfile = PHYSFS_openRead(filename);
+ unsigned int m_size = PHYSFS_fileLength(myfile);
+ char* m_data = new char[m_size+1];
+ int length_read = PHYSFS_read (myfile, m_data, 1, m_size);
+ if (length_read != (int)m_size) {
+ delete [] m_data;
+ m_data = nullptr;
+ PHYSFS_close(myfile);
+ std::cerr << "Error: Curropt data file: " << filename << std::endl;
+ return ret;
+ }
+ PHYSFS_close(myfile);
+ m_data[m_size] = 0; //ensure that we are 0 terminated
+ ret = m_data;
+ delete [] m_data;
+ return ret;
+}
+
+void WriteFileContent(const char* filename, const std::string& content) {
+ PHYSFS_file* myfile = PHYSFS_openWrite(filename);
+ if (!myfile) {
+ cerr << "Failed to open file for writing, " << PHYSFS_getLastError() << endl;
+ return;
+ }
+ PHYSFS_write(myfile, content.c_str(), 1, content.length()+1);
+ PHYSFS_close(myfile);
+}
+
+}
diff --git a/source/code/sago/SagoMisc.hpp b/source/code/sago/SagoMisc.hpp
new file mode 100644
index 0000000..3a8bf62
--- /dev/null
+++ b/source/code/sago/SagoMisc.hpp
@@ -0,0 +1,56 @@
+/*
+ Copyright (c) 2015 Poul Sander
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation files
+ (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge,
+ publish, distribute, sublicense, and/or sell copies of the Software,
+ and to permit persons to whom the Software is furnished to do so,
+ subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+*/
+
+#ifndef SAGOMISC_HPP
+#define SAGOMISC_HPP
+
+#include <vector>
+#include <string>
+
+namespace sago {
+
+ /**
+ * Returns a vector with all filenames in a given directory.
+ * PHYSFS must be setup before hand. The directory is relative to the PHYSFS base
+ * @param dir The directory to list
+ * @return A vector with the filenames in the given directory. If empty the directory was empty or did not exist
+ */
+ std::vector<std::string> GetFileList(const char* dir);
+
+ /**
+ * Reads an entire file into memory.
+ * PHYSFS must be setup before hand
+ * @param filename The file to read
+ * @return The content of the file. If empty either the file was empty, did not exist or could not be opened
+ */
+ std::string GetFileContent(const char* filename);
+
+ bool FileExists(const char* filename);
+
+ void WriteFileContent(const char* filename, const std::string& content);
+
+} //namespace sago
+
+#endif /* SAGOMISC_HPP */
+
diff --git a/source/code/sago/SagoSprite.cpp b/source/code/sago/SagoSprite.cpp
new file mode 100644
index 0000000..9b7186f
--- /dev/null
+++ b/source/code/sago/SagoSprite.cpp
@@ -0,0 +1,77 @@
+/*
+ Copyright (c) 2015 Poul Sander
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation files
+ (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge,
+ publish, distribute, sublicense, and/or sell copies of the Software,
+ and to permit persons to whom the Software is furnished to do so,
+ subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+*/
+
+#include "SagoSprite.hpp"
+
+namespace sago {
+
+struct SagoSprite::SagoSpriteData {
+ SDL_Texture* tex;
+ SDL_Rect imgCord;
+ SDL_Rect origin = {};
+ int aniFrames = 0;
+ int aniFrameTime = 0;
+};
+
+SagoSprite::SagoSprite(const SagoDataHolder& texHolder, const std::string& texture,const SDL_Rect& initImage,const int animationFrames, const int animationFrameLength) {
+ data = new SagoSpriteData();
+ data->tex = texHolder.getTexturePtr(texture);
+ data->imgCord = initImage;
+ data->aniFrames = animationFrames;
+ data->aniFrameTime = animationFrameLength;
+}
+
+
+
+SagoSprite::~SagoSprite() {
+ delete data;
+}
+
+void SagoSprite::Draw(SDL_Renderer* target, Sint32 frameTime, float x, float y) const {
+ SDL_Rect rect = data->imgCord;
+ rect.x+=rect.w*((frameTime/data->aniFrameTime)%data->aniFrames);
+ SDL_Rect pos = rect;
+ pos.x = x;
+ pos.y = y;
+ SDL_RenderCopy(target, data->tex, &rect, &pos);
+}
+
+void SagoSprite::Draw(SDL_Renderer* target, Sint32 frameTime, float x, float y, const SDL_Rect& part) const {
+ SDL_Rect rect = data->imgCord;
+ rect.x+=rect.w*((frameTime/data->aniFrameTime)%data->aniFrames);
+ rect.x += part.x;
+ rect.y += part.y;
+ rect.w = part.w;
+ rect.h = part.h;
+ SDL_Rect pos = rect;
+ pos.x = x;
+ pos.y = y;
+ SDL_RenderCopy(target, data->tex, &rect, &pos);
+}
+
+void SagoSprite::SetOrigin(const SDL_Rect& newOrigin) {
+ data->origin = newOrigin;
+}
+
+} //namespace sago
\ No newline at end of file
diff --git a/source/code/sago/SagoSprite.hpp b/source/code/sago/SagoSprite.hpp
new file mode 100644
index 0000000..b6f31d5
--- /dev/null
+++ b/source/code/sago/SagoSprite.hpp
@@ -0,0 +1,68 @@
+/*
+ Copyright (c) 2015 Poul Sander
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation files
+ (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge,
+ publish, distribute, sublicense, and/or sell copies of the Software,
+ and to permit persons to whom the Software is furnished to do so,
+ subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+*/
+
+#ifndef SAGOSPRITE_HPP
+#define SAGOSPRITE_HPP
+
+#include "SagoDataHolder.hpp"
+
+namespace sago {
+
+class SagoSprite {
+public:
+ SagoSprite(const SagoDataHolder &texHolder, const std::string &texture,const SDL_Rect& initImage,const int animationFrames, const int animationFrameLength);
+ /**
+ * Draws the sprite to a given render window
+ * @param target The render window to draw on
+ * @param frameTime The time in milliseonds since gamestart. Used to determen the place in the animation
+ * @param x Place to draw the sprite
+ * @param y Place to draw the sprite
+ */
+ void Draw(SDL_Renderer* target, Sint32 frameTime, float x, float y) const;
+ /**
+ * Draws part of the sprite to a given render window
+ * @param target The render window to draw on
+ * @param frameTime The time in milliseonds since gamestart. Used to determen the place in the animation
+ * @param x Place to draw the sprite
+ * @param y Place to draw the sprite
+ * @param part the part of the sprite that should be drawn.
+ */
+ void Draw(SDL_Renderer* target, Sint32 frameTime, float x, float y, const SDL_Rect& part) const;
+ /**
+ * Set a different origin. Normally it is the top left cornor. But in some cases you might want to center the origin or tranform it for other reasons
+ * @param newOrigin the coordinates that should be the new origin. Call with {0,0} to reset to default
+ */
+ void SetOrigin(const SDL_Rect& newOrigin);
+ virtual ~SagoSprite();
+private:
+ SagoSprite(const SagoSprite& base) = delete;
+ SagoSprite& operator=(const SagoSprite& base) = delete;
+ struct SagoSpriteData;
+ SagoSpriteData *data;
+};
+
+}
+
+#endif /* SAGOSPRITE_HPP */
+
diff --git a/source/code/sago/SagoSpriteHolder.cpp b/source/code/sago/SagoSpriteHolder.cpp
new file mode 100644
index 0000000..0c805ee
--- /dev/null
+++ b/source/code/sago/SagoSpriteHolder.cpp
@@ -0,0 +1,126 @@
+/*
+ Copyright (c) 2015 Poul Sander
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation files
+ (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge,
+ publish, distribute, sublicense, and/or sell copies of the Software,
+ and to permit persons to whom the Software is furnished to do so,
+ subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+*/
+
+#include "SagoSpriteHolder.hpp"
+#include "SagoMisc.hpp"
+#include <memory>
+#include <unordered_map>
+#include <jsoncpp/json/json.h>
+#include <iostream>
+#include <string.h>
+#include <boost/algorithm/string/predicate.hpp>
+
+
+//I truely hate the C way of checking for equal. Usually read: "if not X compares to Y then they must be equal"
+#define strequal(X,Y) strcmp(X,Y)==0
+
+using namespace std;
+
+namespace sago {
+
+struct SagoSpriteHolder::SagoSpriteHolderData {
+ const sago::SagoDataHolder* tex;
+ std::unordered_map<std::string,std::shared_ptr<sago::SagoSprite>> sprites;
+ const sago::SagoSprite* defaultSprite;
+};
+
+SagoSpriteHolder::SagoSpriteHolder(const SagoDataHolder& texHolder) {
+ data = new SagoSpriteHolderData();
+ try {
+ data->tex = &texHolder;
+ ReadSprites();
+ data->defaultSprite = new sago::SagoSprite(texHolder,"fallback", {0,0,64,64},1,100);
+ }
+ catch (...) {
+ delete data;
+ }
+}
+
+SagoSpriteHolder::~SagoSpriteHolder() {
+ delete data;
+}
+
+void SagoSpriteHolder::ReadSpriteFile(const std::string& filename) {
+ string fullfile = "sprites/"+filename;
+ string content = sago::GetFileContent(fullfile.c_str());
+ Json::Value root; // will contains the root value after parsing
+ Json::Reader reader;
+ bool parsingSuccessful = reader.parse( content, root );
+ if ( !parsingSuccessful ) {
+ cerr << "Failed to parse: " << fullfile << endl
+ << reader.getFormattedErrorMessages() << endl;
+ return;
+ }
+ for (Json::Value::iterator it = root.begin(); it != root.end() ; ++it) {
+ string spriteName = it.key().asString();
+ Json::Value value = (*it);
+ string textureName = value.get("texture","fallback").asString();
+ int topx = value.get("topx",0).asInt();
+ int topy = value.get("topy",0).asInt();
+ int height = value.get("height",0).asInt();
+ int width = value.get("width",0).asInt();
+ int number_of_frames = value.get("number_of_frames",1).asInt();
+ int frame_time = value.get("frame_time",1).asInt();
+ int originx = value.get("originx",0).asInt();
+ int originy = value.get("originy",0).asInt();
+ if (number_of_frames < 1) {
+ number_of_frames = 1;
+ }
+ if (frame_time < 1) {
+ frame_time = 1;
+ }
+ std::shared_ptr<sago::SagoSprite> ptr(new SagoSprite(*(data->tex),textureName, {topx,topy,width,height},number_of_frames,frame_time));
+ ptr->SetOrigin({originx,originy, 0, 0});
+ this->data->sprites[std::string(spriteName)] = ptr;
+ }
+}
+
+void SagoSpriteHolder::ReadSprites() {
+ std::vector<std::string> spritefiles = GetFileList("sprites");
+ for (std::string& item : spritefiles ) {
+ if (boost::algorithm::ends_with(item,".sprite")) {
+ cout << "Found " << item << endl;
+ ReadSpriteFile(item);
+ }
+ else {
+ cout << "Ignoreing " << item << endl;
+ }
+ }
+}
+
+const sago::SagoSprite& SagoSpriteHolder::GetSprite(const std::string& spritename) const {
+ std::unordered_map<std::string,std::shared_ptr<sago::SagoSprite>>::const_iterator got = data->sprites.find (spritename);
+ if ( got == data->sprites.end() ) {
+ return *data->defaultSprite;
+ }
+ else {
+ return *(got->second);
+ }
+}
+
+const SagoDataHolder& SagoSpriteHolder::GetDataHolder() const {
+ return *data->tex;
+}
+
+}
\ No newline at end of file
diff --git a/source/code/sago/SagoSpriteHolder.hpp b/source/code/sago/SagoSpriteHolder.hpp
new file mode 100644
index 0000000..b3c32f9
--- /dev/null
+++ b/source/code/sago/SagoSpriteHolder.hpp
@@ -0,0 +1,51 @@
+/*
+ Copyright (c) 2015 Poul Sander
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation files
+ (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge,
+ publish, distribute, sublicense, and/or sell copies of the Software,
+ and to permit persons to whom the Software is furnished to do so,
+ subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+*/
+
+#ifndef SAGOSPRITEHOLDER_HPP
+#define SAGOSPRITEHOLDER_HPP
+
+#include "SagoDataHolder.hpp"
+#include "SagoSprite.hpp"
+
+namespace sago {
+
+class SagoSpriteHolder {
+public:
+ SagoSpriteHolder(const SagoDataHolder &texHolder);
+ virtual ~SagoSpriteHolder();
+ void ReadSprites();
+ const sago::SagoSprite& GetSprite(const std::string &spritename) const;
+ const SagoDataHolder& GetDataHolder() const;
+private:
+ SagoSpriteHolder(const SagoSpriteHolder& base) = delete;
+ SagoSpriteHolder& operator=(const SagoSpriteHolder& base) = delete;
+ void ReadSpriteFile(const std::string &filename);
+ struct SagoSpriteHolderData;
+ SagoSpriteHolderData *data;
+};
+
+}
+
+#endif /* SAGOSPRITEHOLDER_HPP */
+