Index: /orxonox/trunk/src/game_loader.cc
===================================================================
--- /orxonox/trunk/src/game_loader.cc	(revision 3628)
+++ /orxonox/trunk/src/game_loader.cc	(revision 3629)
@@ -86,5 +86,10 @@
   switch(campaignID)
     {
-      // Debug Level 0: Debug level used to test the base frame work.
+      /* 
+	 Debug Level 0: Debug level used to test the base frame work.
+	 As you can see, all storyentity data is allocated before game
+	 start. the storyentity will load themselfs shortly before start
+	 through the StoryEntity::init() funtion.
+      */
     case DEBUG_CAMPAIGN_0:
       {
Index: /orxonox/trunk/src/game_loader.h
===================================================================
--- /orxonox/trunk/src/game_loader.h	(revision 3628)
+++ /orxonox/trunk/src/game_loader.h	(revision 3629)
@@ -1,2 +1,7 @@
+/*! 
+    \file game_loader.h
+    \brief loads campaigns, worlds and all other story_entities
+*/ 
+
 #ifndef _GAME_LOADER_H
 #define _GAME_LOADER_H
@@ -14,4 +19,16 @@
 class CammandNode;
 
+//! The GameLoader
+/**
+   The game loader loads all game date. this is performed in the following way:
+   1. Read the structure of campaings and worlds
+   2. Create the instances of the tree: here _ALL_ StoryEntities are created
+      also if they are not yet used. the worlds should load their data in
+      the StoryEntity::load() and StoryEntity::init() functions! NOWHERE ELSE!
+      Elsewhere, all the data will be allocated at the beginning... mess...
+   3. StoryEntities are load() and init() before they start
+   4. once the gamloader starts the game there will be a campaing starting a
+      world. this is done by callaing those StoryEntity::start()
+*/
 class GameLoader 
 {
Index: /orxonox/trunk/src/story_entities/campaign.cc
===================================================================
--- /orxonox/trunk/src/story_entities/campaign.cc	(revision 3628)
+++ /orxonox/trunk/src/story_entities/campaign.cc	(revision 3629)
@@ -18,7 +18,10 @@
 
 #include "campaign.h"
+
+#include "story_entity.h"
+
 #include "world.h"
 #include "camera.h"
-//#include "story_entity.h"
+
 #include "list.h"
 
@@ -31,4 +34,5 @@
   this->isInit = false;
 }
+
 
 Campaign::~Campaign () {}
@@ -59,4 +63,5 @@
     {
       se->displayLoadScreen();
+      se->preLoad();
       se->load();
       se->init();
Index: /orxonox/trunk/src/story_entities/story_entity.cc
===================================================================
--- /orxonox/trunk/src/story_entities/story_entity.cc	(revision 3628)
+++ /orxonox/trunk/src/story_entities/story_entity.cc	(revision 3629)
@@ -72,4 +72,24 @@
 
 
+/**
+   \brief stuff that will have to be initialized before load
+
+   this gives all storyentities the possibility to init stuff before the
+   load function, where all the stuff is been made ready for start
+*/
+ErrorMessage StoryEntity::preLoad()
+{}
+
+/** 
+    \brief loads the current entity
+
+    this is here to enable you loading maps into the entities. for all other actions you
+    should take the init() function.
+    load() is exec before init()
+*/
+ErrorMessage StoryEntity::load()
+{}
+
+
 /** 
     \brief initialize the entity before use. 
@@ -78,17 +98,9 @@
     After execution of this function, the Entity is ready to be played/executed, 
     this shifts the initialisation work before the execution - very important...
+    init() is exec shortly before start()
 */
 ErrorMessage StoryEntity::init()
 {}
 
-
-/** 
-    \brief loads the current entity
-
-    this is here to enable you loading maps into the entities. for all other actions you
-    should take the init() function.
-*/
-ErrorMessage StoryEntity::load()
-{}
 
 /** 
Index: /orxonox/trunk/src/story_entities/story_entity.h
===================================================================
--- /orxonox/trunk/src/story_entities/story_entity.h	(revision 3628)
+++ /orxonox/trunk/src/story_entities/story_entity.h	(revision 3629)
@@ -23,4 +23,5 @@
   bool isPaused; //! is true if the entity is paused
 
+  virtual ErrorMessage preLoad();
   virtual ErrorMessage load();
   virtual ErrorMessage init();
Index: /orxonox/trunk/src/story_entities/world.cc
===================================================================
--- /orxonox/trunk/src/story_entities/world.cc	(revision 3628)
+++ /orxonox/trunk/src/story_entities/world.cc	(revision 3629)
@@ -89,5 +89,5 @@
 {
   this->worldReference = world;
-  if( world!= NULL)
+  if( world != NULL)
     {
       this->worldIsInitialized = true;
@@ -128,4 +128,5 @@
 World::World (int worldID)
 {
+  printf(">>>>>>>>>>>>>>>>>WORLD::WORLD called NEW WORLD created\n");
   this->init(NULL, worldID);
 }
@@ -153,5 +154,11 @@
 
 /**
-   \brief initializes a new World
+   \brief initializes the world. 
+
+   set all stuff here that is world generic and does not use to much memory
+   because the real init() function StoryEntity::init() will be called
+   shortly before start of the game.  
+   since all worlds are initiated/referenced before they will be started.
+   NO LEVEL LOADING HERE - NEVER!
 */
 void World::init(char* name, int worldID)
@@ -159,9 +166,18 @@
   this->setClassName ("World");
 
-
-  this->worldName = name;
+  this->worldName = "Just a test level";
   this->debugWorldNr = worldID;
   this->entities = new tList<WorldEntity>();
-
+}
+
+
+/**
+   \brief this is executed before load
+
+   since the load function sometimes needs data, that has been init before
+   the load and after the proceeding storyentity has finished
+*/
+ErrorMessage World::preLoad()
+{
   /* init the world interface */
   WorldInterface* wi = WorldInterface::getInstance();
@@ -391,6 +407,10 @@
 }
 
-/**
-   \brief initializes a new World
+
+/**
+   \brief initializes a new World shortly before start
+
+   this is the function, that will be loaded shortly before the world is 
+   started
 */
 ErrorMessage World::init()
@@ -400,5 +420,4 @@
   cn->addToWorld(this);
   cn->enable(true);
-
 }
 
Index: /orxonox/trunk/src/story_entities/world.h
===================================================================
--- /orxonox/trunk/src/story_entities/world.h	(revision 3628)
+++ /orxonox/trunk/src/story_entities/world.h	(revision 3629)
@@ -62,4 +62,5 @@
 
   /* classes from story-entity */
+  virtual ErrorMessage preLoad();
   virtual ErrorMessage load ();
   virtual ErrorMessage init ();
Index: /orxonox/trunk/src/world_entities/projectile.cc
===================================================================
--- /orxonox/trunk/src/world_entities/projectile.cc	(revision 3628)
+++ /orxonox/trunk/src/world_entities/projectile.cc	(revision 3629)
@@ -42,5 +42,9 @@
 Projectile::~Projectile () 
 {
-
+  /* 
+     do not delete the test projectModel, since it is pnode 
+     and will be cleaned out by world 
+  */
+  //delete this->projectileModel;
 }
 
@@ -78,5 +82,7 @@
   this->getAbsDir().matrix (matrix);
   glMultMatrixf((float*)matrix);  
-  this->model->draw();
+  //this->model->draw();
+  PRINTF(1)("draw draw draw draw draw draw \n");
+  this->projectileModel->draw();
 
   glPopMatrix();
Index: /orxonox/trunk/src/world_entities/test_gun.cc
===================================================================
--- /orxonox/trunk/src/world_entities/test_gun.cc	(revision 3628)
+++ /orxonox/trunk/src/world_entities/test_gun.cc	(revision 3629)
@@ -25,4 +25,5 @@
 
 #include "vector.h"
+#include "list.h"
 
 using namespace std;
@@ -77,5 +78,6 @@
 {
   printf("TestGun::fire() - firing weapon now ---------------------------\n");
-  //this->myWorld;
+  //WorldEntity* pj = new Projectile();
+  //this->worldEntities->add(pj);
 }
 
Index: /orxonox/trunk/src/world_entities/weapon.h
===================================================================
--- /orxonox/trunk/src/world_entities/weapon.h	(revision 3628)
+++ /orxonox/trunk/src/world_entities/weapon.h	(revision 3629)
@@ -69,4 +69,6 @@
   virtual void draw(void);
 
+ protected:
+  tList<WorldEntity>* worldEntities;
 
  private:
@@ -76,6 +78,4 @@
   Projectile* projectile;
   //WeaponSound sound;
-  tList<WorldEntity>* worldEntities;
-
 };
 
