diff --git a/Data/Media/Images/Characters/template.png b/Data/Media/Images/Characters/template.png
new file mode 100644
index 0000000..6628413
Binary files /dev/null and b/Data/Media/Images/Characters/template.png differ
diff --git a/Data/Media/Maps/MainMenu b/Data/Media/Maps/MainMenu
new file mode 100644
index 0000000..d05f5bc
--- /dev/null
+++ b/Data/Media/Maps/MainMenu
@@ -0,0 +1,13 @@
+grass 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0
+grass 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0
+grass 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 0 tree 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0
+grass 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0
+grass 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0
+grass 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0
+grass 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0
+water 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 water 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 water 0 n 0 000 n 0 0 water 1 n 0 000 n 0 0 water 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 water 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 water 1 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0
+water 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 water 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 water 0 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 water 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 water 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 water 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0
+water 1 n 0 000 n 0 0 water 1 n 0 000 n 0 0 water 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 water 0 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 water 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 water 0 n 0 000 n 0 0 water 0 n 0 000 n 0 0 water 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0
+grass 1 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0
+grass 1 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 1 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0
+grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0 grass 0 n 0 000 n 0 0
diff --git a/Data/Media/Maps/TestLevel b/Data/Media/Maps/TestLevel
new file mode 100644
index 0000000..9cf587a
--- /dev/null
+++ b/Data/Media/Maps/TestLevel
@@ -0,0 +1,17 @@
+grass 1 n 0 100 n 0 0 rock 0 n 0 100 mainmenu 200 200 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 grass 1 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0
+grass 1 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 grass 1 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0
+grass 1 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 grass 1 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0
+grass 1 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 grass 1 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0
+grass 1 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 mud 0 n 0 100 n 0 0 grass 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 grass 1 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0
+grass 1 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 gravel 0 n 0 100 n 0 0 ice 0 tree 1 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 grass 1 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0
+grass 1 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 grass 1 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0
+grass 1 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 grass 1 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0
+grass 1 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 grass 1 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0
+grass 1 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 grass 1 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0
+grass 1 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 grass 1 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0
+grass 1 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 grass 1 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0
+grass 1 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 grass 1 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0
+grass 1 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 grass 1 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0
+grass 1 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 grass 1 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0
+grass 1 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 grass 1 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0
+grass 1 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 grass 1 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0 rock 0 n 0 100 n 0 0
diff --git a/README b/README
index 7ec0afa..58367d7 100644
--- a/README
+++ b/README
@@ -11,6 +11,51 @@ for a portfolio piece. I will place this under the GPL licence.
##################################################
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+TODO:
+
+Take the camera into account so we do not draw things off screen.
+
+*Menu:
+~~~~~
+- New Game
+- SaveGame loading
+ - New screen or make buttons appear on the menu
+- SaveGame deleting
+- Game Settings
+ - Keybindings
+ - Fullscreen
+
+*Fix NPC animation
+
+*Map Editor:
+~~~~~~~~~~~~
+
+- Change the array of tiles into a list of tiles.
+- Get a tile selection marker and display the current tile info.
+
+*Proper collision testing.
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+- MapTile objects store a list of character* 's
+ - The character class will add and remove themselves from the list in the MapTile.
+ - When the Character class wants to check for collisions it hands a pointer to
+ itself to the MapTile object, the MapTile will then return true if any
+ Character in it's list collides with the Character* it just recieved.
+ - Create the appropriate methods in the MapTile class
+ - bool CheckCollision(Character *charptr);
+ - void AddCharacter(Character *charptr);
+ - void RemoveCharacter(Character *charptr);
+
+*A way for entities to store information (Like items).
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+- Sort out how we will read in the information
+ - A list of present objects that can be referenced with a single word in the map file.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
Copyright (C) 2011 Allanis
allanis@saracraft.net
diff --git a/Save/1 b/Save/1
new file mode 100644
index 0000000..c3f407c
--- /dev/null
+++ b/Save/1
@@ -0,0 +1 @@
+55
diff --git a/Save/2 b/Save/2
new file mode 100644
index 0000000..e69de29
diff --git a/Unuk-QT/Makefile b/Unuk-QT/Makefile
index f6adef2..09a672f 100644
--- a/Unuk-QT/Makefile
+++ b/Unuk-QT/Makefile
@@ -1,6 +1,6 @@
#############################################################################
# Makefile for building: Unuk-QT
-# Generated by qmake (2.01a) (Qt 4.7.4) on: Sun Nov 20 17:49:45 2011
+# Generated by qmake (2.01a) (Qt 4.7.3) on: Mon Nov 21 13:46:00 2011
# Project: Unuk-QT.pro
# Template: app
# Command: /usr/bin/qmake-qt4 -spec /usr/share/qt4/mkspecs/linux-g++ CONFIG+=debug -o Makefile Unuk-QT.pro
@@ -10,13 +10,13 @@
CC = gcc
CXX = g++
-DEFINES = -DQT_WEBKIT -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED
+DEFINES = -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED
CFLAGS = -pipe -g -Wall -W -D_REENTRANT $(DEFINES)
CXXFLAGS = -pipe -g -Wall -W -D_REENTRANT $(DEFINES)
INCPATH = -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I.
LINK = g++
LFLAGS =
-LIBS = $(SUBLIBS) -L/usr/lib/i386-linux-gnu -lGL -lSDL -lSDL_ttf -lSDL_image -lGLU -lQtGui -lQtCore -lpthread
+LIBS = $(SUBLIBS) -L/usr/lib -lGL -lSDL -lSDL_ttf -lSDL_image -lGLU -lQtGui -lQtCore -lpthread
AR = ar cqs
RANLIB =
QMAKE = /usr/bin/qmake-qt4
@@ -63,7 +63,9 @@ SOURCES = ../src/libUnuk/Debug.cpp \
../src/libUnuk/IngameMenu.cpp \
../src/libUnuk/Collision.cpp \
../src/libUnuk/Character.cpp \
- ../src/libUnuk/NPC.cpp
+ ../src/libUnuk/NPC.cpp \
+ ../src/Unuk/Player.cpp \
+ ../src/Unuk/Game.cpp
OBJECTS = Debug.o \
main.o \
Input.o \
@@ -84,12 +86,13 @@ OBJECTS = Debug.o \
IngameMenu.o \
Collision.o \
Character.o \
- NPC.o
+ NPC.o \
+ Player.o \
+ Game.o
DIST = /usr/share/qt4/mkspecs/common/g++.conf \
/usr/share/qt4/mkspecs/common/unix.conf \
/usr/share/qt4/mkspecs/common/linux.conf \
/usr/share/qt4/mkspecs/qconfig.pri \
- /usr/share/qt4/mkspecs/modules/qt_webkit_version.pri \
/usr/share/qt4/mkspecs/features/qt_functions.prf \
/usr/share/qt4/mkspecs/features/qt_config.prf \
/usr/share/qt4/mkspecs/features/exclusive_builds.prf \
@@ -141,7 +144,6 @@ Makefile: Unuk-QT.pro /usr/share/qt4/mkspecs/linux-g++/qmake.conf /usr/share/qt
/usr/share/qt4/mkspecs/common/unix.conf \
/usr/share/qt4/mkspecs/common/linux.conf \
/usr/share/qt4/mkspecs/qconfig.pri \
- /usr/share/qt4/mkspecs/modules/qt_webkit_version.pri \
/usr/share/qt4/mkspecs/features/qt_functions.prf \
/usr/share/qt4/mkspecs/features/qt_config.prf \
/usr/share/qt4/mkspecs/features/exclusive_builds.prf \
@@ -157,14 +159,13 @@ Makefile: Unuk-QT.pro /usr/share/qt4/mkspecs/linux-g++/qmake.conf /usr/share/qt
/usr/share/qt4/mkspecs/features/yacc.prf \
/usr/share/qt4/mkspecs/features/lex.prf \
/usr/share/qt4/mkspecs/features/include_source_dir.prf \
- /usr/lib/i386-linux-gnu/libQtGui.prl \
- /usr/lib/i386-linux-gnu/libQtCore.prl
+ /usr/lib/libQtGui.prl \
+ /usr/lib/libQtCore.prl
$(QMAKE) -spec /usr/share/qt4/mkspecs/linux-g++ CONFIG+=debug -o Makefile Unuk-QT.pro
/usr/share/qt4/mkspecs/common/g++.conf:
/usr/share/qt4/mkspecs/common/unix.conf:
/usr/share/qt4/mkspecs/common/linux.conf:
/usr/share/qt4/mkspecs/qconfig.pri:
-/usr/share/qt4/mkspecs/modules/qt_webkit_version.pri:
/usr/share/qt4/mkspecs/features/qt_functions.prf:
/usr/share/qt4/mkspecs/features/qt_config.prf:
/usr/share/qt4/mkspecs/features/exclusive_builds.prf:
@@ -180,14 +181,14 @@ Makefile: Unuk-QT.pro /usr/share/qt4/mkspecs/linux-g++/qmake.conf /usr/share/qt
/usr/share/qt4/mkspecs/features/yacc.prf:
/usr/share/qt4/mkspecs/features/lex.prf:
/usr/share/qt4/mkspecs/features/include_source_dir.prf:
-/usr/lib/i386-linux-gnu/libQtGui.prl:
-/usr/lib/i386-linux-gnu/libQtCore.prl:
+/usr/lib/libQtGui.prl:
+/usr/lib/libQtCore.prl:
qmake: FORCE
@$(QMAKE) -spec /usr/share/qt4/mkspecs/linux-g++ CONFIG+=debug -o Makefile Unuk-QT.pro
dist:
@$(CHK_DIR_EXISTS) .tmp/Unuk-QT1.0.0 || $(MKDIR) .tmp/Unuk-QT1.0.0
- $(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/Unuk-QT1.0.0/ && $(COPY_FILE) --parents ../src/libUnuk/Debug.h ../src/Libs/wglext.h ../src/Libs/glxext.h ../src/libUnuk/Input.h ../src/libUnuk/Rect.h ../src/libUnuk/Timer.h ../src/libUnuk/Font.h ../Constants.h ../src/Unuk/Constants.h ../src/libUnuk/ApplySurface.h ../src/Unuk/Globals.h ../src/libUnuk/ImageLoader.h ../src/libUnuk/TextureManager.h ../src/libUnuk/Texture.h ../src/libUnuk/Text.h ../src/libUnuk/MapTile.h ../src/libUnuk/Map.h ../src/libUnuk/Button.h ../src/libUnuk/ButtonToggle.h ../src/libUnuk/Menu.h ../src/libUnuk/MainMenu.h ../src/libUnuk/ParticleEmitter.h ../src/libUnuk/IngameMenu.h ../src/libUnuk/Collision.h ../src/libUnuk/Character.h ../src/libUnuk/NPC.h .tmp/Unuk-QT1.0.0/ && $(COPY_FILE) --parents ../src/libUnuk/Debug.cpp ../src/Unuk/main.cpp ../src/libUnuk/Input.cpp ../src/libUnuk/Timer.cpp ../src/libUnuk/Font.cpp ../src/libUnuk/ApplySurface.cpp ../src/Unuk/Globals.cpp ../src/libUnuk/Rect.cpp ../src/libUnuk/ImageLoader.cpp ../src/libUnuk/TextureManager.cpp ../src/libUnuk/Texture.cpp ../src/libUnuk/Text.cpp ../src/libUnuk/Map.cpp ../src/libUnuk/Button.cpp ../src/libUnuk/ButtonToggle.cpp ../src/libUnuk/ParticleEmitter.cpp ../src/libUnuk/MainMenu.cpp ../src/libUnuk/IngameMenu.cpp ../src/libUnuk/Collision.cpp ../src/libUnuk/Character.cpp ../src/libUnuk/NPC.cpp .tmp/Unuk-QT1.0.0/ && (cd `dirname .tmp/Unuk-QT1.0.0` && $(TAR) Unuk-QT1.0.0.tar Unuk-QT1.0.0 && $(COMPRESS) Unuk-QT1.0.0.tar) && $(MOVE) `dirname .tmp/Unuk-QT1.0.0`/Unuk-QT1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/Unuk-QT1.0.0
+ $(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/Unuk-QT1.0.0/ && $(COPY_FILE) --parents ../src/libUnuk/Debug.h ../src/Libs/wglext.h ../src/Libs/glxext.h ../src/libUnuk/Input.h ../src/libUnuk/Rect.h ../src/libUnuk/Timer.h ../src/libUnuk/Font.h ../Constants.h ../src/Unuk/Constants.h ../src/libUnuk/ApplySurface.h ../src/Unuk/Globals.h ../src/libUnuk/ImageLoader.h ../src/libUnuk/TextureManager.h ../src/libUnuk/Texture.h ../src/libUnuk/Text.h ../src/libUnuk/MapTile.h ../src/libUnuk/Map.h ../src/libUnuk/Button.h ../src/libUnuk/ButtonToggle.h ../src/libUnuk/Menu.h ../src/libUnuk/MainMenu.h ../src/libUnuk/ParticleEmitter.h ../src/libUnuk/IngameMenu.h ../src/libUnuk/Collision.h ../src/libUnuk/Character.h ../src/libUnuk/NPC.h ../src/Unuk/Player.h ../src/Unuk/Game.h .tmp/Unuk-QT1.0.0/ && $(COPY_FILE) --parents ../src/libUnuk/Debug.cpp ../src/Unuk/main.cpp ../src/libUnuk/Input.cpp ../src/libUnuk/Timer.cpp ../src/libUnuk/Font.cpp ../src/libUnuk/ApplySurface.cpp ../src/Unuk/Globals.cpp ../src/libUnuk/Rect.cpp ../src/libUnuk/ImageLoader.cpp ../src/libUnuk/TextureManager.cpp ../src/libUnuk/Texture.cpp ../src/libUnuk/Text.cpp ../src/libUnuk/Map.cpp ../src/libUnuk/Button.cpp ../src/libUnuk/ButtonToggle.cpp ../src/libUnuk/ParticleEmitter.cpp ../src/libUnuk/MainMenu.cpp ../src/libUnuk/IngameMenu.cpp ../src/libUnuk/Collision.cpp ../src/libUnuk/Character.cpp ../src/libUnuk/NPC.cpp ../src/Unuk/Player.cpp ../src/Unuk/Game.cpp .tmp/Unuk-QT1.0.0/ && (cd `dirname .tmp/Unuk-QT1.0.0` && $(TAR) Unuk-QT1.0.0.tar Unuk-QT1.0.0 && $(COMPRESS) Unuk-QT1.0.0.tar) && $(MOVE) `dirname .tmp/Unuk-QT1.0.0`/Unuk-QT1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/Unuk-QT1.0.0
clean:compiler_clean
@@ -388,6 +389,44 @@ NPC.o: ../src/libUnuk/NPC.cpp ../src/libUnuk/NPC.h \
../src/libUnuk/Timer.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o NPC.o ../src/libUnuk/NPC.cpp
+Player.o: ../src/Unuk/Player.cpp ../src/Unuk/Player.h \
+ ../src/Unuk/Globals.h \
+ ../src/Unuk/Constants.h \
+ ../src/libUnuk/Character.h \
+ ../src/libUnuk/ApplySurface.h \
+ ../src/libUnuk/Debug.h \
+ ../src/libUnuk/ImageLoader.h \
+ ../src/libUnuk/Collision.h \
+ ../src/libUnuk/Map.h \
+ ../src/libUnuk/TextureManager.h \
+ ../src/libUnuk/MapTile.h \
+ ../src/libUnuk/Timer.h
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o Player.o ../src/Unuk/Player.cpp
+
+Game.o: ../src/Unuk/Game.cpp ../src/Unuk/Game.h \
+ ../src/Unuk/Constants.h \
+ ../src/Unuk/Globals.h \
+ ../src/Unuk/Player.h \
+ ../src/libUnuk/Character.h \
+ ../src/libUnuk/ApplySurface.h \
+ ../src/libUnuk/Debug.h \
+ ../src/libUnuk/ImageLoader.h \
+ ../src/libUnuk/Collision.h \
+ ../src/libUnuk/Map.h \
+ ../src/libUnuk/TextureManager.h \
+ ../src/libUnuk/MapTile.h \
+ ../src/libUnuk/Timer.h \
+ ../src/libUnuk/IngameMenu.h \
+ ../src/libUnuk/Menu.h \
+ ../src/libUnuk/Button.h \
+ ../src/libUnuk/Input.h \
+ ../src/libUnuk/Text.h \
+ ../src/libUnuk/Font.h \
+ ../src/libUnuk/Rect.h \
+ ../src/libUnuk/ButtonToggle.h \
+ ../src/libUnuk/NPC.h
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o Game.o ../src/Unuk/Game.cpp
+
####### Install
install: FORCE
diff --git a/Unuk-QT/Unuk-QT.pro b/Unuk-QT/Unuk-QT.pro
index 200f88d..1dc3d26 100644
--- a/Unuk-QT/Unuk-QT.pro
+++ b/Unuk-QT/Unuk-QT.pro
@@ -30,7 +30,9 @@ HEADERS += ../src/libUnuk/Debug.h \
../src/libUnuk/IngameMenu.h \
../src/libUnuk/Collision.h \
../src/libUnuk/Character.h \
- ../src/libUnuk/NPC.h
+ ../src/libUnuk/NPC.h \
+ ../src/Unuk/Player.h \
+ ../src/Unuk/Game.h
SOURCES += ../src/libUnuk/Debug.cpp \
../src/Unuk/main.cpp \
../src/libUnuk/Input.cpp \
@@ -51,4 +53,6 @@ SOURCES += ../src/libUnuk/Debug.cpp \
../src/libUnuk/IngameMenu.cpp \
../src/libUnuk/Collision.cpp \
../src/libUnuk/Character.cpp \
- ../src/libUnuk/NPC.cpp
+ ../src/libUnuk/NPC.cpp \
+ ../src/Unuk/Player.cpp \
+ ../src/Unuk/Game.cpp
diff --git a/Unuk-QT/Unuk-QT.pro.user b/Unuk-QT/Unuk-QT.pro.user
index 4ed7298..76a9ede 100644
--- a/Unuk-QT/Unuk-QT.pro.user
+++ b/Unuk-QT/Unuk-QT.pro.user
@@ -1,207 +1,228 @@
- ProjectExplorer.Project.ActiveTarget
+ RunConfiguration0-BaseEnvironmentBase
+ 2
+
+
+ RunConfiguration0-CommandLineArguments
+
+
+
+ RunConfiguration0-ProFile
+ Unuk-QT.pro
+
+
+ RunConfiguration0-RunConfiguration.name
+ Unuk-QT
+
+
+ RunConfiguration0-UseDyldImageSuffix
+ false
+
+
+ RunConfiguration0-UseTerminal
+ false
+
+
+ RunConfiguration0-UserEnvironmentChanges
+
+
+
+ RunConfiguration0-UserSetName
+ false
+
+
+ RunConfiguration0-UserSetWorkingDirectory
+ false
+
+
+ RunConfiguration0-UserWorkingDirectory
+
+
+
+ RunConfiguration0-type
+ Qt4ProjectManager.Qt4RunConfiguration
+
+
+ activeRunConfiguration
0
- ProjectExplorer.Project.EditorSettings
+ activebuildconfiguration
+ Debug
+
+
+ buildConfiguration-Debug
- true
- false
- ISO-8859-1
- false
- false
- 2
- true
- 1
- true
- false
- true
- 0
- 2
- true
- 1
- true
- true
- true
- false
+ Debug
+ 2
+ 0
+
+ 2
- ProjectExplorer.Project.Target.0
+ buildconfiguration-Debug-buildstep0
-
-
- Qt4ProjectManager.Target.DesktopTarget
- 0
- 0
- 0
-
- ProjectExplorer.ToolChain.Gcc:/usr/bin/g++.x86-linux-generic-elf-32bit.
-
-
- qmake
-
- QtProjectManager.QMakeBuildStep
- false
-
- false
-
-
- Make
-
- Qt4ProjectManager.MakeStep
- false
-
-
-
- 2
- Build
- Build
- ProjectExplorer.BuildSteps.Build
-
-
-
- Make
-
- Qt4ProjectManager.MakeStep
- true
- clean
-
-
- 1
- Clean
- Clean
- ProjectExplorer.BuildSteps.Clean
-
- 2
- false
-
- Debug
- Debug
- Qt4ProjectManager.Qt4BuildConfiguration
- 2
- /home/allanis/Unuk/Unuk-QT-build-desktop
- 2
- ProjectExplorer.ToolChain.Gcc:/usr/bin/g++.x86-linux-generic-elf-32bit.
- false
-
-
- ProjectExplorer.ToolChain.Gcc:/usr/bin/g++.x86-linux-generic-elf-32bit.
-
-
- qmake
-
- QtProjectManager.QMakeBuildStep
- false
-
- false
-
-
- Make
-
- Qt4ProjectManager.MakeStep
- false
-
-
-
- 2
- Build
- Build
- ProjectExplorer.BuildSteps.Build
-
-
-
- Make
-
- Qt4ProjectManager.MakeStep
- true
-
-
-
- 1
- Clean
- Clean
- ProjectExplorer.BuildSteps.Clean
-
- 2
- false
-
- Release
- Release
- Qt4ProjectManager.Qt4BuildConfiguration
- 0
- /home/allanis/Unuk/Unuk-QT-build-desktop
- 2
- ProjectExplorer.ToolChain.Gcc:/usr/bin/g++.x86-linux-generic-elf-32bit.
- false
-
- 2
-
-
- 0
- Deploy
- Deploy
- ProjectExplorer.BuildSteps.Deploy
-
- 1
- No deployment
- No deployment
- ProjectExplorer.DefaultDeployConfiguration
-
- 1
-
-
- true
- 25
-
- true
- valgrind
-
- 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
-
- Qt4 RunConfiguration
- Unuk-QT
- Qt4ProjectManager.Qt4RunConfiguration
- 2
-
- Unuk-QT.pro
- false
- false
-
-
- 3768
- true
- false
-
- 1
+ Debug
+
+ DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-ICZ0NvJNRS,guid=3b12f0647bd9cd4da4459e180000003d
+ DISPLAY=:0
+ HOME=/home/allanis
+ HUSHLOGIN=FALSE
+ LD_LIBRARY_PATH=/usr/lib/qtcreator
+ LOGNAME=allanis
+ LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:
+ MAIL=/var/mail/allanis
+ PATH=/usr/bin:/home/allanis/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/sbin:/sbin
+ PWD=/home/allanis
+ QTDIR=/usr/share/qt4
+ SHELL=/bin/bash
+ SHLVL=1
+ SSH_AGENT_PID=3260
+ SSH_AUTH_SOCK=/tmp/ssh-lozFEJmg3235/agent.3235
+ TERM=linux
+ USER=allanis
+ WINDOWPATH=7
+ XAUTHORITY=/home/allanis/.Xauthority
+ XDG_SESSION_COOKIE=6de6dd7b78e791242262c6460000012e-1323089410.422893-1130065724
+ _=/usr/bin/startx
+
+
+ /home/allanis/Unuk/Unuk-QT/Unuk-QT.pro
+ -spec
+ linux-g++
+ -r
+ CONFIG+=debug
+
+ /usr/bin/qmake-qt4
+ false
+ /home/allanis/Unuk/Unuk-QT
- ProjectExplorer.Project.TargetCount
- 1
+ buildconfiguration-Debug-buildstep1
+
+ Debug
+
+ DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-ICZ0NvJNRS,guid=3b12f0647bd9cd4da4459e180000003d
+ DISPLAY=:0
+ HOME=/home/allanis
+ HUSHLOGIN=FALSE
+ LD_LIBRARY_PATH=/usr/lib/qtcreator
+ LOGNAME=allanis
+ LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:
+ MAIL=/var/mail/allanis
+ PATH=/usr/bin:/home/allanis/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/sbin:/sbin
+ PWD=/home/allanis
+ QTDIR=/usr/share/qt4
+ SHELL=/bin/bash
+ SHLVL=1
+ SSH_AGENT_PID=3260
+ SSH_AUTH_SOCK=/tmp/ssh-lozFEJmg3235/agent.3235
+ TERM=linux
+ USER=allanis
+ WINDOWPATH=7
+ XAUTHORITY=/home/allanis/.Xauthority
+ XDG_SESSION_COOKIE=6de6dd7b78e791242262c6460000012e-1323089410.422893-1130065724
+ _=/usr/bin/startx
+
+ false
+
+ -w
+
+ /usr/bin/make
+ true
+ /home/allanis/Unuk/Unuk-QT
+
- ProjectExplorer.Project.Updater.EnvironmentId
- {359fc55d-3b68-417e-92d9-996c90e029a7}
+ buildconfiguration-Debug-cleanstep0
+
+ Debug
+
+ DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-ICZ0NvJNRS,guid=3b12f0647bd9cd4da4459e180000003d
+ DISPLAY=:0
+ HOME=/home/allanis
+ HUSHLOGIN=FALSE
+ LD_LIBRARY_PATH=/usr/lib/qtcreator
+ LOGNAME=allanis
+ LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:
+ MAIL=/var/mail/allanis
+ PATH=/usr/bin:/home/allanis/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/sbin:/sbin
+ PWD=/home/allanis
+ QTDIR=/usr/share/qt4
+ SHELL=/bin/bash
+ SHLVL=1
+ SSH_AGENT_PID=3260
+ SSH_AUTH_SOCK=/tmp/ssh-lozFEJmg3235/agent.3235
+ TERM=linux
+ USER=allanis
+ WINDOWPATH=7
+ XAUTHORITY=/home/allanis/.Xauthority
+ XDG_SESSION_COOKIE=6de6dd7b78e791242262c6460000012e-1323089410.422893-1130065724
+ _=/usr/bin/startx
+
+ true
+
+ clean
+ -w
+
+ /usr/bin/make
+ true
+ /home/allanis/Unuk/Unuk-QT
+ true
+
+ clean
+
+
- ProjectExplorer.Project.Updater.FileVersion
- 9
+ buildconfigurations
+
+ Debug
+
+
+
+ buildstep0
+
+
+
+
+
+
+ buildstep1
+
+
+
+
+
+ buildsteps
+
+ trolltech.qt4projectmanager.qmake
+ trolltech.qt4projectmanager.make
+
+
+
+ cleanstep0
+
+
+ true
+
+
+
+ cleansteps
+
+ trolltech.qt4projectmanager.make
+
+
+
+ defaultFileEncoding
+ System
+
+
+ project
+
diff --git a/src/Unuk/Constants.h b/src/Unuk/Constants.h
index ae2f3ba..ef15698 100644
--- a/src/Unuk/Constants.h
+++ b/src/Unuk/Constants.h
@@ -5,8 +5,8 @@
const int TILE_WIDTH = 64;
const int TILE_HEIGHT = 64;
-const int SCREEN_WIDTH = 640;
-const int SCREEN_HEIGHT = 480;
+const int SCREEN_WIDTH = 800;
+const int SCREEN_HEIGHT = 600;
const int SCREEN_BPP = 16;
const SDL_Color COLOUR_BLACK = { 0, 0, 0 };
diff --git a/src/Unuk/Game.cpp b/src/Unuk/Game.cpp
new file mode 100644
index 0000000..13c715f
--- /dev/null
+++ b/src/Unuk/Game.cpp
@@ -0,0 +1,192 @@
+#include "Game.h"
+
+Game::Game(void) {
+ m_map = new Map;
+ m_ingameMenu = new IngameMenu;
+
+ m_player = new Player(m_map);
+ m_npc = new NPC(m_map);
+
+ m_runGameReturnValue = GAME_RETURN_TO_MMENU;
+}
+
+Game::~Game(void) {
+ delete m_map;
+ delete m_ingameMenu;
+
+ delete m_player;
+ delete m_npc;
+}
+
+int Game::Run(const string savegameIDArg) {
+ m_player->SetXY(200, 200);
+ m_player->LoadSprites("../Data/Media/Images/Characters/template.png", 40, 45);
+
+ m_npc->SetXY(300, 300);
+ m_npc->LoadSprites("../Data/Media/Images/Characters/template.png", 40,45);
+
+ LoadSavegame(savegameIDArg);
+
+ int fps;
+ int frame;
+ int nextGameTick = SDL_GetTicks();
+
+ Timer frameTimer;
+ frameTimer.Start();
+
+ Timer fpsCalc;
+ fpsCalc.Start();
+
+ Timer renderTimer;
+ Timer updateTimer;
+
+ m_gameRenderTime.SetXY(10, 10);
+ m_gameRenderTime.SetTextBlended("Render - XX", "vsmall", COLOUR_BLACK);
+
+ m_gameUpdateTime.SetXY(10, 30);
+ m_gameUpdateTime.SetTextBlended("Update - XX", "vsmall", COLOUR_BLACK);
+
+ stringstream playerXYString;
+ m_playerXY.SetXY(10, 50);
+ m_playerXY.SetTextBlended("Player coords - XX XX", "vsmall", COLOUR_BLACK);
+
+ m_gameRunning = true;
+ while(m_gameRunning) {
+ updateTimer.Start();
+ while((int)SDL_GetTicks() > nextGameTick) {
+ HandleInput();
+ UpdateGame();
+
+ nextGameTick += SKIP_TICKS;
+ }
+ updateTimer.Pause();
+
+ renderTimer.Start();
+ Render();
+ renderTimer.Pause();
+
+ // Calculate and display our FPS.
+ if(fpsCalc.GetTicks() >= 1000) {
+ fps = frame / (fpsCalc.GetTicks() / 1000);
+
+ stringstream caption;
+ caption << "Unuk - FPS: " << fps;
+
+ SDL_WM_SetCaption(caption.str().c_str(), NULL);
+
+ fpsCalc.Start();
+ frame = 0;
+
+ // Check to see if we are allowed to display debug info.
+ if(debugEnabled) {
+ m_gameUpdateTime.SetTextBlended("Update - " + updateTimer.GetTicksStr(), "vsmall", COLOUR_BLACK);
+ m_gameRenderTime.SetTextBlended("Render - " + renderTimer.GetTicksStr(), "vsmall", COLOUR_BLACK);
+
+ playerXYString.str("");
+ playerXYString << "Player coords: x" << m_player->GetX() << ", y" << m_player->GetY();
+ m_playerXY.SetTextBlended(playerXYString.str(), "vsmall", COLOUR_BLACK);
+ }
+ }
+ // Restrict the fps.
+ if(1000 / MAX_FPS > frameTimer.GetTicks()) {
+ // SDL_Delay does not accept a float so for higher framerate
+ // limits there's an innacuracy. This is as much as 3fps
+ // at a limit of 60fps.
+ SDL_Delay((1000 / MAX_FPS) - frameTimer.GetTicks());
+ }
+ frameTimer.Start();
+ frame++;
+ }
+ return m_runGameReturnValue;
+}
+
+void Game::HandleInput(void) {
+ if(m_ingameMenu->GetStatus() == false) {
+ while(SDL_PollEvent(&event)) {
+ m_player->HandleInput();
+
+ if(event.key.type == SDL_KEYDOWN) {
+ if(event.key.keysym.sym == SDLK_ESCAPE)
+ m_ingameMenu->SetStatus(true);
+ if(event.key.keysym.sym == SDLK_p)
+ debugEnabled = !debugEnabled;
+ }
+ else if(event.type == SDL_QUIT) {
+ m_gameRunning = false;
+ m_runGameReturnValue = GAME_QUIT_GAME;
+ break;
+ }
+ }
+ } else {
+ switch(m_ingameMenu->HandleInput()) {
+ case INGAME_MENU_NOTHING:
+ break;
+ case INGAME_MENU_RESUME:
+ m_ingameMenu->SetStatus(false);
+ break;
+ case INGAME_MENU_SAVE_GAME:
+ break;
+ case INGAME_MENU_LOAD_GAME:
+ break;
+ case INGAME_MENU_OPTIONS:
+ break;
+ case INGAME_MENU_EXIT_TO_MMENU:
+ m_gameRunning = false;
+ break;
+ }
+
+ if(event.type == SDL_QUIT) {
+ m_gameRunning = false;
+ m_ingameMenu->SetStatus(false);
+ m_runGameReturnValue = GAME_QUIT_GAME;
+ }
+ }
+}
+
+void Game::UpdateGame(void) {
+ if(m_ingameMenu->GetStatus() == false) {
+ m_player->Update();
+ m_npc->Update();
+ } else {
+ // :D
+ }
+}
+
+void Game::Render(void) {
+ if(m_ingameMenu->GetStatus() == false) {
+ m_map->Render();
+
+ m_player->Render();
+ m_npc->Render();
+
+ if(debugEnabled) {
+ m_gameRenderTime.RenderLiteral();
+ m_gameUpdateTime.RenderLiteral();
+ m_playerXY.RenderLiteral();
+ }
+ } else {
+ m_ingameMenu->Render();
+ }
+ SDL_Flip(screen);
+}
+
+void Game::LoadSavegame(const string savegameIDArg) {
+ m_saveGameID = savegameIDArg;
+
+ string saveFilename = "../Save/" + m_saveGameID;
+
+ ifstream saveFile(saveFilename.c_str());
+ assert(saveFile.is_open());
+
+ // Read stuff.
+ m_map->Load("TestLevel");
+}
+
+void Game::SaveSavegame(void) {
+ string saveFilename = "../Save/" + m_saveGameID;
+
+ ofstream saveFile(saveFilename.c_str());
+ assert(saveFile.is_open());
+
+ // Write stuff.
+}
diff --git a/src/Unuk/Game.h b/src/Unuk/Game.h
new file mode 100644
index 0000000..3c1ff86
--- /dev/null
+++ b/src/Unuk/Game.h
@@ -0,0 +1,61 @@
+#ifndef _GAME_H_
+#define _GAME_H_
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "Constants.h"
+#include "Globals.h"
+#include "Player.h"
+#include "../libUnuk/IngameMenu.h"
+#include "../libUnuk/Map.h"
+#include "../libUnuk/Timer.h"
+#include "../libUnuk/NPC.h"
+#include "../libUnuk/Debug.h"
+#include "../libUnuk/Text.h"
+using namespace std;
+
+const int GAME_RETURN_TO_MMENU = 0;
+const int GAME_QUIT_GAME = 1;
+
+class Game {
+public:
+ Game(void);
+ ~Game(void);
+
+ int Run(const string savegameIDArg);
+
+private:
+ void HandleInput(void);
+ void UpdateGame(void);
+ void Render(void);
+
+ void LoadSavegame(const string savegameIDArg);
+ void SaveSavegame(void);
+
+ bool m_gameRunning;
+
+ int m_runGameReturnValue;
+
+ string m_saveGameID;
+ string m_mapID;
+
+ Text m_gameUpdateTime;
+ Text m_gameRenderTime;
+ Text m_playerXY;
+
+ static const int MAX_FPS = 6000;
+ static const int GAME_UPDATES_PER_SECOND = 60;
+ static const int SKIP_TICKS = 1000 / GAME_UPDATES_PER_SECOND;
+
+ IngameMenu* m_ingameMenu;
+ Map* m_map;
+
+ Player* m_player;
+ NPC* m_npc;
+};
+
+#endif
diff --git a/src/Unuk/Globals.cpp b/src/Unuk/Globals.cpp
index 3cd14d4..2a35a41 100644
--- a/src/Unuk/Globals.cpp
+++ b/src/Unuk/Globals.cpp
@@ -10,4 +10,4 @@ SDL_Event event;
int levelWidth;
int levelHeight;
-//bool debugEnabled = false;
+bool debugEnabled = false;
diff --git a/src/Unuk/Globals.h b/src/Unuk/Globals.h
index 7949c9b..a9e0790 100644
--- a/src/Unuk/Globals.h
+++ b/src/Unuk/Globals.h
@@ -13,7 +13,7 @@ extern SDL_Event event;
extern int levelWidth;
extern int levelHeight;
-//extern bool debugEnabled;
+extern bool debugEnabled;
#endif
diff --git a/src/Unuk/Player.cpp b/src/Unuk/Player.cpp
new file mode 100644
index 0000000..950db58
--- /dev/null
+++ b/src/Unuk/Player.cpp
@@ -0,0 +1,84 @@
+#include "Player.h"
+
+// Pixels * 60 / sec.
+const float Player::PLAYER_SPEED = Character::CHARACTER_SPEED + 0.5;
+
+Player::Player(Map *mapArg) : Character(mapArg) {
+
+}
+
+Player::~Player(void) {
+
+}
+
+void Player::HandleInput(void) {
+ if(event.key.type == SDL_KEYDOWN) {
+ switch(event.key.keysym.sym) {
+ case SDLK_w:
+ yVel -= PLAYER_SPEED;
+ xVel = 0;
+ m_directionFacing = FACING_UP;
+ break;
+ case SDLK_s:
+ yVel += PLAYER_SPEED;
+ xVel = 0;
+ m_directionFacing = FACING_DOWN;
+ break;
+ case SDLK_a:
+ xVel -= PLAYER_SPEED;
+ yVel = 0;
+ m_directionFacing = FACING_LEFT;
+ break;
+ case SDLK_d:
+ xVel += PLAYER_SPEED;
+ yVel = 0;
+ m_directionFacing = FACING_RIGHT;
+ break;
+ default:
+ break;
+ }
+ }
+ else if(event.key.type == SDL_KEYUP) {
+ switch(event.key.keysym.sym) {
+ case SDLK_w: yVel = 0; break;
+ case SDLK_s: yVel = 0; break;
+ case SDLK_a: xVel = 0; break;
+ case SDLK_d: xVel = 0; break;
+ default: break;
+ }
+ }
+ else if(event.type == SDL_MOUSEBUTTONDOWN) {
+ if(event.button.button == SDL_BUTTON_LEFT) {
+ m_attacking = true;
+ m_attackTimer.Start();
+ }
+ }
+}
+
+void Player::Update(void) {
+ Move();
+ SetCamera();
+}
+
+void Player::SetCamera(void) {
+ camera.x = (x + w / 2) - SCREEN_WIDTH / 2;
+ camera.y = (y + h / 2) - SCREEN_HEIGHT / 2;
+
+ if(camera.x < 0)
+ camera.x = 0;
+ if(camera.y < 0)
+ camera.y = 0;
+
+ if(camera.x > levelWidth - camera.w)
+ camera.x = levelWidth - camera.w;
+ if(camera.y > levelHeight - camera.h)
+ camera.y = levelHeight = camera.h;
+}
+
+void Player::Move() {
+ Character::Move();
+ if(map->GetMapTransitionName(tileX, tileY) != "n") {
+ SetXY(map->GetMapTransitionX(tileX, tileY), map->GetMapTransitionY(tileX, tileY));
+ map->Load(map->GetMapTransitionName(tileX, tileY));
+ }
+}
diff --git a/src/Unuk/Player.h b/src/Unuk/Player.h
new file mode 100644
index 0000000..01252fe
--- /dev/null
+++ b/src/Unuk/Player.h
@@ -0,0 +1,26 @@
+#ifndef _PLAYER_H_
+#define _PLAYER_H_
+#include
+
+#include "Globals.h"
+#include "Constants.h"
+#include "../libUnuk/Character.h"
+
+class Player : public Character {
+public:
+ Player(Map* mapArg);
+ ~Player(void);
+
+ void HandleInput(void);
+ void Update(void);
+
+protected:
+ void Move(void);
+ void CheckTileCollisions(void);
+
+private:
+ void SetCamera(void);
+ static const float PLAYER_SPEED;
+};
+
+#endif
diff --git a/src/Unuk/main.cpp b/src/Unuk/main.cpp
index 2bce4a6..e58520c 100644
--- a/src/Unuk/main.cpp
+++ b/src/Unuk/main.cpp
@@ -1,215 +1,116 @@
-#ifdef __unix__
-#include
-#endif
-
-#include
-#include
-#include
-#include
#include
+#include
+#include
+#include
+#include
-#include "../libUnuk/Input.h"
+#include "../libUnuk/MainMenu.h"
+#include "../libUnuk/NPC.h"
#include "../libUnuk/Debug.h"
#include "Constants.h"
#include "Globals.h"
-
-// Screen width, height, and bit depth.
-//const int SCREEN_WIDTH = 640;
-//const int SCREEN_HEIGHT = 480;
-//const int SCREEN_BPP = 16;
-
-// Define our SDL surface.
-SDL_Surface *surface;
-
-void Quit(int returnCode) {
- Debug::logger->message("-----Cleaning Up------");
- // Clean up the window.
- SDL_Quit();
- Debug::logger->message("Window destroyed!");
- Debug::closeLog();
- // And exit appropriately.
- exit(returnCode);
-}
-
-// Reset our viewport after a window resize.
-int ResizeWindow(int width, int height) {
- // Height and width ration.
- GLfloat ratio;
-
- // Prevent divide by zero.
- if(height == 0)
- height = 1;
-
- ratio = (GLfloat)width / (GLfloat)height;
-
- // Setup our viewport.
- glViewport(0, 0, (GLsizei)width, (GLsizei)height);
-
- // Change to the projection matrix and set our viewing volume.
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
-
- // Set our perspective.
- gluPerspective(45.0f, ratio, 0.1f, 100.0f);
-
- // Change to the MODELVIEW.
- glMatrixMode(GL_MODELVIEW);
-
- // Reset The View.
- glLoadIdentity();
-
- return 1;
-}
-
-void ProcessEvents(SDL_keysym *keysym) {
- switch(keysym->sym) {
- case SDLK_ESCAPE:
- // Quit if we detect 'esc' key.
- Quit(0);
- break;
- case SDLK_F1:
- // Fullscreen.
- SDL_WM_ToggleFullScreen(surface);
- break;
- default:
- break;
- }
- return;
-}
-
-int InitGL(void) {
-
- // Enable smooth shading.
- glShadeModel(GL_SMOOTH);
-
- // Set the background black.
- glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
-
- // Depth buffer setup.
- glClearDepth(1.0f);
- glEnable(GL_DEPTH_TEST);
- glDepthFunc(GL_LEQUAL);
-
- // Nice Perspective Calculations.
- glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
-
- return 1;
-}
-
-unsigned int GetTickCount() {
- struct timeval t;
- gettimeofday(&t, NULL);
-
- unsigned long secs = t.tv_sec * 1000;
- secs += (t.tv_usec / 1000);
- return secs;
-}
-
-float GetElapsedSeconds(void) {
- unsigned int lastTime = 0;
- unsigned int currentTime = GetTickCount();
- unsigned int diff = currentTime - lastTime;
- lastTime = currentTime;
- return float(diff) / 1000.0f;
-}
+#include "Game.h"
int main() {
- // Initialize our Debug log.
- Debug::openLog(true);
- Debug::logger->message("-----Debug Initialized-----");
-
- int videoFlags;
- bool done = false;
- SDL_Event event;
- const SDL_VideoInfo *videoInfo;
-
- // Initialize SDL.
- if(SDL_Init(SDL_INIT_VIDEO) < 0) {
- fprintf( stderr, "Video initialization failed: %s\n", SDL_GetError());
- Quit(1);
+ if(SDL_Init(SDL_INIT_VIDEO == -1)) {
+ system("zenity --error --text=\"Could not load SDL\"");
+ Debug::logger->message("Error: Could not load SDL");
+ return 1;
+ }
+ if(TTF_Init() == -1) {
+ system("zenity --error --text=\"Could not load SDL_TTF\"");
+ Debug::logger->message("Error: Could not load SDL_TTF");
+ return 1;
}
- // Fetch the video info.
- videoInfo = SDL_GetVideoInfo();
+ screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, 32, SDL_HWSURFACE);
+ SDL_WM_SetCaption("fps - 00", NULL);
- // Set the window caption.
- SDL_WM_SetCaption("Unuk", NULL);
+ srand(time(NULL));
- if(!videoInfo) {
- fprintf( stderr, "Video query failed: %s\n", SDL_GetError());
- Quit(1);
- }
+ camera.x = 0;
+ camera.y = 0;
+ camera.w = SCREEN_WIDTH;
+ camera.h = SCREEN_HEIGHT;
- // Pass some flags to SDL_SetVideoMode.
- videoFlags = SDL_OPENGL;
- videoFlags |= SDL_GL_DOUBLEBUFFER;
- videoFlags |= SDL_HWPALETTE;
- videoFlags |= SDL_RESIZABLE;
+ errorTexture = LoadImage("../Data/Media/error.png");
- // Can the surface be stored in memory?
- if(videoInfo->hw_available)
- videoFlags |= SDL_HWSURFACE;
- else
- videoFlags |= SDL_SWSURFACE;
+ Text::LoadFonts();
- // Can we perform blitting on the GPU?
- if(videoInfo->blit_hw)
- videoFlags |= SDL_HWACCEL;
+ Game* game = NULL;
+ MainMenu* menu = new MainMenu;
- // Set up the OpenGL double buffer.
- SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
+ int fps;
+ int frame;
+ const int MAX_FPS = 20;
- // Get an SDL surface.
- surface = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, videoFlags);
+ Timer frameTimer;
+ frameTimer.Start();
- // Is there an SDL surface?
- if(!surface) {
- fprintf( stderr, "Video mode set failed: %s\n", SDL_GetError());
- Quit(1);
- }
+ Timer fpsCalc;
+ fpsCalc.Start();
- // Initialize OpenGL.
- InitGL();
+ int gameReturnVal;
+ bool menuRunning = true;
+ while(menuRunning) {
+ menu->Render();
+ SDL_Flip(screen);
- Debug::logger->message("\n\n-----Engine Initialization Complete-----");
- Debug::logger->message("\n\n-----Logic-----");
+ switch(menu->HandleInput()) {
+ case MAIN_MENU_NOTHING:
+ break;
+ case MAIN_MENU_NEW_GAME:
+ delete menu;
+ game = new Game;
- while(!done) {
- // Time to poll events.
- while(SDL_PollEvent(&event)) {
- switch(event.type) {
- case SDL_VIDEORESIZE:
- // Handle resize events.
- surface = SDL_SetVideoMode(event.resize.w, event.resize.h, 16, videoFlags);
- if(!surface) {
- Debug::logger->message("Could not get a surface after resize\n");
- Quit(1);
- }
- ResizeWindow(event.resize.w, event.resize.h);
- break;
- case SDL_KEYDOWN:
- // handle keydown events.
- ProcessEvents(&event.key.keysym);
- break;
- case SDL_QUIT:
- // Handle quit events.
- done = true;
- break;
- default:
- break;
- }
- //CreateInput();
- //UpdateInput();
+ gameReturnVal = game->Run("1");
+
+ if(gameReturnVal == GAME_RETURN_TO_MMENU)
+ menu = new MainMenu;
+ else if(gameReturnVal == GAME_QUIT_GAME)
+ menuRunning = false;
+
+ delete game;
+ break;
+ case MAIN_MENU_LOAD_GAME:
+ break;
+ case MAIN_MENU_OPTIONS:
+ break;
+ case MAIN_MENU_EXIT:
+ menuRunning = false;
+ delete menu;
+ break;
}
- // Render the scene.
- float elapsedTime = GetElapsedSeconds();
+ // Calculate and display the FPS.
+ if(fpsCalc.GetTicks() >= 1000) {
+ fps = frame / (fpsCalc.GetTicks() / 1000);
- SDL_GL_SwapBuffers();
+ stringstream caption;
+ caption << "Unuk: fps - " << fps;
+
+ SDL_WM_SetCaption(caption.str().c_str(), NULL);
+
+ fpsCalc.Start();
+ frame = 0;
+ }
+ // Restrict the FPS.
+ if(1000 / MAX_FPS > frameTimer.GetTicks()) {
+ // SDL_Delay does not accept a float, so for higher
+ // framerate limits there is an innacuracy. This is
+ // as much as 3FPS at a limit of 60FPS.
+ SDL_Delay((1000 / MAX_FPS) - frameTimer.GetTicks());
+ }
+ frameTimer.Start();
+ frame++;
}
- //game.Shutdown();
- // Clean ourselves up and exit.
- Quit(0);
+ // Clean up after ourselves.
+ Text::FreeFonts();
- // We should never get here.
- return(0);
+ SDL_FreeSurface(screen);
+ SDL_FreeSurface(errorTexture);
+
+ SDL_Quit();
+ TTF_Quit();
+
+ return 0;
}
diff --git a/src/libUnuk/Button.cpp b/src/libUnuk/Button.cpp
index 02a6138..73ed374 100644
--- a/src/libUnuk/Button.cpp
+++ b/src/libUnuk/Button.cpp
@@ -26,7 +26,7 @@ void Button::SetXY(int xArg, int yArg) {
y = yArg;
button.SetXY(x, y);
- text.SetXY(x + 10, y + 10);
+ m_text.SetXY(x + 10, y + 10);
}
void Button::SetTextRGB(Uint8 r, Uint8 g, Uint8 b) {
@@ -34,14 +34,14 @@ void Button::SetTextRGB(Uint8 r, Uint8 g, Uint8 b) {
m_textColour.g = g;
m_textColour.b = b;
- text.SetTextBlended(text.GetText(), "small", m_textColour);
+ m_text.SetTextBlended(m_text.GetText(), "small", m_textColour);
}
void Button::SetText(string textArg) {
- text.SetTextBlended(textArg, "small", m_textColour);
+ m_text.SetTextBlended(textArg, "small", m_textColour);
- w = text.GetWidth();
- h = text.GetHeight();
+ w = m_text.GetWidth();
+ h = m_text.GetHeight();
button.SetWidthHeight(w + 20, h + 15);
}
@@ -58,5 +58,5 @@ bool Button::CheckMouseOver(void) {
void Button::Render(void) {
button.DrawLiteral();
- text.RenderLiteral();
+ m_text.RenderLiteral();
}
diff --git a/src/libUnuk/Button.h b/src/libUnuk/Button.h
index 850e095..d1a8e07 100644
--- a/src/libUnuk/Button.h
+++ b/src/libUnuk/Button.h
@@ -40,7 +40,7 @@ private:
int h;
Rect button;
- Text text;
+ Text m_text;
};
#endif
diff --git a/src/libUnuk/MainMenu.cpp b/src/libUnuk/MainMenu.cpp
index 44d8ad2..fe7940b 100644
--- a/src/libUnuk/MainMenu.cpp
+++ b/src/libUnuk/MainMenu.cpp
@@ -25,7 +25,7 @@ MainMenu::MainMenu(void) {
btnExit.SetText("Exit");
btnExit.SetXY(100, 250);
m_background = new Map;
- m_background->Load("mainmenu");
+ m_background->Load("MainMenu");
camera.x = 0;
camera.y = 0;
}
diff --git a/src/libUnuk/MainMenu.h b/src/libUnuk/MainMenu.h
index 41d3e55..caf2c81 100644
--- a/src/libUnuk/MainMenu.h
+++ b/src/libUnuk/MainMenu.h
@@ -21,7 +21,7 @@ public:
void Render(void);
private:
- Map *m_background;
+ Map* m_background;
Button btnNewGame;
Button btnLoadGame;
diff --git a/src/libUnuk/NPC.cpp b/src/libUnuk/NPC.cpp
index 91ca7f9..23f6ee0 100644
--- a/src/libUnuk/NPC.cpp
+++ b/src/libUnuk/NPC.cpp
@@ -12,6 +12,10 @@ NPC::~NPC(void) {
}
+void NPC::Update(void) {
+ Move();
+}
+
void NPC::Move(void) {
if(m_moving && m_moveTimer.GetTicks() > m_moveDurationMax) {
xVel = 0.0f;
diff --git a/src/libUnuk/NPC.h b/src/libUnuk/NPC.h
index aa44738..a845830 100644
--- a/src/libUnuk/NPC.h
+++ b/src/libUnuk/NPC.h
@@ -25,4 +25,4 @@ private:
Timer m_moveTimer;
};
-#endif
\ No newline at end of file
+#endif
diff --git a/src/libUnuk/Text.cpp b/src/libUnuk/Text.cpp
index a35eec3..54847f5 100644
--- a/src/libUnuk/Text.cpp
+++ b/src/libUnuk/Text.cpp
@@ -24,7 +24,7 @@ void Text::LoadFonts(void) {
verySmallFont = Font("../Data/Media/Fonts/Enigma_2.ttf", 16);
smallFont = Font("../Data/Media/Fonts/Enigma_2.ttf", 23);
mediumFont = Font("../Data/Media/Fonts/Enigma_2.ttf", 27);
- largeFont = Font("../Data/Media/Fonts/Enigma_2.ttf", 32);
+ largeFont = Font("../Data/Media/Fonts/Enigma_2.ttf", 32);
}
void Text::FreeFonts(void) {