rnd-19990807-1-src
authorHolger Schemel <info@artsoft.org>
Sat, 7 Aug 1999 19:22:34 +0000 (21:22 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:34:05 +0000 (10:34 +0200)
src/editor.c
src/game.c
src/image.c
src/init.c
src/main.c
src/main.h
src/pcx.c
src/pcx.h
src/tools.c

index bf51938f137493e71415709821e209493379b7bf..6aa94aeb8a70e83c0256b1ca2d709c85512081bc 100644 (file)
@@ -736,7 +736,7 @@ int editor_element[] =
   EL_CHAR('U'),
   EL_CHAR('L'),
 
   EL_CHAR('U'),
   EL_CHAR('L'),
 
-  EL_CHAR_MINUS,
+  EL_CHAR('-'),
   EL_CHAR('D'),
   EL_CHAR('E'),
   EL_CHAR('R'),
   EL_CHAR('D'),
   EL_CHAR('E'),
   EL_CHAR('R'),
@@ -774,7 +774,7 @@ int editor_element[] =
   EL_CHAR('E'),
   EL_CHAR('M'),
   EL_CHAR('E'),
   EL_CHAR('E'),
   EL_CHAR('M'),
   EL_CHAR('E'),
-  EL_CHAR_MINUS,
+  EL_CHAR('-'),
 
   EL_CHAR('R'),
   EL_CHAR('A'),
 
   EL_CHAR('R'),
   EL_CHAR('A'),
@@ -936,7 +936,7 @@ int editor_element[] =
   EL_CHAR('K'),
   EL_CHAR('O'),
 
   EL_CHAR('K'),
   EL_CHAR('O'),
 
-  EL_CHAR_MINUS,
+  EL_CHAR('-'),
   EL_CHAR('B'),
   EL_CHAR('A'),
   EL_CHAR('N'),
   EL_CHAR('B'),
   EL_CHAR('A'),
   EL_CHAR('N'),
@@ -946,11 +946,6 @@ int editor_element[] =
   EL_SOKOBAN_FELD_VOLL,
   EL_BETON,
 
   EL_SOKOBAN_FELD_VOLL,
   EL_BETON,
 
-  EL_LEERRAUM,
-  EL_LEERRAUM,
-  EL_LEERRAUM,
-  EL_LEERRAUM,
-
   EL_CHAR('S'),
   EL_CHAR('U'),
   EL_CHAR('P'),
   EL_CHAR('S'),
   EL_CHAR('U'),
   EL_CHAR('P'),
@@ -1011,6 +1006,56 @@ int editor_element[] =
   EL_SP_CHIP_UPPER,
   EL_SP_CHIP_LOWER,
 
   EL_SP_CHIP_UPPER,
   EL_SP_CHIP_LOWER,
 
+  EL_CHAR('D'),
+  EL_CHAR('I'),
+  EL_CHAR('A'),
+  EL_CHAR('-'),
+
+  EL_CHAR('M'),
+  EL_CHAR('O'),
+  EL_CHAR('N'),
+  EL_CHAR('D'),
+
+  EL_CHAR('C'),
+  EL_CHAR('A'),
+  EL_CHAR('V'),
+  EL_CHAR('E'),
+
+  EL_CHAR('S'),
+  EL_CHAR(' '),
+  EL_CHAR('I'),
+  EL_CHAR('I'),
+
+  EL_BELT1_LEFT,
+  EL_BELT1_MIDDLE,
+  EL_BELT1_RIGHT,
+  EL_BELT1_SWITCH_M,
+
+  EL_BELT2_LEFT,
+  EL_BELT2_MIDDLE,
+  EL_BELT2_RIGHT,
+  EL_BELT2_SWITCH_M,
+
+  EL_BELT3_LEFT,
+  EL_BELT3_MIDDLE,
+  EL_BELT3_RIGHT,
+  EL_BELT3_SWITCH_M,
+
+  EL_BELT4_LEFT,
+  EL_BELT4_MIDDLE,
+  EL_BELT4_RIGHT,
+  EL_BELT4_SWITCH_M,
+
+  EL_BELT1_SWITCH_L,
+  EL_BELT2_SWITCH_L,
+  EL_BELT3_SWITCH_L,
+  EL_BELT4_SWITCH_L,
+
+  EL_BELT1_SWITCH_R,
+  EL_BELT2_SWITCH_R,
+  EL_BELT3_SWITCH_R,
+  EL_BELT4_SWITCH_R,
+
   /*
   EL_CHAR('D'),
   EL_CHAR('Y'),
   /*
   EL_CHAR('D'),
   EL_CHAR('Y'),
index d4860369384bee8c3a33cf2f685e70d89d1429c4..ce6ca3ab084668cdfcd63662c5408697270e0fce 100644 (file)
@@ -23,6 +23,9 @@
 #include "joystick.h"
 #include "network.h"
 
 #include "joystick.h"
 #include "network.h"
 
+/* this switch controls how rocks move horizontally */
+#define OLD_GAME_BEHAVIOUR     FALSE
+
 /* for DigField() */
 #define DF_NO_PUSH             0
 #define DF_DIG                 1
 /* for DigField() */
 #define DF_NO_PUSH             0
 #define DF_DIG                 1
@@ -144,7 +147,7 @@ static unsigned int getStateCheckSum(int counter)
     checksum += mult++ * StorePlayer[x][y];
     checksum += mult++ * Frame[x][y];
     checksum += mult++ * AmoebaNr[x][y];
     checksum += mult++ * StorePlayer[x][y];
     checksum += mult++ * Frame[x][y];
     checksum += mult++ * AmoebaNr[x][y];
-    checksum += mult++ * JustHit[x][y];
+    checksum += mult++ * JustStopped[x][y];
     checksum += mult++ * Stop[x][y];
     */
   }
     checksum += mult++ * Stop[x][y];
     */
   }
@@ -366,6 +369,7 @@ void InitGame()
     player->MovDir = MV_NO_MOVING;
     player->MovPos = 0;
     player->Pushing = FALSE;
     player->MovDir = MV_NO_MOVING;
     player->MovPos = 0;
     player->Pushing = FALSE;
+    player->Switching = FALSE;
     player->GfxPos = 0;
     player->Frame = 0;
 
     player->GfxPos = 0;
     player->Frame = 0;
 
@@ -419,6 +423,8 @@ void InitGame()
   AllPlayersGone = FALSE;
   game.magic_wall_active = FALSE;
   game.magic_wall_time_left = 0;
   AllPlayersGone = FALSE;
   game.magic_wall_active = FALSE;
   game.magic_wall_time_left = 0;
+  for (i=0; i<4; i++)
+    game.belt_dir[i] = MV_NO_MOVING;
 
   for (i=0; i<MAX_NUM_AMOEBA; i++)
     AmoebaCnt[i] = AmoebaCnt2[i] = 0;
 
   for (i=0; i<MAX_NUM_AMOEBA; i++)
     AmoebaCnt[i] = AmoebaCnt2[i] = 0;
@@ -432,7 +438,7 @@ void InitGame()
       Store[x][y] = Store2[x][y] = StorePlayer[x][y] = 0;
       Frame[x][y] = 0;
       AmoebaNr[x][y] = 0;
       Store[x][y] = Store2[x][y] = StorePlayer[x][y] = 0;
       Frame[x][y] = 0;
       AmoebaNr[x][y] = 0;
-      JustHit[x][y] = 0;
+      JustStopped[x][y] = 0;
       Stop[x][y] = FALSE;
     }
   }
       Stop[x][y] = FALSE;
     }
   }
@@ -2105,7 +2111,8 @@ void StartMoving(int x, int y)
       InitMovingField(x, y, MV_DOWN);
       Store[x][y] = EL_SALZSAEURE;
     }
       InitMovingField(x, y, MV_DOWN);
       Store[x][y] = EL_SALZSAEURE;
     }
-    else if (CAN_SMASH(element) && Feld[x][y+1] == EL_BLOCKED && JustHit[x][y])
+    else if (CAN_SMASH(element) && Feld[x][y+1] == EL_BLOCKED &&
+            JustStopped[x][y])
     {
       Impact(x, y);
     }
     {
       Impact(x, y);
     }
@@ -2118,7 +2125,12 @@ void StartMoving(int x, int y)
       Feld[x][y] = EL_AMOEBING;
       Store[x][y] = EL_AMOEBE_NASS;
     }
       Feld[x][y] = EL_AMOEBING;
       Store[x][y] = EL_AMOEBE_NASS;
     }
+#if OLD_GAME_BEHAVIOUR
     else if (IS_SLIPPERY(Feld[x][y+1]) && !Store[x][y+1])
     else if (IS_SLIPPERY(Feld[x][y+1]) && !Store[x][y+1])
+#else
+    else if (IS_SLIPPERY(Feld[x][y+1]) && !Store[x][y+1] &&
+            !IS_FALLING(x, y+1) && !JustStopped[x][y+1])
+#endif
     {
       boolean left  = (x>0 && IS_FREE(x-1, y) &&
                       (IS_FREE(x-1, y+1) || Feld[x-1][y+1] == EL_SALZSAEURE));
     {
       boolean left  = (x>0 && IS_FREE(x-1, y) &&
                       (IS_FREE(x-1, y+1) || Feld[x-1][y+1] == EL_SALZSAEURE));
@@ -2431,12 +2443,14 @@ void ContinueMoving(int x, int y)
   int newx = x + dx, newy = y + dy;
   int step = (horiz_move ? dx : dy) * TILEX/8;
 
   int newx = x + dx, newy = y + dy;
   int step = (horiz_move ? dx : dy) * TILEX/8;
 
-  if (CAN_FALL(element) && horiz_move && !IS_SP_ELEMENT(element))
-    step*=2;
-  else if (element == EL_TROPFEN)
+  if (element == EL_TROPFEN)
     step/=2;
   else if (Store[x][y] == EL_MORAST_VOLL || Store[x][y] == EL_MORAST_LEER)
     step/=4;
     step/=2;
   else if (Store[x][y] == EL_MORAST_VOLL || Store[x][y] == EL_MORAST_LEER)
     step/=4;
+#if OLD_GAME_BEHAVIOUR
+  else if (CAN_FALL(element) && horiz_move && !IS_SP_ELEMENT(element))
+    step*=2;
+#endif
 
   MovPos[x][y] += step;
 
 
   MovPos[x][y] += step;
 
@@ -2500,7 +2514,7 @@ void ContinueMoving(int x, int y)
     DrawLevelField(newx, newy);
 
     Stop[newx][newy] = TRUE;
     DrawLevelField(newx, newy);
 
     Stop[newx][newy] = TRUE;
-    JustHit[x][newy] = 3;
+    JustStopped[newx][newy] = 3;
 
     if (DONT_TOUCH(element))   /* object may be nasty to player or others */
     {
 
     if (DONT_TOUCH(element))   /* object may be nasty to player or others */
     {
@@ -3566,8 +3580,8 @@ void GameActions()
   for (y=0; y<lev_fieldy; y++) for (x=0; x<lev_fieldx; x++)
   {
     Stop[x][y] = FALSE;
   for (y=0; y<lev_fieldy; y++) for (x=0; x<lev_fieldx; x++)
   {
     Stop[x][y] = FALSE;
-    if (JustHit[x][y]>0)
-      JustHit[x][y]--;
+    if (JustStopped[x][y] > 0)
+      JustStopped[x][y]--;
 
 #if DEBUG
     if (IS_BLOCKED(x, y))
 
 #if DEBUG
     if (IS_BLOCKED(x, y))
@@ -4355,6 +4369,7 @@ int DigField(struct PlayerInfo *player,
 
   if (mode == DF_NO_PUSH)
   {
 
   if (mode == DF_NO_PUSH)
   {
+    player->Switching = FALSE;
     player->push_delay = 0;
     return MF_NO_ACTION;
   }
     player->push_delay = 0;
     return MF_NO_ACTION;
   }
@@ -4364,7 +4379,7 @@ int DigField(struct PlayerInfo *player,
 
   element = Feld[x][y];
 
 
   element = Feld[x][y];
 
-  switch(element)
+  switch (element)
   {
     case EL_LEERRAUM:
       PlaySoundLevel(x, y, SND_EMPTY);
   {
     case EL_LEERRAUM:
       PlaySoundLevel(x, y, SND_EMPTY);
@@ -4511,6 +4526,72 @@ int DigField(struct PlayerInfo *player,
       }
       break;
 
       }
       break;
 
+    case EL_BELT1_SWITCH_L:
+    case EL_BELT1_SWITCH_M:
+    case EL_BELT1_SWITCH_R:
+    case EL_BELT2_SWITCH_L:
+    case EL_BELT2_SWITCH_M:
+    case EL_BELT2_SWITCH_R:
+    case EL_BELT3_SWITCH_L:
+    case EL_BELT3_SWITCH_M:
+    case EL_BELT3_SWITCH_R:
+    case EL_BELT4_SWITCH_L:
+    case EL_BELT4_SWITCH_M:
+    case EL_BELT4_SWITCH_R:
+      {
+       static int belt_base_element[4] =
+       {
+         EL_BELT1_SWITCH_L,
+         EL_BELT2_SWITCH_L,
+         EL_BELT3_SWITCH_L,
+         EL_BELT4_SWITCH_L
+       };
+       static int belt_move_dir[3] =
+       {
+         MV_LEFT,
+         MV_NO_MOVING,
+         MV_RIGHT
+       };
+
+       int belt_nr = (element < EL_BELT2_SWITCH_L ? 0 :
+                      element < EL_BELT3_SWITCH_L ? 1 :
+                      element < EL_BELT4_SWITCH_L ? 2 : 3);
+       int belt_dir_nr = element - belt_base_element[belt_nr];
+       int belt_dir_nr_next = (belt_dir_nr + 1) % 3;
+       int belt_dir_next = belt_move_dir[belt_dir_nr_next];
+       int xx, yy;
+
+       if (player->Switching)
+         return MF_ACTION;
+
+       game.belt_dir[belt_nr] = belt_dir_next;
+
+       for (yy=0; yy<lev_fieldy; yy++)
+       {
+         for (xx=0; xx<lev_fieldx; xx++)
+         {
+           if (IS_BELT_SWITCH(Feld[xx][yy]))
+           {
+             int e = Feld[xx][yy];
+             int e_belt_nr = (e < EL_BELT2_SWITCH_L ? 0 :
+                              e < EL_BELT3_SWITCH_L ? 1 :
+                              e < EL_BELT4_SWITCH_L ? 2 : 3);
+
+             if (e_belt_nr == belt_nr)
+             {
+               Feld[xx][yy] = belt_base_element[belt_nr] + belt_dir_nr_next;
+               DrawLevelField(xx, yy);
+             }
+           }
+         }
+       }
+
+       player->Switching = TRUE;
+
+       return MF_ACTION;
+      }
+      break;
+
     case EL_SP_EXIT:
       if (local_player->gems_still_needed > 0)
        return MF_NO_ACTION;
     case EL_SP_EXIT:
       if (local_player->gems_still_needed > 0)
        return MF_NO_ACTION;
index 09a75fcee078a7eb6628042246a6acd67ecef6be..83d8216b43bd02c7152bf05dc8ede398557fd2de 100644 (file)
@@ -514,7 +514,7 @@ int Read_PCX_to_Pixmap(Display *display, Window window, GC gc, char *filename,
 
   /* read the graphic file in PCX format to image structure */
   if ((image = Read_PCX_to_Image(filename)) == NULL)
 
   /* read the graphic file in PCX format to image structure */
   if ((image = Read_PCX_to_Image(filename)) == NULL)
-    return PCX_FileInvalid;
+    return errno_pcx;
 
 #if DEBUG_TIMING
   printf("%s:\n", filename);
 
 #if DEBUG_TIMING
   printf("%s:\n", filename);
@@ -548,7 +548,7 @@ int Read_PCX_to_Pixmap(Display *display, Window window, GC gc, char *filename,
   *pixmap = ximageinfo->pixmap;
   *pixmap_mask = ximageinfo->pixmap_mask;
 
   *pixmap = ximageinfo->pixmap;
   *pixmap_mask = ximageinfo->pixmap_mask;
 
-  return(PCX_Success);
+  return PCX_Success;
 }
 
 #endif /* !MSDOS */
 }
 
 #endif /* !MSDOS */
index 78bfb71139973ed4525462000bf381a380991a65..00cf8234522be459fa93f807e1d7793efab9287f 100644 (file)
@@ -480,7 +480,8 @@ void InitGfx()
     { "Door",  TRUE },
     { "Heroes",        TRUE },
     { "Toons", TRUE },
     { "Door",  TRUE },
     { "Heroes",        TRUE },
     { "Toons", TRUE },
-    { "More",  TRUE },
+    { "SP",    TRUE },
+    { "DC",    TRUE },
     { "Font",  FALSE },
     { "Font2", FALSE }
   }; 
     { "Font",  FALSE },
     { "Font2", FALSE }
   }; 
@@ -491,7 +492,8 @@ void InitGfx()
     { "RocksDoor",     TRUE },
     { "RocksHeroes",   TRUE },
     { "RocksToons",    TRUE },
     { "RocksDoor",     TRUE },
     { "RocksHeroes",   TRUE },
     { "RocksToons",    TRUE },
-    { "RocksMore",     TRUE },
+    { "RocksSP",       TRUE },
+    { "RocksDC",       TRUE },
     { "RocksFont",     FALSE },
     { "RocksFont2",    FALSE }
   }; 
     { "RocksFont",     FALSE },
     { "RocksFont2",    FALSE }
   }; 
@@ -1553,7 +1555,41 @@ void InitElementProperties()
   };
   static int ep_active_bomb_num = sizeof(ep_active_bomb)/sizeof(int);
 
   };
   static int ep_active_bomb_num = sizeof(ep_active_bomb)/sizeof(int);
 
-  static long ep_bit[] =
+  static int ep_belt[] =
+  {
+    EL_BELT1_LEFT,
+    EL_BELT1_MIDDLE,
+    EL_BELT1_RIGHT,
+    EL_BELT2_LEFT,
+    EL_BELT2_MIDDLE,
+    EL_BELT2_RIGHT,
+    EL_BELT3_LEFT,
+    EL_BELT3_MIDDLE,
+    EL_BELT3_RIGHT,
+    EL_BELT4_LEFT,
+    EL_BELT4_MIDDLE,
+    EL_BELT4_RIGHT,
+  };
+  static int ep_belt_num = sizeof(ep_belt)/sizeof(int);
+
+  static int ep_belt_switch[] =
+  {
+    EL_BELT1_SWITCH_L,
+    EL_BELT1_SWITCH_M,
+    EL_BELT1_SWITCH_R,
+    EL_BELT2_SWITCH_L,
+    EL_BELT2_SWITCH_M,
+    EL_BELT2_SWITCH_R,
+    EL_BELT3_SWITCH_L,
+    EL_BELT3_SWITCH_M,
+    EL_BELT3_SWITCH_R,
+    EL_BELT4_SWITCH_L,
+    EL_BELT4_SWITCH_M,
+    EL_BELT4_SWITCH_R,
+  };
+  static int ep_belt_switch_num = sizeof(ep_belt_switch)/sizeof(int);
+
+  static long ep1_bit[] =
   {
     EP_BIT_AMOEBALIVE,
     EP_BIT_AMOEBOID,
   {
     EP_BIT_AMOEBALIVE,
     EP_BIT_AMOEBOID,
@@ -1587,7 +1623,12 @@ void InitElementProperties()
     EP_BIT_OVER_PLAYER,
     EP_BIT_ACTIVE_BOMB
   };
     EP_BIT_OVER_PLAYER,
     EP_BIT_ACTIVE_BOMB
   };
-  static int *ep_array[] =
+  static long ep2_bit[] =
+  {
+    EP_BIT_BELT,
+    EP_BIT_BELT_SWITCH
+  };
+  static int *ep1_array[] =
   {
     ep_amoebalive,
     ep_amoeboid,
   {
     ep_amoebalive,
     ep_amoeboid,
@@ -1621,7 +1662,12 @@ void InitElementProperties()
     ep_over_player,
     ep_active_bomb
   };
     ep_over_player,
     ep_active_bomb
   };
-  static int *ep_num[] =
+  static int *ep2_array[] =
+  {
+    ep_belt,
+    ep_belt_switch
+  };
+  static int *ep1_num[] =
   {
     &ep_amoebalive_num,
     &ep_amoeboid_num,
   {
     &ep_amoebalive_num,
     &ep_amoeboid_num,
@@ -1655,16 +1701,29 @@ void InitElementProperties()
     &ep_over_player_num,
     &ep_active_bomb_num
   };
     &ep_over_player_num,
     &ep_active_bomb_num
   };
-  static int num_properties = sizeof(ep_num)/sizeof(int *);
+  static int *ep2_num[] =
+  {
+    &ep_belt_num,
+    &ep_belt_switch_num
+  };
+  static int num_properties1 = sizeof(ep1_num)/sizeof(int *);
+  static int num_properties2 = sizeof(ep2_num)/sizeof(int *);
 
   for(i=0; i<MAX_ELEMENTS; i++)
 
   for(i=0; i<MAX_ELEMENTS; i++)
-    Elementeigenschaften[i] = 0;
+  {
+    Elementeigenschaften1[i] = 0;
+    Elementeigenschaften2[i] = 0;
+  }
+
+  for(i=0; i<num_properties1; i++)
+    for(j=0; j<*(ep1_num[i]); j++)
+      Elementeigenschaften1[(ep1_array[i])[j]] |= ep1_bit[i];
+  for(i=0; i<num_properties2; i++)
+    for(j=0; j<*(ep2_num[i]); j++)
+      Elementeigenschaften2[(ep2_array[i])[j]] |= ep2_bit[i];
 
 
-  for(i=0; i<num_properties; i++)
-    for(j=0; j<*(ep_num[i]); j++)
-      Elementeigenschaften[(ep_array[i])[j]] |= ep_bit[i];
   for(i=EL_CHAR_START; i<EL_CHAR_END; i++)
   for(i=EL_CHAR_START; i<EL_CHAR_END; i++)
-    Elementeigenschaften[i] |= (EP_BIT_CHAR | EP_BIT_INACTIVE);
+    Elementeigenschaften1[i] |= (EP_BIT_CHAR | EP_BIT_INACTIVE);
 }
 
 void CloseAllAndExit(int exit_value)
 }
 
 void CloseAllAndExit(int exit_value)
index 14756c5ec57383f5f1c9f2462d661e608a4a5c48..181415d49b2168b94f86c4f09b94dda11b8420d4 100644 (file)
@@ -78,10 +78,11 @@ short               Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          Frame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 boolean                Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          Frame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 boolean                Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
-short          JustHit[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+short          JustStopped[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          AmoebaCnt[MAX_NUM_AMOEBA], AmoebaCnt2[MAX_NUM_AMOEBA];
 short          AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          AmoebaCnt[MAX_NUM_AMOEBA], AmoebaCnt2[MAX_NUM_AMOEBA];
-unsigned long  Elementeigenschaften[MAX_ELEMENTS];
+unsigned long  Elementeigenschaften1[MAX_ELEMENTS];
+unsigned long  Elementeigenschaften2[MAX_ELEMENTS];
 
 int            level_nr, leveldir_nr, num_leveldirs;
 int            lev_fieldx,lev_fieldy, scroll_x,scroll_y;
 
 int            level_nr, leveldir_nr, num_leveldirs;
 int            lev_fieldx,lev_fieldy, scroll_x,scroll_y;
@@ -196,7 +197,7 @@ int num_bg_loops = sizeof(background_loop)/sizeof(int);
 
 char *element_info[] =
 {
 
 char *element_info[] =
 {
-  "empty space",
+  "empty space",                               /* 0 */
   "sand",
   "normal wall",
   "round wall",
   "sand",
   "normal wall",
   "round wall",
@@ -206,7 +207,7 @@ char *element_info[] =
   "closed exit",
   "player",
   "bug",
   "closed exit",
   "player",
   "bug",
-  "spaceship",
+  "spaceship",                                 /* 10 */
   "yam yam",
   "robot",
   "steel wall",
   "yam yam",
   "robot",
   "steel wall",
@@ -216,7 +217,7 @@ char *element_info[] =
   "quicksand with rock",
   "amoeba drop",
   "bomb",
   "quicksand with rock",
   "amoeba drop",
   "bomb",
-  "magic wall",
+  "magic wall",                                        /* 20 */
   "speed ball",
   "acid pool",
   "dropping amoeba",
   "speed ball",
   "acid pool",
   "dropping amoeba",
@@ -226,7 +227,7 @@ char *element_info[] =
   "biomaze",
   "burning dynamite",
   "unknown",
   "biomaze",
   "burning dynamite",
   "unknown",
-  "magic wheel",
+  "magic wheel",                               /* 30 */
   "running wire",
   "red key",
   "yellow key",
   "running wire",
   "red key",
   "yellow key",
@@ -236,7 +237,7 @@ char *element_info[] =
   "yellow door",
   "green door",
   "blue door",
   "yellow door",
   "green door",
   "blue door",
-  "gray door (opened by red key)",
+  "gray door (opened by red key)",             /* 40 */
   "gray door (opened by yellow key)",
   "gray door (opened by green key)",
   "gray door (opened by blue key)",
   "gray door (opened by yellow key)",
   "gray door (opened by green key)",
   "gray door (opened by blue key)",
@@ -246,7 +247,7 @@ char *element_info[] =
   "light bulb (dark)",
   "ligh bulb (glowing)",
   "wall with emerald",
   "light bulb (dark)",
   "ligh bulb (glowing)",
   "wall with emerald",
-  "wall with diamond",
+  "wall with diamond",                         /* 50 */
   "amoeba with content",
   "amoeba (BD style)",
   "time orb (full)",
   "amoeba with content",
   "amoeba (BD style)",
   "time orb (full)",
@@ -256,7 +257,7 @@ char *element_info[] =
   "yellow emerald",
   "wall with BD style diamond",
   "wall with yellow emerald",
   "yellow emerald",
   "wall with BD style diamond",
   "wall with yellow emerald",
-  "dark yam yam",
+  "dark yam yam",                              /* 60 */
   "magic wall (BD style)",
   "invisible steel wall",
   "dynabomb",
   "magic wall (BD style)",
   "invisible steel wall",
   "dynabomb",
@@ -266,7 +267,7 @@ char *element_info[] =
   "sokoban object",
   "sokoban empty field",
   "sokoban field with object",
   "sokoban object",
   "sokoban empty field",
   "sokoban field with object",
-  "butterfly (starts moving right)",
+  "butterfly (starts moving right)",           /* 70 */
   "butterfly (starts moving up)",
   "butterfly (starts moving left)",
   "butterfly (starts moving down)",
   "butterfly (starts moving up)",
   "butterfly (starts moving left)",
   "butterfly (starts moving down)",
@@ -276,7 +277,7 @@ char *element_info[] =
   "firefly (starts moving down)",
   "butterfly",
   "firefly",
   "firefly (starts moving down)",
   "butterfly",
   "firefly",
-  "yellow player",
+  "yellow player",                             /* 80 */
   "red player",
   "green player",
   "blue player",
   "red player",
   "green player",
   "blue player",
@@ -286,7 +287,7 @@ char *element_info[] =
   "bug (starts moving down)",
   "spaceship (starts moving right)",
   "spaceship (starts moving up)",
   "bug (starts moving down)",
   "spaceship (starts moving right)",
   "spaceship (starts moving up)",
-  "spaceship (starts moving left)",
+  "spaceship (starts moving left)",            /* 90 */
   "spaceship (starts moving down)",
   "pac man (starts moving right)",
   "pac man (starts moving up)",
   "spaceship (starts moving down)",
   "pac man (starts moving right)",
   "pac man (starts moving up)",
@@ -296,7 +297,7 @@ char *element_info[] =
   "violet emerald",
   "wall with red emerald",
   "wall with violet emerald",
   "violet emerald",
   "wall with red emerald",
   "wall with violet emerald",
-  "unknown",
+  "unknown",                                   /* 100 */
   "unknown",
   "unknown",
   "unknown",
   "unknown",
   "unknown",
   "unknown",
@@ -306,7 +307,7 @@ char *element_info[] =
   "open exit",
   "unknown",
   "amoeba",
   "open exit",
   "unknown",
   "amoeba",
-  "mole",
+  "mole",                                      /* 110 */
   "penguin",
   "satellite",
   "arrow left",
   "penguin",
   "satellite",
   "arrow left",
@@ -316,7 +317,7 @@ char *element_info[] =
   "pig",
   "fire breathing dragon",
   "unknown",
   "pig",
   "fire breathing dragon",
   "unknown",
-  "letter ' '",
+  "letter ' '",                                        /* 120 */
   "letter '!'",
   "letter '\"'",
   "letter '#'",
   "letter '!'",
   "letter '\"'",
   "letter '#'",
@@ -326,7 +327,7 @@ char *element_info[] =
   "letter '''",
   "letter '('",
   "letter ')'",
   "letter '''",
   "letter '('",
   "letter ')'",
-  "letter '*'",
+  "letter '*'",                                        /* 130 */
   "letter '+'",
   "letter ','",
   "letter '-'",
   "letter '+'",
   "letter ','",
   "letter '-'",
@@ -336,7 +337,7 @@ char *element_info[] =
   "letter '1'",
   "letter '2'",
   "letter '3'",
   "letter '1'",
   "letter '2'",
   "letter '3'",
-  "letter '4'",
+  "letter '4'",                                        /* 140 */
   "letter '5'",
   "letter '6'",
   "letter '7'",
   "letter '5'",
   "letter '6'",
   "letter '7'",
@@ -346,7 +347,7 @@ char *element_info[] =
   "letter ';'",
   "letter '<'",
   "letter '='",
   "letter ';'",
   "letter '<'",
   "letter '='",
-  "letter '>'",
+  "letter '>'",                                        /* 150 */
   "letter '?'",
   "letter '@'",
   "letter 'A'",
   "letter '?'",
   "letter '@'",
   "letter 'A'",
@@ -356,7 +357,7 @@ char *element_info[] =
   "letter 'E'",
   "letter 'F'",
   "letter 'G'",
   "letter 'E'",
   "letter 'F'",
   "letter 'G'",
-  "letter 'H'",
+  "letter 'H'",                                        /* 160 */
   "letter 'I'",
   "letter 'J'",
   "letter 'K'",
   "letter 'I'",
   "letter 'J'",
   "letter 'K'",
@@ -366,7 +367,7 @@ char *element_info[] =
   "letter 'O'",
   "letter 'P'",
   "letter 'Q'",
   "letter 'O'",
   "letter 'P'",
   "letter 'Q'",
-  "letter 'R'",
+  "letter 'R'",                                        /* 170 */
   "letter 'S'",
   "letter 'T'",
   "letter 'U'",
   "letter 'S'",
   "letter 'T'",
   "letter 'U'",
@@ -376,7 +377,7 @@ char *element_info[] =
   "letter 'Y'",
   "letter 'Z'",
   "letter 'Ä'",
   "letter 'Y'",
   "letter 'Z'",
   "letter 'Ä'",
-  "letter 'Ö'",
+  "letter 'Ö'",                                        /* 180 */
   "letter 'Ãœ'",
   "letter '^'",
   "letter ''",
   "letter 'Ãœ'",
   "letter '^'",
   "letter ''",
@@ -386,6 +387,7 @@ char *element_info[] =
   "letter ''",
   "letter ''",
   "letter ''",
   "letter ''",
   "letter ''",
   "letter ''",
+  "letter ''",                                 /* 190 */
   "letter ''",
   "letter ''",
   "letter ''",
   "letter ''",
   "letter ''",
   "letter ''",
@@ -395,8 +397,7 @@ char *element_info[] =
   "letter ''",
   "letter ''",
   "letter ''",
   "letter ''",
   "letter ''",
   "letter ''",
-  "letter ''",
-  "growing wall (horizontally)",
+  "growing wall (horizontally)",               /* 200 */
   "growing wall (vertically)",
   "growing wall (all directions)",
   "unused",
   "growing wall (vertically)",
   "growing wall (all directions)",
   "unused",
@@ -406,7 +407,7 @@ char *element_info[] =
   "unused",
   "unused",
   "unused",
   "unused",
   "unused",
   "unused",
-  "empty space",
+  "empty space",                               /* 210 */
   "zonk",
   "base",
   "murphy",
   "zonk",
   "base",
   "murphy",
@@ -416,7 +417,7 @@ char *element_info[] =
   "exit",
   "orange disk",
   "port (leading right)",
   "exit",
   "orange disk",
   "port (leading right)",
-  "port (leading down)",
+  "port (leading down)",                       /* 220 */
   "port (leading left)",
   "port (leading up)",
   "port (leading right)",
   "port (leading left)",
   "port (leading up)",
   "port (leading right)",
@@ -426,7 +427,7 @@ char *element_info[] =
   "snik snak",
   "yellow disk",
   "terminal",
   "snik snak",
   "yellow disk",
   "terminal",
-  "red disk",
+  "red disk",                                  /* 230 */
   "port (vertically)",
   "port (horizontally)",
   "port (all directions)",
   "port (vertically)",
   "port (horizontally)",
   "port (all directions)",
@@ -436,7 +437,7 @@ char *element_info[] =
   "chip (right half)",
   "hardware",
   "hardware",
   "chip (right half)",
   "hardware",
   "hardware",
-  "hardware",
+  "hardware",                                  /* 240 */
   "hardware",
   "hardware",
   "hardware",
   "hardware",
   "hardware",
   "hardware",
@@ -446,7 +447,7 @@ char *element_info[] =
   "hardware",
   "chip (upper half)",
   "chip (lower half)",
   "hardware",
   "chip (upper half)",
   "chip (lower half)",
-  "unknown",
+  "unknown",                                   /* 250 */
   "unknown",
   "unknown",
   "unknown",
   "unknown",
   "unknown",
   "unknown",
@@ -455,38 +456,51 @@ char *element_info[] =
 
   /* 256 */
 
 
   /* 256 */
 
-  "pearl",
+  "pearl",                                     /* (256) */
   "crystal",
   "wall with pearl",
   "wall with crystal",
   "crystal",
   "wall with pearl",
   "wall with crystal",
-  "white door",
+  "white door",                                        /* 260 */
   "gray door (opened by white key)",
   "white key",
   "force field",
   "extra time",
   "switch gate (open)",
   "switch gate (closed)",
   "gray door (opened by white key)",
   "white key",
   "force field",
   "extra time",
   "switch gate (open)",
   "switch gate (closed)",
-  "switch for switch gate",
+  "switch for switch gate (open)",
+  "switch for switch gate (closed)",
   "time gate",
   "time gate",
-  "time gate with magic wheel",
-  "green conveyor belt (left)",
-  "green conveyor belt (middle)",
-  "green conveyor belt (right)",
-  "switch for green conveyor belt",
+  "time gate with magic wheel",                        /* 270 */
   "red conveyor belt (left)",
   "red conveyor belt (middle)",
   "red conveyor belt (right)",
   "red conveyor belt (left)",
   "red conveyor belt (middle)",
   "red conveyor belt (right)",
-  "switch for red conveyor belt",
+  "switch for red conveyor belt (left)",
+  "switch for red conveyor belt (middle)",
+  "switch for red conveyor belt (right)",
+  "yellow conveyor belt (left)",
+  "yellow conveyor belt (middle)",
+  "yellow conveyor belt (right)",
+  "switch for yellow conveyor belt (left)",    /* 280 */
+  "switch for yellow conveyor belt (middle)",
+  "switch for yellow conveyor belt (right)",
+  "green conveyor belt (left)",
+  "green conveyor belt (middle)",
+  "green conveyor belt (right)",
+  "switch for green conveyor belt (left)",
+  "switch for green conveyor belt (middle)",
+  "switch for green conveyor belt (right)",
   "blue conveyor belt (left)",
   "blue conveyor belt (left)",
-  "blue conveyor belt (middle)",
+  "blue conveyor belt (middle)",               /* 290 */
   "blue conveyor belt (right)",
   "blue conveyor belt (right)",
-  "switch for blue conveyor belt",
+  "switch for blue conveyor belt (left)",
+  "switch for blue conveyor belt (middle)",
+  "switch for blue conveyor belt (right)",
   "land mine",
   "mail envelope",
   "light switch",
   "sign (exclamation)",
   "sign (radio activity)",
   "land mine",
   "mail envelope",
   "light switch",
   "sign (exclamation)",
   "sign (radio activity)",
-  "sign (stop)",
+  "sign (stop)",                               /* 300 */
   "sign (wheel chair)",
   "sign (parking)",
   "sign (one way)",
   "sign (wheel chair)",
   "sign (parking)",
   "sign (one way)",
@@ -496,7 +510,7 @@ char *element_info[] =
   "sign (exit)",
   "sign (yin yang)",
   "sign (other)",
   "sign (exit)",
   "sign (yin yang)",
   "sign (other)",
-  "mole (starts moving left)",
+  "mole (starts moving left)",                 /* 310 */
   "mole (starts moving right)",
   "mole (starts moving up)",
   "mole (starts moving down)",
   "mole (starts moving right)",
   "mole (starts moving up)",
   "mole (starts moving down)",
@@ -506,7 +520,7 @@ char *element_info[] =
   "-",
   "-",
   "-",
   "-",
   "-",
   "-",
-  "-",
+  "-",                                         /* 320 */
   "-",
   "-",
   "-",
   "-",
   "-",
   "-",
index 0550a996fbb53d6aa12b2ff75b3ea467b94dbde0..b10d0357c549147bd7759504fb66821cd094a1ed 100644 (file)
@@ -95,6 +95,7 @@ typedef unsigned char byte;
 #define IN_SCR_FIELD(x,y) ((x)>=BX1 && (x)<=BX2 && (y)>=BY1 &&(y)<=BY2)
 #define IN_LEV_FIELD(x,y) ((x)>=0 && (x)<lev_fieldx && (y)>=0 &&(y)<lev_fieldy)
 
 #define IN_SCR_FIELD(x,y) ((x)>=BX1 && (x)<=BX2 && (y)>=BY1 &&(y)<=BY2)
 #define IN_LEV_FIELD(x,y) ((x)>=0 && (x)<lev_fieldx && (y)>=0 &&(y)<lev_fieldy)
 
+/* values for 'Elementeigenschaften1' */
 #define EP_BIT_AMOEBALIVE      (1 << 0)
 #define EP_BIT_AMOEBOID                (1 << 1)
 #define EP_BIT_SCHLUESSEL      (1 << 2)
 #define EP_BIT_AMOEBALIVE      (1 << 0)
 #define EP_BIT_AMOEBOID                (1 << 1)
 #define EP_BIT_SCHLUESSEL      (1 << 2)
@@ -128,38 +129,44 @@ typedef unsigned char byte;
 #define EP_BIT_OVER_PLAYER     (1 << 30)
 #define EP_BIT_ACTIVE_BOMB     (1 << 31)
 
 #define EP_BIT_OVER_PLAYER     (1 << 30)
 #define EP_BIT_ACTIVE_BOMB     (1 << 31)
 
-#define IS_AMOEBALIVE(e)       (Elementeigenschaften[e] & EP_BIT_AMOEBALIVE)
-#define IS_AMOEBOID(e)         (Elementeigenschaften[e] & EP_BIT_AMOEBOID)
-#define IS_SCHLUESSEL(e)       (Elementeigenschaften[e] & EP_BIT_SCHLUESSEL)
-#define IS_PFORTE(e)           (Elementeigenschaften[e] & EP_BIT_PFORTE)
-#define IS_SOLID(e)            (Elementeigenschaften[e] & EP_BIT_SOLID)
-#define IS_MASSIVE(e)          (Elementeigenschaften[e] & EP_BIT_MASSIVE)
-#define IS_SLIPPERY(e)         (Elementeigenschaften[e] & EP_BIT_SLIPPERY)
-#define IS_ENEMY(e)            (Elementeigenschaften[e] & EP_BIT_ENEMY)
-#define IS_MAUER(e)            (Elementeigenschaften[e] & EP_BIT_MAUER)
-#define CAN_FALL(e)            (Elementeigenschaften[e] & EP_BIT_CAN_FALL)
-#define CAN_SMASH(e)           (Elementeigenschaften[e] & EP_BIT_CAN_SMASH)
-#define CAN_CHANGE(e)          (Elementeigenschaften[e] & EP_BIT_CAN_CHANGE)
-#define CAN_MOVE(e)            (Elementeigenschaften[e] & EP_BIT_CAN_MOVE)
-#define COULD_MOVE(e)          (Elementeigenschaften[e] & EP_BIT_COULD_MOVE)
-#define DONT_TOUCH(e)          (Elementeigenschaften[e] & EP_BIT_DONT_TOUCH)
-#define DONT_GO_TO(e)          (Elementeigenschaften[e] & EP_BIT_DONT_GO_TO)
-#define IS_MAMPF2(e)           (Elementeigenschaften[e] & EP_BIT_MAMPF2)
-#define IS_CHAR(e)             (Elementeigenschaften[e] & EP_BIT_CHAR)
-#define IS_BD_ELEMENT(e)       (Elementeigenschaften[e] & EP_BIT_BD_ELEMENT)
-#define IS_SB_ELEMENT(e)       (Elementeigenschaften[e] & EP_BIT_SB_ELEMENT)
-#define IS_GEM(e)              (Elementeigenschaften[e] & EP_BIT_GEM)
-#define IS_INACTIVE(e)         (Elementeigenschaften[e] & EP_BIT_INACTIVE)
-#define IS_EXPLOSIVE(e)                (Elementeigenschaften[e] & EP_BIT_EXPLOSIVE)
-#define IS_MAMPF3(e)           (Elementeigenschaften[e] & EP_BIT_MAMPF3)
-#define IS_PUSHABLE(e)         (Elementeigenschaften[e] & EP_BIT_PUSHABLE)
-#define ELEM_IS_PLAYER(e)      (Elementeigenschaften[e] & EP_BIT_PLAYER)
-#define HAS_CONTENT(e)         (Elementeigenschaften[e] & EP_BIT_HAS_CONTENT)
-#define IS_EATABLE(e)          (Elementeigenschaften[e] & EP_BIT_EATABLE)
-#define IS_SP_ELEMENT(e)       (Elementeigenschaften[e] & EP_BIT_SP_ELEMENT)
-#define IS_QUICK_GATE(e)       (Elementeigenschaften[e] & EP_BIT_QUICK_GATE)
-#define IS_OVER_PLAYER(e)      (Elementeigenschaften[e] & EP_BIT_OVER_PLAYER)
-#define IS_ACTIVE_BOMB(e)      (Elementeigenschaften[e] & EP_BIT_ACTIVE_BOMB)
+/* values for 'Elementeigenschaften2' */
+#define EP_BIT_BELT            (1 << 0)
+#define EP_BIT_BELT_SWITCH     (1 << 1)
+
+#define IS_AMOEBALIVE(e)       (Elementeigenschaften1[e] & EP_BIT_AMOEBALIVE)
+#define IS_AMOEBOID(e)         (Elementeigenschaften1[e] & EP_BIT_AMOEBOID)
+#define IS_SCHLUESSEL(e)       (Elementeigenschaften1[e] & EP_BIT_SCHLUESSEL)
+#define IS_PFORTE(e)           (Elementeigenschaften1[e] & EP_BIT_PFORTE)
+#define IS_SOLID(e)            (Elementeigenschaften1[e] & EP_BIT_SOLID)
+#define IS_MASSIVE(e)          (Elementeigenschaften1[e] & EP_BIT_MASSIVE)
+#define IS_SLIPPERY(e)         (Elementeigenschaften1[e] & EP_BIT_SLIPPERY)
+#define IS_ENEMY(e)            (Elementeigenschaften1[e] & EP_BIT_ENEMY)
+#define IS_MAUER(e)            (Elementeigenschaften1[e] & EP_BIT_MAUER)
+#define CAN_FALL(e)            (Elementeigenschaften1[e] & EP_BIT_CAN_FALL)
+#define CAN_SMASH(e)           (Elementeigenschaften1[e] & EP_BIT_CAN_SMASH)
+#define CAN_CHANGE(e)          (Elementeigenschaften1[e] & EP_BIT_CAN_CHANGE)
+#define CAN_MOVE(e)            (Elementeigenschaften1[e] & EP_BIT_CAN_MOVE)
+#define COULD_MOVE(e)          (Elementeigenschaften1[e] & EP_BIT_COULD_MOVE)
+#define DONT_TOUCH(e)          (Elementeigenschaften1[e] & EP_BIT_DONT_TOUCH)
+#define DONT_GO_TO(e)          (Elementeigenschaften1[e] & EP_BIT_DONT_GO_TO)
+#define IS_MAMPF2(e)           (Elementeigenschaften1[e] & EP_BIT_MAMPF2)
+#define IS_CHAR(e)             (Elementeigenschaften1[e] & EP_BIT_CHAR)
+#define IS_BD_ELEMENT(e)       (Elementeigenschaften1[e] & EP_BIT_BD_ELEMENT)
+#define IS_SB_ELEMENT(e)       (Elementeigenschaften1[e] & EP_BIT_SB_ELEMENT)
+#define IS_GEM(e)              (Elementeigenschaften1[e] & EP_BIT_GEM)
+#define IS_INACTIVE(e)         (Elementeigenschaften1[e] & EP_BIT_INACTIVE)
+#define IS_EXPLOSIVE(e)                (Elementeigenschaften1[e] & EP_BIT_EXPLOSIVE)
+#define IS_MAMPF3(e)           (Elementeigenschaften1[e] & EP_BIT_MAMPF3)
+#define IS_PUSHABLE(e)         (Elementeigenschaften1[e] & EP_BIT_PUSHABLE)
+#define ELEM_IS_PLAYER(e)      (Elementeigenschaften1[e] & EP_BIT_PLAYER)
+#define HAS_CONTENT(e)         (Elementeigenschaften1[e] & EP_BIT_HAS_CONTENT)
+#define IS_EATABLE(e)          (Elementeigenschaften1[e] & EP_BIT_EATABLE)
+#define IS_SP_ELEMENT(e)       (Elementeigenschaften1[e] & EP_BIT_SP_ELEMENT)
+#define IS_QUICK_GATE(e)       (Elementeigenschaften1[e] & EP_BIT_QUICK_GATE)
+#define IS_OVER_PLAYER(e)      (Elementeigenschaften1[e] & EP_BIT_OVER_PLAYER)
+#define IS_ACTIVE_BOMB(e)      (Elementeigenschaften1[e] & EP_BIT_ACTIVE_BOMB)
+#define IS_BELT(e)             (Elementeigenschaften2[e] & EP_BIT_BELT)
+#define IS_BELT_SWITCH(e)      (Elementeigenschaften2[e] & EP_BIT_BELT_SWITCH)
 
 #define IS_PLAYER(x,y)         (ELEM_IS_PLAYER(StorePlayer[x][y]))
 
 
 #define IS_PLAYER(x,y)         (ELEM_IS_PLAYER(StorePlayer[x][y]))
 
@@ -167,6 +174,7 @@ typedef unsigned char byte;
 #define IS_FREE_OR_PLAYER(x,y) (Feld[x][y] == EL_LEERRAUM)
 
 #define IS_MOVING(x,y)         (MovPos[x][y] != 0)
 #define IS_FREE_OR_PLAYER(x,y) (Feld[x][y] == EL_LEERRAUM)
 
 #define IS_MOVING(x,y)         (MovPos[x][y] != 0)
+#define IS_FALLING(x,y)                (MovPos[x][y] != 0 && MovDir[x][y] == MV_DOWN)
 #define IS_BLOCKED(x,y)                (Feld[x][y] == EL_BLOCKED)
 
 #define EL_CHANGED(e)          ((e) == EL_FELSBROCKEN    ? EL_EDELSTEIN :  \
 #define IS_BLOCKED(x,y)                (Feld[x][y] == EL_BLOCKED)
 
 #define EL_CHANGED(e)          ((e) == EL_FELSBROCKEN    ? EL_EDELSTEIN :  \
@@ -184,20 +192,21 @@ typedef unsigned char byte;
 
 #define PLAYERINFO(x,y)                (&stored_player[StorePlayer[x][y]-EL_SPIELER1])
 
 
 #define PLAYERINFO(x,y)                (&stored_player[StorePlayer[x][y]-EL_SPIELER1])
 
-/* Pixmaps with Xpm or X11 Bitmap files */
+/* Pixmaps with graphic file */
 #define PIX_BACK               0
 #define PIX_DOOR               1
 #define PIX_HEROES             2
 #define PIX_TOONS              3
 #define PIX_BACK               0
 #define PIX_DOOR               1
 #define PIX_HEROES             2
 #define PIX_TOONS              3
-#define PIX_MORE               4
-#define        PIX_BIGFONT             5
-#define PIX_SMALLFONT          6
-/* Pixmaps without them */
-#define PIX_DB_BACK            7
-#define PIX_DB_DOOR            8
-#define PIX_DB_FIELD           9
-
-#define NUM_PICTURES           7
+#define PIX_SP                 4
+#define PIX_DC                 5
+#define        PIX_BIGFONT             6
+#define PIX_SMALLFONT          7
+/* Pixmaps without graphic file */
+#define PIX_DB_BACK            8
+#define PIX_DB_DOOR            9
+#define PIX_DB_FIELD           10
+
+#define NUM_PICTURES           8
 #define NUM_PIXMAPS            10
 
 /* boundaries of arrays etc. */
 #define NUM_PIXMAPS            10
 
 /* boundaries of arrays etc. */
@@ -320,6 +329,7 @@ struct PlayerInfo
   int Frame;
 
   boolean Pushing;
   int Frame;
 
   boolean Pushing;
+  boolean Switching;
   boolean LevelSolved, GameOver;
   boolean snapped;
 
   boolean LevelSolved, GameOver;
   boolean snapped;
 
@@ -408,6 +418,7 @@ struct GameInfo
   int yam_content_nr;
   boolean magic_wall_active;
   int magic_wall_time_left;
   int yam_content_nr;
   boolean magic_wall_active;
   int magic_wall_time_left;
+  int belt_dir[4];
 };
 
 struct GlobalInfo
 };
 
 struct GlobalInfo
@@ -462,10 +473,11 @@ extern short              Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short           StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short           Frame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern boolean         Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short           StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short           Frame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern boolean         Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
-extern short           JustHit[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern short           JustStopped[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short           AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short           AmoebaCnt[MAX_NUM_AMOEBA], AmoebaCnt2[MAX_NUM_AMOEBA];
 extern short           AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short           AmoebaCnt[MAX_NUM_AMOEBA], AmoebaCnt2[MAX_NUM_AMOEBA];
-extern unsigned long   Elementeigenschaften[MAX_ELEMENTS];
+extern unsigned long   Elementeigenschaften1[MAX_ELEMENTS];
+extern unsigned long   Elementeigenschaften2[MAX_ELEMENTS];
 
 extern int             level_nr, leveldir_nr, num_leveldirs;
 extern int             lev_fieldx,lev_fieldy, scroll_x,scroll_y;
 
 extern int             level_nr, leveldir_nr, num_leveldirs;
 extern int             lev_fieldx,lev_fieldy, scroll_x,scroll_y;
@@ -562,20 +574,30 @@ extern char               *element_info[];
 #define GFX_PER_LINE           16
 #define MINI_GFX_PER_LINE      32
 #define MICRO_GFX_PER_LINE     128
 #define GFX_PER_LINE           16
 #define MINI_GFX_PER_LINE      32
 #define MICRO_GFX_PER_LINE     128
+
 #define HEROES_PER_LINE                16
 #define HEROES_PER_LINE                16
-#define MINI_MORE_STARTX       0
-#define MINI_MORE_STARTY       352
-#define MICRO_MORE_STARTX      0
-#define MICRO_MORE_STARTY      448
-#define MORE_PER_LINE          16
-#define MINI_MORE_PER_LINE     16
-#define MICRO_MORE_PER_LINE    64
+#define MINI_SP_STARTX         0
+#define MINI_SP_STARTY         352
+#define MICRO_SP_STARTX                0
+#define MICRO_SP_STARTY                448
+#define SP_PER_LINE            16
+#define MINI_SP_PER_LINE       16
+#define MICRO_SP_PER_LINE      64
+
+#define MINI_DC_STARTX         256
+#define MINI_DC_STARTY         0
+#define MICRO_DC_STARTX                0
+#define MICRO_DC_STARTY                0
+#define DC_PER_LINE            8
+#define MINI_DC_PER_LINE       8
+#define MICRO_DC_PER_LINE      32
+
 #define FONT_CHARS_PER_LINE    16
 #define FONT_LINES_PER_FONT    4
 
 /* game elements:
 #define FONT_CHARS_PER_LINE    16
 #define FONT_LINES_PER_FONT    4
 
 /* game elements:
-**       0 - 255: real elements, stored in level file
-**     256 - 511: flag elements, only used at runtime
+**       0 - 1000: real elements, stored in level file
+**     1000 - 2000: flag elements, only used at runtime
 */
 /* "real" level elements */
 #define EL_LEERRAUM            0
 */
 /* "real" level elements */
 #define EL_LEERRAUM            0
@@ -826,44 +848,57 @@ extern char               *element_info[];
 #define EL_KEY_WHITE           262
 #define EL_FORCE_FIELD         263
 #define EL_EXTRA_TIME          264
 #define EL_KEY_WHITE           262
 #define EL_FORCE_FIELD         263
 #define EL_EXTRA_TIME          264
-#define EL_SWITCH_GATE_OPEN    265
-#define EL_SWITCH_GATE_CLOSED  266
-#define EL_SWITCH_GATE_SWITCH  267
-#define EL_TIME_GATE           268
-#define EL_TIME_GATE_WHEEL     269
-#define EL_BELT_GREEN_LEFT     270
-#define EL_BELT_GREEN_MIDDLE   271
-#define EL_BELT_GREEN_RIGHT    272
-#define EL_BELT_GREEN_SWITCH   273
-#define EL_BELT_RED_LEFT       274
-#define EL_BELT_RED_MIDDLE     275
-#define EL_BELT_RED_RIGHT      276
-#define EL_BELT_RED_SWITCH     277
-#define EL_BELT_BLUE_LEFT      278
-#define EL_BELT_BLUE_MIDDLE    279
-#define EL_BELT_BLUE_RIGHT     280
-#define EL_BELT_BLUE_SWITCH    281
-#define EL_LANDMINE            282
-#define EL_ENVELOPE            283
-#define EL_LIGHT_SWITCH                284
-#define EL_SIGN_EXCLAMATION    285
-#define EL_SIGN_RADIOACTIVITY  286
-#define EL_SIGN_STOP           287
-#define EL_SIGN_WHEELCHAIR     288
-#define EL_SIGN_PARKING                289
-#define EL_SIGN_ONEWAY         290
-#define EL_SIGN_HEART          291
-#define EL_SIGN_TRIANGLE       292
-#define EL_SIGN_ROUND          293
-#define EL_SIGN_EXIT           294
-#define EL_SIGN_YINYANG                295
-#define EL_SIGN_OTHER          296
-#define EL_MOLE_LEFT           297
-#define EL_MOLE_RIGHT          298
-#define EL_MOLE_UP             299
-#define EL_MOLE_DOWN           300
-#define EL_STEEL_SLANTED       301
-#define EL_SAND_INVISIBLE      302
+#define EL_SWITCHGATE_OPEN     265
+#define EL_SWITCHGATE_CLOSED   266
+#define EL_SWITCHGATE_SWITCH_L 267
+#define EL_SWITCHGATE_SWITCH_R 268
+#define EL_TIME_GATE           269
+#define EL_TIME_GATE_WHEEL     270
+#define EL_BELT1_LEFT          271
+#define EL_BELT1_MIDDLE                272
+#define EL_BELT1_RIGHT         273
+#define EL_BELT1_SWITCH_L      274
+#define EL_BELT1_SWITCH_M      275
+#define EL_BELT1_SWITCH_R      276
+#define EL_BELT2_LEFT          277
+#define EL_BELT2_MIDDLE                278
+#define EL_BELT2_RIGHT         279
+#define EL_BELT2_SWITCH_L      280
+#define EL_BELT2_SWITCH_M      281
+#define EL_BELT2_SWITCH_R      282
+#define EL_BELT3_LEFT          283
+#define EL_BELT3_MIDDLE                284
+#define EL_BELT3_RIGHT         285
+#define EL_BELT3_SWITCH_L      286
+#define EL_BELT3_SWITCH_M      287
+#define EL_BELT3_SWITCH_R      288
+#define EL_BELT4_LEFT          289
+#define EL_BELT4_MIDDLE                290
+#define EL_BELT4_RIGHT         291
+#define EL_BELT4_SWITCH_L      292
+#define EL_BELT4_SWITCH_M      293
+#define EL_BELT4_SWITCH_R      294
+#define EL_LANDMINE            295
+#define EL_ENVELOPE            296
+#define EL_LIGHT_SWITCH                297
+#define EL_SIGN_EXCLAMATION    298
+#define EL_SIGN_RADIOACTIVITY  299
+#define EL_SIGN_STOP           300
+#define EL_SIGN_WHEELCHAIR     301
+#define EL_SIGN_PARKING                302
+#define EL_SIGN_ONEWAY         303
+#define EL_SIGN_HEART          304
+#define EL_SIGN_TRIANGLE       305
+#define EL_SIGN_ROUND          306
+#define EL_SIGN_EXIT           307
+#define EL_SIGN_YINYANG                308
+#define EL_SIGN_OTHER          309
+#define EL_MOLE_LEFT           310
+#define EL_MOLE_RIGHT          311
+#define EL_MOLE_UP             312
+#define EL_MOLE_DOWN           313
+#define EL_STEEL_SLANTED       314
+#define EL_SAND_INVISIBLE      315
 
 /* "real" (and therefore drawable) runtime elements */
 #define EL_SIEB_LEER           1000
 
 /* "real" (and therefore drawable) runtime elements */
 #define EL_SIEB_LEER           1000
@@ -898,20 +933,23 @@ extern char               *element_info[];
 /* game graphics:
 **       0 -  255: graphics from "RocksScreen"
 **     256 -  511: graphics from "RocksFont"
 /* game graphics:
 **       0 -  255: graphics from "RocksScreen"
 **     256 -  511: graphics from "RocksFont"
-**     512 -  767: graphics from "RocksMore"
-**     768 - 1023: graphics from "RocksHeroes"
+**     512 -  767: graphics from "RocksHeroes"
+**     768 - 1023: graphics from "RocksSP"
+**     1024 - 1279: graphics from "RocksDC"
 */
 
 #define GFX_START_ROCKSSCREEN  0
 #define GFX_END_ROCKSSCREEN    255
 #define GFX_START_ROCKSFONT    256
 #define GFX_END_ROCKSFONT      511
 */
 
 #define GFX_START_ROCKSSCREEN  0
 #define GFX_END_ROCKSSCREEN    255
 #define GFX_START_ROCKSFONT    256
 #define GFX_END_ROCKSFONT      511
-#define GFX_START_ROCKSMORE    512
-#define GFX_END_ROCKSMORE      767
-#define GFX_START_ROCKSHEROES  768
-#define GFX_END_ROCKSHEROES    1023
+#define GFX_START_ROCKSHEROES  512
+#define GFX_END_ROCKSHEROES    767
+#define GFX_START_ROCKSSP      768
+#define GFX_END_ROCKSSP                1023
+#define GFX_START_ROCKSDC      1024
+#define GFX_END_ROCKSDC                1279
 
 
-#define NUM_TILES              1024
+#define NUM_TILES              1280
 
 /* graphics from "RocksScreen" */
 /* Zeile 0 (0) */
 
 /* graphics from "RocksScreen" */
 /* Zeile 0 (0) */
@@ -1146,90 +1184,116 @@ extern char            *element_info[];
 #define GFX_FLAMMEN_UP         (GFX_START_ROCKSHEROES +14*HEROES_PER_LINE + 8)
 #define GFX_FLAMMEN_DOWN       (GFX_START_ROCKSHEROES +15*HEROES_PER_LINE + 8)
 
 #define GFX_FLAMMEN_UP         (GFX_START_ROCKSHEROES +14*HEROES_PER_LINE + 8)
 #define GFX_FLAMMEN_DOWN       (GFX_START_ROCKSHEROES +15*HEROES_PER_LINE + 8)
 
-/* graphics from "RocksMore" */
-#define GFX_SP_EMPTY           (GFX_START_ROCKSMORE +  0 * MORE_PER_LINE +  0)
+/* graphics from "RocksSP" */
+#define GFX_SP_EMPTY           (GFX_START_ROCKSSP +  0 * SP_PER_LINE +  0)
 /*
 /*
-#define GFX_SP_ZONK            (GFX_START_ROCKSMORE +  0 * MORE_PER_LINE +  1)
+#define GFX_SP_ZONK            (GFX_START_ROCKSSP +  0 * SP_PER_LINE +  1)
 */
 */
-#define GFX_SP_BASE            (GFX_START_ROCKSMORE +  0 * MORE_PER_LINE +  2)
-#define GFX_SP_MURPHY          (GFX_START_ROCKSMORE +  0 * MORE_PER_LINE +  3)
-#define GFX_SP_INFOTRON                (GFX_START_ROCKSMORE +  0 * MORE_PER_LINE +  4)
-#define GFX_SP_CHIP_SINGLE     (GFX_START_ROCKSMORE +  0 * MORE_PER_LINE +  5)
-#define GFX_SP_HARD_GRAY       (GFX_START_ROCKSMORE +  0 * MORE_PER_LINE +  6)
-#define GFX_SP_EXIT            (GFX_START_ROCKSMORE +  0 * MORE_PER_LINE +  7)
-#define GFX_SP_DISK_ORANGE     (GFX_START_ROCKSMORE +  1 * MORE_PER_LINE +  0)
-#define GFX_SP_PORT1_RIGHT     (GFX_START_ROCKSMORE +  1 * MORE_PER_LINE +  1)
-#define GFX_SP_PORT1_DOWN      (GFX_START_ROCKSMORE +  1 * MORE_PER_LINE +  2)
-#define GFX_SP_PORT1_LEFT      (GFX_START_ROCKSMORE +  1 * MORE_PER_LINE +  3)
-#define GFX_SP_PORT1_UP                (GFX_START_ROCKSMORE +  1 * MORE_PER_LINE +  4)
-#define GFX_SP_PORT2_RIGHT     (GFX_START_ROCKSMORE +  1 * MORE_PER_LINE +  5)
-#define GFX_SP_PORT2_DOWN      (GFX_START_ROCKSMORE +  1 * MORE_PER_LINE +  6)
-#define GFX_SP_PORT2_LEFT      (GFX_START_ROCKSMORE +  1 * MORE_PER_LINE +  7)
-#define GFX_SP_PORT2_UP                (GFX_START_ROCKSMORE +  2 * MORE_PER_LINE +  0)
-#define GFX_SP_SNIKSNAK                (GFX_START_ROCKSMORE +  2 * MORE_PER_LINE +  1)
-#define GFX_SP_DISK_YELLOW     (GFX_START_ROCKSMORE +  2 * MORE_PER_LINE +  2)
-#define GFX_SP_TERMINAL                (GFX_START_ROCKSMORE +  2 * MORE_PER_LINE +  3)
-#define GFX_SP_DISK_RED                (GFX_START_ROCKSMORE +  2 * MORE_PER_LINE +  4)
-#define GFX_SP_PORT_Y          (GFX_START_ROCKSMORE +  2 * MORE_PER_LINE +  5)
-#define GFX_SP_PORT_X          (GFX_START_ROCKSMORE +  2 * MORE_PER_LINE +  6)
-#define GFX_SP_PORT_XY         (GFX_START_ROCKSMORE +  2 * MORE_PER_LINE +  7)
-#define GFX_SP_ELECTRON                (GFX_START_ROCKSMORE +  3 * MORE_PER_LINE +  0)
-#define GFX_SP_BUG             (GFX_START_ROCKSMORE +  3 * MORE_PER_LINE +  1)
-#define GFX_SP_CHIP_LEFT       (GFX_START_ROCKSMORE +  3 * MORE_PER_LINE +  2)
-#define GFX_SP_CHIP_RIGHT      (GFX_START_ROCKSMORE +  3 * MORE_PER_LINE +  3)
-#define GFX_SP_HARD_BASE1      (GFX_START_ROCKSMORE +  3 * MORE_PER_LINE +  4)
-#define GFX_SP_HARD_GREEN      (GFX_START_ROCKSMORE +  3 * MORE_PER_LINE +  5)
-#define GFX_SP_HARD_BLUE       (GFX_START_ROCKSMORE +  3 * MORE_PER_LINE +  6)
-#define GFX_SP_HARD_RED                (GFX_START_ROCKSMORE +  3 * MORE_PER_LINE +  7)
-#define GFX_SP_HARD_YELLOW     (GFX_START_ROCKSMORE +  4 * MORE_PER_LINE +  0)
-#define GFX_SP_HARD_BASE2      (GFX_START_ROCKSMORE +  4 * MORE_PER_LINE +  1)
-#define GFX_SP_HARD_BASE3      (GFX_START_ROCKSMORE +  4 * MORE_PER_LINE +  2)
-#define GFX_SP_HARD_BASE4      (GFX_START_ROCKSMORE +  4 * MORE_PER_LINE +  3)
-#define GFX_SP_HARD_BASE5      (GFX_START_ROCKSMORE +  4 * MORE_PER_LINE +  4)
-#define GFX_SP_HARD_BASE6      (GFX_START_ROCKSMORE +  4 * MORE_PER_LINE +  5)
-#define GFX_SP_CHIP_UPPER      (GFX_START_ROCKSMORE +  4 * MORE_PER_LINE +  6)
-#define GFX_SP_CHIP_LOWER      (GFX_START_ROCKSMORE +  4 * MORE_PER_LINE +  7)
-
-#define GFX_INVISIBLE_STEEL    (GFX_START_ROCKSMORE +  5 * MORE_PER_LINE +  3)
-#define GFX_UNSICHTBAR         (GFX_START_ROCKSMORE +  5 * MORE_PER_LINE +  7)
-#define GFX_SP_ZONK            (GFX_START_ROCKSMORE +  6 * MORE_PER_LINE +  0)
-
-#define GFX_EM_KEY_1           (GFX_START_ROCKSMORE +  6 * MORE_PER_LINE +  4)
-#define GFX_EM_KEY_2           (GFX_START_ROCKSMORE +  6 * MORE_PER_LINE +  5)
-#define GFX_EM_KEY_3           (GFX_START_ROCKSMORE +  6 * MORE_PER_LINE +  6)
-#define GFX_EM_KEY_4           (GFX_START_ROCKSMORE +  6 * MORE_PER_LINE +  7)
-#define GFX_EM_GATE_1          (GFX_START_ROCKSMORE +  7 * MORE_PER_LINE +  0)
-#define GFX_EM_GATE_2          (GFX_START_ROCKSMORE +  7 * MORE_PER_LINE +  1)
-#define GFX_EM_GATE_3          (GFX_START_ROCKSMORE +  7 * MORE_PER_LINE +  2)
-#define GFX_EM_GATE_4          (GFX_START_ROCKSMORE +  7 * MORE_PER_LINE +  3)
-#define GFX_EM_GATE_1X         (GFX_START_ROCKSMORE +  7 * MORE_PER_LINE +  4)
-#define GFX_EM_GATE_2X         (GFX_START_ROCKSMORE +  7 * MORE_PER_LINE +  5)
-#define GFX_EM_GATE_3X         (GFX_START_ROCKSMORE +  7 * MORE_PER_LINE +  6)
-#define GFX_EM_GATE_4X         (GFX_START_ROCKSMORE +  7 * MORE_PER_LINE +  7)
-
-#define GFX_MURPHY_GO_LEFT     (GFX_START_ROCKSMORE +  0 * MORE_PER_LINE +  8)
-#define GFX_MURPHY_ANY_LEFT    (GFX_START_ROCKSMORE +  0 * MORE_PER_LINE +  9)
-#define GFX_MURPHY_GO_RIGHT    (GFX_START_ROCKSMORE +  0 * MORE_PER_LINE + 11)
-#define GFX_MURPHY_ANY_RIGHT   (GFX_START_ROCKSMORE +  0 * MORE_PER_LINE + 12)
-#define GFX_MURPHY_SNAP_UP     (GFX_START_ROCKSMORE +  0 * MORE_PER_LINE + 14)
-#define GFX_MURPHY_SNAP_DOWN   (GFX_START_ROCKSMORE +  0 * MORE_PER_LINE + 15)
-#define GFX_MURPHY_SNAP_RIGHT  (GFX_START_ROCKSMORE +  1 * MORE_PER_LINE +  8)
-#define GFX_MURPHY_SNAP_LEFT   (GFX_START_ROCKSMORE +  1 * MORE_PER_LINE +  9)
-#define GFX_MURPHY_PUSH_RIGHT  (GFX_START_ROCKSMORE +  1 * MORE_PER_LINE + 10)
-#define GFX_MURPHY_PUSH_LEFT   (GFX_START_ROCKSMORE +  1 * MORE_PER_LINE + 11)
-
-#define GFX_SP_BUG_WARNING     (GFX_START_ROCKSMORE +  2 * MORE_PER_LINE + 15)
-#define GFX_SP_EXPLODE_EMPTY   (GFX_START_ROCKSMORE +  3 * MORE_PER_LINE +  8)
-#define GFX_SP_EXPLODE_INFOTRON        (GFX_START_ROCKSMORE +  4 * MORE_PER_LINE +  8)
-#define GFX_SP_BUG_ACTIVE      (GFX_START_ROCKSMORE +  6 * MORE_PER_LINE +  8)
-#define GFX_SP_SNIKSNAK_LEFT   (GFX_START_ROCKSMORE +  8 * MORE_PER_LINE +  8)
-#define GFX_SP_SNIKSNAK_RIGHT  (GFX_START_ROCKSMORE +  8 * MORE_PER_LINE + 12)
-#define GFX_SP_SNIKSNAK_UP     (GFX_START_ROCKSMORE +  9 * MORE_PER_LINE +  8)
-#define GFX_SP_SNIKSNAK_DOWN   (GFX_START_ROCKSMORE +  9 * MORE_PER_LINE + 12)
-
-#define GFX2_SP_ELECTRON       (GFX_START_ROCKSMORE + 10 * MORE_PER_LINE +  8)
-#define GFX2_SP_TERMINAL       (GFX_START_ROCKSMORE + 11 * MORE_PER_LINE +  8)
-#define GFX2_SP_TERMINAL_ACTIVE        (GFX_START_ROCKSMORE + 12 * MORE_PER_LINE +  8)
+#define GFX_SP_BASE            (GFX_START_ROCKSSP +  0 * SP_PER_LINE +  2)
+#define GFX_SP_MURPHY          (GFX_START_ROCKSSP +  0 * SP_PER_LINE +  3)
+#define GFX_SP_INFOTRON                (GFX_START_ROCKSSP +  0 * SP_PER_LINE +  4)
+#define GFX_SP_CHIP_SINGLE     (GFX_START_ROCKSSP +  0 * SP_PER_LINE +  5)
+#define GFX_SP_HARD_GRAY       (GFX_START_ROCKSSP +  0 * SP_PER_LINE +  6)
+#define GFX_SP_EXIT            (GFX_START_ROCKSSP +  0 * SP_PER_LINE +  7)
+#define GFX_SP_DISK_ORANGE     (GFX_START_ROCKSSP +  1 * SP_PER_LINE +  0)
+#define GFX_SP_PORT1_RIGHT     (GFX_START_ROCKSSP +  1 * SP_PER_LINE +  1)
+#define GFX_SP_PORT1_DOWN      (GFX_START_ROCKSSP +  1 * SP_PER_LINE +  2)
+#define GFX_SP_PORT1_LEFT      (GFX_START_ROCKSSP +  1 * SP_PER_LINE +  3)
+#define GFX_SP_PORT1_UP                (GFX_START_ROCKSSP +  1 * SP_PER_LINE +  4)
+#define GFX_SP_PORT2_RIGHT     (GFX_START_ROCKSSP +  1 * SP_PER_LINE +  5)
+#define GFX_SP_PORT2_DOWN      (GFX_START_ROCKSSP +  1 * SP_PER_LINE +  6)
+#define GFX_SP_PORT2_LEFT      (GFX_START_ROCKSSP +  1 * SP_PER_LINE +  7)
+#define GFX_SP_PORT2_UP                (GFX_START_ROCKSSP +  2 * SP_PER_LINE +  0)
+#define GFX_SP_SNIKSNAK                (GFX_START_ROCKSSP +  2 * SP_PER_LINE +  1)
+#define GFX_SP_DISK_YELLOW     (GFX_START_ROCKSSP +  2 * SP_PER_LINE +  2)
+#define GFX_SP_TERMINAL                (GFX_START_ROCKSSP +  2 * SP_PER_LINE +  3)
+#define GFX_SP_DISK_RED                (GFX_START_ROCKSSP +  2 * SP_PER_LINE +  4)
+#define GFX_SP_PORT_Y          (GFX_START_ROCKSSP +  2 * SP_PER_LINE +  5)
+#define GFX_SP_PORT_X          (GFX_START_ROCKSSP +  2 * SP_PER_LINE +  6)
+#define GFX_SP_PORT_XY         (GFX_START_ROCKSSP +  2 * SP_PER_LINE +  7)
+#define GFX_SP_ELECTRON                (GFX_START_ROCKSSP +  3 * SP_PER_LINE +  0)
+#define GFX_SP_BUG             (GFX_START_ROCKSSP +  3 * SP_PER_LINE +  1)
+#define GFX_SP_CHIP_LEFT       (GFX_START_ROCKSSP +  3 * SP_PER_LINE +  2)
+#define GFX_SP_CHIP_RIGHT      (GFX_START_ROCKSSP +  3 * SP_PER_LINE +  3)
+#define GFX_SP_HARD_BASE1      (GFX_START_ROCKSSP +  3 * SP_PER_LINE +  4)
+#define GFX_SP_HARD_GREEN      (GFX_START_ROCKSSP +  3 * SP_PER_LINE +  5)
+#define GFX_SP_HARD_BLUE       (GFX_START_ROCKSSP +  3 * SP_PER_LINE +  6)
+#define GFX_SP_HARD_RED                (GFX_START_ROCKSSP +  3 * SP_PER_LINE +  7)
+#define GFX_SP_HARD_YELLOW     (GFX_START_ROCKSSP +  4 * SP_PER_LINE +  0)
+#define GFX_SP_HARD_BASE2      (GFX_START_ROCKSSP +  4 * SP_PER_LINE +  1)
+#define GFX_SP_HARD_BASE3      (GFX_START_ROCKSSP +  4 * SP_PER_LINE +  2)
+#define GFX_SP_HARD_BASE4      (GFX_START_ROCKSSP +  4 * SP_PER_LINE +  3)
+#define GFX_SP_HARD_BASE5      (GFX_START_ROCKSSP +  4 * SP_PER_LINE +  4)
+#define GFX_SP_HARD_BASE6      (GFX_START_ROCKSSP +  4 * SP_PER_LINE +  5)
+#define GFX_SP_CHIP_UPPER      (GFX_START_ROCKSSP +  4 * SP_PER_LINE +  6)
+#define GFX_SP_CHIP_LOWER      (GFX_START_ROCKSSP +  4 * SP_PER_LINE +  7)
+
+#define GFX_INVISIBLE_STEEL    (GFX_START_ROCKSSP +  5 * SP_PER_LINE +  3)
+#define GFX_UNSICHTBAR         (GFX_START_ROCKSSP +  5 * SP_PER_LINE +  7)
+#define GFX_SP_ZONK            (GFX_START_ROCKSSP +  6 * SP_PER_LINE +  0)
+
+#define GFX_EM_KEY_1           (GFX_START_ROCKSSP +  6 * SP_PER_LINE +  4)
+#define GFX_EM_KEY_2           (GFX_START_ROCKSSP +  6 * SP_PER_LINE +  5)
+#define GFX_EM_KEY_3           (GFX_START_ROCKSSP +  6 * SP_PER_LINE +  6)
+#define GFX_EM_KEY_4           (GFX_START_ROCKSSP +  6 * SP_PER_LINE +  7)
+#define GFX_EM_GATE_1          (GFX_START_ROCKSSP +  7 * SP_PER_LINE +  0)
+#define GFX_EM_GATE_2          (GFX_START_ROCKSSP +  7 * SP_PER_LINE +  1)
+#define GFX_EM_GATE_3          (GFX_START_ROCKSSP +  7 * SP_PER_LINE +  2)
+#define GFX_EM_GATE_4          (GFX_START_ROCKSSP +  7 * SP_PER_LINE +  3)
+#define GFX_EM_GATE_1X         (GFX_START_ROCKSSP +  7 * SP_PER_LINE +  4)
+#define GFX_EM_GATE_2X         (GFX_START_ROCKSSP +  7 * SP_PER_LINE +  5)
+#define GFX_EM_GATE_3X         (GFX_START_ROCKSSP +  7 * SP_PER_LINE +  6)
+#define GFX_EM_GATE_4X         (GFX_START_ROCKSSP +  7 * SP_PER_LINE +  7)
+
+#define GFX_MURPHY_GO_LEFT     (GFX_START_ROCKSSP +  0 * SP_PER_LINE +  8)
+#define GFX_MURPHY_ANY_LEFT    (GFX_START_ROCKSSP +  0 * SP_PER_LINE +  9)
+#define GFX_MURPHY_GO_RIGHT    (GFX_START_ROCKSSP +  0 * SP_PER_LINE + 11)
+#define GFX_MURPHY_ANY_RIGHT   (GFX_START_ROCKSSP +  0 * SP_PER_LINE + 12)
+#define GFX_MURPHY_SNAP_UP     (GFX_START_ROCKSSP +  0 * SP_PER_LINE + 14)
+#define GFX_MURPHY_SNAP_DOWN   (GFX_START_ROCKSSP +  0 * SP_PER_LINE + 15)
+#define GFX_MURPHY_SNAP_RIGHT  (GFX_START_ROCKSSP +  1 * SP_PER_LINE +  8)
+#define GFX_MURPHY_SNAP_LEFT   (GFX_START_ROCKSSP +  1 * SP_PER_LINE +  9)
+#define GFX_MURPHY_PUSH_RIGHT  (GFX_START_ROCKSSP +  1 * SP_PER_LINE + 10)
+#define GFX_MURPHY_PUSH_LEFT   (GFX_START_ROCKSSP +  1 * SP_PER_LINE + 11)
+
+#define GFX_SP_BUG_WARNING     (GFX_START_ROCKSSP +  2 * SP_PER_LINE + 15)
+#define GFX_SP_EXPLODE_EMPTY   (GFX_START_ROCKSSP +  3 * SP_PER_LINE +  8)
+#define GFX_SP_EXPLODE_INFOTRON        (GFX_START_ROCKSSP +  4 * SP_PER_LINE +  8)
+#define GFX_SP_BUG_ACTIVE      (GFX_START_ROCKSSP +  6 * SP_PER_LINE +  8)
+#define GFX_SP_SNIKSNAK_LEFT   (GFX_START_ROCKSSP +  8 * SP_PER_LINE +  8)
+#define GFX_SP_SNIKSNAK_RIGHT  (GFX_START_ROCKSSP +  8 * SP_PER_LINE + 12)
+#define GFX_SP_SNIKSNAK_UP     (GFX_START_ROCKSSP +  9 * SP_PER_LINE +  8)
+#define GFX_SP_SNIKSNAK_DOWN   (GFX_START_ROCKSSP +  9 * SP_PER_LINE + 12)
+
+#define GFX2_SP_ELECTRON       (GFX_START_ROCKSSP + 10 * SP_PER_LINE +  8)
+#define GFX2_SP_TERMINAL       (GFX_START_ROCKSSP + 11 * SP_PER_LINE +  8)
+#define GFX2_SP_TERMINAL_ACTIVE        (GFX_START_ROCKSSP + 12 * SP_PER_LINE +  8)
+
+/* graphics from "RocksDC" */
+#define GFX_BELT1_MIDDLE       (GFX_START_ROCKSDC +  0 * DC_PER_LINE +  0)
+#define GFX_BELT1_LEFT         (GFX_START_ROCKSDC +  1 * DC_PER_LINE +  0)
+#define GFX_BELT1_RIGHT                (GFX_START_ROCKSDC +  2 * DC_PER_LINE +  0)
+#define GFX_BELT2_MIDDLE       (GFX_START_ROCKSDC +  3 * DC_PER_LINE +  0)
+#define GFX_BELT2_LEFT         (GFX_START_ROCKSDC +  4 * DC_PER_LINE +  0)
+#define GFX_BELT2_RIGHT                (GFX_START_ROCKSDC +  5 * DC_PER_LINE +  0)
+#define GFX_BELT3_MIDDLE       (GFX_START_ROCKSDC +  6 * DC_PER_LINE +  0)
+#define GFX_BELT3_LEFT         (GFX_START_ROCKSDC +  7 * DC_PER_LINE +  0)
+#define GFX_BELT3_RIGHT                (GFX_START_ROCKSDC +  8 * DC_PER_LINE +  0)
+#define GFX_BELT4_MIDDLE       (GFX_START_ROCKSDC +  9 * DC_PER_LINE +  0)
+#define GFX_BELT4_LEFT         (GFX_START_ROCKSDC + 10 * DC_PER_LINE +  0)
+#define GFX_BELT4_RIGHT                (GFX_START_ROCKSDC + 11 * DC_PER_LINE +  0)
+#define GFX_BELT1_SWITCH_L     (GFX_START_ROCKSDC + 12 * DC_PER_LINE +  0)
+#define GFX_BELT2_SWITCH_L     (GFX_START_ROCKSDC + 12 * DC_PER_LINE +  1)
+#define GFX_BELT3_SWITCH_L     (GFX_START_ROCKSDC + 12 * DC_PER_LINE +  2)
+#define GFX_BELT4_SWITCH_L     (GFX_START_ROCKSDC + 12 * DC_PER_LINE +  3)
+#define GFX_BELT1_SWITCH_M     (GFX_START_ROCKSDC + 13 * DC_PER_LINE +  0)
+#define GFX_BELT2_SWITCH_M     (GFX_START_ROCKSDC + 13 * DC_PER_LINE +  1)
+#define GFX_BELT3_SWITCH_M     (GFX_START_ROCKSDC + 13 * DC_PER_LINE +  2)
+#define GFX_BELT4_SWITCH_M     (GFX_START_ROCKSDC + 13 * DC_PER_LINE +  3)
+#define GFX_BELT1_SWITCH_R     (GFX_START_ROCKSDC + 14 * DC_PER_LINE +  0)
+#define GFX_BELT2_SWITCH_R     (GFX_START_ROCKSDC + 14 * DC_PER_LINE +  1)
+#define GFX_BELT3_SWITCH_R     (GFX_START_ROCKSDC + 14 * DC_PER_LINE +  2)
+#define GFX_BELT4_SWITCH_R     (GFX_START_ROCKSDC + 14 * DC_PER_LINE +  3)
 
 /* graphics from "RocksFont" */
 #define GFX_CHAR_START         (GFX_START_ROCKSFONT)
 
 /* graphics from "RocksFont" */
 #define GFX_CHAR_START         (GFX_START_ROCKSFONT)
@@ -1273,23 +1337,40 @@ extern char             *element_info[];
 #define GFX_KEY_WHITE          GFX_CHAR_FRAGE
 #define GFX_FORCE_FIELD                GFX_CHAR_FRAGE
 #define GFX_EXTRA_TIME         GFX_CHAR_FRAGE
 #define GFX_KEY_WHITE          GFX_CHAR_FRAGE
 #define GFX_FORCE_FIELD                GFX_CHAR_FRAGE
 #define GFX_EXTRA_TIME         GFX_CHAR_FRAGE
-#define GFX_SWITCH_GATE_OPEN   GFX_CHAR_FRAGE
-#define GFX_SWITCH_GATE_CLOSED GFX_CHAR_FRAGE
-#define GFX_SWITCH_GATE_SWITCH GFX_CHAR_FRAGE
+#define GFX_SWITCHGATE_OPEN    GFX_CHAR_FRAGE
+#define GFX_SWITCHGATE_CLOSED  GFX_CHAR_FRAGE
+#define GFX_SWITCHGATE_SWITCH_L        GFX_CHAR_FRAGE
+#define GFX_SWITCHGATE_SWITCH_R        GFX_CHAR_FRAGE
 #define GFX_TIME_GATE          GFX_CHAR_FRAGE
 #define GFX_TIME_GATE_WHEEL    GFX_CHAR_FRAGE
 #define GFX_TIME_GATE          GFX_CHAR_FRAGE
 #define GFX_TIME_GATE_WHEEL    GFX_CHAR_FRAGE
-#define GFX_BELT_GREEN_LEFT    GFX_CHAR_FRAGE
-#define GFX_BELT_GREEN_MIDDLE  GFX_CHAR_FRAGE
-#define GFX_BELT_GREEN_RIGHT   GFX_CHAR_FRAGE
-#define GFX_BELT_GREEN_SWITCH  GFX_CHAR_FRAGE
-#define GFX_BELT_RED_LEFT      GFX_CHAR_FRAGE
-#define GFX_BELT_RED_MIDDLE    GFX_CHAR_FRAGE
-#define GFX_BELT_RED_RIGHT     GFX_CHAR_FRAGE
-#define GFX_BELT_RED_SWITCH    GFX_CHAR_FRAGE
-#define GFX_BELT_BLUE_LEFT     GFX_CHAR_FRAGE
-#define GFX_BELT_BLUE_MIDDLE   GFX_CHAR_FRAGE
-#define GFX_BELT_BLUE_RIGHT    GFX_CHAR_FRAGE
-#define GFX_BELT_BLUE_SWITCH   GFX_CHAR_FRAGE
+
+/*
+#define GFX_BELT1_LEFT         GFX_CHAR_FRAGE
+#define GFX_BELT1_MIDDLE       GFX_CHAR_FRAGE
+#define GFX_BELT1_RIGHT                GFX_CHAR_FRAGE
+#define GFX_BELT1_SWITCH_L     GFX_CHAR_FRAGE
+#define GFX_BELT1_SWITCH_M     GFX_CHAR_FRAGE
+#define GFX_BELT1_SWITCH_R     GFX_CHAR_FRAGE
+#define GFX_BELT2_LEFT         GFX_CHAR_FRAGE
+#define GFX_BELT2_MIDDLE       GFX_CHAR_FRAGE
+#define GFX_BELT2_RIGHT                GFX_CHAR_FRAGE
+#define GFX_BELT2_SWITCH_L     GFX_CHAR_FRAGE
+#define GFX_BELT2_SWITCH_M     GFX_CHAR_FRAGE
+#define GFX_BELT2_SWITCH_R     GFX_CHAR_FRAGE
+#define GFX_BELT3_LEFT         GFX_CHAR_FRAGE
+#define GFX_BELT3_MIDDLE       GFX_CHAR_FRAGE
+#define GFX_BELT3_RIGHT                GFX_CHAR_FRAGE
+#define GFX_BELT3_SWITCH_L     GFX_CHAR_FRAGE
+#define GFX_BELT3_SWITCH_M     GFX_CHAR_FRAGE
+#define GFX_BELT3_SWITCH_R     GFX_CHAR_FRAGE
+#define GFX_BELT4_LEFT         GFX_CHAR_FRAGE
+#define GFX_BELT4_MIDDLE       GFX_CHAR_FRAGE
+#define GFX_BELT4_RIGHT                GFX_CHAR_FRAGE
+#define GFX_BELT4_SWITCH_L     GFX_CHAR_FRAGE
+#define GFX_BELT4_SWITCH_M     GFX_CHAR_FRAGE
+#define GFX_BELT4_SWITCH_R     GFX_CHAR_FRAGE
+*/
+
 #define GFX_LANDMINE           GFX_CHAR_FRAGE
 #define GFX_ENVELOPE           GFX_CHAR_FRAGE
 #define GFX_LIGHT_SWITCH       GFX_CHAR_FRAGE
 #define GFX_LANDMINE           GFX_CHAR_FRAGE
 #define GFX_ENVELOPE           GFX_CHAR_FRAGE
 #define GFX_LIGHT_SWITCH       GFX_CHAR_FRAGE
index 1c63396a5f04751d8da4f029c6c82366c9597cb7..a5fd0c92819bef9931867f43d0eda76f744886b6 100644 (file)
--- a/src/pcx.c
+++ b/src/pcx.c
@@ -45,6 +45,9 @@ struct PCX_Header
   unsigned char filler[58];    /* fill to struct size of 128          */
 };
 
   unsigned char filler[58];    /* fill to struct size of 128          */
 };
 
+/* global PCX error value */
+int errno_pcx = PCX_Success;
+
 static byte *PCX_ReadBitmap(Image *image, byte *buffer_ptr, byte *buffer_last)
 {
   /* Run Length Encoding: If the two high bits are set,
 static byte *PCX_ReadBitmap(Image *image, byte *buffer_ptr, byte *buffer_last)
 {
   /* Run Length Encoding: If the two high bits are set,
@@ -127,12 +130,18 @@ Image *Read_PCX_to_Image(char *filename)
   int width, height, depth;
   int i;
 
   int width, height, depth;
   int i;
 
+  errno_pcx = PCX_Success;
+
   if (!(file = fopen(filename, "r")))
   if (!(file = fopen(filename, "r")))
+  {
+    errno_pcx = PCX_OpenFailed;
     return NULL;
     return NULL;
+  }
 
   if (fseek(file, 0, SEEK_END) == -1)
   {
     fclose(file);
 
   if (fseek(file, 0, SEEK_END) == -1)
   {
     fclose(file);
+    errno_pcx = PCX_ReadFailed;
     return NULL;
   }
 
     return NULL;
   }
 
@@ -143,6 +152,7 @@ Image *Read_PCX_to_Image(char *filename)
   {
     /* PCX file is too short to contain a valid PCX header */
     fclose(file);
   {
     /* PCX file is too short to contain a valid PCX header */
     fclose(file);
+    errno_pcx = PCX_FileInvalid;
     return NULL;
   }
 
     return NULL;
   }
 
@@ -151,6 +161,7 @@ Image *Read_PCX_to_Image(char *filename)
   if (fread(file_buffer, 1, file_length, file) != file_length)
   {
     fclose(file);
   if (fread(file_buffer, 1, file_length, file) != file_length)
   {
     fclose(file);
+    errno_pcx = PCX_ReadFailed;
     return NULL;
   }
 
     return NULL;
   }
 
@@ -177,6 +188,7 @@ Image *Read_PCX_to_Image(char *filename)
       width < 0 || height < 0)
   {
     free(file_buffer);
       width < 0 || height < 0)
   {
     free(file_buffer);
+    errno_pcx = PCX_FileInvalid;
     return NULL;
   }
 
     return NULL;
   }
 
@@ -204,6 +216,7 @@ Image *Read_PCX_to_Image(char *filename)
   {
     free(file_buffer);
     freeImage(image);
   {
     free(file_buffer);
     freeImage(image);
+    errno_pcx = PCX_FileInvalid;
     return NULL;
   }
 
     return NULL;
   }
 
@@ -211,6 +224,7 @@ Image *Read_PCX_to_Image(char *filename)
   {
     /* PCX file is too short to contain a valid 256 colors colormap */
     fclose(file);
   {
     /* PCX file is too short to contain a valid 256 colors colormap */
     fclose(file);
+    errno_pcx = PCX_ColorFailed;
     return NULL;
   }
 
     return NULL;
   }
 
@@ -219,6 +233,7 @@ Image *Read_PCX_to_Image(char *filename)
   {
     free(file_buffer);
     freeImage(image);
   {
     free(file_buffer);
     freeImage(image);
+    errno_pcx = PCX_ColorFailed;
     return NULL;
   }
 
     return NULL;
   }
 
index b1fa1c63ec71fa98084e1d7d96db2f702a39e47f..44217edd9c1626b17cd47e0c8429edc683000a5c 100644 (file)
--- a/src/pcx.h
+++ b/src/pcx.h
@@ -24,6 +24,9 @@
 #define PCX_NoMemory           -4
 #define PCX_ColorFailed                -5
 
 #define PCX_NoMemory           -4
 #define PCX_ColorFailed                -5
 
+/* global PCX error value */
+extern int errno_pcx;
+
 Image *Read_PCX_to_Image(char *);
 
 #endif /* PCX_H */
 Image *Read_PCX_to_Image(char *);
 
 #endif /* PCX_H */
index 4159ba7e59218f7a3718aa005e0e7c1d243a891e..b9c4a826f90bf4c8c33b5d07fdeb95a67a9cf29a 100644 (file)
@@ -741,13 +741,6 @@ void getGraphicSource(int graphic, int *pixmap_nr, int *x, int *y)
     *x = SX + (graphic % GFX_PER_LINE) * TILEX;
     *y = SY + (graphic / GFX_PER_LINE) * TILEY;
   }
     *x = SX + (graphic % GFX_PER_LINE) * TILEX;
     *y = SY + (graphic / GFX_PER_LINE) * TILEY;
   }
-  else if (graphic >= GFX_START_ROCKSMORE && graphic <= GFX_END_ROCKSMORE)
-  {
-    graphic -= GFX_START_ROCKSMORE;
-    *pixmap_nr = PIX_MORE;
-    *x = (graphic % MORE_PER_LINE) * TILEX;
-    *y = (graphic / MORE_PER_LINE) * TILEY;
-  }
   else if (graphic >= GFX_START_ROCKSHEROES && graphic <= GFX_END_ROCKSHEROES)
   {
     graphic -= GFX_START_ROCKSHEROES;
   else if (graphic >= GFX_START_ROCKSHEROES && graphic <= GFX_END_ROCKSHEROES)
   {
     graphic -= GFX_START_ROCKSHEROES;
@@ -755,6 +748,20 @@ void getGraphicSource(int graphic, int *pixmap_nr, int *x, int *y)
     *x = (graphic % HEROES_PER_LINE) * TILEX;
     *y = (graphic / HEROES_PER_LINE) * TILEY;
   }
     *x = (graphic % HEROES_PER_LINE) * TILEX;
     *y = (graphic / HEROES_PER_LINE) * TILEY;
   }
+  else if (graphic >= GFX_START_ROCKSSP && graphic <= GFX_END_ROCKSSP)
+  {
+    graphic -= GFX_START_ROCKSSP;
+    *pixmap_nr = PIX_SP;
+    *x = (graphic % SP_PER_LINE) * TILEX;
+    *y = (graphic / SP_PER_LINE) * TILEY;
+  }
+  else if (graphic >= GFX_START_ROCKSDC && graphic <= GFX_END_ROCKSDC)
+  {
+    graphic -= GFX_START_ROCKSDC;
+    *pixmap_nr = PIX_DC;
+    *x = (graphic % DC_PER_LINE) * TILEX;
+    *y = (graphic / DC_PER_LINE) * TILEY;
+  }
   else if (graphic >= GFX_START_ROCKSFONT && graphic <= GFX_END_ROCKSFONT)
   {
     graphic -= GFX_START_ROCKSFONT;
   else if (graphic >= GFX_START_ROCKSFONT && graphic <= GFX_END_ROCKSFONT)
   {
     graphic -= GFX_START_ROCKSFONT;
@@ -765,7 +772,7 @@ void getGraphicSource(int graphic, int *pixmap_nr, int *x, int *y)
   }
   else
   {
   }
   else
   {
-    *pixmap_nr = PIX_MORE;
+    *pixmap_nr = PIX_SP;
     *x = 0;
     *y = 0;
   }
     *x = 0;
     *y = 0;
   }
@@ -860,13 +867,20 @@ void getMiniGraphicSource(int graphic, Pixmap *pixmap, int *x, int *y)
     *x = MINI_GFX_STARTX + (graphic % MINI_GFX_PER_LINE) * MINI_TILEX;
     *y = MINI_GFX_STARTY + (graphic / MINI_GFX_PER_LINE) * MINI_TILEY;
   }
     *x = MINI_GFX_STARTX + (graphic % MINI_GFX_PER_LINE) * MINI_TILEX;
     *y = MINI_GFX_STARTY + (graphic / MINI_GFX_PER_LINE) * MINI_TILEY;
   }
-  else if (graphic >= GFX_START_ROCKSMORE && graphic <= GFX_END_ROCKSMORE)
+  else if (graphic >= GFX_START_ROCKSSP && graphic <= GFX_END_ROCKSSP)
   {
   {
-    graphic -= GFX_START_ROCKSMORE;
-    graphic -= ((graphic / MORE_PER_LINE) * MORE_PER_LINE) / 2;
-    *pixmap = pix[PIX_MORE];
-    *x = MINI_MORE_STARTX + (graphic % MINI_MORE_PER_LINE) * MINI_TILEX;
-    *y = MINI_MORE_STARTY + (graphic / MINI_MORE_PER_LINE) * MINI_TILEY;
+    graphic -= GFX_START_ROCKSSP;
+    graphic -= ((graphic / SP_PER_LINE) * SP_PER_LINE) / 2;
+    *pixmap = pix[PIX_SP];
+    *x = MINI_SP_STARTX + (graphic % MINI_SP_PER_LINE) * MINI_TILEX;
+    *y = MINI_SP_STARTY + (graphic / MINI_SP_PER_LINE) * MINI_TILEY;
+  }
+  else if (graphic >= GFX_START_ROCKSDC && graphic <= GFX_END_ROCKSDC)
+  {
+    graphic -= GFX_START_ROCKSDC;
+    *pixmap = pix[PIX_DC];
+    *x = MINI_DC_STARTX + (graphic % MINI_DC_PER_LINE) * MINI_TILEX;
+    *y = MINI_DC_STARTY + (graphic / MINI_DC_PER_LINE) * MINI_TILEY;
   }
   else if (graphic >= GFX_START_ROCKSFONT && graphic <= GFX_END_ROCKSFONT)
   {
   }
   else if (graphic >= GFX_START_ROCKSFONT && graphic <= GFX_END_ROCKSFONT)
   {
@@ -878,9 +892,9 @@ void getMiniGraphicSource(int graphic, Pixmap *pixmap, int *x, int *y)
   }
   else
   {
   }
   else
   {
-    *pixmap = pix[PIX_MORE];
-    *x = MINI_MORE_STARTX;
-    *y = MINI_MORE_STARTY;
+    *pixmap = pix[PIX_SP];
+    *x = MINI_SP_STARTX;
+    *y = MINI_SP_STARTY;
   }
 }
 
   }
 }
 
@@ -1459,13 +1473,22 @@ void DrawMicroElement(int xpos, int ypos, int element)
 
   graphic = el2gfx(element);
 
 
   graphic = el2gfx(element);
 
-  if (graphic >= GFX_START_ROCKSMORE && graphic <= GFX_END_ROCKSMORE)
+  if (graphic >= GFX_START_ROCKSSP && graphic <= GFX_END_ROCKSSP)
+  {
+    graphic -= GFX_START_ROCKSSP;
+    graphic -= ((graphic / SP_PER_LINE) * SP_PER_LINE) / 2;
+    XCopyArea(display, pix[PIX_SP], drawto, gc,
+             MICRO_SP_STARTX + (graphic % MICRO_SP_PER_LINE) *MICRO_TILEX,
+             MICRO_SP_STARTY + (graphic / MICRO_SP_PER_LINE) *MICRO_TILEY,
+             MICRO_TILEX, MICRO_TILEY, xpos, ypos);
+  }
+  else if (graphic >= GFX_START_ROCKSDC && graphic <= GFX_END_ROCKSDC)
   {
   {
-    graphic -= GFX_START_ROCKSMORE;
-    graphic -= ((graphic / MORE_PER_LINE) * MORE_PER_LINE) / 2;
-    XCopyArea(display, pix[PIX_MORE], drawto, gc,
-             MICRO_MORE_STARTX + (graphic % MICRO_MORE_PER_LINE) *MICRO_TILEX,
-             MICRO_MORE_STARTY + (graphic / MICRO_MORE_PER_LINE) *MICRO_TILEY,
+    graphic -= GFX_START_ROCKSDC;
+    graphic -= ((graphic / DC_PER_LINE) * DC_PER_LINE) / 2;
+    XCopyArea(display, pix[PIX_DC], drawto, gc,
+             MICRO_DC_STARTX + (graphic % MICRO_DC_PER_LINE) *MICRO_TILEX,
+             MICRO_DC_STARTY + (graphic / MICRO_DC_PER_LINE) *MICRO_TILEY,
              MICRO_TILEX, MICRO_TILEY, xpos, ypos);
   }
   else
              MICRO_TILEX, MICRO_TILEY, xpos, ypos);
   }
   else
@@ -2455,23 +2478,36 @@ int el2gfx(int element)
     case EL_KEY_WHITE:         return GFX_KEY_WHITE;
     case EL_FORCE_FIELD:       return GFX_FORCE_FIELD;
     case EL_EXTRA_TIME:                return GFX_EXTRA_TIME;
     case EL_KEY_WHITE:         return GFX_KEY_WHITE;
     case EL_FORCE_FIELD:       return GFX_FORCE_FIELD;
     case EL_EXTRA_TIME:                return GFX_EXTRA_TIME;
-    case EL_SWITCH_GATE_OPEN:  return GFX_SWITCH_GATE_OPEN;
-    case EL_SWITCH_GATE_CLOSED:        return GFX_SWITCH_GATE_CLOSED;
-    case EL_SWITCH_GATE_SWITCH:        return GFX_SWITCH_GATE_SWITCH;
+    case EL_SWITCHGATE_OPEN:   return GFX_SWITCHGATE_OPEN;
+    case EL_SWITCHGATE_CLOSED: return GFX_SWITCHGATE_CLOSED;
+    case EL_SWITCHGATE_SWITCH_L:return GFX_SWITCHGATE_SWITCH_L;
+    case EL_SWITCHGATE_SWITCH_R:return GFX_SWITCHGATE_SWITCH_R;
     case EL_TIME_GATE:         return GFX_TIME_GATE;
     case EL_TIME_GATE_WHEEL:   return GFX_TIME_GATE_WHEEL;
     case EL_TIME_GATE:         return GFX_TIME_GATE;
     case EL_TIME_GATE_WHEEL:   return GFX_TIME_GATE_WHEEL;
-    case EL_BELT_GREEN_LEFT:   return GFX_BELT_GREEN_LEFT;
-    case EL_BELT_GREEN_MIDDLE: return GFX_BELT_GREEN_MIDDLE;
-    case EL_BELT_GREEN_RIGHT:  return GFX_BELT_GREEN_RIGHT;
-    case EL_BELT_GREEN_SWITCH: return GFX_BELT_GREEN_SWITCH;
-    case EL_BELT_RED_LEFT:     return GFX_BELT_RED_LEFT;
-    case EL_BELT_RED_MIDDLE:   return GFX_BELT_RED_MIDDLE;
-    case EL_BELT_RED_RIGHT:    return GFX_BELT_RED_RIGHT;
-    case EL_BELT_RED_SWITCH:   return GFX_BELT_RED_SWITCH;
-    case EL_BELT_BLUE_LEFT:    return GFX_BELT_BLUE_LEFT;
-    case EL_BELT_BLUE_MIDDLE:  return GFX_BELT_BLUE_MIDDLE;
-    case EL_BELT_BLUE_RIGHT:   return GFX_BELT_BLUE_RIGHT;
-    case EL_BELT_BLUE_SWITCH:  return GFX_BELT_BLUE_SWITCH;
+    case EL_BELT1_LEFT:                return GFX_BELT1_LEFT;
+    case EL_BELT1_MIDDLE:      return GFX_BELT1_MIDDLE;
+    case EL_BELT1_RIGHT:       return GFX_BELT1_RIGHT;
+    case EL_BELT1_SWITCH_L:    return GFX_BELT1_SWITCH_L;
+    case EL_BELT1_SWITCH_M:    return GFX_BELT1_SWITCH_M;
+    case EL_BELT1_SWITCH_R:    return GFX_BELT1_SWITCH_R;
+    case EL_BELT2_LEFT:                return GFX_BELT2_LEFT;
+    case EL_BELT2_MIDDLE:      return GFX_BELT2_MIDDLE;
+    case EL_BELT2_RIGHT:       return GFX_BELT2_RIGHT;
+    case EL_BELT2_SWITCH_L:    return GFX_BELT2_SWITCH_L;
+    case EL_BELT2_SWITCH_M:    return GFX_BELT2_SWITCH_M;
+    case EL_BELT2_SWITCH_R:    return GFX_BELT2_SWITCH_R;
+    case EL_BELT3_LEFT:                return GFX_BELT3_LEFT;
+    case EL_BELT3_MIDDLE:      return GFX_BELT3_MIDDLE;
+    case EL_BELT3_RIGHT:       return GFX_BELT3_RIGHT;
+    case EL_BELT3_SWITCH_L:    return GFX_BELT3_SWITCH_L;
+    case EL_BELT3_SWITCH_M:    return GFX_BELT3_SWITCH_M;
+    case EL_BELT3_SWITCH_R:    return GFX_BELT3_SWITCH_R;
+    case EL_BELT4_LEFT:                return GFX_BELT4_LEFT;
+    case EL_BELT4_MIDDLE:      return GFX_BELT4_MIDDLE;
+    case EL_BELT4_RIGHT:       return GFX_BELT4_RIGHT;
+    case EL_BELT4_SWITCH_L:    return GFX_BELT4_SWITCH_L;
+    case EL_BELT4_SWITCH_M:    return GFX_BELT4_SWITCH_M;
+    case EL_BELT4_SWITCH_R:    return GFX_BELT4_SWITCH_R;
     case EL_LANDMINE:          return GFX_LANDMINE;
     case EL_ENVELOPE:          return GFX_ENVELOPE;
     case EL_LIGHT_SWITCH:      return GFX_LIGHT_SWITCH;
     case EL_LANDMINE:          return GFX_LANDMINE;
     case EL_ENVELOPE:          return GFX_ENVELOPE;
     case EL_LIGHT_SWITCH:      return GFX_LIGHT_SWITCH;
@@ -2503,10 +2539,10 @@ int el2gfx(int element)
        int nr_element = element - EL_SP_START;
        int gfx_per_line = 8;
        int nr_graphic =
        int nr_element = element - EL_SP_START;
        int gfx_per_line = 8;
        int nr_graphic =
-         (nr_element / gfx_per_line) * MORE_PER_LINE +
+         (nr_element / gfx_per_line) * SP_PER_LINE +
          (nr_element % gfx_per_line);
 
          (nr_element % gfx_per_line);
 
-       return GFX_START_ROCKSMORE + nr_graphic;
+       return GFX_START_ROCKSSP + nr_graphic;
       }
       else
        return -1;
       }
       else
        return -1;