Index: /orxonox/branches/ll2trunktemp/src/game_loader.cc
===================================================================
--- /orxonox/branches/ll2trunktemp/src/game_loader.cc	(revision 3988)
+++ /orxonox/branches/ll2trunktemp/src/game_loader.cc	(revision 3989)
@@ -164,4 +164,40 @@
      can load everything it needs into memory then.
   */
+  
+  if( name == NULL)
+  {
+		PRINTF0("No filename specified for loading");
+		return NULL;
+  }
+  
+	TiXmlDocument* XMLDoc = new TiXmlDocument( name);
+	// load the campaign document
+	if( !XMLDoc->LoadFile())
+	{
+		// report an error
+		PRINTF0("Error loading XML File: %s @ %d:%d\n", XMLDoc->ErrorDesc(), XMLDoc->ErrorRow(), XMLDoc->ErrorCol());
+		delete XMLDoc;
+		return NULL;
+	}
+	
+	// check basic validity
+	TiXmlElement* root = XMLDoc->RootElement();
+	assert( root != NULL);
+	
+	if( strcmp( root->Value(), "Campaign"))
+	{
+		// report an error
+		PRINTF0("Specified XML File is not an orxonox campaign file (Campaign element missing)\n");
+		delete XMLDoc;
+		return NULL;
+	}
+	
+	// construct campaign
+	Campaign* c = new Campaign( root);
+	
+	// free the XML data
+	delete XMLDoc;
+	
+	return c;
 }
 
Index: /orxonox/branches/ll2trunktemp/src/orxonox.cc
===================================================================
--- /orxonox/branches/ll2trunktemp/src/orxonox.cc	(revision 3988)
+++ /orxonox/branches/ll2trunktemp/src/orxonox.cc	(revision 3989)
@@ -200,5 +200,6 @@
   
   this->gameLoader = GameLoader::getInstance();
-  this->gameLoader->loadDebugCampaign(DEBUG_CAMPAIGN_0);
+  this->gameLoader->loadCampaign("../data/worlds/DefaultCampaign.oxc");
+  //  this->gameLoader->loadDebugCampaign(DEBUG_CAMPAIGN_0);
   this->gameLoader->init();
   this->gameLoader->start();
Index: /orxonox/branches/ll2trunktemp/src/story_entities/campaign.cc
===================================================================
--- /orxonox/branches/ll2trunktemp/src/story_entities/campaign.cc	(revision 3988)
+++ /orxonox/branches/ll2trunktemp/src/story_entities/campaign.cc	(revision 3989)
@@ -19,4 +19,5 @@
 #include "campaign.h"
 
+#include "game_loader.h"
 #include "story_entity.h"
 
@@ -34,5 +35,51 @@
   this->isInit = false;
 }
-
+Campaign::Campaign ( TiXmlElement* root) 
+{
+	TiXmlElement* element;
+	const char* string;
+	int id;
+	
+	PRINTF0("Loading Campaign...\n");
+	
+	assert( root != NULL);
+	GameLoader* loader = GameLoader::getInstance();
+	
+  this->entities = new tList<StoryEntity>();
+  this->isInit = false;
+  
+  // grab all the necessary parameters
+	string = grabParameter( root, "identifier");
+	if( string == NULL || sscanf(string, "%d", &id) != 1)
+	{
+		PRINTF0("Campaign is missing a proper 'identifier'\n");
+		this->setStoryID( -1);
+	}
+	else this->setStoryID( id);
+  
+  // find WorldList
+  element = root->FirstChildElement( "WorldList");
+  if( element == NULL)
+  {
+		PRINTF0("Campaign is missing a proper 'WorldList'\n");
+  }
+  else
+  	element = element->FirstChildElement();
+  
+  // load Worlds/Subcampaigns/Whatever
+  StoryEntity* lastCreated = NULL;
+	while( element != NULL)
+	{
+		StoryEntity* created = (StoryEntity*) loader->fabricate( element);
+		if( lastCreated != NULL) created->setNextStoryID( lastCreated->getStoryID());
+		if( created != NULL)
+		{
+			this->addEntity( created);	
+			lastCreated = created;
+		}
+		element = element->NextSiblingElement();
+	}
+	if( lastCreated != NULL)	lastCreated->setStoryID( WORLD_ID_GAMEEND);
+}
 
 Campaign::~Campaign () {}
Index: /orxonox/branches/ll2trunktemp/src/story_entities/campaign.h
===================================================================
--- /orxonox/branches/ll2trunktemp/src/story_entities/campaign.h	(revision 3988)
+++ /orxonox/branches/ll2trunktemp/src/story_entities/campaign.h	(revision 3989)
@@ -14,4 +14,5 @@
  public:
   Campaign ();
+  Campaign ( TiXmlElement* root);
   virtual ~Campaign ();
 
Index: /orxonox/branches/ll2trunktemp/src/story_entities/world.cc
===================================================================
--- /orxonox/branches/ll2trunktemp/src/story_entities/world.cc	(revision 3988)
+++ /orxonox/branches/ll2trunktemp/src/story_entities/world.cc	(revision 3989)
@@ -118,4 +118,6 @@
 World::World( TiXmlElement* root)
 {
+  this->constuctorInit("", -1);
+
 	const char *string;
 	char *name;
@@ -148,8 +150,5 @@
 	
   this->localPlayer = NULL;
-  this->entities = new tList<WorldEntity>();
-	
-
-  this->setClassName ("World");
+
 }
 
@@ -161,5 +160,5 @@
 World::World (char* name)
 {
-  this->init(name, -1);
+  this->constuctorInit(name, -1);
   //NullParent* np = NullParent::getInstance();
 }
@@ -171,5 +170,5 @@
 World::World (int worldID)
 {
-  this->init(NULL, worldID);
+  this->constuctorInit(NULL, worldID);
 }
 
@@ -216,5 +215,5 @@
    NO LEVEL LOADING HERE - NEVER!
 */
-void World::init(char* name, int worldID)
+void World::constuctorInit(char* name, int worldID)
 {
   this->setClassName ("World");
@@ -225,5 +224,4 @@
   this->debugWorldNr = worldID;
   this->entities = new tList<WorldEntity>();
-  AnimationPlayer::getInstance(); // initializes the animationPlayer
 }
 
@@ -241,4 +239,7 @@
   wi->init(this);
   this->garbageCollector = GarbageCollector::getInstance();
+  AnimationPlayer::getInstance(); // initializes the animationPlayer
+
+  this->nullParent = NullParent::getInstance();
 }
 
@@ -376,5 +377,5 @@
  
       // initializing the TrackManager
-      trackManager = TrackManager::getInstance();
+  this->trackManager = TrackManager::getInstance();
       //trackManager->addPoint(Vector(0,0,0));
       trackManager->addPoint(Vector(150, -35, 5));
@@ -838,6 +839,6 @@
       
       /* update tick the rest */
-      this->trackManager->tick(this->dt);
-      this->localCamera->tick(this->dt);
+      //      this->trackManager->tick(this->dt);
+      //      this->localCamera->tick(this->dt);
       this->garbageCollector->tick(seconds);
 
Index: /orxonox/branches/ll2trunktemp/src/story_entities/world.h
===================================================================
--- /orxonox/branches/ll2trunktemp/src/story_entities/world.h	(revision 3988)
+++ /orxonox/branches/ll2trunktemp/src/story_entities/world.h	(revision 3989)
@@ -90,5 +90,5 @@
 
  private:
-  void init(char* name, int worldID);
+  void constuctorInit(char* name, int worldID);
 
   Uint32 lastFrame;                   //!< last time of frame
Index: /orxonox/branches/ll2trunktemp/src/world_entities/player.cc
===================================================================
--- /orxonox/branches/ll2trunktemp/src/world_entities/player.cc	(revision 3988)
+++ /orxonox/branches/ll2trunktemp/src/world_entities/player.cc	(revision 3989)
@@ -225,5 +225,5 @@
   //this->activeWeapon->tick(time);
   //this->activeWeaponL->tick(time); //FIX FIX DELETE REMOVE
-  this->weaponMan->tick(time);
+  //  this->weaponMan->tick(time);
   // player controlled movement
   this->move(time);
