rnd-20030113-1-src
[rocksndiamonds.git] / src / main.h
index 7f4252d7dd284efd1acc4443b356c546c1fa5f08..93100c54dccdb800c35aee7ae161a5c4b653fe62 100644 (file)
 
 #include "libgame/libgame.h"
 
+#include "conf_gfx.h"
+#include "conf_snd.h"
+
+#define IMG_UNDEFINED          (-1)
+#define IMG_EMPTY              IMG_EMPTY_SPACE
+#define IMG_SP_EMPTY           IMG_SP_EMPTY_SPACE
+#define IMG_CHAR_START         IMG_CHAR_SPACE
+#define IMG_CUSTOM_START       IMG_CUSTOM_1
+
 #define WIN_XSIZE      672
 #define WIN_YSIZE      560
 
@@ -49,7 +58,7 @@
 #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' */
+/* values for 'Properties1' */
 #define EP_BIT_AMOEBALIVE      (1 << 0)
 #define EP_BIT_AMOEBOID                (1 << 1)
 #define EP_BIT_SCHLUESSEL      (1 << 2)
 #define EP_BIT_OVER_PLAYER     (1 << 30)
 #define EP_BIT_ACTIVE_BOMB     (1 << 31)
 
-/* values for 'Elementeigenschaften2' */
+/* values for 'Properties2' */
 #define EP_BIT_BELT            (1 << 0)
-#define EP_BIT_BELT_SWITCH     (1 << 1)
-#define EP_BIT_TUBE            (1 << 2)
-#define EP_BIT_EM_SLIPPERY_WALL        (1 << 3)
-
-#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_TUBE(e)             (Elementeigenschaften2[e] & EP_BIT_TUBE)
-#define IS_EM_SLIPPERY_WALL(e) (Elementeigenschaften2[e] & EP_BIT_EM_SLIPPERY_WALL)
+#define EP_BIT_BELT_ACTIVE     (1 << 1)
+#define EP_BIT_BELT_SWITCH     (1 << 2)
+#define EP_BIT_TUBE            (1 << 3)
+#define EP_BIT_EM_SLIPPERY_WALL        (1 << 4)
+
+#define IS_AMOEBALIVE(e)       (Properties1[e] & EP_BIT_AMOEBALIVE)
+#define IS_AMOEBOID(e)         (Properties1[e] & EP_BIT_AMOEBOID)
+#define IS_SCHLUESSEL(e)       (Properties1[e] & EP_BIT_SCHLUESSEL)
+#define IS_PFORTE(e)           (Properties1[e] & EP_BIT_PFORTE)
+#define IS_SOLID(e)            (Properties1[e] & EP_BIT_SOLID)
+#define IS_MASSIVE(e)          (Properties1[e] & EP_BIT_MASSIVE)
+#define IS_SLIPPERY(e)         (Properties1[e] & EP_BIT_SLIPPERY)
+#define IS_ENEMY(e)            (Properties1[e] & EP_BIT_ENEMY)
+#define IS_MAUER(e)            (Properties1[e] & EP_BIT_MAUER)
+#define CAN_FALL(e)            (Properties1[e] & EP_BIT_CAN_FALL)
+#define CAN_SMASH(e)           (Properties1[e] & EP_BIT_CAN_SMASH)
+#define CAN_CHANGE(e)          (Properties1[e] & EP_BIT_CAN_CHANGE)
+#define CAN_MOVE(e)            (Properties1[e] & EP_BIT_CAN_MOVE)
+#define COULD_MOVE(e)          (Properties1[e] & EP_BIT_COULD_MOVE)
+#define DONT_TOUCH(e)          (Properties1[e] & EP_BIT_DONT_TOUCH)
+#define DONT_GO_TO(e)          (Properties1[e] & EP_BIT_DONT_GO_TO)
+#define IS_MAMPF2(e)           (Properties1[e] & EP_BIT_MAMPF2)
+#define IS_CHAR(e)             (Properties1[e] & EP_BIT_CHAR)
+#define IS_BD_ELEMENT(e)       (Properties1[e] & EP_BIT_BD_ELEMENT)
+#define IS_SB_ELEMENT(e)       (Properties1[e] & EP_BIT_SB_ELEMENT)
+#define IS_GEM(e)              (Properties1[e] & EP_BIT_GEM)
+#define IS_INACTIVE(e)         (Properties1[e] & EP_BIT_INACTIVE)
+#define IS_EXPLOSIVE(e)                (Properties1[e] & EP_BIT_EXPLOSIVE)
+#define IS_MAMPF3(e)           (Properties1[e] & EP_BIT_MAMPF3)
+#define IS_PUSHABLE(e)         (Properties1[e] & EP_BIT_PUSHABLE)
+#define ELEM_IS_PLAYER(e)      (Properties1[e] & EP_BIT_PLAYER)
+#define HAS_CONTENT(e)         (Properties1[e] & EP_BIT_HAS_CONTENT)
+#define IS_EATABLE(e)          (Properties1[e] & EP_BIT_EATABLE)
+#define IS_SP_ELEMENT(e)       (Properties1[e] & EP_BIT_SP_ELEMENT)
+#define IS_QUICK_GATE(e)       (Properties1[e] & EP_BIT_QUICK_GATE)
+#define IS_OVER_PLAYER(e)      (Properties1[e] & EP_BIT_OVER_PLAYER)
+#define IS_ACTIVE_BOMB(e)      (Properties1[e] & EP_BIT_ACTIVE_BOMB)
+
+#define IS_BELT(e)             (Properties2[e] & EP_BIT_BELT)
+#define IS_BELT_ACTIVE(e)      (Properties2[e] & EP_BIT_BELT_ACTIVE)
+#define IS_BELT_SWITCH(e)      (Properties2[e] & EP_BIT_BELT_SWITCH)
+#define IS_TUBE(e)             (Properties2[e] & EP_BIT_TUBE)
+#define IS_EM_SLIPPERY_WALL(e) (Properties2[e] & EP_BIT_EM_SLIPPERY_WALL)
 
 #define IS_PLAYER(x,y)         (ELEM_IS_PLAYER(StorePlayer[x][y]))
 
-#define IS_FREE(x,y)           (Feld[x][y] == EL_LEERRAUM && !IS_PLAYER(x,y))
-#define IS_FREE_OR_PLAYER(x,y) (Feld[x][y] == EL_LEERRAUM)
+#define IS_FREE(x,y)           (Feld[x][y] == EL_EMPTY && !IS_PLAYER(x,y))
+#define IS_FREE_OR_PLAYER(x,y) (Feld[x][y] == EL_EMPTY)
 
 #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 :  \
-                                (e) == EL_BD_ROCK        ? EL_EDELSTEIN_BD : \
-                                (e) == EL_EDELSTEIN      ? EL_DIAMANT :    \
-                                (e) == EL_EDELSTEIN_GELB ? EL_DIAMANT :    \
-                                (e) == EL_EDELSTEIN_ROT  ? EL_DIAMANT :    \
-                                (e) == EL_EDELSTEIN_LILA ? EL_DIAMANT :    \
-                                EL_FELSBROCKEN)
-#define EL_CHANGED2(e)         ((e) == EL_FELSBROCKEN ? EL_EDELSTEIN_BD :  \
-                                (e) == EL_BD_ROCK     ? EL_EDELSTEIN_BD : \
+#define EL_CHANGED(e)          ((e) == EL_ROCK           ? EL_EMERALD :    \
+                                (e) == EL_BD_ROCK        ? EL_BD_DIAMOND : \
+                                (e) == EL_EMERALD        ? EL_DIAMOND :    \
+                                (e) == EL_EMERALD_YELLOW ? EL_DIAMOND :    \
+                                (e) == EL_EMERALD_RED    ? EL_DIAMOND :    \
+                                (e) == EL_EMERALD_PURPLE ? EL_DIAMOND :    \
+                                EL_ROCK)
+#define EL_CHANGED2(e)         ((e) == EL_ROCK           ? EL_BD_DIAMOND : \
+                                (e) == EL_BD_ROCK        ? EL_BD_DIAMOND : \
                                 EL_BD_ROCK)
 #define IS_DRAWABLE(e)         ((e) < EL_BLOCKED)
 #define IS_NOT_DRAWABLE(e)     ((e) >= EL_BLOCKED)
 #define TAPE_IS_EMPTY(x)       ((x).length == 0)
 #define TAPE_IS_STOPPED(x)     (!(x).recording && !(x).playing)
 
-#define PLAYERINFO(x,y)                (&stored_player[StorePlayer[x][y]-EL_SPIELER1])
-#define SHIELD_ON(p)           ((p)->shield_passive_time_left > 0)
+#define PLAYERINFO(x,y)                (&stored_player[StorePlayer[x][y]-EL_PLAYER1])
+#define SHIELD_ON(p)           ((p)->shield_normal_time_left > 0)
 #define PROTECTED_FIELD(x,y)   (IS_TUBE(Feld[x][y]))
 #define PLAYER_PROTECTED(x,y)  (SHIELD_ON(PLAYERINFO(x, y)) ||         \
                                 PROTECTED_FIELD(x, y))
 
+#define PLAYER_NR_GFX(g,i)     ((g) + i * (IMG_PLAYER2 - IMG_PLAYER1))
+
+
+#if 0
+
+/* Bitmaps with graphic file */
+#define PIX_BACK               0
+#define PIX_DOOR               1
+#define PIX_TOONS              2
+#define PIX_FONT_BIG           3
+#define PIX_FONT_SMALL         4
+#define PIX_FONT_MEDIUM                5
+#define PIX_FONT_EM            6
+/* Bitmaps without graphic file */
+#define PIX_DB_DOOR            7
+#define PIX_DB_FIELD           8
+
+#define NUM_PICTURES           7
+#define NUM_BITMAPS            9
+
+#else
+
 /* Bitmaps with graphic file */
 #define PIX_BACK               0
 #define PIX_ELEMENTS           1
 #define PIX_SP                 5
 #define PIX_DC                 6
 #define PIX_MORE               7
-#define        PIX_FONT_BIG            8
+#define PIX_FONT_BIG           8
 #define PIX_FONT_SMALL         9
 #define PIX_FONT_MEDIUM                10
 #define PIX_FONT_EM            11
 #define NUM_PICTURES           12
 #define NUM_BITMAPS            14
 
+#endif
+
 /* boundaries of arrays etc. */
 #define MAX_LEVEL_NAME_LEN     32
 #define MAX_LEVEL_AUTHOR_LEN   32
 #define MAX_TAPELEN            (1000 * 50)     /* max. time * framerate */
 #define MAX_SCORE_ENTRIES      100
+#if 0
 #define MAX_ELEMENTS           700             /* 500 static + 200 runtime */
 #define MAX_GRAPHICS           1536            /* see below: NUM_TILES */
+#endif
 #define MAX_NUM_AMOEBA         100
 
 /* values for elements with content */
 #define MICROLEVEL_SCROLL_DELAY        50      /* delay for scrolling micro level */
 #define MICROLEVEL_LABEL_DELAY 250     /* delay for micro level label */
 
-struct HiScore
-{
-  char Name[MAX_PLAYER_NAME_LEN + 1];
-  int Score;
-};
-
-struct PlayerInfo
-{
-  boolean present;             /* player present in level playfield */
-  boolean connected;           /* player connected (locally or via network) */
-  boolean active;              /* player (present && connected) */
-
-  int index_nr, client_nr, element_nr;
-
-  byte action;                 /* action from local input device */
-  byte effective_action;       /* action acknowledged from network server
-                                  or summarized over all configured input
-                                  devices when in single player mode */
-  byte programmed_action;      /* action forced by game itself (like moving
-                                  through doors); overrides other actions */
-
-  int jx,jy, last_jx,last_jy;
-  int MovDir, MovPos, GfxPos;
-  int Frame;
-
-  boolean Pushing;
-  boolean Switching;
-  boolean LevelSolved, GameOver;
-  boolean snapped;
-
-  int last_move_dir;
-  int is_moving;
-
-  unsigned long move_delay;
-  int move_delay_value;
-
-  unsigned long push_delay;
-  unsigned long push_delay_value;
-
-  int frame_reset_delay;
-
-  unsigned long actual_frame_counter;
-
-  int score;
-  int gems_still_needed;
-  int sokobanfields_still_needed;
-  int lights_still_needed;
-  int friends_still_needed;
-  int key[4];
-  int dynamite;
-  int dynabomb_count, dynabomb_size, dynabombs_left, dynabomb_xl;
-  int shield_passive_time_left;
-  int shield_active_time_left;
-};
-
-struct LevelInfo
-{
-  int file_version;    /* file format version the level is stored with    */
-  int game_version;    /* game release version the level was created with */
-
-  boolean encoding_16bit_field;                /* level contains 16-bit elements  */
-  boolean encoding_16bit_yamyam;       /* yamyam contains 16-bit elements */
-  boolean encoding_16bit_amoeba;       /* amoeba contains 16-bit elements */
-
-  int fieldx;
-  int fieldy;
-  int time;
-  int gems_needed;
-  char name[MAX_LEVEL_NAME_LEN + 1];
-  char author[MAX_LEVEL_AUTHOR_LEN + 1];
-  int score[LEVEL_SCORE_ELEMENTS];
-  int yam_content[MAX_ELEMENT_CONTENTS][3][3];
-  int num_yam_contents;
-  int amoeba_speed;
-  int amoeba_content;
-  int time_magic_wall;
-  int time_wheel;
-  int time_light;
-  int time_timegate;
-  boolean double_speed;
-  boolean gravity;
-  boolean em_slippery_gems;    /* EM style "gems slip from wall" behaviour */
-};
-
-struct TapeInfo
-{
-  int file_version;    /* file format version the tape is stored with    */
-  int game_version;    /* game release version the tape was created with */
-  int engine_version;  /* game engine version the tape was recorded with */
-
-  int level_nr;
-  unsigned long random_seed;
-  unsigned long date;
-  unsigned long counter;
-  unsigned long length;
-  unsigned long length_seconds;
-  unsigned int delay_played;
-  boolean pause_before_death;
-  boolean recording, playing, pausing;
-  boolean fast_forward;
-  boolean index_search;
-  boolean quick_resume;
-  boolean single_step;
-  boolean changed;
-  boolean player_participates[MAX_PLAYERS];
-  int num_participating_players;
-
-  struct
-  {
-    byte action[MAX_PLAYERS];
-    byte delay;
-  } pos[MAX_TAPELEN];
-};
-
-struct GameInfo
-{
-  /* constant within running game */
-  int engine_version;
-  int emulation;
-  int initial_move_delay;
-  int initial_move_delay_value;
-
-  /* variable within running game */
-  int yam_content_nr;
-  boolean magic_wall_active;
-  int magic_wall_time_left;
-  int light_time_left;
-  int timegate_time_left;
-  int belt_dir[4];
-  int belt_dir_nr[4];
-  int switchgate_pos;
-  int balloon_dir;
-  boolean explosions_delayed;
-};
-
-struct GlobalInfo
-{
-  float frames_per_second;
-  boolean fps_slowdown;
-  int fps_slowdown_factor;
-};
-
-struct ElementInfo
-{
-  char *sound_class_name;      /* classification for custom sound effects */
-  char *editor_description;    /* short description for level editor */
-
-  int graphic[NUM_GFX_ACTIONS_MAPPED];
-
-                               /* special graphics for left/right/up/down */
-  int direction_graphic[NUM_GFX_ACTIONS_MAPPED][4];
-  boolean has_direction_graphic[NUM_GFX_ACTIONS_MAPPED];
-};
-
-struct GraphicInfo
-{
-  Bitmap *bitmap;
-  int src_x, src_y;
-};
-
-struct NewGraphicInfo
-{
-  Bitmap *bitmap;
-  int src_x, src_y;
-  int anim_frames;
-  int anim_delay;
-  int anim_mode;
-  boolean anim_global_sync;
-  boolean anim_vertical;
-};
-
-extern GC              tile_clip_gc;
-extern Bitmap         *pix[];
-extern Pixmap          tile_clipmask[];
-extern DrawBuffer      *fieldbuffer;
-extern DrawBuffer      *drawto_field;
-
-extern int             game_status;
-extern boolean         level_editor_test_game;
-extern boolean         network_playing;
-
-extern int             key_joystick_mapping;
-
-extern boolean         redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE];
-extern int             redraw_x1, redraw_y1;
-
-extern short           Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
-extern short           Ur[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
-extern short           MovPos[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
-extern short           MovDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
-extern short           MovDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
-extern short           Store[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
-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           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           ExplodeField[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
-extern unsigned long   Elementeigenschaften1[MAX_ELEMENTS];
-extern unsigned long   Elementeigenschaften2[MAX_ELEMENTS];
-
-extern int             lev_fieldx,lev_fieldy, scroll_x,scroll_y;
-
-extern int             FX,FY, ScrollStepSize;
-extern int             ScreenMovDir, ScreenMovPos, ScreenGfxPos;
-extern int             BorderElement;
-extern int             GameFrameDelay;
-extern int             FfwdFrameDelay;
-extern int             BX1,BY1, BX2,BY2;
-extern int             SBX_Left, SBX_Right;
-extern int             SBY_Upper, SBY_Lower;
-extern int             ZX,ZY, ExitX,ExitY;
-extern int             AllPlayersGone;
-
-extern int             TimeFrames, TimePlayed, TimeLeft;
-extern boolean         SiebAktiv;
-extern int             SiebCount;
-
-extern boolean         network_player_action_received;
-
-extern struct LevelInfo                level;
-extern struct PlayerInfo       stored_player[], *local_player;
-extern struct HiScore          highscore[];
-extern struct TapeInfo         tape;
-extern struct GameInfo         game;
-extern struct GlobalInfo       global;
-extern struct ElementInfo      element_info[];
-extern struct GraphicInfo      graphic_info[];
-extern struct NewGraphicInfo   new_graphic_info[];
-extern struct ConfigInfo       image_config[], sound_config[];
-extern struct ConfigInfo       image_config_suffix[], sound_config_suffix[];
-extern struct FileInfo        *image_files, *sound_files;
-
 /* often used screen positions */
 #define SX                     8
 #define SY                     8
@@ -462,7 +265,7 @@ extern struct FileInfo             *image_files, *sound_files;
 #define VXSIZE                 DXSIZE
 #define VYSIZE                 100
 #define EXSIZE                 DXSIZE
-#define EYSIZE                 (VXSIZE + 44)
+#define EYSIZE                 (VYSIZE + 44)
 #define FULL_SXSIZE            (2 + SXSIZE + 2)
 #define FULL_SYSIZE            (2 + SYSIZE + 2)
 #define MICROLEV_XSIZE         ((STD_LEV_FIELDX + 2) * MICRO_TILEX)
@@ -480,9 +283,9 @@ extern struct FileInfo             *image_files, *sound_files;
 #define MICRO_GFX_PER_LINE     16
 
 #define MINI_FONT_STARTX       0
-#define MINI_FONT_STARTY       128
-#define MICRO_FONT_STARTX      408
-#define MICRO_FONT_STARTY      128
+#define MINI_FONT_STARTY       160
+#define MICRO_FONT_STARTX      384
+#define MICRO_FONT_STARTY      160
 
 #define HEROES_PER_LINE                16
 
@@ -511,405 +314,490 @@ extern struct FileInfo         *image_files, *sound_files;
 #define MICRO_MORE_PER_LINE    16
 
 /* game elements:
-**       0 - 499: real elements, stored in level file
-**      500 - 699: flag elements, only used at runtime
+**       0 <= element < xxx: real elements, stored in level file
+**      xxx <= element < yyy: flag elements, only used at runtime
 */
-/* "real" level elements */
-#define EL_LEERRAUM            0
-#define        EL_ERDREICH             1
-#define        EL_MAUERWERK            2
-#define        EL_FELSBODEN            3
-#define        EL_FELSBROCKEN          4
-#define        EL_SCHLUESSEL           5
-#define        EL_EDELSTEIN            6
-#define        EL_AUSGANG_ZU           7
-#define        EL_SPIELFIGUR           8
-#define EL_KAEFER              9
-#define EL_FLIEGER             10
-#define EL_MAMPFER             11
-#define EL_ROBOT               12
-#define EL_BETON               13
-#define EL_DIAMANT             14
-#define EL_AMOEBE_TOT          15
-#define EL_MORAST_LEER         16
-#define EL_MORAST_VOLL         17
-#define EL_TROPFEN             18
-#define EL_BOMBE               19
-#define EL_MAGIC_WALL_OFF      20
-#define EL_SPEED_PILL          21
-#define EL_SALZSAEURE          22
-#define EL_AMOEBE_NASS         23
-#define EL_AMOEBE_NORM         24
-#define EL_KOKOSNUSS           25
-#define EL_LIFE                        26
-#define EL_LIFE_ASYNC          27
-#define EL_DYNAMITE_ACTIVE     28
-#define EL_BADEWANNE           29
-#define EL_ABLENK_AUS          30
-#define EL_ABLENK_EIN          31
-#define EL_SCHLUESSEL1         32
-#define EL_SCHLUESSEL2         33
-#define EL_SCHLUESSEL3         34
-#define EL_SCHLUESSEL4         35
-#define EL_PFORTE1             36
-#define EL_PFORTE2             37
-#define EL_PFORTE3             38
-#define EL_PFORTE4             39
-#define EL_PFORTE1X            40
-#define EL_PFORTE2X            41
-#define EL_PFORTE3X            42
-#define EL_PFORTE4X            43
-#define EL_DYNAMITE_INACTIVE   44
-#define EL_PACMAN              45
-#define EL_UNSICHTBAR          46
-#define EL_BIRNE_AUS           47
-#define EL_BIRNE_EIN           48
-#define EL_ERZ_EDEL            49
-#define EL_ERZ_DIAM            50
-#define EL_AMOEBE_VOLL         51
-#define EL_AMOEBE_BD           52
-#define EL_ZEIT_VOLL           53
-#define EL_ZEIT_LEER           54
-#define EL_MAUER_LEBT          55
-#define EL_EDELSTEIN_BD                56
-#define EL_EDELSTEIN_GELB      57
-#define EL_ERZ_EDEL_BD         58
-#define EL_ERZ_EDEL_GELB       59
-#define EL_MAMPFER2            60
-#define EL_MAGIC_WALL_BD_OFF   61
-#define EL_INVISIBLE_STEEL     62
-
-#define EL_UNUSED_63           63
-
-#define EL_DYNABOMB_NR         64
-#define EL_DYNABOMB_SZ         65
-#define EL_DYNABOMB_XL         66
-#define EL_SOKOBAN_OBJEKT      67
-#define EL_SOKOBAN_FELD_LEER   68
-#define EL_SOKOBAN_FELD_VOLL   69
-#define EL_BUTTERFLY_RIGHT     70
-#define EL_BUTTERFLY_UP                71
-#define EL_BUTTERFLY_LEFT      72
-#define EL_BUTTERFLY_DOWN      73
-#define EL_FIREFLY_RIGHT       74
-#define EL_FIREFLY_UP          75
-#define EL_FIREFLY_LEFT                76
-#define EL_FIREFLY_DOWN                77
-#define EL_BUTTERFLY_1         EL_BUTTERFLY_DOWN
-#define EL_BUTTERFLY_2         EL_BUTTERFLY_LEFT
-#define EL_BUTTERFLY_3         EL_BUTTERFLY_UP
-#define EL_BUTTERFLY_4         EL_BUTTERFLY_RIGHT
-#define EL_FIREFLY_1           EL_FIREFLY_LEFT
-#define EL_FIREFLY_2           EL_FIREFLY_DOWN
-#define EL_FIREFLY_3           EL_FIREFLY_RIGHT
-#define EL_FIREFLY_4           EL_FIREFLY_UP
-#define EL_BUTTERFLY           78
-#define EL_FIREFLY             79
-#define EL_SPIELER1            80
-#define EL_SPIELER2            81
-#define EL_SPIELER3            82
-#define EL_SPIELER4            83
-#define EL_KAEFER_RIGHT                84
-#define EL_KAEFER_UP           85
-#define EL_KAEFER_LEFT         86
-#define EL_KAEFER_DOWN         87
-#define EL_FLIEGER_RIGHT       88
-#define EL_FLIEGER_UP          89
-#define EL_FLIEGER_LEFT                90
-#define EL_FLIEGER_DOWN                91
-#define EL_PACMAN_RIGHT                92
-#define EL_PACMAN_UP           93
-#define EL_PACMAN_LEFT         94
-#define EL_PACMAN_DOWN         95
-#define EL_EDELSTEIN_ROT       96
-#define EL_EDELSTEIN_LILA      97
-#define EL_ERZ_EDEL_ROT                98
-#define EL_ERZ_EDEL_LILA       99
-#define EL_BADEWANNE1          100
-#define EL_BADEWANNE2          101
-#define EL_BADEWANNE3          102
-#define EL_BADEWANNE4          103
-#define EL_BADEWANNE5          104
-#define EL_BD_WALL             105
-#define EL_BD_ROCK             106
-#define EL_AUSGANG_AUF         107
-#define EL_BLACK_ORB           108
-#define EL_AMOEBA2DIAM         109
-#define EL_MOLE                        110
-#define EL_PINGUIN             111
-#define EL_SONDE               112
-#define EL_PFEIL_LEFT          113
-#define EL_PFEIL_RIGHT         114
-#define EL_PFEIL_UP            115
-#define EL_PFEIL_DOWN          116
-#define EL_SCHWEIN             117
-#define EL_DRACHE              118
-
-#define EL_EM_KEY_1_FILE       119
-
-#define EL_CHAR_START          120
-#define EL_CHAR_ASCII0         (EL_CHAR_START-32)
-#define EL_CHAR_AUSRUF         (EL_CHAR_ASCII0+33)
-#define EL_CHAR_ZOLL           (EL_CHAR_ASCII0+34)
-#define EL_CHAR_RAUTE          (EL_CHAR_ASCII0+35)
-#define EL_CHAR_DOLLAR         (EL_CHAR_ASCII0+36)
-#define EL_CHAR_PROZ           (EL_CHAR_ASCII0+37)
-#define EL_CHAR_AMPERSAND      (EL_CHAR_ASCII0+38)
-#define EL_CHAR_APOSTR         (EL_CHAR_ASCII0+39)
-#define EL_CHAR_KLAMM1         (EL_CHAR_ASCII0+40)
-#define EL_CHAR_KLAMM2         (EL_CHAR_ASCII0+41)
-#define EL_CHAR_MULT           (EL_CHAR_ASCII0+42)
-#define EL_CHAR_PLUS           (EL_CHAR_ASCII0+43)
-#define EL_CHAR_KOMMA          (EL_CHAR_ASCII0+44)
-#define EL_CHAR_MINUS          (EL_CHAR_ASCII0+45)
-#define EL_CHAR_PUNKT          (EL_CHAR_ASCII0+46)
-#define EL_CHAR_SLASH          (EL_CHAR_ASCII0+47)
-#define EL_CHAR_0              (EL_CHAR_ASCII0+48)
-#define EL_CHAR_9              (EL_CHAR_ASCII0+57)
-#define EL_CHAR_DOPPEL         (EL_CHAR_ASCII0+58)
-#define EL_CHAR_SEMIKL         (EL_CHAR_ASCII0+59)
-#define EL_CHAR_LT             (EL_CHAR_ASCII0+60)
-#define EL_CHAR_GLEICH         (EL_CHAR_ASCII0+61)
-#define EL_CHAR_GT             (EL_CHAR_ASCII0+62)
-#define EL_CHAR_FRAGE          (EL_CHAR_ASCII0+63)
-#define EL_CHAR_AT             (EL_CHAR_ASCII0+64)
-#define EL_CHAR_A              (EL_CHAR_ASCII0+65)
-#define EL_CHAR_Z              (EL_CHAR_ASCII0+90)
-#define EL_CHAR_AE             (EL_CHAR_ASCII0+91)
-#define EL_CHAR_OE             (EL_CHAR_ASCII0+92)
-#define EL_CHAR_UE             (EL_CHAR_ASCII0+93)
-#define EL_CHAR_COPY           (EL_CHAR_ASCII0+94)
-#define EL_CHAR_END            (EL_CHAR_START+79)
-
-#define EL_CHAR(x)             ((x) == 'Ä' ? EL_CHAR_AE : \
-                                (x) == 'Ö' ? EL_CHAR_OE : \
-                                (x) == 'Ãœ' ? EL_CHAR_UE : \
-                                EL_CHAR_A + (x) - 'A')
-
-#define EL_MAUER_X             200
-#define EL_MAUER_Y             201
-#define EL_MAUER_XY            202
-
-#define EL_EM_GATE_1           203
-#define EL_EM_GATE_2           204
-#define EL_EM_GATE_3           205
-#define EL_EM_GATE_4           206
-
-#define EL_EM_KEY_2_FILE       207
-#define EL_EM_KEY_3_FILE       208
-#define EL_EM_KEY_4_FILE       209
-
-#define EL_SP_START            210
-#define EL_SP_EMPTY            (EL_SP_START + 0)
-#define EL_SP_ZONK             (EL_SP_START + 1)
-#define EL_SP_BASE             (EL_SP_START + 2)
-#define EL_SP_MURPHY           (EL_SP_START + 3)
-#define EL_SP_INFOTRON         (EL_SP_START + 4)
-#define EL_SP_CHIP_SINGLE      (EL_SP_START + 5)
-#define EL_SP_HARD_GRAY                (EL_SP_START + 6)
-#define EL_SP_EXIT             (EL_SP_START + 7)
-#define EL_SP_DISK_ORANGE      (EL_SP_START + 8)
-#define EL_SP_PORT1_RIGHT      (EL_SP_START + 9)
-#define EL_SP_PORT1_DOWN       (EL_SP_START + 10)
-#define EL_SP_PORT1_LEFT       (EL_SP_START + 11)
-#define EL_SP_PORT1_UP         (EL_SP_START + 12)
-#define EL_SP_PORT2_RIGHT      (EL_SP_START + 13)
-#define EL_SP_PORT2_DOWN       (EL_SP_START + 14)
-#define EL_SP_PORT2_LEFT       (EL_SP_START + 15)
-#define EL_SP_PORT2_UP         (EL_SP_START + 16)
-#define EL_SP_SNIKSNAK         (EL_SP_START + 17)
-#define EL_SP_DISK_YELLOW      (EL_SP_START + 18)
-#define EL_SP_TERMINAL         (EL_SP_START + 19)
-#define EL_SP_DISK_RED         (EL_SP_START + 20)
-#define EL_SP_PORT_Y           (EL_SP_START + 21)
-#define EL_SP_PORT_X           (EL_SP_START + 22)
-#define EL_SP_PORT_XY          (EL_SP_START + 23)
-#define EL_SP_ELECTRON         (EL_SP_START + 24)
-#define EL_SP_BUG              (EL_SP_START + 25)
-#define EL_SP_CHIP_LEFT                (EL_SP_START + 26)
-#define EL_SP_CHIP_RIGHT       (EL_SP_START + 27)
-#define EL_SP_HARD_BASE1       (EL_SP_START + 28)
-#define EL_SP_HARD_GREEN       (EL_SP_START + 29)
-#define EL_SP_HARD_BLUE                (EL_SP_START + 30)
-#define EL_SP_HARD_RED         (EL_SP_START + 31)
-#define EL_SP_HARD_YELLOW      (EL_SP_START + 32)
-#define EL_SP_HARD_BASE2       (EL_SP_START + 33)
-#define EL_SP_HARD_BASE3       (EL_SP_START + 34)
-#define EL_SP_HARD_BASE4       (EL_SP_START + 35)
-#define EL_SP_HARD_BASE5       (EL_SP_START + 36)
-#define EL_SP_HARD_BASE6       (EL_SP_START + 37)
-#define EL_SP_CHIP_UPPER       (EL_SP_START + 38)
-#define EL_SP_CHIP_LOWER       (EL_SP_START + 39)
-#define EL_SP_END              (EL_SP_START + 39)
-
-#define EL_EM_GATE_1X          250
-#define EL_EM_GATE_2X          251
-#define EL_EM_GATE_3X          252
-#define EL_EM_GATE_4X          253
-
-#define EL_UNUSED_254          254
-#define EL_UNUSED_255          255
-
-#define EL_PEARL               256
-#define EL_CRYSTAL             257
-#define EL_WALL_PEARL          258
-#define EL_WALL_CRYSTAL                259
-#define EL_DOOR_WHITE          260
-#define EL_DOOR_WHITE_GRAY     261
-#define EL_KEY_WHITE           262
-#define EL_SHIELD_PASSIVE      263
-#define EL_EXTRA_TIME          264
-#define EL_SWITCHGATE_OPEN     265
-#define EL_SWITCHGATE_CLOSED   266
-#define EL_SWITCHGATE_SWITCH_1 267
-#define EL_SWITCHGATE_SWITCH_2 268
-
-#define EL_UNUSED_269          269
-#define EL_UNUSED_270          270
-
-#define EL_BELT1_LEFT          271
-#define EL_BELT1_MIDDLE                272
-#define EL_BELT1_RIGHT         273
-#define EL_BELT1_SWITCH_LEFT   274
-#define EL_BELT1_SWITCH_MIDDLE 275
-#define EL_BELT1_SWITCH_RIGHT  276
-#define EL_BELT2_LEFT          277
-#define EL_BELT2_MIDDLE                278
-#define EL_BELT2_RIGHT         279
-#define EL_BELT2_SWITCH_LEFT   280
-#define EL_BELT2_SWITCH_MIDDLE 281
-#define EL_BELT2_SWITCH_RIGHT  282
-#define EL_BELT3_LEFT          283
-#define EL_BELT3_MIDDLE                284
-#define EL_BELT3_RIGHT         285
-#define EL_BELT3_SWITCH_LEFT   286
-#define EL_BELT3_SWITCH_MIDDLE 287
-#define EL_BELT3_SWITCH_RIGHT  288
-#define EL_BELT4_LEFT          289
-#define EL_BELT4_MIDDLE                290
-#define EL_BELT4_RIGHT         291
-#define EL_BELT4_SWITCH_LEFT   292
-#define EL_BELT4_SWITCH_MIDDLE 293
-#define EL_BELT4_SWITCH_RIGHT  294
-#define EL_LANDMINE            295
-#define EL_ENVELOPE            296
-#define EL_LIGHT_SWITCH_OFF    297
-#define EL_LIGHT_SWITCH_ON     298
-#define EL_SIGN_EXCLAMATION    299
-#define EL_SIGN_RADIOACTIVITY  300
-#define EL_SIGN_STOP           301
-#define EL_SIGN_WHEELCHAIR     302
-#define EL_SIGN_PARKING                303
-#define EL_SIGN_ONEWAY         304
-#define EL_SIGN_HEART          305
-#define EL_SIGN_TRIANGLE       306
-#define EL_SIGN_ROUND          307
-#define EL_SIGN_EXIT           308
-#define EL_SIGN_YINYANG                309
-#define EL_SIGN_OTHER          310
-#define EL_MOLE_LEFT           311
-#define EL_MOLE_RIGHT          312
-#define EL_MOLE_UP             313
-#define EL_MOLE_DOWN           314
-#define EL_STEEL_SLANTED       315
-#define EL_SAND_INVISIBLE      316
-#define EL_DX_UNKNOWN_15       317
-#define EL_DX_UNKNOWN_42       318
-
-#define EL_UNUSED_319          319
-#define EL_UNUSED_320          320
-
-#define EL_SHIELD_ACTIVE       321
-#define EL_TIMEGATE_OPEN       322
-#define EL_TIMEGATE_CLOSED     323
-#define EL_TIMEGATE_SWITCH_ON  324
-#define EL_TIMEGATE_SWITCH_OFF 325
-
-#define EL_BALLOON             326
-#define EL_BALLOON_SEND_LEFT   327
-#define EL_BALLOON_SEND_RIGHT  328
-#define EL_BALLOON_SEND_UP     329
-#define EL_BALLOON_SEND_DOWN   330
-#define EL_BALLOON_SEND_ANY    331
-
-#define EL_EMC_STEEL_WALL_1    332
-#define EL_EMC_STEEL_WALL_2    333
-#define EL_EMC_STEEL_WALL_3    334
-#define EL_EMC_STEEL_WALL_4    335
-#define EL_EMC_WALL_1          336
-#define EL_EMC_WALL_2          337
-#define EL_EMC_WALL_3          338
-#define EL_EMC_WALL_4          339
-#define EL_EMC_WALL_5          340
-#define EL_EMC_WALL_6          341
-#define EL_EMC_WALL_7          342
-#define EL_EMC_WALL_8          343
-
-#define EL_TUBE_CROSS          344
-#define EL_TUBE_VERTICAL       345
-#define EL_TUBE_HORIZONTAL     346
-#define EL_TUBE_VERT_LEFT      347
-#define EL_TUBE_VERT_RIGHT     348
-#define EL_TUBE_HORIZ_UP       349
-#define EL_TUBE_HORIZ_DOWN     350
-#define EL_TUBE_LEFT_UP                351
-#define EL_TUBE_LEFT_DOWN      352
-#define EL_TUBE_RIGHT_UP       353
-#define EL_TUBE_RIGHT_DOWN     354
-#define EL_SPRING              355
-#define EL_TRAP_INACTIVE       356
-#define EL_DX_SUPABOMB         357
-
-#define NUM_LEVEL_ELEMENTS     358
+/* "real" level file elements */
+#define EL_UNDEFINED                   -1
+
+#define EL_EMPTY_SPACE                 0
+#define EL_EMPTY                       EL_EMPTY_SPACE
+#define EL_SAND                                1
+#define EL_WALL                                2
+#define EL_WALL_CRUMBLED               3
+#define EL_ROCK                                4
+#define EL_KEY_OBSOLETE                        5  /* obsolete; mapped to EL_KEY1 */
+#define EL_EMERALD                     6
+#define EL_EXIT_CLOSED                 7
+#define EL_PLAYER_OBSOLETE             8  /* obsolete; mapped to EL_PLAYER1 */
+#define EL_BUG                         9
+#define EL_SPACESHIP                   10
+#define EL_YAMYAM                      11
+#define EL_ROBOT                       12
+#define EL_STEELWALL                   13
+#define EL_DIAMOND                     14
+#define EL_AMOEBA_DEAD                 15
+#define EL_QUICKSAND_EMPTY             16
+#define EL_QUICKSAND_FULL              17
+#define EL_AMOEBA_DROP                 18
+#define EL_BOMB                                19
+#define EL_MAGIC_WALL                  20
+#define EL_SPEED_PILL                  21
+#define EL_ACID                                22
+#define EL_AMOEBA_WET                  23
+#define EL_AMOEBA_DRY                  24
+#define EL_NUT                         25
+#define EL_GAMEOFLIFE                  26
+#define EL_BIOMAZE                     27
+#define EL_DYNAMITE_ACTIVE             28
+#define EL_STONEBLOCK                  29
+#define EL_ROBOT_WHEEL                 30
+#define EL_ROBOT_WHEEL_ACTIVE          31
+#define EL_KEY1                                32
+#define EL_KEY2                                33
+#define EL_KEY3                                34
+#define EL_KEY4                                35
+#define EL_GATE1                       36
+#define EL_GATE2                       37
+#define EL_GATE3                       38
+#define EL_GATE4                       39
+#define EL_GATE1_GRAY                  40
+#define EL_GATE2_GRAY                  41
+#define EL_GATE3_GRAY                  42
+#define EL_GATE4_GRAY                  43
+#define EL_DYNAMITE                    44
+#define EL_PACMAN                      45
+#define EL_INVISIBLE_WALL              46
+#define EL_LAMP                                47
+#define EL_LAMP_ACTIVE                 48
+#define EL_WALL_EMERALD                        49
+#define EL_WALL_DIAMOND                        50
+#define EL_AMOEBA_FULL                 51
+#define EL_BD_AMOEBA                   52
+#define EL_TIME_ORB_FULL               53
+#define EL_TIME_ORB_EMPTY              54
+#define EL_WALL_GROWING                        55
+#define EL_BD_DIAMOND                  56
+#define EL_EMERALD_YELLOW              57
+#define EL_WALL_BD_DIAMOND             58
+#define EL_WALL_EMERALD_YELLOW         59
+#define EL_DARK_YAMYAM                 60
+#define EL_BD_MAGIC_WALL               61
+#define EL_INVISIBLE_STEELWALL         62
+
+#define EL_UNUSED_63                   63
+
+#define EL_DYNABOMB_NR                 64
+#define EL_DYNABOMB_SZ                 65
+#define EL_DYNABOMB_XL                 66
+#define EL_SOKOBAN_OBJECT              67
+#define EL_SOKOBAN_FIELD_EMPTY         68
+#define EL_SOKOBAN_FIELD_FULL          69
+#define EL_BD_BUTTERFLY_RIGHT          70
+#define EL_BD_BUTTERFLY_UP             71
+#define EL_BD_BUTTERFLY_LEFT           72
+#define EL_BD_BUTTERFLY_DOWN           73
+#define EL_BD_FIREFLY_RIGHT            74
+#define EL_BD_FIREFLY_UP               75
+#define EL_BD_FIREFLY_LEFT             76
+#define EL_BD_FIREFLY_DOWN             77
+#define EL_BD_BUTTERFLY_1              EL_BD_BUTTERFLY_DOWN
+#define EL_BD_BUTTERFLY_2              EL_BD_BUTTERFLY_LEFT
+#define EL_BD_BUTTERFLY_3              EL_BD_BUTTERFLY_UP
+#define EL_BD_BUTTERFLY_4              EL_BD_BUTTERFLY_RIGHT
+#define EL_BD_FIREFLY_1                        EL_BD_FIREFLY_LEFT
+#define EL_BD_FIREFLY_2                        EL_BD_FIREFLY_DOWN
+#define EL_BD_FIREFLY_3                        EL_BD_FIREFLY_RIGHT
+#define EL_BD_FIREFLY_4                        EL_BD_FIREFLY_UP
+#define EL_BD_BUTTERFLY                        78
+#define EL_BD_FIREFLY                  79
+#define EL_PLAYER1                     80
+#define EL_PLAYER2                     81
+#define EL_PLAYER3                     82
+#define EL_PLAYER4                     83
+#define EL_BUG_RIGHT                   84
+#define EL_BUG_UP                      85
+#define EL_BUG_LEFT                    86
+#define EL_BUG_DOWN                    87
+#define EL_SPACESHIP_RIGHT             88
+#define EL_SPACESHIP_UP                        89
+#define EL_SPACESHIP_LEFT              90
+#define EL_SPACESHIP_DOWN              91
+#define EL_PACMAN_RIGHT                        92
+#define EL_PACMAN_UP                   93
+#define EL_PACMAN_LEFT                 94
+#define EL_PACMAN_DOWN                 95
+#define EL_EMERALD_RED                 96
+#define EL_EMERALD_PURPLE              97
+#define EL_WALL_EMERALD_RED            98
+#define EL_WALL_EMERALD_PURPLE         99
+#define EL_ACIDPOOL_TOPLEFT            100
+#define EL_ACIDPOOL_TOPRIGHT           101
+#define EL_ACIDPOOL_BOTTOMLEFT         102
+#define EL_ACIDPOOL_BOTTOM             103
+#define EL_ACIDPOOL_BOTTOMRIGHT                104
+#define EL_BD_WALL                     105
+#define EL_BD_ROCK                     106
+#define EL_EXIT_OPEN                   107
+#define EL_BLACK_ORB                   108
+#define EL_AMOEBA_TO_DIAMOND           109
+#define EL_MOLE                                110
+#define EL_PENGUIN                     111
+#define EL_SATELLITE                   112
+#define EL_ARROW_BLUE_LEFT             113
+#define EL_ARROW_BLUE_RIGHT            114
+#define EL_ARROW_BLUE_UP               115
+#define EL_ARROW_BLUE_DOWN             116
+#define EL_PIG                         117
+#define EL_DRAGON                      118
+
+#define EL_EM_KEY1_FILE                        119
+
+#define EL_CHAR_START                  120
+#define EL_CHAR_ASCII0                 (EL_CHAR_START  - 32)
+#define EL_CHAR_ASCII0_START           (EL_CHAR_ASCII0 + 32)
+#define EL_CHAR_EXCLAM                 (EL_CHAR_ASCII0 + 33)
+#define EL_CHAR_QUOTEDBL               (EL_CHAR_ASCII0 + 34)
+#define EL_CHAR_NUMBERSIGN             (EL_CHAR_ASCII0 + 35)
+#define EL_CHAR_DOLLAR                 (EL_CHAR_ASCII0 + 36)
+#define EL_CHAR_PROCENT                        (EL_CHAR_ASCII0 + 37)
+#define EL_CHAR_AMPERSAND              (EL_CHAR_ASCII0 + 38)
+#define EL_CHAR_APOSTROPHE             (EL_CHAR_ASCII0 + 39)
+#define EL_CHAR_PARENLEFT              (EL_CHAR_ASCII0 + 40)
+#define EL_CHAR_PARENRIGHT             (EL_CHAR_ASCII0 + 41)
+#define EL_CHAR_ASTERISK               (EL_CHAR_ASCII0 + 42)
+#define EL_CHAR_PLUS                   (EL_CHAR_ASCII0 + 43)
+#define EL_CHAR_COMMA                  (EL_CHAR_ASCII0 + 44)
+#define EL_CHAR_MINUS                  (EL_CHAR_ASCII0 + 45)
+#define EL_CHAR_PERIOD                 (EL_CHAR_ASCII0 + 46)
+#define EL_CHAR_SLASH                  (EL_CHAR_ASCII0 + 47)
+#define EL_CHAR_0                      (EL_CHAR_ASCII0 + 48)
+#define EL_CHAR_9                      (EL_CHAR_ASCII0 + 57)
+#define EL_CHAR_COLON                  (EL_CHAR_ASCII0 + 58)
+#define EL_CHAR_SEMICOLON              (EL_CHAR_ASCII0 + 59)
+#define EL_CHAR_LESS                   (EL_CHAR_ASCII0 + 60)
+#define EL_CHAR_EQUAL                  (EL_CHAR_ASCII0 + 61)
+#define EL_CHAR_GREATER                        (EL_CHAR_ASCII0 + 62)
+#define EL_CHAR_QUESTION               (EL_CHAR_ASCII0 + 63)
+#define EL_CHAR_AT                     (EL_CHAR_ASCII0 + 64)
+#define EL_CHAR_A                      (EL_CHAR_ASCII0 + 65)
+#define EL_CHAR_Z                      (EL_CHAR_ASCII0 + 90)
+#define EL_CHAR_AE                     (EL_CHAR_ASCII0 + 91)
+#define EL_CHAR_OE                     (EL_CHAR_ASCII0 + 92)
+#define EL_CHAR_UE                     (EL_CHAR_ASCII0 + 93)
+#define EL_CHAR_COPYRIGHT              (EL_CHAR_ASCII0 + 94)
+#define EL_CHAR_UNDERSCORE             (EL_CHAR_ASCII0 + 95)
+#define EL_CHAR_EMPTY                  (EL_CHAR_ASCII0 + 96)
+#define EL_CHAR_DEGREE                 (EL_CHAR_ASCII0 + 97)
+#define EL_CHAR_TM                     (EL_CHAR_ASCII0 + 98)
+#define EL_CHAR_CURSOR                 (EL_CHAR_ASCII0 + 99)
+#define EL_CHAR_ASCII0_END             (EL_CHAR_ASCII0 + 111)
+#define EL_CHAR_END                    (EL_CHAR_START  + 79)
+
+#define EL_CHAR(x)                     ((x) == 'Ä' ? EL_CHAR_AE         : \
+                                        (x) == 'Ö' ? EL_CHAR_OE         : \
+                                        (x) == 'Ãœ' ? EL_CHAR_UE         : \
+                                        (x) == '^' ? EL_CHAR_COPYRIGHT  : \
+                                        (x) == '_' ? EL_CHAR_UNDERSCORE : \
+                                        (x) == '°' ? EL_CHAR_DEGREE     : \
+                                        (x) == '´' ? EL_CHAR_TM         : \
+                                        (x) == '|' ? EL_CHAR_CURSOR     : \
+                                        EL_CHAR_A + (x) - 'A')
+
+#define EL_WALL_GROWING_X              200
+#define EL_WALL_GROWING_Y              201
+#define EL_WALL_GROWING_XY             202
+
+#define EL_EM_GATE1                    203
+#define EL_EM_GATE2                    204
+#define EL_EM_GATE3                    205
+#define EL_EM_GATE4                    206
+
+#define EL_EM_KEY2_FILE                        207
+#define EL_EM_KEY3_FILE                        208
+#define EL_EM_KEY4_FILE                        209
+
+#define EL_SP_START                    210
+#define EL_SP_EMPTY_SPACE              (EL_SP_START + 0)
+#define EL_SP_EMPTY                    EL_SP_EMPTY_SPACE
+#define EL_SP_ZONK                     (EL_SP_START + 1)
+#define EL_SP_BASE                     (EL_SP_START + 2)
+#define EL_SP_MURPHY                   (EL_SP_START + 3)
+#define EL_SP_INFOTRON                 (EL_SP_START + 4)
+#define EL_SP_CHIP_SINGLE              (EL_SP_START + 5)
+#define EL_SP_HARD_GRAY                        (EL_SP_START + 6)
+#define EL_SP_EXIT_CLOSED              (EL_SP_START + 7)
+#define EL_SP_DISK_ORANGE              (EL_SP_START + 8)
+#define EL_SP_PORT1_RIGHT              (EL_SP_START + 9)
+#define EL_SP_PORT1_DOWN               (EL_SP_START + 10)
+#define EL_SP_PORT1_LEFT               (EL_SP_START + 11)
+#define EL_SP_PORT1_UP                 (EL_SP_START + 12)
+#define EL_SP_PORT2_RIGHT              (EL_SP_START + 13)
+#define EL_SP_PORT2_DOWN               (EL_SP_START + 14)
+#define EL_SP_PORT2_LEFT               (EL_SP_START + 15)
+#define EL_SP_PORT2_UP                 (EL_SP_START + 16)
+#define EL_SP_SNIKSNAK                 (EL_SP_START + 17)
+#define EL_SP_DISK_YELLOW              (EL_SP_START + 18)
+#define EL_SP_TERMINAL                 (EL_SP_START + 19)
+#define EL_SP_DISK_RED                 (EL_SP_START + 20)
+#define EL_SP_PORT_Y                   (EL_SP_START + 21)
+#define EL_SP_PORT_X                   (EL_SP_START + 22)
+#define EL_SP_PORT_XY                  (EL_SP_START + 23)
+#define EL_SP_ELECTRON                 (EL_SP_START + 24)
+#define EL_SP_BUGGY_BASE               (EL_SP_START + 25)
+#define EL_SP_CHIP_LEFT                        (EL_SP_START + 26)
+#define EL_SP_CHIP_RIGHT               (EL_SP_START + 27)
+#define EL_SP_HARD_BASE1               (EL_SP_START + 28)
+#define EL_SP_HARD_GREEN               (EL_SP_START + 29)
+#define EL_SP_HARD_BLUE                        (EL_SP_START + 30)
+#define EL_SP_HARD_RED                 (EL_SP_START + 31)
+#define EL_SP_HARD_YELLOW              (EL_SP_START + 32)
+#define EL_SP_HARD_BASE2               (EL_SP_START + 33)
+#define EL_SP_HARD_BASE3               (EL_SP_START + 34)
+#define EL_SP_HARD_BASE4               (EL_SP_START + 35)
+#define EL_SP_HARD_BASE5               (EL_SP_START + 36)
+#define EL_SP_HARD_BASE6               (EL_SP_START + 37)
+#define EL_SP_CHIP_UPPER               (EL_SP_START + 38)
+#define EL_SP_CHIP_LOWER               (EL_SP_START + 39)
+#define EL_SP_END                      (EL_SP_START + 39)
+
+#define EL_EM_GATE1_GRAY               250
+#define EL_EM_GATE2_GRAY               251
+#define EL_EM_GATE3_GRAY               252
+#define EL_EM_GATE4_GRAY               253
+
+#define EL_UNUSED_254                  254
+#define EL_UNUSED_255                  255
+
+#define EL_PEARL                       256
+#define EL_CRYSTAL                     257
+#define EL_WALL_PEARL                  258
+#define EL_WALL_CRYSTAL                        259
+#define EL_DOOR_WHITE                  260
+#define EL_DOOR_WHITE_GRAY             261
+#define EL_KEY_WHITE                   262
+#define EL_SHIELD_NORMAL               263
+#define EL_EXTRA_TIME                  264
+#define EL_SWITCHGATE_OPEN             265
+#define EL_SWITCHGATE_CLOSED           266
+#define EL_SWITCHGATE_SWITCH_UP                267
+#define EL_SWITCHGATE_SWITCH_DOWN      268
+
+#define EL_UNUSED_269                  269
+#define EL_UNUSED_270                  270
+
+#define EL_CONVEYOR_BELT1_LEFT         271
+#define EL_CONVEYOR_BELT1_MIDDLE       272
+#define EL_CONVEYOR_BELT1_RIGHT                273
+#define EL_CONVEYOR_BELT1_SWITCH_LEFT  274
+#define EL_CONVEYOR_BELT1_SWITCH_MIDDLE        275
+#define EL_CONVEYOR_BELT1_SWITCH_RIGHT 276
+#define EL_CONVEYOR_BELT2_LEFT         277
+#define EL_CONVEYOR_BELT2_MIDDLE       278
+#define EL_CONVEYOR_BELT2_RIGHT                279
+#define EL_CONVEYOR_BELT2_SWITCH_LEFT  280
+#define EL_CONVEYOR_BELT2_SWITCH_MIDDLE        281
+#define EL_CONVEYOR_BELT2_SWITCH_RIGHT 282
+#define EL_CONVEYOR_BELT3_LEFT         283
+#define EL_CONVEYOR_BELT3_MIDDLE       284
+#define EL_CONVEYOR_BELT3_RIGHT                285
+#define EL_CONVEYOR_BELT3_SWITCH_LEFT  286
+#define EL_CONVEYOR_BELT3_SWITCH_MIDDLE        287
+#define EL_CONVEYOR_BELT3_SWITCH_RIGHT 288
+#define EL_CONVEYOR_BELT4_LEFT         289
+#define EL_CONVEYOR_BELT4_MIDDLE       290
+#define EL_CONVEYOR_BELT4_RIGHT                291
+#define EL_CONVEYOR_BELT4_SWITCH_LEFT  292
+#define EL_CONVEYOR_BELT4_SWITCH_MIDDLE        293
+#define EL_CONVEYOR_BELT4_SWITCH_RIGHT 294
+#define EL_LANDMINE                    295
+#define EL_ENVELOPE                    296
+#define EL_LIGHT_SWITCH                        297
+#define EL_LIGHT_SWITCH_ACTIVE         298
+#define EL_SIGN_EXCLAMATION            299
+#define EL_SIGN_RADIOACTIVITY          300
+#define EL_SIGN_STOP                   301
+#define EL_SIGN_WHEELCHAIR             302
+#define EL_SIGN_PARKING                        303
+#define EL_SIGN_ONEWAY                 304
+#define EL_SIGN_HEART                  305
+#define EL_SIGN_TRIANGLE               306
+#define EL_SIGN_ROUND                  307
+#define EL_SIGN_EXIT                   308
+#define EL_SIGN_YINYANG                        309
+#define EL_SIGN_OTHER                  310
+#define EL_MOLE_LEFT                   311
+#define EL_MOLE_RIGHT                  312
+#define EL_MOLE_UP                     313
+#define EL_MOLE_DOWN                   314
+#define EL_STEELWALL_SLANTED           315
+#define EL_INVISIBLE_SAND              316
+#define EL_DX_UNKNOWN_15               317
+#define EL_DX_UNKNOWN_42               318
+
+#define EL_UNUSED_319                  319
+#define EL_UNUSED_320                  320
+
+#define EL_SHIELD_DEADLY               321
+#define EL_TIMEGATE_OPEN               322
+#define EL_TIMEGATE_CLOSED             323
+#define EL_TIMEGATE_SWITCH_ACTIVE      324
+#define EL_TIMEGATE_SWITCH             325
+
+#define EL_BALLOON                     326
+#define EL_BALLOON_SEND_LEFT           327
+#define EL_BALLOON_SEND_RIGHT          328
+#define EL_BALLOON_SEND_UP             329
+#define EL_BALLOON_SEND_DOWN           330
+#define EL_BALLOON_SEND_ANY_DIRECTION  331
+
+#define EL_EMC_STEELWALL1              332
+#define EL_EMC_STEELWALL2              333
+#define EL_EMC_STEELWALL3              334
+#define EL_EMC_STEELWALL4              335
+#define EL_EMC_WALL_PILLAR_UPPER       336
+#define EL_EMC_WALL_PILLAR_MIDDLE      337
+#define EL_EMC_WALL_PILLAR_LOWER       338
+#define EL_EMC_WALL4                   339
+#define EL_EMC_WALL5                   340
+#define EL_EMC_WALL6                   341
+#define EL_EMC_WALL7                   342
+#define EL_EMC_WALL8                   343
+
+#define EL_TUBE_ALL                    344
+#define EL_TUBE_VERTICAL               345
+#define EL_TUBE_HORIZONTAL             346
+#define EL_TUBE_VERTICAL_LEFT          347
+#define EL_TUBE_VERTICAL_RIGHT         348
+#define EL_TUBE_HORIZONTAL_UP          349
+#define EL_TUBE_HORIZONTAL_DOWN                350
+#define EL_TUBE_LEFT_UP                        351
+#define EL_TUBE_LEFT_DOWN              352
+#define EL_TUBE_RIGHT_UP               353
+#define EL_TUBE_RIGHT_DOWN             354
+#define EL_SPRING                      355
+#define EL_TRAP                                356
+#define EL_DX_SUPABOMB                 357
+
+#define EL_UNUSED_358                  358
+#define EL_UNUSED_359                  359
+
+#define EL_CUSTOM_START                        360
+#define EL_CUSTOM_1                    (EL_CUSTOM_START + 0)
+#define EL_CUSTOM_128                  (EL_CUSTOM_START + 127)
+#define EL_CUSTOM_END                  (EL_CUSTOM_START + 127)
+
+#define NUM_FILE_ELEMENTS              488
 
 
 /* "real" (and therefore drawable) runtime elements */
-#define EL_FIRST_RUNTIME_EL    500
-
-#define EL_MAGIC_WALL_EMPTY    500
-#define EL_MAGIC_WALL_BD_EMPTY 501
-#define EL_MAGIC_WALL_FULL     502
-#define EL_MAGIC_WALL_BD_FULL  503
-#define EL_MAGIC_WALL_DEAD     504
-#define EL_MAGIC_WALL_BD_DEAD  505
-#define EL_AUSGANG_ACT         506
-#define EL_SP_TERMINAL_ACTIVE  507
-#define EL_SP_BUG_ACTIVE       508
-#define EL_EM_KEY_1            509
-#define EL_EM_KEY_2            510
-#define EL_EM_KEY_3            511
-#define EL_EM_KEY_4            512
-#define EL_DYNABOMB_ACTIVE_1   513
-#define EL_DYNABOMB_ACTIVE_2   514
-#define EL_DYNABOMB_ACTIVE_3   515
-#define EL_DYNABOMB_ACTIVE_4   516
-#define EL_SWITCHGATE_OPENING  517
-#define EL_SWITCHGATE_CLOSING  518
-#define EL_TIMEGATE_OPENING    519
-#define EL_TIMEGATE_CLOSING    520
-#define EL_PEARL_BREAKING      521
-#define EL_TRAP_ACTIVE         522
-#define EL_SPRING_MOVING       523
-#define EL_SP_MURPHY_CLONE     524
-#define EL_QUICKSAND_EMPTYING  525
-#define EL_MAGIC_WALL_EMPTYING 526
-#define EL_MAGIC_WALL_BD_EMPTYING 527
-#define EL_AMOEBA_DRIPPING     528
+#define EL_FIRST_RUNTIME_REAL          NUM_FILE_ELEMENTS
+
+#define EL_EM_KEY1                     (EL_FIRST_RUNTIME_REAL + 0)
+#define EL_EM_KEY2                     (EL_FIRST_RUNTIME_REAL + 1)
+#define EL_EM_KEY3                     (EL_FIRST_RUNTIME_REAL + 2)
+#define EL_EM_KEY4                     (EL_FIRST_RUNTIME_REAL + 3)
+#define EL_DYNABOMB_PLAYER1_ACTIVE     (EL_FIRST_RUNTIME_REAL + 4)
+#define EL_DYNABOMB_PLAYER2_ACTIVE     (EL_FIRST_RUNTIME_REAL + 5)
+#define EL_DYNABOMB_PLAYER3_ACTIVE     (EL_FIRST_RUNTIME_REAL + 6)
+#define EL_DYNABOMB_PLAYER4_ACTIVE     (EL_FIRST_RUNTIME_REAL + 7)
+#define EL_SWITCHGATE_OPENING          (EL_FIRST_RUNTIME_REAL + 8)
+#define EL_SWITCHGATE_CLOSING          (EL_FIRST_RUNTIME_REAL + 9)
+#define EL_TIMEGATE_OPENING            (EL_FIRST_RUNTIME_REAL + 10)
+#define EL_TIMEGATE_CLOSING            (EL_FIRST_RUNTIME_REAL + 11)
+#define EL_PEARL_BREAKING              (EL_FIRST_RUNTIME_REAL + 12)
+#define EL_TRAP_ACTIVE                 (EL_FIRST_RUNTIME_REAL + 13)
+#define EL_INVISIBLE_STEELWALL_ACTIVE  (EL_FIRST_RUNTIME_REAL + 14)
+#define EL_INVISIBLE_WALL_ACTIVE       (EL_FIRST_RUNTIME_REAL + 15)
+#define EL_INVISIBLE_SAND_ACTIVE       (EL_FIRST_RUNTIME_REAL + 16)
+#define EL_CONVEYOR_BELT1_LEFT_ACTIVE  (EL_FIRST_RUNTIME_REAL + 17)
+#define EL_CONVEYOR_BELT1_MIDDLE_ACTIVE        (EL_FIRST_RUNTIME_REAL + 18)
+#define EL_CONVEYOR_BELT1_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 19)
+#define EL_CONVEYOR_BELT2_LEFT_ACTIVE  (EL_FIRST_RUNTIME_REAL + 20)
+#define EL_CONVEYOR_BELT2_MIDDLE_ACTIVE        (EL_FIRST_RUNTIME_REAL + 21)
+#define EL_CONVEYOR_BELT2_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 22)
+#define EL_CONVEYOR_BELT3_LEFT_ACTIVE  (EL_FIRST_RUNTIME_REAL + 23)
+#define EL_CONVEYOR_BELT3_MIDDLE_ACTIVE        (EL_FIRST_RUNTIME_REAL + 24)
+#define EL_CONVEYOR_BELT3_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 25)
+#define EL_CONVEYOR_BELT4_LEFT_ACTIVE  (EL_FIRST_RUNTIME_REAL + 26)
+#define EL_CONVEYOR_BELT4_MIDDLE_ACTIVE        (EL_FIRST_RUNTIME_REAL + 27)
+#define EL_CONVEYOR_BELT4_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 28)
+#define EL_EXIT_OPENING                        (EL_FIRST_RUNTIME_REAL + 29)
+#define EL_SP_EXIT_OPEN                        (EL_FIRST_RUNTIME_REAL + 30)
+#define EL_SP_TERMINAL_ACTIVE          (EL_FIRST_RUNTIME_REAL + 31)
+#define EL_SP_BUGGY_BASE_ACTIVATING    (EL_FIRST_RUNTIME_REAL + 32)
+#define EL_SP_BUGGY_BASE_ACTIVE                (EL_FIRST_RUNTIME_REAL + 33)
+#define EL_SP_MURPHY_CLONE             (EL_FIRST_RUNTIME_REAL + 34)
+#define EL_AMOEBA_DRIPPING             (EL_FIRST_RUNTIME_REAL + 35)
+#define EL_QUICKSAND_EMPTYING          (EL_FIRST_RUNTIME_REAL + 36)
+#define EL_MAGIC_WALL_ACTIVE           (EL_FIRST_RUNTIME_REAL + 37)
+#define EL_BD_MAGIC_WALL_ACTIVE                (EL_FIRST_RUNTIME_REAL + 38)
+#define EL_MAGIC_WALL_FULL             (EL_FIRST_RUNTIME_REAL + 39)
+#define EL_BD_MAGIC_WALL_FULL          (EL_FIRST_RUNTIME_REAL + 40)
+#define EL_MAGIC_WALL_EMPTYING         (EL_FIRST_RUNTIME_REAL + 41)
+#define EL_BD_MAGIC_WALL_EMPTYING      (EL_FIRST_RUNTIME_REAL + 42)
+#define EL_MAGIC_WALL_DEAD             (EL_FIRST_RUNTIME_REAL + 43)
+#define EL_BD_MAGIC_WALL_DEAD          (EL_FIRST_RUNTIME_REAL + 44)
 
 /* "unreal" (and therefore not drawable) runtime elements */
-#define EL_BLOCKED             600
-#define EL_EXPLODING           601
-#define EL_CRACKINGNUT         602
-#define EL_BLURB_LEFT          603
-#define EL_BLURB_RIGHT         604
-#define EL_AMOEBING            605
-#define EL_DEAMOEBING          606
-#define EL_MAUERND             607
-#define EL_BURNING             608
-#define EL_PLAYER_IS_LEAVING   609
-#define EL_QUICKSAND_FILLING   610
-#define EL_MAGIC_WALL_FILLING  611
-#define EL_MAGIC_WALL_BD_FILLING 612
+#define EL_FIRST_RUNTIME_UNREAL                (EL_FIRST_RUNTIME_REAL + 45)
+
+#define EL_BLOCKED                     (EL_FIRST_RUNTIME_UNREAL + 0)
+#define EL_EXPLOSION                   (EL_FIRST_RUNTIME_UNREAL + 1)
+#define EL_NUT_CRACKING                        (EL_FIRST_RUNTIME_UNREAL + 2)
+#define EL_ACID_SPLASH_LEFT            (EL_FIRST_RUNTIME_UNREAL + 3)
+#define EL_ACID_SPLASH_RIGHT           (EL_FIRST_RUNTIME_UNREAL + 4)
+#define EL_AMOEBA_CREATING             (EL_FIRST_RUNTIME_UNREAL + 5)
+#define EL_AMOEBA_SHRINKING            (EL_FIRST_RUNTIME_UNREAL + 6)
+#define EL_WALL_GROWING_ACTIVE         (EL_FIRST_RUNTIME_UNREAL + 7)
+#define EL_FLAMES                      (EL_FIRST_RUNTIME_UNREAL + 8)
+#define EL_PLAYER_IS_LEAVING           (EL_FIRST_RUNTIME_UNREAL + 9)
+#define EL_QUICKSAND_FILLING           (EL_FIRST_RUNTIME_UNREAL + 10)
+#define EL_MAGIC_WALL_FILLING          (EL_FIRST_RUNTIME_UNREAL + 11)
+#define EL_BD_MAGIC_WALL_FILLING       (EL_FIRST_RUNTIME_UNREAL + 12)
+
+/* dummy (not drawable) runtime elements (internal use only) */
+#define EL_FIRST_DUMMY                 (EL_FIRST_RUNTIME_UNREAL + 13)
+
+#define EL_STEELWALL_TOPLEFT                   (EL_FIRST_DUMMY + 0)
+#define EL_STEELWALL_TOPRIGHT                  (EL_FIRST_DUMMY + 1)
+#define EL_STEELWALL_BOTTOMLEFT                        (EL_FIRST_DUMMY + 2)
+#define EL_STEELWALL_BOTTOMRIGHT               (EL_FIRST_DUMMY + 3)
+#define EL_STEELWALL_HORIZONTAL                        (EL_FIRST_DUMMY + 4)
+#define EL_STEELWALL_VERTICAL                  (EL_FIRST_DUMMY + 5)
+#define EL_INVISIBLE_STEELWALL_TOPLEFT         (EL_FIRST_DUMMY + 6)
+#define EL_INVISIBLE_STEELWALL_TOPRIGHT                (EL_FIRST_DUMMY + 7)
+#define EL_INVISIBLE_STEELWALL_BOTTOMLEFT      (EL_FIRST_DUMMY + 8)
+#define EL_INVISIBLE_STEELWALL_BOTTOMRIGHT     (EL_FIRST_DUMMY + 9)
+#define EL_INVISIBLE_STEELWALL_HORIZONTAL      (EL_FIRST_DUMMY + 10)
+#define EL_INVISIBLE_STEELWALL_VERTICAL                (EL_FIRST_DUMMY + 11)
+#define EL_SAND_CRUMBLED                       (EL_FIRST_DUMMY + 12)
+#define EL_BD_AMOEBA_PART1                     (EL_FIRST_DUMMY + 13)
+#define EL_BD_AMOEBA_PART2                     (EL_FIRST_DUMMY + 14)
+#define EL_BD_AMOEBA_PART3                     (EL_FIRST_DUMMY + 15)
+#define EL_BD_AMOEBA_PART4                     (EL_FIRST_DUMMY + 16)
+#define EL_AMOEBA_WET_PART1                    (EL_FIRST_DUMMY + 17)
+#define EL_AMOEBA_WET_PART2                    (EL_FIRST_DUMMY + 18)
+#define EL_AMOEBA_WET_PART3                    (EL_FIRST_DUMMY + 19)
+#define EL_AMOEBA_WET_PART4                    (EL_FIRST_DUMMY + 20)
+#define EL_AMOEBA_DRY_PART1                    (EL_FIRST_DUMMY + 21)
+#define EL_AMOEBA_DRY_PART2                    (EL_FIRST_DUMMY + 22)
+#define EL_AMOEBA_DRY_PART3                    (EL_FIRST_DUMMY + 23)
+#define EL_AMOEBA_DRY_PART4                    (EL_FIRST_DUMMY + 24)
+#define EL_AMOEBA_DEAD_PART1                   (EL_FIRST_DUMMY + 25)
+#define EL_AMOEBA_DEAD_PART2                   (EL_FIRST_DUMMY + 26)
+#define EL_AMOEBA_DEAD_PART3                   (EL_FIRST_DUMMY + 27)
+#define EL_AMOEBA_DEAD_PART4                   (EL_FIRST_DUMMY + 28)
+#define EL_DYNABOMB_ACTIVE                     (EL_FIRST_DUMMY + 29)
+#define EL_SHIELD_NORMAL_ACTIVE                        (EL_FIRST_DUMMY + 30)
+#define EL_SHIELD_DEADLY_ACTIVE                        (EL_FIRST_DUMMY + 31)
+#define EL_ARROW_RED_LEFT                      (EL_FIRST_DUMMY + 32)
+#define EL_ARROW_RED_RIGHT                     (EL_FIRST_DUMMY + 33)
+#define EL_ARROW_RED_UP                                (EL_FIRST_DUMMY + 34)
+#define EL_ARROW_RED_DOWN                      (EL_FIRST_DUMMY + 35)
+
+#define MAX_NUM_ELEMENTS                       (EL_FIRST_DUMMY + 36)
+
 
 /* game graphics:
 **       0 -  255: graphics from "RocksElements"
@@ -920,199 +808,201 @@ extern struct FileInfo         *image_files, *sound_files;
 **     1280 - 1535: graphics from "RocksMore"
 */
 
-#define GFX_START_ROCKSELEMENTS        0
-#define GFX_END_ROCKSELEMENTS  255
-#define GFX_START_ROCKSFONT    256
-#define GFX_END_ROCKSFONT      511
-#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 GFX_START_ROCKSMORE    1280
-#define GFX_END_ROCKSMORE      1535
-
-#define NUM_TILES              1536            /* see above: MAX_GRAPHICS */
+#define GFX_START_ROCKSELEMENTS                0
+#define GFX_END_ROCKSELEMENTS          255
+#define GFX_START_ROCKSFONT            256
+#define GFX_END_ROCKSFONT              511
+#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 GFX_START_ROCKSMORE            1280
+#define GFX_END_ROCKSMORE              1535
+
+#if 0
+#define NUM_TILES                      1536    /* see above: MAX_GRAPHICS */
+#endif
 
 /* graphics from "RocksScreen" */
 /* Zeile 0 (0) */
-#define GFX_LEERRAUM           (-1)
-#define        GFX_ERDREICH            0
-#define GFX_ERDENRAND          1
-#define GFX_MORAST_LEER                2
-#define GFX_MORAST_VOLL                3
-#define GFX_BETON              4
-#define        GFX_MAUERWERK           5
-#define        GFX_FELSBODEN           6
-#define        GFX_EDELSTEIN           8
-#define GFX_DIAMANT            10
-#define        GFX_FELSBROCKEN         12
+#define GFX_LEERRAUM                   (-1)
+#define GFX_ERDREICH                   0
+#define GFX_ERDENRAND                  1
+#define GFX_MORAST_LEER                        2
+#define GFX_MORAST_VOLL                        3
+#define GFX_BETON                      4
+#define GFX_MAUERWERK                  5
+#define GFX_FELSBODEN                  6
+#define GFX_EDELSTEIN                  8
+#define GFX_DIAMANT                    10
+#define GFX_FELSBROCKEN                        12
 /* Zeile 1 (16) */
-#define GFX_BADEWANNE1         16
-#define GFX_SALZSAEURE         17
-#define GFX_BADEWANNE2         18
+#define GFX_BADEWANNE1                 16
+#define GFX_SALZSAEURE                 17
+#define GFX_BADEWANNE2                 18
 
 /*
-#define GFX_UNSICHTBAR         19
+#define GFX_UNSICHTBAR                 19
 */
 
-#define GFX_SCHLUESSEL1                20
-#define GFX_SCHLUESSEL2                21
-#define GFX_SCHLUESSEL3                22
-#define GFX_SCHLUESSEL4                23
-#define GFX_LIFE               24
-#define GFX_LIFE_ASYNC         25
-#define GFX_BADEWANNE          26
-#define GFX_BOMBE              27
-#define GFX_KOKOSNUSS          28
-#define GFX_CRACKINGNUT                29
+#define GFX_SCHLUESSEL1                        20
+#define GFX_SCHLUESSEL2                        21
+#define GFX_SCHLUESSEL3                        22
+#define GFX_SCHLUESSEL4                        23
+#define GFX_LIFE                       24
+#define GFX_LIFE_ASYNC                 25
+#define GFX_BADEWANNE                  26
+#define GFX_BOMBE                      27
+#define GFX_KOKOSNUSS                  28
+#define GFX_CRACKINGNUT                        29
 /* Zeile 2 (32) */
-#define GFX_BADEWANNE3         32
-#define GFX_BADEWANNE4         33
-#define GFX_BADEWANNE5         34
-#define        GFX_SMILEY              35
-#define GFX_PFORTE1            36
-#define GFX_PFORTE2            37
-#define GFX_PFORTE3            38
-#define GFX_PFORTE4            39
-#define GFX_PFORTE1X           40
-#define GFX_PFORTE2X           41
-#define GFX_PFORTE3X           42
-#define GFX_PFORTE4X           43
+#define GFX_BADEWANNE3                 32
+#define GFX_BADEWANNE4                 33
+#define GFX_BADEWANNE5                 34
+#define GFX_SMILEY                     35
+#define GFX_PFORTE1                    36
+#define GFX_PFORTE2                    37
+#define GFX_PFORTE3                    38
+#define GFX_PFORTE4                    39
+#define GFX_PFORTE1X                   40
+#define GFX_PFORTE2X                   41
+#define GFX_PFORTE3X                   42
+#define GFX_PFORTE4X                   43
 /* Zeile 3 (48) */
-#define GFX_DYNAMIT_AUS                48
-#define GFX_DYNAMIT            49
-#define GFX_FLIEGER            56
-#define GFX_FLIEGER_RIGHT      56
-#define GFX_FLIEGER_UP         58
-#define GFX_FLIEGER_LEFT       60
-#define GFX_FLIEGER_DOWN       62
+#define GFX_DYNAMIT_AUS                        48
+#define GFX_DYNAMIT                    49
+#define GFX_FLIEGER                    56
+#define GFX_FLIEGER_RIGHT              56
+#define GFX_FLIEGER_UP                 58
+#define GFX_FLIEGER_LEFT               60
+#define GFX_FLIEGER_DOWN               62
 /* Zeile 4 (64) */
-#define GFX_EXPLOSION          64
-#define GFX_KAEFER             72
-#define GFX_KAEFER_RIGHT       72
-#define GFX_KAEFER_UP          74
-#define GFX_KAEFER_LEFT                76
-#define GFX_KAEFER_DOWN                78
+#define GFX_EXPLOSION                  64
+#define GFX_KAEFER                     72
+#define GFX_KAEFER_RIGHT               72
+#define GFX_KAEFER_UP                  74
+#define GFX_KAEFER_LEFT                        76
+#define GFX_KAEFER_DOWN                        78
 /* Zeile 5 (80) */
-#define GFX_MAMPFER            80
-#define GFX_ROBOT              84
-#define GFX_PACMAN             88
-#define GFX_PACMAN_RIGHT       88
-#define GFX_PACMAN_UP          90
-#define GFX_PACMAN_LEFT                92
-#define GFX_PACMAN_DOWN                94
+#define GFX_MAMPFER                    80
+#define GFX_ROBOT                      84
+#define GFX_PACMAN                     88
+#define GFX_PACMAN_RIGHT               88
+#define GFX_PACMAN_UP                  90
+#define GFX_PACMAN_LEFT                        92
+#define GFX_PACMAN_DOWN                        94
 /* Zeile 6 (96) */
-#define GFX_ABLENK             96
-#define GFX_ABLENK_EIN         GFX_ABLENK
-#define GFX_ABLENK_AUS         GFX_ABLENK
-#define GFX_AMOEBE_NASS                100
-#define GFX_TROPFEN            101
-#define GFX_AMOEBING           GFX_TROPFEN
-#define GFX_AMOEBE_LEBT                104
-#define GFX_AMOEBE_NORM                GFX_AMOEBE_LEBT
-#define GFX_AMOEBE_TOT         108
-#define GFX_AMOEBA2DIAM                GFX_AMOEBE_TOT
+#define GFX_ABLENK                     96
+#define GFX_ABLENK_EIN                 GFX_ABLENK
+#define GFX_ABLENK_AUS                 GFX_ABLENK
+#define GFX_AMOEBE_NASS                        100
+#define GFX_TROPFEN                    101
+#define GFX_AMOEBING                   GFX_TROPFEN
+#define GFX_AMOEBE_LEBT                        104
+#define GFX_AMOEBE_NORM                        GFX_AMOEBE_LEBT
+#define GFX_AMOEBE_TOT                 108
+#define GFX_AMOEBA2DIAM                        GFX_AMOEBE_TOT
 /* Zeile 7 (112) */
-#define GFX_BIRNE_AUS          112
-#define GFX_BIRNE_EIN          113
-#define GFX_ZEIT_VOLL          114
-#define GFX_ZEIT_LEER          115
-#define GFX_SPIELER1           116
-#define GFX_SPIELER2           117
-#define GFX_SPIELER3           118
-#define GFX_SPIELER4           119
-#define GFX_AMOEBE_VOLL                120
-#define GFX_AMOEBE_BD          GFX_AMOEBE_VOLL
-#define GFX_SOKOBAN_OBJEKT     121
-#define GFX_SOKOBAN_FELD_LEER  122
-#define GFX_SOKOBAN_FELD_VOLL  123
-#define GFX_GEBLUBBER          124
+#define GFX_BIRNE_AUS                  112
+#define GFX_BIRNE_EIN                  113
+#define GFX_ZEIT_VOLL                  114
+#define GFX_ZEIT_LEER                  115
+#define GFX_SPIELER1                   116
+#define GFX_SPIELER2                   117
+#define GFX_SPIELER3                   118
+#define GFX_SPIELER4                   119
+#define GFX_AMOEBE_VOLL                        120
+#define GFX_AMOEBE_BD                  GFX_AMOEBE_VOLL
+#define GFX_SOKOBAN_OBJEKT             121
+#define GFX_SOKOBAN_FELD_LEER          122
+#define GFX_SOKOBAN_FELD_VOLL          123
+#define GFX_GEBLUBBER                  124
 /* Zeile 8 (128) */
-#define GFX_MAGIC_WALL_OFF     128
-#define GFX_MAGIC_WALL_EMPTY   GFX_MAGIC_WALL_OFF
-#define GFX_MAGIC_WALL_FULL    GFX_MAGIC_WALL_OFF
-#define GFX_MAGIC_WALL_DEAD    GFX_MAGIC_WALL_OFF
-#define GFX_ERZ_EDEL           132
-#define GFX_ERZ_DIAM           133
-#define GFX_ERZ_EDEL_ROT       134
-#define GFX_ERZ_EDEL_LILA      135
-#define GFX_ERZ_EDEL_GELB      136
-#define GFX_ERZ_EDEL_BD                137
-#define GFX_EDELSTEIN_GELB     138
-#define GFX_KUGEL_ROT          140
-#define GFX_KUGEL_BLAU         141
-#define GFX_KUGEL_GELB         142
-#define GFX_KUGEL_GRAU         143
+#define GFX_MAGIC_WALL_OFF             128
+#define GFX_MAGIC_WALL_EMPTY           GFX_MAGIC_WALL_OFF
+#define GFX_MAGIC_WALL_FULL            GFX_MAGIC_WALL_OFF
+#define GFX_MAGIC_WALL_DEAD            GFX_MAGIC_WALL_OFF
+#define GFX_ERZ_EDEL                   132
+#define GFX_ERZ_DIAM                   133
+#define GFX_ERZ_EDEL_ROT               134
+#define GFX_ERZ_EDEL_LILA              135
+#define GFX_ERZ_EDEL_GELB              136
+#define GFX_ERZ_EDEL_BD                        137
+#define GFX_EDELSTEIN_GELB             138
+#define GFX_KUGEL_ROT                  140
+#define GFX_KUGEL_BLAU                 141
+#define GFX_KUGEL_GELB                 142
+#define GFX_KUGEL_GRAU                 143
 /* Zeile 9 (144) */
-#define GFX_PINGUIN            144
-#define GFX_MOLE               145
-#define GFX_SCHWEIN            146
-#define GFX_DRACHE             147
-#define GFX_MAUER_XY           148
-#define GFX_MAUER_X            149
-#define GFX_MAUER_Y            150
-#define GFX_EDELSTEIN_ROT      152
-#define GFX_EDELSTEIN_LILA     154
-#define GFX_DYNABOMB_XL                156
-#define GFX_BLACK_ORB          157
-#define GFX_SPEED_PILL         158
-#define GFX_SONDE              159
+#define GFX_PINGUIN                    144
+#define GFX_MOLE                       145
+#define GFX_SCHWEIN                    146
+#define GFX_DRACHE                     147
+#define GFX_MAUER_XY                   148
+#define GFX_MAUER_X                    149
+#define GFX_MAUER_Y                    150
+#define GFX_EDELSTEIN_ROT              152
+#define GFX_EDELSTEIN_LILA             154
+#define GFX_DYNABOMB_XL                        156
+#define GFX_BLACK_ORB                  157
+#define GFX_SPEED_PILL                 158
+#define GFX_SONDE                      159
 /* Zeile 10 (160) */
-#define GFX_EDELSTEIN_BD       163
-#define GFX_MAUER_RIGHT                165
-#define GFX_MAUER_R1           GFX_MAUER_RIGHT
-#define GFX_MAUER_R            167
-#define GFX_MAUER_LEFT         168
-#define GFX_MAUER_L1           GFX_MAUER_LEFT
-#define GFX_MAUER_L            170
-#define GFX_MAUER_LEBT         171
-#define GFX_MAGIC_WALL_BD_OFF  172
-#define GFX_MAGIC_WALL_BD_EMPTY        GFX_MAGIC_WALL_BD_OFF
-#define GFX_MAGIC_WALL_BD_FULL GFX_MAGIC_WALL_BD_OFF
-#define GFX_MAGIC_WALL_BD_DEAD GFX_MAGIC_WALL_BD_OFF
+#define GFX_EDELSTEIN_BD               163
+#define GFX_MAUER_RIGHT                        165
+#define GFX_MAUER_R1                   GFX_MAUER_RIGHT
+#define GFX_MAUER_R                    167
+#define GFX_MAUER_LEFT                 168
+#define GFX_MAUER_L1                   GFX_MAUER_LEFT
+#define GFX_MAUER_L                    170
+#define GFX_MAUER_LEBT                 171
+#define GFX_MAGIC_WALL_BD_OFF          172
+#define GFX_MAGIC_WALL_BD_EMPTY                GFX_MAGIC_WALL_BD_OFF
+#define GFX_MAGIC_WALL_BD_FULL         GFX_MAGIC_WALL_BD_OFF
+#define GFX_MAGIC_WALL_BD_DEAD         GFX_MAGIC_WALL_BD_OFF
 /* Zeile 11 (176) */
-#define        GFX_AUSGANG_ZU          176
-#define        GFX_AUSGANG_ACT         177
-#define        GFX_AUSGANG_AUF         180
-#define GFX_MAMPFER2           184
-#define GFX_DYNABOMB           188
-#define GFX_DYNABOMB_NR                188
-#define GFX_DYNABOMB_SZ                191
+#define GFX_AUSGANG_ZU                 176
+#define GFX_AUSGANG_ACT                        177
+#define GFX_AUSGANG_AUF                        180
+#define GFX_MAMPFER2                   184
+#define GFX_DYNABOMB                   188
+#define GFX_DYNABOMB_NR                        188
+#define GFX_DYNABOMB_SZ                        191
 /* Zeile 12 (192) */
-#define GFX_PFEIL_LEFT         192
-#define GFX_PFEIL_RIGHT                193
-#define GFX_PFEIL_UP           194
-#define GFX_PFEIL_DOWN         195
-#define GFX_BUTTERFLY          196
-#define GFX_FIREFLY            198
-#define GFX_BUTTERFLY_RIGHT    200
-#define GFX_BUTTERFLY_UP       201
-#define GFX_BUTTERFLY_LEFT     202
-#define GFX_BUTTERFLY_DOWN     203
-#define GFX_FIREFLY_RIGHT      204
-#define GFX_FIREFLY_UP         205
-#define GFX_FIREFLY_LEFT       206
-#define GFX_FIREFLY_DOWN       207
+#define GFX_PFEIL_LEFT                 192
+#define GFX_PFEIL_RIGHT                        193
+#define GFX_PFEIL_UP                   194
+#define GFX_PFEIL_DOWN                 195
+#define GFX_BUTTERFLY                  196
+#define GFX_FIREFLY                    198
+#define GFX_BUTTERFLY_RIGHT            200
+#define GFX_BUTTERFLY_UP               201
+#define GFX_BUTTERFLY_LEFT             202
+#define GFX_BUTTERFLY_DOWN             203
+#define GFX_FIREFLY_RIGHT              204
+#define GFX_FIREFLY_UP                 205
+#define GFX_FIREFLY_LEFT               206
+#define GFX_FIREFLY_DOWN               207
 
 /* only available as size MINI_TILE */
-#define GFX_VSTEEL_UPPER_LEFT  208
-#define GFX_VSTEEL_UPPER_RIGHT 209
-#define GFX_VSTEEL_LOWER_LEFT  210
-#define GFX_VSTEEL_LOWER_RIGHT 211
-#define GFX_VSTEEL_HORIZONTAL  212
-#define GFX_VSTEEL_VERTICAL    213
-#define GFX_ISTEEL_UPPER_LEFT  214
-#define GFX_ISTEEL_UPPER_RIGHT 215
-#define GFX_ISTEEL_LOWER_LEFT  216
-#define GFX_ISTEEL_LOWER_RIGHT 217
-#define GFX_ISTEEL_HORIZONTAL  218
-#define GFX_ISTEEL_VERTICAL    219
+#define GFX_VSTEEL_UPPER_LEFT          208
+#define GFX_VSTEEL_UPPER_RIGHT         209
+#define GFX_VSTEEL_LOWER_LEFT          210
+#define GFX_VSTEEL_LOWER_RIGHT         211
+#define GFX_VSTEEL_HORIZONTAL          212
+#define GFX_VSTEEL_VERTICAL            213
+#define GFX_ISTEEL_UPPER_LEFT          214
+#define GFX_ISTEEL_UPPER_RIGHT         215
+#define GFX_ISTEEL_LOWER_LEFT          216
+#define GFX_ISTEEL_LOWER_RIGHT         217
+#define GFX_ISTEEL_HORIZONTAL          218
+#define GFX_ISTEEL_VERTICAL            219
 
 /* elements with graphics borrowed from other elements */
-#define GFX_SCHLUESSEL         GFX_SCHLUESSEL1
-#define GFX_SPIELFIGUR         GFX_SPIELER1
+#define GFX_SCHLUESSEL                 GFX_SCHLUESSEL1
+#define GFX_SPIELFIGUR                 GFX_SPIELER1
 
 /* graphics from "RocksHeroes" */
 #define GFX_SPIELER1_DOWN      (GFX_START_ROCKSHEROES + 0*HEROES_PER_LINE + 0)
@@ -1479,669 +1369,58 @@ extern struct FileInfo        *image_files, *sound_files;
 
 
 /* values for animation action types */
-#define GFX_ACTION_UNKNOWN             0
-#define GFX_ACTION_DEFAULT             1
-#define GFX_ACTION_WAITING             2
+#define GFX_ACTION_DEFAULT             0
+#define GFX_ACTION_WAITING             1
+#define GFX_ACTION_FALLING             2
 #define GFX_ACTION_MOVING              3
 #define GFX_ACTION_DIGGING             4
-#define GFX_ACTION_COLLECTING          5
-#define GFX_ACTION_PUSHING             6
-#define GFX_ACTION_PASSING             7
-#define GFX_ACTION_IMPACT              8
-#define GFX_ACTION_ACTIVATING          9
-#define GFX_ACTION_BURNING             10
-#define GFX_ACTION_OTHER               11
-
-#define NUM_GFX_ACTIONS                        12
-#define NUM_GFX_ACTIONS_MAPPED         6
+#define GFX_ACTION_SNAPPING            5
+#define GFX_ACTION_COLLECTING          6
+#define GFX_ACTION_PUSHING             7
+#define GFX_ACTION_PASSING             8
+#define GFX_ACTION_IMPACT              9
+#define GFX_ACTION_CRACKING            10
+#define GFX_ACTION_BREAKING            11
+#define GFX_ACTION_ACTIVATING          12
+#define GFX_ACTION_OPENING             13
+#define GFX_ACTION_CLOSING             14
+#define GFX_ACTION_EATING              15
+#define GFX_ACTION_ATTACKING           16
+#define GFX_ACTION_GROWING             17
+#define GFX_ACTION_SHRINKING           18
+#define GFX_ACTION_OTHER               19
+
+#define NUM_GFX_ACTIONS                        20
+#define NUM_GFX_ACTIONS_MAPPED         8
 
 
 /* values for image configuration suffixes */
 #define GFX_ARG_XPOS                           0
 #define GFX_ARG_YPOS                           1
-#define GFX_ARG_FRAMES                         2
-#define GFX_ARG_DELAY                          3
-#define GFX_ARG_PINGPONG                       4
-#define GFX_ARG_PINGPONG2                      5
-#define GFX_ARG_REVERSE                                6
-#define GFX_ARG_GLOBAL_SYNC                    7
-#define GFX_ARG_VERTICAL                       8
-
-/* values for image configuration */
-#define IMG_EMPTY_SPACE                                0
-#define IMG_SAND                               1
-#define IMG_SAND_CRUMBLED                      2
-#define IMG_QUICKSAND_EMPTY                    3
-#define IMG_QUICKSAND_FULL                     4
-#define IMG_QUICKSAND_SLIPPING_THROUGH         5
-#define IMG_STEELWALL                          6
-#define IMG_WALL                               7
-#define IMG_WALL_CRUMBLED                      8
-#define IMG_EMERALD                            9
-#define IMG_EMERALD_FALLING                    10
-#define IMG_DIAMOND                            11
-#define IMG_DIAMOND_FALLING                    12
-#define IMG_ROCK                               13
-#define IMG_ROCK_FALLING                       14
-#define IMG_ROCK_PUSHING                       15
-#define IMG_ACIDPOOL_TOPLEFT                   16
-#define IMG_ACIDPOOL_TOPRIGHT                  17
-#define IMG_ACIDPOOL_BOTTOMLEFT                        18
-#define IMG_ACIDPOOL_BOTTOM                    19
-#define IMG_ACIDPOOL_BOTTOMRIGHT               20
-#define IMG_ACID                               21
-#define IMG_KEY1                               22
-#define IMG_KEY2                               23
-#define IMG_KEY3                               24
-#define IMG_KEY4                               25
-#define IMG_GAMEOFLIFE                         26
-#define IMG_BIOMAZE                            27
-#define IMG_BOMB                               28
-#define IMG_NUT                                        29
-#define IMG_NUT_CRACKING                       30
-#define IMG_GATE1                              31
-#define IMG_GATE2                              32
-#define IMG_GATE3                              33
-#define IMG_GATE4                              34
-#define IMG_GATE1_GRAY                         35
-#define IMG_GATE2_GRAY                         36
-#define IMG_GATE3_GRAY                         37
-#define IMG_GATE4_GRAY                         38
-#define IMG_DYNAMITE                           39
-#define IMG_DYNAMITE_BURNING                   40
-#define IMG_SPACESHIP_RIGHT                    41
-#define IMG_SPACESHIP_UP                       42
-#define IMG_SPACESHIP_LEFT                     43
-#define IMG_SPACESHIP_DOWN                     44
-#define IMG_BUG_RIGHT                          45
-#define IMG_BUG_UP                             46
-#define IMG_BUG_LEFT                           47
-#define IMG_BUG_DOWN                           48
-#define IMG_PACMAN_RIGHT                       49
-#define IMG_PACMAN_UP                          50
-#define IMG_PACMAN_LEFT                                51
-#define IMG_PACMAN_DOWN                                52
-#define IMG_EXPLOSION                          53
-#define IMG_YAMYAM                             54
-#define IMG_YAMYAM_MOVING                      55
-#define IMG_ROBOT                              56
-#define IMG_ROBOT_WHEEL                                57
-#define IMG_AMOEBA_DROP                                58
-#define IMG_AMOEBA_GROWING                     59
-#define IMG_AMOEBA                             60
-#define IMG_AMOEBA_DEAD                                61
-#define IMG_LAMP_OFF                           62
-#define IMG_LAMP_ON                            63
-#define IMG_TIME_ORB_FULL                      64
-#define IMG_TIME_ORB_EMPTY                     65
-#define IMG_BD_AMOEBA                          66
-#define IMG_SOKOBAN_OBJECT                     67
-#define IMG_SOKOBAN_FIELD_EMPTY                        68
-#define IMG_SOKOBAN_FIELD_FULL                 69
-#define IMG_MAGIC_WALL                         70
-#define IMG_MAGIC_WALL_RUNNING                 71
-#define IMG_BD_MAGIC_WALL                      72
-#define IMG_BD_MAGIC_WALL_RUNNING              73
-#define IMG_WALL_EMERALD                       74
-#define IMG_WALL_DIAMOND                       75
-#define IMG_WALL_EMERALD_RED                   76
-#define IMG_WALL_EMERALD_PURPLE                        77
-#define IMG_WALL_EMERALD_YELLOW                        78
-#define IMG_WALL_BD_DIAMOND                    79
-#define IMG_EMERALD_RED                                80
-#define IMG_EMERALD_RED_FALLING                        81
-#define IMG_EMERALD_PURPLE                     82
-#define IMG_EMERALD_PURPLE_FALLING             83
-#define IMG_EMERALD_YELLOW                     84
-#define IMG_EMERALD_YELLOW_FALLING             85
-#define IMG_WALL_GROWING_XY                    86
-#define IMG_WALL_GROWING_X                     87
-#define IMG_WALL_GROWING_Y                     88
-#define IMG_DYNABOMB_XL                                89
-#define IMG_BLACK_ORB                          90
-#define IMG_SPEED_PILL                         91
-#define IMG_BD_DIAMOND                         92
-#define IMG_BD_DIAMOND_FALLING                 93
-#define IMG_WALL_GROWING_RIGHT                 94
-#define IMG_WALL_GROWING_LEFT                  95
-#define IMG_EXIT_CLOSED                                96
-#define IMG_EXIT_OPENING                       97
-#define IMG_EXIT_OPEN                          98
-#define IMG_DARK_YAMYAM                                99
-#define IMG_DYNABOMB_BURNING                   100
-#define IMG_DYNABOMB_NR                                101
-#define IMG_DYNABOMB_SZ                                102
-#define IMG_ARROW_LEFT                         103
-#define IMG_ARROW_RIGHT                                104
-#define IMG_ARROW_UP                           105
-#define IMG_ARROW_DOWN                         106
-#define IMG_BD_BUTTERFLY                       107
-#define IMG_BD_BUTTERFLY_MOVING                        108
-#define IMG_BD_BUTTERFLY_RIGHT                 109
-#define IMG_BD_BUTTERFLY_UP                    110
-#define IMG_BD_BUTTERFLY_LEFT                  111
-#define IMG_BD_BUTTERFLY_DOWN                  112
-#define IMG_BD_FIREFLY                         113
-#define IMG_BD_FIREFLY_MOVING                  114
-#define IMG_BD_FIREFLY_RIGHT                   115
-#define IMG_BD_FIREFLY_UP                      116
-#define IMG_BD_FIREFLY_LEFT                    117
-#define IMG_BD_FIREFLY_DOWN                    118
-#define IMG_STEELWALL_TOPLEFT                  119
-#define IMG_STEELWALL_TOPRIGHT                 120
-#define IMG_STEELWALL_BOTTOMLEFT               121
-#define IMG_STEELWALL_BOTTOMRIGHT              122
-#define IMG_STEELWALL_HORIZONTAL               123
-#define IMG_INVISIBLE_STEELWALL_TOPLEFT                124
-#define IMG_INVISIBLE_STEELWALL_TOPRIGHT       125
-#define IMG_INVISIBLE_STEELWALL_BOTTOMLEFT     126
-#define IMG_INVISIBLE_STEELWALL_BOTTOMRIGHT    127
-#define IMG_INVISIBLE_STEELWALL_HORIZONTAL     128
-#define IMG_PLAYER1_DOWN                       129
-#define IMG_PLAYER1_DOWN_MOVING                        130
-#define IMG_PLAYER1_DOWN_DIGGING               131
-#define IMG_PLAYER1_UP                         132
-#define IMG_PLAYER1_UP_MOVING                  133
-#define IMG_PLAYER1_UP_DIGGING                 134
-#define IMG_PLAYER1_LEFT                       135
-#define IMG_PLAYER1_LEFT_MOVING                        136
-#define IMG_PLAYER1_LEFT_DIGGING               137
-#define IMG_PLAYER1_LEFT_PUSHING               138
-#define IMG_PLAYER1_RIGHT                      139
-#define IMG_PLAYER1_RIGHT_MOVING               140
-#define IMG_PLAYER1_RIGHT_DIGGING              141
-#define IMG_PLAYER1_RIGHT_PUSHING              142
-#define IMG_PLAYER2_DOWN                       143
-#define IMG_PLAYER2_DOWN_MOVING                        144
-#define IMG_PLAYER2_DOWN_DIGGING               145
-#define IMG_PLAYER2_UP                         146
-#define IMG_PLAYER2_UP_MOVING                  147
-#define IMG_PLAYER2_UP_DIGGING                 148
-#define IMG_PLAYER2_LEFT                       149
-#define IMG_PLAYER2_LEFT_MOVING                        150
-#define IMG_PLAYER2_LEFT_DIGGING               151
-#define IMG_PLAYER2_LEFT_PUSHING               152
-#define IMG_PLAYER2_RIGHT                      153
-#define IMG_PLAYER2_RIGHT_MOVING               154
-#define IMG_PLAYER2_RIGHT_DIGGING              155
-#define IMG_PLAYER2_RIGHT_PUSHING              156
-#define IMG_PLAYER3_DOWN                       157
-#define IMG_PLAYER3_DOWN_MOVING                        158
-#define IMG_PLAYER3_DOWN_DIGGING               159
-#define IMG_PLAYER3_UP                         160
-#define IMG_PLAYER3_UP_MOVING                  161
-#define IMG_PLAYER3_UP_DIGGING                 162
-#define IMG_PLAYER3_LEFT                       163
-#define IMG_PLAYER3_LEFT_MOVING                        164
-#define IMG_PLAYER3_LEFT_DIGGING               165
-#define IMG_PLAYER3_LEFT_PUSHING               166
-#define IMG_PLAYER3_RIGHT                      167
-#define IMG_PLAYER3_RIGHT_MOVING               168
-#define IMG_PLAYER3_RIGHT_DIGGING              169
-#define IMG_PLAYER3_RIGHT_PUSHING              170
-#define IMG_PLAYER4_DOWN                       171
-#define IMG_PLAYER4_DOWN_MOVING                        172
-#define IMG_PLAYER4_DOWN_DIGGING               173
-#define IMG_PLAYER4_UP                         174
-#define IMG_PLAYER4_UP_MOVING                  175
-#define IMG_PLAYER4_UP_DIGGING                 176
-#define IMG_PLAYER4_LEFT                       177
-#define IMG_PLAYER4_LEFT_MOVING                        178
-#define IMG_PLAYER4_LEFT_DIGGING               179
-#define IMG_PLAYER4_LEFT_PUSHING               180
-#define IMG_PLAYER4_RIGHT                      181
-#define IMG_PLAYER4_RIGHT_MOVING               182
-#define IMG_PLAYER4_RIGHT_DIGGING              183
-#define IMG_PLAYER4_RIGHT_PUSHING              184
-#define IMG_WALL_GROWING_DOWN                  185
-#define IMG_WALL_GROWING_UP                    186
-#define IMG_SHIELD_PASSIVE_ACTIVATED           187
-#define IMG_SHIELD_ACTIVE_ACTIVATED            188
-#define IMG_PIG_DOWN                           189
-#define IMG_PIG_DOWN_MOVING                    190
-#define IMG_PIG_DOWN_EATING                    191
-#define IMG_PIG_UP                             192
-#define IMG_PIG_UP_MOVING                      193
-#define IMG_PIG_UP_EATING                      194
-#define IMG_PIG_LEFT                           195
-#define IMG_PIG_LEFT_MOVING                    196
-#define IMG_PIG_LEFT_EATING                    197
-#define IMG_PIG_RIGHT                          198
-#define IMG_PIG_RIGHT_MOVING                   199
-#define IMG_PIG_RIGHT_EATING                   200
-#define IMG_DRAGON_DOWN                                201
-#define IMG_DRAGON_DOWN_MOVING                 202
-#define IMG_DRAGON_DOWN_ATTACKING              203
-#define IMG_DRAGON_UP                          204
-#define IMG_DRAGON_UP_MOVING                   205
-#define IMG_DRAGON_UP_ATTACKING                        206
-#define IMG_DRAGON_LEFT                                207
-#define IMG_DRAGON_LEFT_MOVING                 208
-#define IMG_DRAGON_LEFT_ATTACKING              209
-#define IMG_DRAGON_RIGHT                       210
-#define IMG_DRAGON_RIGHT_MOVING                        211
-#define IMG_DRAGON_RIGHT_ATTACKING             212
-#define IMG_MOLE_DOWN                          213
-#define IMG_MOLE_DOWN_MOVING                   214
-#define IMG_MOLE_DOWN_DIGGING                  215
-#define IMG_MOLE_UP                            216
-#define IMG_MOLE_UP_MOVING                     217
-#define IMG_MOLE_UP_DIGGING                    218
-#define IMG_MOLE_LEFT                          219
-#define IMG_MOLE_LEFT_MOVING                   220
-#define IMG_MOLE_LEFT_DIGGING                  221
-#define IMG_MOLE_RIGHT                         222
-#define IMG_MOLE_RIGHT_MOVING                  223
-#define IMG_MOLE_RIGHT_DIGGING                 224
-#define IMG_PENGUIN_DOWN                       225
-#define IMG_PENGUIN_DOWN_MOVING                        226
-#define IMG_PENGUIN_UP                         227
-#define IMG_PENGUIN_UP_MOVING                  228
-#define IMG_PENGUIN_LEFT                       229
-#define IMG_PENGUIN_LEFT_MOVING                        230
-#define IMG_PENGUIN_RIGHT                      231
-#define IMG_PENGUIN_RIGHT_MOVING               232
-#define IMG_SATELLITE                          233
-#define IMG_SATELLITE_MOVING                   234
-#define IMG_ACID_SPLASHING_LEFT                        235
-#define IMG_ACID_SPLASHING_RIGHT               236
-#define IMG_SPARKLING_BLUE                     237
-#define IMG_SPARKLING_WHITE                    238
-#define IMG_FLAMES_LEFT1                       239
-#define IMG_FLAMES_LEFT2                       240
-#define IMG_FLAMES_LEFT3                       241
-#define IMG_FLAMES_RIGHT1                      242
-#define IMG_FLAMES_RIGHT2                      243
-#define IMG_FLAMES_RIGHT3                      244
-#define IMG_FLAMES_UP1                         245
-#define IMG_FLAMES_UP2                         246
-#define IMG_FLAMES_UP3                         247
-#define IMG_FLAMES_DOWN1                       248
-#define IMG_FLAMES_DOWN2                       249
-#define IMG_FLAMES_DOWN3                       250
-#define IMG_SP_EMPTY_SPACE                     251
-#define IMG_SP_ZONK                            252
-#define IMG_SP_ZONK_FALLING                    253
-#define IMG_SP_ZONK_PUSHING                    254
-#define IMG_SP_BASE                            255
-#define IMG_SP_MURPHY                          256
-#define IMG_SP_MURPHY_LEFT                     257
-#define IMG_SP_MURPHY_LEFT_MOVING              258
-#define IMG_SP_MURPHY_LEFT_DIGGING             259
-#define IMG_SP_MURPHY_LEFT_PUSHING             260
-#define IMG_SP_MURPHY_LEFT_SNAPPING            261
-#define IMG_SP_MURPHY_RIGHT                    262
-#define IMG_SP_MURPHY_RIGHT_MOVING             263
-#define IMG_SP_MURPHY_RIGHT_DIGGING            264
-#define IMG_SP_MURPHY_RIGHT_PUSHING            265
-#define IMG_SP_MURPHY_RIGHT_SNAPPING           266
-#define IMG_SP_MURPHY_UP                       267
-#define IMG_SP_MURPHY_UP_SNAPPING              268
-#define IMG_SP_MURPHY_DOWN                     269
-#define IMG_SP_MURPHY_DOWN_SNAPPING            270
-#define IMG_SP_MURPHY_CLONE                    271
-#define IMG_SP_INFOTRON                                272
-#define IMG_SP_INFOTRON_FALLING                        273
-#define IMG_SP_CHIP_SINGLE                     274
-#define IMG_SP_CHIP_LEFT                       275
-#define IMG_SP_CHIP_RIGHT                      276
-#define IMG_SP_CHIP_UPPER                      277
-#define IMG_SP_CHIP_LOWER                      278
-#define IMG_SP_HARD_GRAY                       279
-#define IMG_SP_HARD_GREEN                      280
-#define IMG_SP_HARD_BLUE                       281
-#define IMG_SP_HARD_RED                                282
-#define IMG_SP_HARD_YELLOW                     283
-#define IMG_SP_EXIT_CLOSED                     284
-#define IMG_SP_EXIT_OPEN                       285
-#define IMG_SP_DISK_ORANGE                     286
-#define IMG_SP_DISK_ORANGE_FALLING             287
-#define IMG_SP_DISK_ORANGE_PUSHING             288
-#define IMG_SP_DISK_YELLOW                     289
-#define IMG_SP_DISK_YELLOW_PUSHING             290
-#define IMG_SP_DISK_RED                                291
-#define IMG_SP_DISK_RED_COLLECTING             292
-#define IMG_SP_PORT1_RIGHT                     293
-#define IMG_SP_PORT1_DOWN                      294
-#define IMG_SP_PORT1_LEFT                      295
-#define IMG_SP_PORT1_UP                                296
-#define IMG_SP_PORT2_RIGHT                     297
-#define IMG_SP_PORT2_DOWN                      298
-#define IMG_SP_PORT2_LEFT                      299
-#define IMG_SP_PORT2_UP                                300
-#define IMG_SP_PORT_X                          301
-#define IMG_SP_PORT_Y                          302
-#define IMG_SP_PORT_XY                         303
-#define IMG_SP_SNIKSNAK                                304
-#define IMG_SP_SNIKSNAK_LEFT                   305
-#define IMG_SP_SNIKSNAK_RIGHT                  306
-#define IMG_SP_SNIKSNAK_UP                     307
-#define IMG_SP_SNIKSNAK_DOWN                   308
-#define IMG_SP_ELECTRON                                309
-#define IMG_SP_TERMINAL                                310
-#define IMG_SP_TERMINAL_ACTIVE                 311
-#define IMG_SP_BUGGY_BASE                      312
-#define IMG_SP_BUGGY_BASE_ACTIVATING           313
-#define IMG_SP_HARD_BASE1                      314
-#define IMG_SP_HARD_BASE2                      315
-#define IMG_SP_HARD_BASE3                      316
-#define IMG_SP_HARD_BASE4                      317
-#define IMG_SP_HARD_BASE5                      318
-#define IMG_SP_HARD_BASE6                      319
-#define IMG_INVISIBLE_STEELWALL                        320
-#define IMG_INVISIBLE_STEELWALL_ON             321
-#define IMG_INVISIBLE_SAND                     322
-#define IMG_INVISIBLE_SAND_ON                  323
-#define IMG_INVISIBLE_WALL                     324
-#define IMG_INVISIBLE_WALL_ON                  325
-#define IMG_EM_KEY1                            326
-#define IMG_EM_KEY2                            327
-#define IMG_EM_KEY3                            328
-#define IMG_EM_KEY4                            329
-#define IMG_EM_GATE1                           330
-#define IMG_EM_GATE2                           331
-#define IMG_EM_GATE3                           332
-#define IMG_EM_GATE4                           333
-#define IMG_EM_GATE1_GRAY                      334
-#define IMG_EM_GATE2_GRAY                      335
-#define IMG_EM_GATE3_GRAY                      336
-#define IMG_EM_GATE4_GRAY                      337
-#define IMG_SP_EXPLOSION                       338
-#define IMG_SP_EXPLOSION_INFOTRON              339
-#define IMG_CONVEYOR_BELT1_MIDDLE              340
-#define IMG_CONVEYOR_BELT1_MIDDLE_RUNNING      341
-#define IMG_CONVEYOR_BELT1_LEFT                        342
-#define IMG_CONVEYOR_BELT1_LEFT_RUNNING                343
-#define IMG_CONVEYOR_BELT1_RIGHT               344
-#define IMG_CONVEYOR_BELT1_RIGHT_RUNNING       345
-#define IMG_CONVEYOR_BELT1_SWITCH_LEFT         346
-#define IMG_CONVEYOR_BELT1_SWITCH_MIDDLE       347
-#define IMG_CONVEYOR_BELT1_SWITCH_RIGHT                348
-#define IMG_CONVEYOR_BELT2_MIDDLE              349
-#define IMG_CONVEYOR_BELT2_MIDDLE_RUNNING      350
-#define IMG_CONVEYOR_BELT2_LEFT                        351
-#define IMG_CONVEYOR_BELT2_LEFT_RUNNING                352
-#define IMG_CONVEYOR_BELT2_RIGHT               353
-#define IMG_CONVEYOR_BELT2_RIGHT_RUNNING       354
-#define IMG_CONVEYOR_BELT2_SWITCH_LEFT         355
-#define IMG_CONVEYOR_BELT2_SWITCH_MIDDLE       356
-#define IMG_CONVEYOR_BELT2_SWITCH_RIGHT                357
-#define IMG_CONVEYOR_BELT3_MIDDLE              358
-#define IMG_CONVEYOR_BELT3_MIDDLE_RUNNING      359
-#define IMG_CONVEYOR_BELT3_LEFT                        360
-#define IMG_CONVEYOR_BELT3_LEFT_RUNNING                361
-#define IMG_CONVEYOR_BELT3_RIGHT               362
-#define IMG_CONVEYOR_BELT3_RIGHT_RUNNING       363
-#define IMG_CONVEYOR_BELT3_SWITCH_LEFT         364
-#define IMG_CONVEYOR_BELT3_SWITCH_MIDDLE       365
-#define IMG_CONVEYOR_BELT3_SWITCH_RIGHT                366
-#define IMG_CONVEYOR_BELT4_MIDDLE              367
-#define IMG_CONVEYOR_BELT4_MIDDLE_RUNNING      368
-#define IMG_CONVEYOR_BELT4_LEFT                        369
-#define IMG_CONVEYOR_BELT4_LEFT_RUNNING                370
-#define IMG_CONVEYOR_BELT4_RIGHT               371
-#define IMG_CONVEYOR_BELT4_RIGHT_RUNNING       372
-#define IMG_CONVEYOR_BELT4_SWITCH_LEFT         373
-#define IMG_CONVEYOR_BELT4_SWITCH_MIDDLE       374
-#define IMG_CONVEYOR_BELT4_SWITCH_RIGHT                375
-#define IMG_SWITCHGATE_SWITCH_UP               376
-#define IMG_SWITCHGATE_SWITCH_DOWN             377
-#define IMG_LIGHT_SWITCH_OFF                   378
-#define IMG_LIGHT_SWITCH_ON                    379
-#define IMG_TIMEGATE_WHEEL                     380
-#define IMG_TIMEGATE_WHEEL_RUNNING             381
-#define IMG_ENVELOPE                           382
-#define IMG_SIGN_EXCLAMATION                   383
-#define IMG_SIGN_STOP                          384
-#define IMG_LANDMINE                           385
-#define IMG_STEELWALL_SLANTED                  386
-#define IMG_EXTRA_TIME                         387
-#define IMG_SHIELD_ACTIVE                      388
-#define IMG_SHIELD_PASSIVE                     389
-#define IMG_SWITCHGATE_CLOSED                  390
-#define IMG_SWITCHGATE_OPENING                 391
-#define IMG_SWITCHGATE_OPEN                    392
-#define IMG_SWITCHGATE_CLOSING                 393
-#define IMG_TIMEGATE_CLOSED                    394
-#define IMG_TIMEGATE_OPENING                   395
-#define IMG_TIMEGATE_OPEN                      396
-#define IMG_TIMEGATE_CLOSING                   397
-#define IMG_BALLOON                            398
-#define IMG_BALLOON_MOVING                     399
-#define IMG_BALLOON_WINDROSE_LEFT              400
-#define IMG_BALLOON_WINDROSE_RIGHT             401
-#define IMG_BALLOON_WINDROSE_UP                        402
-#define IMG_BALLOON_WINDROSE_DOWN              403
-#define IMG_BALLOON_WINDROSE_ALL               404
-#define IMG_EMC_STEELWALL1                     405
-#define IMG_EMC_STEELWALL2                     406
-#define IMG_EMC_STEELWALL3                     407
-#define IMG_EMC_STEELWALL4                     408
-#define IMG_EMC_WALL_PILLAR_UPPER              409
-#define IMG_EMC_WALL_PILLAR_MIDDLE             410
-#define IMG_EMC_WALL_PILLAR_LOWER              411
-#define IMG_EMC_WALL4                          412
-#define IMG_EMC_WALL5                          413
-#define IMG_EMC_WALL6                          414
-#define IMG_EMC_WALL7                          415
-#define IMG_EMC_WALL8                          416
-#define IMG_ARROW_BLUE_LEFT                    417
-#define IMG_ARROW_BLUE_RIGHT                   418
-#define IMG_ARROW_BLUE_UP                      419
-#define IMG_ARROW_BLUE_DOWN                    420
-#define IMG_ARROW_RED_LEFT                     421
-#define IMG_ARROW_RED_RIGHT                    422
-#define IMG_ARROW_RED_UP                       423
-#define IMG_ARROW_RED_DOWN                     424
-#define IMG_SCROLLBAR_BLUE                     425
-#define IMG_SCROLLBAR_RED                      426
-#define IMG_SCROLLBAR_GREEN                    427
-#define IMG_SCROLLBAR_YELLOW                   428
-#define IMG_PEARL                              429
-#define IMG_PEARL_BREAKING                     430
-#define IMG_CRYSTAL                            431
-#define IMG_WALL_PEARL                         432
-#define IMG_WALL_CRYSTAL                       433
-#define IMG_SPRING                             434
-#define IMG_TUBE_RIGHT_DOWN                    435
-#define IMG_TUBE_HORIZONTAL_DOWN               436
-#define IMG_TUBE_LEFT_DOWN                     437
-#define IMG_TUBE_HORIZONTAL                    438
-#define IMG_TUBE_VERTICAL_RIGHT                        439
-#define IMG_TUBE_ALL                           440
-#define IMG_TUBE_VERTICAL_LEFT                 441
-#define IMG_TUBE_VERTICAL                      442
-#define IMG_TUBE_RIGHT_UP                      443
-#define IMG_TUBE_HORIZONTAL_UP                 444
-#define IMG_TUBE_LEFT_UP                       445
-#define IMG_TRAP_INACTIVE                      446
-#define IMG_TRAP_ACTIVE                                447
-#define IMG_TRAP_ACTIVATING                    448
-#define IMG_BD_WALL                            449
-#define IMG_BD_ROCK                            450
-#define IMG_BD_ROCK_FALLING                    451
-#define IMG_BD_ROCK_PUSHING                    452
-#define IMG_DX_BOMB                            453
-
-#define NUM_IMAGE_FILES                                454
+#define GFX_ARG_OFFSET                         2
+#define GFX_ARG_VERTICAL                       3
+#define GFX_ARG_XOFFSET                                4
+#define GFX_ARG_YOFFSET                                5
+#define GFX_ARG_FRAMES                         6
+#define GFX_ARG_START_FRAME                    7
+#define GFX_ARG_DELAY                          8
+#define GFX_ARG_MODE_LOOP                      9
+#define GFX_ARG_MODE_LINEAR                    10
+#define GFX_ARG_MODE_PINGPONG                  11
+#define GFX_ARG_MODE_PINGPONG2                 12
+#define GFX_ARG_MODE_RANDOM                    13
+#define GFX_ARG_MODE_REVERSE                   14
+#define GFX_ARG_GLOBAL_SYNC                    15
+
+#define NUM_GFX_ARGS                           16
+
+#define GFX_ARG_UNDEFINED                      "-1000000"
+#define GFX_ARG_UNDEFINED_VALUE                        (atoi(GFX_ARG_UNDEFINED))
 
 
 /* values for sound configuration suffixes */
 /* (currently none) */
 
-/* values for sound configuration */
-#define SND_BD_EMPTY_SPACE_DIGGING             0
-#define SND_BD_SAND_DIGGING                    1
-#define SND_BD_DIAMOND_COLLECTING              2
-#define SND_BD_DIAMOND_IMPACT                  3
-#define SND_BD_ROCK_PUSHING                    4
-#define SND_BD_ROCK_IMPACT                     5
-#define SND_BD_MAGIC_WALL_ACTIVATING           6
-#define SND_BD_MAGIC_WALL_CHANGING             7
-#define SND_BD_MAGIC_WALL_RUNNING              8
-#define SND_BD_AMOEBA_WAITING                  9
-#define SND_BD_AMOEBA_CREATING                 10
-#define SND_BD_AMOEBA_TURNING_TO_GEM           11
-#define SND_BD_AMOEBA_TURNING_TO_ROCK          12
-#define SND_BD_BUTTERFLY_MOVING                        13
-#define SND_BD_BUTTERFLY_WAITING               14
-#define SND_BD_FIREFLY_MOVING                  15
-#define SND_BD_FIREFLY_WAITING                 16
-#define SND_BD_EXIT_ENTERING                   17
-#define SND_SP_EMPTY_SPACE_DIGGING             18
-#define SND_SP_BASE_DIGGING                    19
-#define SND_SP_BUGGY_BASE_DIGGING              20
-#define SND_SP_BUGGY_BASE_ACTIVATING           21
-#define SND_SP_INFOTRON_COLLECTING             22
-#define SND_SP_INFOTRON_IMPACT                 23
-#define SND_SP_ZONK_PUSHING                    24
-#define SND_SP_ZONK_IMPACT                     25
-#define SND_SP_DISK_RED_COLLECTING             26
-#define SND_SP_DISK_ORANGE_PUSHING             27
-#define SND_SP_DISK_YELLOW_PUSHING             28
-#define SND_SP_PORT_PASSING                    29
-#define SND_SP_EXIT_ENTERING                   30
-#define SND_SP_ELEMENT_EXPLODING               31
-#define SND_SP_SNIKSNAK_MOVING                 32
-#define SND_SP_SNIKSNAK_WAITING                        33
-#define SND_SP_ELECTRON_MOVING                 34
-#define SND_SP_ELECTRON_WAITING                        35
-#define SND_SP_TERMINAL_ACTIVATING             36
-#define SND_SOKOBAN_OBJECT_PUSHING             37
-#define SND_SOKOBAN_FIELD_FILLING              38
-#define SND_SOKOBAN_FIELD_CLEARING             39
-#define SND_SOKOBAN_GAME_SOLVING               40
-#define SND_EMPTY_SPACE_DIGGING                        41
-#define SND_SAND_DIGGING                       42
-#define SND_EMERALD_COLLECTING                 43
-#define SND_EMERALD_IMPACT                     44
-#define SND_DIAMOND_COLLECTING                 45
-#define SND_DIAMOND_IMPACT                     46
-#define SND_DIAMOND_BREAKING                   47
-#define SND_ROCK_PUSHING                       48
-#define SND_ROCK_IMPACT                                49
-#define SND_BOMB_PUSHING                       50
-#define SND_NUT_PUSHING                                51
-#define SND_NUT_CRACKING                       52
-#define SND_NUT_IMPACT                         53
-#define SND_DYNAMITE_COLLECTING                        54
-#define SND_DYNAMITE_PLACING                   55
-#define SND_DYNAMITE_BURNING                   56
-#define SND_KEY_COLLECTING                     57
-#define SND_GATE_PASSING                       58
-#define SND_BUG_MOVING                         59
-#define SND_BUG_WAITING                                60
-#define SND_SPACESHIP_MOVING                   61
-#define SND_SPACESHIP_WAITING                  62
-#define SND_YAMYAM_MOVING                      63
-#define SND_YAMYAM_WAITING                     64
-#define SND_YAMYAM_EATING_DIAMOND              65
-#define SND_ROBOT_STEPPING                     66
-#define SND_ROBOT_WAITING                      67
-#define SND_ROBOT_WHEEL_ACTIVATING             68
-#define SND_ROBOT_WHEEL_RUNNING                        69
-#define SND_MAGIC_WALL_ACTIVATING              70
-#define SND_MAGIC_WALL_CHANGING                        71
-#define SND_MAGIC_WALL_RUNNING                 72
-#define SND_AMOEBA_WAITING                     73
-#define SND_AMOEBA_CREATING                    74
-#define SND_AMOEBA_DROPPING                    75
-#define SND_ACID_SPLASHING                     76
-#define SND_QUICKSAND_FILLING                  77
-#define SND_QUICKSAND_SLIPPING_THROUGH         78
-#define SND_QUICKSAND_EMPTYING                 79
-#define SND_EXIT_OPENING                       80
-#define SND_EXIT_ENTERING                      81
-#define SND_BALLOON_MOVING                     82
-#define SND_BALLOON_WAITING                    83
-#define SND_BALLOON_PUSHING                    84
-#define SND_BALLOON_SWITCH_ACTIVATING          85
-#define SND_SPRING_MOVING                      86
-#define SND_SPRING_PUSHING                     87
-#define SND_SPRING_IMPACT                      88
-#define SND_WALL_GROWING                       89
-#define SND_PEARL_COLLECTING                   90
-#define SND_PEARL_BREAKING                     91
-#define SND_PEARL_IMPACT                       92
-#define SND_CRYSTAL_COLLECTING                 93
-#define SND_CRYSTAL_IMPACT                     94
-#define SND_ENVELOPE_COLLECTING                        95
-#define SND_SAND_INVISIBLE_DIGGING             96
-#define SND_SHIELD_PASSIVE_COLLECTING          97
-#define SND_SHIELD_PASSIVE_ACTIVATED           98
-#define SND_SHIELD_ACTIVE_COLLECTING           99
-#define SND_SHIELD_ACTIVE_ACTIVATED            100
-#define SND_EXTRA_TIME_COLLECTING              101
-#define SND_MOLE_MOVING                                102
-#define SND_MOLE_WAITING                       103
-#define SND_MOLE_EATING_AMOEBA                 104
-#define SND_SWITCHGATE_SWITCH_ACTIVATING       105
-#define SND_SWITCHGATE_OPENING                 106
-#define SND_SWITCHGATE_CLOSING                 107
-#define SND_SWITCHGATE_PASSING                 108
-#define SND_TIMEGATE_WHEEL_ACTIVATING          109
-#define SND_TIMEGATE_WHEEL_RUNNING             110
-#define SND_TIMEGATE_OPENING                   111
-#define SND_TIMEGATE_CLOSING                   112
-#define SND_TIMEGATE_PASSING                   113
-#define SND_CONVEYOR_BELT_SWITCH_ACTIVATING    114
-#define SND_CONVEYOR_BELT_RUNNING              115
-#define SND_LIGHT_SWITCH_ACTIVATING            116
-#define SND_LIGHT_SWITCH_DEACTIVATING          117
-#define SND_DX_BOMB_PUSHING                    118
-#define SND_TRAP_INACTIVE_DIGGING              119
-#define SND_TRAP_ACTIVATING                    120
-#define SND_TUBE_PASSING                       121
-#define SND_AMOEBA_TURNING_TO_GEM              122
-#define SND_AMOEBA_TURNING_TO_ROCK             123
-#define SND_SPEED_PILL_COLLECTING              124
-#define SND_DYNABOMB_NR_COLLECTING             125
-#define SND_DYNABOMB_SZ_COLLECTING             126
-#define SND_DYNABOMB_XL_COLLECTING             127
-#define SND_DYNABOMB_PLACING                   128
-#define SND_DYNABOMB_BURNING                   129
-#define SND_SATELLITE_MOVING                   130
-#define SND_SATELLITE_WAITING                  131
-#define SND_SATELLITE_PUSHING                  132
-#define SND_LAMP_ACTIVATING                    133
-#define SND_LAMP_DEACTIVATING                  134
-#define SND_TIME_ORB_FULL_COLLECTING           135
-#define SND_TIME_ORB_FULL_IMPACT               136
-#define SND_TIME_ORB_EMPTY_PUSHING             137
-#define SND_TIME_ORB_EMPTY_IMPACT              138
-#define SND_GAMEOFLIFE_WAITING                 139
-#define SND_GAMEOFLIFE_CREATING                        140
-#define SND_BIOMAZE_WAITING                    141
-#define SND_BIOMAZE_CREATING                   142
-#define SND_PACMAN_MOVING                      143
-#define SND_PACMAN_WAITING                     144
-#define SND_PACMAN_EATING_AMOEBA               145
-#define SND_DARK_YAMYAM_MOVING                 146
-#define SND_DARK_YAMYAM_WAITING                        147
-#define SND_DARK_YAMYAM_EATING_ANY             148
-#define SND_PENGUIN_MOVING                     149
-#define SND_PENGUIN_WAITING                    150
-#define SND_PENGUIN_ENTERING_EXIT              151
-#define SND_PIG_MOVING                         152
-#define SND_PIG_WAITING                                153
-#define SND_PIG_EATING_GEM                     154
-#define SND_DRAGON_MOVING                      155
-#define SND_DRAGON_WAITING                     156
-#define SND_DRAGON_ATTACKING                   157
-#define SND_PLAYER_DYING                       158
-#define SND_ELEMENT_EXPLODING                  159
-#define SND_GAME_STARTING                      160
-#define SND_GAME_RUNNING_OUT_OF_TIME           161
-#define SND_GAME_LEVELTIME_BONUS               162
-#define SND_GAME_LOSING                                163
-#define SND_GAME_WINNING                       164
-#define SND_MENU_DOOR_OPENING                  165
-#define SND_MENU_DOOR_CLOSING                  166
-#define SND_MENU_HALL_OF_FAME                  167
-#define SND_MENU_INFO_SCREEN                   168
-
-#define NUM_SOUND_FILES                                169
-
 
 /* values for game_status */
 #define EXITGAME               0
@@ -2155,13 +1434,13 @@ extern struct FileInfo         *image_files, *sound_files;
 #define SETUP                  8
 
 #define PROGRAM_VERSION_MAJOR  2
-#define PROGRAM_VERSION_MINOR  1
-#define PROGRAM_VERSION_PATCH  2
-#define PROGRAM_VERSION_STRING "2.1.2"
+#define PROGRAM_VERSION_MINOR  2
+#define PROGRAM_VERSION_PATCH  0
+#define PROGRAM_VERSION_STRING "2.2.0rc3"
 
 #define PROGRAM_TITLE_STRING   "Rocks'n'Diamonds"
 #define PROGRAM_AUTHOR_STRING  "Holger Schemel"
-#define PROGRAM_RIGHTS_STRING  "Copyright ^1995-2002 by"
+#define PROGRAM_RIGHTS_STRING  "Copyright ^1995-2003 by"
 #define PROGRAM_DOS_PORT_STRING        "DOS port done by Guido Schulz"
 #define PROGRAM_IDENT_STRING   PROGRAM_VERSION_STRING " " TARGET_STRING
 #define WINDOW_TITLE_STRING    PROGRAM_TITLE_STRING " " PROGRAM_IDENT_STRING
@@ -2201,16 +1480,269 @@ extern struct FileInfo        *image_files, *sound_files;
                                              PROGRAM_VERSION_MINOR, \
                                              PROGRAM_VERSION_PATCH)
 
-/* for DrawGraphicAnimation() [tools.c] and AnimateToon() [cartoons.c] */
-#define ANIM_NORMAL            0
-#define ANIM_REVERSE           (1 << 0)
-#define ANIM_PINGPONG          (1 << 1)
-#define ANIM_PINGPONG2         (1 << 2)
-
 /* values for game_emulation */
 #define EMU_NONE               0
 #define EMU_BOULDERDASH                1
 #define EMU_SOKOBAN            2
 #define EMU_SUPAPLEX           3
 
+struct HiScore
+{
+  char Name[MAX_PLAYER_NAME_LEN + 1];
+  int Score;
+};
+
+struct PlayerInfo
+{
+  boolean present;             /* player present in level playfield */
+  boolean connected;           /* player connected (locally or via network) */
+  boolean active;              /* player (present && connected) */
+
+  int index_nr, client_nr, element_nr;
+
+  byte action;                 /* action from local input device */
+  byte effective_action;       /* action acknowledged from network server
+                                  or summarized over all configured input
+                                  devices when in single player mode */
+  byte programmed_action;      /* action forced by game itself (like moving
+                                  through doors); overrides other actions */
+
+  int jx,jy, last_jx,last_jy;
+  int MovDir, MovPos, GfxPos;
+  int Frame;
+
+  boolean Pushing;
+  boolean Switching;
+  boolean LevelSolved, GameOver;
+  boolean snapped;
+
+  int last_move_dir;
+  int is_moving;
+
+  unsigned long move_delay;
+  int move_delay_value;
+
+  unsigned long push_delay;
+  unsigned long push_delay_value;
+
+  int frame_reset_delay;
+
+  unsigned long actual_frame_counter;
+
+  int score;
+  int gems_still_needed;
+  int sokobanfields_still_needed;
+  int lights_still_needed;
+  int friends_still_needed;
+  int key[4];
+  int dynamite;
+  int dynabomb_count, dynabomb_size, dynabombs_left, dynabomb_xl;
+  int shield_normal_time_left;
+  int shield_deadly_time_left;
+};
+
+struct LevelInfo
+{
+  int file_version;    /* file format version the level is stored with    */
+  int game_version;    /* game release version the level was created with */
+
+  boolean encoding_16bit_field;                /* level contains 16-bit elements  */
+  boolean encoding_16bit_yamyam;       /* yamyam contains 16-bit elements */
+  boolean encoding_16bit_amoeba;       /* amoeba contains 16-bit elements */
+
+  int fieldx;
+  int fieldy;
+  int time;
+  int gems_needed;
+  char name[MAX_LEVEL_NAME_LEN + 1];
+  char author[MAX_LEVEL_AUTHOR_LEN + 1];
+  int score[LEVEL_SCORE_ELEMENTS];
+  int yam_content[MAX_ELEMENT_CONTENTS][3][3];
+  int num_yam_contents;
+  int amoeba_speed;
+  int amoeba_content;
+  int time_magic_wall;
+  int time_wheel;
+  int time_light;
+  int time_timegate;
+  boolean double_speed;
+  boolean gravity;
+  boolean em_slippery_gems;    /* EM style "gems slip from wall" behaviour */
+
+  boolean no_level_file;
+};
+
+struct TapeInfo
+{
+  int file_version;    /* file format version the tape is stored with    */
+  int game_version;    /* game release version the tape was created with */
+  int engine_version;  /* game engine version the tape was recorded with */
+
+  int level_nr;
+  unsigned long random_seed;
+  unsigned long date;
+  unsigned long counter;
+  unsigned long length;
+  unsigned long length_seconds;
+  unsigned int delay_played;
+  boolean pause_before_death;
+  boolean recording, playing, pausing;
+  boolean fast_forward;
+  boolean index_search;
+  boolean auto_play;
+  boolean auto_play_level_solved;
+  boolean quick_resume;
+  boolean single_step;
+  boolean changed;
+  boolean player_participates[MAX_PLAYERS];
+  int num_participating_players;
+
+  struct
+  {
+    byte action[MAX_PLAYERS];
+    byte delay;
+  } pos[MAX_TAPELEN];
+};
+
+struct GameInfo
+{
+  /* constant within running game */
+  int engine_version;
+  int emulation;
+  int initial_move_delay;
+  int initial_move_delay_value;
+
+  /* variable within running game */
+  int yam_content_nr;
+  boolean magic_wall_active;
+  int magic_wall_time_left;
+  int light_time_left;
+  int timegate_time_left;
+  int belt_dir[4];
+  int belt_dir_nr[4];
+  int switchgate_pos;
+  int balloon_dir;
+  boolean explosions_delayed;
+};
+
+struct GlobalInfo
+{
+  char *autoplay_leveldir;
+  int autoplay_level_nr;
+
+  float frames_per_second;
+  boolean fps_slowdown;
+  int fps_slowdown_factor;
+};
+
+struct ElementInfo
+{
+  char *sound_class_name;      /* classification for custom sound effects */
+  char *editor_description;    /* short description for level editor */
+
+                               /* default graphics for several actions */
+  int graphic[NUM_GFX_ACTIONS_MAPPED];
+
+                               /* special graphics for left/right/up/down */
+  int direction_graphic[NUM_GFX_ACTIONS_MAPPED][NUM_MV_DIRECTIONS];
+};
+
+struct GraphicInfo
+{
+  Bitmap *bitmap;
+  int src_x, src_y;
+};
+
+struct NewGraphicInfo
+{
+  Bitmap *bitmap;
+  int src_x, src_y;            /* derived from (tile sized) .xpos/.ypos */
+  int offset_x, offset_y;      /* x/y offset to next animation frame */
+  int anim_frames;
+  int anim_start_frame;
+  int anim_delay;              /* important: delay of 1 means "no delay"! */
+  int anim_mode;
+  boolean anim_global_sync;
+
+#if defined(TARGET_X11_NATIVE_PERFORMANCE_WORKAROUND)
+  Pixmap clip_mask;            /* single-graphic-only clip mask for X11 */
+  GC clip_gc;                  /* single-graphic-only clip gc for X11 */
+#endif
+};
+
+#if 0
+extern GC              tile_clip_gc;
+extern Bitmap         *pix[];
+#endif
+extern Bitmap         *bitmap_db_field, *bitmap_db_door;
+extern Pixmap          tile_clipmask[];
+extern DrawBuffer      *fieldbuffer;
+extern DrawBuffer      *drawto_field;
+
+extern int             game_status;
+extern boolean         level_editor_test_game;
+extern boolean         network_playing;
+
+extern int             key_joystick_mapping;
+
+extern boolean         redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE];
+extern int             redraw_x1, redraw_y1;
+
+extern short           Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern short           Ur[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern short           MovPos[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern short           MovDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern short           MovDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern short           Store[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern short           Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern short           StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern boolean         Stop[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           ExplodePhase[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern short           ExplodeField[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+
+extern unsigned long   Properties1[MAX_NUM_ELEMENTS];
+extern unsigned long   Properties2[MAX_NUM_ELEMENTS];
+
+extern int             GfxFrame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern short           GfxAction[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+
+extern int             lev_fieldx,lev_fieldy, scroll_x,scroll_y;
+
+extern int             FX,FY, ScrollStepSize;
+extern int             ScreenMovDir, ScreenMovPos, ScreenGfxPos;
+extern int             BorderElement;
+extern int             GameFrameDelay;
+extern int             FfwdFrameDelay;
+extern int             BX1,BY1, BX2,BY2;
+extern int             SBX_Left, SBX_Right;
+extern int             SBY_Upper, SBY_Lower;
+extern int             ZX,ZY, ExitX,ExitY;
+extern int             AllPlayersGone;
+
+extern int             TimeFrames, TimePlayed, TimeLeft;
+extern boolean         SiebAktiv;
+extern int             SiebCount;
+
+extern boolean         network_player_action_received;
+
+extern int             graphics_action_mapping[];
+
+extern struct LevelInfo                level;
+extern struct PlayerInfo       stored_player[], *local_player;
+extern struct HiScore          highscore[];
+extern struct TapeInfo         tape;
+extern struct GameInfo         game;
+extern struct GlobalInfo       global;
+extern struct ElementInfo      element_info[];
+#if 0
+extern struct GraphicInfo      graphic_info[];
+#endif
+extern struct NewGraphicInfo   new_graphic_info[];
+extern struct ConfigInfo       image_config[], sound_config[];
+extern struct ConfigInfo       image_config_suffix[], sound_config_suffix[];
+extern struct FileInfo        *image_files, *sound_files;
+
 #endif /* MAIN_H */