r164 - in trunk: . data src src/objects

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Thu Sep 8 18:04:27 EDT 2005


Author: jonas
Date: 2005-09-08 18:04:26 -0400 (Thu, 08 Sep 2005)
New Revision: 164

Added:
   trunk/data/erik.inf
Modified:
   trunk/TODO
   trunk/data/lv1.sce
   trunk/data/map1.cfg
   trunk/data/map2.cfg
   trunk/src/common.cpp
   trunk/src/common.h
   trunk/src/editor.cpp
   trunk/src/monsters_common.cpp
   trunk/src/objectpools.cpp
   trunk/src/objects/baleog.cpp
   trunk/src/objects/baleog.h
   trunk/src/objects/erik.cpp
   trunk/src/objects/fang.cpp
   trunk/src/objects/fang.h
   trunk/src/objects/olaf.cpp
   trunk/src/objects/olaf.h
   trunk/src/objects/scorch.cpp
   trunk/src/objects/zombie.cpp
   trunk/src/objects_common.cpp
   trunk/src/objects_common.h
   trunk/src/players_common.cpp
Log:
o Support for parameter loading from a file (file=<filename>):
    - The files are checked in getObjectbyName before loading the object
    - Added a new getFileParameters function
	- Erik's animation data is now completely file depending
      (added an erik.inf data file)
o Added all animations and audio files as parameters (animations not under
  default_parameters though...)
o Renamed some player animation names to include the name of the owner
o loadAnimation now takes a const ParameterMap&
o Fixed a few default options
o Editor Boxes are now placed such that they are inside the screen



Modified: trunk/TODO
===================================================================
--- trunk/TODO	2005-09-08 15:32:44 UTC (rev 163)
+++ trunk/TODO	2005-09-08 22:04:26 UTC (rev 164)
@@ -13,6 +13,7 @@
      o Create a better class hierarchy so we don't have a class playground...
      o Better handle the different game states and replace the current conditional model
      o IDEA: create dynamical plugins for all objects (or compile all in)
+     o map is not time ordered => leads to unwanted behaviour in editor and filelists
 
  o Move/crash/collisions:
      o move should be a property of a common object

Added: trunk/data/erik.inf
===================================================================
--- trunk/data/erik.inf	2005-09-08 15:32:44 UTC (rev 163)
+++ trunk/data/erik.inf	2005-09-08 22:04:26 UTC (rev 164)
@@ -0,0 +1,51 @@
+#ERIK
+anim_left=	            name=erik_idle_left:          scale=2:  bp_type=rightdown
+anim_right=                 name=erik_idle_right:         scale=2:  bp_type=leftdown
+anim_rock_left=             name=erik_rock_left:          scale=2:  bp_type=rightdown
+anim_rock_right=            name=erik_rock_right:         scale=2:  bp_type=leftdown
+anim_walk_left=             name=erik_walk_left:          scale=2:  bp_type=rightdown  
+anim_walk_right=            name=erik_walk_right:         scale=2:  bp_type=leftdown
+anim_push_left=             name=erik_push_left:          scale=2:  bp_type=rightdown  
+anim_push_right=            name=erik_push_right:         scale=2:  bp_type=leftdown
+anim_fall_middle=           name=erik_fall_middle:        scale=2
+anim_fall_left=             name=erik_fall_left:          scale=2:  bp_type=rightdown
+anim_fall_right=            name=erik_fall_right:         scale=2:  bp_type=leftdown
+anim_fall_fast_left=        name=erik_fall_fast_left:     scale=2:  bp_type=rightdown
+anim_fall_fast_right=       name=erik_fall_fast_right:    scale=2:  bp_type=leftdown
+anim_crash_left=            name=erik_crash_left:         scale=2:  bp_type=rightdown:    type=once
+anim_crash_right=           name=erik_crash_right:        scale=2:  bp_type=leftdown:     type=once
+anim_rope_left=             name=erik_rope_left:          scale=2:  bp_type=rightdown
+anim_rope_right=            name=erik_rope_right:         scale=2:  bp_type=leftdown
+anim_teleport_left=         name=erik_teleport_left:      scale=2:  bp_type=rightdown:    type=once
+anim_teleport_right=        name=erik_teleport_right:     scale=2:  bp_type=leftdown:     type=once
+anim_die_crash_left=        name=erik_die_crash_left:     scale=2:  bp_type=rightdown:    type=once
+anim_die_crash_right=       name=erik_die_crash_right:    scale=2:  bp_type=leftdown:     type=once
+anim_die_burn_left=         name=erik_die_burn_left:      scale=2:  bp_type=rightdown:    type=once
+anim_die_burn_right=        name=erik_die_burn_right:     scale=2:  bp_type=leftdown:     type=once
+anim_die_bones_left=        name=erik_die_bones_left:     scale=2:  bp_type=rightdown:    type=once
+anim_die_bones_right=       name=erik_die_bones_right:    scale=2:  bp_type=leftdown:     type=once
+anim_die_elec_left=         name=erik_die_elec_left:      scale=2:  bp_type=rightdown:    type=once
+anim_die_elec_right=        name=erik_die_elec_right:     scale=2:  bp_type=leftdown:     type=once
+anim_die_spike_left=        name=erik_die_spike_left:     scale=2:  bp_type=rightdown:    type=once
+anim_die_spike_right=       name=erik_die_spike_right:    scale=2:  bp_type=leftdown:     type=once
+anim_bar=                   name=bar_erik:                scale=2:                        type=once
+#anim_die_water and anim_climb not specified
+
+anim_erik_jump_left=        name=erik_jump_left:          scale=2:  bp_type=rightdown:    type=once
+anim_erik_jump_right=       name=erik_jump_right:         scale=2:  bp_type=leftdown:     type=once
+anim_erik_jump2_left=       name=erik_jump2_left:         scale=2:  bp_type=rightdown:    type=once
+anim_erik_jump2_right=      name=erik_jump2_right:        scale=2:  bp_type=leftdown:     type=once
+anim_erik_start_run_left=   name=erik_start_run_left:     scale=2:  bp_type=rightdown:    type=once
+anim_erik_start_run_right=  name=erik_start_run_right:    scale=2:  bp_type=leftdown:     type=once    
+anim_erik_run_left=         name=erik_run_left:           scale=2:  bp_type=rightdown:    type=once
+anim_erik_run_right=        name=erik_run_right:          scale=2:  bp_type=leftdown:     type=once    
+anim_erik_swim_left=        name=erik_swim_left:          scale=2:  bp_type=rightdown:    type=once         
+anim_erik_swim_right=       name=erik_swim_right:         scale=2:  bp_type=leftdown:     type=once    
+anim_erik_swim_up_left=     name=erik_swim_up_left:       scale=2:  bp_type=rightdown:    type=once
+anim_erik_swim_up_right=    name=erik_swim_up_right:      scale=2:  bp_type=leftdown:     type=once     
+anim_erik_hit_water_left=   name=erik_hit_water_left:     scale=2:  bp_type=rightdown:    type=once       
+anim_erik_hit_water_right=  name=erik_hit_water_right:    scale=2:  bp_type=leftdown:     type=once
+
+au_hit=                     erikhit.wav
+au_jump=                    rboots.wav
+#au_run not specified

Modified: trunk/data/lv1.sce
===================================================================
--- trunk/data/lv1.sce	2005-09-08 15:32:44 UTC (rev 163)
+++ trunk/data/lv1.sce	2005-09-08 22:04:26 UTC (rev 164)
@@ -1,4 +1,3 @@
-#HEADER
 #ENDHEADER
 
 map1

Modified: trunk/data/map1.cfg
===================================================================
--- trunk/data/map1.cfg	2005-09-08 15:32:44 UTC (rev 163)
+++ trunk/data/map1.cfg	2005-09-08 22:04:26 UTC (rev 164)
@@ -16,7 +16,7 @@
 Zombie 300 550
 #Plant 100 0 time_recover=5000
 
-Erik
+Erik file=erik.inf
 #Baleog
 Olaf 0 5
 Scorch 0 10

Modified: trunk/data/map2.cfg
===================================================================
--- trunk/data/map2.cfg	2005-09-08 15:32:44 UTC (rev 163)
+++ trunk/data/map2.cfg	2005-09-08 22:04:26 UTC (rev 164)
@@ -25,7 +25,7 @@
 
 #Vikings
 Fang   0 116
-Erik   0 116
+Erik   0 116 file=erik.inf
 Olaf   0 116
 #Scorch   0 116
 #Baleog   0 116

Modified: trunk/src/common.cpp
===================================================================
--- trunk/src/common.cpp	2005-09-08 15:32:44 UTC (rev 163)
+++ trunk/src/common.cpp	2005-09-08 22:04:26 UTC (rev 164)
@@ -34,6 +34,32 @@
     return s.str();
 }
 
+ParameterMap getFileParameters(const string& filelist) {
+    istringstream filelist_s(filelist);
+    ifstream file;
+    string filename,parameterlist;
+    ParameterMap file_parameters, line_parameters;
+    ParameterMap::iterator it;
+
+    while (std::getline(filelist_s,filename,':')) {
+        file.open((config.datadir+filename).c_str());
+        if (!file) continue;
+        while (getline(file,parameterlist)) {
+            if (parameterlist.empty()) continue;
+            if (parameterlist[0]=='#') continue;
+            line_parameters=getParameters(parameterlist);
+            it=line_parameters.begin();
+            while (it!=line_parameters.end()) {
+                file_parameters[(*it).first]=(*it).second;
+                ++it;
+            }
+        }
+        file.close();
+        file.clear();
+    }
+    return file_parameters;
+}
+
 ParameterMap getParameters(const string& parameterlist, char delim, char delimsub) {
     ParameterMap parameters;
     istringstream parameterlist_s(parameterlist);
@@ -79,7 +105,7 @@
     return parameterlist;
 }
 
-bool hasParam(ParameterMap& parameters, const string& str) {
+bool hasParam(const ParameterMap& parameters, const string& str) {
     if (parameters.find(str)!=parameters.end()) return true;
     else return false;
 }

Modified: trunk/src/common.h
===================================================================
--- trunk/src/common.h	2005-09-08 15:32:44 UTC (rev 163)
+++ trunk/src/common.h	2005-09-08 22:04:26 UTC (rev 164)
@@ -210,12 +210,14 @@
 /// \return 1 if the file was found, 0 otherwise
 /// \todo Create a better config format
 int readConfig(const string& filename);
+/// Set parameters from files
+ParameterMap getFileParameters(const string& filelist);
 /// Parse a string parameter list and return it as a map<string,string>
 ParameterMap getParameters(const string& parameterlist, char delim=',', char delimsub='=');
 /// Convert the parameter map to a string
 string putParameters(const ParameterMap& parameters, char delim=',', char delimsub='=');
 /// Returns true if the parameter was found
-bool hasParam(ParameterMap& parameters, const string& str);
+bool hasParam(const ParameterMap& parameters, const string& str);
 /// Returns the direction from the given string: simply include one or a
 /// combination of "up", "down", "left", "right" in the string
 Uint16 getDirFromString(const string& str);

Modified: trunk/src/editor.cpp
===================================================================
--- trunk/src/editor.cpp	2005-09-08 15:32:44 UTC (rev 163)
+++ trunk/src/editor.cpp	2005-09-08 22:04:26 UTC (rev 164)
@@ -117,6 +117,11 @@
     }
     area.w=maxwidth+2*WFONT;
     area.h=entries.size()*(DFONT+font->getHeight())+2*WFONT+font_title->getHeight();
+
+    area.x+=min(0,(int)(scenario->area->w-area.x-area.w));
+    area.y+=min(0,(int)(scenario->area->h-area.y-area.h));
+    if (area.x<0) area.x=0;
+    if (area.y<0) area.y=0;
     return area;
 }
  

Modified: trunk/src/monsters_common.cpp
===================================================================
--- trunk/src/monsters_common.cpp	2005-09-08 15:32:44 UTC (rev 163)
+++ trunk/src/monsters_common.cpp	2005-09-08 22:04:26 UTC (rev 164)
@@ -13,15 +13,17 @@
 Monster::Monster(Sint16 xcord, Sint16 ycord, ParameterMap& parameters):
   Character(xcord,ycord,parameters),
   Dai(0),
-  Dattack(0),
-  anim_left(new EmptyAnimation(&anim_right)),
-  anim_right(new EmptyAnimation()) {
+  Dattack(0) {
     state=STATE_FALL;
     otype|=OTYPE_MONSTER;
     enemy_types|=OTYPE_PLAYER;
     dense_types|=OTYPE_PLAYER;
 
     /* Parameters */
+    if (hasParam(parameters,"anim_left")) anim_left=loadAnimation(getParameters(parameters["anim_left"],':'));
+      else anim_left.reset(new EmptyAnimation(&anim_right));
+    if (hasParam(parameters,"anim_right")) anim_right=loadAnimation(getParameters(parameters["anim_right"],':'));
+      else anim_right.reset(new EmptyAnimation(&anim_orig));
     if (!hasParam(parameters,"maxhealth")) maxhealth=1;
     if (!hasParam(parameters,"health")) health=min(1,(int)maxhealth);
     if (!hasParam(parameters,"maxspeedx")) maxspeedx=50;

Modified: trunk/src/objectpools.cpp
===================================================================
--- trunk/src/objectpools.cpp	2005-09-08 15:32:44 UTC (rev 163)
+++ trunk/src/objectpools.cpp	2005-09-08 22:04:26 UTC (rev 164)
@@ -77,6 +77,7 @@
     while (i!=objectspool.end()) i=removeObject(i);
 }
 void ObjectsPool::setDefaultObjParam() {
+    Object::default_parameters["file"]="";
     Object::default_parameters["name"]="";
     Object::default_parameters["w"]="";
     Object::default_parameters["h"]="";
@@ -122,7 +123,7 @@
     Bomb::default_parameters["audio_bomb"]="explsn.wav";
 
     Character::default_parameters=Object::default_parameters;
-    Character::default_parameters["maxhealth"]=1;
+    Character::default_parameters["maxhealth"]="1";
     Character::default_parameters["health"]="1";
     Character::default_parameters["maxspeedx"]="300";
     Character::default_parameters["maxspeedy"]="0";
@@ -133,7 +134,9 @@
     TriggeredBomb::default_parameters["audio_bomb"]="explsn.wav";
 
     Monster::default_parameters=Character::default_parameters;
-    Monster::default_parameters["maxhealth"]=1;
+    Monster::default_parameters["anim_left"]="";
+    Monster::default_parameters["anim_right"]="";
+    Monster::default_parameters["maxhealth"]="1";
     Monster::default_parameters["health"]="1";
     Monster::default_parameters["maxspeedx"]="50";
     Monster::default_parameters["maxspeedy"]="0";
@@ -151,11 +154,32 @@
     Player::default_parameters["health"]="3";
     Player::default_parameters["maxspeedx"]="300";
     Player::default_parameters["maxspeedy"]="200";
+    Player::default_parameters["audio_land"]="dizzy.wav";
+    Player::default_parameters["audio_act"]="button.wav";
+    Player::default_parameters["audio_useerror"]="useerror.wav";
+    Player::default_parameters["audio_newitem"]="pickup.wav";
+    Player::default_parameters["audio_hit"]="vikhit.wav";
+    Player::default_parameters["audio_elec"]="elecdth.wav";
+    Player::default_parameters["audio_drown"]="drown.wav";
+    Player::default_parameters["audio_fire"]="fireball.wav";
+    Player::default_parameters["audio_die"]="bones.wav";
+    Player::default_parameters["audio_heal"]="usefood1.wav";
+
     Erik::default_parameters=Player::default_parameters;
+    Erik::default_parameters["audio_jump"]="rboots.wav";
+    Erik::default_parameters["audio_run"]="";
     Olaf::default_parameters=Player::default_parameters;
+    Olaf::default_parameters["audio_small"]="blob.wav";
+    Olaf::default_parameters["audio_big"]="unblob.wav";
+    Olaf::default_parameters["audio_fart"]="fart1.wav";
     Scorch::default_parameters=Player::default_parameters;
+    Scorch::default_parameters["audio_swing"]="flapwngs.wav";
+    Scorch::default_parameters["audio_tired"]="flwings.wav";
     Fang::default_parameters=Player::default_parameters;
+    Fang::default_parameters["audio_jump"]="fangjump.wav";
+    Fang::default_parameters["audio_claw"]="wolfjmp1.wav";
     Baleog::default_parameters=Player::default_parameters;
+    Baleog::default_parameters["audio_sword"]="swrdsw2.wav";
 }
 
 const ParameterMap& ObjectsPool::getDefaultObjParambyName(const string& obj) {
@@ -190,7 +214,18 @@
     else return empty_parameter;
 }
 
-Object* ObjectsPool::addObjectbyName(const string& obj, Sint16 x, Sint16 y, ParameterMap& parameters) {
+Object* ObjectsPool::addObjectbyName(const string& obj, Sint16 x, Sint16 y, ParameterMap& objparam) {
+    ParameterMap parameters;
+    if (hasParam(objparam,"file")) {
+        parameters=getFileParameters(objparam["file"]);
+        ParameterMap::iterator it=objparam.begin();
+        while (it!=objparam.end()) {
+            if ((*it).first!="file") parameters[(*it).first]=(*it).second;
+            ++it;
+        }
+    } else {
+        parameters=objparam;
+    }
     //Set names...
     if (!hasParam(parameters,"name")) parameters["name"]=getNextObjectName(obj);
 
@@ -207,6 +242,7 @@
     else if (obj=="Key")            return (addObject(new Key(x,y,parameters)));
     else if (obj=="Bomb")           return (addObject(new Bomb(x,y,parameters)));
     else if (obj=="TriggeredBomb")  return (addCharacter(new TriggeredBomb(x,y,parameters)));
+    else if (obj=="DeadPlayer")     return (addCharacter(new DeadPlayer(x,y,parameters)));
     else if (obj=="Erik")           return (addPlayer(new Erik(x,y,parameters)));
     else if (obj=="Olaf")           return (addPlayer(new Olaf(x,y,parameters)));
     else if (obj=="Baleog")         return (addPlayer(new Baleog(x,y,parameters)));

Modified: trunk/src/objects/baleog.cpp
===================================================================
--- trunk/src/objects/baleog.cpp	2005-09-08 15:32:44 UTC (rev 163)
+++ trunk/src/objects/baleog.cpp	2005-09-08 22:04:26 UTC (rev 164)
@@ -10,21 +10,28 @@
 
 Baleog::Baleog(Sint16 xcord, Sint16 ycord, ParameterMap& parameters):
   Player(xcord,ycord,parameters) {
-    anim_left=loadAnimation(scenario->imgcache->loadImage(1,"baleog1_left.bmp"));
-    anim_right=loadAnimation(scenario->imgcache->loadImage(1,"baleog1_right.bmp"));
-    anim_walk_left=loadAnimation(scenario->imgcache->loadImage("baleog1-run_left.png"),8);
-    anim_walk_right=loadAnimation(scenario->imgcache->loadImage(8,"baleog1-run_right.png"),8);
-    anim_crash_left=loadAnimation(scenario->imgcache->loadImage(1,"olaf1_land_left.bmp"),1,BP_LD,ATYPE_ONCE,calcFPS(1,T_IRR));
-    anim_crash_right=loadAnimation(scenario->imgcache->loadImage(1,"olaf1_land_right.bmp"),1,BP_RD,ATYPE_ONCE,calcFPS(1,T_IRR));
     weapon=Weapon(-1,W_STRIKE);
-    anim_sword_left=loadAnimation(scenario->imgcache->loadImage(8,"BaleogCyborg_Slash_left.png"),8,BP_MD,ATYPE_ONCE);
-    anim_sword_right=loadAnimation(scenario->imgcache->loadImage(8,"BaleogCyborg_Slash_right.png"),8,BP_MD,ATYPE_ONCE);
-    au_sword=scenario->sndcache->loadWAV("swrdsw2.wav");
+
+    /* Parameters */
+    if (!hasParam(parameters,"anim_left")) anim_left=loadAnimation(scenario->imgcache->loadImage(1,"baleog1_left.bmp"));
+    if (!hasParam(parameters,"anim_right")) anim_right=loadAnimation(scenario->imgcache->loadImage(1,"baleog1_right.bmp"));
+    if (!hasParam(parameters,"anim_walk_left")) anim_walk_left=loadAnimation(scenario->imgcache->loadImage("baleog1-run_left.png"),8);
+    if (!hasParam(parameters,"anim_walk_right")) anim_walk_right=loadAnimation(scenario->imgcache->loadImage(8,"baleog1-run_right.png"),8);
+    if (!hasParam(parameters,"anim_crash_left")) anim_crash_left=loadAnimation(scenario->imgcache->loadImage(1,"olaf1_land_left.bmp"),1,BP_LD,ATYPE_ONCE,calcFPS(1,T_IRR));
+    if (!hasParam(parameters,"anim_crash_right")) anim_crash_right=loadAnimation(scenario->imgcache->loadImage(1,"olaf1_land_right.bmp"),1,BP_RD,ATYPE_ONCE,calcFPS(1,T_IRR));
+
+    if (hasParam(parameters,"anim_baleog_sword_left")) anim_baleog_sword_left=loadAnimation(getParameters(parameters["anim_baleog_sword_left"],':'));
+      else anim_baleog_sword_left=loadAnimation(scenario->imgcache->loadImage(8,"BaleogCyborg_Slash_left.png"),8,BP_MD,ATYPE_ONCE);
+    if (hasParam(parameters,"anim_baleog_sword_right")) anim_baleog_sword_left=loadAnimation(getParameters(parameters["anim_baleog_sword_right"],':'));
+      else anim_baleog_sword_right=loadAnimation(scenario->imgcache->loadImage(8,"BaleogCyborg_Slash_right.png"),8,BP_MD,ATYPE_ONCE);
+
+    if (hasParam(parameters,"audio_sword")) au_sword=scenario->sndcache->loadWAV(parameters["audio_sword"]);
+      else au_sword=scenario->sndcache->loadWAV("swrdsw2.wav");
 }
 
 Baleog::~Baleog() { }
 
 //Baleog1: Sword attack
 void Baleog::in_sp1() {
-    setEvent(new EAttack(this,10,&weapon,(state&STATE_LEFT) ? DIR_LEFT : DIR_RIGHT,10,enemy_types,0,0,au_sword,(state&STATE_LEFT) ? anim_sword_left : anim_sword_right));
+    setEvent(new EAttack(this,10,&weapon,(state&STATE_LEFT) ? DIR_LEFT : DIR_RIGHT,10,enemy_types,0,0,au_sword,(state&STATE_LEFT) ? anim_baleog_sword_left : anim_baleog_sword_right));
 }

Modified: trunk/src/objects/baleog.h
===================================================================
--- trunk/src/objects/baleog.h	2005-09-08 15:32:44 UTC (rev 163)
+++ trunk/src/objects/baleog.h	2005-09-08 22:04:26 UTC (rev 164)
@@ -12,6 +12,6 @@
         virtual void in_sp1();
     private:
         Mix_Chunk* au_sword;
-        EmptyAnimationPtr anim_sword_left;
-        EmptyAnimationPtr anim_sword_right;
+        EmptyAnimationPtr anim_baleog_sword_left;
+        EmptyAnimationPtr anim_baleog_sword_right;
 };

Modified: trunk/src/objects/erik.cpp
===================================================================
--- trunk/src/objects/erik.cpp	2005-09-08 15:32:44 UTC (rev 163)
+++ trunk/src/objects/erik.cpp	2005-09-08 22:04:26 UTC (rev 164)
@@ -15,64 +15,29 @@
   jump(V_JUMP),
   jump2(V_JUMP2) {
     weapon=Weapon(-1,W_PRESSURE,WS_PRESSURE);
-/*
-    anim_left=loadAnimation(scenario->imgcache->loadImage("erik1_left.bmp"));
-    anim_right=loadAnimation(scenario->imgcache->loadImage(1,"erik1_right.bmp"));
-    anim_land_left=loadAnimation(scenario->imgcache->loadImage(1,"olaf1_land_left.bmp"),1,BP_LD,ATYPE_ONCE,calcFPS(1,T_IRR));
-    anim_land_right=loadAnimation(scenario->imgcache->loadImage(1,"olaf1_land_right.bmp"),1,BP_RD,ATYPE_ONCE,calcFPS(1,T_IRR));
-    anim_crash_left=loadAnimation(scenario->imgcache->loadImage(1,"olaf1_land_left.bmp"),1,BP_LD,ATYPE_ONCE,calcFPS(1,T_IRR));
-    anim_crash_right=loadAnimation(scenario->imgcache->loadImage(1,"olaf1_land_right.bmp"),1,BP_RD,ATYPE_ONCE,calcFPS(1,T_IRR));
-*/
-    anim_left=loadAnimation("erik_idle_left",config.lvlscale,BP_RD);
-    anim_right=loadAnimation("erik_idle_right",config.lvlscale,BP_LD);
-    anim_rock_left=loadAnimation("erik_rock_left",config.lvlscale,BP_RD);
-    anim_rock_right=loadAnimation("erik_rock_right",config.lvlscale,BP_LD);
-    anim_walk_left=loadAnimation("erik_walk_left",config.lvlscale,BP_RD);
-    anim_walk_right=loadAnimation("erik_walk_right",config.lvlscale,BP_LD);
-    anim_push_left=loadAnimation("erik_push_left",config.lvlscale,BP_RD);
-    anim_push_right=loadAnimation("erik_push_right",config.lvlscale,BP_LD);
-    anim_fall_middle=loadAnimation("erik_fall_middle",config.lvlscale);
-    anim_fall_left=loadAnimation("erik_fall_left",config.lvlscale,BP_RD);
-    anim_fall_right=loadAnimation("erik_fall_right",config.lvlscale,BP_LD);
-    anim_fall_fast_left=loadAnimation("erik_fall_fast_left",config.lvlscale,BP_RD);
-    anim_fall_fast_right=loadAnimation("erik_fall_fast_right",config.lvlscale,BP_LD);
-    anim_crash_left=loadAnimation("erik_crash_left",config.lvlscale,BP_RD,ATYPE_ONCE);
-    anim_crash_right=loadAnimation("erik_crash_right",config.lvlscale,BP_LD,ATYPE_ONCE);
-    anim_rope_left=loadAnimation("erik_rope_left",config.lvlscale,BP_RD);
-    anim_rope_right=loadAnimation("erik_rope_right",config.lvlscale,BP_LD);
-    anim_teleport_left=loadAnimation("erik_teleport_left",config.lvlscale,BP_RD,ATYPE_ONCE);
-    anim_teleport_right=loadAnimation("erik_teleport_right",config.lvlscale,BP_LD,ATYPE_ONCE);
-    anim_die_crash_left=loadAnimation("erik_die_crash_left",config.lvlscale,BP_RD,ATYPE_ONCE);
-    anim_die_crash_right=loadAnimation("erik_die_crash_right",config.lvlscale,BP_LD,ATYPE_ONCE);
-    anim_die_burn_left=loadAnimation("erik_die_burn_left",config.lvlscale,BP_RD,ATYPE_ONCE);
-    anim_die_burn_right=loadAnimation("erik_die_burn_right",config.lvlscale,BP_LD,ATYPE_ONCE);
-    anim_die_bones_left=loadAnimation("erik_die_bones_left",config.lvlscale,BP_RD,ATYPE_ONCE);
-    anim_die_bones_right=loadAnimation("erik_die_bones_right",config.lvlscale,BP_LD,ATYPE_ONCE);
-    anim_die_elec_left=loadAnimation("erik_die_elec_left",config.lvlscale,BP_RD,ATYPE_ONCE);
-    anim_die_elec_right=loadAnimation("erik_die_elec_right",config.lvlscale,BP_LD,ATYPE_ONCE);
-    anim_die_spike_left=loadAnimation("erik_die_spike_left",config.lvlscale,BP_RD,ATYPE_ONCE);
-    anim_die_spike_right=loadAnimation("erik_die_spike_right",config.lvlscale,BP_LD,ATYPE_ONCE);
-    anim_bar=loadAnimation("bar_erik",config.lvlscale,BP_MD,ATYPE_ONCE);
-    /* anim_die_water is missing as eric doesn't die under water, anim_climb is missing as well */
 
-    anim_erik_jump_left=loadAnimation("erik_jump_left",config.lvlscale,BP_RD,ATYPE_ONCE);
-    anim_erik_jump_right=loadAnimation("erik_jump_right",config.lvlscale,BP_LD,ATYPE_ONCE);
-    anim_erik_jump2_left=loadAnimation("erik_jump2_left",config.lvlscale,BP_RD,ATYPE_ONCE);
-    anim_erik_jump2_right=loadAnimation("erik_jump2_right",config.lvlscale,BP_LD,ATYPE_ONCE);
-    anim_erik_start_run_left=loadAnimation("erik_start_run_left",config.lvlscale,BP_RD,ATYPE_ONCE);
-    anim_erik_start_run_right=loadAnimation("erik_start_run_right",config.lvlscale,BP_LD,ATYPE_ONCE);    
-    anim_erik_run_left=loadAnimation("erik_run_left",config.lvlscale,BP_RD,ATYPE_ONCE);
-    anim_erik_run_right=loadAnimation("erik_run_right",config.lvlscale,BP_LD,ATYPE_ONCE);    
-    anim_erik_swim_left=loadAnimation("erik_swim_left",config.lvlscale,BP_RD,ATYPE_ONCE);         
-    anim_erik_swim_right=loadAnimation("erik_swim_right",config.lvlscale,BP_LD,ATYPE_ONCE);    
-    anim_erik_swim_up_left=loadAnimation("erik_swim_up_left",config.lvlscale,BP_RD,ATYPE_ONCE);
-    anim_erik_swim_up_right=loadAnimation("erik_swim_up_right",config.lvlscale,BP_LD,ATYPE_ONCE);     
-    anim_erik_hit_water_left=loadAnimation("erik_hit_water_left",config.lvlscale,BP_RD,ATYPE_ONCE);       
-    anim_erik_hit_water_right=loadAnimation("erik_hit_water_right",config.lvlscale,BP_LD,ATYPE_ONCE);
+    /* Parameters */
+    if (hasParam(parameters,"anim_erik_jump_left"))          anim_erik_jump_left=loadAnimation(getParameters(parameters["anim_erik_jump_left"],':'));
+    if (hasParam(parameters,"anim_erik_jump_right"))         anim_erik_jump_right=loadAnimation(getParameters(parameters["anim_erik_jump_right"],':'));
+    if (hasParam(parameters,"anim_erik_jump2_left"))         anim_erik_jump2_left=loadAnimation(getParameters(parameters["anim_erik_jump2_left"],':'));
+    if (hasParam(parameters,"anim_erik_jump2_right"))        anim_erik_jump2_right=loadAnimation(getParameters(parameters["anim_erik_jump2_right"],':'));
+    if (hasParam(parameters,"anim_erik_start_run_left"))     anim_erik_start_run_left=loadAnimation(getParameters(parameters["anim_erik_start_run_left"],':'));
+    if (hasParam(parameters,"anim_erik_start_run_right"))    anim_erik_start_run_right=loadAnimation(getParameters(parameters["anim_erik_start_run_right"],':'));
+    if (hasParam(parameters,"anim_erik_run_left"))           anim_erik_run_left=loadAnimation(getParameters(parameters["anim_erik_run_left"],':'));
+    if (hasParam(parameters,"anim_erik_run_right"))          anim_erik_run_right=loadAnimation(getParameters(parameters["anim_erik_run_right"],':'));
+    if (hasParam(parameters,"anim_erik_swim_left"))          anim_erik_swim_left=loadAnimation(getParameters(parameters["anim_erik_swim_left"],':'));
+    if (hasParam(parameters,"anim_erik_swim_right"))         anim_erik_swim_right=loadAnimation(getParameters(parameters["anim_erik_swim_right"],':'));
+    if (hasParam(parameters,"anim_erik_swim_up_left"))       anim_erik_swim_up_left=loadAnimation(getParameters(parameters["anim_erik_swim_up_left"],':'));
+    if (hasParam(parameters,"anim_erik_swim_up_right"))      anim_erik_swim_up_right=loadAnimation(getParameters(parameters["anim_erik_swim_up_right"],':'));
+    if (hasParam(parameters,"anim_erik_hit_water_left"))     anim_erik_hit_water_left=loadAnimation(getParameters(parameters["anim_erik_hit_water_left"],':'));
+    if (hasParam(parameters,"anim_erik_hit_water_right"))    anim_erik_hit_water_right=loadAnimation(getParameters(parameters["anim_erik_hit_water_right"],':'));
 
-    au_jump=scenario->sndcache->loadWAV("rboots.wav");
-    au_hit=scenario->sndcache->loadWAV("erikhit.wav");
-    au_run=NULL;
+    if (!hasParam(parameters,"audio_hit")) au_hit=scenario->sndcache->loadWAV("erikhit.wav");
+
+    if (hasParam(parameters,"audio_jump")) au_jump=scenario->sndcache->loadWAV(parameters["audio_jump"]);
+      else au_jump=scenario->sndcache->loadWAV("rboots.wav");
+    if (hasParam(parameters,"audio_run")) au_jump=scenario->sndcache->loadWAV(parameters["audio_run"]);
+      else au_run=NULL;
 }
 
 Erik::~Erik() { }

Modified: trunk/src/objects/fang.cpp
===================================================================
--- trunk/src/objects/fang.cpp	2005-09-08 15:32:44 UTC (rev 163)
+++ trunk/src/objects/fang.cpp	2005-09-08 22:04:26 UTC (rev 164)
@@ -12,17 +12,26 @@
   Player(xcord,ycord,parameters),
   jump(V_JUMP) {
     weapon=Weapon(-1,W_STRIKE);
-    anim_left=loadAnimation(scenario->imgcache->loadImage(4,"Fang_Breath_left.png"),4);
-    anim_right=loadAnimation(scenario->imgcache->loadImage(4,"Fang_Breath_right.png"),4);
-    anim_walk_left=loadAnimation(scenario->imgcache->loadImage(8,"Fang_walk_left.png"),8);
-    anim_walk_right=loadAnimation(scenario->imgcache->loadImage(8,"Fang_walk_right.png"),8);
-    anim_crash_left=loadAnimation(scenario->imgcache->loadImage(1,"olaf1_land_left.bmp"),1,BP_MD,ATYPE_ONCE,calcFPS(1,T_IRR));
-    anim_crash_right=loadAnimation(scenario->imgcache->loadImage(1,"olaf1_land_right.bmp"),1,BP_MD,ATYPE_ONCE,calcFPS(1,T_IRR));
-    anim_claw_left=loadAnimation(scenario->imgcache->loadImage(8,"Fang_Clawslash_left.png"),8,BP_MD,ATYPE_ONCE);
-    anim_claw_right=loadAnimation(scenario->imgcache->loadImage(8,"Fang_Clawslash_right.png"),8,BP_MD,ATYPE_ONCE);
-    au_hit=scenario->sndcache->loadWAV("wolfhit.wav");
-    au_claw=scenario->sndcache->loadWAV("wolfjmp1.wav");
-    au_jump=scenario->sndcache->loadWAV("fangjump.wav");
+
+    /* Parameters */
+    if (!hasParam(parameters,"anim_left"))          anim_left=loadAnimation(scenario->imgcache->loadImage(4,"Fang_Breath_left.png"),4);
+    if (!hasParam(parameters,"anim_right"))         anim_right=loadAnimation(scenario->imgcache->loadImage(4,"Fang_Breath_right.png"),4);
+    if (!hasParam(parameters,"anim_walk_left"))     anim_walk_left=loadAnimation(scenario->imgcache->loadImage(8,"Fang_walk_left.png"),8);
+    if (!hasParam(parameters,"anim_walk_right"))    anim_walk_right=loadAnimation(scenario->imgcache->loadImage(8,"Fang_walk_right.png"),8);
+    if (!hasParam(parameters,"anim_crash_left"))    anim_crash_left=loadAnimation(scenario->imgcache->loadImage(1,"olaf1_land_left.bmp"),1,BP_MD,ATYPE_ONCE,calcFPS(1,T_IRR));
+    if (!hasParam(parameters,"anim_crash_right"))   anim_crash_right=loadAnimation(scenario->imgcache->loadImage(1,"olaf1_land_right.bmp"),1,BP_MD,ATYPE_ONCE,calcFPS(1,T_IRR));
+
+    if (hasParam(parameters,"anim_fang_claw_left")) anim_fang_claw_left=loadAnimation(getParameters(parameters["anim_fang_claw_left"],':'));
+      else anim_fang_claw_left=loadAnimation(scenario->imgcache->loadImage(8,"Fang_Clawslash_left.png"),8,BP_MD,ATYPE_ONCE);
+    if (hasParam(parameters,"anim_fang_claw_right")) anim_fang_claw_right=loadAnimation(getParameters(parameters["anim_fang_claw_right"],':'));
+      else anim_fang_claw_right=loadAnimation(scenario->imgcache->loadImage(8,"Fang_Clawslash_right.png"),8,BP_MD,ATYPE_ONCE);
+
+    if (!hasParam(parameters,"audio_hit")) au_hit=scenario->sndcache->loadWAV("wolfhit.wav");
+
+    if (hasParam(parameters,"audio_claw")) au_claw=scenario->sndcache->loadWAV(parameters["audio_claw"]);
+      else au_claw=scenario->sndcache->loadWAV("wolfjmp1.wav");
+    if (hasParam(parameters,"audio_jump")) au_jump=scenario->sndcache->loadWAV(parameters["audio_jump"]);
+      else au_jump=scenario->sndcache->loadWAV("fangjump.wav");
 }
 
 Fang::~Fang() { }
@@ -82,7 +91,7 @@
 }
 
 void Fang::in_sp2() {
-    setEvent(new EAttack(this,10,&weapon,(state&STATE_LEFT) ? DIR_LEFT : DIR_RIGHT,10,enemy_types,0,0,au_claw,(state&STATE_LEFT) ? anim_claw_left : anim_claw_right));
+    setEvent(new EAttack(this,10,&weapon,(state&STATE_LEFT) ? DIR_LEFT : DIR_RIGHT,10,enemy_types,0,0,au_claw,(state&STATE_LEFT) ? anim_fang_claw_left : anim_fang_claw_right));
 }
 
 void Fang::crash(Uint16 dir) {

Modified: trunk/src/objects/fang.h
===================================================================
--- trunk/src/objects/fang.h	2005-09-08 15:32:44 UTC (rev 163)
+++ trunk/src/objects/fang.h	2005-09-08 22:04:26 UTC (rev 164)
@@ -35,8 +35,8 @@
         virtual void clearStates(bool reset=false);
     private:
         virtual void crash(Uint16 dir=DIR_DOWN);
-        EmptyAnimationPtr anim_claw_left;
-        EmptyAnimationPtr anim_claw_right;
+        EmptyAnimationPtr anim_fang_claw_left;
+        EmptyAnimationPtr anim_fang_claw_right;
         Mix_Chunk* au_jump;
         Mix_Chunk* au_claw;
         Sint16 jump;

Modified: trunk/src/objects/olaf.cpp
===================================================================
--- trunk/src/objects/olaf.cpp	2005-09-08 15:32:44 UTC (rev 163)
+++ trunk/src/objects/olaf.cpp	2005-09-08 22:04:26 UTC (rev 164)
@@ -12,30 +12,47 @@
 Olaf::Olaf(Sint16 xcord, Sint16 ycord, ParameterMap& parameters):
   Player(xcord,ycord,parameters),
   fart(V_FART) {
-    anim_left=loadAnimation(scenario->imgcache->loadImage(1,"olaf1_left.bmp"));
-    anim_right=loadAnimation(scenario->imgcache->loadImage(1,"olaf1_right.bmp"));
-    anim_walk_left=loadAnimation(scenario->imgcache->loadImage(8,"olaf1-run_left.png"),8);
-    anim_walk_right=loadAnimation(scenario->imgcache->loadImage(8,"olaf1-run_right.png"),8);
-    anim_crash_left=loadAnimation(scenario->imgcache->loadImage(1,"olaf1_land_left.bmp"),1,BP_MD,ATYPE_ONCE,calcFPS(1,T_IRR));
-    anim_crash_right=loadAnimation(scenario->imgcache->loadImage(1,"olaf1_land_right.bmp"),1,BP_MD,ATYPE_ONCE,calcFPS(1,T_IRR));
-    anim_die_bones_left=loadAnimation(scenario->imgcache->loadImage(60,0,"kuru.bmp"),12,BP_MD,ATYPE_ONCE,25);
+    /* Parameters */
+    if (!hasParam(parameters,"anim_left"))              anim_left=loadAnimation(scenario->imgcache->loadImage(1,"olaf1_left.bmp"));
+    if (!hasParam(parameters,"anim_right"))             anim_right=loadAnimation(scenario->imgcache->loadImage(1,"olaf1_right.bmp"));
+    if (!hasParam(parameters,"anim_walk_left"))         anim_walk_left=loadAnimation(scenario->imgcache->loadImage(8,"olaf1-run_left.png"),8);
+    if (!hasParam(parameters,"anim_walk_right"))        anim_walk_right=loadAnimation(scenario->imgcache->loadImage(8,"olaf1-run_right.png"),8);
+    if (!hasParam(parameters,"anim_crash_left"))        anim_crash_left=loadAnimation(scenario->imgcache->loadImage(1,"olaf1_land_left.bmp"),1,BP_MD,ATYPE_ONCE,calcFPS(1,T_IRR));
+    if (!hasParam(parameters,"anim_crash_right"))       anim_crash_right=loadAnimation(scenario->imgcache->loadImage(1,"olaf1_land_right.bmp"),1,BP_MD,ATYPE_ONCE,calcFPS(1,T_IRR));
+    if (!hasParam(parameters,"anim_die_bones_left"))    anim_die_bones_left=loadAnimation(scenario->imgcache->loadImage(60,0,"kuru.bmp"),12,BP_MD,ATYPE_ONCE,25);
 
-    anim_small_left=loadAnimation(scenario->imgcache->loadImage(7,"Olaf_Small_Walk_left.png"),1);
-    anim_small_right=loadAnimation(scenario->imgcache->loadImage(7,"Olaf_Small_Walk_right.png"),1);
-    anim_walk_small_left=loadAnimation(scenario->imgcache->loadImage(7,"Olaf_Small_Walk_left.png"),7,BP_MD,ATYPE_LOOP,3.5);
-    anim_walk_small_right=loadAnimation(scenario->imgcache->loadImage(7,"Olaf_Small_Walk_right.png"),7,BP_MD,ATYPE_LOOP,3.5);
-    anim_shield_left=loadAnimation(scenario->imgcache->loadImage(1,"olaf1_fall_shield_left.bmp"));
-    anim_shield_right=loadAnimation(scenario->imgcache->loadImage(1,"olaf1_fall_shield_right.bmp"));
-    anim_walk_shield_left.reset(new EmptyAnimation(&anim_shield_left));
-    anim_walk_shield_right.reset(new EmptyAnimation(&anim_shield_right));
-    anim_fall_shield_left.reset(new EmptyAnimation(&anim_shield_left));
-    anim_fall_shield_right.reset(new EmptyAnimation(&anim_shield_right));
-    au_small=scenario->sndcache->loadWAV("blob.wav");
-    au_big=scenario->sndcache->loadWAV("unblob.wav");
-    au_fart=scenario->sndcache->loadWAV("fart1.wav");
-    au_hit=scenario->sndcache->loadWAV("fathit.wav");
+    if (hasParam(parameters,"anim_olaf_small_left"))          anim_olaf_small_left=loadAnimation(getParameters(parameters["anim_olaf_small_left"],':'));
+      else anim_olaf_small_left=loadAnimation(scenario->imgcache->loadImage(7,"Olaf_Small_Walk_left.png"),1);
+    if (hasParam(parameters,"anim_olaf_small_right"))         anim_olaf_small_right=loadAnimation(getParameters(parameters["anim_olaf_small_right"],':'));
+      else anim_olaf_small_right=loadAnimation(scenario->imgcache->loadImage(7,"Olaf_Small_Walk_right.png"),1);
+    if (hasParam(parameters,"anim_olaf_walk_small_left"))     anim_olaf_walk_small_left=loadAnimation(getParameters(parameters["anim_olaf_walk_small_left"],':'));
+      else anim_olaf_walk_small_left=loadAnimation(scenario->imgcache->loadImage(7,"Olaf_Small_Walk_left.png"),7,BP_MD,ATYPE_LOOP,3.5);
+    if (hasParam(parameters,"anim_olaf_walk_small_right"))    anim_olaf_walk_small_right=loadAnimation(getParameters(parameters["anim_olaf_walk_small_right"],':'));
+      else anim_olaf_walk_small_right=loadAnimation(scenario->imgcache->loadImage(7,"Olaf_Small_Walk_right.png"),7,BP_MD,ATYPE_LOOP,3.5);
+    if (hasParam(parameters,"anim_olaf_shield_left"))         anim_olaf_shield_left=loadAnimation(getParameters(parameters["anim_olaf_shield_left"],':'));
+      else anim_olaf_shield_left=loadAnimation(scenario->imgcache->loadImage(1,"olaf1_fall_shield_left.bmp"));
+    if (hasParam(parameters,"anim_olaf_shield_right"))        anim_olaf_shield_right=loadAnimation(getParameters(parameters["anim_olaf_shield_right"],':'));
+      else anim_olaf_shield_right=loadAnimation(scenario->imgcache->loadImage(1,"olaf1_fall_shield_right.bmp"));
+    if (hasParam(parameters,"anim_olaf_walk_shield_left"))    anim_olaf_walk_shield_left=loadAnimation(getParameters(parameters["anim_olaf_walk_shield_left"],':'));
+      else anim_olaf_walk_shield_left.reset(new EmptyAnimation(&anim_olaf_shield_left));
+    if (hasParam(parameters,"anim_olaf_walk_shield_right"))   anim_olaf_walk_shield_right=loadAnimation(getParameters(parameters["anim_olaf_walk_shield_right"],':'));
+      else anim_olaf_walk_shield_right.reset(new EmptyAnimation(&anim_olaf_shield_right));
+    if (hasParam(parameters,"anim_olaf_fall_shield_left"))    anim_olaf_fall_shield_left=loadAnimation(getParameters(parameters["anim_olaf_fall_shield_left"],':'));
+      else anim_olaf_fall_shield_left.reset(new EmptyAnimation(&anim_olaf_shield_left));
+    if (hasParam(parameters,"anim_olaf_fall_shield_right"))   anim_olaf_fall_shield_right=loadAnimation(getParameters(parameters["anim_olaf_fall_shield_right"],':'));
+      else anim_olaf_fall_shield_right.reset(new EmptyAnimation(&anim_olaf_shield_right));
+
+    if (!hasParam(parameters,"audio_hit")) au_hit=scenario->sndcache->loadWAV("fathit.wav");
+
+    if (hasParam(parameters,"audio_small")) au_small=scenario->sndcache->loadWAV(parameters["audio_small"]);
+      else au_small=scenario->sndcache->loadWAV("blob.wav");
+    if (hasParam(parameters,"audio_big")) au_big=scenario->sndcache->loadWAV(parameters["audio_big"]);
+      else au_big=scenario->sndcache->loadWAV("unblob.wav");
+    if (hasParam(parameters,"audio_fart")) au_fart=scenario->sndcache->loadWAV(parameters["audio_fart"]);
+      else au_fart=scenario->sndcache->loadWAV("fart1.wav");
+
     normal_size=pos;
-    small_size=anim_small_right->getFrameDim();
+    small_size=anim_olaf_small_right->getFrameDim();
 }
 
 Olaf::~Olaf() { }
@@ -43,42 +60,42 @@
 void Olaf::updateAnimState() {
     if (state&STATE_SMALL) {
         if (state&STATE_LEFT) {
-            anim_small_left->setFallBack(&anim_walk_left);
-            setAnim(anim_walk_small_left);
-            anim_small_left->setFallBack(&anim_left);
+            anim_olaf_small_left->setFallBack(&anim_walk_left);
+            setAnim(anim_olaf_walk_small_left);
+            anim_olaf_small_left->setFallBack(&anim_left);
         } else {
-            anim_small_right->setFallBack(&anim_walk_right);
-            setAnim(anim_walk_small_right);
-            anim_small_right->setFallBack(&anim_right);
+            anim_olaf_small_right->setFallBack(&anim_walk_right);
+            setAnim(anim_olaf_walk_small_right);
+            anim_olaf_small_right->setFallBack(&anim_right);
         }
     } else if (state&STATE_SHIELD) {
         otype|=OTYPE_DENSE_D;
         if (state&STATE_LEFT) {
             if (state&STATE_FALL) {
-                anim_shield_left->setFallBack(&anim_fall_left);
-                setAnim(anim_fall_shield_left);
-                anim_shield_left->setFallBack(&anim_left);
+                anim_olaf_shield_left->setFallBack(&anim_fall_left);
+                setAnim(anim_olaf_fall_shield_left);
+                anim_olaf_shield_left->setFallBack(&anim_left);
             } else {
                 if (state&STATE_MLEFT) {
-                    anim_shield_left->setFallBack(&anim_walk_left);
-                    setAnim(anim_walk_shield_left);
-                    anim_shield_left->setFallBack(&anim_left);
+                    anim_olaf_shield_left->setFallBack(&anim_walk_left);
+                    setAnim(anim_olaf_walk_shield_left);
+                    anim_olaf_shield_left->setFallBack(&anim_left);
                 } else {
-                    setAnim(anim_shield_left);
+                    setAnim(anim_olaf_shield_left);
                 }
             }
         } else {
             if (state&STATE_FALL) {
-                anim_shield_right->setFallBack(&anim_fall_right);
-                setAnim(anim_fall_shield_right);
-                anim_shield_right->setFallBack(&anim_right);
+                anim_olaf_shield_right->setFallBack(&anim_fall_right);
+                setAnim(anim_olaf_fall_shield_right);
+                anim_olaf_shield_right->setFallBack(&anim_right);
             } else {
                 if (state&STATE_MRIGHT) {
-                    anim_shield_right->setFallBack(&anim_walk_right);
-                    setAnim(anim_walk_shield_right);
-                    anim_shield_right->setFallBack(&anim_right);
+                    anim_olaf_shield_right->setFallBack(&anim_walk_right);
+                    setAnim(anim_olaf_walk_shield_right);
+                    anim_olaf_shield_right->setFallBack(&anim_right);
                 } else {
-                    setAnim(anim_shield_right);
+                    setAnim(anim_olaf_shield_right);
                 }
             }
         }

Modified: trunk/src/objects/olaf.h
===================================================================
--- trunk/src/objects/olaf.h	2005-09-08 15:32:44 UTC (rev 163)
+++ trunk/src/objects/olaf.h	2005-09-08 22:04:26 UTC (rev 164)
@@ -42,16 +42,16 @@
         /// \return True if successfull
         inline bool trySmall(bool small);
         //@{
-        EmptyAnimationPtr anim_small_left;
-        EmptyAnimationPtr anim_small_right;
-        EmptyAnimationPtr anim_walk_small_left;
-        EmptyAnimationPtr anim_walk_small_right;
-        EmptyAnimationPtr anim_shield_left;
-        EmptyAnimationPtr anim_shield_right;
-        EmptyAnimationPtr anim_walk_shield_left;
-        EmptyAnimationPtr anim_walk_shield_right;
-        EmptyAnimationPtr anim_fall_shield_left;
-        EmptyAnimationPtr anim_fall_shield_right;
+        EmptyAnimationPtr anim_olaf_small_left;
+        EmptyAnimationPtr anim_olaf_small_right;
+        EmptyAnimationPtr anim_olaf_walk_small_left;
+        EmptyAnimationPtr anim_olaf_walk_small_right;
+        EmptyAnimationPtr anim_olaf_shield_left;
+        EmptyAnimationPtr anim_olaf_shield_right;
+        EmptyAnimationPtr anim_olaf_walk_shield_left;
+        EmptyAnimationPtr anim_olaf_walk_shield_right;
+        EmptyAnimationPtr anim_olaf_fall_shield_left;
+        EmptyAnimationPtr anim_olaf_fall_shield_right;
         //@}
         //@{
         Mix_Chunk* au_small;

Modified: trunk/src/objects/scorch.cpp
===================================================================
--- trunk/src/objects/scorch.cpp	2005-09-08 15:32:44 UTC (rev 163)
+++ trunk/src/objects/scorch.cpp	2005-09-08 22:04:26 UTC (rev 164)
@@ -12,15 +12,21 @@
   Player(xcord,ycord,parameters),
   left_wings(SCORCH_MAX_WINGS),
   wing(V_FLY) {
-    anim_left=loadAnimation(scenario->imgcache->loadImage(1,"baleog1_left.bmp"));
-    anim_right=loadAnimation(scenario->imgcache->loadImage(1,"baleog1_right.bmp"));
-    anim_walk_left=loadAnimation(scenario->imgcache->loadImage(8,"baleog1-run_left.png"),8);
-    anim_walk_right=loadAnimation(scenario->imgcache->loadImage(8,"baleog1-run_right.png"),8);
-    anim_crash_left=loadAnimation(scenario->imgcache->loadImage(1,"olaf1_land_left.bmp"),1,BP_MD,ATYPE_ONCE,calcFPS(1,T_IRR));
-    anim_crash_right=loadAnimation(scenario->imgcache->loadImage(1,"olaf1_land_right.bmp"),1,BP_MD,ATYPE_ONCE,calcFPS(1,T_IRR));
-    au_swing=scenario->sndcache->loadWAV("flapwngs.wav");
-    au_tired=scenario->sndcache->loadWAV("flwings.wav");
-    au_hit=scenario->sndcache->loadWAV("draghit.wav");
+
+    /* Parameters */
+    if (!hasParam(parameters,"anim_left"))          anim_left=loadAnimation(scenario->imgcache->loadImage(1,"baleog1_left.bmp"));
+    if (!hasParam(parameters,"anim_right"))         anim_right=loadAnimation(scenario->imgcache->loadImage(1,"baleog1_right.bmp"));
+    if (!hasParam(parameters,"anim_walk_left"))     anim_walk_left=loadAnimation(scenario->imgcache->loadImage(8,"baleog1-run_left.png"),8);
+    if (!hasParam(parameters,"anim_walk_right"))    anim_walk_right=loadAnimation(scenario->imgcache->loadImage(8,"baleog1-run_right.png"),8);
+    if (!hasParam(parameters,"anim_crash_left"))    anim_crash_left=loadAnimation(scenario->imgcache->loadImage(1,"olaf1_land_left.bmp"),1,BP_MD,ATYPE_ONCE,calcFPS(1,T_IRR));
+    if (!hasParam(parameters,"anim_crash_right"))   anim_crash_right=loadAnimation(scenario->imgcache->loadImage(1,"olaf1_land_right.bmp"),1,BP_MD,ATYPE_ONCE,calcFPS(1,T_IRR));
+
+    if (!hasParam(parameters,"audio_hit")) au_hit=scenario->sndcache->loadWAV("draghit.wav");
+
+    if (hasParam(parameters,"audio_swing")) au_swing=scenario->sndcache->loadWAV(parameters["audio_swing"]);
+      else au_swing=scenario->sndcache->loadWAV("flapwngs.wav");
+    if (hasParam(parameters,"audio_tired")) au_swing=scenario->sndcache->loadWAV(parameters["audio_tired"]);
+      else au_tired=scenario->sndcache->loadWAV("flwings.wav");
 }
 
 Scorch::~Scorch() { }

Modified: trunk/src/objects/zombie.cpp
===================================================================
--- trunk/src/objects/zombie.cpp	2005-09-08 15:32:44 UTC (rev 163)
+++ trunk/src/objects/zombie.cpp	2005-09-08 22:04:26 UTC (rev 164)
@@ -13,11 +13,12 @@
 Zombie::Zombie(Sint16 xcord, Sint16 ycord, ParameterMap& parameters):
   Monster(xcord,ycord,parameters),
   T_Attack_Bite(1500) {
-    anim_left=loadAnimation(scenario->imgcache->loadImage(2,"olaf1_left.bmp"),2,BP_MD,ATYPE_LOOP,2);
-    anim_right=loadAnimation(scenario->imgcache->loadImage(2,"olaf1_right.bmp"),2,BP_MD,ATYPE_LOOP,2);
     weapon=Weapon(-1,W_STRIKE);
 
     /* Parameters */
+    if (!hasParam(parameters,"anim_left"))  anim_left=loadAnimation(scenario->imgcache->loadImage(2,"olaf1_left.bmp"),2,BP_MD,ATYPE_LOOP,2);
+    if (!hasParam(parameters,"anim_right")) anim_right=loadAnimation(scenario->imgcache->loadImage(2,"olaf1_right.bmp"),2,BP_MD,ATYPE_LOOP,2);
+
     if (!hasParam(parameters,"maxspeedx")) maxspeedx=80;
     if (hasParam(parameters,"audio_attack")) au_attack=scenario->sndcache->loadWAV(parameters["audio_attack"]);
       else au_attack=scenario->sndcache->loadWAV("clang.wav");

Modified: trunk/src/objects_common.cpp
===================================================================
--- trunk/src/objects_common.cpp	2005-09-08 15:32:44 UTC (rev 163)
+++ trunk/src/objects_common.cpp	2005-09-08 22:04:26 UTC (rev 164)
@@ -13,7 +13,6 @@
   otype(NOTHING),
   delete_flag(false) {
     onum=++scenario->max_obj_num;
-    animation.reset(new EmptyAnimation(&anim_orig));
 
     /* Parameters */
     if (hasParam(parameters,"anim")) {
@@ -35,6 +34,7 @@
       else pos.h=(Uint16)(DATA_LVLPLAYER_H*sqrt(config.lvlscale>=0 ? config.lvlscale : -1/config.lvlscale)+0.5);
     pos.x=xcord;
     pos.y=ycord;
+    animation=anim_orig;
 }
 
 Object::~Object() {
@@ -144,99 +144,99 @@
     return anim;
 }
 
-EmptyAnimationPtr Object::loadAnimation(ParameterMap& parameters) {
+EmptyAnimationPtr Object::loadAnimation(const ParameterMap& parameters) {
     double scale_factor=1;
     BasePointType bp_type=BP_MD;
     Uint16 animation_type=ATYPE_LOOP;
     double fps=0;
     AllignType allign_type=AT_MD;
     
-    if (hasParam(parameters,"scale")) scale_factor=atof(parameters["scale"].c_str());
+    if (hasParam(parameters,"scale")) scale_factor=atof(parameters.find("scale")->second.c_str());
     if (hasParam(parameters,"bp_type")) {
-        if        (parameters["bp_type"].find("hleft")   !=string::npos) {
-            if      (parameters["bp_type"].find("vup")     !=string::npos) bp_type=BP_LU;
-            else if (parameters["bp_type"].find("vmiddle") !=string::npos) bp_type=BP_LM;
-            else if (parameters["bp_type"].find("vdown")   !=string::npos) bp_type=BP_LD;
-        } else if (parameters["bp_type"].find("hmiddle") !=string::npos) {
-            if      (parameters["bp_type"].find("vup")     !=string::npos) bp_type=BP_MU;
-            else if (parameters["bp_type"].find("vmiddle") !=string::npos) bp_type=BP_MM;
-            else if (parameters["bp_type"].find("vdown")   !=string::npos) bp_type=BP_MD;
-        } else if (parameters["bp_type"].find("hright")  !=string::npos) {
-            if      (parameters["bp_type"].find("vup")     !=string::npos) bp_type=BP_RU;
-            else if (parameters["bp_type"].find("vmiddle") !=string::npos) bp_type=BP_RM;
-            else if (parameters["bp_type"].find("vdown")   !=string::npos) bp_type=BP_RD;
+        if        (parameters.find("bp_type")->second.find("hleft")   !=string::npos) {
+            if      (parameters.find("bp_type")->second.find("vup")     !=string::npos) bp_type=BP_LU;
+            else if (parameters.find("bp_type")->second.find("vmiddle") !=string::npos) bp_type=BP_LM;
+            else if (parameters.find("bp_type")->second.find("vdown")   !=string::npos) bp_type=BP_LD;
+        } else if (parameters.find("bp_type")->second.find("hmiddle") !=string::npos) {
+            if      (parameters.find("bp_type")->second.find("vup")     !=string::npos) bp_type=BP_MU;
+            else if (parameters.find("bp_type")->second.find("vmiddle") !=string::npos) bp_type=BP_MM;
+            else if (parameters.find("bp_type")->second.find("vdown")   !=string::npos) bp_type=BP_MD;
+        } else if (parameters.find("bp_type")->second.find("hright")  !=string::npos) {
+            if      (parameters.find("bp_type")->second.find("vup")     !=string::npos) bp_type=BP_RU;
+            else if (parameters.find("bp_type")->second.find("vmiddle") !=string::npos) bp_type=BP_RM;
+            else if (parameters.find("bp_type")->second.find("vdown")   !=string::npos) bp_type=BP_RD;
         }
     }
     if (hasParam(parameters,"type")) {
         animation_type=NOTHING;
-        if (parameters["type"].find("once"))   animation_type|=ATYPE_ONCE;
-        if (parameters["type"].find("loop"))   animation_type|=ATYPE_LOOP;
-        if (parameters["type"].find("swing"))  animation_type|=ATYPE_SWING;
-        if (parameters["type"].find("step"))   animation_type|=ATYPE_STEP;
-        if (parameters["type"].find("reverse")) {
+        if (parameters.find("type")->second.find("once"))   animation_type|=ATYPE_ONCE;
+        if (parameters.find("type")->second.find("loop"))   animation_type|=ATYPE_LOOP;
+        if (parameters.find("type")->second.find("swing"))  animation_type|=ATYPE_SWING;
+        if (parameters.find("type")->second.find("step"))   animation_type|=ATYPE_STEP;
+        if (parameters.find("type")->second.find("reverse")) {
             animation_type<<=1;
         }
         if (animation_type==NOTHING) animation_type=ATYPE_LOOP;
-        if (parameters["type"].find("switch")) animation_type|=ATYPE_ST_SWITCH;
+        if (parameters.find("type")->second.find("switch")) animation_type|=ATYPE_ST_SWITCH;
     }
-    if (hasParam(parameters,"fps")) fps=atof(parameters["fps"].c_str());
+    if (hasParam(parameters,"fps")) fps=atof(parameters.find("fps")->second.c_str());
     if (hasParam(parameters,"allign_type")) {
-        if        (parameters["allign_type"].find("hleft")   !=string::npos) {
-            if      (parameters["allign_type"].find("vup")     !=string::npos) allign_type=AT_LU;
-            else if (parameters["allign_type"].find("vmiddle") !=string::npos) allign_type=AT_LM;
-            else if (parameters["allign_type"].find("vdown")   !=string::npos) allign_type=AT_LD;
-        } else if (parameters["allign_type"].find("hmiddle") !=string::npos) {
-            if      (parameters["allign_type"].find("vup")     !=string::npos) allign_type=AT_MU;
-            else if (parameters["allign_type"].find("vmiddle") !=string::npos) allign_type=AT_MM;
-            else if (parameters["allign_type"].find("vdown")   !=string::npos) allign_type=AT_MD;
-        } else if (parameters["allign_type"].find("hright")  !=string::npos) {
-            if      (parameters["allign_type"].find("vup")     !=string::npos) allign_type=AT_RU;
-            else if (parameters["allign_type"].find("vmiddle") !=string::npos) allign_type=AT_RM;
-            else if (parameters["allign_type"].find("vdown")   !=string::npos) allign_type=AT_RD;
+        if        (parameters.find("allign_type")->second.find("hleft")   !=string::npos) {
+            if      (parameters.find("allign_type")->second.find("vup")     !=string::npos) allign_type=AT_LU;
+            else if (parameters.find("allign_type")->second.find("vmiddle") !=string::npos) allign_type=AT_LM;
+            else if (parameters.find("allign_type")->second.find("vdown")   !=string::npos) allign_type=AT_LD;
+        } else if (parameters.find("allign_type")->second.find("hmiddle") !=string::npos) {
+            if      (parameters.find("allign_type")->second.find("vup")     !=string::npos) allign_type=AT_MU;
+            else if (parameters.find("allign_type")->second.find("vmiddle") !=string::npos) allign_type=AT_MM;
+            else if (parameters.find("allign_type")->second.find("vdown")   !=string::npos) allign_type=AT_MD;
+        } else if (parameters.find("allign_type")->second.find("hright")  !=string::npos) {
+            if      (parameters.find("allign_type")->second.find("vup")     !=string::npos) allign_type=AT_RU;
+            else if (parameters.find("allign_type")->second.find("vmiddle") !=string::npos) allign_type=AT_RM;
+            else if (parameters.find("allign_type")->second.find("vdown")   !=string::npos) allign_type=AT_RD;
         }
     }
 
     /* Use animation name */
     if (hasParam(parameters,"name")) {
-        string anim_name=parameters["name"];
+        string anim_name=parameters.find("name")->second;
         return loadAnimation(anim_name,scale_factor,bp_type,animation_type,fps,allign_type);
 
     /* Use a base image */
     } else if (hasParam(parameters,"image")) {
-        string image_name=parameters["image"];
+        string image_name=parameters.find("image")->second;
         Uint16 frames=1;
         Uint16 start_pos=0;
-        if (hasParam(parameters,"frames")) frames=atoi(parameters["frames"].c_str());
-        if (hasParam(parameters,"start_pos")) start_pos=atoi(parameters["start_pos"].c_str());
+        if (hasParam(parameters,"frames")) frames=atoi(parameters.find("frames")->second.c_str());
+        if (hasParam(parameters,"start_pos")) start_pos=atoi(parameters.find("start_pos")->second.c_str());
 
         /* threat as horizontal animation (constant width, height) with <image_hor_frames> frames */
         if (hasParam(parameters,"image_hor_frames")) {
-            Uint16 image_hor_frames=atoi(parameters["image_hor_frames"].c_str());
+            Uint16 image_hor_frames=atoi(parameters.find("image_hor_frames")->second.c_str());
             return loadAnimation(scenario->imgcache->loadImage(image_hor_frames,image_name,scale_factor),frames,bp_type,animation_type,fps,start_pos,allign_type);
 
         /* threat as horizontal animation (constant width, height) with width <image_hor_width> and an optional shift */
         } else if (hasParam(parameters,"image_hor_width")) {
-            Uint16 image_hor_width=atoi(parameters["image_hor_width"].c_str());
+            Uint16 image_hor_width=atoi(parameters.find("image_hor_width")->second.c_str());
             Uint16 image_hor_shift=0;
-            if (hasParam(parameters,"image_hor_shift")) image_hor_shift=atoi(parameters["image_hor_shift"].c_str());
+            if (hasParam(parameters,"image_hor_shift")) image_hor_shift=atoi(parameters.find("image_hor_shift")->second.c_str());
             return loadAnimation(scenario->imgcache->loadImage(image_hor_width,image_hor_shift,image_name,scale_factor),frames,bp_type,animation_type,fps,start_pos,allign_type);
 
         /* threat as constant width/height animation based on a base rectangle */
         } else if (hasParam(parameters,"image_rect")) {
-            ParameterMap rect_param=getParameters(parameters["image_rect"],';');
+            ParameterMap rect_param=getParameters(parameters.find("image_rect")->second,';');
             SDL_Rect rect;
             rect.x=rect.y=0;
             rect.w=rect.h=10;
-            if (hasParam(rect_param,"x")) rect.x=atoi(rect_param["x"].c_str());
-            if (hasParam(rect_param,"y")) rect.y=atoi(rect_param["y"].c_str());
-            if (hasParam(rect_param,"w")) rect.w=atoi(rect_param["w"].c_str());
-            if (hasParam(rect_param,"h")) rect.h=atoi(rect_param["h"].c_str());
+            if (hasParam(rect_param,"x")) rect.x=atoi(rect_param.find("x")->second.c_str());
+            if (hasParam(rect_param,"y")) rect.y=atoi(rect_param.find("y")->second.c_str());
+            if (hasParam(rect_param,"w")) rect.w=atoi(rect_param.find("w")->second.c_str());
+            if (hasParam(rect_param,"h")) rect.h=atoi(rect_param.find("h")->second.c_str());
             return loadAnimation(scenario->imgcache->loadImage(rect,image_name,scale_factor),frames,bp_type,animation_type,fps,start_pos,allign_type);
 
         /* get informations from an image description file */
         } else {
             string image_desc=image_name+".dsc";
-            if (hasParam(parameters,"image_desc")) image_desc=parameters["image_desc"];
+            if (hasParam(parameters,"image_desc")) image_desc=parameters.find("image_desc")->second;
             return loadAnimation(scenario->imgcache->loadImage(image_name,scale_factor,image_desc),frames,bp_type,animation_type,fps,start_pos,allign_type);
         }
 

Modified: trunk/src/objects_common.h
===================================================================
--- trunk/src/objects_common.h	2005-09-08 15:32:44 UTC (rev 163)
+++ trunk/src/objects_common.h	2005-09-08 22:04:26 UTC (rev 164)
@@ -122,7 +122,7 @@
                                         Uint16 astart_pos=0,
                                         AllignType aallign_type=AT_MD);
         /// Load an animation based on a parameter map
-        EmptyAnimationPtr loadAnimation(ParameterMap& parameters=ParameterMap());
+        EmptyAnimationPtr loadAnimation(const ParameterMap& parameters=ParameterMap());
         //Events (triggered animations/effects)
         //@{
         /// Clears the event field (sets it to NULL). This should only be used by

Modified: trunk/src/players_common.cpp
===================================================================
--- trunk/src/players_common.cpp	2005-09-08 15:32:44 UTC (rev 163)
+++ trunk/src/players_common.cpp	2005-09-08 22:04:26 UTC (rev 164)
@@ -15,58 +15,103 @@
 
 Player::Player(Sint16 xcord, Sint16 ycord, ParameterMap& parameters):
   Character(xcord,ycord,parameters),
-  currentitem(0),
-  anim_left(new EmptyAnimation(&anim_right)),
-  anim_right(new EmptyAnimation()),
-  anim_rock_left(new EmptyAnimation(&anim_left)),
-  anim_rock_right(new EmptyAnimation(&anim_right)),
-  anim_walk_left(new EmptyAnimation(&anim_left)),
-  anim_walk_right(new EmptyAnimation(&anim_right)),
-  anim_push_left(new EmptyAnimation(&anim_left)),
-  anim_push_right(new EmptyAnimation(&anim_right)),
-  anim_fall_left(new EmptyAnimation(&anim_left)),
-  anim_fall_right(new EmptyAnimation(&anim_right)),
-  anim_fall_fast_left(new EmptyAnimation(&anim_fall_left)),
-  anim_fall_fast_right(new EmptyAnimation(&anim_fall_right)),
-  anim_crash_left(new EmptyAnimation()),
-  anim_crash_right(new EmptyAnimation()),
-  anim_rope_left(new EmptyAnimation(&anim_left)),
-  anim_rope_right(new EmptyAnimation(&anim_right)),
-  anim_teleport_left(new EmptyAnimation()),
-  anim_teleport_right(new EmptyAnimation()),
-  anim_die_crash_left(new EmptyAnimation(&anim_die_bones_left)),
-  anim_die_crash_right(new EmptyAnimation(&anim_die_bones_right)),
-  anim_die_burn_left(new EmptyAnimation(&anim_die_bones_left)),
-  anim_die_burn_right(new EmptyAnimation(&anim_die_bones_right)),
-  anim_die_bones_left(new EmptyAnimation(&anim_die_bones_right)),
-  anim_die_bones_right(new EmptyAnimation()),
-  anim_die_elec_left(new EmptyAnimation(&anim_die_bones_left)),
-  anim_die_elec_right(new EmptyAnimation(&anim_die_bones_right)),
-  anim_die_spike_left(new EmptyAnimation(&anim_die_bones_left)),
-  anim_die_spike_right(new EmptyAnimation(&anim_die_bones_right)),
-  anim_die_water_left(new EmptyAnimation(&anim_die_bones_left)),
-  anim_die_water_right(new EmptyAnimation(&anim_die_bones_right)),
-  anim_fall_middle(new EmptyAnimation(&anim_fall_right)),
-  anim_climb(new EmptyAnimation(&anim_right)),
-  anim_bar(new EmptyAnimation(&anim_right)) {
+  currentitem(0) {
     for (Uint8 i=0; i<MAX_ITEMS; i++) {
         items[i]=NULL;
     }
     state=STATE_FALL;
     otype|=OTYPE_PLAYER;
     enemy_types|=OTYPE_MONSTER;
-    au_land=scenario->sndcache->loadWAV("dizzy.wav");
-    au_act=scenario->sndcache->loadWAV("button.wav");
-    au_useerror=scenario->sndcache->loadWAV("useerror.wav");
-    au_newitem=scenario->sndcache->loadWAV("pickup.wav");
-    au_hit=scenario->sndcache->loadWAV("vikhit.wav");
-    au_elec=scenario->sndcache->loadWAV("elecdth.wav");
-    au_drown=scenario->sndcache->loadWAV("drown.wav");
-    au_fire=scenario->sndcache->loadWAV("fireball.wav");
-    au_die=scenario->sndcache->loadWAV("bones.wav");
-    au_heal=scenario->sndcache->loadWAV("usefood1.wav");
 
     /* Parameters */
+    if (hasParam(parameters,"anim_left")) anim_left=loadAnimation(getParameters(parameters["anim_left"],':'));
+      else anim_left.reset(new EmptyAnimation(&anim_right));
+    if (hasParam(parameters,"anim_right")) anim_right=loadAnimation(getParameters(parameters["anim_right"],':'));
+      else anim_right.reset(new EmptyAnimation(&anim_orig));
+    if (hasParam(parameters,"anim_rock_left")) anim_rock_left=loadAnimation(getParameters(parameters["anim_rock_left"],':'));
+      else anim_rock_left.reset(new EmptyAnimation(&anim_left));
+    if (hasParam(parameters,"anim_rock_right")) anim_rock_right=loadAnimation(getParameters(parameters["anim_rock_right"],':'));
+      else anim_rock_right.reset(new EmptyAnimation(&anim_right));
+    if (hasParam(parameters,"anim_walk_left")) anim_walk_left=loadAnimation(getParameters(parameters["anim_walk_left"],':'));
+      else anim_walk_left.reset(new EmptyAnimation(&anim_left));
+    if (hasParam(parameters,"anim_walk_right")) anim_walk_right=loadAnimation(getParameters(parameters["anim_walk_right"],':'));
+      else anim_walk_right.reset(new EmptyAnimation(&anim_right));
+    if (hasParam(parameters,"anim_push_left")) anim_push_left=loadAnimation(getParameters(parameters["anim_push_left"],':'));
+      else anim_push_left.reset(new EmptyAnimation(&anim_left));
+    if (hasParam(parameters,"anim_push_right")) anim_push_right=loadAnimation(getParameters(parameters["anim_push_right"],':'));
+      else anim_push_right.reset(new EmptyAnimation(&anim_right));
+    if (hasParam(parameters,"anim_fall_left")) anim_fall_left=loadAnimation(getParameters(parameters["anim_fall_left"],':'));
+      else anim_fall_left.reset(new EmptyAnimation(&anim_left));
+    if (hasParam(parameters,"anim_fall_right")) anim_fall_right=loadAnimation(getParameters(parameters["anim_fall_right"],':'));
+      else anim_fall_right.reset(new EmptyAnimation(&anim_right));
+    if (hasParam(parameters,"anim_fall_fast_left")) anim_fall_fast_left=loadAnimation(getParameters(parameters["anim_fall_fast_left"],':'));
+      else anim_fall_fast_left.reset(new EmptyAnimation(&anim_fall_left));
+    if (hasParam(parameters,"anim_fall_fast_right")) anim_fall_fast_right=loadAnimation(getParameters(parameters["anim_fall_fast_right"],':'));
+      else anim_fall_fast_right.reset(new EmptyAnimation(&anim_fall_right));
+    if (hasParam(parameters,"anim_crash_left")) anim_crash_left=loadAnimation(getParameters(parameters["anim_crash_left"],':'));
+      else anim_crash_left.reset(new EmptyAnimation());
+    if (hasParam(parameters,"anim_crash_right")) anim_crash_right=loadAnimation(getParameters(parameters["anim_crash_right"],':'));
+      else anim_crash_right.reset(new EmptyAnimation());
+    if (hasParam(parameters,"anim_rope_left")) anim_rope_left=loadAnimation(getParameters(parameters["anim_rope_left"],':'));
+      else anim_rope_left.reset(new EmptyAnimation(&anim_left));
+    if (hasParam(parameters,"anim_rope_right")) anim_rope_right=loadAnimation(getParameters(parameters["anim_rope_right"],':'));
+      else anim_rope_right.reset(new EmptyAnimation(&anim_right));
+    if (hasParam(parameters,"anim_teleport_left")) anim_teleport_left=loadAnimation(getParameters(parameters["anim_teleport_left"],':'));
+      else anim_teleport_left.reset(new EmptyAnimation());
+    if (hasParam(parameters,"anim_teleport_left")) anim_teleport_left=loadAnimation(getParameters(parameters["anim_teleport_left"],':'));
+      else anim_teleport_left.reset(new EmptyAnimation());
+    if (hasParam(parameters,"anim_die_crash_left")) anim_die_crash_left=loadAnimation(getParameters(parameters["anim_die_crash_left"],':'));
+      else anim_die_crash_left.reset(new EmptyAnimation(&anim_die_bones_left));
+    if (hasParam(parameters,"anim_die_crash_left")) anim_die_crash_left=loadAnimation(getParameters(parameters["anim_die_crash_left"],':'));
+      else anim_die_crash_left.reset(new EmptyAnimation(&anim_die_bones_right));
+    if (hasParam(parameters,"anim_die_burn_left")) anim_die_burn_left=loadAnimation(getParameters(parameters["anim_die_burn_left"],':'));
+      else anim_die_burn_left.reset(new EmptyAnimation(&anim_die_bones_right));
+    if (hasParam(parameters,"anim_die_burn_left")) anim_die_burn_left=loadAnimation(getParameters(parameters["anim_die_burn_left"],':'));
+      else anim_die_burn_left.reset(new EmptyAnimation(&anim_die_bones_right));
+    if (hasParam(parameters,"anim_die_bones_left")) anim_die_bones_left=loadAnimation(getParameters(parameters["anim_die_bones_left"],':'));
+      else anim_die_bones_left.reset(new EmptyAnimation());
+    if (hasParam(parameters,"anim_die_bones_left")) anim_die_bones_left=loadAnimation(getParameters(parameters["anim_die_bones_left"],':'));
+      else anim_die_bones_left.reset(new EmptyAnimation());
+    if (hasParam(parameters,"anim_die_elec_left")) anim_die_elec_left=loadAnimation(getParameters(parameters["anim_die_elec_left"],':'));
+      else anim_die_elec_left.reset(new EmptyAnimation(&anim_die_bones_left));
+    if (hasParam(parameters,"anim_die_elec_right")) anim_die_elec_right=loadAnimation(getParameters(parameters["anim_die_elec_right"],':'));
+      else anim_die_elec_right.reset(new EmptyAnimation(&anim_die_bones_right));
+    if (hasParam(parameters,"anim_die_spike_left")) anim_die_spike_left=loadAnimation(getParameters(parameters["anim_die_spike_left"],':'));
+      else anim_die_spike_left.reset(new EmptyAnimation(&anim_die_bones_left));
+    if (hasParam(parameters,"anim_die_spike_right")) anim_die_spike_right=loadAnimation(getParameters(parameters["anim_die_spike_right"],':'));
+      else anim_die_spike_right.reset(new EmptyAnimation(&anim_die_bones_right));
+    if (hasParam(parameters,"anim_die_water_left")) anim_die_water_left=loadAnimation(getParameters(parameters["anim_die_water_left"],':'));
+      else anim_die_water_left.reset(new EmptyAnimation(&anim_die_bones_left));
+    if (hasParam(parameters,"anim_die_water_right")) anim_die_water_right=loadAnimation(getParameters(parameters["anim_die_water_right"],':'));
+      else anim_die_water_right.reset(new EmptyAnimation(&anim_die_bones_right));
+    if (hasParam(parameters,"anim_fall_middle")) anim_fall_middle=loadAnimation(getParameters(parameters["anim_fall_middle"],':'));
+      else anim_fall_middle.reset(new EmptyAnimation(&anim_fall_right));
+    if (hasParam(parameters,"anim_climb")) anim_climb=loadAnimation(getParameters(parameters["anim_climb"],':'));
+      else anim_climb.reset(new EmptyAnimation(&anim_right));
+    if (hasParam(parameters,"anim_bar")) anim_bar=loadAnimation(getParameters(parameters["anim_bar"],':'));
+      else anim_bar.reset(new EmptyAnimation(&anim_right));
+
+    if (hasParam(parameters,"audio_land")) au_land=scenario->sndcache->loadWAV(parameters["audio_land"]);
+      else au_land=scenario->sndcache->loadWAV("dizzy.wav");
+    if (hasParam(parameters,"audio_act")) au_land=scenario->sndcache->loadWAV(parameters["audio_act"]);
+      else au_act=scenario->sndcache->loadWAV("button.wav");
+    if (hasParam(parameters,"audio_useerror")) au_land=scenario->sndcache->loadWAV(parameters["audio_useerror"]);
+      else au_useerror=scenario->sndcache->loadWAV("useerror.wav");
+    if (hasParam(parameters,"audio_newitem")) au_land=scenario->sndcache->loadWAV(parameters["audio_newitem"]);
+      else au_newitem=scenario->sndcache->loadWAV("pickup.wav");
+    if (hasParam(parameters,"audio_hit")) au_land=scenario->sndcache->loadWAV(parameters["audio_hit"]);
+      else au_hit=scenario->sndcache->loadWAV("vikhit.wav");
+    if (hasParam(parameters,"audio_elec")) au_land=scenario->sndcache->loadWAV(parameters["audio_elec"]);
+      else au_elec=scenario->sndcache->loadWAV("elecdth.wav");
+    if (hasParam(parameters,"audio_drown")) au_land=scenario->sndcache->loadWAV(parameters["audio_drown"]);
+      else au_drown=scenario->sndcache->loadWAV("drown.wav");
+    if (hasParam(parameters,"audio_fire")) au_land=scenario->sndcache->loadWAV(parameters["audio_fire"]);
+      else au_fire=scenario->sndcache->loadWAV("fireball.wav");
+    if (hasParam(parameters,"audio_die")) au_land=scenario->sndcache->loadWAV(parameters["audio_die"]);
+      else au_die=scenario->sndcache->loadWAV("bones.wav");
+    if (hasParam(parameters,"audio_heal")) au_land=scenario->sndcache->loadWAV(parameters["audio_heal"]);
+      else au_heal=scenario->sndcache->loadWAV("usefood1.wav");
+
     if (!hasParam(parameters,"maxhealth")) maxhealth=4;
     if (!hasParam(parameters,"health")) health=min(3,(int)maxhealth);
     if (!hasParam(parameters,"maxspeedx")) maxspeedx=300;
@@ -313,7 +358,9 @@
         //should be !=NULL or sthg is wrong with the placement code...
         ParameterMap deadplr_parameters;
         deadplr_parameters["image"]="dead_player.bmp";
-        Character* deadplr=scenario->pool->addCharacter(new DeadPlayer(pos.x,pos.y,deadplr_parameters));
+        deadplr_parameters["w"]=10;
+        deadplr_parameters["h"]=10;
+        Character* deadplr=dynamic_cast<Character*>(scenario->pool->addObjectbyName("DeadPlayer",pos.x,pos.y,deadplr_parameters));
         switch(weap.getSubType()) {
             case WS_FIRE: {
                 if (deadplr) deadplr->setEvent(new CAnimEvent(deadplr,10,0,ESTATE_BUSY,au_fire,(state&STATE_LEFT) ? anim_die_burn_left : anim_die_burn_right));




More information about the lostpenguins-commits mailing list