Index: branches/network/src/util/hud.cc
===================================================================
--- branches/network/src/util/hud.cc	(revision 6682)
+++ branches/network/src/util/hud.cc	(revision 6693)
@@ -126,7 +126,5 @@
     {
       weapon->getEnergyWidget()->show();
-      weapon->getLoadedEnergyWidget()->show();
       this->weaponsWidgets.push_back(weapon->getEnergyWidget());
-      this->weaponsWidgets.push_back(weapon->getLoadedEnergyWidget());
     }
   }
Index: branches/network/src/util/loading/resource_manager.cc
===================================================================
--- branches/network/src/util/loading/resource_manager.cc	(revision 6682)
+++ branches/network/src/util/loading/resource_manager.cc	(revision 6693)
@@ -18,7 +18,9 @@
 #include "resource_manager.h"
 
+#include "substring.h"
 #include "debug.h"
 
 #include <algorithm>
+#include <assert.h>
 
 // different resource Types
@@ -50,5 +52,5 @@
 
 /**
- *  standard constructor
+ * @brief standard constructor
 */
 ResourceManager::ResourceManager ()
@@ -66,5 +68,5 @@
 
 /**
- *  standard destructor
+ * @brief standard destructor
 */
 ResourceManager::~ResourceManager ()
@@ -78,8 +80,8 @@
   // deleting the Directorie Lists
   while (!this->imageDirs.empty())
-    {
-      delete[] this->imageDirs.front();
-      this->imageDirs.pop_front();
-    }
+  {
+    delete[] this->imageDirs.back();
+    this->imageDirs.pop_back();
+  }
 
   delete[] this->dataDir;
@@ -89,5 +91,5 @@
 
 /**
- *  sets the data main directory
+ * @brief sets the data main directory
  * @param dataDir the DataDirectory.
  */
@@ -122,5 +124,5 @@
 
 /**
- * sets the data main directory
+ * @brief sets the data main directory
  * @param dataDir the DataDirectory.
  *
@@ -153,7 +155,6 @@
 
 
-
-/**
- * checks for the DataDirectory, by looking if
+/**
+ * @brief checks for the DataDirectory, by looking if
  * @param fileInside is iniside of the given directory.
 */
@@ -162,8 +163,8 @@
   bool retVal;
   if (!isDir(this->dataDir))
-    {
-      PRINTF(1)("%s is not a directory\n", this->dataDir);
-      return false;
-    }
+  {
+    PRINTF(1)("%s is not a directory\n", this->dataDir);
+    return false;
+  }
 
   char* testFile = new char[strlen(this->dataDir)+strlen(fileInside)+1];
@@ -176,5 +177,5 @@
 #ifndef NO_TEXTURES
 /**
- *  adds a new Path for Images
+ * @brief adds a new Path for Images
  * @param imageDir The path to insert
  * @returns true, if the Path was well and injected (or already existent within the list)
@@ -201,39 +202,40 @@
   // check if the param is a Directory
   if (isDir(newDir))
-    {
-      // check if the Directory has been added before
-      std::list<char*>::const_iterator imageDir;
-      for (imageDir = this->imageDirs.begin(); imageDir != this->imageDirs.end(); imageDir++)
+  {
+    // check if the Directory has been added before
+    std::vector<char*>::const_iterator imageDir;
+    for (imageDir = this->imageDirs.begin(); imageDir != this->imageDirs.end(); imageDir++)
+    {
+      if (!strcmp(*imageDir, newDir))
       {
-         if (!strcmp(*imageDir, newDir))
-         {
-           PRINTF(3)("Path %s already loaded\n", newDir);
-           delete[] newDir;
-           return true;
-         }
+        PRINTF(3)("Path %s already loaded\n", newDir);
+        delete[] newDir;
+        return true;
       }
-      // adding the directory to the List
-      this->imageDirs.push_back(newDir);
-      return true;
-    }
-  else
-    {
-      PRINTF(1)("%s is not a Directory, and can not be added to the Paths of Images\n", newDir);
-      delete[] newDir;
-      return false;
-    }
+    }
+    // adding the directory to the List
+    this->imageDirs.push_back(newDir);
+    return true;
+  }
+  else
+  {
+    PRINTF(1)("%s is not a Directory, and can not be added to the Paths of Images\n", newDir);
+    delete[] newDir;
+    return false;
+  }
 }
 #endif /* NO_TEXTURES */
 
 /**
- *  loads resources
+ * @brief loads resources
  * @param fileName: The fileName of the resource to load
  * @param prio: The ResourcePriority of this resource (will only be increased)
+ * @param param0: an additional option to parse (see the constuctors for more help)
  * @param param1: an additional option to parse (see the constuctors for more help)
  * @param param2: an additional option to parse (see the constuctors for more help)
- * @param param3: an additional option to parse (see the constuctors for more help)
  * @returns a pointer to a desired Resource.
 */
-BaseObject* ResourceManager::load(const char* fileName, ResourcePriority prio, void* param1, void* param2, void* param3)
+BaseObject* ResourceManager::load(const char* fileName, ResourcePriority prio,
+                                  const MultiType& param0, const MultiType& param1, const MultiType& param2)
 {
   if (fileName == NULL)
@@ -258,233 +260,306 @@
 #endif
 #define __IF_OK
-  if (!strncasecmp(fileName+(strlen(fileName)-4), ".wav", 4))
-    tmpType = WAV;
-  else if (!strncasecmp(fileName+(strlen(fileName)-4), ".mp3", 4))
-    tmpType = MP3;
-  else if (!strncasecmp(fileName+(strlen(fileName)-4), ".ogg", 4))
-    tmpType = OGG;
+    if (!strncasecmp(fileName+(strlen(fileName)-4), ".wav", 4))
+      tmpType = WAV;
+    else if (!strncasecmp(fileName+(strlen(fileName)-4), ".mp3", 4))
+      tmpType = MP3;
+    else if (!strncasecmp(fileName+(strlen(fileName)-4), ".ogg", 4))
+      tmpType = OGG;
 #endif /* NO_AUDIO */
 #ifndef NO_TEXT
 #ifdef __IF_OK
-  else
+    else
 #endif
 #define __IF_OK
- if (!strncasecmp(fileName+(strlen(fileName)-4), ".ttf", 4))
-    tmpType = TTF;
+      if (!strncasecmp(fileName+(strlen(fileName)-4), ".ttf", 4))
+        tmpType = TTF;
 #endif /* NO_TEXT */
 #ifndef NO_SHADERS
 #ifdef __IF_OK
-  else
+      else
 #endif
 #define __IF_OK
- if (!strncasecmp(fileName+(strlen(fileName)-5), ".vert", 5))
-    tmpType = SHADER;
+        if (!strncasecmp(fileName+(strlen(fileName)-5), ".vert", 5))
+          tmpType = SHADER;
 #endif /* NO_SHADERS */
 #ifndef NO_TEXTURES
 #ifdef __IF_OK
-  else
+        else
 #else
   if
 #endif
-   tmpType = IMAGE;
+          tmpType = IMAGE;
 #endif /* NO_TEXTURES */
 #undef __IF_OK
-  return this->load(fileName, tmpType, prio, param1, param2, param3);
-}
-
-/**
- * loads resources
+  return this->load(fileName, tmpType, prio, param0, param1, param2);
+}
+
+/**
+ * @brief caches a Resource
+ *
+ * @see load;
+ *
+ * @brief returns true if ok, false otherwise.
+ * This function loads a Resource without applying it to an Object.
+ * This is for loading purposes, e.g, when the user is loading a Resource
+ * during the initialisation instead of at Runtime.
+ */
+bool ResourceManager::cache(const char* fileName, ResourceType type, ResourcePriority prio,
+                            const MultiType& param0, const MultiType& param1, const MultiType& param2)
+{
+  assert(fileName != NULL);
+
+  // searching if the resource was loaded before.
+  Resource* tmpResource;
+  // check if we already loaded this Resource
+  tmpResource = this->locateResourceByInfo(fileName, type, param0, param1, param2);
+  // otherwise load it
+  if (tmpResource == NULL)
+    tmpResource = this->loadResource(fileName, type, prio, param0, param1, param2);
+  // return cached pointer.
+  if (tmpResource != NULL) // if the resource was loaded before.
+  {
+    if(tmpResource->prio < prio)
+      tmpResource->prio = prio;
+    return true;
+  }
+  else
+    return false;
+}
+
+/**
+ * tells the ResourceManager to generate a Copy of the Resource.
+ * @brief resourcePointer: The Pointer to the resource to copy
+ * @returns the Resource pointed to resourcePointer.
+ */
+BaseObject* ResourceManager::copy(BaseObject* resourcePointer)
+{
+  Resource* tmp = locateResourceByPointer(resourcePointer);
+  if (tmp!=NULL)
+  {
+    tmp->count++;
+    return tmp->pointer;
+  }
+  else
+    return NULL;
+}
+
+
+/**
+ * @brief loads resources
  * @param fileName: The fileName of the resource to load
  * @param type: The Type of Resource to load.
  * @param prio: The ResourcePriority of this resource (will only be increased)
+ * @param param0: an additional option to parse (see the constuctors for more help)
  * @param param1: an additional option to parse (see the constuctors for more help)
  * @param param2: an additional option to parse (see the constuctors for more help)
- * @param param3: an additional option to parse (see the constuctors for more help)
  * @returns a pointer to a desired Resource.
 */
 BaseObject* ResourceManager::load(const char* fileName, ResourceType type, ResourcePriority prio,
-                            void* param1, void* param2, void* param3)
-{
-  if (fileName == NULL)
+                                  const MultiType& param0, const MultiType& param1, const MultiType& param2)
+{
+  assert(fileName != NULL);
+
+  // searching if the resource was loaded before.
+  Resource* tmpResource;
+  // check if we already loaded this Resource
+  tmpResource = this->locateResourceByInfo(fileName, type, param0, param1, param2);
+  // otherwise load it
+  if (tmpResource == NULL)
+  {
+    tmpResource = this->loadResource(fileName, type, prio, param0, param1, param2);
+  }
+  // return cached pointer.
+  if (tmpResource != NULL) // if the resource was loaded before.
+  {
+    tmpResource->count++;
+    if(tmpResource->prio < prio)
+      tmpResource->prio = prio;
+
+    return tmpResource->pointer;
+  }
+  else
     return NULL;
-
-  // searching if the resource was loaded before.
-  Resource* tmpResource = this->locateResourceByInfo(fileName, type, param1, param2, param3);
-  if (tmpResource != NULL) // if the resource was loaded before.
-    {
-      PRINTF(4)("not loading cached resource %s\n", tmpResource->name);
-      tmpResource->count++;
-      if(tmpResource->prio < prio)
-        tmpResource->prio = prio;
-    }
-  else
-    {
-      // Setting up the new Resource
-      tmpResource = new Resource;
-      tmpResource->count = 1;
-      tmpResource->type = type;
-      tmpResource->prio = prio;
-      tmpResource->pointer = NULL;
-      tmpResource->name = new char[strlen(fileName)+1];
-      strcpy(tmpResource->name, fileName);
-
-      // creating the full name. (directoryName + FileName)
-      char* fullName = ResourceManager::getFullName(fileName);
-      // Checking for the type of resource \see ResourceType
-      switch(type)
-        {
+}
+
+
+/**
+ * @brief loads resources for internal purposes
+ * @param fileName: The fileName of the resource to load
+ * @param type: The Type of Resource to load.
+ * @param prio: The ResourcePriority of this resource (will only be increased)
+ * @param param0: an additional option to parse (see the constuctors for more help)
+ * @param param1: an additional option to parse (see the constuctors for more help)
+ * @param param2: an additional option to parse (see the constuctors for more help)
+ * @returns a pointer to a desired Resource.
+ */
+Resource* ResourceManager::loadResource(const char* fileName, ResourceType type, ResourcePriority prio,
+                                        const MultiType& param0, const MultiType& param1, const MultiType& param2)
+{
+  // Setting up the new Resource
+  Resource* tmpResource = new Resource;
+  tmpResource->count = 0;
+  tmpResource->type = type;
+  tmpResource->prio = prio;
+  tmpResource->pointer = NULL;
+  tmpResource->name = new char[strlen(fileName)+1];
+  strcpy(tmpResource->name, fileName);
+
+  // creating the full name. (directoryName + FileName)
+  char* fullName = ResourceManager::getFullName(fileName);
+  // Checking for the type of resource \see ResourceType
+  switch(type)
+  {
 #ifndef NO_MODEL
-        case OBJ:
-          if (param1)
-            tmpResource->modelSize = *(float*)param1;
-          else
-            tmpResource->modelSize = 1.0;
-
-          if(ResourceManager::isFile(fullName))
-            tmpResource->pointer = new OBJModel(fullName, tmpResource->modelSize);
-          else
-            {
-              PRINTF(2)("File %s in %s does not exist. Loading a cube-Model instead\n", fileName, dataDir);
-              tmpResource->pointer = ResourceManager::load("cube", PRIM, prio, &tmpResource->modelSize);
-            }
-          break;
-        case PRIM:
-          if (param1)
-            tmpResource->modelSize = *(float*)param1;
-          else
-            tmpResource->modelSize = 1.0;
-
-          if (!strcmp(tmpResource->name, "cube"))
-            tmpResource->pointer = new PrimitiveModel(PRIM_CUBE, tmpResource->modelSize);
-          else if (!strcmp(tmpResource->name, "sphere"))
-            tmpResource->pointer = new PrimitiveModel(PRIM_SPHERE, tmpResource->modelSize);
-          else if (!strcmp(tmpResource->name, "plane"))
-            tmpResource->pointer = new PrimitiveModel(PRIM_PLANE, tmpResource->modelSize);
-          else if (!strcmp(tmpResource->name, "cylinder"))
-            tmpResource->pointer = new PrimitiveModel(PRIM_CYLINDER, tmpResource->modelSize);
-          else if (!strcmp(tmpResource->name, "cone"))
-            tmpResource->pointer = new PrimitiveModel(PRIM_CONE, tmpResource->modelSize);
-          break;
-        case MD2:
-          if(ResourceManager::isFile(fullName))
-            {
-              if (param1 != NULL)
-                {
-                  tmpResource->secFileName = new char[strlen((const char*)param1)+1];
-                  strcpy(tmpResource->secFileName, (const char*) param1);
-                }
-              else
-                tmpResource->secFileName = NULL;
-                tmpResource->pointer = new MD2Data(fullName, tmpResource->secFileName);
-//               tmpResource->pointer = new MD2Model(fullName, tmpResource->secFileName);
-
-            }
-              break;
+    case OBJ:
+      if (param0.getType() != MT_NULL)
+        tmpResource->param[0] = param0;
+      else
+        tmpResource->param[0] = 1.0f;
+
+      if(ResourceManager::isFile(fullName))
+        tmpResource->pointer = new OBJModel(fullName, tmpResource->param[0].getFloat());
+      else
+      {
+        PRINTF(2)("File %s in %s does not exist. Loading a cube-Model instead\n", fileName, dataDir);
+        tmpResource->pointer = ResourceManager::load("cube", PRIM, prio, tmpResource->param[0].getFloat());
+      }
+      break;
+    case PRIM:
+      if (param0 != MT_NULL)
+        tmpResource->param[0] = param0;
+      else
+        tmpResource->param[0] = 1.0f;
+
+      if (!strcmp(tmpResource->name, "cube"))
+        tmpResource->pointer = new PrimitiveModel(PRIM_CUBE, tmpResource->param[0].getFloat());
+      else if (!strcmp(tmpResource->name, "sphere"))
+        tmpResource->pointer = new PrimitiveModel(PRIM_SPHERE, tmpResource->param[0].getFloat());
+      else if (!strcmp(tmpResource->name, "plane"))
+        tmpResource->pointer = new PrimitiveModel(PRIM_PLANE, tmpResource->param[0].getFloat());
+      else if (!strcmp(tmpResource->name, "cylinder"))
+        tmpResource->pointer = new PrimitiveModel(PRIM_CYLINDER, tmpResource->param[0].getFloat());
+      else if (!strcmp(tmpResource->name, "cone"))
+        tmpResource->pointer = new PrimitiveModel(PRIM_CONE, tmpResource->param[0].getFloat());
+      break;
+    case MD2:
+      if(ResourceManager::isFile(fullName))
+      {
+        tmpResource->param[0] = param0;
+        tmpResource->pointer = new MD2Data(fullName, tmpResource->param[0].getString());
+        //               tmpResource->pointer = new MD2Model(fullName, tmpResource->secFileName);
+
+      }
+      break;
 #endif /* NO_MODEL */
 #ifndef NO_TEXT
-        case TTF:
-            if (param1 != NULL)
-              tmpResource->ttfSize = *(unsigned int*)param1;
-            else
-              tmpResource->ttfSize = FONT_DEFAULT_RENDER_SIZE;
-
-          if(isFile(fullName))
-            tmpResource->pointer = new Font(fullName, tmpResource->ttfSize);
-          else
-            PRINTF(2)("%s does not exist in %s. Not loading Font\n", fileName, this->dataDir);
-          break;
+    case TTF:
+      if (param0 != MT_NULL)
+      {
+        assert(param0.getInt() >= 0);
+        tmpResource->param[0] = param0;
+      }
+      else
+        tmpResource->param[0] = FONT_DEFAULT_RENDER_SIZE;
+
+      if(isFile(fullName))
+        tmpResource->pointer = new Font(fullName, (unsigned int) tmpResource->param[0].getInt());
+      else
+        PRINTF(2)("%s does not exist in %s. Not loading Font\n", fileName, this->dataDir);
+      break;
 #endif /* NO_TEXT */
 #ifndef NO_AUDIO
-        case WAV:
-          if(isFile(fullName))
-            tmpResource->pointer = new SoundBuffer(fullName);
-          break;
-        case OGG:
-          if (isFile(fullName))
-            tmpResource->pointer = new OggPlayer(fullName);
-          break;
+    case WAV:
+      if(isFile(fullName))
+        tmpResource->pointer = new SoundBuffer(fullName);
+      break;
+    case OGG:
+      if (isFile(fullName))
+        tmpResource->pointer = new OggPlayer(fullName);
+      break;
 #endif /* NO_AUDIO */
 #ifndef NO_TEXTURES
-        case IMAGE:
-          if (param1 != NULL)
-            tmpResource->texTarget = *(GLenum*)param1;
-          else
-            tmpResource->texTarget = GL_TEXTURE_2D;
-          if(isFile(fullName))
-            {
-              PRINTF(4)("Image %s resides to %s\n", fileName, fullName);
-              tmpResource->pointer = new Texture(fullName);
-            }
-          else
-            {
-              std::list<char*>::iterator imageDir;
-              for (imageDir = this->imageDirs.begin(); imageDir != this->imageDirs.end(); imageDir++)
-                {
-                  char* imgName = new char[strlen(*imageDir)+strlen(fileName)+1];
-                  sprintf(imgName, "%s%s", *imageDir, fileName);
-                  if(isFile(imgName))
-                    {
-                      PRINTF(4)("Image %s resides to %s\n", fileName, imgName);
-                      tmpResource->pointer = new Texture(imgName, tmpResource->texTarget);
-                      delete[] imgName;
-                      break;
-                    }
-                  delete[] imgName;
-                }
-            }
-          if(!tmpResource)
-             PRINTF(2)("!!Image %s not Found!!\n", fileName);
-          break;
+    case IMAGE:
+      if (param0 != MT_NULL)
+        tmpResource->param[0] = param0;
+      else
+        tmpResource->param[0] = GL_TEXTURE_2D;
+      if(isFile(fullName))
+      {
+        PRINTF(4)("Image %s resides to %s\n", fileName, fullName);
+        tmpResource->pointer = new Texture(fullName);
+      }
+      else
+      {
+        std::vector<char*>::iterator imageDir;
+        for (imageDir = this->imageDirs.begin(); imageDir != this->imageDirs.end(); imageDir++)
+        {
+          char* imgName = new char[strlen(*imageDir)+strlen(fileName)+1];
+          sprintf(imgName, "%s%s", *imageDir, fileName);
+          if(isFile(imgName))
+          {
+            PRINTF(4)("Image %s resides to %s\n", fileName, imgName);
+            tmpResource->pointer = new Texture(imgName, tmpResource->param[0].getInt());
+            delete[] imgName;
+            break;
+          }
+          delete[] imgName;
+        }
+      }
+      if(!tmpResource)
+        PRINTF(2)("!!Image %s not Found!!\n", fileName);
+      break;
 #endif /* NO_TEXTURES */
 #ifndef NO_SHADERS
-          case SHADER:
-            if(ResourceManager::isFile(fullName))
-            {
-              if (param1 != NULL)
-              {
-                char* secFullName = ResourceManager::getFullName((const char*)param1);
-                if (ResourceManager::isFile(secFullName))
-                {
-                  tmpResource->secFileName = new char[strlen((const char*)param1)+1];
-                  strcpy(tmpResource->secFileName, (const char*) param1);
-                  tmpResource->pointer = new Shader(fullName, secFullName);
-                }
-                delete[] secFullName;
-              }
-              else
-              {
-                tmpResource->secFileName = NULL;
-                tmpResource->pointer = new Shader(fullName, NULL);
-              }
-            }
-            break;
+    case SHADER:
+      if(ResourceManager::isFile(fullName))
+      {
+        if (param0 != MT_NULL)
+        {
+          MultiType param = param0; /// HACK
+          char* secFullName = ResourceManager::getFullName(param.getString());
+          if (ResourceManager::isFile(secFullName))
+          {
+            tmpResource->param[0] = secFullName;
+            tmpResource->pointer = new Shader(fullName, secFullName);
+          }
+          delete[] secFullName;
+        }
+        else
+        {
+          tmpResource->param[0] = param0;
+          tmpResource->pointer = new Shader(fullName, NULL);
+        }
+      }
+      break;
 #endif /* NO_SHADERS */
-        default:
-          tmpResource->pointer = NULL;
-          PRINTF(1)("No type found for %s.\n   !!This should not happen unless the Type is not supported yet. JUST DO IT!!\n", tmpResource->name);
-          break;
-        }
-      if (tmpResource->pointer != NULL)
-        this->resourceList.push_back(tmpResource);
-      delete[] fullName;
-    }
+    default:
+      tmpResource->pointer = NULL;
+      PRINTF(1)("No type found for %s.\n   !!This should not happen unless the Type is not supported yet. JUST DO IT!!\n", tmpResource->name);
+      break;
+  }
   if (tmpResource->pointer != NULL)
-    return tmpResource->pointer;
-  else
-    {
-      PRINTF(2)("Resource %s could not be loaded\n", fileName);
-      delete[] tmpResource->name;
-      delete tmpResource;
-      return NULL;
-    }
-}
-
-/**
- * unloads a Resource
+    this->resourceList.push_back(tmpResource);
+  delete[] fullName;
+
+
+  if (tmpResource->pointer != NULL)
+    return tmpResource;
+  else
+  {
+    PRINTF(2)("Resource %s could not be loaded\n", fileName);
+    delete[] tmpResource->name;
+    delete tmpResource;
+    return NULL;
+  }
+}
+
+/**
+ * @brief unloads a Resource
  * @param pointer: The pointer to free
  * @param prio: the PriorityLevel to unload this resource
  * @returns true if successful (pointer found, and deleted), false otherwise
 */
-bool ResourceManager::unload(void* pointer, ResourcePriority prio)
+bool ResourceManager::unload(BaseObject* pointer, ResourcePriority prio)
 {
   if (pointer == NULL)
@@ -502,5 +577,5 @@
 
 /**
- * unloads a Resource
+ * @brief unloads a Resource
  * @param resource: The resource to unloade
  * @param prio the PriorityLevel to unload this resource
@@ -515,57 +590,57 @@
 
   if (resource->prio <= prio)
-    {
-      if (resource->count == 0)
-        {
-          // deleting the Resource
-          switch(resource->type)
-            {
+  {
+    if (resource->count == 0)
+    {
+      // deleting the Resource
+      switch(resource->type)
+      {
 #ifndef NO_MODEL
-            case OBJ:
-            case PRIM:
-              delete (Model*)resource->pointer;
-              break;
-            case MD2:
-              delete (MD2Data*)resource->pointer;
-              break;
+        case OBJ:
+        case PRIM:
+          delete (Model*)resource->pointer;
+          break;
+        case MD2:
+          delete (MD2Data*)resource->pointer;
+          break;
 #endif /* NO_MODEL */
 #ifndef NO_AUDIO
-            case WAV:
-              delete (SoundBuffer*)resource->pointer;
-              break;
-            case OGG:
-              delete (OggPlayer*)resource->pointer;
-              break;
+        case WAV:
+          delete (SoundBuffer*)resource->pointer;
+          break;
+        case OGG:
+          delete (OggPlayer*)resource->pointer;
+          break;
 #endif /* NO_AUDIO */
 #ifndef NO_TEXT
-            case TTF:
-              delete (Font*)resource->pointer;
-              break;
+        case TTF:
+          delete (Font*)resource->pointer;
+          break;
 #endif /* NO_TEXT */
 #ifndef NO_TEXTURES
-            case IMAGE:
-              delete (Texture*)resource->pointer;
-              break;
+        case IMAGE:
+          delete (Texture*)resource->pointer;
+          break;
 #endif /* NO_TEXTURES */
 #ifndef NO_SHADERS
-            case SHADER:
-              delete (Shader*)resource->pointer;
-              break;
+        case SHADER:
+          delete (Shader*)resource->pointer;
+          break;
 #endif /* NO_SHADERS */
-            default:
-              PRINTF(2)("NOT YET IMPLEMENTED !!FIX FIX!!\n");
-              return false;
-              break;
-            }
-          // deleting the List Entry:
-          PRINTF(4)("Resource %s safely removed.\n", resource->name);
-          delete[] resource->name;
-          std::list<Resource*>::iterator resourceIT = std::find(this->resourceList.begin(), this->resourceList.end(), resource);
-          this->resourceList.erase(resourceIT);
-          delete resource;
-        }
-      else
-        PRINTF(4)("Resource %s not removed, because there are still %d References to it.\n", resource->name, resource->count);
-    }
+        default:
+          PRINTF(2)("NOT YET IMPLEMENTED !!FIX FIX!!\n");
+          return false;
+          break;
+      }
+      // deleting the List Entry:
+      PRINTF(4)("Resource %s safely removed.\n", resource->name);
+      delete[] resource->name;
+      std::vector<Resource*>::iterator resourceIT = std::find(this->resourceList.begin(), this->resourceList.end(), resource);
+      this->resourceList.erase(resourceIT);
+      delete resource;
+    }
+    else
+      PRINTF(4)("Resource %s not removed, because there are still %d References to it.\n", resource->name, resource->count);
+  }
   else
     PRINTF(4)("not deleting resource %s because DeleteLevel to high\n", resource->name);
@@ -575,139 +650,191 @@
 
 /**
- * unloads all alocated Memory of Resources with a pririty lower than prio
+ * @brief unloads all alocated Memory of Resources with a pririty lower than prio
  * @param prio The priority to delete
 */
 bool ResourceManager::unloadAllByPriority(ResourcePriority prio)
 {
-  std::list<Resource*>::iterator resource, pre;
-  pre = --this->resourceList.end();
   unsigned int removeCount;
   for (unsigned int round = 0; round < 3; round++)
   {
+    int index = this->resourceList.size() - 1;
     removeCount = 0;
-    while (pre != resourceList.end())
-    {
-      resource = pre;
-      pre--;
-        if ((*resource)->prio <= prio)
+    while (index >= 0)
+    {
+      if (this->resourceList[index]->prio <= prio)
+      {
+        if (this->resourceList[index]->count == 0)
+          unload(this->resourceList[index], prio);
+        else
         {
-          if ((*resource)->count == 0)
-            unload((*resource), prio);
-          else
-          {
+          if (round == 3)
             PRINTF(2)("unable to unload %s because there are still %d references to it\n",
-                     (*resource)->name, (*resource)->count);
-            removeCount++;
-          }
+                      this->resourceList[index]->name, this->resourceList[index]->count);
+          removeCount++;
         }
-     }
-     if (removeCount == 0) break;
-  }
-}
-
-
-/**
- * Searches for a Resource by some information
+      }
+      index--;
+    }
+    if (removeCount == 0) break;
+  }
+}
+
+
+/**
+ * @brief Searches for a Resource by some information
  * @param fileName: The name to look for
  * @param type the Type of resource to locate.
+ * @param param0: an additional option to parse (see the constuctors for more help)
  * @param param1: an additional option to parse (see the constuctors for more help)
  * @param param2: an additional option to parse (see the constuctors for more help)
- * @param param3: an additional option to parse (see the constuctors for more help)
  * @returns a Pointer to the Resource if found, NULL otherwise.
 */
 Resource* ResourceManager::locateResourceByInfo(const char* fileName, ResourceType type,
-                                                void* param1, void* param2, void* param3) const
-{
-  std::list<Resource*>::const_iterator resource;
+    const MultiType& param0, const MultiType& param1, const MultiType& param2) const
+{
+  std::vector<Resource*>::const_iterator resource;
   for (resource = this->resourceList.begin(); resource != this->resourceList.end(); resource++)
   {
     if ((*resource)->type == type && !strcmp(fileName, (*resource)->name))
-        {
-          bool match = false;
-
-          switch (type)
-            {
+    {
+      bool match = false;
+      switch (type)
+      {
 #ifndef NO_MODEL
-            case PRIM:
-            case OBJ:
-              if (!param1)
-                {
-                  if ((*resource)->modelSize == 1.0)
-                    match = true;
-                }
-              else if ((*resource)->modelSize == *(float*)param1)
-                match = true;
-              break;
-            case MD2:
-              if (!param1)
-                {
-                  if ((*resource)->secFileName == NULL)
-                    match = true;
-                }
-              else if (!strcmp((*resource)->secFileName, (const char*)param1))
-                match = true;
-              break;
+        case PRIM:
+        case OBJ:
+          if (param0 == MT_NULL)
+          {
+            if ((*resource)->param[0] == 1.0f)
+              match = true;
+          }
+          else if ((*resource)->param[0] == param0.getFloat())
+            match = true;
+          break;
+        case MD2:
+          if (param0 == MT_NULL)
+          {
+            if ((*resource)->param[0] == "")
+              match = true;
+          }
+          else if ((*resource)->param[0] == ((MultiType)param0).getString())
+            match = true;
+          break;
 #endif /* NO_MODEL */
 #ifndef NO_TEXT
-            case TTF:
-              if (param1 == NULL)
-                {
-                  if ((*resource)->ttfSize == FONT_DEFAULT_RENDER_SIZE)
-                    match = true;
-                }
-              else if ((*resource)->ttfSize == *(unsigned int*)param1)
-                match = true;
-              break;
+        case TTF:
+          if (param0 == MT_NULL)
+          {
+            if ((*resource)->param[0] == FONT_DEFAULT_RENDER_SIZE)
+              match = true;
+          }
+          else if ((*resource)->param[0] == param0.getInt())
+            match = true;
+          break;
 #endif /* NO_TEXT */
 #ifndef NO_SHADERS
-              case SHADER:
-                if (!param1)
-                {
-                  if ((*resource)->secFileName == NULL)
-                    match = true;
-                }
-                else if (!strcmp((*resource)->secFileName, (const char*)param1))
-                  match = true;
+        case SHADER:
+          if (param0 == MT_NULL)
+          {
+            if ((*resource)->param[0] == "")
+              match = true;
+          }
+          else if ((*resource)->param[0] == ((MultiType)param0).getString())
+            match = true;
 #endif /* NO_SHADERS */
 #ifndef NO_TEXTURES
-              case IMAGE:
-                if (!param1)
-                {
-                  if ((*resource)->texTarget == GL_TEXTURE_2D)
-                    match = true;
-                }
-                else if ((*resource)->texTarget ==  *(GLenum*)param1)
-                  match = true;
+        case IMAGE:
+          if (param0 == MT_NULL)
+          {
+            if ((*resource)->param[0] == GL_TEXTURE_2D)
+              match = true;
+          }
+          else if ((*resource)->param[0] ==  param0.getInt())
+            match = true;
 #endif /* NO_TEXTURES */
-            default:
-              match = true;
-              break;
-            }
-          if (match)
-            {
-              return (*resource);
-            }
-        }
-    }
+        default:
+          match = true;
+          break;
+      }
+      if (match)
+      {
+        return (*resource);
+      }
+    }
+  }
   return NULL;
 }
 
 /**
- * Searches for a Resource by Pointer
+ * @brief Searches for a Resource by Pointer
  * @param pointer the Pointer to search for
  * @returns a Pointer to the Resource if found, NULL otherwise.
-*/
+ */
 Resource* ResourceManager::locateResourceByPointer(const void* pointer) const
 {
   //  Resource* enumRes = resourceList->enumerate();
-  std::list<Resource*>::const_iterator resource;
+  std::vector<Resource*>::const_iterator resource;
   for (resource = this->resourceList.begin(); resource != this->resourceList.end(); resource++)
     if (pointer == (*resource)->pointer)
-        return (*resource);
+      return (*resource);
   return NULL;
 }
 
-/**
- * Checks if it is a Directory
+char* ResourceManager::toResourcableString(unsigned int i)
+{
+  int len = strlen(ResourceManager::ResourceTypeToChar(this->resourceList[i]->type));
+  len += strlen(this->resourceList[i]->name);
+  if (this->resourceList[i]->param[0].getString()) len += strlen(this->resourceList[i]->param[0].getString()) +1;
+  if (this->resourceList[i]->param[1].getString()) len += strlen(this->resourceList[i]->param[1].getString()) +1;
+  if (this->resourceList[i]->param[2].getString()) len += strlen(this->resourceList[i]->param[2].getString()) +1;
+  len += 10;
+  char* tmp = new char[len];
+  tmp[0] = '\0';
+  strcat( tmp, ResourceManager::ResourceTypeToChar(this->resourceList[i]->type));
+  strcat(tmp,",");
+  strcat (tmp, this->resourceList[i]->name);
+  if (this->resourceList[i]->param[0].getString() && this->resourceList[i]->param[0].getString() != '\0')
+  {
+    strcat(tmp,",");
+    strcat( tmp, this->resourceList[i]->param[0].getString());
+  }
+  if (this->resourceList[i]->param[1].getString() && this->resourceList[i]->param[1].getString() != '\0')
+  {
+    strcat(tmp,",");
+    strcat( tmp, this->resourceList[i]->param[1].getString());
+  }
+  if (this->resourceList[i]->param[2].getString() && this->resourceList[i]->param[2].getString() != '\0')
+  {
+    strcat(tmp,",");
+    strcat( tmp, this->resourceList[i]->param[2].getString());
+  }
+  return tmp;
+}
+
+/**
+ * @brief caches a Resource from a ResourceableString created with the toResourcableString-function
+ * @param resourceableString the String to cache the resource from.
+ */
+bool ResourceManager::fromResourceableString(const char* resourceableString)
+{
+  SubString splits(resourceableString, ',');
+  splits.debug();
+  if (splits.getCount() == 2)
+    this->cache(splits[1], ResourceManager::stringToResourceType(splits[0]),
+                RP_LEVEL);
+  else if (splits.getCount() == 3)
+    return this->cache(splits[1], ResourceManager::stringToResourceType(splits[0]),
+                RP_LEVEL, splits[2]);
+  else if (splits.getCount() == 4)
+    return this->cache(splits[1], ResourceManager::stringToResourceType(splits[0]),
+                RP_LEVEL, splits[2], splits[3]);
+  else if (splits.getCount() == 5)
+    return this->cache(splits[1], ResourceManager::stringToResourceType(splits[0]),
+                RP_LEVEL, splits[2], splits[3], splits[4]);
+}
+
+
+/**
+ * @brief Checks if it is a Directory
  * @param directoryName the Directory to check for
  * @returns true if it is a directory/symlink false otherwise
@@ -724,32 +851,32 @@
   if (directoryName[strlen(directoryName)-1] == '/' ||
       directoryName[strlen(directoryName)-1] == '\\')
-    {
-      tmpDirName = new char[strlen(directoryName)];
-      strncpy(tmpDirName, directoryName, strlen(directoryName)-1);
-      tmpDirName[strlen(directoryName)-1] = '\0';
-    }
-  else
-    {
-      tmpDirName = new char[strlen(directoryName)+1];
-      strcpy(tmpDirName, directoryName);
-    }
+  {
+    tmpDirName = new char[strlen(directoryName)];
+    strncpy(tmpDirName, directoryName, strlen(directoryName)-1);
+    tmpDirName[strlen(directoryName)-1] = '\0';
+  }
+  else
+  {
+    tmpDirName = new char[strlen(directoryName)+1];
+    strcpy(tmpDirName, directoryName);
+  }
 
   if(!stat(tmpDirName, &status))
-    {
-      if (status.st_mode & (S_IFDIR
+  {
+    if (status.st_mode & (S_IFDIR
 #ifndef __WIN32__
-                            | S_IFLNK
+                          | S_IFLNK
 #endif
-                            ))
-        {
-          delete[] tmpDirName;
-          return true;
-        }
-      else
-        {
-          delete[] tmpDirName;
-          return false;
-        }
-    }
+                         ))
+    {
+      delete[] tmpDirName;
+      return true;
+    }
+    else
+    {
+      delete[] tmpDirName;
+      return false;
+    }
+  }
   else
   {
@@ -760,5 +887,5 @@
 
 /**
- * Checks if the file is either a Regular file or a Symlink
+ * @brief Checks if the file is either a Regular file or a Symlink
  * @param fileName the File to check for
  * @returns true if it is a regular file/symlink, false otherwise
@@ -772,29 +899,29 @@
   struct stat status;
   if (!stat(tmpFileName, &status))
-    {
-      if (status.st_mode & (S_IFREG
+  {
+    if (status.st_mode & (S_IFREG
 #ifndef __WIN32__
-                            | S_IFLNK
+                          | S_IFLNK
 #endif
-                            ))
-        {
-          delete[] tmpFileName;
-          return true;
-        }
-      else
-        {
-          delete[] tmpFileName;
-          return false;
-        }
-    }
-  else
+                         ))
+    {
+      delete[] tmpFileName;
+      return true;
+    }
+    else
     {
       delete[] tmpFileName;
       return false;
     }
-}
-
-/**
- * touches a File on the disk (thereby creating it)
+  }
+  else
+  {
+    delete[] tmpFileName;
+    return false;
+  }
+}
+
+/**
+ * @brief touches a File on the disk (thereby creating it)
  * @param fileName The file to touch
 */
@@ -806,9 +933,9 @@
   FILE* stream;
   if( (stream = fopen (tmpName, "w")) == NULL)
-    {
-      PRINTF(1)("could not open %s fro writing\n", fileName);
-      delete[] tmpName;
-      return false;
-    }
+  {
+    PRINTF(1)("could not open %s fro writing\n", fileName);
+    delete[] tmpName;
+    return false;
+  }
   fclose(stream);
 
@@ -817,5 +944,5 @@
 
 /**
- * deletes a File from disk
+ * @brief deletes a File from disk
  * @param fileName the File to delete
 */
@@ -840,19 +967,19 @@
   char* retName;
   if (!strncmp(name, "~/", 2))
-    {
-      char tmpFileName[500];
+  {
+    char tmpFileName[500];
 #ifdef __WIN32__
-      strcpy(tmpFileName, getenv("USERPROFILE"));
+    strcpy(tmpFileName, getenv("USERPROFILE"));
 #else
-      strcpy(tmpFileName, getenv("HOME"));
+    strcpy(tmpFileName, getenv("HOME"));
 #endif
-      retName = new char[strlen(tmpFileName)+strlen(name)];
-      sprintf(retName, "%s%s", tmpFileName, name+1);
-    }
-  else
-    {
-      retName = new char[strlen(name)+1];
-      strcpy(retName, name);
-    }
+    retName = new char[strlen(tmpFileName)+strlen(name)];
+    sprintf(retName, "%s%s", tmpFileName, name+1);
+  }
+  else
+  {
+    retName = new char[strlen(name)+1];
+    strcpy(retName, name);
+  }
   return retName;
 }
@@ -874,13 +1001,13 @@
     return retName;
   else
-    {
-      delete[] retName;
-      return NULL;
-    }
-}
-
-
-/**
- * checks wether a file is in the DataDir.
+  {
+    delete[] retName;
+    return NULL;
+  }
+}
+
+
+/**
+ * @brief checks wether a file is in the DataDir.
  * @param fileName the File to check if it is in the Data-Dir structure.
  * @returns true if the file exists, false otherwise
@@ -893,5 +1020,5 @@
   bool retVal = false;
   char* checkFile = new char[strlen(ResourceManager::getInstance()->getDataDir())
-      + strlen(fileName) + 1];
+                             + strlen(fileName) + 1];
   sprintf(checkFile, "%s%s", ResourceManager::getInstance()->getDataDir(), fileName);
 
@@ -906,6 +1033,6 @@
 
 /**
- * outputs debug information about the ResourceManager
-*/
+ * @brief outputs debug information about the ResourceManager
+ */
 void ResourceManager::debug() const
 {
@@ -917,35 +1044,35 @@
   PRINT(0)(" Data-Directory is: %s\n", this->dataDir);
   PRINT(0)(" List of Image-Directories: ");
-  std::list<char*>::const_iterator imageDir;
+  std::vector<char*>::const_iterator imageDir;
   for (imageDir = this->imageDirs.begin(); imageDir != this->imageDirs.end(); imageDir++)
-      PRINT(0)("%s ", (*imageDir));
+    PRINT(0)("%s ", (*imageDir));
   PRINT(0)("\n");
 
   PRINT(0)("List of all stored Resources:\n");
-  std::list<Resource*>::const_iterator resource;
+  std::vector<Resource*>::const_iterator resource;
   for (resource = this->resourceList.begin(); resource != this->resourceList.end(); resource++)
 
-    {
-      PRINT(0)("-----------------------------------------\n");
-      PRINT(0)("Name: %s; References: %d; Type: %s ", (*resource)->name, (*resource)->count, ResourceManager::ResourceTypeToChar((*resource)->type));
-
-      PRINT(0)("gets deleted at ");
-      switch((*resource)->prio)
-        {
-        default:
-        case RP_NO:
-          PRINT(0)("first posibility (0)\n");
-          break;
-        case RP_LEVEL:
-          PRINT(0)("the end of the Level (1)\n");
-          break;
-        case RP_CAMPAIGN:
-          PRINT(0)("the end of the campaign (2)\n");
-          break;
-        case RP_GAME:
-          PRINT(0)("when leaving the game (3)\n");
-          break;
-        }
-    }
+  {
+    PRINT(0)("-----------------------------------------\n");
+    PRINT(0)("Name: %s; References: %d; Type: %s ", (*resource)->name, (*resource)->count, ResourceManager::ResourceTypeToChar((*resource)->type));
+
+    PRINT(0)("gets deleted at ");
+    switch((*resource)->prio)
+    {
+      default:
+      case RP_NO:
+        PRINT(0)("first posibility (0)\n");
+        break;
+      case RP_LEVEL:
+        PRINT(0)("the end of the Level (1)\n");
+        break;
+      case RP_CAMPAIGN:
+        PRINT(0)("the end of the campaign (2)\n");
+        break;
+      case RP_GAME:
+        PRINT(0)("when leaving the game (3)\n");
+        break;
+    }
+  }
 
 
@@ -956,5 +1083,5 @@
 
 /**
- * converts a ResourceType into the corresponding String
+ * @brief converts a ResourceType into the corresponding String
  * @param type the ResourceType to translate
  * @returns the converted String.
@@ -962,43 +1089,45 @@
 const char* ResourceManager::ResourceTypeToChar(ResourceType type)
 {
-  switch (type)
+  return ResourceManager::resourceNames[type];
+}
+
+/**
+ * @brief converts a String into a ResourceType (good for loading)
+ * @param resourceType the name of the Type
+ * @returns the Number of the Type, or 0 (defautl) if not found.
+ */
+ResourceType ResourceManager::stringToResourceType(const char* resourceType)
+{
+  assert(resourceType != NULL);
+  for (unsigned int i = 0; i < RESOURCE_TYPE_SIZE; i++)
+    if (!strcmp(resourceType, ResourceManager::resourceNames[i]))
+      return (ResourceType)i;
+  return (ResourceType)0;
+}
+
+/**
+ * The Names of the ResourceTypes
+ */
+const char* ResourceManager::resourceNames[] =
   {
 #ifndef NO_MODEL
-    case OBJ:
-      return "ObjectModel";
-      break;
-    case PRIM:
-      return "PrimitiveModel";
-      break;
-    case MD2:
-      return "MD2-Data";
-      break;
+    "ObjectModel",
+    "PrimitiveModel",
+    "MD2-Data",
+#endif
+#ifndef NO_TEXT
+    "Font",
+#endif
+#ifndef NO_AUDIO
+    "Wav",
+    "mp3",
+    "ogg",
 #endif
 #ifndef NO_TEXTURES
-    case IMAGE:
-      return "ImageFile (Texture)";
-      break;
-#endif
-#ifndef NO_AUDIO
-    case WAV:
-      return "SoundFile";
-      break;
-    case OGG:
-      return "MusicFile";
-      break;
-#endif
-#ifndef NO_TEXT
-    case TTF:
-      return "Font (TTF)";
-      break;
+    "Texture",
 #endif
 #ifndef NO_SHADERS
-    case SHADER:
-      return "Shader";
-      break;
+    "Shader",
 #endif
-    default:
-      return "unknown Format";
-      break;
-  }
-}
+
+  };
Index: branches/network/src/util/loading/resource_manager.h
===================================================================
--- branches/network/src/util/loading/resource_manager.h	(revision 6682)
+++ branches/network/src/util/loading/resource_manager.h	(revision 6693)
@@ -14,4 +14,5 @@
     (NO_TEXT)
     (NO_TEXTURES)
+    (NO_SHADERS)
 */
 
@@ -20,7 +21,7 @@
 
 #include "base_object.h"
+#include "multi_type.h"
 
-
-#include <list>
+#include <vector>
 
 //! An eumerator for different fileTypes the resourceManager supports
@@ -46,4 +47,5 @@
   SHADER,               //!< openGL-shader program
 #endif /* NO_SHADERS */
+  RESOURCE_TYPE_SIZE
 };
 
@@ -73,17 +75,5 @@
   ResourcePriority  prio;              //!< The Priority of this resource. (This will only be increased)
 
-  // more specific
-  union {
-#ifndef NO_MODEL
-  float             modelSize;         //!< the size of the model (OBJ/PRIM)
-  char*             secFileName;       //!< a seconf fileName
-#endif /* NO_MODEL */
-#ifndef NO_TEXT
-  unsigned int      ttfSize;           //!< the size of the ttf-font (TTF)
-#endif /* NO_TEXT */
-#ifndef NO_TEXTURES
-  GLenum            texTarget;
-#endif /* NO_TEXTURES */
-  };
+  MultiType         param[3];          //!< The Parameters given to this Resource.
 };
 
@@ -114,14 +104,25 @@
   bool verifyDataDir(const char* fileInside);
   bool addImageDir(const char* imageDir);
+
+  bool cache(const char* fileName, ResourceType type, ResourcePriority prio = RP_NO,
+             const MultiType& param0 = MultiType(), const MultiType& param1 = MultiType(), const MultiType& param2 = MultiType());
+  BaseObject* copy(BaseObject* resourcePointer);
+
   BaseObject* load(const char* fileName, ResourcePriority prio = RP_NO,
-               void* param1 = NULL, void* param2 = NULL, void* param3 = NULL);
+                   const MultiType& param0 = MultiType(), const MultiType& param1 = MultiType(), const MultiType& param2 = MultiType());
   BaseObject* load(const char* fileName, ResourceType type, ResourcePriority prio = RP_NO,
-               void* param1 = NULL, void* param2 = NULL, void* param3 = NULL);
-  bool unload(void* pointer, ResourcePriority prio = RP_NO);
+                   const MultiType& param0 = MultiType(), const MultiType& param1 = MultiType(), const MultiType& param2 = MultiType());
+  bool unload(BaseObject* pointer, ResourcePriority prio = RP_NO);
   bool unload(Resource* resource, ResourcePriority = RP_NO);
   bool unloadAllByPriority(ResourcePriority prio);
 
-  Resource* locateResourceByInfo(const char* fileName, ResourceType type, void* param1, void* param2, void* param3) const;
+  Resource* locateResourceByInfo(const char* fileName, ResourceType type,
+                                 const MultiType& param0 = MultiType(), const MultiType& param1 = MultiType(), const MultiType& param2 = MultiType()) const;
   Resource* locateResourceByPointer(const void* pointer) const;
+
+  char* toResourcableString(unsigned int i);
+  bool fromResourceableString(const char* resourceableString);
+  /** @returns the Count of Resources the ResourceManager handles */
+  unsigned int resourceCount() const { return this->resourceList.size(); }
 
   void debug() const;
@@ -138,8 +139,10 @@
 
   static const char* ResourceTypeToChar(ResourceType type);
-
+  static ResourceType stringToResourceType(const char* resourceType);
 
  private:
   ResourceManager();
+  Resource* loadResource(const char* fileName, ResourceType type, ResourcePriority prio,
+                         const MultiType& param0, const MultiType& param1, const MultiType& param2);
 
  private:
@@ -147,7 +150,9 @@
 
   char*                    dataDir;            //!< The Data Directory, where all relevant Data is stored.
-  std::list<Resource*>     resourceList;       //!< The List of Resources, that has already been loaded.
-  std::list<char*>         imageDirs;          //!< A list of directories in which images are stored.
+  std::vector<char*>       imageDirs;          //!< A list of directories in which images are stored.
 
+  std::vector<Resource*>   resourceList;       //!< The List of Resources, that has already been loaded.
+
+  static const char*       resourceNames[RESOURCE_TYPE_SIZE];
 };
 
