Index: orxonox/trunk/src/Makefile.am
===================================================================
--- orxonox/trunk/src/Makefile.am	(revision 3473)
+++ orxonox/trunk/src/Makefile.am	(revision 3474)
@@ -2,4 +2,5 @@
 AM_CXXFLAGS+="-I./story_entities"
 AM_CXXFLAGS+="-I./mathlib"
+AM_CXXFLAGS+="-I./lib"
 
 AM_LDFLAGS= $(MWINDOWS)
@@ -13,5 +14,4 @@
 		 world.cc \
 		 world_entities/player.cc \
-		 collision.cc \
 		 data_tank.cc \
 		 world_entities/world_entity.cc \
@@ -19,5 +19,5 @@
 		 camera.cc \
 		 command_node.cc \
-		 ini_parser.cc \
+		 lib/ini_parser.cc \
 		 keynames.cc \
 		 base_entity.cc \
@@ -31,5 +31,5 @@
 		 importer/material.cc \
 		 importer/texture.cc \
-		 list.cc \
+		 lib/list.cc \
 		 p_node.cc \
 		 null_parent.cc \
@@ -46,5 +46,4 @@
 noinst_HEADERS = ability.h \
 		 data_tank.h \
-		 collision.h \
 		 world_entities/npc.h \
 		 stdincl.h \
@@ -58,5 +57,5 @@
 		 world_entities/player.h \
 		 camera.h \
-		 ini_parser.h \
+		 lib/ini_parser.h \
 		 power_up.h \
 		 mathlib/vector.h \
@@ -65,10 +64,10 @@
 		 world.h \
 		 command_node.h \
-		 list.h \
+		 lib/list.h \
 		 shoot_laser.h \
 		 world_entities/world_entity.h \
 		 message_structures.h \
 		 shoot_rocket.h \
-		 list_template.h \
+		 lib/list_template.h \
 		 story_entities/story_entity.h \
 		 story_entities/story_def.h \
Index: orxonox/trunk/src/Makefile.in
===================================================================
--- orxonox/trunk/src/Makefile.in	(revision 3473)
+++ orxonox/trunk/src/Makefile.in	(revision 3474)
@@ -54,8 +54,8 @@
 PROGRAMS = $(bin_PROGRAMS)
 am_orxonox_OBJECTS = orxonox.$(OBJEXT) world.$(OBJEXT) \
-	player.$(OBJEXT) collision.$(OBJEXT) data_tank.$(OBJEXT) \
-	world_entity.$(OBJEXT) vector.$(OBJEXT) camera.$(OBJEXT) \
-	command_node.$(OBJEXT) ini_parser.$(OBJEXT) keynames.$(OBJEXT) \
-	base_entity.$(OBJEXT) game_loader.$(OBJEXT) campaign.$(OBJEXT) \
+	player.$(OBJEXT) data_tank.$(OBJEXT) world_entity.$(OBJEXT) \
+	vector.$(OBJEXT) camera.$(OBJEXT) command_node.$(OBJEXT) \
+	ini_parser.$(OBJEXT) keynames.$(OBJEXT) base_entity.$(OBJEXT) \
+	game_loader.$(OBJEXT) campaign.$(OBJEXT) \
 	story_entity.$(OBJEXT) environment.$(OBJEXT) model.$(OBJEXT) \
 	objModel.$(OBJEXT) array.$(OBJEXT) material.$(OBJEXT) \
@@ -73,5 +73,5 @@
 @AMDEP_TRUE@	./$(DEPDIR)/base_entity.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/base_object.Po ./$(DEPDIR)/camera.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/campaign.Po ./$(DEPDIR)/collision.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/campaign.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/command_node.Po ./$(DEPDIR)/curve.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/data_tank.Po \
@@ -214,10 +214,9 @@
 target_os = @target_os@
 target_vendor = @target_vendor@
-AM_CXXFLAGS = "-I./world_entities" "-I./story_entities" "-I./mathlib"
+AM_CXXFLAGS = "-I./world_entities" "-I./story_entities" "-I./mathlib" "-I./lib"
 AM_LDFLAGS = $(MWINDOWS)
 orxonox_SOURCES = orxonox.cc \
 		 world.cc \
 		 world_entities/player.cc \
-		 collision.cc \
 		 data_tank.cc \
 		 world_entities/world_entity.cc \
@@ -225,5 +224,5 @@
 		 camera.cc \
 		 command_node.cc \
-		 ini_parser.cc \
+		 lib/ini_parser.cc \
 		 keynames.cc \
 		 base_entity.cc \
@@ -237,5 +236,5 @@
 		 importer/material.cc \
 		 importer/texture.cc \
-		 list.cc \
+		 lib/list.cc \
 		 p_node.cc \
 		 null_parent.cc \
@@ -252,5 +251,4 @@
 noinst_HEADERS = ability.h \
 		 data_tank.h \
-		 collision.h \
 		 world_entities/npc.h \
 		 stdincl.h \
@@ -264,5 +262,5 @@
 		 world_entities/player.h \
 		 camera.h \
-		 ini_parser.h \
+		 lib/ini_parser.h \
 		 power_up.h \
 		 mathlib/vector.h \
@@ -271,10 +269,10 @@
 		 world.h \
 		 command_node.h \
-		 list.h \
+		 lib/list.h \
 		 shoot_laser.h \
 		 world_entities/world_entity.h \
 		 message_structures.h \
 		 shoot_rocket.h \
-		 list_template.h \
+		 lib/list_template.h \
 		 story_entities/story_entity.h \
 		 story_entities/story_def.h \
@@ -378,5 +376,4 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/camera.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/campaign.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/collision.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/command_node.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curve.Po@am__quote@
@@ -471,4 +468,20 @@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o vector.obj `if test -f 'mathlib/vector.cc'; then $(CYGPATH_W) 'mathlib/vector.cc'; else $(CYGPATH_W) '$(srcdir)/mathlib/vector.cc'; fi`
 
+ini_parser.o: lib/ini_parser.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ini_parser.o -MD -MP -MF "$(DEPDIR)/ini_parser.Tpo" -c -o ini_parser.o `test -f 'lib/ini_parser.cc' || echo '$(srcdir)/'`lib/ini_parser.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/ini_parser.Tpo" "$(DEPDIR)/ini_parser.Po"; else rm -f "$(DEPDIR)/ini_parser.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='lib/ini_parser.cc' object='ini_parser.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/ini_parser.Po' tmpdepfile='$(DEPDIR)/ini_parser.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ini_parser.o `test -f 'lib/ini_parser.cc' || echo '$(srcdir)/'`lib/ini_parser.cc
+
+ini_parser.obj: lib/ini_parser.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ini_parser.obj -MD -MP -MF "$(DEPDIR)/ini_parser.Tpo" -c -o ini_parser.obj `if test -f 'lib/ini_parser.cc'; then $(CYGPATH_W) 'lib/ini_parser.cc'; else $(CYGPATH_W) '$(srcdir)/lib/ini_parser.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/ini_parser.Tpo" "$(DEPDIR)/ini_parser.Po"; else rm -f "$(DEPDIR)/ini_parser.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='lib/ini_parser.cc' object='ini_parser.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/ini_parser.Po' tmpdepfile='$(DEPDIR)/ini_parser.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ini_parser.obj `if test -f 'lib/ini_parser.cc'; then $(CYGPATH_W) 'lib/ini_parser.cc'; else $(CYGPATH_W) '$(srcdir)/lib/ini_parser.cc'; fi`
+
 campaign.o: story_entities/campaign.cc
 @am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT campaign.o -MD -MP -MF "$(DEPDIR)/campaign.Tpo" -c -o campaign.o `test -f 'story_entities/campaign.cc' || echo '$(srcdir)/'`story_entities/campaign.cc; \
@@ -598,4 +611,20 @@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o texture.obj `if test -f 'importer/texture.cc'; then $(CYGPATH_W) 'importer/texture.cc'; else $(CYGPATH_W) '$(srcdir)/importer/texture.cc'; fi`
+
+list.o: lib/list.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT list.o -MD -MP -MF "$(DEPDIR)/list.Tpo" -c -o list.o `test -f 'lib/list.cc' || echo '$(srcdir)/'`lib/list.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/list.Tpo" "$(DEPDIR)/list.Po"; else rm -f "$(DEPDIR)/list.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='lib/list.cc' object='list.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/list.Po' tmpdepfile='$(DEPDIR)/list.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o list.o `test -f 'lib/list.cc' || echo '$(srcdir)/'`lib/list.cc
+
+list.obj: lib/list.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT list.obj -MD -MP -MF "$(DEPDIR)/list.Tpo" -c -o list.obj `if test -f 'lib/list.cc'; then $(CYGPATH_W) 'lib/list.cc'; else $(CYGPATH_W) '$(srcdir)/lib/list.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/list.Tpo" "$(DEPDIR)/list.Po"; else rm -f "$(DEPDIR)/list.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='lib/list.cc' object='list.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/list.Po' tmpdepfile='$(DEPDIR)/list.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o list.obj `if test -f 'lib/list.cc'; then $(CYGPATH_W) 'lib/list.cc'; else $(CYGPATH_W) '$(srcdir)/lib/list.cc'; fi`
 
 matrix.o: mathlib/matrix.cc
@@ -769,5 +798,5 @@
 
 distdir: $(DISTFILES)
-	$(mkdir_p) $(distdir)/mathlib $(distdir)/sfont $(distdir)/story_entities $(distdir)/world_entities
+	$(mkdir_p) $(distdir)/lib $(distdir)/mathlib $(distdir)/sfont $(distdir)/story_entities $(distdir)/world_entities
 	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
 	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
Index: orxonox/trunk/src/collision.h
===================================================================
--- orxonox/trunk/src/collision.h	(revision 3473)
+++ orxonox/trunk/src/collision.h	(revision 3474)
@@ -8,5 +8,4 @@
 
 #include "vector.h"
-#include "coordinates.h"
 #include <stdlib.h>
 #include <stdio.h>
Index: orxonox/trunk/src/coordinates.h
===================================================================
--- orxonox/trunk/src/coordinates.h	(revision 3473)
+++ 	(revision )
@@ -1,36 +1,0 @@
-/*! 
-    \file coordinates.h
-    \brief Basic coordinate system definitions
-*/ 
-
-#ifndef _COORDINATES_H
-#define _COORDINATES_H
-
-#include "vector.h"
-
-class Track;
-
-//! Coordinates relative to track
-/**
-  This identifies the position of an object on the track system
-*/
-typedef struct
-{
-  unsigned long part;   //!< ID of the track part the object is on
-  Track* track;         //!< This is the current Track to which the Entity belongs to
-  float dist;           //!< The distance that has already been traveled on the track
-  Vector pos;           //!< The position relative to the offset marked by the distance already covered - this is mostly for user interaction/control
-  Quaternion rot;       //!< The direction the object is heading (relative to track direction)
-} Location;
-
-//! Absolute coordinates
-/**
-  This is used to store the position of a object in the rendered coordinate system
-*/
-typedef struct
-{
-  Vector r;              //!< Absolute x/y/z coordinates
-  Quaternion w;          //!< Absolute orientation
-} Placement;
-
-#endif /* _COORDINATS_H */
Index: orxonox/trunk/src/ini_parser.cc
===================================================================
--- orxonox/trunk/src/ini_parser.cc	(revision 3473)
+++ 	(revision )
@@ -1,163 +1,0 @@
-/* 
-   orxonox - the future of 3D-vertical-scrollers
-
-   Copyright (C) 2004 orx
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
-
-   ### File Specific:
-   main-programmer: Christian Meyer
-   co-programmer: ...
-*/
-
-
-#include "ini_parser.h"
-
-using namespace std;
-
-/**
-	\brief constructs an IniParser using a file
-	\param filename: the path and name of the file to parse
-*/
-IniParser::IniParser (char* filename)
-{
-  stream = NULL;
-  bInSection = false;
-  openFile(filename);
-}
-
-/**
-	\brief removes the IniParser from memory
-*/
-IniParser::~IniParser ()
-{
-  if( stream != NULL) fclose (stream);
-}
-
-/**
-   \brief opens another file to parse
-   \param filename: path and name of the new file to parse
-   \return zero on success or -1 if an error occured;
-*/
-int IniParser::openFile( char* filename)
-{
-  if( filename == NULL) return -1;
-  if( stream != NULL)	fclose (stream);
-  if( (stream = fopen (filename, "r")) == NULL)
-    {
-      printf("IniParser could not open %s\n", filename);
-      return -1;
-    }
-  bInSection = false;
-  return 0;
-}
-
-/**
-   \brief set the parsing cursor to the specified section
-   \param section: the name of the section to set the cursor to
-   \return zero on success or -1 if the section could not be found
-*/
-int IniParser::getSection( char* section)
-{
-  bInSection = false;
-  if( stream == NULL) return -1;
-  
-  char linebuffer[PARSELINELENGHT];
-  char secbuffer[PARSELINELENGHT];
-  char* ptr;
-  
-  rewind (stream);
-  while( !feof( stream))
-    {
-      // get next line
-      fgets (linebuffer, PARSELINELENGHT, stream);
-      // remove newline char
-      if( (ptr = strchr( linebuffer, '\n')) != NULL) *ptr = 0;
-      // check for section identifyer
-      if( sscanf (linebuffer, "[%s", secbuffer) == 1)
-	{
-	  if( (ptr = strchr( secbuffer, ']')) != NULL)
-	    {
-	      *ptr = 0;
-	      if( !strcmp( secbuffer, section))
-		{
-		  bInSection = true;
-		  return 0;
-		}
-	    }
-	}
-    }
-  return -1;
-}
-
-/**
-   \brief gets the next VarName=VarValue pair from the parsing stream
-   \param name: a pointer to a buffer to store the name of the entry
-   \param value: a pointer to a buffer to store the value of the entry
-   \return zero if the buffers have been filled with data or -1 if there are no entries left in the current section
-*/
-int IniParser::nextVar( char* name, char* value)
-{
-  if( stream == NULL)
-    {
-      bInSection = false;
-      return -1;
-    }
-  if( !bInSection) return -1;
-  
-  char linebuffer[PARSELINELENGHT];
-  char* ptr;
-  
-  while( !feof( stream))
-    {
-      // get next line
-      fgets (linebuffer, PARSELINELENGHT, stream);
-      // remove newline char
-      if( (ptr = strchr( linebuffer, '\n')) != NULL) *ptr = 0;
-      if( linebuffer[0] == '[')
-	{
-	  bInSection = false;
-	  return -1;
-	}
-      if( (ptr = strchr( linebuffer, '=')) != NULL)
-	{
-	  if( ptr == linebuffer) continue;
-	  strcpy (value, &ptr[1]);
-	  strncpy (name, linebuffer, strlen (linebuffer) - strlen (value) - 1);
-	  return 0;
-	}
-    }
-  return -1;	
-}
-
-/**
-   \brief directly acesses an entry in a section
-   \param name: the name of the entry to find
-   \param section: the section where the entry is to be found
-   \param defvalue: what should be returned in case the entry cannot be found
-   \return a pointer to a buffer conatining the value of the specified entry. This buffer will contain the data specified in defvalue in case the entry wasn't found
-   
-   The returned pointer points to an internal buffer, so do not free it on your own. Do not give a NULL pointer to defvalue, this will certainly
-   lead to unwanted behaviour.
-*/
-char* IniParser::getVar( char* name, char* section, char* defvalue = "")
-{
-  strcpy (internbuf, defvalue);
-  if( getSection (section) == -1) return internbuf;
-  
-  char namebuf[PARSELINELENGHT];
-  char valuebuf[PARSELINELENGHT];
-  
-  while( nextVar (namebuf, valuebuf) != -1)
-    {
-      if( !strcmp (name, namebuf))
-	{
-	  strcpy (internbuf, valuebuf);
-	  return internbuf;
-	}
-    }
-  return internbuf;
-}
Index: orxonox/trunk/src/ini_parser.h
===================================================================
--- orxonox/trunk/src/ini_parser.h	(revision 3473)
+++ 	(revision )
@@ -1,37 +1,0 @@
-/*!
-    \file ini_parser.h
-    \brief A small ini file parser
-    
-    Can be used to find a defined [Section] in an ini file and get the VarName=Value entries
-*/
-
-#ifndef _INI_PARSER_H
-#define _INI_PARSER_H
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#define PARSELINELENGHT 512
-
-//! ini-file parser
-/**
-	This class can be used to load an initializer file and parse it's contents for variablename=value pairs.
-*/
-class IniParser {
- private:
-	FILE* stream;
-	bool bInSection;
-	char internbuf[PARSELINELENGHT];
-	
- public:
-  IniParser (char* filename);
-  ~IniParser ();
-  
-  char* getVar( char* name, char* section, char* defvalue);
-	int openFile( char* name);
-  int getSection( char* section);
-  int nextVar( char* name, char* value);
-};
-
-#endif /* _INI_PARSER_H */
Index: orxonox/trunk/src/lib/ini_parser.cc
===================================================================
--- orxonox/trunk/src/lib/ini_parser.cc	(revision 3474)
+++ orxonox/trunk/src/lib/ini_parser.cc	(revision 3474)
@@ -0,0 +1,163 @@
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Christian Meyer
+   co-programmer: ...
+*/
+
+
+#include "ini_parser.h"
+
+using namespace std;
+
+/**
+	\brief constructs an IniParser using a file
+	\param filename: the path and name of the file to parse
+*/
+IniParser::IniParser (char* filename)
+{
+  stream = NULL;
+  bInSection = false;
+  openFile(filename);
+}
+
+/**
+	\brief removes the IniParser from memory
+*/
+IniParser::~IniParser ()
+{
+  if( stream != NULL) fclose (stream);
+}
+
+/**
+   \brief opens another file to parse
+   \param filename: path and name of the new file to parse
+   \return zero on success or -1 if an error occured;
+*/
+int IniParser::openFile( char* filename)
+{
+  if( filename == NULL) return -1;
+  if( stream != NULL)	fclose (stream);
+  if( (stream = fopen (filename, "r")) == NULL)
+    {
+      printf("IniParser could not open %s\n", filename);
+      return -1;
+    }
+  bInSection = false;
+  return 0;
+}
+
+/**
+   \brief set the parsing cursor to the specified section
+   \param section: the name of the section to set the cursor to
+   \return zero on success or -1 if the section could not be found
+*/
+int IniParser::getSection( char* section)
+{
+  bInSection = false;
+  if( stream == NULL) return -1;
+  
+  char linebuffer[PARSELINELENGHT];
+  char secbuffer[PARSELINELENGHT];
+  char* ptr;
+  
+  rewind (stream);
+  while( !feof( stream))
+    {
+      // get next line
+      fgets (linebuffer, PARSELINELENGHT, stream);
+      // remove newline char
+      if( (ptr = strchr( linebuffer, '\n')) != NULL) *ptr = 0;
+      // check for section identifyer
+      if( sscanf (linebuffer, "[%s", secbuffer) == 1)
+	{
+	  if( (ptr = strchr( secbuffer, ']')) != NULL)
+	    {
+	      *ptr = 0;
+	      if( !strcmp( secbuffer, section))
+		{
+		  bInSection = true;
+		  return 0;
+		}
+	    }
+	}
+    }
+  return -1;
+}
+
+/**
+   \brief gets the next VarName=VarValue pair from the parsing stream
+   \param name: a pointer to a buffer to store the name of the entry
+   \param value: a pointer to a buffer to store the value of the entry
+   \return zero if the buffers have been filled with data or -1 if there are no entries left in the current section
+*/
+int IniParser::nextVar( char* name, char* value)
+{
+  if( stream == NULL)
+    {
+      bInSection = false;
+      return -1;
+    }
+  if( !bInSection) return -1;
+  
+  char linebuffer[PARSELINELENGHT];
+  char* ptr;
+  
+  while( !feof( stream))
+    {
+      // get next line
+      fgets (linebuffer, PARSELINELENGHT, stream);
+      // remove newline char
+      if( (ptr = strchr( linebuffer, '\n')) != NULL) *ptr = 0;
+      if( linebuffer[0] == '[')
+	{
+	  bInSection = false;
+	  return -1;
+	}
+      if( (ptr = strchr( linebuffer, '=')) != NULL)
+	{
+	  if( ptr == linebuffer) continue;
+	  strcpy (value, &ptr[1]);
+	  strncpy (name, linebuffer, strlen (linebuffer) - strlen (value) - 1);
+	  return 0;
+	}
+    }
+  return -1;	
+}
+
+/**
+   \brief directly acesses an entry in a section
+   \param name: the name of the entry to find
+   \param section: the section where the entry is to be found
+   \param defvalue: what should be returned in case the entry cannot be found
+   \return a pointer to a buffer conatining the value of the specified entry. This buffer will contain the data specified in defvalue in case the entry wasn't found
+   
+   The returned pointer points to an internal buffer, so do not free it on your own. Do not give a NULL pointer to defvalue, this will certainly
+   lead to unwanted behaviour.
+*/
+char* IniParser::getVar( char* name, char* section, char* defvalue = "")
+{
+  strcpy (internbuf, defvalue);
+  if( getSection (section) == -1) return internbuf;
+  
+  char namebuf[PARSELINELENGHT];
+  char valuebuf[PARSELINELENGHT];
+  
+  while( nextVar (namebuf, valuebuf) != -1)
+    {
+      if( !strcmp (name, namebuf))
+	{
+	  strcpy (internbuf, valuebuf);
+	  return internbuf;
+	}
+    }
+  return internbuf;
+}
Index: orxonox/trunk/src/lib/ini_parser.h
===================================================================
--- orxonox/trunk/src/lib/ini_parser.h	(revision 3474)
+++ orxonox/trunk/src/lib/ini_parser.h	(revision 3474)
@@ -0,0 +1,37 @@
+/*!
+    \file ini_parser.h
+    \brief A small ini file parser
+    
+    Can be used to find a defined [Section] in an ini file and get the VarName=Value entries
+*/
+
+#ifndef _INI_PARSER_H
+#define _INI_PARSER_H
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#define PARSELINELENGHT 512
+
+//! ini-file parser
+/**
+	This class can be used to load an initializer file and parse it's contents for variablename=value pairs.
+*/
+class IniParser {
+ private:
+	FILE* stream;
+	bool bInSection;
+	char internbuf[PARSELINELENGHT];
+	
+ public:
+  IniParser (char* filename);
+  ~IniParser ();
+  
+  char* getVar( char* name, char* section, char* defvalue);
+	int openFile( char* name);
+  int getSection( char* section);
+  int nextVar( char* name, char* value);
+};
+
+#endif /* _INI_PARSER_H */
Index: orxonox/trunk/src/lib/list.cc
===================================================================
--- orxonox/trunk/src/lib/list.cc	(revision 3474)
+++ orxonox/trunk/src/lib/list.cc	(revision 3474)
@@ -0,0 +1,148 @@
+
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Patrick Boenzli
+   co-programmer: ...
+*/
+
+
+#include "list.h"
+#include "world_entity.h"
+
+using namespace std;
+
+
+
+List::List () 
+{
+  this->first = NULL;
+  this->last = NULL;
+  this->size = 0;
+}
+
+List::~List () 
+{}
+
+
+void List::add(WorldEntity* entity)
+{
+  printf("List::add() \n");
+  listElement* el = new listElement;
+  el->prev = this->last;
+  el->curr = entity;
+  el->next = NULL;
+
+  this->last = el;
+
+  if(this->size == 0) this->first = el;
+  else el->prev->next = el;
+  this->size++;
+}
+
+
+void List::remove(WorldEntity* entity)
+{
+  this->currentEl = this->first;
+  listElement* te;
+  while( this->currentEl != NULL)
+    {
+      if( this->currentEl->curr == entity)
+	{
+	  printf("List::remove() - object found\n");
+	  
+	  if( this->currentEl->prev  == NULL ) this->first = this->currentEl->next;
+	  else this->currentEl->prev->next = this->currentEl->next;
+
+	  if( this->currentEl->next == NULL) this->last = this->currentEl->prev;
+	  else this->currentEl->next->prev = this->currentEl->prev;
+
+	  te = this->currentEl->next;
+	  delete this->currentEl;
+	  this->currentEl = te;
+	  return;
+	}
+      this->currentEl = this->currentEl->next;
+    }
+}
+
+
+void List::destroy()
+{
+  printf("List::clear() - clearing all world objects, releasing mem\n");
+  this->currentEl = this->first;
+  listElement* le = NULL;
+  while(this->currentEl != NULL)
+    {
+      le = this->currentEl->next;
+      delete this->currentEl->curr;
+      delete this->currentEl;
+      this->currentEl = le;
+    }
+  this->first = NULL;
+  this->last = NULL;
+  this->size = 0;
+}
+
+
+WorldEntity* List::firstElement()
+{
+  return this->first->curr;
+}
+
+
+bool List::isEmpty()
+{
+  return (this->size==0)?true:false;
+}
+
+
+int List::getSize()
+{
+  return this->size;
+}
+
+
+WorldEntity* List::enumerate()
+{
+  if(this->size == 0) return NULL;
+  this->currentEl = this->first;
+  return this->currentEl->curr;
+}
+
+
+WorldEntity* List::nextElement()
+{
+  if(this->size == 0) return NULL;
+  this->currentEl = this->currentEl->next;
+  if(this->currentEl == NULL) return NULL;
+  return this->currentEl->curr;
+}
+
+
+WorldEntity* List::toArray()
+{}
+
+
+void List::debug()
+{
+  int counter = 1;
+  this->currentEl = this->first;
+  printf("List:debug() =====================\n");
+  while(this->currentEl != NULL)
+    {
+      printf("element: nr %d/%d\n", counter, size);
+      this->currentEl = this->currentEl->next;
+      counter++;
+    }
+  printf("List:debug()END =====================\n");
+}
Index: orxonox/trunk/src/lib/list.h
===================================================================
--- orxonox/trunk/src/lib/list.h	(revision 3474)
+++ orxonox/trunk/src/lib/list.h	(revision 3474)
@@ -0,0 +1,207 @@
+
+#ifndef _LIST_H
+#define _LIST_H
+
+#include "stdincl.h"
+
+//! An enum to list all the modes available when adding an object to a List
+//enum ADDMODE {LIST_ADD_FIRST, LIST_ADD_LAST};
+//! An enum to list the two searching directions available when removing an object from a List
+//enum FINDMODE {LIST_FIND_BW, LIST_FIND_FW};
+
+
+
+class WorldEntity;
+
+class List {
+
+ public:
+  List ();
+  ~List ();
+
+  void add(WorldEntity* entity);
+  void remove(WorldEntity* entity);
+  void destroy();
+  WorldEntity* firstElement();
+  bool isEmpty();
+  int getSize();
+  WorldEntity* enumerate();
+  WorldEntity* nextElement();
+  WorldEntity* toArray();
+  void debug();
+
+ private:
+  struct listElement
+  {
+    listElement* prev;
+    WorldEntity* curr;
+    listElement* next;
+  };
+  Uint32 size;
+  listElement* first;
+  listElement* last;
+  listElement* currentEl;
+
+
+};
+
+class Iterator
+{
+
+ public:
+  bool hasNext();
+  WorldEntity* next();
+
+ private:
+
+};
+
+
+template<class T> class tList 
+{
+ private:
+  struct listElement
+  {
+    listElement* prev;
+    T* curr;
+    listElement* next;
+  };
+
+  Uint32 size;
+  listElement* first;
+  listElement* last;
+  listElement* currentEl;
+  
+ public:
+  tList ();
+  ~tList ();
+  
+
+  void add(T* entity);
+  void remove(T* entity);
+  void destroy();
+  T* firstElement();
+  bool isEmpty();
+  int getSize();
+  T* enumerate();
+  T* nextElement();
+  T* toArray();
+  void debug();
+};
+
+
+template<class T>
+tList<T>::tList () 
+{
+  this->first = NULL;
+  this->last = NULL;
+  this->size = 0;
+}
+
+template<class T>
+tList<T>::~tList () 
+{}
+
+template<class T>
+void tList<T>::add(T* entity)
+{
+  listElement* el = new listElement;
+  el->prev = this->last;
+  el->curr = entity;
+  el->next = NULL;
+
+  this->last = el;
+
+  if(this->size == 0) this->first = el;
+  else el->prev->next = el;
+  this->size++;
+}
+
+
+template<class T>
+void tList<T>::remove(T* entity)
+{
+  this->currentEl = this->first;
+  listElement* te;
+  while( this->currentEl != NULL)
+    {
+      if( this->currentEl->curr == entity)
+	{ 
+	  if( this->currentEl->prev  == NULL ) this->first = this->currentEl->next;
+	  else this->currentEl->prev->next = this->currentEl->next;
+
+	  if( this->currentEl->next == NULL) this->last = this->currentEl->prev;
+	  else this->currentEl->next->prev = this->currentEl->prev;
+
+	  te = this->currentEl->next;
+	  delete this->currentEl;
+	  this->currentEl = te;
+	  return;
+	}
+      this->currentEl = this->currentEl->next;
+    }
+}
+
+
+template<class T>
+void tList<T>::destroy()
+{
+  this->currentEl = this->first;
+  while(this->currentEl != NULL)
+    {
+      listElement* le = this->currentEl->next;
+      delete this->currentEl->curr;
+      delete this->currentEl;
+      this->currentEl = le;
+    }
+  this->first = NULL;
+  this->last = NULL;
+  this->size = 0;
+}
+
+
+template<class T>
+T* tList<T>::firstElement()
+{
+  return this->first->curr;
+}
+
+
+template<class T>
+bool tList<T>::isEmpty()
+{
+  return (this->size==0)?true:false;
+}
+
+
+template<class T>
+int tList<T>::getSize()
+{
+  return this->size;
+}
+
+
+template<class T>
+T* tList<T>::enumerate()
+{
+  if(this->size == 0) return NULL;
+  this->currentEl = this->first;
+  return this->currentEl->curr;
+}
+
+
+template<class T>
+T* tList<T>::nextElement()
+{
+  if(this->size == 0) return NULL;
+  this->currentEl = this->currentEl->next;
+  if(this->currentEl == NULL) return NULL;
+  return this->currentEl->curr;
+}
+
+
+template<class T>
+T* tList<T>::toArray()
+{}
+
+#endif /* _LIST_H */
Index: orxonox/trunk/src/lib/list_template.h
===================================================================
--- orxonox/trunk/src/lib/list_template.h	(revision 3474)
+++ orxonox/trunk/src/lib/list_template.h	(revision 3474)
@@ -0,0 +1,308 @@
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Christian Meyer
+
+   ADDONS/FIXES:
+  
+   Patrick Boenzli     :          Implemented getSize() function
+*/
+
+
+/*!
+  \file list.h
+  \brief Contains a template for a doubly linked list
+*/
+
+#ifndef _LIST_TEMPLATE_H
+#define _LIST_TEMPLATE_H
+
+#include "stdincl.h"
+
+//! An enum to list all the modes available when adding an object to a List
+enum ADDMODE {LIST_ADD_NEXT, LIST_ADD_PREV, LIST_ADD_FIRST, LIST_ADD_LAST};
+//! An enum to list the two searching directions available when removing an object from a List
+enum FINDMODE {LIST_FIND_BW, LIST_FIND_FW};
+
+//! A generic doubly linked list
+template<class T> class ListTemplate 
+{
+  T* object;
+  ListTemplate<T>* next;
+  ListTemplate<T>* prev;
+  bool bReference;
+  int size;
+  
+ public:
+  ListTemplate (T* obj, ListTemplate<T>* n, ListTemplate<T>* p, bool bRef);
+  ~ListTemplate ();
+  
+  int add(T* obj, ADDMODE mode, bool bRef);
+  T* getObject();
+  ListTemplate<T>* getNext();
+  ListTemplate<T>* getPrevious();
+  ListTemplate<T>* getLast();
+  ListTemplate<T>* getFirst();
+  void setNext(ListTemplate<T>* ptr);
+  void setPrev(ListTemplate<T>* ptr);
+  int remove (T* obj, FINDMODE mode);
+  int getSize();
+  void destroy();
+};
+
+
+/**
+  \brief Standard constructor
+  
+  Call this without any parameters to generate a new ListTemplate which can be filled with content.
+  DO NOT create a ListTemplate element that contains an object on your own, you'll lose the data
+  contained in that object and will have trouble removing the list from your memory.
+*/
+template<class T>
+ListTemplate<T>::ListTemplate (T* obj = NULL, ListTemplate<T>* n = NULL, ListTemplate<T>* p = NULL, bool bRef = false)
+{
+  object = obj;
+  next = n;
+  prev = p;
+  bReference = bRef;
+  if(obj != NULL)
+    ++size;
+}
+
+/**
+  \brief Standard destructor
+  
+  Call this on the initially generated base ListTemplate element to remove the whole ListTemplate from the memory.
+  You can safely do this to any ListTemplate element you want without messing up the rest of the ListTemplate, but keep in mind
+  that the contained object will be deleted as well when bRef had been set to false.
+*/
+template<class T>
+ListTemplate<T>::~ListTemplate ()
+{
+  if (object == NULL) // deleted foot node => disband the list
+  {
+    while( next != NULL)
+    {
+      delete next;
+    }
+    while( prev != NULL)
+    {
+      delete prev;
+    }
+  }
+  else
+  {
+    if (prev != NULL) prev->setNext (next);
+    if (next != NULL) next->setPrev (prev);
+    if (!bReference) delete object;
+  }
+}
+ 
+/**
+  \brief Add an object to the ListTemplate
+  \param obj: A pointer to an allocated object
+  \param mode: A Value of ADDMODE (default: LIST_ADD_NEXT)
+  \param bRef: Sets whether the element is serving as a storage point or a simple listing (default: false)
+  \return 0 if the operation succeded, -1 if the element could not be added
+  
+  This adds a new ListTemplate element to the chain. The mode parameter can be used to specify
+  the location where the element should be added. LIST_ADD_NEXT will add the new element directly
+  after the base element. LIST_ADD_PREV will add the new element directly before the base element.
+  LIST_ADD_FIRST will add the element at the beginning of the ListTemplate whereas LIST_ADD_LAST will add
+  it to the end of the chain. If the bRef parameter is set to true, the object pointer will not be deleted
+  when the element containing that object is deleted, thus the ListTemplate can be used for temporary listings as
+  well as permanent data storage.
+*/
+template<class T> 
+int ListTemplate<T>::add (T* obj, ADDMODE mode = LIST_ADD_NEXT, bool bRef = false)
+{
+  ListTemplate<T>* p;
+  if( obj == NULL) return -1;
+  switch (mode)
+  {
+    case LIST_ADD_NEXT:
+      p = new ListTemplate<T>( obj, next, this, bRef);
+      if( next != NULL) next->setPrev (p);
+      next = p;
+      break;
+    case LIST_ADD_PREV:
+      p = new ListTemplate<T>( obj, this, prev, bRef);
+      if( prev != NULL) prev->setNext (p);
+      prev = p;
+      break;
+    case LIST_ADD_FIRST:
+      if (prev == NULL) prev = new ListTemplate<T> (obj, this, NULL, bRef);
+      else return prev->add (obj, mode, bRef);
+      break;
+    case LIST_ADD_LAST:
+      if (next == NULL) next = new ListTemplate<T> (obj, NULL, this, bRef);
+      else return next->add (obj, mode, bRef);
+      break;
+    default:
+        return -1;
+      break;
+  }
+  ++size;
+  return 0;
+}
+
+/**
+  \brief Get the next element of the ListTemplate
+  \return The ListTemplate element after the current ListTemplate element
+*/
+template<class T>
+ListTemplate<T>* ListTemplate<T>::getNext ()
+{
+  return next;
+}
+ 
+/**
+  \brief Get the previous element of the ListTemplate
+  \return The ListTemplate element before the current ListTemplate element
+*/
+template<class T>
+ListTemplate<T>* ListTemplate<T>::getPrevious ()
+{
+  return prev;
+}
+
+/**
+  \brief Get the last element of the ListTemplate
+  \return The last ListTemplate element
+*/
+template<class T>
+ListTemplate<T>* ListTemplate<T>::getLast ()
+{
+  if (next == NULL) return this;
+  else return next->getLast();
+}
+
+/**
+  \brief Get the first element of the ListTemplate
+  \return The first ListTemplate element
+*/
+template<class T>
+ListTemplate<T>* ListTemplate<T>::getFirst ()
+{
+  if (prev == NULL) return this;
+  else return prev->getFirst();
+}
+
+/**
+  \brief Removes a certain element from the ListTemplate
+  \param obj: A pointer to the object that should be removed
+  \param mode: A value of FINDMODE
+  \return 0 if the element was found and removed, -1 if the element was not found
+  
+  This searches the part of the ListTemplate specified with mode for the object in question.
+  When the object is found it is deleted and the ListTemplate element is removed from the chain.
+  If mode is LIST_FIND_FW all elements AFTER the base element are searched, if mode is
+  LIST_FIND_BW all elements BEFORE the base element are searched. Note that the object
+  contained within the ListTemplate element is NOT deleted when bRef was set to true.
+*/
+template<class T>
+int ListTemplate<T>::remove (T* obj, FINDMODE mode = LIST_FIND_FW)
+{
+  if (obj == NULL) return -1;
+  else
+  {
+    switch (mode)
+    {
+      case LIST_FIND_BW:
+        if (prev == NULL) return -1;
+        else
+        {
+          if( prev->getObject() == obj)
+          {
+            delete prev;
+          }
+          else
+          {
+            return prev->remove( obj, mode);
+          }
+        }
+        break;
+      case LIST_FIND_FW:
+        if (next == NULL) return -1;
+        else
+        {
+          if( next->getObject() == obj)
+          {
+            delete next;
+          }
+          else
+          {
+            return next->remove( obj, mode);
+          }
+        }
+        break;
+      default:
+        return -1;
+    }
+  }
+  --size;
+  return 0;
+}
+
+/**
+  \brief Set the next element of a ListTemplate element
+  \param ptr: A pointer to the new next element
+    
+  Sets the next element of a ListTemplate element... Better not touch this, it can really mess up a ListTemplate.
+*/
+template<class T>
+void ListTemplate<T>::setNext (ListTemplate<T>* ptr)
+{
+  next = ptr;
+}
+
+/**
+  \brief Set the prev element of a ListTemplate element
+  \param ptr: A pointer to the new previous element
+    
+  Sets the previous element of a ListTemplate element... Better not touch this, it can really mess up a ListTemplate.
+*/
+template<class T>
+void ListTemplate<T>::setPrev (ListTemplate<T>* ptr)
+{
+  prev = ptr;
+}
+
+/**
+  \brief Get the pointer to the object the element is containing
+  \return The contained object (will be NULL if called on the base element).
+*/
+template<class T>
+T* ListTemplate<T>::getObject()
+{
+  return object;
+}
+
+
+/**
+  \brief Returns the current size of the ListTemplate
+  \return Size of ListTemplate
+*/
+template<class T>
+int ListTemplate<T>::getSize()
+{
+  return this->size;
+}
+
+
+template<class T>
+void ListTemplate<T>::destroy()
+{
+  /* \todo at the moment - doing nothing. should delete everything */
+}
+
+#endif /* _LIST_TENMPLATE_H */
+
Index: orxonox/trunk/src/list.cc
===================================================================
--- orxonox/trunk/src/list.cc	(revision 3473)
+++ 	(revision )
@@ -1,148 +1,0 @@
-
-
-/* 
-   orxonox - the future of 3D-vertical-scrollers
-
-   Copyright (C) 2004 orx
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
-
-   ### File Specific:
-   main-programmer: Patrick Boenzli
-   co-programmer: ...
-*/
-
-
-#include "list.h"
-#include "world_entity.h"
-
-using namespace std;
-
-
-
-List::List () 
-{
-  this->first = NULL;
-  this->last = NULL;
-  this->size = 0;
-}
-
-List::~List () 
-{}
-
-
-void List::add(WorldEntity* entity)
-{
-  printf("List::add() \n");
-  listElement* el = new listElement;
-  el->prev = this->last;
-  el->curr = entity;
-  el->next = NULL;
-
-  this->last = el;
-
-  if(this->size == 0) this->first = el;
-  else el->prev->next = el;
-  this->size++;
-}
-
-
-void List::remove(WorldEntity* entity)
-{
-  this->currentEl = this->first;
-  listElement* te;
-  while( this->currentEl != NULL)
-    {
-      if( this->currentEl->curr == entity)
-	{
-	  printf("List::remove() - object found\n");
-	  
-	  if( this->currentEl->prev  == NULL ) this->first = this->currentEl->next;
-	  else this->currentEl->prev->next = this->currentEl->next;
-
-	  if( this->currentEl->next == NULL) this->last = this->currentEl->prev;
-	  else this->currentEl->next->prev = this->currentEl->prev;
-
-	  te = this->currentEl->next;
-	  delete this->currentEl;
-	  this->currentEl = te;
-	  return;
-	}
-      this->currentEl = this->currentEl->next;
-    }
-}
-
-
-void List::destroy()
-{
-  printf("List::clear() - clearing all world objects, releasing mem\n");
-  this->currentEl = this->first;
-  listElement* le = NULL;
-  while(this->currentEl != NULL)
-    {
-      le = this->currentEl->next;
-      delete this->currentEl->curr;
-      delete this->currentEl;
-      this->currentEl = le;
-    }
-  this->first = NULL;
-  this->last = NULL;
-  this->size = 0;
-}
-
-
-WorldEntity* List::firstElement()
-{
-  return this->first->curr;
-}
-
-
-bool List::isEmpty()
-{
-  return (this->size==0)?true:false;
-}
-
-
-int List::getSize()
-{
-  return this->size;
-}
-
-
-WorldEntity* List::enumerate()
-{
-  if(this->size == 0) return NULL;
-  this->currentEl = this->first;
-  return this->currentEl->curr;
-}
-
-
-WorldEntity* List::nextElement()
-{
-  if(this->size == 0) return NULL;
-  this->currentEl = this->currentEl->next;
-  if(this->currentEl == NULL) return NULL;
-  return this->currentEl->curr;
-}
-
-
-WorldEntity* List::toArray()
-{}
-
-
-void List::debug()
-{
-  int counter = 1;
-  this->currentEl = this->first;
-  printf("List:debug() =====================\n");
-  while(this->currentEl != NULL)
-    {
-      printf("element: nr %d/%d\n", counter, size);
-      this->currentEl = this->currentEl->next;
-      counter++;
-    }
-  printf("List:debug()END =====================\n");
-}
Index: orxonox/trunk/src/list.h
===================================================================
--- orxonox/trunk/src/list.h	(revision 3473)
+++ 	(revision )
@@ -1,207 +1,0 @@
-
-#ifndef _LIST_H
-#define _LIST_H
-
-#include "stdincl.h"
-
-//! An enum to list all the modes available when adding an object to a List
-//enum ADDMODE {LIST_ADD_FIRST, LIST_ADD_LAST};
-//! An enum to list the two searching directions available when removing an object from a List
-//enum FINDMODE {LIST_FIND_BW, LIST_FIND_FW};
-
-
-
-class WorldEntity;
-
-class List {
-
- public:
-  List ();
-  ~List ();
-
-  void add(WorldEntity* entity);
-  void remove(WorldEntity* entity);
-  void destroy();
-  WorldEntity* firstElement();
-  bool isEmpty();
-  int getSize();
-  WorldEntity* enumerate();
-  WorldEntity* nextElement();
-  WorldEntity* toArray();
-  void debug();
-
- private:
-  struct listElement
-  {
-    listElement* prev;
-    WorldEntity* curr;
-    listElement* next;
-  };
-  Uint32 size;
-  listElement* first;
-  listElement* last;
-  listElement* currentEl;
-
-
-};
-
-class Iterator
-{
-
- public:
-  bool hasNext();
-  WorldEntity* next();
-
- private:
-
-};
-
-
-template<class T> class tList 
-{
- private:
-  struct listElement
-  {
-    listElement* prev;
-    T* curr;
-    listElement* next;
-  };
-
-  Uint32 size;
-  listElement* first;
-  listElement* last;
-  listElement* currentEl;
-  
- public:
-  tList ();
-  ~tList ();
-  
-
-  void add(T* entity);
-  void remove(T* entity);
-  void destroy();
-  T* firstElement();
-  bool isEmpty();
-  int getSize();
-  T* enumerate();
-  T* nextElement();
-  T* toArray();
-  void debug();
-};
-
-
-template<class T>
-tList<T>::tList () 
-{
-  this->first = NULL;
-  this->last = NULL;
-  this->size = 0;
-}
-
-template<class T>
-tList<T>::~tList () 
-{}
-
-template<class T>
-void tList<T>::add(T* entity)
-{
-  listElement* el = new listElement;
-  el->prev = this->last;
-  el->curr = entity;
-  el->next = NULL;
-
-  this->last = el;
-
-  if(this->size == 0) this->first = el;
-  else el->prev->next = el;
-  this->size++;
-}
-
-
-template<class T>
-void tList<T>::remove(T* entity)
-{
-  this->currentEl = this->first;
-  listElement* te;
-  while( this->currentEl != NULL)
-    {
-      if( this->currentEl->curr == entity)
-	{ 
-	  if( this->currentEl->prev  == NULL ) this->first = this->currentEl->next;
-	  else this->currentEl->prev->next = this->currentEl->next;
-
-	  if( this->currentEl->next == NULL) this->last = this->currentEl->prev;
-	  else this->currentEl->next->prev = this->currentEl->prev;
-
-	  te = this->currentEl->next;
-	  delete this->currentEl;
-	  this->currentEl = te;
-	  return;
-	}
-      this->currentEl = this->currentEl->next;
-    }
-}
-
-
-template<class T>
-void tList<T>::destroy()
-{
-  this->currentEl = this->first;
-  while(this->currentEl != NULL)
-    {
-      listElement* le = this->currentEl->next;
-      delete this->currentEl->curr;
-      delete this->currentEl;
-      this->currentEl = le;
-    }
-  this->first = NULL;
-  this->last = NULL;
-  this->size = 0;
-}
-
-
-template<class T>
-T* tList<T>::firstElement()
-{
-  return this->first->curr;
-}
-
-
-template<class T>
-bool tList<T>::isEmpty()
-{
-  return (this->size==0)?true:false;
-}
-
-
-template<class T>
-int tList<T>::getSize()
-{
-  return this->size;
-}
-
-
-template<class T>
-T* tList<T>::enumerate()
-{
-  if(this->size == 0) return NULL;
-  this->currentEl = this->first;
-  return this->currentEl->curr;
-}
-
-
-template<class T>
-T* tList<T>::nextElement()
-{
-  if(this->size == 0) return NULL;
-  this->currentEl = this->currentEl->next;
-  if(this->currentEl == NULL) return NULL;
-  return this->currentEl->curr;
-}
-
-
-template<class T>
-T* tList<T>::toArray()
-{}
-
-#endif /* _LIST_H */
Index: orxonox/trunk/src/list_template.h
===================================================================
--- orxonox/trunk/src/list_template.h	(revision 3473)
+++ 	(revision )
@@ -1,308 +1,0 @@
-/* 
-   orxonox - the future of 3D-vertical-scrollers
-
-   Copyright (C) 2004 orx
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
-
-   ### File Specific:
-   main-programmer: Christian Meyer
-
-   ADDONS/FIXES:
-  
-   Patrick Boenzli     :          Implemented getSize() function
-*/
-
-
-/*!
-  \file list.h
-  \brief Contains a template for a doubly linked list
-*/
-
-#ifndef _LIST_TEMPLATE_H
-#define _LIST_TEMPLATE_H
-
-#include "stdincl.h"
-
-//! An enum to list all the modes available when adding an object to a List
-enum ADDMODE {LIST_ADD_NEXT, LIST_ADD_PREV, LIST_ADD_FIRST, LIST_ADD_LAST};
-//! An enum to list the two searching directions available when removing an object from a List
-enum FINDMODE {LIST_FIND_BW, LIST_FIND_FW};
-
-//! A generic doubly linked list
-template<class T> class ListTemplate 
-{
-  T* object;
-  ListTemplate<T>* next;
-  ListTemplate<T>* prev;
-  bool bReference;
-  int size;
-  
- public:
-  ListTemplate (T* obj, ListTemplate<T>* n, ListTemplate<T>* p, bool bRef);
-  ~ListTemplate ();
-  
-  int add(T* obj, ADDMODE mode, bool bRef);
-  T* getObject();
-  ListTemplate<T>* getNext();
-  ListTemplate<T>* getPrevious();
-  ListTemplate<T>* getLast();
-  ListTemplate<T>* getFirst();
-  void setNext(ListTemplate<T>* ptr);
-  void setPrev(ListTemplate<T>* ptr);
-  int remove (T* obj, FINDMODE mode);
-  int getSize();
-  void destroy();
-};
-
-
-/**
-  \brief Standard constructor
-  
-  Call this without any parameters to generate a new ListTemplate which can be filled with content.
-  DO NOT create a ListTemplate element that contains an object on your own, you'll lose the data
-  contained in that object and will have trouble removing the list from your memory.
-*/
-template<class T>
-ListTemplate<T>::ListTemplate (T* obj = NULL, ListTemplate<T>* n = NULL, ListTemplate<T>* p = NULL, bool bRef = false)
-{
-  object = obj;
-  next = n;
-  prev = p;
-  bReference = bRef;
-  if(obj != NULL)
-    ++size;
-}
-
-/**
-  \brief Standard destructor
-  
-  Call this on the initially generated base ListTemplate element to remove the whole ListTemplate from the memory.
-  You can safely do this to any ListTemplate element you want without messing up the rest of the ListTemplate, but keep in mind
-  that the contained object will be deleted as well when bRef had been set to false.
-*/
-template<class T>
-ListTemplate<T>::~ListTemplate ()
-{
-  if (object == NULL) // deleted foot node => disband the list
-  {
-    while( next != NULL)
-    {
-      delete next;
-    }
-    while( prev != NULL)
-    {
-      delete prev;
-    }
-  }
-  else
-  {
-    if (prev != NULL) prev->setNext (next);
-    if (next != NULL) next->setPrev (prev);
-    if (!bReference) delete object;
-  }
-}
- 
-/**
-  \brief Add an object to the ListTemplate
-  \param obj: A pointer to an allocated object
-  \param mode: A Value of ADDMODE (default: LIST_ADD_NEXT)
-  \param bRef: Sets whether the element is serving as a storage point or a simple listing (default: false)
-  \return 0 if the operation succeded, -1 if the element could not be added
-  
-  This adds a new ListTemplate element to the chain. The mode parameter can be used to specify
-  the location where the element should be added. LIST_ADD_NEXT will add the new element directly
-  after the base element. LIST_ADD_PREV will add the new element directly before the base element.
-  LIST_ADD_FIRST will add the element at the beginning of the ListTemplate whereas LIST_ADD_LAST will add
-  it to the end of the chain. If the bRef parameter is set to true, the object pointer will not be deleted
-  when the element containing that object is deleted, thus the ListTemplate can be used for temporary listings as
-  well as permanent data storage.
-*/
-template<class T> 
-int ListTemplate<T>::add (T* obj, ADDMODE mode = LIST_ADD_NEXT, bool bRef = false)
-{
-  ListTemplate<T>* p;
-  if( obj == NULL) return -1;
-  switch (mode)
-  {
-    case LIST_ADD_NEXT:
-      p = new ListTemplate<T>( obj, next, this, bRef);
-      if( next != NULL) next->setPrev (p);
-      next = p;
-      break;
-    case LIST_ADD_PREV:
-      p = new ListTemplate<T>( obj, this, prev, bRef);
-      if( prev != NULL) prev->setNext (p);
-      prev = p;
-      break;
-    case LIST_ADD_FIRST:
-      if (prev == NULL) prev = new ListTemplate<T> (obj, this, NULL, bRef);
-      else return prev->add (obj, mode, bRef);
-      break;
-    case LIST_ADD_LAST:
-      if (next == NULL) next = new ListTemplate<T> (obj, NULL, this, bRef);
-      else return next->add (obj, mode, bRef);
-      break;
-    default:
-        return -1;
-      break;
-  }
-  ++size;
-  return 0;
-}
-
-/**
-  \brief Get the next element of the ListTemplate
-  \return The ListTemplate element after the current ListTemplate element
-*/
-template<class T>
-ListTemplate<T>* ListTemplate<T>::getNext ()
-{
-  return next;
-}
- 
-/**
-  \brief Get the previous element of the ListTemplate
-  \return The ListTemplate element before the current ListTemplate element
-*/
-template<class T>
-ListTemplate<T>* ListTemplate<T>::getPrevious ()
-{
-  return prev;
-}
-
-/**
-  \brief Get the last element of the ListTemplate
-  \return The last ListTemplate element
-*/
-template<class T>
-ListTemplate<T>* ListTemplate<T>::getLast ()
-{
-  if (next == NULL) return this;
-  else return next->getLast();
-}
-
-/**
-  \brief Get the first element of the ListTemplate
-  \return The first ListTemplate element
-*/
-template<class T>
-ListTemplate<T>* ListTemplate<T>::getFirst ()
-{
-  if (prev == NULL) return this;
-  else return prev->getFirst();
-}
-
-/**
-  \brief Removes a certain element from the ListTemplate
-  \param obj: A pointer to the object that should be removed
-  \param mode: A value of FINDMODE
-  \return 0 if the element was found and removed, -1 if the element was not found
-  
-  This searches the part of the ListTemplate specified with mode for the object in question.
-  When the object is found it is deleted and the ListTemplate element is removed from the chain.
-  If mode is LIST_FIND_FW all elements AFTER the base element are searched, if mode is
-  LIST_FIND_BW all elements BEFORE the base element are searched. Note that the object
-  contained within the ListTemplate element is NOT deleted when bRef was set to true.
-*/
-template<class T>
-int ListTemplate<T>::remove (T* obj, FINDMODE mode = LIST_FIND_FW)
-{
-  if (obj == NULL) return -1;
-  else
-  {
-    switch (mode)
-    {
-      case LIST_FIND_BW:
-        if (prev == NULL) return -1;
-        else
-        {
-          if( prev->getObject() == obj)
-          {
-            delete prev;
-          }
-          else
-          {
-            return prev->remove( obj, mode);
-          }
-        }
-        break;
-      case LIST_FIND_FW:
-        if (next == NULL) return -1;
-        else
-        {
-          if( next->getObject() == obj)
-          {
-            delete next;
-          }
-          else
-          {
-            return next->remove( obj, mode);
-          }
-        }
-        break;
-      default:
-        return -1;
-    }
-  }
-  --size;
-  return 0;
-}
-
-/**
-  \brief Set the next element of a ListTemplate element
-  \param ptr: A pointer to the new next element
-    
-  Sets the next element of a ListTemplate element... Better not touch this, it can really mess up a ListTemplate.
-*/
-template<class T>
-void ListTemplate<T>::setNext (ListTemplate<T>* ptr)
-{
-  next = ptr;
-}
-
-/**
-  \brief Set the prev element of a ListTemplate element
-  \param ptr: A pointer to the new previous element
-    
-  Sets the previous element of a ListTemplate element... Better not touch this, it can really mess up a ListTemplate.
-*/
-template<class T>
-void ListTemplate<T>::setPrev (ListTemplate<T>* ptr)
-{
-  prev = ptr;
-}
-
-/**
-  \brief Get the pointer to the object the element is containing
-  \return The contained object (will be NULL if called on the base element).
-*/
-template<class T>
-T* ListTemplate<T>::getObject()
-{
-  return object;
-}
-
-
-/**
-  \brief Returns the current size of the ListTemplate
-  \return Size of ListTemplate
-*/
-template<class T>
-int ListTemplate<T>::getSize()
-{
-  return this->size;
-}
-
-
-template<class T>
-void ListTemplate<T>::destroy()
-{
-  /* \todo at the moment - doing nothing. should delete everything */
-}
-
-#endif /* _LIST_TENMPLATE_H */
-
Index: orxonox/trunk/src/world.cc
===================================================================
--- orxonox/trunk/src/world.cc	(revision 3473)
+++ orxonox/trunk/src/world.cc	(revision 3474)
@@ -17,5 +17,4 @@
 #include "world.h"
 #include "world_entity.h"
-#include "collision.h"
 #include "track_manager.h"
 #include "player.h"
Index: orxonox/trunk/src/world_entities/player.cc
===================================================================
--- orxonox/trunk/src/world_entities/player.cc	(revision 3473)
+++ orxonox/trunk/src/world_entities/player.cc	(revision 3474)
@@ -18,5 +18,5 @@
 #include "player.h"
 #include "stdincl.h"
-#include "collision.h"
+//#include "collision.h"
 #include "importer/objModel.h"
 
@@ -76,5 +76,5 @@
   bFire = false;
   acceleration = 10.0;
-  setCollision(new CollisionCluster(1.0, Vector(0,0,0)));
+  //setCollision(new CollisionCluster(1.0, Vector(0,0,0)));
 }
 
Index: orxonox/trunk/src/world_entities/world_entity.cc
===================================================================
--- orxonox/trunk/src/world_entities/world_entity.cc	(revision 3473)
+++ orxonox/trunk/src/world_entities/world_entity.cc	(revision 3474)
@@ -20,5 +20,5 @@
 #include "world_entity.h"
 #include "stdincl.h"
-#include "collision.h"
+//#include "collision.h"
 
 using namespace std;
@@ -38,5 +38,5 @@
   this->setClassName ("WorldEntity");
   this->bDraw = true;
-  collisioncluster = NULL;
+  //  collisioncluster = NULL;
 }
 
@@ -46,5 +46,5 @@
 WorldEntity::~WorldEntity ()
 {
-  if( collisioncluster != NULL) delete collisioncluster;
+  // if( collisioncluster != NULL) delete collisioncluster;
 }
 
@@ -85,4 +85,5 @@
    Any previously assigned collision hull will be deleted on reassignment
 */
+/*
 void WorldEntity::setCollision (CollisionCluster* newhull)
 {
@@ -91,5 +92,5 @@
   collisioncluster = newhull;
 }
-
+*/
 
 /**
Index: orxonox/trunk/src/world_entities/world_entity.h
===================================================================
--- orxonox/trunk/src/world_entities/world_entity.h	(revision 3473)
+++ orxonox/trunk/src/world_entities/world_entity.h	(revision 3474)
@@ -10,5 +10,5 @@
 #include "p_node.h"
 
-class CollisionCluster;
+//class CollisionCluster;
 class OBJModel;
 
@@ -24,5 +24,5 @@
   OBJModel* model;                  //!< The model that should be loaded for this entity.
   
-  void setCollision (CollisionCluster* newhull);
+  //void setCollision (CollisionCluster* newhull);
   
   bool isFree ();
@@ -49,5 +49,5 @@
   bool bDraw;                         //!< If it should be visible.
 
-  CollisionCluster* collisioncluster; //!< The collision-Cluster of this entity.
+  //CollisionCluster* collisioncluster; //!< The collision-Cluster of this entity.
 };
 
