rnd-20030416-1-src
authorHolger Schemel <info@artsoft.org>
Wed, 16 Apr 2003 16:37:19 +0000 (18:37 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:41:11 +0000 (10:41 +0200)
src/conftime.h
src/editor.c
src/game.c
src/game.h
src/init.c
src/libgame/sound.c
src/libgame/system.h
src/main.h
src/screens.c

index 07345deb5bc22a3885d507a48e05adc82ed915a9..6338934d4f22cf9d953bae1e4d6159c86e264b4b 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "[2003-04-13 19:16]"
+#define COMPILE_DATE_STRING "[2003-04-15 23:44]"
index 66a09d7bd0ef40cd33cd55e48d80921a358b85c4..df3db706e31ba03f7fce6d18943144d25ba9631d 100644 (file)
@@ -530,19 +530,7 @@ static int random_placement_method = RANDOM_USE_QUANTITY;
 static int random_placement_background_element = EL_SAND;
 static boolean random_placement_background_restricted = FALSE;
 static boolean stick_element_properties_window = FALSE;
-
-#if 1
-boolean custom_element_properties[NUM_ELEMENT_PROPERTIES];
-#else
-static struct
-{
-  boolean indestructible;
-  boolean can_fall;
-  boolean can_smash;
-  boolean pushable;
-  boolean slippery;
-} custom_element_properties[NUM_CUSTOM_ELEMENTS];
-#endif
+static boolean custom_element_properties[NUM_ELEMENT_PROPERTIES];
 
 static struct
 {
@@ -607,7 +595,7 @@ static struct
     0,                                 255,
     GADGET_ID_LEVEL_TIMESCORE_DOWN,    GADGET_ID_LEVEL_TIMESCORE_UP,
     GADGET_ID_LEVEL_TIMESCORE_TEXT,
-    &level.score[SC_ZEITBONUS],
+    &level.score[SC_TIME_BONUS],
     "score for each 10 seconds left",  NULL
   },
   {
@@ -2812,13 +2800,12 @@ static void CopyPlayfield(short src[MAX_LEV_FIELDX][MAX_LEV_FIELDY],
       dst[x][y] = src[x][y];
 }
 
-#if 1
 static void CopyCustomElementPropertiesToEditor(int element)
 {
   int i;
 
   for (i=0; i < NUM_ELEMENT_PROPERTIES; i++)
-    custom_element_properties[i] = PROPERTY_VALUE(element, i);
+    custom_element_properties[i] = HAS_PROPERTY(element, i);
 }
 
 static void CopyCustomElementPropertiesToGame(int element)
@@ -2829,72 +2816,6 @@ static void CopyCustomElementPropertiesToGame(int element)
     SET_PROPERTY(element, i, custom_element_properties[i]);
 }
 
-#else
-
-static void CopyCustomElementPropertiesToEditor()
-{
-  int i;
-
-  for (i=0; i < NUM_CUSTOM_ELEMENTS; i++)
-  {
-    int element = EL_CUSTOM_START + i;
-    int properties = Properties1[element];
-
-    custom_element_properties[i].indestructible =
-      ((properties & EP_BIT_INDESTRUCTIBLE) != 0 ? TRUE : FALSE);
-
-    custom_element_properties[i].can_fall =
-      ((properties & EP_BIT_CAN_FALL) != 0 ? TRUE : FALSE);
-
-    custom_element_properties[i].can_smash =
-      ((properties & EP_BIT_CAN_SMASH) != 0 ? TRUE : FALSE);
-
-    custom_element_properties[i].pushable =
-      ((properties & EP_BIT_PUSHABLE) != 0 ? TRUE : FALSE);
-
-    custom_element_properties[i].slippery =
-      ((properties & EP_BIT_SLIPPERY) != 0 ? TRUE : FALSE);
-  }
-}
-
-static void CopyCustomElementPropertiesToGame()
-{
-  int i;
-
-  for (i=0; i < NUM_CUSTOM_ELEMENTS; i++)
-  {
-    int element = EL_CUSTOM_START + i;
-
-    Properties1[element] = EP_BITMASK_DEFAULT;
-
-    if (custom_element_properties[i].indestructible)
-      Properties1[element] |= EP_BIT_INDESTRUCTIBLE;
-    else
-      Properties1[element] &= ~EP_BIT_INDESTRUCTIBLE;
-
-    if (custom_element_properties[i].can_fall)
-      Properties1[element] |= EP_BIT_CAN_FALL;
-    else
-      Properties1[element] &= ~EP_BIT_CAN_FALL;
-
-    if (custom_element_properties[i].can_smash)
-      Properties1[element] |= EP_BIT_CAN_SMASH;
-    else
-      Properties1[element] &= ~EP_BIT_CAN_SMASH;
-
-    if (custom_element_properties[i].pushable)
-      Properties1[element] |= EP_BIT_PUSHABLE;
-    else
-      Properties1[element] &= ~EP_BIT_PUSHABLE;
-
-    if (custom_element_properties[i].slippery)
-      Properties1[element] |= EP_BIT_SLIPPERY;
-    else
-      Properties1[element] &= ~EP_BIT_SLIPPERY;
-  }
-}
-#endif
-
 void DrawLevelEd()
 {
   CloseDoor(DOOR_CLOSE_ALL);
@@ -3375,45 +3296,45 @@ static struct
   char *text;
 } elements_with_counter[] =
 {
-  { EL_EMERALD,                &level.score[SC_EDELSTEIN],     TEXT_COLLECTING },
-  { EL_BD_DIAMOND,     &level.score[SC_EDELSTEIN],     TEXT_COLLECTING },
-  { EL_EMERALD_YELLOW, &level.score[SC_EDELSTEIN],     TEXT_COLLECTING },
-  { EL_EMERALD_RED,    &level.score[SC_EDELSTEIN],     TEXT_COLLECTING },
-  { EL_EMERALD_PURPLE, &level.score[SC_EDELSTEIN],     TEXT_COLLECTING },
-  { EL_DIAMOND,                &level.score[SC_DIAMANT],       TEXT_COLLECTING },
-  { EL_BUG_RIGHT,      &level.score[SC_KAEFER],        TEXT_SMASHING   },
-  { EL_BUG_UP,         &level.score[SC_KAEFER],        TEXT_SMASHING   },
-  { EL_BUG_LEFT,       &level.score[SC_KAEFER],        TEXT_SMASHING   },
-  { EL_BUG_DOWN,       &level.score[SC_KAEFER],        TEXT_SMASHING   },
-  { EL_BD_BUTTERFLY_RIGHT,&level.score[SC_KAEFER],     TEXT_SMASHING   },
-  { EL_BD_BUTTERFLY_UP,   &level.score[SC_KAEFER],     TEXT_SMASHING   },
-  { EL_BD_BUTTERFLY_LEFT, &level.score[SC_KAEFER],     TEXT_SMASHING   },
-  { EL_BD_BUTTERFLY_DOWN, &level.score[SC_KAEFER],     TEXT_SMASHING   },
-  { EL_SPACESHIP_RIGHT,        &level.score[SC_FLIEGER],       TEXT_SMASHING   },
-  { EL_SPACESHIP_UP,   &level.score[SC_FLIEGER],       TEXT_SMASHING   },
-  { EL_SPACESHIP_LEFT, &level.score[SC_FLIEGER],       TEXT_SMASHING   },
-  { EL_SPACESHIP_DOWN, &level.score[SC_FLIEGER],       TEXT_SMASHING   },
-  { EL_BD_FIREFLY_RIGHT,&level.score[SC_FLIEGER],      TEXT_SMASHING   },
-  { EL_BD_FIREFLY_UP,  &level.score[SC_FLIEGER],       TEXT_SMASHING   },
-  { EL_BD_FIREFLY_LEFT, &level.score[SC_FLIEGER],      TEXT_SMASHING   },
-  { EL_BD_FIREFLY_DOWN, &level.score[SC_FLIEGER],      TEXT_SMASHING   },
-  { EL_YAMYAM,         &level.score[SC_MAMPFER],       TEXT_SMASHING   },
-  { EL_DARK_YAMYAM,    &level.score[SC_MAMPFER],       TEXT_SMASHING   },
+  { EL_EMERALD,                &level.score[SC_EMERALD],       TEXT_COLLECTING },
+  { EL_BD_DIAMOND,     &level.score[SC_EMERALD],       TEXT_COLLECTING },
+  { 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_DIAMOND,                &level.score[SC_DIAMOND],       TEXT_COLLECTING },
+  { 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_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_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_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_YAMYAM,         &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_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_KOKOSNUSS],     TEXT_CRACKING   },
-  { EL_DYNAMITE,       &level.score[SC_DYNAMIT],       TEXT_COLLECTING },
-  { EL_KEY_1,          &level.score[SC_SCHLUESSEL],    TEXT_COLLECTING },
-  { EL_KEY_2,          &level.score[SC_SCHLUESSEL],    TEXT_COLLECTING },
-  { EL_KEY_3,          &level.score[SC_SCHLUESSEL],    TEXT_COLLECTING },
-  { EL_KEY_4,          &level.score[SC_SCHLUESSEL],    TEXT_COLLECTING },
-  { EL_EM_KEY_1_FILE,  &level.score[SC_SCHLUESSEL],    TEXT_COLLECTING },
-  { EL_EM_KEY_2_FILE,  &level.score[SC_SCHLUESSEL],    TEXT_COLLECTING },
-  { EL_EM_KEY_3_FILE,  &level.score[SC_SCHLUESSEL],    TEXT_COLLECTING },
-  { EL_EM_KEY_4_FILE,  &level.score[SC_SCHLUESSEL],    TEXT_COLLECTING },
+  { EL_NUT,            &level.score[SC_NUT],           TEXT_CRACKING   },
+  { EL_DYNAMITE,       &level.score[SC_DYNAMITE],      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_FILE,  &level.score[SC_KEY],           TEXT_COLLECTING },
+  { EL_EM_KEY_2_FILE,  &level.score[SC_KEY],           TEXT_COLLECTING },
+  { EL_EM_KEY_3_FILE,  &level.score[SC_KEY],           TEXT_COLLECTING },
+  { EL_EM_KEY_4_FILE,  &level.score[SC_KEY],           TEXT_COLLECTING },
   { EL_AMOEBA_WET,     &level.amoeba_speed,            TEXT_SPEED      },
   { EL_AMOEBA_DRY,     &level.amoeba_speed,            TEXT_SPEED      },
   { EL_AMOEBA_FULL,    &level.amoeba_speed,            TEXT_SPEED      },
@@ -3504,81 +3425,20 @@ static void DrawPropertiesConfig()
 
   if (IS_CUSTOM_ELEMENT(properties_element))
   {
-#if 0
-    int nr = properties_element - EL_CUSTOM_START;
-#endif
-
     CopyCustomElementPropertiesToEditor(properties_element);
 
-    /* draw checkbutton gadget */
-    i = ED_CHECKBUTTON_ID_CUSTOM_INDESTRUCTIBLE;
-    x = checkbutton_info[i].x + xoffset_right2;
-    y = checkbutton_info[i].y + yoffset_right2;
-
-#if 0
-    checkbutton_info[i].value = &custom_element_properties[nr].indestructible;
-#endif
-
-    DrawTextF(x, y, FONT_TEXT_1, checkbutton_info[i].text);
-    ModifyGadget(level_editor_gadget[checkbutton_info[i].gadget_id],
-                GDI_CHECKED, *checkbutton_info[i].value, GDI_END);
-    MapCheckbuttonGadget(i);
-
-    /* draw checkbutton gadget */
-    i = ED_CHECKBUTTON_ID_CUSTOM_CAN_FALL;
-    x = checkbutton_info[i].x + xoffset_right2;
-    y = checkbutton_info[i].y + yoffset_right2;
-
-#if 0
-    checkbutton_info[i].value = &custom_element_properties[nr].can_fall;
-#endif
-
-    DrawTextF(x, y, FONT_TEXT_1, checkbutton_info[i].text);
-    ModifyGadget(level_editor_gadget[checkbutton_info[i].gadget_id],
-                GDI_CHECKED, *checkbutton_info[i].value, GDI_END);
-    MapCheckbuttonGadget(i);
-
-    /* draw checkbutton gadget */
-    i = ED_CHECKBUTTON_ID_CUSTOM_CAN_SMASH;
-    x = checkbutton_info[i].x + xoffset_right2;
-    y = checkbutton_info[i].y + yoffset_right2;
-
-#if 0
-    checkbutton_info[i].value = &custom_element_properties[nr].can_smash;
-#endif
-
-    DrawTextF(x, y, FONT_TEXT_1, checkbutton_info[i].text);
-    ModifyGadget(level_editor_gadget[checkbutton_info[i].gadget_id],
-                GDI_CHECKED, *checkbutton_info[i].value, GDI_END);
-    MapCheckbuttonGadget(i);
-
-    /* draw checkbutton gadget */
-    i = ED_CHECKBUTTON_ID_CUSTOM_PUSHABLE;
-    x = checkbutton_info[i].x + xoffset_right2;
-    y = checkbutton_info[i].y + yoffset_right2;
-
-#if 0
-    checkbutton_info[i].value = &custom_element_properties[nr].pushable;
-#endif
-
-    DrawTextF(x, y, FONT_TEXT_1, checkbutton_info[i].text);
-    ModifyGadget(level_editor_gadget[checkbutton_info[i].gadget_id],
-                GDI_CHECKED, *checkbutton_info[i].value, GDI_END);
-    MapCheckbuttonGadget(i);
-
-    /* draw checkbutton gadget */
-    i = ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY;
-    x = checkbutton_info[i].x + xoffset_right2;
-    y = checkbutton_info[i].y + yoffset_right2;
-
-#if 0
-    checkbutton_info[i].value = &custom_element_properties[nr].slippery;
-#endif
-
-    DrawTextF(x, y, FONT_TEXT_1, checkbutton_info[i].text);
-    ModifyGadget(level_editor_gadget[checkbutton_info[i].gadget_id],
-                GDI_CHECKED, *checkbutton_info[i].value, GDI_END);
-    MapCheckbuttonGadget(i);
+    for (i =  ED_CHECKBUTTON_ID_CUSTOM_INDESTRUCTIBLE;
+        i <= ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY; i++)
+    {
+      /* draw checkbutton gadget */
+      x = checkbutton_info[i].x + xoffset_right2;
+      y = checkbutton_info[i].y + yoffset_right2;
+
+      DrawTextF(x, y, FONT_TEXT_1, checkbutton_info[i].text);
+      ModifyGadget(level_editor_gadget[checkbutton_info[i].gadget_id],
+                  GDI_CHECKED, *checkbutton_info[i].value, GDI_END);
+      MapCheckbuttonGadget(i);
+    }
 
     /* draw selectbox gadget */
     i = ED_SELECTBOX_ID_CUSTOM_CHANGE_CAUSE;
@@ -3812,11 +3672,65 @@ static void DrawPropertiesTabulatorGadgets()
 
 static void DrawPropertiesInfo()
 {
+  static struct
+  {
+    int value;
+    char *text;
+  }
+  properties[] =
+  {
+    { EP_AMOEBALIVE,           "- living amoeba"               },
+    { EP_AMOEBOID,             "- amoeboid"                    },
+    { EP_PFORTE,               "- pforte"                      },
+    { EP_SOLID,                        "- solid"                       },
+    { EP_INDESTRUCTIBLE,       "- undestructible"              },
+    { EP_SLIPPERY,             "- slippery"                    },
+    { EP_ENEMY,                        "- enemy"                       },
+    { EP_MAUER,                        "- mauer"                       },
+    { EP_CAN_FALL,             "- can fall"                    },
+    { EP_CAN_SMASH,            "- can smash"                   },
+    { EP_CAN_CHANGE,           "- can change"                  },
+    { EP_CAN_MOVE,             "- can move"                    },
+    { EP_COULD_MOVE,           "- could move"                  },
+    { EP_DONT_TOUCH,           "- don't touch"                 },
+    { EP_DONT_GO_TO,           "- don't go to"                 },
+    { EP_FOOD_DARK_YAMYAM,     "- food for dark yamyam"        },
+    { EP_BD_ELEMENT,           "- BD style"                    },
+    { EP_SB_ELEMENT,           "- SB style"                    },
+    { EP_GEM,                  "- gem"                         },
+    { EP_INACTIVE,             "- inactive"                    },
+    { EP_EXPLOSIVE,            "- explosive"                   },
+    { EP_FOOD_PENGUIN,         "- food for penguin"            },
+    { EP_PUSHABLE,             "- pushable"                    },
+    { EP_PLAYER,               "- player"                      },
+    { EP_HAS_CONTENT,          "- has content"                 },
+    { EP_DIGGABLE,             "- diggable"                    },
+    { EP_SP_ELEMENT,           "- SB style"                    },
+    { EP_WALKABLE_THROUGH,     "- walkable through"            },
+    { EP_OVER_PLAYER,          "- over player"                 },
+    { EP_ACTIVE_BOMB,          "- active bomb"                 },
+    { EP_BELT,                 "- belt"                        },
+    { EP_BELT_ACTIVE,          "- active belt"                 },
+    { EP_BELT_SWITCH,          "- belt switch"                 },
+    { EP_WALKABLE_UNDER,       "- walkable under"              },
+    { EP_EM_SLIPPERY_WALL,     "- EM style slippery wall"      },
+    { EP_CAN_BE_CRUMBLED,      "- can be crumbled"             },
+    { -1,                      NULL                            }
+  };
   char *filename = getElementDescriptionFilename(properties_element);
-  int num_elements_in_level;
+  char *percentage_text = "In this level:";
+  char *properties_text = "Standard properties:";
   float percentage;
+  int num_elements_in_level;
+  int num_standard_properties = 0;
+  int font1_nr = FONT_TEXT_1;
+  int font2_nr = FONT_TEXT_2;
+  int font1_width = getFontWidth(font1_nr);
+  int font2_height = getFontHeight(font2_nr);
+  int pad_x = ED_SETTINGS_XPOS;
+  int pad_y = 5 * TILEY;
   int screen_line = 2;
-  int x, y;
+  int i, x, y;
 
   num_elements_in_level = 0;
   for (y=0; y<lev_fieldy; y++) 
@@ -3825,9 +3739,32 @@ static void DrawPropertiesInfo()
        num_elements_in_level++;
   percentage = num_elements_in_level * 100.0 / (lev_fieldx * lev_fieldy);
 
-  DrawTextF(ED_SETTINGS_XPOS, 5 * TILEY, FONT_TEXT_1, "In this level:");
-  DrawTextF(ED_SETTINGS_XPOS + 15 * getFontWidth(FONT_TEXT_1), 5 * TILEY,
-           FONT_TEXT_2, "%d (%.2f%%)", num_elements_in_level, percentage);
+  DrawTextF(pad_x, pad_y, font1_nr, percentage_text);
+  DrawTextF(pad_x + strlen(percentage_text) * font1_width, pad_y,
+           font2_nr, "%d (%.2f%%)", num_elements_in_level, percentage);
+
+  for (i=0; properties[i].value != -1; i++)
+    if (HAS_PROPERTY(properties_element, properties[i].value))
+      num_standard_properties++;
+
+  if (num_standard_properties > 0)
+  {
+    DrawTextF(pad_x, pad_y + screen_line * font2_height, font1_nr,
+             properties_text);
+    screen_line++;
+
+    for (i=0; properties[i].value != -1; i++)
+    {
+      if (!HAS_PROPERTY(properties_element, properties[i].value))
+       continue;
+
+      DrawTextF(pad_x, pad_y + screen_line * font2_height, font2_nr,
+               properties[i].text);
+      screen_line++;
+    }
+
+    screen_line++;
+  }
 
   PrintInfoText("Description:", FONT_TEXT_1, screen_line);
   if (PrintElementDescriptionFromFile(filename, screen_line + 1) == 0)
index bdd3059e469fdbed3da4f07043b79855cc798cca..338e670b5f686b818847cef68dc46279d0cbfd7e 100644 (file)
@@ -533,32 +533,15 @@ static void InitGameEngine()
     };
     static int ep_em_slippery_wall_num = SIZEOF_ARRAY_INT(ep_em_slippery_wall);
 
+    /* special EM style gems behaviour */
     for (i=0; i<ep_em_slippery_wall_num; i++)
-    {
-#if 1
       SET_PROPERTY(ep_em_slippery_wall[i], EP_EM_SLIPPERY_WALL,
                   level.em_slippery_gems);
-#else
-      if (level.em_slippery_gems)      /* special EM style gems behaviour */
-       PROPERTY_VAR(ep_em_slippery_wall[i], EP_EM_SLIPPERY_WALL) |=
-         EP_BIT_EM_SLIPPERY_WALL;
-      else
-       PROPERTY_VAR(ep_em_slippery_wall[i], EP_EM_SLIPPERY_WALL) &=
-         ~EP_BIT_EM_SLIPPERY_WALL;
-#endif
-    }
 
     /* "EL_EXPANDABLE_WALL_GROWING" wasn't slippery for EM gems in 2.0.1 */
-#if 1
     SET_PROPERTY(EL_EXPANDABLE_WALL_GROWING, EP_EM_SLIPPERY_WALL,
                 (level.em_slippery_gems &&
                  game.engine_version > VERSION_IDENT(2,0,1)));
-#else
-    if (level.em_slippery_gems && game.engine_version > VERSION_IDENT(2,0,1))
-      Properties2[EL_EXPANDABLE_WALL_GROWING] |= EP_BIT_EM_SLIPPERY_WALL;
-    else
-      Properties2[EL_EXPANDABLE_WALL_GROWING] &=~EP_BIT_EM_SLIPPERY_WALL;
-#endif
   }
 
   /* initialize changing elements information */
@@ -1123,7 +1106,7 @@ void GameWon()
       if (!tape.playing && !setup.sound_loops)
        PlaySoundStereo(SND_GAME_LEVELTIME_BONUS, SOUND_MIDDLE);
       if (TimeLeft > 0 && !(TimeLeft % 10))
-       RaiseScore(level.score[SC_ZEITBONUS]);
+       RaiseScore(level.score[SC_TIME_BONUS]);
       if (TimeLeft > 100 && !(TimeLeft % 10))
        TimeLeft -= 10;
       else
@@ -1149,7 +1132,7 @@ void GameWon()
       if (!tape.playing && !setup.sound_loops)
        PlaySoundStereo(SND_GAME_LEVELTIME_BONUS, SOUND_MIDDLE);
       if (TimePlayed < 999 && !(TimePlayed % 10))
-       RaiseScore(level.score[SC_ZEITBONUS]);
+       RaiseScore(level.score[SC_TIME_BONUS]);
       if (TimePlayed < 900 && !(TimePlayed % 10))
        TimePlayed += 10;
       else
@@ -2446,11 +2429,11 @@ void TurnRound(int x, int y)
 
     if (IN_LEV_FIELD(left_x, left_y) &&
        (IS_FREE_OR_PLAYER(left_x, left_y) ||
-        IS_MAMPF2(Feld[left_x][left_y])))
+        IS_FOOD_DARK_YAMYAM(Feld[left_x][left_y])))
       can_turn_left = TRUE;
     if (IN_LEV_FIELD(right_x, right_y) &&
        (IS_FREE_OR_PLAYER(right_x, right_y) ||
-        IS_MAMPF2(Feld[right_x][right_y])))
+        IS_FOOD_DARK_YAMYAM(Feld[right_x][right_y])))
       can_turn_right = TRUE;
 
     if (can_turn_left && can_turn_right)
@@ -2737,7 +2720,7 @@ void TurnRound(int x, int y)
             Feld[newx][newy] == EL_ACID ||
             (element == EL_PENGUIN &&
              (Feld[newx][newy] == EL_EXIT_OPEN ||
-              IS_MAMPF3(Feld[newx][newy])))))
+              IS_FOOD_PENGUIN(Feld[newx][newy])))))
          return;
 
        MovDir[x][y] =
@@ -2749,7 +2732,7 @@ void TurnRound(int x, int y)
             Feld[newx][newy] == EL_ACID ||
             (element == EL_PENGUIN &&
              (Feld[newx][newy] == EL_EXIT_OPEN ||
-              IS_MAMPF3(Feld[newx][newy])))))
+              IS_FOOD_PENGUIN(Feld[newx][newy])))))
          return;
 
        MovDir[x][y] = old_move_dir;
@@ -3039,8 +3022,8 @@ void StartMoving(int x, int y)
 
     if (!MovDelay[x][y])       /* start new movement phase */
     {
-      /* all objects that can change their move direction after each step */
-      /* (MAMPFER, MAMPFER2 and PACMAN go straight until they hit a wall  */
+      /* all objects that can change their move direction after each step
+        (YAMYAM, DARK_YAMYAM and PACMAN go straight until they hit a wall */
 
       if (element != EL_YAMYAM &&
          element != EL_DARK_YAMYAM &&
@@ -3167,7 +3150,7 @@ void StartMoving(int x, int y)
 
        return;
       }
-      else if (IS_MAMPF3(Feld[newx][newy]))
+      else if (IS_FOOD_PENGUIN(Feld[newx][newy]))
       {
        if (DigField(local_player, newx, newy, 0, 0, DF_DIG) == MF_MOVING)
          DrawLevelField(newx, newy);
@@ -3262,7 +3245,7 @@ void StartMoving(int x, int y)
       PlaySoundLevel(x, y, SND_YAMYAM_DIGGING);
     }
     else if (element == EL_DARK_YAMYAM && IN_LEV_FIELD(newx, newy) &&
-            IS_MAMPF2(Feld[newx][newy]))
+            IS_FOOD_DARK_YAMYAM(Feld[newx][newy]))
     {
       if (AmoebaNr[newx][newy])
       {
@@ -5047,11 +5030,18 @@ static void CheckGravityMovement(struct PlayerInfo *player)
 
     if (field_under_player_is_free &&
        !player_is_moving_to_valid_field &&
-       !IS_TUBE(Feld[jx][jy]))
+       !IS_WALKABLE_UNDER(Feld[jx][jy]))
       player->programmed_action = MV_DOWN;
   }
 }
 
+/*
+  MoveFigureOneStep()
+  -----------------------------------------------------------------------------
+  dx, dy:              direction (non-diagonal) to try to move the player to
+  real_dx, real_dy:    direction as read from input device (can be diagonal)
+*/
+
 boolean MoveFigureOneStep(struct PlayerInfo *player,
                          int dx, int dy, int real_dx, int real_dy)
 {
@@ -5326,7 +5316,7 @@ void ScrollFigure(struct PlayerInfo *player, int mode)
 
   if (player->MovPos == 0)
   {
-    if (IS_QUICK_GATE(Feld[last_jx][last_jy]))
+    if (IS_WALKABLE_THROUGH(Feld[last_jx][last_jy]))
     {
       /* continue with normal speed after quickly moving through gate */
       HALVE_PLAYER_SPEED(player);
@@ -5667,6 +5657,25 @@ void RemoveHero(struct PlayerInfo *player)
   ExitY = ZY = jy;
 }
 
+#if 0
+/*
+  checkDiagonalPushing()
+  -----------------------------------------------------------------------------
+  check if diagonal input device direction results in pushing of object
+*/
+
+static boolean checkDiagonalPushing(int x, int y, int real_dx, int real_dy)
+{
+}
+#endif
+
+/*
+  DigField()
+  -----------------------------------------------------------------------------
+  x, y:                        field next to player (non-diagonal) to try to dig to
+  real_dx, real_dy:    direction as read from input device (can be diagonal)
+*/
+
 int DigField(struct PlayerInfo *player,
             int x, int y, int real_dx, int real_dy, int mode)
 {
@@ -5697,7 +5706,7 @@ int DigField(struct PlayerInfo *player,
   if (IS_MOVING(x, y) || IS_PLAYER(x, y))
     return MF_NO_ACTION;
 
-  if (IS_TUBE(Feld[jx][jy]))
+  if (IS_WALKABLE_UNDER(Feld[jx][jy]))
   {
     int i = 0;
     int tube_leave_directions[][2] =
@@ -6115,16 +6124,16 @@ int DigField(struct PlayerInfo *player,
       break;
 
     case EL_SP_PORT_LEFT:
-    case EL_SP_GRAVITY_PORT_LEFT:
     case EL_SP_PORT_RIGHT:
-    case EL_SP_GRAVITY_PORT_RIGHT:
     case EL_SP_PORT_UP:
-    case EL_SP_GRAVITY_PORT_UP:
     case EL_SP_PORT_DOWN:
-    case EL_SP_GRAVITY_PORT_DOWN:
     case EL_SP_PORT_HORIZONTAL:
     case EL_SP_PORT_VERTICAL:
     case EL_SP_PORT_ANY:
+    case EL_SP_GRAVITY_PORT_LEFT:
+    case EL_SP_GRAVITY_PORT_RIGHT:
+    case EL_SP_GRAVITY_PORT_UP:
+    case EL_SP_GRAVITY_PORT_DOWN:
       if ((dx == -1 &&
           element != EL_SP_PORT_LEFT &&
           element != EL_SP_GRAVITY_PORT_LEFT &&
@@ -6628,22 +6637,22 @@ void RaiseScoreElement(int element)
     case EL_EMERALD_YELLOW:
     case EL_EMERALD_RED:
     case EL_EMERALD_PURPLE:
-      RaiseScore(level.score[SC_EDELSTEIN]);
+      RaiseScore(level.score[SC_EMERALD]);
       break;
     case EL_DIAMOND:
-      RaiseScore(level.score[SC_DIAMANT]);
+      RaiseScore(level.score[SC_DIAMOND]);
       break;
     case EL_BUG:
     case EL_BD_BUTTERFLY:
-      RaiseScore(level.score[SC_KAEFER]);
+      RaiseScore(level.score[SC_BUG]);
       break;
     case EL_SPACESHIP:
     case EL_BD_FIREFLY:
-      RaiseScore(level.score[SC_FLIEGER]);
+      RaiseScore(level.score[SC_SPACESHIP]);
       break;
     case EL_YAMYAM:
     case EL_DARK_YAMYAM:
-      RaiseScore(level.score[SC_MAMPFER]);
+      RaiseScore(level.score[SC_YAMYAM]);
       break;
     case EL_ROBOT:
       RaiseScore(level.score[SC_ROBOT]);
@@ -6652,16 +6661,16 @@ void RaiseScoreElement(int element)
       RaiseScore(level.score[SC_PACMAN]);
       break;
     case EL_NUT:
-      RaiseScore(level.score[SC_KOKOSNUSS]);
+      RaiseScore(level.score[SC_NUT]);
       break;
     case EL_DYNAMITE:
-      RaiseScore(level.score[SC_DYNAMIT]);
+      RaiseScore(level.score[SC_DYNAMITE]);
       break;
     case EL_KEY_1:
     case EL_KEY_2:
     case EL_KEY_3:
     case EL_KEY_4:
-      RaiseScore(level.score[SC_SCHLUESSEL]);
+      RaiseScore(level.score[SC_KEY]);
       break;
     default:
       break;
index ffacbdddc1e96d1c0165d57fe892a7757a6d2395..edbddd4d28871071b4bc583ef4f79533e01ef408 100644 (file)
 #include "main.h"
 
 /* score for elements (also used by editor.c) */
-#define SC_EDELSTEIN           0
-#define SC_DIAMANT             1
-#define SC_KAEFER              2
-#define SC_FLIEGER             3
-#define SC_MAMPFER             4
+#define SC_EMERALD             0
+#define SC_DIAMOND             1
+#define SC_BUG                 2
+#define SC_SPACESHIP           3
+#define SC_YAMYAM              4
 #define SC_ROBOT               5
 #define SC_PACMAN              6
-#define SC_KOKOSNUSS           7
-#define SC_DYNAMIT             8
-#define SC_SCHLUESSEL          9
-#define SC_ZEITBONUS           10
+#define SC_NUT                 7
+#define SC_DYNAMITE            8
+#define SC_KEY                 9
+#define SC_TIME_BONUS          10
 
 void GetPlayerConfig(void);
 void DrawGameDoorValues(void);
index 7af34951c4cc368fafcb1608b1a9d2f2eaaabffa..508a50af5580138576d56812052d4f5029ec8e14 100644 (file)
@@ -1101,16 +1101,12 @@ void InitElementProperties()
     -1
   };
 
-  static int ep_schluessel[] =
+  static int ep_can_be_crumbled[] =
   {
-    EL_KEY_1,
-    EL_KEY_2,
-    EL_KEY_3,
-    EL_KEY_4,
-    EL_EM_KEY_1,
-    EL_EM_KEY_2,
-    EL_EM_KEY_3,
-    EL_EM_KEY_4,
+    EL_SAND,
+    EL_LANDMINE,
+    EL_TRAP,
+    EL_TRAP_ACTIVE,
     -1
   };
 
@@ -1665,7 +1661,7 @@ void InitElementProperties()
     -1
   };
 
-  static int ep_mampf2[] =
+  static int ep_food_dark_yamyam[] =
   {
     EL_SAND,
     EL_BUG,
@@ -1908,7 +1904,7 @@ void InitElementProperties()
     -1
   };
 
-  static int ep_mampf3[] =
+  static int ep_food_penguin[] =
   {
     EL_EMERALD,
     EL_BD_DIAMOND,
@@ -1949,17 +1945,19 @@ void InitElementProperties()
     -1
   };
 
-  static int ep_has_content[] =
+  static int ep_walkable_over[] =
   {
-    EL_YAMYAM,
-    EL_AMOEBA_WET,
-    EL_AMOEBA_DRY,
-    EL_AMOEBA_FULL,
-    EL_BD_AMOEBA,
+    EL_EMPTY_SPACE,
+    EL_SP_EMPTY_SPACE,
+    /* !!! EL_GATE_[1-4],    EL_GATE_[1-4]_GRAY    !!! */
+    /* !!! EL_EM_GATE_[1-4], EL_EM_GATE_[1-4]_GRAY !!! */
+    EL_SOKOBAN_FIELD_EMPTY,
+    EL_EXIT_OPEN,
+    EL_SP_EXIT_OPEN,
     -1
   };
 
-  static int ep_eatable[] =
+  static int ep_diggable[] =
   {
     EL_SAND,
     EL_SP_BASE,
@@ -1968,60 +1966,47 @@ void InitElementProperties()
     EL_TRAP,
     EL_INVISIBLE_SAND,
     EL_INVISIBLE_SAND_ACTIVE,
+#if 0
+    EL_LANDMINE,
+    EL_SP_BUGGY_BASE_ACTIVE,
+#endif
     -1
   };
 
-  static int ep_sp_element[] =
+  static int ep_collectible[] =
   {
-    EL_SP_EMPTY,
-    EL_SP_ZONK,
-    EL_SP_BASE,
-    EL_SP_MURPHY,
+    EL_BD_DIAMOND,
+    EL_EMERALD,
+    EL_DIAMOND,
+    EL_EMERALD_YELLOW,
+    EL_EMERALD_RED,
+    EL_EMERALD_PURPLE,
+    EL_KEY_1,
+    EL_KEY_2,
+    EL_KEY_3,
+    EL_KEY_4,
+    EL_EM_KEY_1,
+    EL_EM_KEY_2,
+    EL_EM_KEY_3,
+    EL_EM_KEY_4,
+    EL_DYNAMITE,
+    EL_DYNABOMB_INCREASE_NUMBER,
+    EL_DYNABOMB_INCREASE_SIZE,
+    EL_DYNABOMB_INCREASE_POWER,
     EL_SP_INFOTRON,
-    EL_SP_CHIP_SINGLE,
-    EL_SP_HARDWARE_GRAY,
-    EL_SP_EXIT_CLOSED,
-    EL_SP_EXIT_OPEN,
-    EL_SP_DISK_ORANGE,
-    EL_SP_PORT_RIGHT,
-    EL_SP_PORT_DOWN,
-    EL_SP_PORT_LEFT,
-    EL_SP_PORT_UP,
-    EL_SP_GRAVITY_PORT_RIGHT,
-    EL_SP_GRAVITY_PORT_DOWN,
-    EL_SP_GRAVITY_PORT_LEFT,
-    EL_SP_GRAVITY_PORT_UP,
-    EL_SP_SNIKSNAK,
-    EL_SP_DISK_YELLOW,
-    EL_SP_TERMINAL,
     EL_SP_DISK_RED,
-    EL_SP_PORT_VERTICAL,
-    EL_SP_PORT_HORIZONTAL,
-    EL_SP_PORT_ANY,
-    EL_SP_ELECTRON,
-    EL_SP_BUGGY_BASE,
-    EL_SP_CHIP_LEFT,
-    EL_SP_CHIP_RIGHT,
-    EL_SP_HARDWARE_BASE_1,
-    EL_SP_HARDWARE_GREEN,
-    EL_SP_HARDWARE_BLUE,
-    EL_SP_HARDWARE_RED,
-    EL_SP_HARDWARE_YELLOW,
-    EL_SP_HARDWARE_BASE_2,
-    EL_SP_HARDWARE_BASE_3,
-    EL_SP_HARDWARE_BASE_4,
-    EL_SP_HARDWARE_BASE_5,
-    EL_SP_HARDWARE_BASE_6,
-    EL_SP_CHIP_TOP,
-    EL_SP_CHIP_BOTTOM,
-    /* additional elements that appeared in newer Supaplex levels */
-    EL_INVISIBLE_WALL,
-    /* more than one murphy in a level results in an inactive clone */
-    EL_SP_MURPHY_CLONE,
+    EL_PEARL,
+    EL_CRYSTAL,
+    EL_KEY_WHITE,
+    EL_SHIELD_NORMAL,
+    EL_SHIELD_DEADLY,
+    EL_EXTRA_TIME,
+    EL_ENVELOPE,
+    EL_SPEED_PILL,
     -1
   };
 
-  static int ep_quick_gate[] =
+  static int ep_walkable_through[] =
   {
     EL_EM_GATE_1,
     EL_EM_GATE_2,
@@ -2035,13 +2020,13 @@ void InitElementProperties()
     EL_SP_PORT_RIGHT,
     EL_SP_PORT_UP,
     EL_SP_PORT_DOWN,
+    EL_SP_PORT_HORIZONTAL,
+    EL_SP_PORT_VERTICAL,
+    EL_SP_PORT_ANY,
     EL_SP_GRAVITY_PORT_LEFT,
     EL_SP_GRAVITY_PORT_RIGHT,
     EL_SP_GRAVITY_PORT_UP,
     EL_SP_GRAVITY_PORT_DOWN,
-    EL_SP_PORT_HORIZONTAL,
-    EL_SP_PORT_VERTICAL,
-    EL_SP_PORT_ANY,
     EL_SWITCHGATE_OPEN,
     EL_TIMEGATE_OPEN,
     -1
@@ -2136,7 +2121,7 @@ void InitElementProperties()
     -1
   };
 
-  static int ep_tube[] =
+  static int ep_walkable_under[] =
   {
     EL_TUBE_ANY,
     EL_TUBE_VERTICAL,
@@ -2152,12 +2137,68 @@ void InitElementProperties()
     -1
   };
 
-  static int ep_can_be_crumbled[] =
+  static int ep_sp_element[] =
+  {
+    EL_SP_EMPTY,
+    EL_SP_ZONK,
+    EL_SP_BASE,
+    EL_SP_MURPHY,
+    EL_SP_INFOTRON,
+    EL_SP_CHIP_SINGLE,
+    EL_SP_HARDWARE_GRAY,
+    EL_SP_EXIT_CLOSED,
+    EL_SP_EXIT_OPEN,
+    EL_SP_DISK_ORANGE,
+    EL_SP_PORT_RIGHT,
+    EL_SP_PORT_DOWN,
+    EL_SP_PORT_LEFT,
+    EL_SP_PORT_UP,
+    EL_SP_GRAVITY_PORT_RIGHT,
+    EL_SP_GRAVITY_PORT_DOWN,
+    EL_SP_GRAVITY_PORT_LEFT,
+    EL_SP_GRAVITY_PORT_UP,
+    EL_SP_SNIKSNAK,
+    EL_SP_DISK_YELLOW,
+    EL_SP_TERMINAL,
+    EL_SP_DISK_RED,
+    EL_SP_PORT_VERTICAL,
+    EL_SP_PORT_HORIZONTAL,
+    EL_SP_PORT_ANY,
+    EL_SP_ELECTRON,
+    EL_SP_BUGGY_BASE,
+    EL_SP_CHIP_LEFT,
+    EL_SP_CHIP_RIGHT,
+    EL_SP_HARDWARE_BASE_1,
+    EL_SP_HARDWARE_GREEN,
+    EL_SP_HARDWARE_BLUE,
+    EL_SP_HARDWARE_RED,
+    EL_SP_HARDWARE_YELLOW,
+    EL_SP_HARDWARE_BASE_2,
+    EL_SP_HARDWARE_BASE_3,
+    EL_SP_HARDWARE_BASE_4,
+    EL_SP_HARDWARE_BASE_5,
+    EL_SP_HARDWARE_BASE_6,
+    EL_SP_CHIP_TOP,
+    EL_SP_CHIP_BOTTOM,
+    /* additional elements that appeared in newer Supaplex levels */
+    EL_INVISIBLE_WALL,
+    /* more than one murphy in a level results in an inactive clone */
+    EL_SP_MURPHY_CLONE,
+    -1
+  };
+
+  static int ep_has_content[] =
+  {
+    EL_YAMYAM,
+    EL_AMOEBA_WET,
+    EL_AMOEBA_DRY,
+    EL_AMOEBA_FULL,
+    EL_BD_AMOEBA,
+    -1
+  };
+
+  static int ep_solid_new[] =
   {
-    EL_SAND,
-    EL_LANDMINE,
-    EL_TRAP,
-    EL_TRAP_ACTIVE,
     -1
   };
 
@@ -2169,7 +2210,7 @@ void InitElementProperties()
   {
     { ep_amoebalive,           EP_AMOEBALIVE           },
     { ep_amoeboid,             EP_AMOEBOID             },
-    { ep_schluessel,           EP_SCHLUESSEL           },
+    { ep_can_be_crumbled,      EP_CAN_BE_CRUMBLED      },
     { ep_pforte,               EP_PFORTE               },
     { ep_solid,                        EP_SOLID                },
     { ep_indestructible,       EP_INDESTRUCTIBLE       },
@@ -2183,29 +2224,66 @@ void InitElementProperties()
     { ep_could_move,           EP_COULD_MOVE           },
     { ep_dont_touch,           EP_DONT_TOUCH           },
     { ep_dont_go_to,           EP_DONT_GO_TO           },
-    { ep_mampf2,               EP_MAMPF2               },
+    { ep_food_dark_yamyam,     EP_FOOD_DARK_YAMYAM     },
     { ep_bd_element,           EP_BD_ELEMENT           },
     { ep_sb_element,           EP_SB_ELEMENT           },
     { ep_gem,                  EP_GEM                  },
     { ep_inactive,             EP_INACTIVE             },
     { ep_explosive,            EP_EXPLOSIVE            },
-    { ep_mampf3,               EP_MAMPF3               },
+    { ep_food_penguin,         EP_FOOD_PENGUIN         },
     { ep_pushable,             EP_PUSHABLE             },
     { ep_player,               EP_PLAYER               },
-    { ep_has_content,          EP_HAS_CONTENT          },
-    { ep_eatable,              EP_EATABLE              },
-    { ep_sp_element,           EP_SP_ELEMENT           },
-    { ep_quick_gate,           EP_QUICK_GATE           },
+    { ep_walkable_over,                EP_WALKABLE_OVER        },
+    { ep_diggable,             EP_DIGGABLE             },
+    { ep_collectible,          EP_COLLECTIBLE          },
+    { ep_walkable_through,     EP_WALKABLE_THROUGH     },
     { ep_over_player,          EP_OVER_PLAYER          },
     { ep_active_bomb,          EP_ACTIVE_BOMB          },
     { ep_belt,                 EP_BELT                 },
     { ep_belt_active,          EP_BELT_ACTIVE          },
     { ep_belt_switch,          EP_BELT_SWITCH          },
-    { ep_tube,                 EP_TUBE                 },
-    { ep_can_be_crumbled,      EP_CAN_BE_CRUMBLED      },
+    { ep_walkable_under,       EP_WALKABLE_UNDER       },
+    { ep_sp_element,           EP_SP_ELEMENT           },
+    { ep_has_content,          EP_HAS_CONTENT          },
+    { ep_solid_new,            EP_SOLID_NEW            },
     { NULL,                    -1                      }
   };
 
+#if 0
+  static int active_properties[] =
+  {
+    EP_AMOEBALIVE,
+    EP_AMOEBOID,
+    EP_PFORTE,
+    EP_SOLID,
+    EP_ENEMY,
+    EP_MAUER,
+    EP_CAN_FALL,
+    EP_CAN_SMASH,
+    EP_CAN_CHANGE,
+    EP_CAN_MOVE,
+    EP_COULD_MOVE,
+    EP_DONT_TOUCH,
+    EP_DONT_GO_TO,
+    EP_GEM,
+    EP_EXPLOSIVE,
+    EP_PUSHABLE,
+    EP_PLAYER,
+    EP_HAS_CONTENT,
+    EP_DIGGABLE,
+    EP_WALKABLE_THROUGH,
+    EP_OVER_PLAYER,
+    EP_ACTIVE_BOMB,
+
+    EP_BELT,
+    EP_BELT_ACTIVE,
+    EP_BELT_SWITCH,
+    EP_WALKABLE_UNDER,
+    EP_EM_SLIPPERY_WALL,
+    EP_CAN_BE_CRUMBLED,
+  };
+#endif
+
   /* always start with reliable default values (no properties) */
   for (i=0; i<MAX_NUM_ELEMENTS; i++)
     for (j=0; j<NUM_EP_BITFIELDS; j++)
@@ -2213,16 +2291,53 @@ void InitElementProperties()
 
   /* set all predefined element properties from above arrays */
   for (i=0; element_properties[i].elements != NULL; i++)
-    for (j=0; (element_properties[i].elements)[j] >= 0; j++)
+    for (j=0; (element_properties[i].elements)[j] != -1; j++)
       SET_PROPERTY((element_properties[i].elements)[j],
                   element_properties[i].property, TRUE);
 
   /* set properties of character elements */
   for (i=EL_CHAR_START; i<=EL_CHAR_END; i++)
-  {
-    SET_PROPERTY(i, EP_CHAR, TRUE);
     SET_PROPERTY(i, EP_INACTIVE, TRUE);
+
+#if 0
+  /* determine inactive elements (used for engine main loop optimization) */
+  for (i=0; i < MAX_NUM_ELEMENTS; i++)
+  {
+    boolean active = FALSE;
+
+    for (j=0; i < NUM_ELEMENT_PROPERTIES; j++)
+    {
+      if (HAS_PROPERTY(i, j))
+       active = TRUE;
+    }
+
+#if 0
+    if (!active)
+      SET_PROPERTY(i, EP_INACTIVE, TRUE);
+#endif
+  }
+#endif
+
+#if 0
+  for (i=0; i < MAX_NUM_ELEMENTS; i++)
+  {
+    boolean element_is_solid = TRUE;
+
+    if (IS_DIGGABLE(i) ||
+       IS_COLLECTIBLE(i) ||
+       CAN_FALL(i) ||
+       CAN_MOVE(i) ||
+       IS_PUSHABLE(i))
+      element_is_solid = FALSE;
+
+    if (IS_INDESTRUCTIBLE(i))
+      element_is_solid = TRUE;
+
+    if (element_is_solid != HAS_PROPERTY(i, EP_SOLID))
+      printf("::: '%s' should %s solid\n", element_info[i].token_name,
+            (HAS_PROPERTY(i, EP_SOLID) ? "NOT be" : "be"));
   }
+#endif
 }
 
 static void InitGlobal()
index 7ded74fb980289ec9d0e19c43d9de5d1b1c9534e..0299521267dd802ccd5024467a15590fb286ed22 100644 (file)
@@ -299,7 +299,7 @@ void UnixCloseAudio(void)
   if (audio.device_fd)
     close(audio.device_fd);
 
-  if (IS_PARENT_PROCESS())
+  if (IS_PARENT_PROCESS() && HAS_CHILD_PROCESS())
     kill(audio.mixer_pid, SIGTERM);
 }
 
index 930cc113f0ac38d3015eca1d7d6145dc1b3dc786..50b82f3ad480086cbca7447102e9f119e6c648c0 100644 (file)
 #if defined(PLATFORM_UNIX)
 #define IS_PARENT_PROCESS()    (audio.mixer_pid != getpid())
 #define IS_CHILD_PROCESS()     (audio.mixer_pid == getpid())
+#define HAS_CHILD_PROCESS()    (audio.mixer_pid > 0)
 #else
 #define IS_PARENT_PROCESS()    TRUE
 #define IS_CHILD_PROCESS()     FALSE
+#define HAS_CHILD_PROCESS()    FALSE
 #endif
 
 /* type definitions */
index d92af3dcbc4342dd34aa68af4d45fd5513922ee4..6e46f348e52bb8a531acd74c74bd45484554a0c4 100644 (file)
@@ -63,7 +63,7 @@
 /* property values */
 #define EP_AMOEBALIVE          0
 #define EP_AMOEBOID            1
-#define EP_SCHLUESSEL          2
+#define EP_CAN_BE_CRUMBLED     2
 #define EP_PFORTE              3
 #define EP_SOLID               4
 #define EP_INDESTRUCTIBLE      5
 #define EP_COULD_MOVE          13
 #define EP_DONT_TOUCH          14
 #define EP_DONT_GO_TO          15
-#define EP_MAMPF2              16
-#define EP_CHAR                        17
+#define EP_FOOD_DARK_YAMYAM    16
+#define EP_EM_SLIPPERY_WALL    17
 #define EP_BD_ELEMENT          18
 #define EP_SB_ELEMENT          19
 #define EP_GEM                 20
 #define EP_INACTIVE            21
 #define EP_EXPLOSIVE           22
-#define EP_MAMPF3              23
+#define EP_FOOD_PENGUIN                23
 #define EP_PUSHABLE            24
 #define EP_PLAYER              25
-#define EP_HAS_CONTENT         26
-#define EP_EATABLE             27
-#define EP_SP_ELEMENT          28
-#define EP_QUICK_GATE          29
+#define EP_WALKABLE_OVER       26
+#define EP_DIGGABLE            27
+#define EP_COLLECTIBLE         28
+#define EP_WALKABLE_THROUGH    29
 #define EP_OVER_PLAYER         30
 #define EP_ACTIVE_BOMB         31
 
 #define EP_BELT                        32
 #define EP_BELT_ACTIVE         33
 #define EP_BELT_SWITCH         34
-#define EP_TUBE                        35
-#define EP_EM_SLIPPERY_WALL    36
-#define EP_CAN_BE_CRUMBLED     37
+#define EP_WALKABLE_UNDER      35
+#define EP_SP_ELEMENT          36
+#define EP_HAS_CONTENT         37
+#define EP_SOLID_NEW           38
 
-#define NUM_ELEMENT_PROPERTIES 38
+#define NUM_ELEMENT_PROPERTIES 39
 
 #define NUM_EP_BITFIELDS       ((NUM_ELEMENT_PROPERTIES + 31) / 32)
 #define EP_BITFIELD_BASE       0
 
 #define PROPERTY_BIT(p)                (1 << ((p) % 32))
 #define PROPERTY_VAR(e, p)     (Properties[e][(p) / 32])
-#define PROPERTY_VALUE(e, p)   (PROPERTY_VAR(e, p) & PROPERTY_BIT(p))
+#define HAS_PROPERTY(e, p)     ((PROPERTY_VAR(e, p) & PROPERTY_BIT(p)) != 0)
 #define SET_PROPERTY(e, p, v)  ((v) ?                                     \
                                 (PROPERTY_VAR(e,p) |=  PROPERTY_BIT(p)) : \
                                 (PROPERTY_VAR(e,p) &= ~PROPERTY_BIT(p)))
 /* property bit masks */
 #define EP_BIT_AMOEBALIVE      PROPERTY_BIT(EP_AMOEBALIVE)
 #define EP_BIT_AMOEBOID                PROPERTY_BIT(EP_AMOEBOID)
-#define EP_BIT_SCHLUESSEL      PROPERTY_BIT(EP_SCHLUESSEL)
+#define EP_BIT_CAN_BE_CRUMBLED PROPERTY_BIT(EP_CAN_BE_CRUMBLED)
 #define EP_BIT_PFORTE          PROPERTY_BIT(EP_PFORTE)
 #define EP_BIT_SOLID           PROPERTY_BIT(EP_SOLID)
 #define EP_BIT_INDESTRUCTIBLE  PROPERTY_BIT(EP_INDESTRUCTIBLE)
 #define EP_BIT_COULD_MOVE      PROPERTY_BIT(EP_COULD_MOVE)
 #define EP_BIT_DONT_TOUCH      PROPERTY_BIT(EP_DONT_TOUCH)
 #define EP_BIT_DONT_GO_TO      PROPERTY_BIT(EP_DONT_GO_TO)
-#define EP_BIT_MAMPF2          PROPERTY_BIT(EP_MAMPF2)
-#define EP_BIT_CHAR            PROPERTY_BIT(EP_CHAR)
+#define EP_BIT_FOOD_DARK_YAMYAM        PROPERTY_BIT(EP_FOOD_DARK_YAMYAM)
+#define EP_BIT_EM_SLIPPERY_WALL        PROPERTY_BIT(EP_EM_SLIPPERY_WALL)
 #define EP_BIT_BD_ELEMENT      PROPERTY_BIT(EP_BD_ELEMENT)
 #define EP_BIT_SB_ELEMENT      PROPERTY_BIT(EP_SB_ELEMENT)
 #define EP_BIT_GEM             PROPERTY_BIT(EP_GEM)
 #define EP_BIT_INACTIVE                PROPERTY_BIT(EP_INACTIVE)
 #define EP_BIT_EXPLOSIVE       PROPERTY_BIT(EP_EXPLOSIVE)
-#define EP_BIT_MAMPF3          PROPERTY_BIT(EP_MAMPF3)
+#define EP_BIT_FOOD_PENGUIN    PROPERTY_BIT(EP_FOOD_PENGUIN)
 #define EP_BIT_PUSHABLE                PROPERTY_BIT(EP_PUSHABLE)
 #define EP_BIT_PLAYER          PROPERTY_BIT(EP_PLAYER)
-#define EP_BIT_HAS_CONTENT     PROPERTY_BIT(EP_HAS_CONTENT)
-#define EP_BIT_EATABLE         PROPERTY_BIT(EP_EATABLE)
-#define EP_BIT_SP_ELEMENT      PROPERTY_BIT(EP_SP_ELEMENT)
-#define EP_BIT_QUICK_GATE      PROPERTY_BIT(EP_QUICK_GATE)
+#define EP_BIT_WALKABLE_OVER   PROPERTY_BIT(EP_WALKABLE_OVER)
+#define EP_BIT_DIGGABLE                PROPERTY_BIT(EP_DIGGABLE)
+#define EP_BIT_COLLECTIBLE     PROPERTY_BIT(EP_COLLECTIBLE)
+#define EP_BIT_WALKABLE_THROUGH PROPERTY_BIT(EP_WALKABLE_THROUGH)
 #define EP_BIT_OVER_PLAYER     PROPERTY_BIT(EP_OVER_PLAYER)
 #define EP_BIT_ACTIVE_BOMB     PROPERTY_BIT(EP_ACTIVE_BOMB)
 
-/* values for 'Properties2' */
 #define EP_BIT_BELT            PROPERTY_BIT(EP_BELT)
 #define EP_BIT_BELT_ACTIVE     PROPERTY_BIT(EP_BELT_ACTIVE)
 #define EP_BIT_BELT_SWITCH     PROPERTY_BIT(EP_BELT_SWITCH)
-#define EP_BIT_TUBE            PROPERTY_BIT(EP_TUBE)
-#define EP_BIT_EM_SLIPPERY_WALL        PROPERTY_BIT(EP_EM_SLIPPERY_WALL)
-#define EP_BIT_CAN_BE_CRUMBLED PROPERTY_BIT(EP_CAN_BE_CRUMBLED)
+#define EP_BIT_WALKABLE_UNDER  PROPERTY_BIT(EP_WALKABLE_UNDER)
+#define EP_BIT_SP_ELEMENT      PROPERTY_BIT(EP_SP_ELEMENT)
+#define EP_BIT_HAS_CONTENT     PROPERTY_BIT(EP_HAS_CONTENT)
+#define EP_BIT_SOLID_NEW       PROPERTY_BIT(EP_SOLID_NEW)
 
 
 #define EP_BITMASK_DEFAULT     0
 
 /* property macros */
-#define IS_AMOEBALIVE(e)       PROPERTY_VALUE(e, EP_AMOEBALIVE)
-#define IS_AMOEBOID(e)         PROPERTY_VALUE(e, EP_AMOEBOID)
-#define IS_SCHLUESSEL(e)       PROPERTY_VALUE(e, EP_SCHLUESSEL)
-#define IS_PFORTE(e)           PROPERTY_VALUE(e, EP_PFORTE)
-#define IS_SOLID(e)            PROPERTY_VALUE(e, EP_SOLID)
-#define IS_INDESTRUCTIBLE(e)   PROPERTY_VALUE(e, EP_INDESTRUCTIBLE)
-#define IS_SLIPPERY(e)         PROPERTY_VALUE(e, EP_SLIPPERY)
-#define IS_ENEMY(e)            PROPERTY_VALUE(e, EP_ENEMY)
-#define IS_MAUER(e)            PROPERTY_VALUE(e, EP_MAUER)
-#define CAN_FALL(e)            PROPERTY_VALUE(e, EP_CAN_FALL)
-#define CAN_SMASH(e)           PROPERTY_VALUE(e, EP_CAN_SMASH)
-#define CAN_CHANGE(e)          PROPERTY_VALUE(e, EP_CAN_CHANGE)
-#define CAN_MOVE(e)            PROPERTY_VALUE(e, EP_CAN_MOVE)
-#define COULD_MOVE(e)          PROPERTY_VALUE(e, EP_COULD_MOVE)
-#define DONT_TOUCH(e)          PROPERTY_VALUE(e, EP_DONT_TOUCH)
-#define DONT_GO_TO(e)          PROPERTY_VALUE(e, EP_DONT_GO_TO)
-#define IS_MAMPF2(e)           PROPERTY_VALUE(e, EP_MAMPF2)
-#define IS_CHAR(e)             PROPERTY_VALUE(e, EP_CHAR)
-#define IS_BD_ELEMENT(e)       PROPERTY_VALUE(e, EP_BD_ELEMENT)
-#define IS_SB_ELEMENT(e)       PROPERTY_VALUE(e, EP_SB_ELEMENT)
-#define IS_GEM(e)              PROPERTY_VALUE(e, EP_GEM)
-#define IS_INACTIVE(e)         PROPERTY_VALUE(e, EP_INACTIVE)
-#define IS_EXPLOSIVE(e)                PROPERTY_VALUE(e, EP_EXPLOSIVE)
-#define IS_MAMPF3(e)           PROPERTY_VALUE(e, EP_MAMPF3)
-#define IS_PUSHABLE(e)         PROPERTY_VALUE(e, EP_PUSHABLE)
-#define ELEM_IS_PLAYER(e)      PROPERTY_VALUE(e, EP_PLAYER)
-#define HAS_CONTENT(e)         PROPERTY_VALUE(e, EP_HAS_CONTENT)
-#define IS_EATABLE(e)          PROPERTY_VALUE(e, EP_EATABLE)
-#define IS_SP_ELEMENT(e)       PROPERTY_VALUE(e, EP_SP_ELEMENT)
-#define IS_QUICK_GATE(e)       PROPERTY_VALUE(e, EP_QUICK_GATE)
-#define IS_OVER_PLAYER(e)      PROPERTY_VALUE(e, EP_OVER_PLAYER)
-#define IS_ACTIVE_BOMB(e)      PROPERTY_VALUE(e, EP_ACTIVE_BOMB)
-
-#define IS_BELT(e)             PROPERTY_VALUE(e, EP_BELT)
-#define IS_BELT_ACTIVE(e)      PROPERTY_VALUE(e, EP_BELT_ACTIVE)
-#define IS_BELT_SWITCH(e)      PROPERTY_VALUE(e, EP_BELT_SWITCH)
-#define IS_TUBE(e)             PROPERTY_VALUE(e, EP_TUBE)
-#define IS_EM_SLIPPERY_WALL(e) PROPERTY_VALUE(e, EP_EM_SLIPPERY_WALL)
-#define CAN_BE_CRUMBLED(e)     PROPERTY_VALUE(e, EP_CAN_BE_CRUMBLED)
+#define IS_AMOEBALIVE(e)       HAS_PROPERTY(e, EP_AMOEBALIVE)
+#define IS_AMOEBOID(e)         HAS_PROPERTY(e, EP_AMOEBOID)
+#define CAN_BE_CRUMBLED(e)     HAS_PROPERTY(e, EP_CAN_BE_CRUMBLED)
+#define IS_PFORTE(e)           HAS_PROPERTY(e, EP_PFORTE)
+#define IS_SOLID(e)            HAS_PROPERTY(e, EP_SOLID)
+#define IS_INDESTRUCTIBLE(e)   HAS_PROPERTY(e, EP_INDESTRUCTIBLE)
+#define IS_SLIPPERY(e)         HAS_PROPERTY(e, EP_SLIPPERY)
+#define IS_ENEMY(e)            HAS_PROPERTY(e, EP_ENEMY)
+#define IS_MAUER(e)            HAS_PROPERTY(e, EP_MAUER)
+#define CAN_FALL(e)            HAS_PROPERTY(e, EP_CAN_FALL)
+#define CAN_SMASH(e)           HAS_PROPERTY(e, EP_CAN_SMASH)
+#define CAN_CHANGE(e)          HAS_PROPERTY(e, EP_CAN_CHANGE)
+#define CAN_MOVE(e)            HAS_PROPERTY(e, EP_CAN_MOVE)
+#define COULD_MOVE(e)          HAS_PROPERTY(e, EP_COULD_MOVE)
+#define DONT_TOUCH(e)          HAS_PROPERTY(e, EP_DONT_TOUCH)
+#define DONT_GO_TO(e)          HAS_PROPERTY(e, EP_DONT_GO_TO)
+#define IS_FOOD_DARK_YAMYAM(e) HAS_PROPERTY(e, EP_FOOD_DARK_YAMYAM)
+#define IS_EM_SLIPPERY_WALL(e) HAS_PROPERTY(e, EP_EM_SLIPPERY_WALL)
+#define IS_BD_ELEMENT(e)       HAS_PROPERTY(e, EP_BD_ELEMENT)
+#define IS_SB_ELEMENT(e)       HAS_PROPERTY(e, EP_SB_ELEMENT)
+#define IS_GEM(e)              HAS_PROPERTY(e, EP_GEM)
+#define IS_INACTIVE(e)         HAS_PROPERTY(e, EP_INACTIVE)
+#define IS_EXPLOSIVE(e)                HAS_PROPERTY(e, EP_EXPLOSIVE)
+#define IS_FOOD_PENGUIN(e)     HAS_PROPERTY(e, EP_FOOD_PENGUIN)
+#define IS_PUSHABLE(e)         HAS_PROPERTY(e, EP_PUSHABLE)
+#define ELEM_IS_PLAYER(e)      HAS_PROPERTY(e, EP_PLAYER)
+#define IS_WALKABLE_OVER(e)    HAS_PROPERTY(e, EP_WALKABLE_OVER)
+#define IS_DIGGABLE(e)         HAS_PROPERTY(e, EP_DIGGABLE)
+#define IS_COLLECTIBLE(e)      HAS_PROPERTY(e, EP_COLLECTIBLE)
+#define IS_WALKABLE_THROUGH(e) HAS_PROPERTY(e, EP_WALKABLE_THROUGH)
+#define IS_OVER_PLAYER(e)      HAS_PROPERTY(e, EP_OVER_PLAYER)
+#define IS_ACTIVE_BOMB(e)      HAS_PROPERTY(e, EP_ACTIVE_BOMB)
+
+#define IS_BELT(e)             HAS_PROPERTY(e, EP_BELT)
+#define IS_BELT_ACTIVE(e)      HAS_PROPERTY(e, EP_BELT_ACTIVE)
+#define IS_BELT_SWITCH(e)      HAS_PROPERTY(e, EP_BELT_SWITCH)
+#define IS_WALKABLE_UNDER(e)   HAS_PROPERTY(e, EP_WALKABLE_UNDER)
+#define IS_SP_ELEMENT(e)       HAS_PROPERTY(e, EP_SP_ELEMENT)
+#define HAS_CONTENT(e)         HAS_PROPERTY(e, EP_HAS_CONTENT)
+#define IS_SOLID_NEW(e)                HAS_PROPERTY(e, EP_SOLID_NEW)
 
 #define IS_CUSTOM_ELEMENT(e)   ((e) >= EL_CUSTOM_START &&      \
                                 (e) <= EL_CUSTOM_END)
 
 #define PLAYERINFO(x,y)                (&stored_player[StorePlayer[x][y]-EL_PLAYER_1])
 #define SHIELD_ON(p)           ((p)->shield_normal_time_left > 0)
-#define PROTECTED_FIELD(x,y)   (IS_TUBE(Feld[x][y]))
+#define PROTECTED_FIELD(x,y)   (IS_WALKABLE_UNDER(Feld[x][y]) &&       \
+                                IS_INDESTRUCTIBLE(Feld[x][y]))
 #define PLAYER_PROTECTED(x,y)  (SHIELD_ON(PLAYERINFO(x, y)) ||         \
                                 PROTECTED_FIELD(x, y))
 
index e9bd5ddafb579833420f042c1310960e14c79377..06260aeb6d8d6248df51d04fe56b5f53dc3e3d6f 100644 (file)
@@ -491,116 +491,6 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button)
 static long helpscreen_state;
 static int helpscreen_step[MAX_HELPSCREEN_ELS];
 static int helpscreen_frame[MAX_HELPSCREEN_ELS];
-#if 0
-static int OLD_helpscreen_action[] =
-{
-  GFX_SPIELER1_DOWN,4,2,
-  GFX_SPIELER1_UP,4,2,
-  GFX_SPIELER1_LEFT,4,2,
-  GFX_SPIELER1_RIGHT,4,2,
-  GFX_SPIELER1_PUSH_LEFT,4,2,
-  GFX_SPIELER1_PUSH_RIGHT,4,2,                                 HA_NEXT,
-  GFX_ERDREICH,1,100,                                          HA_NEXT,
-  GFX_LEERRAUM,1,100,                                          HA_NEXT,
-  GFX_MORAST_LEER,1,100,                                       HA_NEXT,
-  GFX_BETON,1,100,                                             HA_NEXT,
-  GFX_MAUERWERK,1,100,                                         HA_NEXT,
-  GFX_MAUER_L1,  3,4, GFX_MAUERWERK,1,20, GFX_LEERRAUM,1,10,
-  GFX_MAUER_R1,  3,4, GFX_MAUERWERK,1,20, GFX_LEERRAUM,1,10,
-  GFX_MAUER_UP,  3,4, GFX_MAUERWERK,1,20, GFX_LEERRAUM,1,10,
-  GFX_MAUER_DOWN,3,4, GFX_MAUERWERK,1,20, GFX_LEERRAUM,1,10,   HA_NEXT,
-  GFX_UNSICHTBAR,1,100,                                                HA_NEXT,
-  GFX_FELSBODEN,1,100,                                         HA_NEXT,
-  GFX_CHAR_A,30,4, GFX_CHAR_AUSRUF,32,4,                       HA_NEXT,
-  GFX_EDELSTEIN,2,5,                                           HA_NEXT,
-  GFX_DIAMANT,2,5,                                             HA_NEXT,
-  GFX_EDELSTEIN_BD,2,5,                                                HA_NEXT,
-  GFX_EDELSTEIN_GELB,2,5, GFX_EDELSTEIN_ROT,2,5,
-  GFX_EDELSTEIN_LILA,2,5,                                      HA_NEXT,
-  GFX_FELSBROCKEN,4,5,                                         HA_NEXT,
-  GFX_BOMBE,1,50, GFX_EXPLOSION,8,1, GFX_LEERRAUM,1,10,                HA_NEXT,
-  GFX_KOKOSNUSS,1,50, GFX_CRACKINGNUT,3,1, GFX_EDELSTEIN,1,10, HA_NEXT,
-  GFX_ERZ_EDEL,1,50, GFX_EXPLOSION,8,1, GFX_EDELSTEIN,1,10,    HA_NEXT,
-  GFX_ERZ_DIAM,1,50, GFX_EXPLOSION,8,1, GFX_DIAMANT,1,10,      HA_NEXT,
-  GFX_ERZ_EDEL_BD,1,50, GFX_EXPLOSION,8,1,GFX_EDELSTEIN_BD,1,10,HA_NEXT,
-  GFX_ERZ_EDEL_GELB,1,50, GFX_EXPLOSION,8,1,
-  GFX_EDELSTEIN_GELB,1,10, GFX_ERZ_EDEL_ROT,1,50,
-  GFX_EXPLOSION,8,1, GFX_EDELSTEIN_ROT,1,10,
-  GFX_ERZ_EDEL_LILA,1,50, GFX_EXPLOSION,8,1,
-  GFX_EDELSTEIN_LILA,1,10,                                     HA_NEXT,
-  GFX_GEBLUBBER,4,4,                                           HA_NEXT,
-  GFX_SCHLUESSEL1,4,25,                                                HA_NEXT,
-  GFX_PFORTE1,4,25,                                            HA_NEXT,
-  GFX_PFORTE1X,4,25,                                           HA_NEXT,
-  GFX_DYNAMIT_AUS,1,100,                                       HA_NEXT,
-  GFX_DYNAMIT,7,6, GFX_EXPLOSION,8,1, GFX_LEERRAUM,1,10,       HA_NEXT,
-  GFX_DYNABOMB+0,4,3, GFX_DYNABOMB+3,1,3, GFX_DYNABOMB+2,1,3,
-  GFX_DYNABOMB+1,1,3, GFX_DYNABOMB+0,1,3, GFX_EXPLOSION,8,1,
-  GFX_LEERRAUM,1,10,                                           HA_NEXT,
-  GFX_DYNABOMB_NR,1,100,                                       HA_NEXT,
-  GFX_DYNABOMB_SZ,1,100,                                       HA_NEXT,
-  GFX_FLIEGER+4,1,3, GFX_FLIEGER+0,1,3, GFX_FLIEGER+4,1,3,
-  GFX_FLIEGER+5,1,3, GFX_FLIEGER+1,1,3, GFX_FLIEGER+5,1,3,
-  GFX_FLIEGER+6,1,3, GFX_FLIEGER+2,1,3, GFX_FLIEGER+6,1,3,
-  GFX_FLIEGER+7,1,3, GFX_FLIEGER+3,1,3, GFX_FLIEGER+7,1,3,     HA_NEXT,
-  GFX_KAEFER+4,1,1, GFX_KAEFER+0,1,1, GFX_KAEFER+4,1,1,
-  GFX_KAEFER+5,1,1, GFX_KAEFER+1,1,1, GFX_KAEFER+5,1,1,
-  GFX_KAEFER+6,1,1, GFX_KAEFER+2,1,1, GFX_KAEFER+6,1,1,
-  GFX_KAEFER+7,1,1, GFX_KAEFER+3,1,1, GFX_KAEFER+7,1,1,                HA_NEXT,
-  GFX_BUTTERFLY,2,2,                                           HA_NEXT,
-  GFX_FIREFLY,2,2,                                             HA_NEXT,
-  GFX_PACMAN+0,1,3, GFX_PACMAN+4,1,2, GFX_PACMAN+0,1,3,
-  GFX_PACMAN+1,1,3, GFX_PACMAN+5,1,2, GFX_PACMAN+1,1,3,
-  GFX_PACMAN+2,1,3, GFX_PACMAN+6,1,2, GFX_PACMAN+2,1,3,
-  GFX_PACMAN+3,1,3, GFX_PACMAN+7,1,2, GFX_PACMAN+3,1,3,                HA_NEXT,
-  GFX_MAMPFER+0,4,1, GFX_MAMPFER+3,1,1, GFX_MAMPFER+2,1,1,
-  GFX_MAMPFER+1,1,1, GFX_MAMPFER+0,1,1,                                HA_NEXT,
-  GFX_MAMPFER2+0,4,1, GFX_MAMPFER2+3,1,1, GFX_MAMPFER2+2,1,1,
-  GFX_MAMPFER2+1,1,1, GFX_MAMPFER2+0,1,1,                      HA_NEXT,
-  GFX_ROBOT+0,4,1, GFX_ROBOT+3,1,1, GFX_ROBOT+2,1,1,
-  GFX_ROBOT+1,1,1, GFX_ROBOT+0,1,1,                            HA_NEXT,
-  GFX_MOLE_DOWN,4,2,
-  GFX_MOLE_UP,4,2,
-  GFX_MOLE_LEFT,4,2,
-  GFX_MOLE_RIGHT,4,2,                                          HA_NEXT,
-  GFX_PINGUIN_DOWN,4,2,
-  GFX_PINGUIN_UP,4,2,
-  GFX_PINGUIN_LEFT,4,2,
-  GFX_PINGUIN_RIGHT,4,2,                                       HA_NEXT,
-  GFX_SCHWEIN_DOWN,4,2,
-  GFX_SCHWEIN_UP,4,2,
-  GFX_SCHWEIN_LEFT,4,2,
-  GFX_SCHWEIN_RIGHT,4,2,                                       HA_NEXT,
-  GFX_DRACHE_DOWN,4,2,
-  GFX_DRACHE_UP,4,2,
-  GFX_DRACHE_LEFT,4,2,
-  GFX_DRACHE_RIGHT,4,2,                                                HA_NEXT,
-  GFX_SONDE_START,8,1,                                         HA_NEXT,
-  GFX_ABLENK,4,1,                                              HA_NEXT,
-  GFX_BIRNE_AUS,1,25, GFX_BIRNE_EIN,1,25,                      HA_NEXT,
-  GFX_ZEIT_VOLL,1,25, GFX_ZEIT_LEER,1,25,                      HA_NEXT,
-  GFX_TROPFEN,1,25, GFX_AMOEBING,4,1, GFX_AMOEBE_LEBT,1,10,    HA_NEXT,
-  GFX_AMOEBE_TOT+2,2,50, GFX_AMOEBE_TOT,2,50,                  HA_NEXT,
-  GFX_AMOEBE_LEBT,4,40,                                                HA_NEXT,
-  GFX_AMOEBE_LEBT,1,10,        GFX_AMOEBING,4,2,                       HA_NEXT,
-  GFX_AMOEBE_LEBT,1,25, GFX_AMOEBE_TOT,1,25, GFX_EXPLOSION,8,1,
-  GFX_DIAMANT,1,10,                                            HA_NEXT,
-  GFX_LIFE,1,100,                                              HA_NEXT,
-  GFX_LIFE_ASYNC,1,100,                                                HA_NEXT,
-  GFX_MAGIC_WALL_OFF,4,2,                                      HA_NEXT,
-  GFX_MAGIC_WALL_BD_OFF,4,2,                                   HA_NEXT,
-  GFX_AUSGANG_ZU,1,100, GFX_AUSGANG_ACT,4,2,
-  GFX_AUSGANG_AUF+0,4,2, GFX_AUSGANG_AUF+3,1,2,
-  GFX_AUSGANG_AUF+2,1,2, GFX_AUSGANG_AUF+1,1,2,                        HA_NEXT,
-  GFX_AUSGANG_AUF+0,4,2, GFX_AUSGANG_AUF+3,1,2,
-  GFX_AUSGANG_AUF+2,1,2, GFX_AUSGANG_AUF+1,1,2,                        HA_NEXT,
-  GFX_SOKOBAN_OBJEKT,1,100,                                    HA_NEXT,
-  GFX_SOKOBAN_FELD_LEER,1,100,                                 HA_NEXT,
-  GFX_SOKOBAN_FELD_VOLL,1,100,                                 HA_NEXT,
-  GFX_SPEED_PILL,1,100,                                                HA_NEXT,
-  HA_END
-};
-#endif
 
 static int helpscreen_action[] =
 {