improved code for generic counter min/max values in level editor
[rocksndiamonds.git] / src / editor.c
index 6da69dfd85ad934a8276732078d6d44fe1ff3241..58a4e8e8983102d3511df6621eb43e0f41ff7ddb 100644 (file)
@@ -4613,7 +4613,7 @@ static int editor_el_boulderdash_native[] =
 
   EL_BD_STEELWALL,
   EL_BD_WALL,
-  EL_EMPTY,
+  EL_BD_SAND_2,
   EL_BD_MAGIC_WALL,
 
   EL_BD_AMOEBA,
@@ -4634,34 +4634,34 @@ static int editor_el_boulderdash_native[] =
   EL_BD_AMOEBA_2,
   EL_BD_BUTTERFLY_2_UP,
   EL_BD_FIREFLY_2_UP,
-  EL_EMPTY,
+  EL_BD_SLIME,
 
   EL_BD_BUTTERFLY_2_LEFT,
   EL_BD_FIREFLY_2_LEFT,
   EL_BD_BUTTERFLY_2_RIGHT,
   EL_BD_FIREFLY_2_RIGHT,
 
-  EL_EMPTY,
+  EL_BD_BOMB,
   EL_BD_BUTTERFLY_2_DOWN,
   EL_BD_FIREFLY_2_DOWN,
-  EL_EMPTY,
+  EL_BD_FLYING_DIAMOND,
 
-  EL_EMPTY,
+  EL_BD_NITRO_PACK,
   EL_BD_DRAGONFLY_UP,
   EL_BD_STONEFLY_UP,
-  EL_EMPTY,
+  EL_BD_DIAMOND_GLUED,
 
   EL_BD_DRAGONFLY_LEFT,
   EL_BD_STONEFLY_LEFT,
   EL_BD_DRAGONFLY_RIGHT,
   EL_BD_STONEFLY_RIGHT,
 
-  EL_EMPTY,
+  EL_BD_NUT,
   EL_BD_DRAGONFLY_DOWN,
   EL_BD_STONEFLY_DOWN,
   EL_EMPTY,
 
-  EL_EMPTY,
+  EL_BD_BITER_SWITCH_1,
   EL_BD_BITER_UP,
   EL_BD_COW_UP,
   EL_EMPTY,
@@ -4671,15 +4671,15 @@ static int editor_el_boulderdash_native[] =
   EL_BD_BITER_RIGHT,
   EL_BD_COW_RIGHT,
 
-  EL_EMPTY,
+  EL_BD_VOODOO_DOLL,
   EL_BD_BITER_DOWN,
   EL_BD_COW_DOWN,
-  EL_EMPTY,
+  EL_BD_GHOST,
 
-  EL_EMPTY,
-  EL_BD_SAND,
+  EL_BD_SAND_GLUED,
   EL_BD_SAND_BALL,
   EL_BD_SAND_LOOSE,
+  EL_BD_WALL_NON_SLOPED,
 
   EL_BD_SAND_SLOPED_UP_LEFT,
   EL_BD_SAND_SLOPED_UP_RIGHT,
@@ -4691,100 +4691,75 @@ static int editor_el_boulderdash_native[] =
   EL_BD_WALL_SLOPED_DOWN_LEFT,
   EL_BD_WALL_SLOPED_DOWN_RIGHT,
 
-  EL_BD_FLYING_DIAMOND,
   EL_BD_FLYING_ROCK,
+  EL_BD_ROCK_GLUED,
   EL_BD_STEELWALL_SLOPED_UP_LEFT,
   EL_BD_STEELWALL_SLOPED_UP_RIGHT,
 
-  EL_BD_NUT,
-  EL_BD_MEGA_ROCK,
+  EL_BD_WAITING_ROCK,
+  EL_BD_CHASING_ROCK,
   EL_BD_STEELWALL_SLOPED_DOWN_LEFT,
   EL_BD_STEELWALL_SLOPED_DOWN_RIGHT,
 
-  EL_BD_SAND_2,
-  EL_BD_WALL_NON_SLOPED,
-  EL_BD_WALL,
-  EL_BD_MAGIC_WALL,
-
-  EL_BD_EXIT_CLOSED,
-  EL_BD_EXIT_OPEN,
+  EL_BD_MEGA_ROCK,
+  EL_BD_SWEET,
   EL_BD_INVISIBLE_EXIT_CLOSED,
   EL_BD_INVISIBLE_EXIT_OPEN,
 
-  EL_BD_STEELWALL,
   EL_BD_STEELWALL_EXPLODABLE,
   EL_BD_STEELWALL_DIGGABLE,
   EL_BD_WALL_DIGGABLE,
+  EL_BD_FALLING_WALL,
 
   EL_BD_EXPANDABLE_WALL_HORIZONTAL,
   EL_BD_EXPANDABLE_WALL_VERTICAL,
   EL_BD_EXPANDABLE_WALL_ANY,
-  EL_BD_CREATURE_SWITCH,
+  EL_BD_EXPANDABLE_WALL_SWITCH_HORIZONTAL,
 
   EL_BD_EXPANDABLE_STEELWALL_HORIZONTAL,
   EL_BD_EXPANDABLE_STEELWALL_VERTICAL,
   EL_BD_EXPANDABLE_STEELWALL_ANY,
-  EL_BD_EXPANDABLE_WALL_SWITCH_HORIZONTAL,
+  EL_BD_CREATURE_SWITCH,
 
-  EL_BD_BITER_SWITCH_1,
+  EL_BD_BLADDER,
+  EL_BD_BLADDER_SPENDER,
+  EL_BD_REPLICATOR,
   EL_BD_REPLICATOR_SWITCH,
+
+  EL_BD_CONVEYOR_LEFT,
+  EL_BD_CONVEYOR_RIGHT,
   EL_BD_CONVEYOR_SWITCH,
   EL_BD_CONVEYOR_DIR_SWITCH_RIGHT,
 
-  EL_BD_ACID,
-  EL_BD_FALLING_WALL,
-  EL_BD_BOX,
+  EL_BD_CLOCK,
   EL_BD_TIME_PENALTY,
-
   EL_BD_GRAVESTONE,
-  EL_BD_ROCK_GLUED,
-  EL_BD_DIAMOND_GLUED,
-  EL_BD_DIAMOND_KEY,
+  EL_BD_SKELETON,
 
-  EL_BD_TRAPPED_DIAMOND,
-  EL_BD_CLOCK,
-  EL_BD_SAND_GLUED,
   EL_BD_WATER,
+  EL_BD_ACID,
+  EL_BD_LAVA,
+  EL_BD_BOX,
+
+  EL_BD_GATE_1,
+  EL_BD_GATE_2,
+  EL_BD_GATE_3,
+  EL_BD_TRAPPED_DIAMOND,
 
   EL_BD_KEY_1,
   EL_BD_KEY_2,
   EL_BD_KEY_3,
-  EL_EMPTY,
+  EL_BD_DIAMOND_KEY,
 
   EL_BD_WALL_KEY_1,
   EL_BD_WALL_KEY_2,
   EL_BD_WALL_KEY_3,
   EL_BD_WALL_DIAMOND,
 
-  EL_BD_GATE_1,
-  EL_BD_GATE_2,
-  EL_BD_GATE_3,
-  EL_BD_POT,
-
   EL_BD_GRAVITY_SWITCH,
   EL_BD_PNEUMATIC_HAMMER,
   EL_BD_TELEPORTER,
-  EL_BD_SKELETON,
-
-  EL_BD_AMOEBA,
-  EL_BD_AMOEBA_2,
-  EL_BD_REPLICATOR,
-  EL_BD_BLADDER_SPENDER,
-
-  EL_BD_CONVEYOR_LEFT,
-  EL_BD_CONVEYOR_RIGHT,
-  EL_BD_BOMB,
-  EL_BD_NITRO_PACK,
-
-  EL_BD_LAVA,
-  EL_BD_SWEET,
-  EL_BD_VOODOO_DOLL,
-  EL_BD_SLIME,
-
-  EL_BD_BLADDER,
-  EL_BD_WAITING_ROCK,
-  EL_BD_CHASING_ROCK,
-  EL_BD_GHOST,
+  EL_BD_POT,
 
   EL_BD_PLAYER,
   EL_BD_PLAYER_WITH_BOMB,
@@ -6406,7 +6381,7 @@ static int getTextWidthForDrawingArea(char *text)
   if (text == NULL)
     return 0;
 
-  return (getTextWidth(text, FONT_TEXT_1) + ED_DRAWINGAREA_TEXT_DISTANCE);
+  return (getTextWidth(text, FONT_TEXT_1) + ED_DRAWINGAREA_BORDER_SIZE);
 }
 
 static int getRightGadgetBorder(struct GadgetInfo *gi, char *text)
@@ -8313,7 +8288,7 @@ static void MapDrawingArea(int id)
   int area_ysize = gi->drawing.area_ysize;
   int xoffset_left = getTextWidthForDrawingArea(drawingarea_info[id].text_left);
   int xoffset_below = getTextWidth(drawingarea_info[id].text_below, font_nr);
-  int x_left  = gi->x - xoffset_left;
+  int x_left  = gi->x - xoffset_left - ED_DRAWINGAREA_BORDER_SIZE;
   int x_right = gi->x + gi->width + ED_DRAWINGAREA_TEXT_DISTANCE;
   int x_above = gi->x - ED_DRAWINGAREA_BORDER_SIZE;
   int x_below = gi->x + (gi->width - xoffset_below) / 2;
@@ -10818,133 +10793,140 @@ static struct
   int element;
   int *value;
   char *text;
+  int min_value;
+  int max_value;
 } elements_with_counter[] =
 {
-  { EL_EMERALD,                        &level.score[SC_EMERALD],       TEXT_COLLECTING         },
-  { EL_BD_DIAMOND,             &level.score[SC_EMERALD],       TEXT_COLLECTING         },
-  { EL_BD_DIAMOND,             &level.score[SC_DIAMOND_EXTRA], TEXT_COLLECTING_EXTRA   },
-  { EL_EMERALD_YELLOW,         &level.score[SC_EMERALD],       TEXT_COLLECTING         },
-  { EL_EMERALD_RED,            &level.score[SC_EMERALD],       TEXT_COLLECTING         },
-  { EL_EMERALD_PURPLE,         &level.score[SC_EMERALD],       TEXT_COLLECTING         },
-  { EL_SP_INFOTRON,            &level.score[SC_EMERALD],       TEXT_COLLECTING         },
-  { EL_DIAMOND,                        &level.score[SC_DIAMOND],       TEXT_COLLECTING         },
-  { EL_CRYSTAL,                        &level.score[SC_CRYSTAL],       TEXT_COLLECTING         },
-  { EL_PEARL,                  &level.score[SC_PEARL],         TEXT_COLLECTING         },
-  { EL_BUG,                    &level.score[SC_BUG],           TEXT_SMASHING           },
-  { EL_BUG_RIGHT,              &level.score[SC_BUG],           TEXT_SMASHING           },
-  { EL_BUG_UP,                 &level.score[SC_BUG],           TEXT_SMASHING           },
-  { EL_BUG_LEFT,               &level.score[SC_BUG],           TEXT_SMASHING           },
-  { EL_BUG_DOWN,               &level.score[SC_BUG],           TEXT_SMASHING           },
-  { EL_BD_BUTTERFLY,           &level.score[SC_BUG],           TEXT_SMASHING           },
-  { EL_BD_BUTTERFLY_RIGHT,     &level.score[SC_BUG],           TEXT_SMASHING           },
-  { EL_BD_BUTTERFLY_UP,                &level.score[SC_BUG],           TEXT_SMASHING           },
-  { EL_BD_BUTTERFLY_LEFT,      &level.score[SC_BUG],           TEXT_SMASHING           },
-  { EL_BD_BUTTERFLY_DOWN,      &level.score[SC_BUG],           TEXT_SMASHING           },
-  { EL_SP_ELECTRON,            &level.score[SC_BUG],           TEXT_SMASHING           },
-  { EL_SPACESHIP,              &level.score[SC_SPACESHIP],     TEXT_SMASHING           },
-  { EL_SPACESHIP_RIGHT,                &level.score[SC_SPACESHIP],     TEXT_SMASHING           },
-  { EL_SPACESHIP_UP,           &level.score[SC_SPACESHIP],     TEXT_SMASHING           },
-  { EL_SPACESHIP_LEFT,         &level.score[SC_SPACESHIP],     TEXT_SMASHING           },
-  { EL_SPACESHIP_DOWN,         &level.score[SC_SPACESHIP],     TEXT_SMASHING           },
-  { EL_BD_FIREFLY,             &level.score[SC_SPACESHIP],     TEXT_SMASHING           },
-  { EL_BD_FIREFLY_RIGHT,       &level.score[SC_SPACESHIP],     TEXT_SMASHING           },
-  { EL_BD_FIREFLY_UP,          &level.score[SC_SPACESHIP],     TEXT_SMASHING           },
-  { EL_BD_FIREFLY_LEFT,                &level.score[SC_SPACESHIP],     TEXT_SMASHING           },
-  { EL_BD_FIREFLY_DOWN,                &level.score[SC_SPACESHIP],     TEXT_SMASHING           },
-  { EL_SP_SNIKSNAK,            &level.score[SC_SPACESHIP],     TEXT_SMASHING           },
-  { EL_YAMYAM,                 &level.score[SC_YAMYAM],        TEXT_SMASHING           },
-  { EL_YAMYAM_LEFT,            &level.score[SC_YAMYAM],        TEXT_SMASHING           },
-  { EL_YAMYAM_RIGHT,           &level.score[SC_YAMYAM],        TEXT_SMASHING           },
-  { EL_YAMYAM_UP,              &level.score[SC_YAMYAM],        TEXT_SMASHING           },
-  { EL_YAMYAM_DOWN,            &level.score[SC_YAMYAM],        TEXT_SMASHING           },
-  { EL_DARK_YAMYAM,            &level.score[SC_YAMYAM],        TEXT_SMASHING           },
-  { EL_ROBOT,                  &level.score[SC_ROBOT],         TEXT_SMASHING           },
-  { EL_PACMAN,                 &level.score[SC_PACMAN],        TEXT_SMASHING           },
-  { EL_PACMAN_RIGHT,           &level.score[SC_PACMAN],        TEXT_SMASHING           },
-  { EL_PACMAN_UP,              &level.score[SC_PACMAN],        TEXT_SMASHING           },
-  { EL_PACMAN_LEFT,            &level.score[SC_PACMAN],        TEXT_SMASHING           },
-  { EL_PACMAN_DOWN,            &level.score[SC_PACMAN],        TEXT_SMASHING           },
-  { EL_NUT,                    &level.score[SC_NUT],           TEXT_CRACKING           },
-  { EL_DYNAMITE,               &level.score[SC_DYNAMITE],      TEXT_COLLECTING         },
-  { EL_EM_DYNAMITE,            &level.score[SC_DYNAMITE],      TEXT_COLLECTING         },
-  { EL_DYNABOMB_INCREASE_NUMBER,&level.score[SC_DYNAMITE],     TEXT_COLLECTING         },
-  { EL_DYNABOMB_INCREASE_SIZE, &level.score[SC_DYNAMITE],      TEXT_COLLECTING         },
-  { EL_DYNABOMB_INCREASE_POWER,        &level.score[SC_DYNAMITE],      TEXT_COLLECTING         },
-  { EL_SHIELD_NORMAL,          &level.score[SC_SHIELD],        TEXT_COLLECTING         },
-  { EL_SHIELD_DEADLY,          &level.score[SC_SHIELD],        TEXT_COLLECTING         },
-  { EL_EXTRA_TIME,             &level.extra_time_score,        TEXT_COLLECTING         },
-  { EL_KEY_1,                  &level.score[SC_KEY],           TEXT_COLLECTING         },
-  { EL_KEY_2,                  &level.score[SC_KEY],           TEXT_COLLECTING         },
-  { EL_KEY_3,                  &level.score[SC_KEY],           TEXT_COLLECTING         },
-  { EL_KEY_4,                  &level.score[SC_KEY],           TEXT_COLLECTING         },
-  { EL_EM_KEY_1,               &level.score[SC_KEY],           TEXT_COLLECTING         },
-  { EL_EM_KEY_2,               &level.score[SC_KEY],           TEXT_COLLECTING         },
-  { EL_EM_KEY_3,               &level.score[SC_KEY],           TEXT_COLLECTING         },
-  { EL_EM_KEY_4,               &level.score[SC_KEY],           TEXT_COLLECTING         },
-  { EL_EMC_KEY_5,              &level.score[SC_KEY],           TEXT_COLLECTING         },
-  { EL_EMC_KEY_6,              &level.score[SC_KEY],           TEXT_COLLECTING         },
-  { EL_EMC_KEY_7,              &level.score[SC_KEY],           TEXT_COLLECTING         },
-  { EL_EMC_KEY_8,              &level.score[SC_KEY],           TEXT_COLLECTING         },
-  { EL_DC_KEY_WHITE,           &level.score[SC_KEY],           TEXT_COLLECTING         },
-  { EL_MM_KETTLE,              &level.score[SC_EMERALD],       TEXT_COLLECTING         },
-  { EL_DF_CELL,                        &level.score[SC_EMERALD],       TEXT_COLLECTING         },
-  { EL_MM_KEY,                 &level.score[SC_KEY],           TEXT_COLLECTING         },
-  { EL_MM_LIGHTBALL,           &level.score[SC_ELEM_BONUS],    TEXT_COLLECTING         },
-  { EL_MM_PACMAN,              &level.score[SC_PACMAN],        TEXT_SMASHING           },
-  { EL_MM_PACMAN_RIGHT,                &level.score[SC_PACMAN],        TEXT_SMASHING           },
-  { EL_MM_PACMAN_UP,           &level.score[SC_PACMAN],        TEXT_SMASHING           },
-  { EL_MM_PACMAN_LEFT,         &level.score[SC_PACMAN],        TEXT_SMASHING           },
-  { EL_MM_PACMAN_DOWN,         &level.score[SC_PACMAN],        TEXT_SMASHING           },
-  { EL_AMOEBA_WET,             &level.amoeba_speed,            TEXT_AMOEBA_SPEED       },
-  { EL_AMOEBA_DRY,             &level.amoeba_speed,            TEXT_AMOEBA_SPEED       },
-  { EL_AMOEBA_FULL,            &level.amoeba_speed,            TEXT_AMOEBA_SPEED       },
-  { EL_BD_AMOEBA,              &level.amoeba_speed,            TEXT_AMOEBA_SPEED       },
-  { EL_EMC_DRIPPER,            &level.amoeba_speed,            TEXT_AMOEBA_SPEED       },
+  { EL_EMERALD,                        &level.score[SC_EMERALD],               TEXT_COLLECTING         },
+  { EL_BD_DIAMOND,             &level.score[SC_EMERALD],               TEXT_COLLECTING         },
+  { EL_BD_DIAMOND,             &level.score[SC_DIAMOND_EXTRA],         TEXT_COLLECTING_EXTRA   },
+  { EL_EMERALD_YELLOW,         &level.score[SC_EMERALD],               TEXT_COLLECTING         },
+  { EL_EMERALD_RED,            &level.score[SC_EMERALD],               TEXT_COLLECTING         },
+  { EL_EMERALD_PURPLE,         &level.score[SC_EMERALD],               TEXT_COLLECTING         },
+  { EL_SP_INFOTRON,            &level.score[SC_EMERALD],               TEXT_COLLECTING         },
+  { EL_DIAMOND,                        &level.score[SC_DIAMOND],               TEXT_COLLECTING         },
+  { EL_CRYSTAL,                        &level.score[SC_CRYSTAL],               TEXT_COLLECTING         },
+  { EL_PEARL,                  &level.score[SC_PEARL],                 TEXT_COLLECTING         },
+  { EL_BUG,                    &level.score[SC_BUG],                   TEXT_SMASHING           },
+  { EL_BUG_RIGHT,              &level.score[SC_BUG],                   TEXT_SMASHING           },
+  { EL_BUG_UP,                 &level.score[SC_BUG],                   TEXT_SMASHING           },
+  { EL_BUG_LEFT,               &level.score[SC_BUG],                   TEXT_SMASHING           },
+  { EL_BUG_DOWN,               &level.score[SC_BUG],                   TEXT_SMASHING           },
+  { EL_BD_BUTTERFLY,           &level.score[SC_BUG],                   TEXT_SMASHING           },
+  { EL_BD_BUTTERFLY_RIGHT,     &level.score[SC_BUG],                   TEXT_SMASHING           },
+  { EL_BD_BUTTERFLY_UP,                &level.score[SC_BUG],                   TEXT_SMASHING           },
+  { EL_BD_BUTTERFLY_LEFT,      &level.score[SC_BUG],                   TEXT_SMASHING           },
+  { EL_BD_BUTTERFLY_DOWN,      &level.score[SC_BUG],                   TEXT_SMASHING           },
+  { EL_SP_ELECTRON,            &level.score[SC_BUG],                   TEXT_SMASHING           },
+  { EL_SPACESHIP,              &level.score[SC_SPACESHIP],             TEXT_SMASHING           },
+  { EL_SPACESHIP_RIGHT,                &level.score[SC_SPACESHIP],             TEXT_SMASHING           },
+  { EL_SPACESHIP_UP,           &level.score[SC_SPACESHIP],             TEXT_SMASHING           },
+  { EL_SPACESHIP_LEFT,         &level.score[SC_SPACESHIP],             TEXT_SMASHING           },
+  { EL_SPACESHIP_DOWN,         &level.score[SC_SPACESHIP],             TEXT_SMASHING           },
+  { EL_BD_FIREFLY,             &level.score[SC_SPACESHIP],             TEXT_SMASHING           },
+  { EL_BD_FIREFLY_RIGHT,       &level.score[SC_SPACESHIP],             TEXT_SMASHING           },
+  { EL_BD_FIREFLY_UP,          &level.score[SC_SPACESHIP],             TEXT_SMASHING           },
+  { EL_BD_FIREFLY_LEFT,                &level.score[SC_SPACESHIP],             TEXT_SMASHING           },
+  { EL_BD_FIREFLY_DOWN,                &level.score[SC_SPACESHIP],             TEXT_SMASHING           },
+  { EL_SP_SNIKSNAK,            &level.score[SC_SPACESHIP],             TEXT_SMASHING           },
+  { EL_YAMYAM,                 &level.score[SC_YAMYAM],                TEXT_SMASHING           },
+  { EL_YAMYAM_LEFT,            &level.score[SC_YAMYAM],                TEXT_SMASHING           },
+  { EL_YAMYAM_RIGHT,           &level.score[SC_YAMYAM],                TEXT_SMASHING           },
+  { EL_YAMYAM_UP,              &level.score[SC_YAMYAM],                TEXT_SMASHING           },
+  { EL_YAMYAM_DOWN,            &level.score[SC_YAMYAM],                TEXT_SMASHING           },
+  { EL_DARK_YAMYAM,            &level.score[SC_YAMYAM],                TEXT_SMASHING           },
+  { EL_ROBOT,                  &level.score[SC_ROBOT],                 TEXT_SMASHING           },
+  { EL_PACMAN,                 &level.score[SC_PACMAN],                TEXT_SMASHING           },
+  { EL_PACMAN_RIGHT,           &level.score[SC_PACMAN],                TEXT_SMASHING           },
+  { EL_PACMAN_UP,              &level.score[SC_PACMAN],                TEXT_SMASHING           },
+  { EL_PACMAN_LEFT,            &level.score[SC_PACMAN],                TEXT_SMASHING           },
+  { EL_PACMAN_DOWN,            &level.score[SC_PACMAN],                TEXT_SMASHING           },
+  { EL_NUT,                    &level.score[SC_NUT],                   TEXT_CRACKING           },
+  { EL_DYNAMITE,               &level.score[SC_DYNAMITE],              TEXT_COLLECTING         },
+  { EL_EM_DYNAMITE,            &level.score[SC_DYNAMITE],              TEXT_COLLECTING         },
+  { EL_DYNABOMB_INCREASE_NUMBER,&level.score[SC_DYNAMITE],             TEXT_COLLECTING         },
+  { EL_DYNABOMB_INCREASE_SIZE, &level.score[SC_DYNAMITE],              TEXT_COLLECTING         },
+  { EL_DYNABOMB_INCREASE_POWER,        &level.score[SC_DYNAMITE],              TEXT_COLLECTING         },
+  { EL_SHIELD_NORMAL,          &level.score[SC_SHIELD],                TEXT_COLLECTING         },
+  { EL_SHIELD_DEADLY,          &level.score[SC_SHIELD],                TEXT_COLLECTING         },
+  { EL_EXTRA_TIME,             &level.extra_time_score,                TEXT_COLLECTING         },
+  { EL_KEY_1,                  &level.score[SC_KEY],                   TEXT_COLLECTING         },
+  { EL_KEY_2,                  &level.score[SC_KEY],                   TEXT_COLLECTING         },
+  { EL_KEY_3,                  &level.score[SC_KEY],                   TEXT_COLLECTING         },
+  { EL_KEY_4,                  &level.score[SC_KEY],                   TEXT_COLLECTING         },
+  { EL_EM_KEY_1,               &level.score[SC_KEY],                   TEXT_COLLECTING         },
+  { EL_EM_KEY_2,               &level.score[SC_KEY],                   TEXT_COLLECTING         },
+  { EL_EM_KEY_3,               &level.score[SC_KEY],                   TEXT_COLLECTING         },
+  { EL_EM_KEY_4,               &level.score[SC_KEY],                   TEXT_COLLECTING         },
+  { EL_EMC_KEY_5,              &level.score[SC_KEY],                   TEXT_COLLECTING         },
+  { EL_EMC_KEY_6,              &level.score[SC_KEY],                   TEXT_COLLECTING         },
+  { EL_EMC_KEY_7,              &level.score[SC_KEY],                   TEXT_COLLECTING         },
+  { EL_EMC_KEY_8,              &level.score[SC_KEY],                   TEXT_COLLECTING         },
+  { EL_DC_KEY_WHITE,           &level.score[SC_KEY],                   TEXT_COLLECTING         },
+  { EL_MM_KETTLE,              &level.score[SC_EMERALD],               TEXT_COLLECTING         },
+  { EL_DF_CELL,                        &level.score[SC_EMERALD],               TEXT_COLLECTING         },
+  { EL_MM_KEY,                 &level.score[SC_KEY],                   TEXT_COLLECTING         },
+  { EL_MM_LIGHTBALL,           &level.score[SC_ELEM_BONUS],            TEXT_COLLECTING         },
+  { EL_MM_PACMAN,              &level.score[SC_PACMAN],                TEXT_SMASHING           },
+  { EL_MM_PACMAN_RIGHT,                &level.score[SC_PACMAN],                TEXT_SMASHING           },
+  { EL_MM_PACMAN_UP,           &level.score[SC_PACMAN],                TEXT_SMASHING           },
+  { EL_MM_PACMAN_LEFT,         &level.score[SC_PACMAN],                TEXT_SMASHING           },
+  { EL_MM_PACMAN_DOWN,         &level.score[SC_PACMAN],                TEXT_SMASHING           },
+  { EL_AMOEBA_WET,             &level.amoeba_speed,                    TEXT_AMOEBA_SPEED       },
+  { EL_AMOEBA_DRY,             &level.amoeba_speed,                    TEXT_AMOEBA_SPEED       },
+  { EL_AMOEBA_FULL,            &level.amoeba_speed,                    TEXT_AMOEBA_SPEED       },
+  { EL_BD_AMOEBA,              &level.amoeba_speed,                    TEXT_AMOEBA_SPEED       },
+  { EL_EMC_DRIPPER,            &level.amoeba_speed,                    TEXT_AMOEBA_SPEED       },
   { EL_BD_AMOEBA,              &level.bd_amoeba_threshold_too_big,     TEXT_AMOEBA_THRESHOED   },
   { EL_BD_AMOEBA,              &level.bd_amoeba_slow_growth_time,      TEXT_AMOEBA_SLOW_TIME   },
-  { EL_BD_AMOEBA,              &level.bd_amoeba_slow_growth_rate,      TEXT_AMOEBA_SLOW_RATE   },
-  { EL_BD_AMOEBA,              &level.bd_amoeba_fast_growth_rate,      TEXT_AMOEBA_FAST_RATE   },
+  { EL_BD_AMOEBA,              &level.bd_amoeba_slow_growth_rate,      TEXT_AMOEBA_SLOW_RATE,
+                               0, 100                                                          },
+  { EL_BD_AMOEBA,              &level.bd_amoeba_fast_growth_rate,      TEXT_AMOEBA_FAST_RATE,
+                               0, 100                                                          },
   { EL_BD_AMOEBA_2,            &level.bd_amoeba_2_threshold_too_big,   TEXT_AMOEBA_THRESHOED   },
   { EL_BD_AMOEBA_2,            &level.bd_amoeba_2_slow_growth_time,    TEXT_AMOEBA_SLOW_TIME   },
-  { EL_BD_AMOEBA_2,            &level.bd_amoeba_2_slow_growth_rate,    TEXT_AMOEBA_SLOW_RATE   },
-  { EL_BD_AMOEBA_2,            &level.bd_amoeba_2_fast_growth_rate,    TEXT_AMOEBA_FAST_RATE   },
-  { EL_MAGIC_WALL,             &level.time_magic_wall,         TEXT_DURATION           },
-  { EL_BD_MAGIC_WALL,          &level.time_magic_wall,         TEXT_DURATION           },
-  { EL_DC_MAGIC_WALL,          &level.time_magic_wall,         TEXT_DURATION           },
-  { EL_ROBOT_WHEEL,            &level.time_wheel,              TEXT_DURATION           },
-  { EL_TIMEGATE_SWITCH,                &level.time_timegate,           TEXT_DURATION           },
-  { EL_DC_TIMEGATE_SWITCH,     &level.time_timegate,           TEXT_DURATION           },
-  { EL_LIGHT_SWITCH,           &level.time_light,              TEXT_DURATION           },
-  { EL_LIGHT_SWITCH_ACTIVE,    &level.time_light,              TEXT_DURATION           },
-  { EL_SHIELD_NORMAL,          &level.shield_normal_time,      TEXT_DURATION           },
-  { EL_SHIELD_DEADLY,          &level.shield_deadly_time,      TEXT_DURATION           },
-  { EL_EXTRA_TIME,             &level.extra_time,              TEXT_TIME_BONUS         },
-  { EL_TIME_ORB_FULL,          &level.time_orb_time,           TEXT_TIME_BONUS         },
-  { EL_GAME_OF_LIFE,           &level.game_of_life[0],         TEXT_GAME_OF_LIFE_1     },
-  { EL_GAME_OF_LIFE,           &level.game_of_life[1],         TEXT_GAME_OF_LIFE_2     },
-  { EL_GAME_OF_LIFE,           &level.game_of_life[2],         TEXT_GAME_OF_LIFE_3     },
-  { EL_GAME_OF_LIFE,           &level.game_of_life[3],         TEXT_GAME_OF_LIFE_4     },
-  { EL_BIOMAZE,                        &level.biomaze[0],              TEXT_GAME_OF_LIFE_1     },
-  { EL_BIOMAZE,                        &level.biomaze[1],              TEXT_GAME_OF_LIFE_2     },
-  { EL_BIOMAZE,                        &level.biomaze[2],              TEXT_GAME_OF_LIFE_3     },
-  { EL_BIOMAZE,                        &level.biomaze[3],              TEXT_GAME_OF_LIFE_4     },
-  { EL_EMC_ANDROID,            &level.android_move_time,       TEXT_MOVE_SPEED         },
-  { EL_EMC_ANDROID,            &level.android_clone_time,      TEXT_CLONE_SPEED        },
-  { EL_EMC_MAGIC_BALL,         &level.ball_time,               TEXT_BALL_DELAY         },
-  { EL_EMC_LENSES,             &level.lenses_score,            TEXT_COLLECTING         },
-  { EL_EMC_MAGNIFIER,          &level.magnify_score,           TEXT_COLLECTING         },
-  { EL_SPRING,                 &level.slurp_score,             TEXT_SLURPING           },
-  { EL_SPRING_LEFT,            &level.slurp_score,             TEXT_SLURPING           },
-  { EL_SPRING_RIGHT,           &level.slurp_score,             TEXT_SLURPING           },
-  { EL_EMC_LENSES,             &level.lenses_time,             TEXT_DURATION           },
-  { EL_EMC_MAGNIFIER,          &level.magnify_time,            TEXT_DURATION           },
-  { EL_MM_FUSE_ACTIVE,         &level.mm_time_fuse,            TEXT_DELAY_OFF          },
-  { EL_MM_BOMB,                        &level.mm_time_bomb,            TEXT_DELAY_EXPLODING    },
-  { EL_MM_GRAY_BALL,           &level.mm_time_ball,            TEXT_DELAY_CHANGING     },
-  { EL_MM_STEEL_BLOCK,         &level.mm_time_block,           TEXT_DELAY_MOVING       },
-  { EL_MM_WOODEN_BLOCK,                &level.mm_time_block,           TEXT_DELAY_MOVING       },
-
-  { -1,                                NULL,                           NULL                    }
+  { EL_BD_AMOEBA_2,            &level.bd_amoeba_2_slow_growth_rate,    TEXT_AMOEBA_SLOW_RATE,
+                               0, 100                                                          },
+  { EL_BD_AMOEBA_2,            &level.bd_amoeba_2_fast_growth_rate,    TEXT_AMOEBA_FAST_RATE,
+                               0, 100                                                          },
+  { EL_MAGIC_WALL,             &level.time_magic_wall,                 TEXT_DURATION           },
+  { EL_BD_MAGIC_WALL,          &level.time_magic_wall,                 TEXT_DURATION           },
+  { EL_DC_MAGIC_WALL,          &level.time_magic_wall,                 TEXT_DURATION           },
+  { EL_ROBOT_WHEEL,            &level.time_wheel,                      TEXT_DURATION           },
+  { EL_TIMEGATE_SWITCH,                &level.time_timegate,                   TEXT_DURATION           },
+  { EL_DC_TIMEGATE_SWITCH,     &level.time_timegate,                   TEXT_DURATION           },
+  { EL_LIGHT_SWITCH,           &level.time_light,                      TEXT_DURATION           },
+  { EL_LIGHT_SWITCH_ACTIVE,    &level.time_light,                      TEXT_DURATION           },
+  { EL_SHIELD_NORMAL,          &level.shield_normal_time,              TEXT_DURATION           },
+  { EL_SHIELD_DEADLY,          &level.shield_deadly_time,              TEXT_DURATION           },
+  { EL_BD_CLOCK,               &level.bd_clock_extra_time,             TEXT_TIME_BONUS         },
+  { EL_EXTRA_TIME,             &level.extra_time,                      TEXT_TIME_BONUS         },
+  { EL_TIME_ORB_FULL,          &level.time_orb_time,                   TEXT_TIME_BONUS         },
+  { EL_GAME_OF_LIFE,           &level.game_of_life[0],                 TEXT_GAME_OF_LIFE_1,0,8 },
+  { EL_GAME_OF_LIFE,           &level.game_of_life[1],                 TEXT_GAME_OF_LIFE_2,0,8 },
+  { EL_GAME_OF_LIFE,           &level.game_of_life[2],                 TEXT_GAME_OF_LIFE_3,0,8 },
+  { EL_GAME_OF_LIFE,           &level.game_of_life[3],                 TEXT_GAME_OF_LIFE_4,0,8 },
+  { EL_BIOMAZE,                        &level.biomaze[0],                      TEXT_GAME_OF_LIFE_1,0,8 },
+  { EL_BIOMAZE,                        &level.biomaze[1],                      TEXT_GAME_OF_LIFE_2,0,8 },
+  { EL_BIOMAZE,                        &level.biomaze[2],                      TEXT_GAME_OF_LIFE_3,0,8 },
+  { EL_BIOMAZE,                        &level.biomaze[3],                      TEXT_GAME_OF_LIFE_4,0,8 },
+  { EL_EMC_ANDROID,            &level.android_move_time,               TEXT_MOVE_SPEED         },
+  { EL_EMC_ANDROID,            &level.android_clone_time,              TEXT_CLONE_SPEED        },
+  { EL_EMC_MAGIC_BALL,         &level.ball_time,                       TEXT_BALL_DELAY         },
+  { EL_EMC_LENSES,             &level.lenses_score,                    TEXT_COLLECTING         },
+  { EL_EMC_MAGNIFIER,          &level.magnify_score,                   TEXT_COLLECTING         },
+  { EL_SPRING,                 &level.slurp_score,                     TEXT_SLURPING           },
+  { EL_SPRING_LEFT,            &level.slurp_score,                     TEXT_SLURPING           },
+  { EL_SPRING_RIGHT,           &level.slurp_score,                     TEXT_SLURPING           },
+  { EL_EMC_LENSES,             &level.lenses_time,                     TEXT_DURATION           },
+  { EL_EMC_MAGNIFIER,          &level.magnify_time,                    TEXT_DURATION           },
+  { EL_MM_FUSE_ACTIVE,         &level.mm_time_fuse,                    TEXT_DELAY_OFF          },
+  { EL_MM_BOMB,                        &level.mm_time_bomb,                    TEXT_DELAY_EXPLODING    },
+  { EL_MM_GRAY_BALL,           &level.mm_time_ball,                    TEXT_DELAY_CHANGING     },
+  { EL_MM_STEEL_BLOCK,         &level.mm_time_block,                   TEXT_DELAY_MOVING       },
+  { EL_MM_WOODEN_BLOCK,                &level.mm_time_block,                   TEXT_DELAY_MOVING       },
+
+  { -1,                                NULL,                                   NULL                    }
 };
 
 static boolean checkPropertiesConfig(int element)
@@ -11107,27 +11089,14 @@ static void DrawPropertiesConfig(void)
        counterbutton_info[counter_id].y =
          ED_ELEMENT_SETTINGS_YPOS(3 + num_element_counters);
 
-      counterbutton_info[counter_id].value = elements_with_counter[i].value;
+      counterbutton_info[counter_id].value      = elements_with_counter[i].value;
       counterbutton_info[counter_id].text_right = elements_with_counter[i].text;
+      counterbutton_info[counter_id].min_value  = elements_with_counter[i].min_value;
+      counterbutton_info[counter_id].max_value  = elements_with_counter[i].max_value;
 
-      if (properties_element == EL_GAME_OF_LIFE ||
-         properties_element == EL_BIOMAZE)
-      {
-       counterbutton_info[counter_id].min_value = 0;   // min neighbours
-       counterbutton_info[counter_id].max_value = 8;   // max neighbours
-      }
-      else if (strEqual(elements_with_counter[i].text, TEXT_AMOEBA_SLOW_RATE) ||
-              strEqual(elements_with_counter[i].text, TEXT_AMOEBA_FAST_RATE))
-      {
-       counterbutton_info[counter_id].min_value = 0;   // min percent
-       counterbutton_info[counter_id].max_value = 100; // max percent
-      }
-      else
-      {
-       // !!! CHANGE THIS FOR CERTAIN ELEMENTS !!!
-       counterbutton_info[counter_id].min_value = MIN_SCORE;
-       counterbutton_info[counter_id].max_value = MAX_SCORE;
-      }
+      // default: counter values between 0 and 999
+      if (counterbutton_info[counter_id].max_value == 0)
+       counterbutton_info[counter_id].max_value = 999;
 
       MapCounterButtons(counter_id);