rnd-20020922-1-src
[rocksndiamonds.git] / src / tools.c
index 16ceba09b07d049ee1e86e70a570be32e9233c35..3015b1adad66ea0db1439f7b29fe7815d89de503 100644 (file)
@@ -458,7 +458,7 @@ void DrawPlayer(struct PlayerInfo *player)
   }
 #endif
 
-  if (element == EL_EXPLODING)
+  if (element == EL_EXPLOSION)
     return;
 
   /* draw things in the field the player is leaving, if needed */
@@ -653,7 +653,7 @@ void DrawPlayer(struct PlayerInfo *player)
       DrawGraphicThruMask(sx, sy, graphic + phase);
   }
 
-  if (player_is_moving && last_element == EL_EXPLODING)
+  if (player_is_moving && last_element == EL_EXPLOSION)
   {
     int phase = Frame[last_jx][last_jy];
     int delay = 2;
@@ -1408,9 +1408,9 @@ void DrawScreenElementExt(int x, int y, int dx, int dy, int element,
        graphic += phase2;
     }
   }
-  else if (element == EL_MAGIC_WALL_EMPTY ||
+  else if (element == EL_MAGIC_WALL_ACTIVE ||
           element == EL_MAGIC_WALL_EMPTYING ||
-          element == EL_BD_MAGIC_WALL_EMPTY ||
+          element == EL_BD_MAGIC_WALL_ACTIVE ||
           element == EL_BD_MAGIC_WALL_EMPTYING ||
           element == EL_MAGIC_WALL_FULL ||
           element == EL_BD_MAGIC_WALL_FULL)
@@ -1438,6 +1438,7 @@ void DrawScreenElementExt(int x, int y, int dx, int dy, int element,
     else if (rechts_massiv)
       graphic = GFX_MAUER_L;
   }
+#if 0
   else if ((element == EL_INVISIBLE_STEELWALL ||
            element == EL_INVISIBLE_WALL ||
            element == EL_INVISIBLE_SAND) && game.light_time_left)
@@ -1446,6 +1447,7 @@ void DrawScreenElementExt(int x, int y, int dx, int dy, int element,
               element == EL_INVISIBLE_WALL ? GFX_UNSICHTBAR_ON :
               GFX_SAND_INVISIBLE_ON);
   }
+#endif
 
   if (dx || dy)
     DrawGraphicShifted(x, y, dx, dy, graphic, cut_mode, mask_mode);
@@ -1574,9 +1576,9 @@ void DrawNewScreenElementExt(int x, int y, int dx, int dy, int element,
        graphic += phase2;
     }
   }
-  else if (element == EL_MAGIC_WALL_EMPTY ||
+  else if (element == EL_MAGIC_WALL_ACTIVE ||
           element == EL_MAGIC_WALL_EMPTYING ||
-          element == EL_BD_MAGIC_WALL_EMPTY ||
+          element == EL_BD_MAGIC_WALL_ACTIVE ||
           element == EL_BD_MAGIC_WALL_EMPTYING ||
           element == EL_MAGIC_WALL_FULL ||
           element == EL_BD_MAGIC_WALL_FULL)
@@ -1608,6 +1610,7 @@ void DrawNewScreenElementExt(int x, int y, int dx, int dy, int element,
     else if (rechts_massiv)
       graphic = GFX_MAUER_L;
   }
+#if 0
   else if ((element == EL_INVISIBLE_STEELWALL ||
            element == EL_INVISIBLE_WALL ||
            element == EL_INVISIBLE_SAND) && game.light_time_left)
@@ -1616,6 +1619,7 @@ void DrawNewScreenElementExt(int x, int y, int dx, int dy, int element,
               element == EL_INVISIBLE_WALL ? GFX_UNSICHTBAR_ON :
               GFX_SAND_INVISIBLE_ON);
   }
+#endif
 
   if (dx || dy)
     DrawNewGraphicShifted(x, y, dx, dy, graphic, frame, cut_mode, mask_mode);
@@ -3003,9 +3007,9 @@ int get_next_element(int element)
     case EL_QUICKSAND_FILLING:         return EL_QUICKSAND_FULL;
     case EL_QUICKSAND_EMPTYING:                return EL_QUICKSAND_EMPTY;
     case EL_MAGIC_WALL_FILLING:                return EL_MAGIC_WALL_FULL;
-    case EL_MAGIC_WALL_EMPTYING:       return EL_MAGIC_WALL_EMPTY;
+    case EL_MAGIC_WALL_EMPTYING:       return EL_MAGIC_WALL_ACTIVE;
     case EL_BD_MAGIC_WALL_FILLING:     return EL_BD_MAGIC_WALL_FULL;
-    case EL_BD_MAGIC_WALL_EMPTYING:    return EL_BD_MAGIC_WALL_EMPTY;
+    case EL_BD_MAGIC_WALL_EMPTYING:    return EL_BD_MAGIC_WALL_ACTIVE;
     case EL_AMOEBA_DRIPPING:           return EL_AMOEBA_WET;
 
     default:                           return element;
@@ -3026,7 +3030,6 @@ int el2gfx_OLD(int element)
     case EL_EXIT_OPENING:              return GFX_AUSGANG_ACT;
     case EL_EXIT_OPEN:                 return GFX_AUSGANG_AUF;
     case EL_SP_EXIT_OPEN:              return GFX_SP_EXIT;
-    case EL_PLAYER:                    return GFX_SPIELFIGUR;
     case EL_PLAYER1:                   return GFX_SPIELER1;
     case EL_PLAYER2:                   return GFX_SPIELER2;
     case EL_PLAYER3:                   return GFX_SPIELER3;
@@ -3061,7 +3064,7 @@ int el2gfx_OLD(int element)
     case EL_AMOEBA_DROP:               return GFX_TROPFEN;
     case EL_BOMB:                      return GFX_BOMBE;
     case EL_MAGIC_WALL:                        return GFX_MAGIC_WALL_OFF;
-    case EL_MAGIC_WALL_EMPTY:          return GFX_MAGIC_WALL_EMPTY;
+    case EL_MAGIC_WALL_ACTIVE:         return GFX_MAGIC_WALL_EMPTY;
     case EL_MAGIC_WALL_EMPTYING:       return GFX_MAGIC_WALL_EMPTY;
     case EL_MAGIC_WALL_FULL:           return GFX_MAGIC_WALL_FULL;
     case EL_MAGIC_WALL_DEAD:           return GFX_MAGIC_WALL_DEAD;
@@ -3104,6 +3107,7 @@ int el2gfx_OLD(int element)
     case EL_PACMAN_LEFT:               return GFX_PACMAN_LEFT;
     case EL_PACMAN_DOWN:               return GFX_PACMAN_DOWN;
     case EL_INVISIBLE_WALL:            return GFX_UNSICHTBAR;
+    case EL_INVISIBLE_WALL_ACTIVE:     return GFX_UNSICHTBAR_ON;
     case EL_WALL_EMERALD:              return GFX_ERZ_EDEL;
     case EL_WALL_DIAMOND:              return GFX_ERZ_DIAM;
     case EL_LAMP:                      return GFX_BIRNE_AUS;
@@ -3124,14 +3128,14 @@ int el2gfx_OLD(int element)
     case EL_WALL_EMERALD_PURPLE:       return GFX_ERZ_EDEL_LILA;
     case EL_DARK_YAMYAM:               return GFX_MAMPFER2;
     case EL_BD_MAGIC_WALL:             return GFX_MAGIC_WALL_BD_OFF;
-    case EL_BD_MAGIC_WALL_EMPTY:       return GFX_MAGIC_WALL_BD_EMPTY;
+    case EL_BD_MAGIC_WALL_ACTIVE:      return GFX_MAGIC_WALL_BD_EMPTY;
     case EL_BD_MAGIC_WALL_EMPTYING:    return GFX_MAGIC_WALL_BD_EMPTY;
     case EL_BD_MAGIC_WALL_FULL:                return GFX_MAGIC_WALL_BD_FULL;
     case EL_BD_MAGIC_WALL_DEAD:                return GFX_MAGIC_WALL_BD_DEAD;
-    case EL_DYNABOMB_ACTIVE_1:         return GFX_DYNABOMB;
-    case EL_DYNABOMB_ACTIVE_2:         return GFX_DYNABOMB;
-    case EL_DYNABOMB_ACTIVE_3:         return GFX_DYNABOMB;
-    case EL_DYNABOMB_ACTIVE_4:         return GFX_DYNABOMB;
+    case EL_DYNABOMB_PLAYER1_ACTIVE:   return GFX_DYNABOMB;
+    case EL_DYNABOMB_PLAYER2_ACTIVE:   return GFX_DYNABOMB;
+    case EL_DYNABOMB_PLAYER3_ACTIVE:   return GFX_DYNABOMB;
+    case EL_DYNABOMB_PLAYER4_ACTIVE:   return GFX_DYNABOMB;
     case EL_DYNABOMB_NR:               return GFX_DYNABOMB_NR;
     case EL_DYNABOMB_SZ:               return GFX_DYNABOMB_SZ;
     case EL_DYNABOMB_XL:               return GFX_DYNABOMB_XL;
@@ -3153,6 +3157,7 @@ int el2gfx_OLD(int element)
     case EL_SP_ZONK:                   return GFX_SP_ZONK;
       /* ^^^^^^^^^^ non-standard position in supaplex graphic set! */
     case EL_INVISIBLE_STEELWALL:       return GFX_INVISIBLE_STEEL;
+    case EL_INVISIBLE_STEELWALL_ACTIVE:        return GFX_INVISIBLE_STEEL_ON;
     case EL_BLACK_ORB:                 return GFX_BLACK_ORB;
     case EL_EM_GATE1:                  return GFX_EM_GATE_1;
     case EL_EM_GATE2:                  return GFX_EM_GATE_2;
@@ -3187,24 +3192,36 @@ int el2gfx_OLD(int element)
     case EL_CONVEYOR_BELT1_LEFT:       return GFX_BELT1_LEFT;
     case EL_CONVEYOR_BELT1_MIDDLE:     return GFX_BELT1_MIDDLE;
     case EL_CONVEYOR_BELT1_RIGHT:      return GFX_BELT1_RIGHT;
+    case EL_CONVEYOR_BELT1_LEFT_ACTIVE:        return GFX_BELT1_LEFT;
+    case EL_CONVEYOR_BELT1_MIDDLE_ACTIVE:return GFX_BELT1_MIDDLE;
+    case EL_CONVEYOR_BELT1_RIGHT_ACTIVE:return GFX_BELT1_RIGHT;
     case EL_CONVEYOR_BELT1_SWITCH_LEFT:        return GFX_BELT1_SWITCH_LEFT;
     case EL_CONVEYOR_BELT1_SWITCH_MIDDLE:return GFX_BELT1_SWITCH_MIDDLE;
     case EL_CONVEYOR_BELT1_SWITCH_RIGHT:return GFX_BELT1_SWITCH_RIGHT;
     case EL_CONVEYOR_BELT2_LEFT:       return GFX_BELT2_LEFT;
     case EL_CONVEYOR_BELT2_MIDDLE:     return GFX_BELT2_MIDDLE;
     case EL_CONVEYOR_BELT2_RIGHT:      return GFX_BELT2_RIGHT;
+    case EL_CONVEYOR_BELT2_LEFT_ACTIVE:        return GFX_BELT2_LEFT;
+    case EL_CONVEYOR_BELT2_MIDDLE_ACTIVE:return GFX_BELT2_MIDDLE;
+    case EL_CONVEYOR_BELT2_RIGHT_ACTIVE:return GFX_BELT2_RIGHT;
     case EL_CONVEYOR_BELT2_SWITCH_LEFT:        return GFX_BELT2_SWITCH_LEFT;
     case EL_CONVEYOR_BELT2_SWITCH_MIDDLE:return GFX_BELT2_SWITCH_MIDDLE;
     case EL_CONVEYOR_BELT2_SWITCH_RIGHT:return GFX_BELT2_SWITCH_RIGHT;
     case EL_CONVEYOR_BELT3_LEFT:       return GFX_BELT3_LEFT;
     case EL_CONVEYOR_BELT3_MIDDLE:     return GFX_BELT3_MIDDLE;
     case EL_CONVEYOR_BELT3_RIGHT:      return GFX_BELT3_RIGHT;
+    case EL_CONVEYOR_BELT3_LEFT_ACTIVE:        return GFX_BELT3_LEFT;
+    case EL_CONVEYOR_BELT3_MIDDLE_ACTIVE:return GFX_BELT3_MIDDLE;
+    case EL_CONVEYOR_BELT3_RIGHT_ACTIVE:return GFX_BELT3_RIGHT;
     case EL_CONVEYOR_BELT3_SWITCH_LEFT:        return GFX_BELT3_SWITCH_LEFT;
     case EL_CONVEYOR_BELT3_SWITCH_MIDDLE:return GFX_BELT3_SWITCH_MIDDLE;
     case EL_CONVEYOR_BELT3_SWITCH_RIGHT:return GFX_BELT3_SWITCH_RIGHT;
     case EL_CONVEYOR_BELT4_LEFT:       return GFX_BELT4_LEFT;
     case EL_CONVEYOR_BELT4_MIDDLE:     return GFX_BELT4_MIDDLE;
     case EL_CONVEYOR_BELT4_RIGHT:      return GFX_BELT4_RIGHT;
+    case EL_CONVEYOR_BELT4_LEFT_ACTIVE:        return GFX_BELT4_LEFT;
+    case EL_CONVEYOR_BELT4_MIDDLE_ACTIVE:return GFX_BELT4_MIDDLE;
+    case EL_CONVEYOR_BELT4_RIGHT_ACTIVE:return GFX_BELT4_RIGHT;
     case EL_CONVEYOR_BELT4_SWITCH_LEFT:        return GFX_BELT4_SWITCH_LEFT;
     case EL_CONVEYOR_BELT4_SWITCH_MIDDLE:return GFX_BELT4_SWITCH_MIDDLE;
     case EL_CONVEYOR_BELT4_SWITCH_RIGHT:return GFX_BELT4_SWITCH_RIGHT;
@@ -3230,6 +3247,7 @@ int el2gfx_OLD(int element)
     case EL_MOLE_DOWN:                 return GFX_MOLE_DOWN;
     case EL_STEELWALL_SLANTED:         return GFX_STEEL_SLANTED;
     case EL_INVISIBLE_SAND:            return GFX_SAND_INVISIBLE;
+    case EL_INVISIBLE_SAND_ACTIVE:     return GFX_SAND_INVISIBLE_ON;
     case EL_DX_UNKNOWN_15:             return GFX_DX_UNKNOWN_15;
     case EL_DX_UNKNOWN_42:             return GFX_DX_UNKNOWN_42;
     case EL_TIMEGATE_OPEN:             return GFX_TIMEGATE_OPEN;
@@ -3296,6 +3314,12 @@ int el2gfx_OLD(int element)
 
 int el2gfx(int element)
 {
+#if 1
+  int graphic_OLD = el2gfx_OLD(element);
+
+  return graphic_OLD;
+#else
+
   int graphic_NEW = element_info[element].graphic[GFX_ACTION_DEFAULT];
 
 #if DEBUG
@@ -3314,10 +3338,17 @@ int el2gfx(int element)
 #endif
 
   return graphic_NEW;
+#endif
 }
 
 int el2img(int element)
 {
+#if 1
+  int graphic_NEW = element_info[element].graphic[GFX_ACTION_DEFAULT];
+
+  return graphic_NEW;
+#else
+
   switch(element)
   {
     case EL_BD_BUTTERFLY:      return IMG_BD_BUTTERFLY;
@@ -3329,16 +3360,31 @@ int el2img(int element)
   }
 
   return IMG_EMPTY_SPACE;
+#endif
 }
 
 int el_dir2img(int element, int direction)
 {
-  if (element_info[element].has_direction_graphic[GFX_ACTION_DEFAULT])
+  int action = GFX_ACTION_DEFAULT;
+
+  if (element_info[element].has_direction_graphic[action])
   {
-    int i = LOG_MV_DIR(direction);
+    direction = MV_DIR_BIT(direction);
 
-    return element_info[element].direction_graphic[GFX_ACTION_DEFAULT][i];
+    return element_info[element].direction_graphic[action][direction];
   }
   else
     return el2img(element);
 }
+
+int el_dir_act2img(int element, int direction, int action)
+{
+  if (element_info[element].has_direction_graphic[action])
+  {
+    direction = MV_DIR_BIT(direction);
+
+    return element_info[element].direction_graphic[action][direction];
+  }
+  else
+    return el_dir2img(element, direction);
+}