Merge branch 'master' into releases 3.0.5
authorHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:44:02 +0000 (10:44 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:44:02 +0000 (10:44 +0200)
27 files changed:
CHANGES
Makefile
src/conf_e2g.c
src/conf_e2s.c
src/conf_fnt.c
src/conf_gfx.c
src/conf_gfx.h
src/conf_snd.c
src/conf_snd.h
src/conftime.h
src/editor.c
src/files.c
src/game.c
src/init.c
src/libgame/gadgets.c
src/libgame/misc.c
src/libgame/misc.h
src/libgame/setup.c
src/libgame/system.h
src/libgame/text.c
src/libgame/text.h
src/libgame/types.h
src/main.c
src/main.h
src/netserv.c
src/screens.c
src/tools.c

diff --git a/CHANGES b/CHANGES
index 2939326e4d0b7c526b97257fe8513e6a3d64ec20..247edadc0c5e60b45f2cd05f2f1baa18771565fb 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,7 +1,17 @@
+Release Version 3.0.5 [29 SEP 2003]
+-----------------------------------
+       - fixed bug in multiple config pages loader code that caused crashes
+       - enhanced (remaining low-resolution) Supaplex graphics
+       - active/inactive sides configurable for custom element changes
+       - new movement type "move when pushed" available for custom elements
+       - now four envelope elements available
+       - font, background, animation and sound for envelope now configurable
+       - main menu doors opening/closing animation type now configurable
+
 Release Version 3.0.4 [13 SEP 2003]
 -----------------------------------
-       * fixed bug in multiple config pages code that caused crashes
-       * fixed bug in custom definition of crumbled element graphic
+       - fixed bug in multiple config pages code that caused crashes
+       - fixed bug in custom definition of crumbled element graphics
 
 Release Version 3.0.3 [08 SEP 2003]
 -----------------------------------
index bdd285b5e775938c501bd4dd53fd57723470f574..e0b9bcd9848ac9e039620ca2725494358564f75a 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -96,6 +96,9 @@ run:
 gdb:
        @$(MAKE_CMD) TARGET=$(DEFAULT_TARGET) && gdb ./rocksndiamonds
 
+valgrind:
+       valgrind -v --leak-check=yes ./rocksndiamonds 2> valgrind.out
+
 enginetest:
        ./Scripts/make_enginetest.sh
 
index 8e88f2b0807ff1eaaad77fba6902a49f57b7c986..72ddb6c7e68dd0d13ea4aca6b579b78dfd76c881 100644 (file)
@@ -189,10 +189,6 @@ element_to_graphic[] =
     EL_SP_DEFAULT,                     ACTION_EXPLODING, -1, FALSE,
     IMG_SP_DEFAULT_EXPLODING
   },
-  {
-    EL_SP_EMPTY_SPACE,                 -1, -1, FALSE,
-    IMG_SP_EMPTY_SPACE
-  },
   {
     EL_SP_ZONK,                                -1, -1, FALSE,
     IMG_SP_ZONK
@@ -941,6 +937,10 @@ element_to_graphic[] =
     EL_EXIT_OPEN,                      -1, -1, FALSE,
     IMG_EXIT_OPEN
   },
+  {
+    EL_EXIT_CLOSING,                   -1, -1, FALSE,
+    IMG_EXIT_CLOSING
+  },
   {
     EL_BALLOON,                                -1, -1, FALSE,
     IMG_BALLOON
@@ -1286,8 +1286,36 @@ element_to_graphic[] =
     IMG_TIMEGATE_SWITCH_ACTIVE
   },
   {
-    EL_ENVELOPE,                       -1, -1, FALSE,
-    IMG_ENVELOPE
+    EL_ENVELOPE_1,                     -1, -1, FALSE,
+    IMG_ENVELOPE_1
+  },
+  {
+    EL_ENVELOPE_1,                     ACTION_COLLECTING, -1, FALSE,
+    IMG_ENVELOPE_1_COLLECTING
+  },
+  {
+    EL_ENVELOPE_2,                     -1, -1, FALSE,
+    IMG_ENVELOPE_2
+  },
+  {
+    EL_ENVELOPE_2,                     ACTION_COLLECTING, -1, FALSE,
+    IMG_ENVELOPE_2_COLLECTING
+  },
+  {
+    EL_ENVELOPE_3,                     -1, -1, FALSE,
+    IMG_ENVELOPE_3
+  },
+  {
+    EL_ENVELOPE_3,                     ACTION_COLLECTING, -1, FALSE,
+    IMG_ENVELOPE_3_COLLECTING
+  },
+  {
+    EL_ENVELOPE_4,                     -1, -1, FALSE,
+    IMG_ENVELOPE_4
+  },
+  {
+    EL_ENVELOPE_4,                     ACTION_COLLECTING, -1, FALSE,
+    IMG_ENVELOPE_4_COLLECTING
   },
   {
     EL_SIGN_EXCLAMATION,               -1, -1, FALSE,
@@ -2461,22 +2489,6 @@ element_to_graphic[] =
     EL_DX_UNKNOWN_42,                  -1, -1, FALSE,
     IMG_CHAR_QUESTION
   },
-  {
-    EL_EM_KEY_1_FILE,                  -1, -1, FALSE,
-    IMG_EM_KEY_1
-  },
-  {
-    EL_EM_KEY_2_FILE,                  -1, -1, FALSE,
-    IMG_EM_KEY_2
-  },
-  {
-    EL_EM_KEY_3_FILE,                  -1, -1, FALSE,
-    IMG_EM_KEY_3
-  },
-  {
-    EL_EM_KEY_4_FILE,                  -1, -1, FALSE,
-    IMG_EM_KEY_4
-  },
   {
     EL_KEY_WHITE,                      -1, -1, FALSE,
     IMG_CHAR_QUESTION
index 6e229df276c147bd90caf18ae9ba2ef334bdb66e..03dfbe980887a9966b710fe1bd00c320cfb5316f 100644 (file)
@@ -225,7 +225,7 @@ element_to_sound[] =
     SND_CLASS_SOKOBAN_EMPTYING
   },
   {
-    EL_PLAYER_OBSOLETE, TRUE,                  ACTION_MOVING,
+    EL_PLAYER_1, TRUE,                         ACTION_MOVING,
     SND_CLASS_PLAYER_MOVING
   },
   {
@@ -297,7 +297,7 @@ element_to_sound[] =
     SND_CLASS_DYNAMITE_ACTIVE
   },
   {
-    EL_KEY_OBSOLETE, TRUE,                     ACTION_COLLECTING,
+    EL_KEY_1, TRUE,                            ACTION_COLLECTING,
     SND_CLASS_KEY_COLLECTING
   },
   {
@@ -396,6 +396,10 @@ element_to_sound[] =
     EL_EXIT_CLOSED, TRUE,                      ACTION_OPENING,
     SND_CLASS_EXIT_OPENING
   },
+  {
+    EL_EXIT_CLOSED, TRUE,                      ACTION_CLOSING,
+    SND_CLASS_EXIT_CLOSING
+  },
   {
     EL_EXIT_CLOSED, TRUE,                      ACTION_PASSING,
     SND_CLASS_EXIT_PASSING
@@ -461,8 +465,16 @@ element_to_sound[] =
     SND_CRYSTAL_IMPACT
   },
   {
-    EL_ENVELOPE, FALSE,                                ACTION_COLLECTING,
-    SND_ENVELOPE_COLLECTING
+    EL_ENVELOPE_1, TRUE,                       ACTION_COLLECTING,
+    SND_CLASS_ENVELOPE_COLLECTING
+  },
+  {
+    EL_ENVELOPE_1, TRUE,                       ACTION_OPENING,
+    SND_CLASS_ENVELOPE_OPENING
+  },
+  {
+    EL_ENVELOPE_1, TRUE,                       ACTION_CLOSING,
+    SND_CLASS_ENVELOPE_CLOSING
   },
   {
     EL_INVISIBLE_SAND, FALSE,                  ACTION_DIGGING,
index ef44d5383c5bc8d4c9bf4611ce53264338907131..b00d432fa7a1d9b9de482a87c075cca06bd30533 100644 (file)
@@ -75,10 +75,6 @@ font_to_graphic[] =
     FONT_TEXT_1,                               GFX_SPECIAL_ARG_PREVIEW,
     IMG_FONT_TEXT_1_PREVIEW
   },
-  {
-    FONT_TEXT_1,                               GFX_SPECIAL_ARG_PLAYING,
-    IMG_FONT_TEXT_1_PLAYING
-  },
   {
     FONT_TEXT_1,                               GFX_SPECIAL_ARG_SCORES,
     IMG_FONT_TEXT_1_SCORES
@@ -143,6 +139,22 @@ font_to_graphic[] =
     FONT_TEXT_4_ACTIVE,                                GFX_SPECIAL_ARG_SCORES,
     IMG_FONT_TEXT_4_ACTIVE_SCORES
   },
+  {
+    FONT_ENVELOPE_1,                           -1,
+    IMG_FONT_ENVELOPE_1
+  },
+  {
+    FONT_ENVELOPE_2,                           -1,
+    IMG_FONT_ENVELOPE_2
+  },
+  {
+    FONT_ENVELOPE_3,                           -1,
+    IMG_FONT_ENVELOPE_3
+  },
+  {
+    FONT_ENVELOPE_4,                           -1,
+    IMG_FONT_ENVELOPE_4
+  },
   {
     FONT_INPUT_1,                              -1,
     IMG_FONT_INPUT_1
index 55c6f3875c09d3e1fe7c57e2363bcfeea49027a4..ce9e3f835fd782ca59feed67899a98b967972fa3 100644 (file)
@@ -227,11 +227,6 @@ struct ConfigInfo image_config[] =
   { "[sp_default].exploding.delay",            "3"                     },
   { "[sp_default].exploding.anim_mode",                "linear"                },
 
-  { "sp_empty_space",                          "RocksSP.pcx"           },
-  { "sp_empty_space.xpos",                     "0"                     },
-  { "sp_empty_space.ypos",                     "0"                     },
-  { "sp_empty_space.frames",                   "1"                     },
-
   { "sp_zonk",                                 "RocksSP.pcx"           },
   { "sp_zonk.xpos",                            "1"                     },
   { "sp_zonk.ypos",                            "0"                     },
@@ -1125,6 +1120,12 @@ struct ConfigInfo image_config[] =
   { "exit_open.frames",                                "4"                     },
   { "exit_open.delay",                         "4"                     },
   { "exit_open.anim_mode",                     "pingpong"              },
+  { "exit.closing",                            "RocksElements.pcx"     },
+  { "exit.closing.xpos",                       "0"                     },
+  { "exit.closing.ypos",                       "11"                    },
+  { "exit.closing.frames",                     "5"                     },
+  { "exit.closing.delay",                      "6"                     },
+  { "exit.closing.anim_mode",                  "linear,reverse"        },
 
   /* images for Emerald Mine Club style elements and actions */
 
@@ -1445,10 +1446,46 @@ struct ConfigInfo image_config[] =
   { "timegate_switch.active.ypos",             "15"                    },
   { "timegate_switch.active.frames",           "4"                     },
 
-  { "envelope",                                        "RocksDC.pcx"           },
-  { "envelope.xpos",                           "4"                     },
-  { "envelope.ypos",                           "14"                    },
-  { "envelope.frames",                         "1"                     },
+  { "envelope_1",                              "RocksMore.pcx"         },
+  { "envelope_1.xpos",                         "0"                     },
+  { "envelope_1.ypos",                         "4"                     },
+  { "envelope_1.frames",                       "1"                     },
+  { "envelope_1.collecting",                   "RocksMore.pcx"         },
+  { "envelope_1.collecting.xpos",              "5"                     },
+  { "envelope_1.collecting.ypos",              "4"                     },
+  { "envelope_1.collecting.frames",            "3"                     },
+  { "envelope_1.collecting.delay",             "2"                     },
+  { "envelope_1.collecting.anim_mode",         "linear"                },
+  { "envelope_2",                              "RocksMore.pcx"         },
+  { "envelope_2.xpos",                         "1"                     },
+  { "envelope_2.ypos",                         "4"                     },
+  { "envelope_2.frames",                       "1"                     },
+  { "envelope_2.collecting",                   "RocksMore.pcx"         },
+  { "envelope_2.collecting.xpos",              "5"                     },
+  { "envelope_2.collecting.ypos",              "4"                     },
+  { "envelope_2.collecting.frames",            "3"                     },
+  { "envelope_2.collecting.delay",             "2"                     },
+  { "envelope_2.collecting.anim_mode",         "linear"                },
+  { "envelope_3",                              "RocksMore.pcx"         },
+  { "envelope_3.xpos",                         "2"                     },
+  { "envelope_3.ypos",                         "4"                     },
+  { "envelope_3.frames",                       "1"                     },
+  { "envelope_3.collecting",                   "RocksMore.pcx"         },
+  { "envelope_3.collecting.xpos",              "5"                     },
+  { "envelope_3.collecting.ypos",              "4"                     },
+  { "envelope_3.collecting.frames",            "3"                     },
+  { "envelope_3.collecting.delay",             "2"                     },
+  { "envelope_3.collecting.anim_mode",         "linear"                },
+  { "envelope_4",                              "RocksMore.pcx"         },
+  { "envelope_4.xpos",                         "3"                     },
+  { "envelope_4.ypos",                         "4"                     },
+  { "envelope_4.frames",                       "1"                     },
+  { "envelope_4.collecting",                   "RocksMore.pcx"         },
+  { "envelope_4.collecting.xpos",              "5"                     },
+  { "envelope_4.collecting.ypos",              "4"                     },
+  { "envelope_4.collecting.frames",            "3"                     },
+  { "envelope_4.collecting.delay",             "2"                     },
+  { "envelope_4.collecting.anim_mode",         "linear"                },
 
   { "sign_exclamation",                                "RocksDC.pcx"           },
   { "sign_exclamation.xpos",                   "5"                     },
@@ -3265,11 +3302,6 @@ struct ConfigInfo image_config[] =
   { "font.text_1.PREVIEW.y",                   "160"                   },
   { "font.text_1.PREVIEW.width",               "16"                    },
   { "font.text_1.PREVIEW.height",              "16"                    },
-  { "font.text_1.PLAYING",                     "RocksFontEM.pcx"       },
-  { "font.text_1.PLAYING.x",                   "0"                     },
-  { "font.text_1.PLAYING.y",                   "160"                   },
-  { "font.text_1.PLAYING.width",               "16"                    },
-  { "font.text_1.PLAYING.height",              "16"                    },
   { "font.text_1.SCORES",                      "RocksFontMedium.pcx"   },
   { "font.text_1.SCORES.x",                    "0"                     },
   { "font.text_1.SCORES.y",                    "480"                   },
@@ -3351,6 +3383,27 @@ struct ConfigInfo image_config[] =
   { "font.text_4.active.SCORES.width",         "16"                    },
   { "font.text_4.active.SCORES.height",                "32"                    },
 
+  { "font.envelope_1",                         "RocksFontEM.pcx"       },
+  { "font.envelope_1.x",                       "0"                     },
+  { "font.envelope_1.y",                       "160"                   },
+  { "font.envelope_1.width",                   "16"                    },
+  { "font.envelope_1.height",                  "16"                    },
+  { "font.envelope_2",                         "RocksFontEM.pcx"       },
+  { "font.envelope_2.x",                       "0"                     },
+  { "font.envelope_2.y",                       "160"                   },
+  { "font.envelope_2.width",                   "16"                    },
+  { "font.envelope_2.height",                  "16"                    },
+  { "font.envelope_3",                         "RocksFontEM.pcx"       },
+  { "font.envelope_3.x",                       "0"                     },
+  { "font.envelope_3.y",                       "160"                   },
+  { "font.envelope_3.width",                   "16"                    },
+  { "font.envelope_3.height",                  "16"                    },
+  { "font.envelope_4",                         "RocksFontEM.pcx"       },
+  { "font.envelope_4.x",                       "0"                     },
+  { "font.envelope_4.y",                       "160"                   },
+  { "font.envelope_4.width",                   "16"                    },
+  { "font.envelope_4.height",                  "16"                    },
+
   { "font.input_1",                            "RocksFontSmall.pcx"    },
   { "font.input_1.x",                          "0"                     },
   { "font.input_1.y",                          "210"                   },
@@ -3442,11 +3495,34 @@ struct ConfigInfo image_config[] =
   { "editor.element_border_input.xpos",                "0"                     },
   { "editor.element_border_input.ypos",                "0"                     },
 
-  { "game.envelope_background",                        "RocksScreen.pcx"       },
-  { "game.envelope_background.x",              "0"                     },
-  { "game.envelope_background.y",              "0"                     },
-  { "game.envelope_background.width",          "560"                   },
-  { "game.envelope_background.height",         "560"                   },
+  { "background.envelope_1",                   "RocksScreen.pcx"       },
+  { "background.envelope_1.x",                 "0"                     },
+  { "background.envelope_1.y",                 "0"                     },
+  { "background.envelope_1.width",             "560"                   },
+  { "background.envelope_1.height",            "560"                   },
+  { "background.envelope_1.anim_mode",         "default"               },
+  { "background.envelope_1.draw_masked",       "false"                 },
+  { "background.envelope_2",                   "RocksScreen.pcx"       },
+  { "background.envelope_2.x",                 "0"                     },
+  { "background.envelope_2.y",                 "0"                     },
+  { "background.envelope_2.width",             "560"                   },
+  { "background.envelope_2.height",            "560"                   },
+  { "background.envelope_2.anim_mode",         "default"               },
+  { "background.envelope_2.draw_masked",       "false"                 },
+  { "background.envelope_3",                   "RocksScreen.pcx"       },
+  { "background.envelope_3.x",                 "0"                     },
+  { "background.envelope_3.y",                 "0"                     },
+  { "background.envelope_3.width",             "560"                   },
+  { "background.envelope_3.height",            "560"                   },
+  { "background.envelope_3.anim_mode",         "default"               },
+  { "background.envelope_3.draw_masked",       "false"                 },
+  { "background.envelope_4",                   "RocksScreen.pcx"       },
+  { "background.envelope_4.x",                 "0"                     },
+  { "background.envelope_4.y",                 "0"                     },
+  { "background.envelope_4.width",             "560"                   },
+  { "background.envelope_4.height",            "560"                   },
+  { "background.envelope_4.anim_mode",         "default"               },
+  { "background.envelope_4.draw_masked",       "false"                 },
 
   { "background",                              UNDEFINED_FILENAME      },
   { "background.MAIN",                         UNDEFINED_FILENAME      },
@@ -3484,8 +3560,12 @@ struct ConfigInfo image_config[] =
   { "menu.list_size.SCORES",                   "-1"                    },
   { "menu.list_size.INFO",                     "-1"                    },
 
-  { "door.step_offset",                                "2"                     },
-  { "door.step_delay",                         "10"                    },
+  { "door_1.step_offset",                      "2"                     },
+  { "door_1.step_delay",                       "10"                    },
+  { "door_1.anim_mode",                                "default"               },
+  { "door_2.step_offset",                      "2"                     },
+  { "door_2.step_delay",                       "10"                    },
+  { "door_2.anim_mode",                                "default"               },
 
   { NULL,                                      NULL                    }
 };
index 9033fc69790a0947b4508351a4b118c3ed578dc5..166190d79611506396b7765b94931ec4b2794408 100644 (file)
 #define IMG_BD_FIREFLY_DOWN                            29
 #define IMG_BD_FIREFLY_MOVING                          30
 #define IMG_SP_DEFAULT_EXPLODING                       31
-#define IMG_SP_EMPTY_SPACE                             32
-#define IMG_SP_ZONK                                    33
-#define IMG_SP_ZONK_MOVING_LEFT                                34
-#define IMG_SP_ZONK_MOVING_RIGHT                       35
-#define IMG_SP_ZONK_PUSHING_LEFT                       36
-#define IMG_SP_ZONK_PUSHING_RIGHT                      37
-#define IMG_SP_BASE                                    38
-#define IMG_SP_MURPHY                                  39
-#define IMG_SP_MURPHY_MOVING_LEFT                      40
-#define IMG_SP_MURPHY_MOVING_RIGHT                     41
-#define IMG_SP_MURPHY_DIGGING_LEFT                     42
-#define IMG_SP_MURPHY_DIGGING_RIGHT                    43
-#define IMG_SP_MURPHY_COLLECTING_LEFT                  44
-#define IMG_SP_MURPHY_COLLECTING_RIGHT                 45
-#define IMG_SP_MURPHY_PUSHING_LEFT                     46
-#define IMG_SP_MURPHY_PUSHING_RIGHT                    47
-#define IMG_SP_MURPHY_SNAPPING_LEFT                    48
-#define IMG_SP_MURPHY_SNAPPING_RIGHT                   49
-#define IMG_SP_MURPHY_SNAPPING_UP                      50
-#define IMG_SP_MURPHY_SNAPPING_DOWN                    51
-#define IMG_SP_MURPHY_CLONE                            52
-#define IMG_SP_INFOTRON                                        53
-#define IMG_SP_INFOTRON_EDITOR                         54
-#define IMG_SP_CHIP_SINGLE                             55
-#define IMG_SP_CHIP_LEFT                               56
-#define IMG_SP_CHIP_RIGHT                              57
-#define IMG_SP_CHIP_TOP                                        58
-#define IMG_SP_CHIP_BOTTOM                             59
-#define IMG_SP_HARDWARE_GRAY                           60
-#define IMG_SP_HARDWARE_GREEN                          61
-#define IMG_SP_HARDWARE_BLUE                           62
-#define IMG_SP_HARDWARE_RED                            63
-#define IMG_SP_HARDWARE_YELLOW                         64
-#define IMG_SP_EXIT_CLOSED                             65
-#define IMG_SP_EXIT_OPEN                               66
-#define IMG_SP_DISK_ORANGE                             67
-#define IMG_SP_DISK_YELLOW                             68
-#define IMG_SP_DISK_RED                                        69
-#define IMG_SP_DISK_RED_COLLECTING                     70
-#define IMG_SP_DISK_RED_ACTIVE                         71
-#define IMG_SP_PORT_RIGHT                              72
-#define IMG_SP_PORT_DOWN                               73
-#define IMG_SP_PORT_LEFT                               74
-#define IMG_SP_PORT_UP                                 75
-#define IMG_SP_PORT_HORIZONTAL                         76
-#define IMG_SP_PORT_VERTICAL                           77
-#define IMG_SP_PORT_ANY                                        78
-#define IMG_SP_GRAVITY_PORT_RIGHT                      79
-#define IMG_SP_GRAVITY_PORT_DOWN                       80
-#define IMG_SP_GRAVITY_PORT_LEFT                       81
-#define IMG_SP_GRAVITY_PORT_UP                         82
-#define IMG_SP_SNIKSNAK                                        83
-#define IMG_SP_SNIKSNAK_LEFT                           84
-#define IMG_SP_SNIKSNAK_RIGHT                          85
-#define IMG_SP_SNIKSNAK_UP                             86
-#define IMG_SP_SNIKSNAK_DOWN                           87
-#define IMG_SP_ELECTRON                                        88
-#define IMG_SP_ELECTRON_EDITOR                         89
-#define IMG_SP_ELECTRON_EXPLODING                      90
-#define IMG_SP_TERMINAL                                        91
-#define IMG_SP_TERMINAL_EDITOR                         92
-#define IMG_SP_TERMINAL_ACTIVE                         93
-#define IMG_SP_BUGGY_BASE                              94
-#define IMG_SP_BUGGY_BASE_EDITOR                       95
-#define IMG_SP_BUGGY_BASE_ACTIVATING                   96
-#define IMG_SP_BUGGY_BASE_ACTIVE                       97
-#define IMG_SP_HARDWARE_BASE_1                         98
-#define IMG_SP_HARDWARE_BASE_2                         99
-#define IMG_SP_HARDWARE_BASE_3                         100
-#define IMG_SP_HARDWARE_BASE_4                         101
-#define IMG_SP_HARDWARE_BASE_5                         102
-#define IMG_SP_HARDWARE_BASE_6                         103
-#define IMG_SOKOBAN_OBJECT                             104
-#define IMG_SOKOBAN_OBJECT_EDITOR                      105
-#define IMG_SOKOBAN_FIELD_EMPTY                                106
-#define IMG_SOKOBAN_FIELD_FULL                         107
-#define IMG_EMPTY_SPACE                                        108
-#define IMG_SAND                                       109
-#define IMG_SAND_CRUMBLED                              110
-#define IMG_SAND_DIGGING_LEFT                          111
-#define IMG_SAND_DIGGING_RIGHT                         112
-#define IMG_SAND_DIGGING_UP                            113
-#define IMG_SAND_DIGGING_DOWN                          114
-#define IMG_SAND_DIGGING_LEFT_CRUMBLED                 115
-#define IMG_SAND_DIGGING_RIGHT_CRUMBLED                        116
-#define IMG_SAND_DIGGING_UP_CRUMBLED                   117
-#define IMG_SAND_DIGGING_DOWN_CRUMBLED                 118
-#define IMG_WALL                                       119
-#define IMG_WALL_SLIPPERY                              120
-#define IMG_STEELWALL                                  121
-#define IMG_ROCK                                       122
-#define IMG_ROCK_MOVING_LEFT                           123
-#define IMG_ROCK_MOVING_RIGHT                          124
-#define IMG_ROCK_PUSHING_LEFT                          125
-#define IMG_ROCK_PUSHING_RIGHT                         126
-#define IMG_EMERALD                                    127
-#define IMG_EMERALD_MOVING                             128
-#define IMG_EMERALD_FALLING                            129
-#define IMG_EMERALD_COLLECTING                         130
-#define IMG_DIAMOND                                    131
-#define IMG_DIAMOND_MOVING                             132
-#define IMG_DIAMOND_FALLING                            133
-#define IMG_DIAMOND_COLLECTING                         134
-#define IMG_BOMB                                       135
-#define IMG_NUT                                                136
-#define IMG_NUT_BREAKING                               137
-#define IMG_DYNAMITE                                   138
-#define IMG_DYNAMITE_EDITOR                            139
-#define IMG_DYNAMITE_ACTIVE                            140
-#define IMG_DYNAMITE_ACTIVE_EDITOR                     141
-#define IMG_WALL_EMERALD                               142
-#define IMG_WALL_DIAMOND                               143
-#define IMG_BUG                                                144
-#define IMG_BUG_RIGHT                                  145
-#define IMG_BUG_UP                                     146
-#define IMG_BUG_LEFT                                   147
-#define IMG_BUG_DOWN                                   148
-#define IMG_BUG_MOVING_RIGHT                           149
-#define IMG_BUG_MOVING_UP                              150
-#define IMG_BUG_MOVING_LEFT                            151
-#define IMG_BUG_MOVING_DOWN                            152
-#define IMG_SPACESHIP                                  153
-#define IMG_SPACESHIP_RIGHT                            154
-#define IMG_SPACESHIP_UP                               155
-#define IMG_SPACESHIP_LEFT                             156
-#define IMG_SPACESHIP_DOWN                             157
-#define IMG_SPACESHIP_MOVING_RIGHT                     158
-#define IMG_SPACESHIP_MOVING_UP                                159
-#define IMG_SPACESHIP_MOVING_LEFT                      160
-#define IMG_SPACESHIP_MOVING_DOWN                      161
-#define IMG_YAMYAM                                     162
-#define IMG_YAMYAM_MOVING                              163
-#define IMG_ROBOT                                      164
-#define IMG_ROBOT_MOVING                               165
-#define IMG_ROBOT_WHEEL                                        166
-#define IMG_ROBOT_WHEEL_ACTIVE                         167
-#define IMG_MAGIC_WALL                                 168
-#define IMG_MAGIC_WALL_ACTIVE                          169
-#define IMG_MAGIC_WALL_FILLING                         170
-#define IMG_MAGIC_WALL_FULL                            171
-#define IMG_MAGIC_WALL_EMPTYING                                172
-#define IMG_MAGIC_WALL_DEAD                            173
-#define IMG_QUICKSAND_EMPTY                            174
-#define IMG_QUICKSAND_FILLING                          175
-#define IMG_QUICKSAND_FULL                             176
-#define IMG_QUICKSAND_FULL_EDITOR                      177
-#define IMG_QUICKSAND_EMPTYING                         178
-#define IMG_ACID_POOL_TOPLEFT                          179
-#define IMG_ACID_POOL_TOPRIGHT                         180
-#define IMG_ACID_POOL_BOTTOMLEFT                       181
-#define IMG_ACID_POOL_BOTTOM                           182
-#define IMG_ACID_POOL_BOTTOMRIGHT                      183
-#define IMG_ACID                                       184
-#define IMG_ACID_SPLASH_LEFT                           185
-#define IMG_ACID_SPLASH_RIGHT                          186
-#define IMG_AMOEBA_DROP                                        187
-#define IMG_AMOEBA_GROWING                             188
-#define IMG_AMOEBA_SHRINKING                           189
-#define IMG_AMOEBA_WET                                 190
-#define IMG_AMOEBA_WET_EDITOR                          191
-#define IMG_AMOEBA_DROPPING                            192
-#define IMG_AMOEBA_DRY                                 193
-#define IMG_AMOEBA_FULL                                        194
-#define IMG_AMOEBA_FULL_EDITOR                         195
-#define IMG_AMOEBA_DEAD                                        196
-#define IMG_AMOEBA_DEAD_EDITOR                         197
-#define IMG_EM_KEY_1                                   198
-#define IMG_EM_KEY_2                                   199
-#define IMG_EM_KEY_3                                   200
-#define IMG_EM_KEY_4                                   201
-#define IMG_EM_GATE_1                                  202
-#define IMG_EM_GATE_2                                  203
-#define IMG_EM_GATE_3                                  204
-#define IMG_EM_GATE_4                                  205
-#define IMG_EM_GATE_1_GRAY                             206
-#define IMG_EM_GATE_1_GRAY_EDITOR                      207
-#define IMG_EM_GATE_2_GRAY                             208
-#define IMG_EM_GATE_2_GRAY_EDITOR                      209
-#define IMG_EM_GATE_3_GRAY                             210
-#define IMG_EM_GATE_3_GRAY_EDITOR                      211
-#define IMG_EM_GATE_4_GRAY                             212
-#define IMG_EM_GATE_4_GRAY_EDITOR                      213
-#define IMG_EXIT_CLOSED                                        214
-#define IMG_EXIT_OPENING                               215
-#define IMG_EXIT_OPEN                                  216
+#define IMG_SP_ZONK                                    32
+#define IMG_SP_ZONK_MOVING_LEFT                                33
+#define IMG_SP_ZONK_MOVING_RIGHT                       34
+#define IMG_SP_ZONK_PUSHING_LEFT                       35
+#define IMG_SP_ZONK_PUSHING_RIGHT                      36
+#define IMG_SP_BASE                                    37
+#define IMG_SP_MURPHY                                  38
+#define IMG_SP_MURPHY_MOVING_LEFT                      39
+#define IMG_SP_MURPHY_MOVING_RIGHT                     40
+#define IMG_SP_MURPHY_DIGGING_LEFT                     41
+#define IMG_SP_MURPHY_DIGGING_RIGHT                    42
+#define IMG_SP_MURPHY_COLLECTING_LEFT                  43
+#define IMG_SP_MURPHY_COLLECTING_RIGHT                 44
+#define IMG_SP_MURPHY_PUSHING_LEFT                     45
+#define IMG_SP_MURPHY_PUSHING_RIGHT                    46
+#define IMG_SP_MURPHY_SNAPPING_LEFT                    47
+#define IMG_SP_MURPHY_SNAPPING_RIGHT                   48
+#define IMG_SP_MURPHY_SNAPPING_UP                      49
+#define IMG_SP_MURPHY_SNAPPING_DOWN                    50
+#define IMG_SP_MURPHY_CLONE                            51
+#define IMG_SP_INFOTRON                                        52
+#define IMG_SP_INFOTRON_EDITOR                         53
+#define IMG_SP_CHIP_SINGLE                             54
+#define IMG_SP_CHIP_LEFT                               55
+#define IMG_SP_CHIP_RIGHT                              56
+#define IMG_SP_CHIP_TOP                                        57
+#define IMG_SP_CHIP_BOTTOM                             58
+#define IMG_SP_HARDWARE_GRAY                           59
+#define IMG_SP_HARDWARE_GREEN                          60
+#define IMG_SP_HARDWARE_BLUE                           61
+#define IMG_SP_HARDWARE_RED                            62
+#define IMG_SP_HARDWARE_YELLOW                         63
+#define IMG_SP_EXIT_CLOSED                             64
+#define IMG_SP_EXIT_OPEN                               65
+#define IMG_SP_DISK_ORANGE                             66
+#define IMG_SP_DISK_YELLOW                             67
+#define IMG_SP_DISK_RED                                        68
+#define IMG_SP_DISK_RED_COLLECTING                     69
+#define IMG_SP_DISK_RED_ACTIVE                         70
+#define IMG_SP_PORT_RIGHT                              71
+#define IMG_SP_PORT_DOWN                               72
+#define IMG_SP_PORT_LEFT                               73
+#define IMG_SP_PORT_UP                                 74
+#define IMG_SP_PORT_HORIZONTAL                         75
+#define IMG_SP_PORT_VERTICAL                           76
+#define IMG_SP_PORT_ANY                                        77
+#define IMG_SP_GRAVITY_PORT_RIGHT                      78
+#define IMG_SP_GRAVITY_PORT_DOWN                       79
+#define IMG_SP_GRAVITY_PORT_LEFT                       80
+#define IMG_SP_GRAVITY_PORT_UP                         81
+#define IMG_SP_SNIKSNAK                                        82
+#define IMG_SP_SNIKSNAK_LEFT                           83
+#define IMG_SP_SNIKSNAK_RIGHT                          84
+#define IMG_SP_SNIKSNAK_UP                             85
+#define IMG_SP_SNIKSNAK_DOWN                           86
+#define IMG_SP_ELECTRON                                        87
+#define IMG_SP_ELECTRON_EDITOR                         88
+#define IMG_SP_ELECTRON_EXPLODING                      89
+#define IMG_SP_TERMINAL                                        90
+#define IMG_SP_TERMINAL_EDITOR                         91
+#define IMG_SP_TERMINAL_ACTIVE                         92
+#define IMG_SP_BUGGY_BASE                              93
+#define IMG_SP_BUGGY_BASE_EDITOR                       94
+#define IMG_SP_BUGGY_BASE_ACTIVATING                   95
+#define IMG_SP_BUGGY_BASE_ACTIVE                       96
+#define IMG_SP_HARDWARE_BASE_1                         97
+#define IMG_SP_HARDWARE_BASE_2                         98
+#define IMG_SP_HARDWARE_BASE_3                         99
+#define IMG_SP_HARDWARE_BASE_4                         100
+#define IMG_SP_HARDWARE_BASE_5                         101
+#define IMG_SP_HARDWARE_BASE_6                         102
+#define IMG_SOKOBAN_OBJECT                             103
+#define IMG_SOKOBAN_OBJECT_EDITOR                      104
+#define IMG_SOKOBAN_FIELD_EMPTY                                105
+#define IMG_SOKOBAN_FIELD_FULL                         106
+#define IMG_EMPTY_SPACE                                        107
+#define IMG_SAND                                       108
+#define IMG_SAND_CRUMBLED                              109
+#define IMG_SAND_DIGGING_LEFT                          110
+#define IMG_SAND_DIGGING_RIGHT                         111
+#define IMG_SAND_DIGGING_UP                            112
+#define IMG_SAND_DIGGING_DOWN                          113
+#define IMG_SAND_DIGGING_LEFT_CRUMBLED                 114
+#define IMG_SAND_DIGGING_RIGHT_CRUMBLED                        115
+#define IMG_SAND_DIGGING_UP_CRUMBLED                   116
+#define IMG_SAND_DIGGING_DOWN_CRUMBLED                 117
+#define IMG_WALL                                       118
+#define IMG_WALL_SLIPPERY                              119
+#define IMG_STEELWALL                                  120
+#define IMG_ROCK                                       121
+#define IMG_ROCK_MOVING_LEFT                           122
+#define IMG_ROCK_MOVING_RIGHT                          123
+#define IMG_ROCK_PUSHING_LEFT                          124
+#define IMG_ROCK_PUSHING_RIGHT                         125
+#define IMG_EMERALD                                    126
+#define IMG_EMERALD_MOVING                             127
+#define IMG_EMERALD_FALLING                            128
+#define IMG_EMERALD_COLLECTING                         129
+#define IMG_DIAMOND                                    130
+#define IMG_DIAMOND_MOVING                             131
+#define IMG_DIAMOND_FALLING                            132
+#define IMG_DIAMOND_COLLECTING                         133
+#define IMG_BOMB                                       134
+#define IMG_NUT                                                135
+#define IMG_NUT_BREAKING                               136
+#define IMG_DYNAMITE                                   137
+#define IMG_DYNAMITE_EDITOR                            138
+#define IMG_DYNAMITE_ACTIVE                            139
+#define IMG_DYNAMITE_ACTIVE_EDITOR                     140
+#define IMG_WALL_EMERALD                               141
+#define IMG_WALL_DIAMOND                               142
+#define IMG_BUG                                                143
+#define IMG_BUG_RIGHT                                  144
+#define IMG_BUG_UP                                     145
+#define IMG_BUG_LEFT                                   146
+#define IMG_BUG_DOWN                                   147
+#define IMG_BUG_MOVING_RIGHT                           148
+#define IMG_BUG_MOVING_UP                              149
+#define IMG_BUG_MOVING_LEFT                            150
+#define IMG_BUG_MOVING_DOWN                            151
+#define IMG_SPACESHIP                                  152
+#define IMG_SPACESHIP_RIGHT                            153
+#define IMG_SPACESHIP_UP                               154
+#define IMG_SPACESHIP_LEFT                             155
+#define IMG_SPACESHIP_DOWN                             156
+#define IMG_SPACESHIP_MOVING_RIGHT                     157
+#define IMG_SPACESHIP_MOVING_UP                                158
+#define IMG_SPACESHIP_MOVING_LEFT                      159
+#define IMG_SPACESHIP_MOVING_DOWN                      160
+#define IMG_YAMYAM                                     161
+#define IMG_YAMYAM_MOVING                              162
+#define IMG_ROBOT                                      163
+#define IMG_ROBOT_MOVING                               164
+#define IMG_ROBOT_WHEEL                                        165
+#define IMG_ROBOT_WHEEL_ACTIVE                         166
+#define IMG_MAGIC_WALL                                 167
+#define IMG_MAGIC_WALL_ACTIVE                          168
+#define IMG_MAGIC_WALL_FILLING                         169
+#define IMG_MAGIC_WALL_FULL                            170
+#define IMG_MAGIC_WALL_EMPTYING                                171
+#define IMG_MAGIC_WALL_DEAD                            172
+#define IMG_QUICKSAND_EMPTY                            173
+#define IMG_QUICKSAND_FILLING                          174
+#define IMG_QUICKSAND_FULL                             175
+#define IMG_QUICKSAND_FULL_EDITOR                      176
+#define IMG_QUICKSAND_EMPTYING                         177
+#define IMG_ACID_POOL_TOPLEFT                          178
+#define IMG_ACID_POOL_TOPRIGHT                         179
+#define IMG_ACID_POOL_BOTTOMLEFT                       180
+#define IMG_ACID_POOL_BOTTOM                           181
+#define IMG_ACID_POOL_BOTTOMRIGHT                      182
+#define IMG_ACID                                       183
+#define IMG_ACID_SPLASH_LEFT                           184
+#define IMG_ACID_SPLASH_RIGHT                          185
+#define IMG_AMOEBA_DROP                                        186
+#define IMG_AMOEBA_GROWING                             187
+#define IMG_AMOEBA_SHRINKING                           188
+#define IMG_AMOEBA_WET                                 189
+#define IMG_AMOEBA_WET_EDITOR                          190
+#define IMG_AMOEBA_DROPPING                            191
+#define IMG_AMOEBA_DRY                                 192
+#define IMG_AMOEBA_FULL                                        193
+#define IMG_AMOEBA_FULL_EDITOR                         194
+#define IMG_AMOEBA_DEAD                                        195
+#define IMG_AMOEBA_DEAD_EDITOR                         196
+#define IMG_EM_KEY_1                                   197
+#define IMG_EM_KEY_2                                   198
+#define IMG_EM_KEY_3                                   199
+#define IMG_EM_KEY_4                                   200
+#define IMG_EM_GATE_1                                  201
+#define IMG_EM_GATE_2                                  202
+#define IMG_EM_GATE_3                                  203
+#define IMG_EM_GATE_4                                  204
+#define IMG_EM_GATE_1_GRAY                             205
+#define IMG_EM_GATE_1_GRAY_EDITOR                      206
+#define IMG_EM_GATE_2_GRAY                             207
+#define IMG_EM_GATE_2_GRAY_EDITOR                      208
+#define IMG_EM_GATE_3_GRAY                             209
+#define IMG_EM_GATE_3_GRAY_EDITOR                      210
+#define IMG_EM_GATE_4_GRAY                             211
+#define IMG_EM_GATE_4_GRAY_EDITOR                      212
+#define IMG_EXIT_CLOSED                                        213
+#define IMG_EXIT_OPENING                               214
+#define IMG_EXIT_OPEN                                  215
+#define IMG_EXIT_CLOSING                               216
 #define IMG_BALLOON                                    217
 #define IMG_BALLOON_MOVING                             218
 #define IMG_BALLOON_PUSHING                            219
 #define IMG_LIGHT_SWITCH_ACTIVE                                286
 #define IMG_TIMEGATE_SWITCH                            287
 #define IMG_TIMEGATE_SWITCH_ACTIVE                     288
-#define IMG_ENVELOPE                                   289
-#define IMG_SIGN_EXCLAMATION                           290
-#define IMG_SIGN_STOP                                  291
-#define IMG_LANDMINE                                   292
-#define IMG_STEELWALL_SLIPPERY                         293
-#define IMG_EXTRA_TIME                                 294
-#define IMG_SHIELD_NORMAL                              295
-#define IMG_SHIELD_NORMAL_ACTIVE                       296
-#define IMG_SHIELD_DEADLY                              297
-#define IMG_SHIELD_DEADLY_ACTIVE                       298
-#define IMG_SWITCHGATE_CLOSED                          299
-#define IMG_SWITCHGATE_OPENING                         300
-#define IMG_SWITCHGATE_OPEN                            301
-#define IMG_SWITCHGATE_CLOSING                         302
-#define IMG_TIMEGATE_CLOSED                            303
-#define IMG_TIMEGATE_OPENING                           304
-#define IMG_TIMEGATE_OPEN                              305
-#define IMG_TIMEGATE_CLOSING                           306
-#define IMG_PEARL                                      307
-#define IMG_PEARL_BREAKING                             308
-#define IMG_CRYSTAL                                    309
-#define IMG_WALL_PEARL                                 310
-#define IMG_WALL_CRYSTAL                               311
-#define IMG_TUBE_RIGHT_DOWN                            312
-#define IMG_TUBE_HORIZONTAL_DOWN                       313
-#define IMG_TUBE_LEFT_DOWN                             314
-#define IMG_TUBE_HORIZONTAL                            315
-#define IMG_TUBE_VERTICAL_RIGHT                                316
-#define IMG_TUBE_ANY                                   317
-#define IMG_TUBE_VERTICAL_LEFT                         318
-#define IMG_TUBE_VERTICAL                              319
-#define IMG_TUBE_RIGHT_UP                              320
-#define IMG_TUBE_HORIZONTAL_UP                         321
-#define IMG_TUBE_LEFT_UP                               322
-#define IMG_TRAP                                       323
-#define IMG_TRAP_ACTIVE                                        324
-#define IMG_DX_SUPABOMB                                        325
-#define IMG_KEY_1                                      326
-#define IMG_KEY_1_EDITOR                               327
-#define IMG_KEY_2                                      328
-#define IMG_KEY_2_EDITOR                               329
-#define IMG_KEY_3                                      330
-#define IMG_KEY_3_EDITOR                               331
-#define IMG_KEY_4                                      332
-#define IMG_KEY_4_EDITOR                               333
-#define IMG_GATE_1                                     334
-#define IMG_GATE_2                                     335
-#define IMG_GATE_3                                     336
-#define IMG_GATE_4                                     337
-#define IMG_GATE_1_GRAY                                        338
-#define IMG_GATE_1_GRAY_EDITOR                         339
-#define IMG_GATE_2_GRAY                                        340
-#define IMG_GATE_2_GRAY_EDITOR                         341
-#define IMG_GATE_3_GRAY                                        342
-#define IMG_GATE_3_GRAY_EDITOR                         343
-#define IMG_GATE_4_GRAY                                        344
-#define IMG_GATE_4_GRAY_EDITOR                         345
-#define IMG_GAME_OF_LIFE                               346
-#define IMG_BIOMAZE                                    347
-#define IMG_PACMAN                                     348
-#define IMG_PACMAN_RIGHT                               349
-#define IMG_PACMAN_UP                                  350
-#define IMG_PACMAN_LEFT                                        351
-#define IMG_PACMAN_DOWN                                        352
-#define IMG_PACMAN_MOVING_RIGHT                                353
-#define IMG_PACMAN_MOVING_UP                           354
-#define IMG_PACMAN_MOVING_LEFT                         355
-#define IMG_PACMAN_MOVING_DOWN                         356
-#define IMG_LAMP                                       357
-#define IMG_LAMP_EDITOR                                        358
-#define IMG_LAMP_ACTIVE                                        359
-#define IMG_TIME_ORB_FULL                              360
-#define IMG_TIME_ORB_EMPTY                             361
-#define IMG_EMERALD_YELLOW                             362
-#define IMG_EMERALD_YELLOW_MOVING                      363
-#define IMG_EMERALD_YELLOW_FALLING                     364
-#define IMG_EMERALD_RED                                        365
-#define IMG_EMERALD_RED_MOVING                         366
-#define IMG_EMERALD_RED_FALLING                                367
-#define IMG_EMERALD_PURPLE                             368
-#define IMG_EMERALD_PURPLE_MOVING                      369
-#define IMG_EMERALD_PURPLE_FALLING                     370
-#define IMG_WALL_EMERALD_YELLOW                                371
-#define IMG_WALL_EMERALD_RED                           372
-#define IMG_WALL_EMERALD_PURPLE                                373
-#define IMG_WALL_BD_DIAMOND                            374
-#define IMG_EXPANDABLE_WALL                            375
-#define IMG_EXPANDABLE_WALL_HORIZONTAL                 376
-#define IMG_EXPANDABLE_WALL_HORIZONTAL_EDITOR          377
-#define IMG_EXPANDABLE_WALL_VERTICAL                   378
-#define IMG_EXPANDABLE_WALL_VERTICAL_EDITOR            379
-#define IMG_EXPANDABLE_WALL_ANY                                380
-#define IMG_EXPANDABLE_WALL_ANY_EDITOR                 381
-#define IMG_EXPANDABLE_WALL_GROWING_LEFT               382
-#define IMG_EXPANDABLE_WALL_GROWING_RIGHT              383
-#define IMG_EXPANDABLE_WALL_GROWING_UP                 384
-#define IMG_EXPANDABLE_WALL_GROWING_DOWN               385
-#define IMG_BLACK_ORB                                  386
-#define IMG_SPEED_PILL                                 387
-#define IMG_DARK_YAMYAM                                        388
-#define IMG_DYNABOMB                                   389
-#define IMG_DYNABOMB_ACTIVE                            390
-#define IMG_DYNABOMB_PLAYER_1                          391
-#define IMG_DYNABOMB_PLAYER_1_ACTIVE                   392
-#define IMG_DYNABOMB_PLAYER_2                          393
-#define IMG_DYNABOMB_PLAYER_2_ACTIVE                   394
-#define IMG_DYNABOMB_PLAYER_3                          395
-#define IMG_DYNABOMB_PLAYER_3_ACTIVE                   396
-#define IMG_DYNABOMB_PLAYER_4                          397
-#define IMG_DYNABOMB_PLAYER_4_ACTIVE                   398
-#define IMG_DYNABOMB_INCREASE_NUMBER                   399
-#define IMG_DYNABOMB_INCREASE_SIZE                     400
-#define IMG_DYNABOMB_INCREASE_POWER                    401
-#define IMG_PIG                                                402
-#define IMG_PIG_DOWN                                   403
-#define IMG_PIG_UP                                     404
-#define IMG_PIG_LEFT                                   405
-#define IMG_PIG_RIGHT                                  406
-#define IMG_PIG_MOVING_DOWN                            407
-#define IMG_PIG_MOVING_UP                              408
-#define IMG_PIG_MOVING_LEFT                            409
-#define IMG_PIG_MOVING_RIGHT                           410
-#define IMG_PIG_DIGGING_DOWN                           411
-#define IMG_PIG_DIGGING_UP                             412
-#define IMG_PIG_DIGGING_LEFT                           413
-#define IMG_PIG_DIGGING_RIGHT                          414
-#define IMG_DRAGON                                     415
-#define IMG_DRAGON_DOWN                                        416
-#define IMG_DRAGON_UP                                  417
-#define IMG_DRAGON_LEFT                                        418
-#define IMG_DRAGON_RIGHT                               419
-#define IMG_DRAGON_MOVING_DOWN                         420
-#define IMG_DRAGON_MOVING_UP                           421
-#define IMG_DRAGON_MOVING_LEFT                         422
-#define IMG_DRAGON_MOVING_RIGHT                                423
-#define IMG_DRAGON_ATTACKING_DOWN                      424
-#define IMG_DRAGON_ATTACKING_UP                                425
-#define IMG_DRAGON_ATTACKING_LEFT                      426
-#define IMG_DRAGON_ATTACKING_RIGHT                     427
-#define IMG_MOLE                                       428
-#define IMG_MOLE_DOWN                                  429
-#define IMG_MOLE_UP                                    430
-#define IMG_MOLE_LEFT                                  431
-#define IMG_MOLE_RIGHT                                 432
-#define IMG_MOLE_MOVING_DOWN                           433
-#define IMG_MOLE_MOVING_UP                             434
-#define IMG_MOLE_MOVING_LEFT                           435
-#define IMG_MOLE_MOVING_RIGHT                          436
-#define IMG_MOLE_DIGGING_DOWN                          437
-#define IMG_MOLE_DIGGING_UP                            438
-#define IMG_MOLE_DIGGING_LEFT                          439
-#define IMG_MOLE_DIGGING_RIGHT                         440
-#define IMG_PENGUIN                                    441
-#define IMG_PENGUIN_EDITOR                             442
-#define IMG_PENGUIN_DOWN                               443
-#define IMG_PENGUIN_UP                                 444
-#define IMG_PENGUIN_LEFT                               445
-#define IMG_PENGUIN_RIGHT                              446
-#define IMG_PENGUIN_MOVING_DOWN                                447
-#define IMG_PENGUIN_MOVING_UP                          448
-#define IMG_PENGUIN_MOVING_LEFT                                449
-#define IMG_PENGUIN_MOVING_RIGHT                       450
-#define IMG_SATELLITE                                  451
-#define IMG_FLAMES_1_LEFT                              452
-#define IMG_FLAMES_2_LEFT                              453
-#define IMG_FLAMES_3_LEFT                              454
-#define IMG_FLAMES_1_RIGHT                             455
-#define IMG_FLAMES_2_RIGHT                             456
-#define IMG_FLAMES_3_RIGHT                             457
-#define IMG_FLAMES_1_UP                                        458
-#define IMG_FLAMES_2_UP                                        459
-#define IMG_FLAMES_3_UP                                        460
-#define IMG_FLAMES_1_DOWN                              461
-#define IMG_FLAMES_2_DOWN                              462
-#define IMG_FLAMES_3_DOWN                              463
-#define IMG_STONEBLOCK                                 464
-#define IMG_PLAYER_1                                   465
-#define IMG_PLAYER_1_EDITOR                            466
-#define IMG_PLAYER_1_DOWN                              467
-#define IMG_PLAYER_1_UP                                        468
-#define IMG_PLAYER_1_LEFT                              469
-#define IMG_PLAYER_1_RIGHT                             470
-#define IMG_PLAYER_1_MOVING_DOWN                       471
-#define IMG_PLAYER_1_MOVING_UP                         472
-#define IMG_PLAYER_1_MOVING_LEFT                       473
-#define IMG_PLAYER_1_MOVING_RIGHT                      474
-#define IMG_PLAYER_1_DIGGING_DOWN                      475
-#define IMG_PLAYER_1_DIGGING_UP                                476
-#define IMG_PLAYER_1_DIGGING_LEFT                      477
-#define IMG_PLAYER_1_DIGGING_RIGHT                     478
-#define IMG_PLAYER_1_COLLECTING_DOWN                   479
-#define IMG_PLAYER_1_COLLECTING_UP                     480
-#define IMG_PLAYER_1_COLLECTING_LEFT                   481
-#define IMG_PLAYER_1_COLLECTING_RIGHT                  482
-#define IMG_PLAYER_1_PUSHING_DOWN                      483
-#define IMG_PLAYER_1_PUSHING_UP                                484
-#define IMG_PLAYER_1_PUSHING_LEFT                      485
-#define IMG_PLAYER_1_PUSHING_RIGHT                     486
-#define IMG_PLAYER_1_SNAPPING_DOWN                     487
-#define IMG_PLAYER_1_SNAPPING_UP                       488
-#define IMG_PLAYER_1_SNAPPING_LEFT                     489
-#define IMG_PLAYER_1_SNAPPING_RIGHT                    490
-#define IMG_PLAYER_2                                   491
-#define IMG_PLAYER_2_EDITOR                            492
-#define IMG_PLAYER_2_DOWN                              493
-#define IMG_PLAYER_2_UP                                        494
-#define IMG_PLAYER_2_LEFT                              495
-#define IMG_PLAYER_2_RIGHT                             496
-#define IMG_PLAYER_2_MOVING_DOWN                       497
-#define IMG_PLAYER_2_MOVING_UP                         498
-#define IMG_PLAYER_2_MOVING_LEFT                       499
-#define IMG_PLAYER_2_MOVING_RIGHT                      500
-#define IMG_PLAYER_2_DIGGING_DOWN                      501
-#define IMG_PLAYER_2_DIGGING_UP                                502
-#define IMG_PLAYER_2_DIGGING_LEFT                      503
-#define IMG_PLAYER_2_DIGGING_RIGHT                     504
-#define IMG_PLAYER_2_COLLECTING_DOWN                   505
-#define IMG_PLAYER_2_COLLECTING_UP                     506
-#define IMG_PLAYER_2_COLLECTING_LEFT                   507
-#define IMG_PLAYER_2_COLLECTING_RIGHT                  508
-#define IMG_PLAYER_2_PUSHING_DOWN                      509
-#define IMG_PLAYER_2_PUSHING_UP                                510
-#define IMG_PLAYER_2_PUSHING_LEFT                      511
-#define IMG_PLAYER_2_PUSHING_RIGHT                     512
-#define IMG_PLAYER_2_SNAPPING_DOWN                     513
-#define IMG_PLAYER_2_SNAPPING_UP                       514
-#define IMG_PLAYER_2_SNAPPING_LEFT                     515
-#define IMG_PLAYER_2_SNAPPING_RIGHT                    516
-#define IMG_PLAYER_3                                   517
-#define IMG_PLAYER_3_EDITOR                            518
-#define IMG_PLAYER_3_DOWN                              519
-#define IMG_PLAYER_3_UP                                        520
-#define IMG_PLAYER_3_LEFT                              521
-#define IMG_PLAYER_3_RIGHT                             522
-#define IMG_PLAYER_3_MOVING_DOWN                       523
-#define IMG_PLAYER_3_MOVING_UP                         524
-#define IMG_PLAYER_3_MOVING_LEFT                       525
-#define IMG_PLAYER_3_MOVING_RIGHT                      526
-#define IMG_PLAYER_3_DIGGING_DOWN                      527
-#define IMG_PLAYER_3_DIGGING_UP                                528
-#define IMG_PLAYER_3_DIGGING_LEFT                      529
-#define IMG_PLAYER_3_DIGGING_RIGHT                     530
-#define IMG_PLAYER_3_COLLECTING_DOWN                   531
-#define IMG_PLAYER_3_COLLECTING_UP                     532
-#define IMG_PLAYER_3_COLLECTING_LEFT                   533
-#define IMG_PLAYER_3_COLLECTING_RIGHT                  534
-#define IMG_PLAYER_3_PUSHING_DOWN                      535
-#define IMG_PLAYER_3_PUSHING_UP                                536
-#define IMG_PLAYER_3_PUSHING_LEFT                      537
-#define IMG_PLAYER_3_PUSHING_RIGHT                     538
-#define IMG_PLAYER_3_SNAPPING_DOWN                     539
-#define IMG_PLAYER_3_SNAPPING_UP                       540
-#define IMG_PLAYER_3_SNAPPING_LEFT                     541
-#define IMG_PLAYER_3_SNAPPING_RIGHT                    542
-#define IMG_PLAYER_4                                   543
-#define IMG_PLAYER_4_EDITOR                            544
-#define IMG_PLAYER_4_DOWN                              545
-#define IMG_PLAYER_4_UP                                        546
-#define IMG_PLAYER_4_LEFT                              547
-#define IMG_PLAYER_4_RIGHT                             548
-#define IMG_PLAYER_4_MOVING_DOWN                       549
-#define IMG_PLAYER_4_MOVING_UP                         550
-#define IMG_PLAYER_4_MOVING_LEFT                       551
-#define IMG_PLAYER_4_MOVING_RIGHT                      552
-#define IMG_PLAYER_4_DIGGING_DOWN                      553
-#define IMG_PLAYER_4_DIGGING_UP                                554
-#define IMG_PLAYER_4_DIGGING_LEFT                      555
-#define IMG_PLAYER_4_DIGGING_RIGHT                     556
-#define IMG_PLAYER_4_COLLECTING_DOWN                   557
-#define IMG_PLAYER_4_COLLECTING_UP                     558
-#define IMG_PLAYER_4_COLLECTING_LEFT                   559
-#define IMG_PLAYER_4_COLLECTING_RIGHT                  560
-#define IMG_PLAYER_4_PUSHING_DOWN                      561
-#define IMG_PLAYER_4_PUSHING_UP                                562
-#define IMG_PLAYER_4_PUSHING_LEFT                      563
-#define IMG_PLAYER_4_PUSHING_RIGHT                     564
-#define IMG_PLAYER_4_SNAPPING_DOWN                     565
-#define IMG_PLAYER_4_SNAPPING_UP                       566
-#define IMG_PLAYER_4_SNAPPING_LEFT                     567
-#define IMG_PLAYER_4_SNAPPING_RIGHT                    568
-#define IMG_DEFAULT_EXPLODING                          569
-#define IMG_TWINKLE_BLUE                               570
-#define IMG_TWINKLE_WHITE                              571
-#define IMG_STEELWALL_TOPLEFT                          572
-#define IMG_STEELWALL_TOPRIGHT                         573
-#define IMG_STEELWALL_BOTTOMLEFT                       574
-#define IMG_STEELWALL_BOTTOMRIGHT                      575
-#define IMG_STEELWALL_HORIZONTAL                       576
-#define IMG_STEELWALL_VERTICAL                         577
-#define IMG_STEELWALL_TOPLEFT_EDITOR                   578
-#define IMG_STEELWALL_TOPRIGHT_EDITOR                  579
-#define IMG_STEELWALL_BOTTOMLEFT_EDITOR                        580
-#define IMG_STEELWALL_BOTTOMRIGHT_EDITOR               581
-#define IMG_STEELWALL_HORIZONTAL_EDITOR                        582
-#define IMG_STEELWALL_VERTICAL_EDITOR                  583
-#define IMG_INVISIBLE_STEELWALL_TOPLEFT                        584
-#define IMG_INVISIBLE_STEELWALL_TOPRIGHT               585
-#define IMG_INVISIBLE_STEELWALL_BOTTOMLEFT             586
-#define IMG_INVISIBLE_STEELWALL_BOTTOMRIGHT            587
-#define IMG_INVISIBLE_STEELWALL_HORIZONTAL             588
-#define IMG_INVISIBLE_STEELWALL_VERTICAL               589
-#define IMG_INVISIBLE_STEELWALL_TOPLEFT_EDITOR         590
-#define IMG_INVISIBLE_STEELWALL_TOPRIGHT_EDITOR                591
-#define IMG_INVISIBLE_STEELWALL_BOTTOMLEFT_EDITOR      592
-#define IMG_INVISIBLE_STEELWALL_BOTTOMRIGHT_EDITOR     593
-#define IMG_INVISIBLE_STEELWALL_HORIZONTAL_EDITOR      594
-#define IMG_INVISIBLE_STEELWALL_VERTICAL_EDITOR                595
-#define IMG_ARROW_LEFT                                 596
-#define IMG_ARROW_RIGHT                                        597
-#define IMG_ARROW_UP                                   598
-#define IMG_ARROW_DOWN                                 599
-#define IMG_CHAR_SPACE                                 600
-#define IMG_CHAR_EXCLAM                                        601
-#define IMG_CHAR_QUOTEDBL                              602
-#define IMG_CHAR_NUMBERSIGN                            603
-#define IMG_CHAR_DOLLAR                                        604
-#define IMG_CHAR_PROCENT                               605
-#define IMG_CHAR_AMPERSAND                             606
-#define IMG_CHAR_APOSTROPHE                            607
-#define IMG_CHAR_PARENLEFT                             608
-#define IMG_CHAR_PARENRIGHT                            609
-#define IMG_CHAR_ASTERISK                              610
-#define IMG_CHAR_PLUS                                  611
-#define IMG_CHAR_COMMA                                 612
-#define IMG_CHAR_MINUS                                 613
-#define IMG_CHAR_PERIOD                                        614
-#define IMG_CHAR_SLASH                                 615
-#define IMG_CHAR_0                                     616
-#define IMG_CHAR_1                                     617
-#define IMG_CHAR_2                                     618
-#define IMG_CHAR_3                                     619
-#define IMG_CHAR_4                                     620
-#define IMG_CHAR_5                                     621
-#define IMG_CHAR_6                                     622
-#define IMG_CHAR_7                                     623
-#define IMG_CHAR_8                                     624
-#define IMG_CHAR_9                                     625
-#define IMG_CHAR_COLON                                 626
-#define IMG_CHAR_SEMICOLON                             627
-#define IMG_CHAR_LESS                                  628
-#define IMG_CHAR_EQUAL                                 629
-#define IMG_CHAR_GREATER                               630
-#define IMG_CHAR_QUESTION                              631
-#define IMG_CHAR_AT                                    632
-#define IMG_CHAR_A                                     633
-#define IMG_CHAR_B                                     634
-#define IMG_CHAR_C                                     635
-#define IMG_CHAR_D                                     636
-#define IMG_CHAR_E                                     637
-#define IMG_CHAR_F                                     638
-#define IMG_CHAR_G                                     639
-#define IMG_CHAR_H                                     640
-#define IMG_CHAR_I                                     641
-#define IMG_CHAR_J                                     642
-#define IMG_CHAR_K                                     643
-#define IMG_CHAR_L                                     644
-#define IMG_CHAR_M                                     645
-#define IMG_CHAR_N                                     646
-#define IMG_CHAR_O                                     647
-#define IMG_CHAR_P                                     648
-#define IMG_CHAR_Q                                     649
-#define IMG_CHAR_R                                     650
-#define IMG_CHAR_S                                     651
-#define IMG_CHAR_T                                     652
-#define IMG_CHAR_U                                     653
-#define IMG_CHAR_V                                     654
-#define IMG_CHAR_W                                     655
-#define IMG_CHAR_X                                     656
-#define IMG_CHAR_Y                                     657
-#define IMG_CHAR_Z                                     658
-#define IMG_CHAR_BRACKETLEFT                           659
-#define IMG_CHAR_BACKSLASH                             660
-#define IMG_CHAR_BRACKETRIGHT                          661
-#define IMG_CHAR_ASCIICIRCUM                           662
-#define IMG_CHAR_UNDERSCORE                            663
-#define IMG_CHAR_COPYRIGHT                             664
-#define IMG_CHAR_AUMLAUT                               665
-#define IMG_CHAR_OUMLAUT                               666
-#define IMG_CHAR_UUMLAUT                               667
-#define IMG_CHAR_DEGREE                                        668
-#define IMG_CHAR_TRADEMARK                             669
-#define IMG_CHAR_CURSOR                                        670
-#define IMG_CUSTOM_1                                   671
-#define IMG_CUSTOM_1_EDITOR                            672
-#define IMG_CUSTOM_2                                   673
-#define IMG_CUSTOM_2_EDITOR                            674
-#define IMG_CUSTOM_3                                   675
-#define IMG_CUSTOM_3_EDITOR                            676
-#define IMG_CUSTOM_4                                   677
-#define IMG_CUSTOM_4_EDITOR                            678
-#define IMG_CUSTOM_5                                   679
-#define IMG_CUSTOM_5_EDITOR                            680
-#define IMG_CUSTOM_6                                   681
-#define IMG_CUSTOM_6_EDITOR                            682
-#define IMG_CUSTOM_7                                   683
-#define IMG_CUSTOM_7_EDITOR                            684
-#define IMG_CUSTOM_8                                   685
-#define IMG_CUSTOM_8_EDITOR                            686
-#define IMG_CUSTOM_9                                   687
-#define IMG_CUSTOM_9_EDITOR                            688
-#define IMG_CUSTOM_10                                  689
-#define IMG_CUSTOM_10_EDITOR                           690
-#define IMG_CUSTOM_11                                  691
-#define IMG_CUSTOM_11_EDITOR                           692
-#define IMG_CUSTOM_12                                  693
-#define IMG_CUSTOM_12_EDITOR                           694
-#define IMG_CUSTOM_13                                  695
-#define IMG_CUSTOM_13_EDITOR                           696
-#define IMG_CUSTOM_14                                  697
-#define IMG_CUSTOM_14_EDITOR                           698
-#define IMG_CUSTOM_15                                  699
-#define IMG_CUSTOM_15_EDITOR                           700
-#define IMG_CUSTOM_16                                  701
-#define IMG_CUSTOM_16_EDITOR                           702
-#define IMG_CUSTOM_17                                  703
-#define IMG_CUSTOM_17_EDITOR                           704
-#define IMG_CUSTOM_18                                  705
-#define IMG_CUSTOM_18_EDITOR                           706
-#define IMG_CUSTOM_19                                  707
-#define IMG_CUSTOM_19_EDITOR                           708
-#define IMG_CUSTOM_20                                  709
-#define IMG_CUSTOM_20_EDITOR                           710
-#define IMG_CUSTOM_21                                  711
-#define IMG_CUSTOM_21_EDITOR                           712
-#define IMG_CUSTOM_22                                  713
-#define IMG_CUSTOM_22_EDITOR                           714
-#define IMG_CUSTOM_23                                  715
-#define IMG_CUSTOM_23_EDITOR                           716
-#define IMG_CUSTOM_24                                  717
-#define IMG_CUSTOM_24_EDITOR                           718
-#define IMG_CUSTOM_25                                  719
-#define IMG_CUSTOM_25_EDITOR                           720
-#define IMG_CUSTOM_26                                  721
-#define IMG_CUSTOM_26_EDITOR                           722
-#define IMG_CUSTOM_27                                  723
-#define IMG_CUSTOM_27_EDITOR                           724
-#define IMG_CUSTOM_28                                  725
-#define IMG_CUSTOM_28_EDITOR                           726
-#define IMG_CUSTOM_29                                  727
-#define IMG_CUSTOM_29_EDITOR                           728
-#define IMG_CUSTOM_30                                  729
-#define IMG_CUSTOM_30_EDITOR                           730
-#define IMG_CUSTOM_31                                  731
-#define IMG_CUSTOM_31_EDITOR                           732
-#define IMG_CUSTOM_32                                  733
-#define IMG_CUSTOM_32_EDITOR                           734
-#define IMG_CUSTOM_33                                  735
-#define IMG_CUSTOM_33_EDITOR                           736
-#define IMG_CUSTOM_34                                  737
-#define IMG_CUSTOM_34_EDITOR                           738
-#define IMG_CUSTOM_35                                  739
-#define IMG_CUSTOM_35_EDITOR                           740
-#define IMG_CUSTOM_36                                  741
-#define IMG_CUSTOM_36_EDITOR                           742
-#define IMG_CUSTOM_37                                  743
-#define IMG_CUSTOM_37_EDITOR                           744
-#define IMG_CUSTOM_38                                  745
-#define IMG_CUSTOM_38_EDITOR                           746
-#define IMG_CUSTOM_39                                  747
-#define IMG_CUSTOM_39_EDITOR                           748
-#define IMG_CUSTOM_40                                  749
-#define IMG_CUSTOM_40_EDITOR                           750
-#define IMG_CUSTOM_41                                  751
-#define IMG_CUSTOM_41_EDITOR                           752
-#define IMG_CUSTOM_42                                  753
-#define IMG_CUSTOM_42_EDITOR                           754
-#define IMG_CUSTOM_43                                  755
-#define IMG_CUSTOM_43_EDITOR                           756
-#define IMG_CUSTOM_44                                  757
-#define IMG_CUSTOM_44_EDITOR                           758
-#define IMG_CUSTOM_45                                  759
-#define IMG_CUSTOM_45_EDITOR                           760
-#define IMG_CUSTOM_46                                  761
-#define IMG_CUSTOM_46_EDITOR                           762
-#define IMG_CUSTOM_47                                  763
-#define IMG_CUSTOM_47_EDITOR                           764
-#define IMG_CUSTOM_48                                  765
-#define IMG_CUSTOM_48_EDITOR                           766
-#define IMG_CUSTOM_49                                  767
-#define IMG_CUSTOM_49_EDITOR                           768
-#define IMG_CUSTOM_50                                  769
-#define IMG_CUSTOM_50_EDITOR                           770
-#define IMG_CUSTOM_51                                  771
-#define IMG_CUSTOM_51_EDITOR                           772
-#define IMG_CUSTOM_52                                  773
-#define IMG_CUSTOM_52_EDITOR                           774
-#define IMG_CUSTOM_53                                  775
-#define IMG_CUSTOM_53_EDITOR                           776
-#define IMG_CUSTOM_54                                  777
-#define IMG_CUSTOM_54_EDITOR                           778
-#define IMG_CUSTOM_55                                  779
-#define IMG_CUSTOM_55_EDITOR                           780
-#define IMG_CUSTOM_56                                  781
-#define IMG_CUSTOM_56_EDITOR                           782
-#define IMG_CUSTOM_57                                  783
-#define IMG_CUSTOM_57_EDITOR                           784
-#define IMG_CUSTOM_58                                  785
-#define IMG_CUSTOM_58_EDITOR                           786
-#define IMG_CUSTOM_59                                  787
-#define IMG_CUSTOM_59_EDITOR                           788
-#define IMG_CUSTOM_60                                  789
-#define IMG_CUSTOM_60_EDITOR                           790
-#define IMG_CUSTOM_61                                  791
-#define IMG_CUSTOM_61_EDITOR                           792
-#define IMG_CUSTOM_62                                  793
-#define IMG_CUSTOM_62_EDITOR                           794
-#define IMG_CUSTOM_63                                  795
-#define IMG_CUSTOM_63_EDITOR                           796
-#define IMG_CUSTOM_64                                  797
-#define IMG_CUSTOM_64_EDITOR                           798
-#define IMG_CUSTOM_65                                  799
-#define IMG_CUSTOM_65_EDITOR                           800
-#define IMG_CUSTOM_66                                  801
-#define IMG_CUSTOM_66_EDITOR                           802
-#define IMG_CUSTOM_67                                  803
-#define IMG_CUSTOM_67_EDITOR                           804
-#define IMG_CUSTOM_68                                  805
-#define IMG_CUSTOM_68_EDITOR                           806
-#define IMG_CUSTOM_69                                  807
-#define IMG_CUSTOM_69_EDITOR                           808
-#define IMG_CUSTOM_70                                  809
-#define IMG_CUSTOM_70_EDITOR                           810
-#define IMG_CUSTOM_71                                  811
-#define IMG_CUSTOM_71_EDITOR                           812
-#define IMG_CUSTOM_72                                  813
-#define IMG_CUSTOM_72_EDITOR                           814
-#define IMG_CUSTOM_73                                  815
-#define IMG_CUSTOM_73_EDITOR                           816
-#define IMG_CUSTOM_74                                  817
-#define IMG_CUSTOM_74_EDITOR                           818
-#define IMG_CUSTOM_75                                  819
-#define IMG_CUSTOM_75_EDITOR                           820
-#define IMG_CUSTOM_76                                  821
-#define IMG_CUSTOM_76_EDITOR                           822
-#define IMG_CUSTOM_77                                  823
-#define IMG_CUSTOM_77_EDITOR                           824
-#define IMG_CUSTOM_78                                  825
-#define IMG_CUSTOM_78_EDITOR                           826
-#define IMG_CUSTOM_79                                  827
-#define IMG_CUSTOM_79_EDITOR                           828
-#define IMG_CUSTOM_80                                  829
-#define IMG_CUSTOM_80_EDITOR                           830
-#define IMG_CUSTOM_81                                  831
-#define IMG_CUSTOM_81_EDITOR                           832
-#define IMG_CUSTOM_82                                  833
-#define IMG_CUSTOM_82_EDITOR                           834
-#define IMG_CUSTOM_83                                  835
-#define IMG_CUSTOM_83_EDITOR                           836
-#define IMG_CUSTOM_84                                  837
-#define IMG_CUSTOM_84_EDITOR                           838
-#define IMG_CUSTOM_85                                  839
-#define IMG_CUSTOM_85_EDITOR                           840
-#define IMG_CUSTOM_86                                  841
-#define IMG_CUSTOM_86_EDITOR                           842
-#define IMG_CUSTOM_87                                  843
-#define IMG_CUSTOM_87_EDITOR                           844
-#define IMG_CUSTOM_88                                  845
-#define IMG_CUSTOM_88_EDITOR                           846
-#define IMG_CUSTOM_89                                  847
-#define IMG_CUSTOM_89_EDITOR                           848
-#define IMG_CUSTOM_90                                  849
-#define IMG_CUSTOM_90_EDITOR                           850
-#define IMG_CUSTOM_91                                  851
-#define IMG_CUSTOM_91_EDITOR                           852
-#define IMG_CUSTOM_92                                  853
-#define IMG_CUSTOM_92_EDITOR                           854
-#define IMG_CUSTOM_93                                  855
-#define IMG_CUSTOM_93_EDITOR                           856
-#define IMG_CUSTOM_94                                  857
-#define IMG_CUSTOM_94_EDITOR                           858
-#define IMG_CUSTOM_95                                  859
-#define IMG_CUSTOM_95_EDITOR                           860
-#define IMG_CUSTOM_96                                  861
-#define IMG_CUSTOM_96_EDITOR                           862
-#define IMG_CUSTOM_97                                  863
-#define IMG_CUSTOM_97_EDITOR                           864
-#define IMG_CUSTOM_98                                  865
-#define IMG_CUSTOM_98_EDITOR                           866
-#define IMG_CUSTOM_99                                  867
-#define IMG_CUSTOM_99_EDITOR                           868
-#define IMG_CUSTOM_100                                 869
-#define IMG_CUSTOM_100_EDITOR                          870
-#define IMG_CUSTOM_101                                 871
-#define IMG_CUSTOM_101_EDITOR                          872
-#define IMG_CUSTOM_102                                 873
-#define IMG_CUSTOM_102_EDITOR                          874
-#define IMG_CUSTOM_103                                 875
-#define IMG_CUSTOM_103_EDITOR                          876
-#define IMG_CUSTOM_104                                 877
-#define IMG_CUSTOM_104_EDITOR                          878
-#define IMG_CUSTOM_105                                 879
-#define IMG_CUSTOM_105_EDITOR                          880
-#define IMG_CUSTOM_106                                 881
-#define IMG_CUSTOM_106_EDITOR                          882
-#define IMG_CUSTOM_107                                 883
-#define IMG_CUSTOM_107_EDITOR                          884
-#define IMG_CUSTOM_108                                 885
-#define IMG_CUSTOM_108_EDITOR                          886
-#define IMG_CUSTOM_109                                 887
-#define IMG_CUSTOM_109_EDITOR                          888
-#define IMG_CUSTOM_110                                 889
-#define IMG_CUSTOM_110_EDITOR                          890
-#define IMG_CUSTOM_111                                 891
-#define IMG_CUSTOM_111_EDITOR                          892
-#define IMG_CUSTOM_112                                 893
-#define IMG_CUSTOM_112_EDITOR                          894
-#define IMG_CUSTOM_113                                 895
-#define IMG_CUSTOM_113_EDITOR                          896
-#define IMG_CUSTOM_114                                 897
-#define IMG_CUSTOM_114_EDITOR                          898
-#define IMG_CUSTOM_115                                 899
-#define IMG_CUSTOM_115_EDITOR                          900
-#define IMG_CUSTOM_116                                 901
-#define IMG_CUSTOM_116_EDITOR                          902
-#define IMG_CUSTOM_117                                 903
-#define IMG_CUSTOM_117_EDITOR                          904
-#define IMG_CUSTOM_118                                 905
-#define IMG_CUSTOM_118_EDITOR                          906
-#define IMG_CUSTOM_119                                 907
-#define IMG_CUSTOM_119_EDITOR                          908
-#define IMG_CUSTOM_120                                 909
-#define IMG_CUSTOM_120_EDITOR                          910
-#define IMG_CUSTOM_121                                 911
-#define IMG_CUSTOM_121_EDITOR                          912
-#define IMG_CUSTOM_122                                 913
-#define IMG_CUSTOM_122_EDITOR                          914
-#define IMG_CUSTOM_123                                 915
-#define IMG_CUSTOM_123_EDITOR                          916
-#define IMG_CUSTOM_124                                 917
-#define IMG_CUSTOM_124_EDITOR                          918
-#define IMG_CUSTOM_125                                 919
-#define IMG_CUSTOM_125_EDITOR                          920
-#define IMG_CUSTOM_126                                 921
-#define IMG_CUSTOM_126_EDITOR                          922
-#define IMG_CUSTOM_127                                 923
-#define IMG_CUSTOM_127_EDITOR                          924
-#define IMG_CUSTOM_128                                 925
-#define IMG_CUSTOM_128_EDITOR                          926
-#define IMG_CUSTOM_129                                 927
-#define IMG_CUSTOM_129_EDITOR                          928
-#define IMG_CUSTOM_130                                 929
-#define IMG_CUSTOM_130_EDITOR                          930
-#define IMG_CUSTOM_131                                 931
-#define IMG_CUSTOM_131_EDITOR                          932
-#define IMG_CUSTOM_132                                 933
-#define IMG_CUSTOM_132_EDITOR                          934
-#define IMG_CUSTOM_133                                 935
-#define IMG_CUSTOM_133_EDITOR                          936
-#define IMG_CUSTOM_134                                 937
-#define IMG_CUSTOM_134_EDITOR                          938
-#define IMG_CUSTOM_135                                 939
-#define IMG_CUSTOM_135_EDITOR                          940
-#define IMG_CUSTOM_136                                 941
-#define IMG_CUSTOM_136_EDITOR                          942
-#define IMG_CUSTOM_137                                 943
-#define IMG_CUSTOM_137_EDITOR                          944
-#define IMG_CUSTOM_138                                 945
-#define IMG_CUSTOM_138_EDITOR                          946
-#define IMG_CUSTOM_139                                 947
-#define IMG_CUSTOM_139_EDITOR                          948
-#define IMG_CUSTOM_140                                 949
-#define IMG_CUSTOM_140_EDITOR                          950
-#define IMG_CUSTOM_141                                 951
-#define IMG_CUSTOM_141_EDITOR                          952
-#define IMG_CUSTOM_142                                 953
-#define IMG_CUSTOM_142_EDITOR                          954
-#define IMG_CUSTOM_143                                 955
-#define IMG_CUSTOM_143_EDITOR                          956
-#define IMG_CUSTOM_144                                 957
-#define IMG_CUSTOM_144_EDITOR                          958
-#define IMG_CUSTOM_145                                 959
-#define IMG_CUSTOM_145_EDITOR                          960
-#define IMG_CUSTOM_146                                 961
-#define IMG_CUSTOM_146_EDITOR                          962
-#define IMG_CUSTOM_147                                 963
-#define IMG_CUSTOM_147_EDITOR                          964
-#define IMG_CUSTOM_148                                 965
-#define IMG_CUSTOM_148_EDITOR                          966
-#define IMG_CUSTOM_149                                 967
-#define IMG_CUSTOM_149_EDITOR                          968
-#define IMG_CUSTOM_150                                 969
-#define IMG_CUSTOM_150_EDITOR                          970
-#define IMG_CUSTOM_151                                 971
-#define IMG_CUSTOM_151_EDITOR                          972
-#define IMG_CUSTOM_152                                 973
-#define IMG_CUSTOM_152_EDITOR                          974
-#define IMG_CUSTOM_153                                 975
-#define IMG_CUSTOM_153_EDITOR                          976
-#define IMG_CUSTOM_154                                 977
-#define IMG_CUSTOM_154_EDITOR                          978
-#define IMG_CUSTOM_155                                 979
-#define IMG_CUSTOM_155_EDITOR                          980
-#define IMG_CUSTOM_156                                 981
-#define IMG_CUSTOM_156_EDITOR                          982
-#define IMG_CUSTOM_157                                 983
-#define IMG_CUSTOM_157_EDITOR                          984
-#define IMG_CUSTOM_158                                 985
-#define IMG_CUSTOM_158_EDITOR                          986
-#define IMG_CUSTOM_159                                 987
-#define IMG_CUSTOM_159_EDITOR                          988
-#define IMG_CUSTOM_160                                 989
-#define IMG_CUSTOM_160_EDITOR                          990
-#define IMG_CUSTOM_161                                 991
-#define IMG_CUSTOM_161_EDITOR                          992
-#define IMG_CUSTOM_162                                 993
-#define IMG_CUSTOM_162_EDITOR                          994
-#define IMG_CUSTOM_163                                 995
-#define IMG_CUSTOM_163_EDITOR                          996
-#define IMG_CUSTOM_164                                 997
-#define IMG_CUSTOM_164_EDITOR                          998
-#define IMG_CUSTOM_165                                 999
-#define IMG_CUSTOM_165_EDITOR                          1000
-#define IMG_CUSTOM_166                                 1001
-#define IMG_CUSTOM_166_EDITOR                          1002
-#define IMG_CUSTOM_167                                 1003
-#define IMG_CUSTOM_167_EDITOR                          1004
-#define IMG_CUSTOM_168                                 1005
-#define IMG_CUSTOM_168_EDITOR                          1006
-#define IMG_CUSTOM_169                                 1007
-#define IMG_CUSTOM_169_EDITOR                          1008
-#define IMG_CUSTOM_170                                 1009
-#define IMG_CUSTOM_170_EDITOR                          1010
-#define IMG_CUSTOM_171                                 1011
-#define IMG_CUSTOM_171_EDITOR                          1012
-#define IMG_CUSTOM_172                                 1013
-#define IMG_CUSTOM_172_EDITOR                          1014
-#define IMG_CUSTOM_173                                 1015
-#define IMG_CUSTOM_173_EDITOR                          1016
-#define IMG_CUSTOM_174                                 1017
-#define IMG_CUSTOM_174_EDITOR                          1018
-#define IMG_CUSTOM_175                                 1019
-#define IMG_CUSTOM_175_EDITOR                          1020
-#define IMG_CUSTOM_176                                 1021
-#define IMG_CUSTOM_176_EDITOR                          1022
-#define IMG_CUSTOM_177                                 1023
-#define IMG_CUSTOM_177_EDITOR                          1024
-#define IMG_CUSTOM_178                                 1025
-#define IMG_CUSTOM_178_EDITOR                          1026
-#define IMG_CUSTOM_179                                 1027
-#define IMG_CUSTOM_179_EDITOR                          1028
-#define IMG_CUSTOM_180                                 1029
-#define IMG_CUSTOM_180_EDITOR                          1030
-#define IMG_CUSTOM_181                                 1031
-#define IMG_CUSTOM_181_EDITOR                          1032
-#define IMG_CUSTOM_182                                 1033
-#define IMG_CUSTOM_182_EDITOR                          1034
-#define IMG_CUSTOM_183                                 1035
-#define IMG_CUSTOM_183_EDITOR                          1036
-#define IMG_CUSTOM_184                                 1037
-#define IMG_CUSTOM_184_EDITOR                          1038
-#define IMG_CUSTOM_185                                 1039
-#define IMG_CUSTOM_185_EDITOR                          1040
-#define IMG_CUSTOM_186                                 1041
-#define IMG_CUSTOM_186_EDITOR                          1042
-#define IMG_CUSTOM_187                                 1043
-#define IMG_CUSTOM_187_EDITOR                          1044
-#define IMG_CUSTOM_188                                 1045
-#define IMG_CUSTOM_188_EDITOR                          1046
-#define IMG_CUSTOM_189                                 1047
-#define IMG_CUSTOM_189_EDITOR                          1048
-#define IMG_CUSTOM_190                                 1049
-#define IMG_CUSTOM_190_EDITOR                          1050
-#define IMG_CUSTOM_191                                 1051
-#define IMG_CUSTOM_191_EDITOR                          1052
-#define IMG_CUSTOM_192                                 1053
-#define IMG_CUSTOM_192_EDITOR                          1054
-#define IMG_CUSTOM_193                                 1055
-#define IMG_CUSTOM_193_EDITOR                          1056
-#define IMG_CUSTOM_194                                 1057
-#define IMG_CUSTOM_194_EDITOR                          1058
-#define IMG_CUSTOM_195                                 1059
-#define IMG_CUSTOM_195_EDITOR                          1060
-#define IMG_CUSTOM_196                                 1061
-#define IMG_CUSTOM_196_EDITOR                          1062
-#define IMG_CUSTOM_197                                 1063
-#define IMG_CUSTOM_197_EDITOR                          1064
-#define IMG_CUSTOM_198                                 1065
-#define IMG_CUSTOM_198_EDITOR                          1066
-#define IMG_CUSTOM_199                                 1067
-#define IMG_CUSTOM_199_EDITOR                          1068
-#define IMG_CUSTOM_200                                 1069
-#define IMG_CUSTOM_200_EDITOR                          1070
-#define IMG_CUSTOM_201                                 1071
-#define IMG_CUSTOM_201_EDITOR                          1072
-#define IMG_CUSTOM_202                                 1073
-#define IMG_CUSTOM_202_EDITOR                          1074
-#define IMG_CUSTOM_203                                 1075
-#define IMG_CUSTOM_203_EDITOR                          1076
-#define IMG_CUSTOM_204                                 1077
-#define IMG_CUSTOM_204_EDITOR                          1078
-#define IMG_CUSTOM_205                                 1079
-#define IMG_CUSTOM_205_EDITOR                          1080
-#define IMG_CUSTOM_206                                 1081
-#define IMG_CUSTOM_206_EDITOR                          1082
-#define IMG_CUSTOM_207                                 1083
-#define IMG_CUSTOM_207_EDITOR                          1084
-#define IMG_CUSTOM_208                                 1085
-#define IMG_CUSTOM_208_EDITOR                          1086
-#define IMG_CUSTOM_209                                 1087
-#define IMG_CUSTOM_209_EDITOR                          1088
-#define IMG_CUSTOM_210                                 1089
-#define IMG_CUSTOM_210_EDITOR                          1090
-#define IMG_CUSTOM_211                                 1091
-#define IMG_CUSTOM_211_EDITOR                          1092
-#define IMG_CUSTOM_212                                 1093
-#define IMG_CUSTOM_212_EDITOR                          1094
-#define IMG_CUSTOM_213                                 1095
-#define IMG_CUSTOM_213_EDITOR                          1096
-#define IMG_CUSTOM_214                                 1097
-#define IMG_CUSTOM_214_EDITOR                          1098
-#define IMG_CUSTOM_215                                 1099
-#define IMG_CUSTOM_215_EDITOR                          1100
-#define IMG_CUSTOM_216                                 1101
-#define IMG_CUSTOM_216_EDITOR                          1102
-#define IMG_CUSTOM_217                                 1103
-#define IMG_CUSTOM_217_EDITOR                          1104
-#define IMG_CUSTOM_218                                 1105
-#define IMG_CUSTOM_218_EDITOR                          1106
-#define IMG_CUSTOM_219                                 1107
-#define IMG_CUSTOM_219_EDITOR                          1108
-#define IMG_CUSTOM_220                                 1109
-#define IMG_CUSTOM_220_EDITOR                          1110
-#define IMG_CUSTOM_221                                 1111
-#define IMG_CUSTOM_221_EDITOR                          1112
-#define IMG_CUSTOM_222                                 1113
-#define IMG_CUSTOM_222_EDITOR                          1114
-#define IMG_CUSTOM_223                                 1115
-#define IMG_CUSTOM_223_EDITOR                          1116
-#define IMG_CUSTOM_224                                 1117
-#define IMG_CUSTOM_224_EDITOR                          1118
-#define IMG_CUSTOM_225                                 1119
-#define IMG_CUSTOM_225_EDITOR                          1120
-#define IMG_CUSTOM_226                                 1121
-#define IMG_CUSTOM_226_EDITOR                          1122
-#define IMG_CUSTOM_227                                 1123
-#define IMG_CUSTOM_227_EDITOR                          1124
-#define IMG_CUSTOM_228                                 1125
-#define IMG_CUSTOM_228_EDITOR                          1126
-#define IMG_CUSTOM_229                                 1127
-#define IMG_CUSTOM_229_EDITOR                          1128
-#define IMG_CUSTOM_230                                 1129
-#define IMG_CUSTOM_230_EDITOR                          1130
-#define IMG_CUSTOM_231                                 1131
-#define IMG_CUSTOM_231_EDITOR                          1132
-#define IMG_CUSTOM_232                                 1133
-#define IMG_CUSTOM_232_EDITOR                          1134
-#define IMG_CUSTOM_233                                 1135
-#define IMG_CUSTOM_233_EDITOR                          1136
-#define IMG_CUSTOM_234                                 1137
-#define IMG_CUSTOM_234_EDITOR                          1138
-#define IMG_CUSTOM_235                                 1139
-#define IMG_CUSTOM_235_EDITOR                          1140
-#define IMG_CUSTOM_236                                 1141
-#define IMG_CUSTOM_236_EDITOR                          1142
-#define IMG_CUSTOM_237                                 1143
-#define IMG_CUSTOM_237_EDITOR                          1144
-#define IMG_CUSTOM_238                                 1145
-#define IMG_CUSTOM_238_EDITOR                          1146
-#define IMG_CUSTOM_239                                 1147
-#define IMG_CUSTOM_239_EDITOR                          1148
-#define IMG_CUSTOM_240                                 1149
-#define IMG_CUSTOM_240_EDITOR                          1150
-#define IMG_CUSTOM_241                                 1151
-#define IMG_CUSTOM_241_EDITOR                          1152
-#define IMG_CUSTOM_242                                 1153
-#define IMG_CUSTOM_242_EDITOR                          1154
-#define IMG_CUSTOM_243                                 1155
-#define IMG_CUSTOM_243_EDITOR                          1156
-#define IMG_CUSTOM_244                                 1157
-#define IMG_CUSTOM_244_EDITOR                          1158
-#define IMG_CUSTOM_245                                 1159
-#define IMG_CUSTOM_245_EDITOR                          1160
-#define IMG_CUSTOM_246                                 1161
-#define IMG_CUSTOM_246_EDITOR                          1162
-#define IMG_CUSTOM_247                                 1163
-#define IMG_CUSTOM_247_EDITOR                          1164
-#define IMG_CUSTOM_248                                 1165
-#define IMG_CUSTOM_248_EDITOR                          1166
-#define IMG_CUSTOM_249                                 1167
-#define IMG_CUSTOM_249_EDITOR                          1168
-#define IMG_CUSTOM_250                                 1169
-#define IMG_CUSTOM_250_EDITOR                          1170
-#define IMG_CUSTOM_251                                 1171
-#define IMG_CUSTOM_251_EDITOR                          1172
-#define IMG_CUSTOM_252                                 1173
-#define IMG_CUSTOM_252_EDITOR                          1174
-#define IMG_CUSTOM_253                                 1175
-#define IMG_CUSTOM_253_EDITOR                          1176
-#define IMG_CUSTOM_254                                 1177
-#define IMG_CUSTOM_254_EDITOR                          1178
-#define IMG_CUSTOM_255                                 1179
-#define IMG_CUSTOM_255_EDITOR                          1180
-#define IMG_CUSTOM_256                                 1181
-#define IMG_CUSTOM_256_EDITOR                          1182
-#define IMG_TOON_1                                     1183
-#define IMG_TOON_2                                     1184
-#define IMG_TOON_3                                     1185
-#define IMG_TOON_4                                     1186
-#define IMG_TOON_5                                     1187
-#define IMG_TOON_6                                     1188
-#define IMG_TOON_7                                     1189
-#define IMG_TOON_8                                     1190
-#define IMG_TOON_9                                     1191
-#define IMG_TOON_10                                    1192
-#define IMG_TOON_11                                    1193
-#define IMG_TOON_12                                    1194
-#define IMG_TOON_13                                    1195
-#define IMG_TOON_14                                    1196
-#define IMG_TOON_15                                    1197
-#define IMG_TOON_16                                    1198
-#define IMG_TOON_17                                    1199
-#define IMG_TOON_18                                    1200
-#define IMG_TOON_19                                    1201
-#define IMG_TOON_20                                    1202
-#define IMG_MENU_CALIBRATE_RED                         1203
-#define IMG_MENU_CALIBRATE_BLUE                                1204
-#define IMG_MENU_CALIBRATE_YELLOW                      1205
-#define IMG_MENU_BUTTON                                        1206
-#define IMG_MENU_BUTTON_ACTIVE                         1207
-#define IMG_MENU_BUTTON_LEFT                           1208
-#define IMG_MENU_BUTTON_RIGHT                          1209
-#define IMG_MENU_BUTTON_UP                             1210
-#define IMG_MENU_BUTTON_DOWN                           1211
-#define IMG_MENU_BUTTON_LEFT_ACTIVE                    1212
-#define IMG_MENU_BUTTON_RIGHT_ACTIVE                   1213
-#define IMG_MENU_BUTTON_UP_ACTIVE                      1214
-#define IMG_MENU_BUTTON_DOWN_ACTIVE                    1215
-#define IMG_MENU_SCROLLBAR                             1216
-#define IMG_MENU_SCROLLBAR_ACTIVE                      1217
-#define IMG_FONT_INITIAL_1                             1218
-#define IMG_FONT_INITIAL_2                             1219
-#define IMG_FONT_INITIAL_3                             1220
-#define IMG_FONT_INITIAL_4                             1221
-#define IMG_FONT_TITLE_1                               1222
-#define IMG_FONT_TITLE_1_LEVELS                                1223
-#define IMG_FONT_TITLE_2                               1224
-#define IMG_FONT_MENU_1                                        1225
-#define IMG_FONT_MENU_2                                        1226
-#define IMG_FONT_TEXT_1                                        1227
-#define IMG_FONT_TEXT_1_LEVELS                         1228
-#define IMG_FONT_TEXT_1_PREVIEW                                1229
-#define IMG_FONT_TEXT_1_PLAYING                                1230
-#define IMG_FONT_TEXT_1_SCORES                         1231
-#define IMG_FONT_TEXT_1_ACTIVE_SCORES                  1232
-#define IMG_FONT_TEXT_2                                        1233
-#define IMG_FONT_TEXT_2_LEVELS                         1234
-#define IMG_FONT_TEXT_2_PREVIEW                                1235
-#define IMG_FONT_TEXT_2_SCORES                         1236
-#define IMG_FONT_TEXT_2_ACTIVE_SCORES                  1237
-#define IMG_FONT_TEXT_3                                        1238
-#define IMG_FONT_TEXT_3_LEVELS                         1239
-#define IMG_FONT_TEXT_3_PREVIEW                                1240
-#define IMG_FONT_TEXT_3_SCORES                         1241
-#define IMG_FONT_TEXT_3_ACTIVE_SCORES                  1242
-#define IMG_FONT_TEXT_4                                        1243
-#define IMG_FONT_TEXT_4_LEVELS                         1244
-#define IMG_FONT_TEXT_4_SCORES                         1245
-#define IMG_FONT_TEXT_4_ACTIVE_SCORES                  1246
-#define IMG_FONT_INPUT_1                               1247
-#define IMG_FONT_INPUT_1_MAIN                          1248
-#define IMG_FONT_INPUT_1_ACTIVE                                1249
-#define IMG_FONT_INPUT_1_ACTIVE_MAIN                   1250
-#define IMG_FONT_INPUT_1_ACTIVE_SETUP                  1251
-#define IMG_FONT_INPUT_2                               1252
-#define IMG_FONT_INPUT_2_ACTIVE                                1253
-#define IMG_FONT_OPTION_OFF                            1254
-#define IMG_FONT_OPTION_ON                             1255
-#define IMG_FONT_VALUE_1                               1256
-#define IMG_FONT_VALUE_2                               1257
-#define IMG_FONT_VALUE_OLD                             1258
-#define IMG_FONT_LEVEL_NUMBER                          1259
-#define IMG_FONT_TAPE_RECORDER                         1260
-#define IMG_FONT_GAME_INFO                             1261
-#define IMG_GLOBAL_BORDER                              1262
-#define IMG_GLOBAL_DOOR                                        1263
-#define IMG_EDITOR_ELEMENT_BORDER                      1264
-#define IMG_EDITOR_ELEMENT_BORDER_INPUT                        1265
-#define IMG_GAME_ENVELOPE_BACKGROUND                   1266
-#define IMG_BACKGROUND                                 1267
-#define IMG_BACKGROUND_MAIN                            1268
-#define IMG_BACKGROUND_LEVELS                          1269
-#define IMG_BACKGROUND_SCORES                          1270
-#define IMG_BACKGROUND_EDITOR                          1271
-#define IMG_BACKGROUND_INFO                            1272
-#define IMG_BACKGROUND_SETUP                           1273
-#define IMG_BACKGROUND_DOOR                            1274
+#define IMG_ENVELOPE_1                                 289
+#define IMG_ENVELOPE_1_COLLECTING                      290
+#define IMG_ENVELOPE_2                                 291
+#define IMG_ENVELOPE_2_COLLECTING                      292
+#define IMG_ENVELOPE_3                                 293
+#define IMG_ENVELOPE_3_COLLECTING                      294
+#define IMG_ENVELOPE_4                                 295
+#define IMG_ENVELOPE_4_COLLECTING                      296
+#define IMG_SIGN_EXCLAMATION                           297
+#define IMG_SIGN_STOP                                  298
+#define IMG_LANDMINE                                   299
+#define IMG_STEELWALL_SLIPPERY                         300
+#define IMG_EXTRA_TIME                                 301
+#define IMG_SHIELD_NORMAL                              302
+#define IMG_SHIELD_NORMAL_ACTIVE                       303
+#define IMG_SHIELD_DEADLY                              304
+#define IMG_SHIELD_DEADLY_ACTIVE                       305
+#define IMG_SWITCHGATE_CLOSED                          306
+#define IMG_SWITCHGATE_OPENING                         307
+#define IMG_SWITCHGATE_OPEN                            308
+#define IMG_SWITCHGATE_CLOSING                         309
+#define IMG_TIMEGATE_CLOSED                            310
+#define IMG_TIMEGATE_OPENING                           311
+#define IMG_TIMEGATE_OPEN                              312
+#define IMG_TIMEGATE_CLOSING                           313
+#define IMG_PEARL                                      314
+#define IMG_PEARL_BREAKING                             315
+#define IMG_CRYSTAL                                    316
+#define IMG_WALL_PEARL                                 317
+#define IMG_WALL_CRYSTAL                               318
+#define IMG_TUBE_RIGHT_DOWN                            319
+#define IMG_TUBE_HORIZONTAL_DOWN                       320
+#define IMG_TUBE_LEFT_DOWN                             321
+#define IMG_TUBE_HORIZONTAL                            322
+#define IMG_TUBE_VERTICAL_RIGHT                                323
+#define IMG_TUBE_ANY                                   324
+#define IMG_TUBE_VERTICAL_LEFT                         325
+#define IMG_TUBE_VERTICAL                              326
+#define IMG_TUBE_RIGHT_UP                              327
+#define IMG_TUBE_HORIZONTAL_UP                         328
+#define IMG_TUBE_LEFT_UP                               329
+#define IMG_TRAP                                       330
+#define IMG_TRAP_ACTIVE                                        331
+#define IMG_DX_SUPABOMB                                        332
+#define IMG_KEY_1                                      333
+#define IMG_KEY_1_EDITOR                               334
+#define IMG_KEY_2                                      335
+#define IMG_KEY_2_EDITOR                               336
+#define IMG_KEY_3                                      337
+#define IMG_KEY_3_EDITOR                               338
+#define IMG_KEY_4                                      339
+#define IMG_KEY_4_EDITOR                               340
+#define IMG_GATE_1                                     341
+#define IMG_GATE_2                                     342
+#define IMG_GATE_3                                     343
+#define IMG_GATE_4                                     344
+#define IMG_GATE_1_GRAY                                        345
+#define IMG_GATE_1_GRAY_EDITOR                         346
+#define IMG_GATE_2_GRAY                                        347
+#define IMG_GATE_2_GRAY_EDITOR                         348
+#define IMG_GATE_3_GRAY                                        349
+#define IMG_GATE_3_GRAY_EDITOR                         350
+#define IMG_GATE_4_GRAY                                        351
+#define IMG_GATE_4_GRAY_EDITOR                         352
+#define IMG_GAME_OF_LIFE                               353
+#define IMG_BIOMAZE                                    354
+#define IMG_PACMAN                                     355
+#define IMG_PACMAN_RIGHT                               356
+#define IMG_PACMAN_UP                                  357
+#define IMG_PACMAN_LEFT                                        358
+#define IMG_PACMAN_DOWN                                        359
+#define IMG_PACMAN_MOVING_RIGHT                                360
+#define IMG_PACMAN_MOVING_UP                           361
+#define IMG_PACMAN_MOVING_LEFT                         362
+#define IMG_PACMAN_MOVING_DOWN                         363
+#define IMG_LAMP                                       364
+#define IMG_LAMP_EDITOR                                        365
+#define IMG_LAMP_ACTIVE                                        366
+#define IMG_TIME_ORB_FULL                              367
+#define IMG_TIME_ORB_EMPTY                             368
+#define IMG_EMERALD_YELLOW                             369
+#define IMG_EMERALD_YELLOW_MOVING                      370
+#define IMG_EMERALD_YELLOW_FALLING                     371
+#define IMG_EMERALD_RED                                        372
+#define IMG_EMERALD_RED_MOVING                         373
+#define IMG_EMERALD_RED_FALLING                                374
+#define IMG_EMERALD_PURPLE                             375
+#define IMG_EMERALD_PURPLE_MOVING                      376
+#define IMG_EMERALD_PURPLE_FALLING                     377
+#define IMG_WALL_EMERALD_YELLOW                                378
+#define IMG_WALL_EMERALD_RED                           379
+#define IMG_WALL_EMERALD_PURPLE                                380
+#define IMG_WALL_BD_DIAMOND                            381
+#define IMG_EXPANDABLE_WALL                            382
+#define IMG_EXPANDABLE_WALL_HORIZONTAL                 383
+#define IMG_EXPANDABLE_WALL_HORIZONTAL_EDITOR          384
+#define IMG_EXPANDABLE_WALL_VERTICAL                   385
+#define IMG_EXPANDABLE_WALL_VERTICAL_EDITOR            386
+#define IMG_EXPANDABLE_WALL_ANY                                387
+#define IMG_EXPANDABLE_WALL_ANY_EDITOR                 388
+#define IMG_EXPANDABLE_WALL_GROWING_LEFT               389
+#define IMG_EXPANDABLE_WALL_GROWING_RIGHT              390
+#define IMG_EXPANDABLE_WALL_GROWING_UP                 391
+#define IMG_EXPANDABLE_WALL_GROWING_DOWN               392
+#define IMG_BLACK_ORB                                  393
+#define IMG_SPEED_PILL                                 394
+#define IMG_DARK_YAMYAM                                        395
+#define IMG_DYNABOMB                                   396
+#define IMG_DYNABOMB_ACTIVE                            397
+#define IMG_DYNABOMB_PLAYER_1                          398
+#define IMG_DYNABOMB_PLAYER_1_ACTIVE                   399
+#define IMG_DYNABOMB_PLAYER_2                          400
+#define IMG_DYNABOMB_PLAYER_2_ACTIVE                   401
+#define IMG_DYNABOMB_PLAYER_3                          402
+#define IMG_DYNABOMB_PLAYER_3_ACTIVE                   403
+#define IMG_DYNABOMB_PLAYER_4                          404
+#define IMG_DYNABOMB_PLAYER_4_ACTIVE                   405
+#define IMG_DYNABOMB_INCREASE_NUMBER                   406
+#define IMG_DYNABOMB_INCREASE_SIZE                     407
+#define IMG_DYNABOMB_INCREASE_POWER                    408
+#define IMG_PIG                                                409
+#define IMG_PIG_DOWN                                   410
+#define IMG_PIG_UP                                     411
+#define IMG_PIG_LEFT                                   412
+#define IMG_PIG_RIGHT                                  413
+#define IMG_PIG_MOVING_DOWN                            414
+#define IMG_PIG_MOVING_UP                              415
+#define IMG_PIG_MOVING_LEFT                            416
+#define IMG_PIG_MOVING_RIGHT                           417
+#define IMG_PIG_DIGGING_DOWN                           418
+#define IMG_PIG_DIGGING_UP                             419
+#define IMG_PIG_DIGGING_LEFT                           420
+#define IMG_PIG_DIGGING_RIGHT                          421
+#define IMG_DRAGON                                     422
+#define IMG_DRAGON_DOWN                                        423
+#define IMG_DRAGON_UP                                  424
+#define IMG_DRAGON_LEFT                                        425
+#define IMG_DRAGON_RIGHT                               426
+#define IMG_DRAGON_MOVING_DOWN                         427
+#define IMG_DRAGON_MOVING_UP                           428
+#define IMG_DRAGON_MOVING_LEFT                         429
+#define IMG_DRAGON_MOVING_RIGHT                                430
+#define IMG_DRAGON_ATTACKING_DOWN                      431
+#define IMG_DRAGON_ATTACKING_UP                                432
+#define IMG_DRAGON_ATTACKING_LEFT                      433
+#define IMG_DRAGON_ATTACKING_RIGHT                     434
+#define IMG_MOLE                                       435
+#define IMG_MOLE_DOWN                                  436
+#define IMG_MOLE_UP                                    437
+#define IMG_MOLE_LEFT                                  438
+#define IMG_MOLE_RIGHT                                 439
+#define IMG_MOLE_MOVING_DOWN                           440
+#define IMG_MOLE_MOVING_UP                             441
+#define IMG_MOLE_MOVING_LEFT                           442
+#define IMG_MOLE_MOVING_RIGHT                          443
+#define IMG_MOLE_DIGGING_DOWN                          444
+#define IMG_MOLE_DIGGING_UP                            445
+#define IMG_MOLE_DIGGING_LEFT                          446
+#define IMG_MOLE_DIGGING_RIGHT                         447
+#define IMG_PENGUIN                                    448
+#define IMG_PENGUIN_EDITOR                             449
+#define IMG_PENGUIN_DOWN                               450
+#define IMG_PENGUIN_UP                                 451
+#define IMG_PENGUIN_LEFT                               452
+#define IMG_PENGUIN_RIGHT                              453
+#define IMG_PENGUIN_MOVING_DOWN                                454
+#define IMG_PENGUIN_MOVING_UP                          455
+#define IMG_PENGUIN_MOVING_LEFT                                456
+#define IMG_PENGUIN_MOVING_RIGHT                       457
+#define IMG_SATELLITE                                  458
+#define IMG_FLAMES_1_LEFT                              459
+#define IMG_FLAMES_2_LEFT                              460
+#define IMG_FLAMES_3_LEFT                              461
+#define IMG_FLAMES_1_RIGHT                             462
+#define IMG_FLAMES_2_RIGHT                             463
+#define IMG_FLAMES_3_RIGHT                             464
+#define IMG_FLAMES_1_UP                                        465
+#define IMG_FLAMES_2_UP                                        466
+#define IMG_FLAMES_3_UP                                        467
+#define IMG_FLAMES_1_DOWN                              468
+#define IMG_FLAMES_2_DOWN                              469
+#define IMG_FLAMES_3_DOWN                              470
+#define IMG_STONEBLOCK                                 471
+#define IMG_PLAYER_1                                   472
+#define IMG_PLAYER_1_EDITOR                            473
+#define IMG_PLAYER_1_DOWN                              474
+#define IMG_PLAYER_1_UP                                        475
+#define IMG_PLAYER_1_LEFT                              476
+#define IMG_PLAYER_1_RIGHT                             477
+#define IMG_PLAYER_1_MOVING_DOWN                       478
+#define IMG_PLAYER_1_MOVING_UP                         479
+#define IMG_PLAYER_1_MOVING_LEFT                       480
+#define IMG_PLAYER_1_MOVING_RIGHT                      481
+#define IMG_PLAYER_1_DIGGING_DOWN                      482
+#define IMG_PLAYER_1_DIGGING_UP                                483
+#define IMG_PLAYER_1_DIGGING_LEFT                      484
+#define IMG_PLAYER_1_DIGGING_RIGHT                     485
+#define IMG_PLAYER_1_COLLECTING_DOWN                   486
+#define IMG_PLAYER_1_COLLECTING_UP                     487
+#define IMG_PLAYER_1_COLLECTING_LEFT                   488
+#define IMG_PLAYER_1_COLLECTING_RIGHT                  489
+#define IMG_PLAYER_1_PUSHING_DOWN                      490
+#define IMG_PLAYER_1_PUSHING_UP                                491
+#define IMG_PLAYER_1_PUSHING_LEFT                      492
+#define IMG_PLAYER_1_PUSHING_RIGHT                     493
+#define IMG_PLAYER_1_SNAPPING_DOWN                     494
+#define IMG_PLAYER_1_SNAPPING_UP                       495
+#define IMG_PLAYER_1_SNAPPING_LEFT                     496
+#define IMG_PLAYER_1_SNAPPING_RIGHT                    497
+#define IMG_PLAYER_2                                   498
+#define IMG_PLAYER_2_EDITOR                            499
+#define IMG_PLAYER_2_DOWN                              500
+#define IMG_PLAYER_2_UP                                        501
+#define IMG_PLAYER_2_LEFT                              502
+#define IMG_PLAYER_2_RIGHT                             503
+#define IMG_PLAYER_2_MOVING_DOWN                       504
+#define IMG_PLAYER_2_MOVING_UP                         505
+#define IMG_PLAYER_2_MOVING_LEFT                       506
+#define IMG_PLAYER_2_MOVING_RIGHT                      507
+#define IMG_PLAYER_2_DIGGING_DOWN                      508
+#define IMG_PLAYER_2_DIGGING_UP                                509
+#define IMG_PLAYER_2_DIGGING_LEFT                      510
+#define IMG_PLAYER_2_DIGGING_RIGHT                     511
+#define IMG_PLAYER_2_COLLECTING_DOWN                   512
+#define IMG_PLAYER_2_COLLECTING_UP                     513
+#define IMG_PLAYER_2_COLLECTING_LEFT                   514
+#define IMG_PLAYER_2_COLLECTING_RIGHT                  515
+#define IMG_PLAYER_2_PUSHING_DOWN                      516
+#define IMG_PLAYER_2_PUSHING_UP                                517
+#define IMG_PLAYER_2_PUSHING_LEFT                      518
+#define IMG_PLAYER_2_PUSHING_RIGHT                     519
+#define IMG_PLAYER_2_SNAPPING_DOWN                     520
+#define IMG_PLAYER_2_SNAPPING_UP                       521
+#define IMG_PLAYER_2_SNAPPING_LEFT                     522
+#define IMG_PLAYER_2_SNAPPING_RIGHT                    523
+#define IMG_PLAYER_3                                   524
+#define IMG_PLAYER_3_EDITOR                            525
+#define IMG_PLAYER_3_DOWN                              526
+#define IMG_PLAYER_3_UP                                        527
+#define IMG_PLAYER_3_LEFT                              528
+#define IMG_PLAYER_3_RIGHT                             529
+#define IMG_PLAYER_3_MOVING_DOWN                       530
+#define IMG_PLAYER_3_MOVING_UP                         531
+#define IMG_PLAYER_3_MOVING_LEFT                       532
+#define IMG_PLAYER_3_MOVING_RIGHT                      533
+#define IMG_PLAYER_3_DIGGING_DOWN                      534
+#define IMG_PLAYER_3_DIGGING_UP                                535
+#define IMG_PLAYER_3_DIGGING_LEFT                      536
+#define IMG_PLAYER_3_DIGGING_RIGHT                     537
+#define IMG_PLAYER_3_COLLECTING_DOWN                   538
+#define IMG_PLAYER_3_COLLECTING_UP                     539
+#define IMG_PLAYER_3_COLLECTING_LEFT                   540
+#define IMG_PLAYER_3_COLLECTING_RIGHT                  541
+#define IMG_PLAYER_3_PUSHING_DOWN                      542
+#define IMG_PLAYER_3_PUSHING_UP                                543
+#define IMG_PLAYER_3_PUSHING_LEFT                      544
+#define IMG_PLAYER_3_PUSHING_RIGHT                     545
+#define IMG_PLAYER_3_SNAPPING_DOWN                     546
+#define IMG_PLAYER_3_SNAPPING_UP                       547
+#define IMG_PLAYER_3_SNAPPING_LEFT                     548
+#define IMG_PLAYER_3_SNAPPING_RIGHT                    549
+#define IMG_PLAYER_4                                   550
+#define IMG_PLAYER_4_EDITOR                            551
+#define IMG_PLAYER_4_DOWN                              552
+#define IMG_PLAYER_4_UP                                        553
+#define IMG_PLAYER_4_LEFT                              554
+#define IMG_PLAYER_4_RIGHT                             555
+#define IMG_PLAYER_4_MOVING_DOWN                       556
+#define IMG_PLAYER_4_MOVING_UP                         557
+#define IMG_PLAYER_4_MOVING_LEFT                       558
+#define IMG_PLAYER_4_MOVING_RIGHT                      559
+#define IMG_PLAYER_4_DIGGING_DOWN                      560
+#define IMG_PLAYER_4_DIGGING_UP                                561
+#define IMG_PLAYER_4_DIGGING_LEFT                      562
+#define IMG_PLAYER_4_DIGGING_RIGHT                     563
+#define IMG_PLAYER_4_COLLECTING_DOWN                   564
+#define IMG_PLAYER_4_COLLECTING_UP                     565
+#define IMG_PLAYER_4_COLLECTING_LEFT                   566
+#define IMG_PLAYER_4_COLLECTING_RIGHT                  567
+#define IMG_PLAYER_4_PUSHING_DOWN                      568
+#define IMG_PLAYER_4_PUSHING_UP                                569
+#define IMG_PLAYER_4_PUSHING_LEFT                      570
+#define IMG_PLAYER_4_PUSHING_RIGHT                     571
+#define IMG_PLAYER_4_SNAPPING_DOWN                     572
+#define IMG_PLAYER_4_SNAPPING_UP                       573
+#define IMG_PLAYER_4_SNAPPING_LEFT                     574
+#define IMG_PLAYER_4_SNAPPING_RIGHT                    575
+#define IMG_DEFAULT_EXPLODING                          576
+#define IMG_TWINKLE_BLUE                               577
+#define IMG_TWINKLE_WHITE                              578
+#define IMG_STEELWALL_TOPLEFT                          579
+#define IMG_STEELWALL_TOPRIGHT                         580
+#define IMG_STEELWALL_BOTTOMLEFT                       581
+#define IMG_STEELWALL_BOTTOMRIGHT                      582
+#define IMG_STEELWALL_HORIZONTAL                       583
+#define IMG_STEELWALL_VERTICAL                         584
+#define IMG_STEELWALL_TOPLEFT_EDITOR                   585
+#define IMG_STEELWALL_TOPRIGHT_EDITOR                  586
+#define IMG_STEELWALL_BOTTOMLEFT_EDITOR                        587
+#define IMG_STEELWALL_BOTTOMRIGHT_EDITOR               588
+#define IMG_STEELWALL_HORIZONTAL_EDITOR                        589
+#define IMG_STEELWALL_VERTICAL_EDITOR                  590
+#define IMG_INVISIBLE_STEELWALL_TOPLEFT                        591
+#define IMG_INVISIBLE_STEELWALL_TOPRIGHT               592
+#define IMG_INVISIBLE_STEELWALL_BOTTOMLEFT             593
+#define IMG_INVISIBLE_STEELWALL_BOTTOMRIGHT            594
+#define IMG_INVISIBLE_STEELWALL_HORIZONTAL             595
+#define IMG_INVISIBLE_STEELWALL_VERTICAL               596
+#define IMG_INVISIBLE_STEELWALL_TOPLEFT_EDITOR         597
+#define IMG_INVISIBLE_STEELWALL_TOPRIGHT_EDITOR                598
+#define IMG_INVISIBLE_STEELWALL_BOTTOMLEFT_EDITOR      599
+#define IMG_INVISIBLE_STEELWALL_BOTTOMRIGHT_EDITOR     600
+#define IMG_INVISIBLE_STEELWALL_HORIZONTAL_EDITOR      601
+#define IMG_INVISIBLE_STEELWALL_VERTICAL_EDITOR                602
+#define IMG_ARROW_LEFT                                 603
+#define IMG_ARROW_RIGHT                                        604
+#define IMG_ARROW_UP                                   605
+#define IMG_ARROW_DOWN                                 606
+#define IMG_CHAR_SPACE                                 607
+#define IMG_CHAR_EXCLAM                                        608
+#define IMG_CHAR_QUOTEDBL                              609
+#define IMG_CHAR_NUMBERSIGN                            610
+#define IMG_CHAR_DOLLAR                                        611
+#define IMG_CHAR_PROCENT                               612
+#define IMG_CHAR_AMPERSAND                             613
+#define IMG_CHAR_APOSTROPHE                            614
+#define IMG_CHAR_PARENLEFT                             615
+#define IMG_CHAR_PARENRIGHT                            616
+#define IMG_CHAR_ASTERISK                              617
+#define IMG_CHAR_PLUS                                  618
+#define IMG_CHAR_COMMA                                 619
+#define IMG_CHAR_MINUS                                 620
+#define IMG_CHAR_PERIOD                                        621
+#define IMG_CHAR_SLASH                                 622
+#define IMG_CHAR_0                                     623
+#define IMG_CHAR_1                                     624
+#define IMG_CHAR_2                                     625
+#define IMG_CHAR_3                                     626
+#define IMG_CHAR_4                                     627
+#define IMG_CHAR_5                                     628
+#define IMG_CHAR_6                                     629
+#define IMG_CHAR_7                                     630
+#define IMG_CHAR_8                                     631
+#define IMG_CHAR_9                                     632
+#define IMG_CHAR_COLON                                 633
+#define IMG_CHAR_SEMICOLON                             634
+#define IMG_CHAR_LESS                                  635
+#define IMG_CHAR_EQUAL                                 636
+#define IMG_CHAR_GREATER                               637
+#define IMG_CHAR_QUESTION                              638
+#define IMG_CHAR_AT                                    639
+#define IMG_CHAR_A                                     640
+#define IMG_CHAR_B                                     641
+#define IMG_CHAR_C                                     642
+#define IMG_CHAR_D                                     643
+#define IMG_CHAR_E                                     644
+#define IMG_CHAR_F                                     645
+#define IMG_CHAR_G                                     646
+#define IMG_CHAR_H                                     647
+#define IMG_CHAR_I                                     648
+#define IMG_CHAR_J                                     649
+#define IMG_CHAR_K                                     650
+#define IMG_CHAR_L                                     651
+#define IMG_CHAR_M                                     652
+#define IMG_CHAR_N                                     653
+#define IMG_CHAR_O                                     654
+#define IMG_CHAR_P                                     655
+#define IMG_CHAR_Q                                     656
+#define IMG_CHAR_R                                     657
+#define IMG_CHAR_S                                     658
+#define IMG_CHAR_T                                     659
+#define IMG_CHAR_U                                     660
+#define IMG_CHAR_V                                     661
+#define IMG_CHAR_W                                     662
+#define IMG_CHAR_X                                     663
+#define IMG_CHAR_Y                                     664
+#define IMG_CHAR_Z                                     665
+#define IMG_CHAR_BRACKETLEFT                           666
+#define IMG_CHAR_BACKSLASH                             667
+#define IMG_CHAR_BRACKETRIGHT                          668
+#define IMG_CHAR_ASCIICIRCUM                           669
+#define IMG_CHAR_UNDERSCORE                            670
+#define IMG_CHAR_COPYRIGHT                             671
+#define IMG_CHAR_AUMLAUT                               672
+#define IMG_CHAR_OUMLAUT                               673
+#define IMG_CHAR_UUMLAUT                               674
+#define IMG_CHAR_DEGREE                                        675
+#define IMG_CHAR_TRADEMARK                             676
+#define IMG_CHAR_CURSOR                                        677
+#define IMG_CUSTOM_1                                   678
+#define IMG_CUSTOM_1_EDITOR                            679
+#define IMG_CUSTOM_2                                   680
+#define IMG_CUSTOM_2_EDITOR                            681
+#define IMG_CUSTOM_3                                   682
+#define IMG_CUSTOM_3_EDITOR                            683
+#define IMG_CUSTOM_4                                   684
+#define IMG_CUSTOM_4_EDITOR                            685
+#define IMG_CUSTOM_5                                   686
+#define IMG_CUSTOM_5_EDITOR                            687
+#define IMG_CUSTOM_6                                   688
+#define IMG_CUSTOM_6_EDITOR                            689
+#define IMG_CUSTOM_7                                   690
+#define IMG_CUSTOM_7_EDITOR                            691
+#define IMG_CUSTOM_8                                   692
+#define IMG_CUSTOM_8_EDITOR                            693
+#define IMG_CUSTOM_9                                   694
+#define IMG_CUSTOM_9_EDITOR                            695
+#define IMG_CUSTOM_10                                  696
+#define IMG_CUSTOM_10_EDITOR                           697
+#define IMG_CUSTOM_11                                  698
+#define IMG_CUSTOM_11_EDITOR                           699
+#define IMG_CUSTOM_12                                  700
+#define IMG_CUSTOM_12_EDITOR                           701
+#define IMG_CUSTOM_13                                  702
+#define IMG_CUSTOM_13_EDITOR                           703
+#define IMG_CUSTOM_14                                  704
+#define IMG_CUSTOM_14_EDITOR                           705
+#define IMG_CUSTOM_15                                  706
+#define IMG_CUSTOM_15_EDITOR                           707
+#define IMG_CUSTOM_16                                  708
+#define IMG_CUSTOM_16_EDITOR                           709
+#define IMG_CUSTOM_17                                  710
+#define IMG_CUSTOM_17_EDITOR                           711
+#define IMG_CUSTOM_18                                  712
+#define IMG_CUSTOM_18_EDITOR                           713
+#define IMG_CUSTOM_19                                  714
+#define IMG_CUSTOM_19_EDITOR                           715
+#define IMG_CUSTOM_20                                  716
+#define IMG_CUSTOM_20_EDITOR                           717
+#define IMG_CUSTOM_21                                  718
+#define IMG_CUSTOM_21_EDITOR                           719
+#define IMG_CUSTOM_22                                  720
+#define IMG_CUSTOM_22_EDITOR                           721
+#define IMG_CUSTOM_23                                  722
+#define IMG_CUSTOM_23_EDITOR                           723
+#define IMG_CUSTOM_24                                  724
+#define IMG_CUSTOM_24_EDITOR                           725
+#define IMG_CUSTOM_25                                  726
+#define IMG_CUSTOM_25_EDITOR                           727
+#define IMG_CUSTOM_26                                  728
+#define IMG_CUSTOM_26_EDITOR                           729
+#define IMG_CUSTOM_27                                  730
+#define IMG_CUSTOM_27_EDITOR                           731
+#define IMG_CUSTOM_28                                  732
+#define IMG_CUSTOM_28_EDITOR                           733
+#define IMG_CUSTOM_29                                  734
+#define IMG_CUSTOM_29_EDITOR                           735
+#define IMG_CUSTOM_30                                  736
+#define IMG_CUSTOM_30_EDITOR                           737
+#define IMG_CUSTOM_31                                  738
+#define IMG_CUSTOM_31_EDITOR                           739
+#define IMG_CUSTOM_32                                  740
+#define IMG_CUSTOM_32_EDITOR                           741
+#define IMG_CUSTOM_33                                  742
+#define IMG_CUSTOM_33_EDITOR                           743
+#define IMG_CUSTOM_34                                  744
+#define IMG_CUSTOM_34_EDITOR                           745
+#define IMG_CUSTOM_35                                  746
+#define IMG_CUSTOM_35_EDITOR                           747
+#define IMG_CUSTOM_36                                  748
+#define IMG_CUSTOM_36_EDITOR                           749
+#define IMG_CUSTOM_37                                  750
+#define IMG_CUSTOM_37_EDITOR                           751
+#define IMG_CUSTOM_38                                  752
+#define IMG_CUSTOM_38_EDITOR                           753
+#define IMG_CUSTOM_39                                  754
+#define IMG_CUSTOM_39_EDITOR                           755
+#define IMG_CUSTOM_40                                  756
+#define IMG_CUSTOM_40_EDITOR                           757
+#define IMG_CUSTOM_41                                  758
+#define IMG_CUSTOM_41_EDITOR                           759
+#define IMG_CUSTOM_42                                  760
+#define IMG_CUSTOM_42_EDITOR                           761
+#define IMG_CUSTOM_43                                  762
+#define IMG_CUSTOM_43_EDITOR                           763
+#define IMG_CUSTOM_44                                  764
+#define IMG_CUSTOM_44_EDITOR                           765
+#define IMG_CUSTOM_45                                  766
+#define IMG_CUSTOM_45_EDITOR                           767
+#define IMG_CUSTOM_46                                  768
+#define IMG_CUSTOM_46_EDITOR                           769
+#define IMG_CUSTOM_47                                  770
+#define IMG_CUSTOM_47_EDITOR                           771
+#define IMG_CUSTOM_48                                  772
+#define IMG_CUSTOM_48_EDITOR                           773
+#define IMG_CUSTOM_49                                  774
+#define IMG_CUSTOM_49_EDITOR                           775
+#define IMG_CUSTOM_50                                  776
+#define IMG_CUSTOM_50_EDITOR                           777
+#define IMG_CUSTOM_51                                  778
+#define IMG_CUSTOM_51_EDITOR                           779
+#define IMG_CUSTOM_52                                  780
+#define IMG_CUSTOM_52_EDITOR                           781
+#define IMG_CUSTOM_53                                  782
+#define IMG_CUSTOM_53_EDITOR                           783
+#define IMG_CUSTOM_54                                  784
+#define IMG_CUSTOM_54_EDITOR                           785
+#define IMG_CUSTOM_55                                  786
+#define IMG_CUSTOM_55_EDITOR                           787
+#define IMG_CUSTOM_56                                  788
+#define IMG_CUSTOM_56_EDITOR                           789
+#define IMG_CUSTOM_57                                  790
+#define IMG_CUSTOM_57_EDITOR                           791
+#define IMG_CUSTOM_58                                  792
+#define IMG_CUSTOM_58_EDITOR                           793
+#define IMG_CUSTOM_59                                  794
+#define IMG_CUSTOM_59_EDITOR                           795
+#define IMG_CUSTOM_60                                  796
+#define IMG_CUSTOM_60_EDITOR                           797
+#define IMG_CUSTOM_61                                  798
+#define IMG_CUSTOM_61_EDITOR                           799
+#define IMG_CUSTOM_62                                  800
+#define IMG_CUSTOM_62_EDITOR                           801
+#define IMG_CUSTOM_63                                  802
+#define IMG_CUSTOM_63_EDITOR                           803
+#define IMG_CUSTOM_64                                  804
+#define IMG_CUSTOM_64_EDITOR                           805
+#define IMG_CUSTOM_65                                  806
+#define IMG_CUSTOM_65_EDITOR                           807
+#define IMG_CUSTOM_66                                  808
+#define IMG_CUSTOM_66_EDITOR                           809
+#define IMG_CUSTOM_67                                  810
+#define IMG_CUSTOM_67_EDITOR                           811
+#define IMG_CUSTOM_68                                  812
+#define IMG_CUSTOM_68_EDITOR                           813
+#define IMG_CUSTOM_69                                  814
+#define IMG_CUSTOM_69_EDITOR                           815
+#define IMG_CUSTOM_70                                  816
+#define IMG_CUSTOM_70_EDITOR                           817
+#define IMG_CUSTOM_71                                  818
+#define IMG_CUSTOM_71_EDITOR                           819
+#define IMG_CUSTOM_72                                  820
+#define IMG_CUSTOM_72_EDITOR                           821
+#define IMG_CUSTOM_73                                  822
+#define IMG_CUSTOM_73_EDITOR                           823
+#define IMG_CUSTOM_74                                  824
+#define IMG_CUSTOM_74_EDITOR                           825
+#define IMG_CUSTOM_75                                  826
+#define IMG_CUSTOM_75_EDITOR                           827
+#define IMG_CUSTOM_76                                  828
+#define IMG_CUSTOM_76_EDITOR                           829
+#define IMG_CUSTOM_77                                  830
+#define IMG_CUSTOM_77_EDITOR                           831
+#define IMG_CUSTOM_78                                  832
+#define IMG_CUSTOM_78_EDITOR                           833
+#define IMG_CUSTOM_79                                  834
+#define IMG_CUSTOM_79_EDITOR                           835
+#define IMG_CUSTOM_80                                  836
+#define IMG_CUSTOM_80_EDITOR                           837
+#define IMG_CUSTOM_81                                  838
+#define IMG_CUSTOM_81_EDITOR                           839
+#define IMG_CUSTOM_82                                  840
+#define IMG_CUSTOM_82_EDITOR                           841
+#define IMG_CUSTOM_83                                  842
+#define IMG_CUSTOM_83_EDITOR                           843
+#define IMG_CUSTOM_84                                  844
+#define IMG_CUSTOM_84_EDITOR                           845
+#define IMG_CUSTOM_85                                  846
+#define IMG_CUSTOM_85_EDITOR                           847
+#define IMG_CUSTOM_86                                  848
+#define IMG_CUSTOM_86_EDITOR                           849
+#define IMG_CUSTOM_87                                  850
+#define IMG_CUSTOM_87_EDITOR                           851
+#define IMG_CUSTOM_88                                  852
+#define IMG_CUSTOM_88_EDITOR                           853
+#define IMG_CUSTOM_89                                  854
+#define IMG_CUSTOM_89_EDITOR                           855
+#define IMG_CUSTOM_90                                  856
+#define IMG_CUSTOM_90_EDITOR                           857
+#define IMG_CUSTOM_91                                  858
+#define IMG_CUSTOM_91_EDITOR                           859
+#define IMG_CUSTOM_92                                  860
+#define IMG_CUSTOM_92_EDITOR                           861
+#define IMG_CUSTOM_93                                  862
+#define IMG_CUSTOM_93_EDITOR                           863
+#define IMG_CUSTOM_94                                  864
+#define IMG_CUSTOM_94_EDITOR                           865
+#define IMG_CUSTOM_95                                  866
+#define IMG_CUSTOM_95_EDITOR                           867
+#define IMG_CUSTOM_96                                  868
+#define IMG_CUSTOM_96_EDITOR                           869
+#define IMG_CUSTOM_97                                  870
+#define IMG_CUSTOM_97_EDITOR                           871
+#define IMG_CUSTOM_98                                  872
+#define IMG_CUSTOM_98_EDITOR                           873
+#define IMG_CUSTOM_99                                  874
+#define IMG_CUSTOM_99_EDITOR                           875
+#define IMG_CUSTOM_100                                 876
+#define IMG_CUSTOM_100_EDITOR                          877
+#define IMG_CUSTOM_101                                 878
+#define IMG_CUSTOM_101_EDITOR                          879
+#define IMG_CUSTOM_102                                 880
+#define IMG_CUSTOM_102_EDITOR                          881
+#define IMG_CUSTOM_103                                 882
+#define IMG_CUSTOM_103_EDITOR                          883
+#define IMG_CUSTOM_104                                 884
+#define IMG_CUSTOM_104_EDITOR                          885
+#define IMG_CUSTOM_105                                 886
+#define IMG_CUSTOM_105_EDITOR                          887
+#define IMG_CUSTOM_106                                 888
+#define IMG_CUSTOM_106_EDITOR                          889
+#define IMG_CUSTOM_107                                 890
+#define IMG_CUSTOM_107_EDITOR                          891
+#define IMG_CUSTOM_108                                 892
+#define IMG_CUSTOM_108_EDITOR                          893
+#define IMG_CUSTOM_109                                 894
+#define IMG_CUSTOM_109_EDITOR                          895
+#define IMG_CUSTOM_110                                 896
+#define IMG_CUSTOM_110_EDITOR                          897
+#define IMG_CUSTOM_111                                 898
+#define IMG_CUSTOM_111_EDITOR                          899
+#define IMG_CUSTOM_112                                 900
+#define IMG_CUSTOM_112_EDITOR                          901
+#define IMG_CUSTOM_113                                 902
+#define IMG_CUSTOM_113_EDITOR                          903
+#define IMG_CUSTOM_114                                 904
+#define IMG_CUSTOM_114_EDITOR                          905
+#define IMG_CUSTOM_115                                 906
+#define IMG_CUSTOM_115_EDITOR                          907
+#define IMG_CUSTOM_116                                 908
+#define IMG_CUSTOM_116_EDITOR                          909
+#define IMG_CUSTOM_117                                 910
+#define IMG_CUSTOM_117_EDITOR                          911
+#define IMG_CUSTOM_118                                 912
+#define IMG_CUSTOM_118_EDITOR                          913
+#define IMG_CUSTOM_119                                 914
+#define IMG_CUSTOM_119_EDITOR                          915
+#define IMG_CUSTOM_120                                 916
+#define IMG_CUSTOM_120_EDITOR                          917
+#define IMG_CUSTOM_121                                 918
+#define IMG_CUSTOM_121_EDITOR                          919
+#define IMG_CUSTOM_122                                 920
+#define IMG_CUSTOM_122_EDITOR                          921
+#define IMG_CUSTOM_123                                 922
+#define IMG_CUSTOM_123_EDITOR                          923
+#define IMG_CUSTOM_124                                 924
+#define IMG_CUSTOM_124_EDITOR                          925
+#define IMG_CUSTOM_125                                 926
+#define IMG_CUSTOM_125_EDITOR                          927
+#define IMG_CUSTOM_126                                 928
+#define IMG_CUSTOM_126_EDITOR                          929
+#define IMG_CUSTOM_127                                 930
+#define IMG_CUSTOM_127_EDITOR                          931
+#define IMG_CUSTOM_128                                 932
+#define IMG_CUSTOM_128_EDITOR                          933
+#define IMG_CUSTOM_129                                 934
+#define IMG_CUSTOM_129_EDITOR                          935
+#define IMG_CUSTOM_130                                 936
+#define IMG_CUSTOM_130_EDITOR                          937
+#define IMG_CUSTOM_131                                 938
+#define IMG_CUSTOM_131_EDITOR                          939
+#define IMG_CUSTOM_132                                 940
+#define IMG_CUSTOM_132_EDITOR                          941
+#define IMG_CUSTOM_133                                 942
+#define IMG_CUSTOM_133_EDITOR                          943
+#define IMG_CUSTOM_134                                 944
+#define IMG_CUSTOM_134_EDITOR                          945
+#define IMG_CUSTOM_135                                 946
+#define IMG_CUSTOM_135_EDITOR                          947
+#define IMG_CUSTOM_136                                 948
+#define IMG_CUSTOM_136_EDITOR                          949
+#define IMG_CUSTOM_137                                 950
+#define IMG_CUSTOM_137_EDITOR                          951
+#define IMG_CUSTOM_138                                 952
+#define IMG_CUSTOM_138_EDITOR                          953
+#define IMG_CUSTOM_139                                 954
+#define IMG_CUSTOM_139_EDITOR                          955
+#define IMG_CUSTOM_140                                 956
+#define IMG_CUSTOM_140_EDITOR                          957
+#define IMG_CUSTOM_141                                 958
+#define IMG_CUSTOM_141_EDITOR                          959
+#define IMG_CUSTOM_142                                 960
+#define IMG_CUSTOM_142_EDITOR                          961
+#define IMG_CUSTOM_143                                 962
+#define IMG_CUSTOM_143_EDITOR                          963
+#define IMG_CUSTOM_144                                 964
+#define IMG_CUSTOM_144_EDITOR                          965
+#define IMG_CUSTOM_145                                 966
+#define IMG_CUSTOM_145_EDITOR                          967
+#define IMG_CUSTOM_146                                 968
+#define IMG_CUSTOM_146_EDITOR                          969
+#define IMG_CUSTOM_147                                 970
+#define IMG_CUSTOM_147_EDITOR                          971
+#define IMG_CUSTOM_148                                 972
+#define IMG_CUSTOM_148_EDITOR                          973
+#define IMG_CUSTOM_149                                 974
+#define IMG_CUSTOM_149_EDITOR                          975
+#define IMG_CUSTOM_150                                 976
+#define IMG_CUSTOM_150_EDITOR                          977
+#define IMG_CUSTOM_151                                 978
+#define IMG_CUSTOM_151_EDITOR                          979
+#define IMG_CUSTOM_152                                 980
+#define IMG_CUSTOM_152_EDITOR                          981
+#define IMG_CUSTOM_153                                 982
+#define IMG_CUSTOM_153_EDITOR                          983
+#define IMG_CUSTOM_154                                 984
+#define IMG_CUSTOM_154_EDITOR                          985
+#define IMG_CUSTOM_155                                 986
+#define IMG_CUSTOM_155_EDITOR                          987
+#define IMG_CUSTOM_156                                 988
+#define IMG_CUSTOM_156_EDITOR                          989
+#define IMG_CUSTOM_157                                 990
+#define IMG_CUSTOM_157_EDITOR                          991
+#define IMG_CUSTOM_158                                 992
+#define IMG_CUSTOM_158_EDITOR                          993
+#define IMG_CUSTOM_159                                 994
+#define IMG_CUSTOM_159_EDITOR                          995
+#define IMG_CUSTOM_160                                 996
+#define IMG_CUSTOM_160_EDITOR                          997
+#define IMG_CUSTOM_161                                 998
+#define IMG_CUSTOM_161_EDITOR                          999
+#define IMG_CUSTOM_162                                 1000
+#define IMG_CUSTOM_162_EDITOR                          1001
+#define IMG_CUSTOM_163                                 1002
+#define IMG_CUSTOM_163_EDITOR                          1003
+#define IMG_CUSTOM_164                                 1004
+#define IMG_CUSTOM_164_EDITOR                          1005
+#define IMG_CUSTOM_165                                 1006
+#define IMG_CUSTOM_165_EDITOR                          1007
+#define IMG_CUSTOM_166                                 1008
+#define IMG_CUSTOM_166_EDITOR                          1009
+#define IMG_CUSTOM_167                                 1010
+#define IMG_CUSTOM_167_EDITOR                          1011
+#define IMG_CUSTOM_168                                 1012
+#define IMG_CUSTOM_168_EDITOR                          1013
+#define IMG_CUSTOM_169                                 1014
+#define IMG_CUSTOM_169_EDITOR                          1015
+#define IMG_CUSTOM_170                                 1016
+#define IMG_CUSTOM_170_EDITOR                          1017
+#define IMG_CUSTOM_171                                 1018
+#define IMG_CUSTOM_171_EDITOR                          1019
+#define IMG_CUSTOM_172                                 1020
+#define IMG_CUSTOM_172_EDITOR                          1021
+#define IMG_CUSTOM_173                                 1022
+#define IMG_CUSTOM_173_EDITOR                          1023
+#define IMG_CUSTOM_174                                 1024
+#define IMG_CUSTOM_174_EDITOR                          1025
+#define IMG_CUSTOM_175                                 1026
+#define IMG_CUSTOM_175_EDITOR                          1027
+#define IMG_CUSTOM_176                                 1028
+#define IMG_CUSTOM_176_EDITOR                          1029
+#define IMG_CUSTOM_177                                 1030
+#define IMG_CUSTOM_177_EDITOR                          1031
+#define IMG_CUSTOM_178                                 1032
+#define IMG_CUSTOM_178_EDITOR                          1033
+#define IMG_CUSTOM_179                                 1034
+#define IMG_CUSTOM_179_EDITOR                          1035
+#define IMG_CUSTOM_180                                 1036
+#define IMG_CUSTOM_180_EDITOR                          1037
+#define IMG_CUSTOM_181                                 1038
+#define IMG_CUSTOM_181_EDITOR                          1039
+#define IMG_CUSTOM_182                                 1040
+#define IMG_CUSTOM_182_EDITOR                          1041
+#define IMG_CUSTOM_183                                 1042
+#define IMG_CUSTOM_183_EDITOR                          1043
+#define IMG_CUSTOM_184                                 1044
+#define IMG_CUSTOM_184_EDITOR                          1045
+#define IMG_CUSTOM_185                                 1046
+#define IMG_CUSTOM_185_EDITOR                          1047
+#define IMG_CUSTOM_186                                 1048
+#define IMG_CUSTOM_186_EDITOR                          1049
+#define IMG_CUSTOM_187                                 1050
+#define IMG_CUSTOM_187_EDITOR                          1051
+#define IMG_CUSTOM_188                                 1052
+#define IMG_CUSTOM_188_EDITOR                          1053
+#define IMG_CUSTOM_189                                 1054
+#define IMG_CUSTOM_189_EDITOR                          1055
+#define IMG_CUSTOM_190                                 1056
+#define IMG_CUSTOM_190_EDITOR                          1057
+#define IMG_CUSTOM_191                                 1058
+#define IMG_CUSTOM_191_EDITOR                          1059
+#define IMG_CUSTOM_192                                 1060
+#define IMG_CUSTOM_192_EDITOR                          1061
+#define IMG_CUSTOM_193                                 1062
+#define IMG_CUSTOM_193_EDITOR                          1063
+#define IMG_CUSTOM_194                                 1064
+#define IMG_CUSTOM_194_EDITOR                          1065
+#define IMG_CUSTOM_195                                 1066
+#define IMG_CUSTOM_195_EDITOR                          1067
+#define IMG_CUSTOM_196                                 1068
+#define IMG_CUSTOM_196_EDITOR                          1069
+#define IMG_CUSTOM_197                                 1070
+#define IMG_CUSTOM_197_EDITOR                          1071
+#define IMG_CUSTOM_198                                 1072
+#define IMG_CUSTOM_198_EDITOR                          1073
+#define IMG_CUSTOM_199                                 1074
+#define IMG_CUSTOM_199_EDITOR                          1075
+#define IMG_CUSTOM_200                                 1076
+#define IMG_CUSTOM_200_EDITOR                          1077
+#define IMG_CUSTOM_201                                 1078
+#define IMG_CUSTOM_201_EDITOR                          1079
+#define IMG_CUSTOM_202                                 1080
+#define IMG_CUSTOM_202_EDITOR                          1081
+#define IMG_CUSTOM_203                                 1082
+#define IMG_CUSTOM_203_EDITOR                          1083
+#define IMG_CUSTOM_204                                 1084
+#define IMG_CUSTOM_204_EDITOR                          1085
+#define IMG_CUSTOM_205                                 1086
+#define IMG_CUSTOM_205_EDITOR                          1087
+#define IMG_CUSTOM_206                                 1088
+#define IMG_CUSTOM_206_EDITOR                          1089
+#define IMG_CUSTOM_207                                 1090
+#define IMG_CUSTOM_207_EDITOR                          1091
+#define IMG_CUSTOM_208                                 1092
+#define IMG_CUSTOM_208_EDITOR                          1093
+#define IMG_CUSTOM_209                                 1094
+#define IMG_CUSTOM_209_EDITOR                          1095
+#define IMG_CUSTOM_210                                 1096
+#define IMG_CUSTOM_210_EDITOR                          1097
+#define IMG_CUSTOM_211                                 1098
+#define IMG_CUSTOM_211_EDITOR                          1099
+#define IMG_CUSTOM_212                                 1100
+#define IMG_CUSTOM_212_EDITOR                          1101
+#define IMG_CUSTOM_213                                 1102
+#define IMG_CUSTOM_213_EDITOR                          1103
+#define IMG_CUSTOM_214                                 1104
+#define IMG_CUSTOM_214_EDITOR                          1105
+#define IMG_CUSTOM_215                                 1106
+#define IMG_CUSTOM_215_EDITOR                          1107
+#define IMG_CUSTOM_216                                 1108
+#define IMG_CUSTOM_216_EDITOR                          1109
+#define IMG_CUSTOM_217                                 1110
+#define IMG_CUSTOM_217_EDITOR                          1111
+#define IMG_CUSTOM_218                                 1112
+#define IMG_CUSTOM_218_EDITOR                          1113
+#define IMG_CUSTOM_219                                 1114
+#define IMG_CUSTOM_219_EDITOR                          1115
+#define IMG_CUSTOM_220                                 1116
+#define IMG_CUSTOM_220_EDITOR                          1117
+#define IMG_CUSTOM_221                                 1118
+#define IMG_CUSTOM_221_EDITOR                          1119
+#define IMG_CUSTOM_222                                 1120
+#define IMG_CUSTOM_222_EDITOR                          1121
+#define IMG_CUSTOM_223                                 1122
+#define IMG_CUSTOM_223_EDITOR                          1123
+#define IMG_CUSTOM_224                                 1124
+#define IMG_CUSTOM_224_EDITOR                          1125
+#define IMG_CUSTOM_225                                 1126
+#define IMG_CUSTOM_225_EDITOR                          1127
+#define IMG_CUSTOM_226                                 1128
+#define IMG_CUSTOM_226_EDITOR                          1129
+#define IMG_CUSTOM_227                                 1130
+#define IMG_CUSTOM_227_EDITOR                          1131
+#define IMG_CUSTOM_228                                 1132
+#define IMG_CUSTOM_228_EDITOR                          1133
+#define IMG_CUSTOM_229                                 1134
+#define IMG_CUSTOM_229_EDITOR                          1135
+#define IMG_CUSTOM_230                                 1136
+#define IMG_CUSTOM_230_EDITOR                          1137
+#define IMG_CUSTOM_231                                 1138
+#define IMG_CUSTOM_231_EDITOR                          1139
+#define IMG_CUSTOM_232                                 1140
+#define IMG_CUSTOM_232_EDITOR                          1141
+#define IMG_CUSTOM_233                                 1142
+#define IMG_CUSTOM_233_EDITOR                          1143
+#define IMG_CUSTOM_234                                 1144
+#define IMG_CUSTOM_234_EDITOR                          1145
+#define IMG_CUSTOM_235                                 1146
+#define IMG_CUSTOM_235_EDITOR                          1147
+#define IMG_CUSTOM_236                                 1148
+#define IMG_CUSTOM_236_EDITOR                          1149
+#define IMG_CUSTOM_237                                 1150
+#define IMG_CUSTOM_237_EDITOR                          1151
+#define IMG_CUSTOM_238                                 1152
+#define IMG_CUSTOM_238_EDITOR                          1153
+#define IMG_CUSTOM_239                                 1154
+#define IMG_CUSTOM_239_EDITOR                          1155
+#define IMG_CUSTOM_240                                 1156
+#define IMG_CUSTOM_240_EDITOR                          1157
+#define IMG_CUSTOM_241                                 1158
+#define IMG_CUSTOM_241_EDITOR                          1159
+#define IMG_CUSTOM_242                                 1160
+#define IMG_CUSTOM_242_EDITOR                          1161
+#define IMG_CUSTOM_243                                 1162
+#define IMG_CUSTOM_243_EDITOR                          1163
+#define IMG_CUSTOM_244                                 1164
+#define IMG_CUSTOM_244_EDITOR                          1165
+#define IMG_CUSTOM_245                                 1166
+#define IMG_CUSTOM_245_EDITOR                          1167
+#define IMG_CUSTOM_246                                 1168
+#define IMG_CUSTOM_246_EDITOR                          1169
+#define IMG_CUSTOM_247                                 1170
+#define IMG_CUSTOM_247_EDITOR                          1171
+#define IMG_CUSTOM_248                                 1172
+#define IMG_CUSTOM_248_EDITOR                          1173
+#define IMG_CUSTOM_249                                 1174
+#define IMG_CUSTOM_249_EDITOR                          1175
+#define IMG_CUSTOM_250                                 1176
+#define IMG_CUSTOM_250_EDITOR                          1177
+#define IMG_CUSTOM_251                                 1178
+#define IMG_CUSTOM_251_EDITOR                          1179
+#define IMG_CUSTOM_252                                 1180
+#define IMG_CUSTOM_252_EDITOR                          1181
+#define IMG_CUSTOM_253                                 1182
+#define IMG_CUSTOM_253_EDITOR                          1183
+#define IMG_CUSTOM_254                                 1184
+#define IMG_CUSTOM_254_EDITOR                          1185
+#define IMG_CUSTOM_255                                 1186
+#define IMG_CUSTOM_255_EDITOR                          1187
+#define IMG_CUSTOM_256                                 1188
+#define IMG_CUSTOM_256_EDITOR                          1189
+#define IMG_TOON_1                                     1190
+#define IMG_TOON_2                                     1191
+#define IMG_TOON_3                                     1192
+#define IMG_TOON_4                                     1193
+#define IMG_TOON_5                                     1194
+#define IMG_TOON_6                                     1195
+#define IMG_TOON_7                                     1196
+#define IMG_TOON_8                                     1197
+#define IMG_TOON_9                                     1198
+#define IMG_TOON_10                                    1199
+#define IMG_TOON_11                                    1200
+#define IMG_TOON_12                                    1201
+#define IMG_TOON_13                                    1202
+#define IMG_TOON_14                                    1203
+#define IMG_TOON_15                                    1204
+#define IMG_TOON_16                                    1205
+#define IMG_TOON_17                                    1206
+#define IMG_TOON_18                                    1207
+#define IMG_TOON_19                                    1208
+#define IMG_TOON_20                                    1209
+#define IMG_MENU_CALIBRATE_RED                         1210
+#define IMG_MENU_CALIBRATE_BLUE                                1211
+#define IMG_MENU_CALIBRATE_YELLOW                      1212
+#define IMG_MENU_BUTTON                                        1213
+#define IMG_MENU_BUTTON_ACTIVE                         1214
+#define IMG_MENU_BUTTON_LEFT                           1215
+#define IMG_MENU_BUTTON_RIGHT                          1216
+#define IMG_MENU_BUTTON_UP                             1217
+#define IMG_MENU_BUTTON_DOWN                           1218
+#define IMG_MENU_BUTTON_LEFT_ACTIVE                    1219
+#define IMG_MENU_BUTTON_RIGHT_ACTIVE                   1220
+#define IMG_MENU_BUTTON_UP_ACTIVE                      1221
+#define IMG_MENU_BUTTON_DOWN_ACTIVE                    1222
+#define IMG_MENU_SCROLLBAR                             1223
+#define IMG_MENU_SCROLLBAR_ACTIVE                      1224
+#define IMG_FONT_INITIAL_1                             1225
+#define IMG_FONT_INITIAL_2                             1226
+#define IMG_FONT_INITIAL_3                             1227
+#define IMG_FONT_INITIAL_4                             1228
+#define IMG_FONT_TITLE_1                               1229
+#define IMG_FONT_TITLE_1_LEVELS                                1230
+#define IMG_FONT_TITLE_2                               1231
+#define IMG_FONT_MENU_1                                        1232
+#define IMG_FONT_MENU_2                                        1233
+#define IMG_FONT_TEXT_1                                        1234
+#define IMG_FONT_TEXT_1_LEVELS                         1235
+#define IMG_FONT_TEXT_1_PREVIEW                                1236
+#define IMG_FONT_TEXT_1_SCORES                         1237
+#define IMG_FONT_TEXT_1_ACTIVE_SCORES                  1238
+#define IMG_FONT_TEXT_2                                        1239
+#define IMG_FONT_TEXT_2_LEVELS                         1240
+#define IMG_FONT_TEXT_2_PREVIEW                                1241
+#define IMG_FONT_TEXT_2_SCORES                         1242
+#define IMG_FONT_TEXT_2_ACTIVE_SCORES                  1243
+#define IMG_FONT_TEXT_3                                        1244
+#define IMG_FONT_TEXT_3_LEVELS                         1245
+#define IMG_FONT_TEXT_3_PREVIEW                                1246
+#define IMG_FONT_TEXT_3_SCORES                         1247
+#define IMG_FONT_TEXT_3_ACTIVE_SCORES                  1248
+#define IMG_FONT_TEXT_4                                        1249
+#define IMG_FONT_TEXT_4_LEVELS                         1250
+#define IMG_FONT_TEXT_4_SCORES                         1251
+#define IMG_FONT_TEXT_4_ACTIVE_SCORES                  1252
+#define IMG_FONT_ENVELOPE_1                            1253
+#define IMG_FONT_ENVELOPE_2                            1254
+#define IMG_FONT_ENVELOPE_3                            1255
+#define IMG_FONT_ENVELOPE_4                            1256
+#define IMG_FONT_INPUT_1                               1257
+#define IMG_FONT_INPUT_1_MAIN                          1258
+#define IMG_FONT_INPUT_1_ACTIVE                                1259
+#define IMG_FONT_INPUT_1_ACTIVE_MAIN                   1260
+#define IMG_FONT_INPUT_1_ACTIVE_SETUP                  1261
+#define IMG_FONT_INPUT_2                               1262
+#define IMG_FONT_INPUT_2_ACTIVE                                1263
+#define IMG_FONT_OPTION_OFF                            1264
+#define IMG_FONT_OPTION_ON                             1265
+#define IMG_FONT_VALUE_1                               1266
+#define IMG_FONT_VALUE_2                               1267
+#define IMG_FONT_VALUE_OLD                             1268
+#define IMG_FONT_LEVEL_NUMBER                          1269
+#define IMG_FONT_TAPE_RECORDER                         1270
+#define IMG_FONT_GAME_INFO                             1271
+#define IMG_GLOBAL_BORDER                              1272
+#define IMG_GLOBAL_DOOR                                        1273
+#define IMG_EDITOR_ELEMENT_BORDER                      1274
+#define IMG_EDITOR_ELEMENT_BORDER_INPUT                        1275
+#define IMG_BACKGROUND_ENVELOPE_1                      1276
+#define IMG_BACKGROUND_ENVELOPE_2                      1277
+#define IMG_BACKGROUND_ENVELOPE_3                      1278
+#define IMG_BACKGROUND_ENVELOPE_4                      1279
+#define IMG_BACKGROUND                                 1280
+#define IMG_BACKGROUND_MAIN                            1281
+#define IMG_BACKGROUND_LEVELS                          1282
+#define IMG_BACKGROUND_SCORES                          1283
+#define IMG_BACKGROUND_EDITOR                          1284
+#define IMG_BACKGROUND_INFO                            1285
+#define IMG_BACKGROUND_SETUP                           1286
+#define IMG_BACKGROUND_DOOR                            1287
 
-#define NUM_IMAGE_FILES                                        1275
+#define NUM_IMAGE_FILES                                        1288
 
 #endif /* CONF_GFX_H */
index 8a90bea9ed1ea548aef2594ebdd7654e18f0cbb8..4f1a8210e46b430d69c2920f989599c41ef5f392 100644 (file)
@@ -125,6 +125,7 @@ struct ConfigInfo sound_config[] =
   { "[quicksand].filling",             UNDEFINED_FILENAME      },
   { "[quicksand].emptying",            UNDEFINED_FILENAME      },
   { "[exit].opening",                  "oeffnen.wav"           },
+  { "[exit].closing",                  "oeffnen.wav"           },
   { "[exit].passing",                  "buing.wav"             },
   { "penguin.passing",                 "buing.wav"             },
 
@@ -144,7 +145,9 @@ struct ConfigInfo sound_config[] =
   { "pearl.impact",                    "pling.wav"             },
   { "crystal.collecting",              "pong.wav"              },
   { "crystal.impact",                  "pling.wav"             },
-  { "envelope.collecting",             "pong.wav"              },
+  { "[envelope].collecting",           "pong.wav"              },
+  { "[envelope].opening",              UNDEFINED_FILENAME      },
+  { "[envelope].closing",              UNDEFINED_FILENAME      },
   { "invisible_sand.digging",          "schlurf.wav"           },
   { "shield_normal.collecting",                "pong.wav"              },
   { "shield_normal.active",            UNDEFINED_FILENAME      },
index 94366024764911dc3940936b0885a65d842fefaa..ec2aa485f7f279042653295871823434f5c2b37b 100644 (file)
 #define SND_CLASS_QUICKSAND_FILLING                            83
 #define SND_CLASS_QUICKSAND_EMPTYING                           84
 #define SND_CLASS_EXIT_OPENING                                 85
-#define SND_CLASS_EXIT_PASSING                                 86
-#define SND_PENGUIN_PASSING                                    87
-#define SND_BALLOON_MOVING                                     88
-#define SND_BALLOON_WAITING                                    89
-#define SND_BALLOON_PUSHING                                    90
-#define SND_CLASS_BALLOON_SWITCH_ACTIVATING                    91
-#define SND_SPRING_MOVING                                      92
-#define SND_SPRING_PUSHING                                     93
-#define SND_SPRING_IMPACT                                      94
-#define SND_CLASS_WALL_GROWING                                 95
-#define SND_PEARL_COLLECTING                           96
-#define SND_PEARL_BREAKING                                     97
-#define SND_PEARL_IMPACT                                       98
-#define SND_CRYSTAL_COLLECTING                         99
-#define SND_CRYSTAL_IMPACT                                     100
-#define SND_ENVELOPE_COLLECTING                                101
-#define SND_INVISIBLE_SAND_DIGGING                             102
-#define SND_SHIELD_NORMAL_COLLECTING                   103
-#define SND_SHIELD_NORMAL_ACTIVE                               104
-#define SND_SHIELD_DEADLY_COLLECTING                   105
-#define SND_SHIELD_DEADLY_ACTIVE                               106
-#define SND_EXTRA_TIME_COLLECTING                              107
-#define SND_MOLE_MOVING                                        108
-#define SND_MOLE_WAITING                                       109
-#define SND_MOLE_DIGGING                                       110
-#define SND_CLASS_SWITCHGATE_SWITCH_ACTIVATING                 111
-#define SND_CLASS_SWITCHGATE_OPENING                           112
-#define SND_CLASS_SWITCHGATE_CLOSING                           113
-#define SND_CLASS_SWITCHGATE_PASSING                           114
-#define SND_TIMEGATE_SWITCH_ACTIVATING                 115
-#define SND_TIMEGATE_SWITCH_ACTIVE                             116
-#define SND_TIMEGATE_SWITCH_DEACTIVATING                       117
-#define SND_TIMEGATE_OPENING                           118
-#define SND_CLASS_TIMEGATE_CLOSING                             119
-#define SND_CLASS_TIMEGATE_PASSING                             120
-#define SND_CLASS_CONVEYOR_BELT_SWITCH_ACTIVATING              121
-#define SND_CLASS_CONVEYOR_BELT_ACTIVE                         122
-#define SND_CLASS_CONVEYOR_BELT_SWITCH_DEACTIVATING            123
-#define SND_LIGHT_SWITCH_ACTIVATING                            124
-#define SND_LIGHT_SWITCH_DEACTIVATING                  125
-#define SND_DX_SUPABOMB_PUSHING                                126
-#define SND_TRAP_DIGGING                                       127
-#define SND_TRAP_ACTIVATING                                    128
-#define SND_CLASS_TUBE_WALKING                                 129
-#define SND_AMOEBA_TURNING_TO_GEM                              130
-#define SND_AMOEBA_TURNING_TO_ROCK                             131
-#define SND_SPEED_PILL_COLLECTING                              132
-#define SND_DYNABOMB_INCREASE_NUMBER_COLLECTING                133
-#define SND_DYNABOMB_INCREASE_SIZE_COLLECTING          134
-#define SND_DYNABOMB_INCREASE_POWER_COLLECTING         135
-#define SND_CLASS_DYNABOMB_DROPPING                            136
-#define SND_CLASS_DYNABOMB_ACTIVE                              137
-#define SND_SATELLITE_MOVING                           138
-#define SND_SATELLITE_WAITING                          139
-#define SND_SATELLITE_PUSHING                          140
-#define SND_LAMP_ACTIVATING                                    141
-#define SND_LAMP_DEACTIVATING                          142
-#define SND_TIME_ORB_FULL_COLLECTING                   143
-#define SND_TIME_ORB_FULL_IMPACT                               144
-#define SND_TIME_ORB_EMPTY_PUSHING                             145
-#define SND_TIME_ORB_EMPTY_IMPACT                              146
-#define SND_GAME_OF_LIFE_WAITING                               147
-#define SND_GAME_OF_LIFE_GROWING                               148
-#define SND_BIOMAZE_WAITING                                    149
-#define SND_BIOMAZE_GROWING                                    150
-#define SND_PACMAN_MOVING                                      151
-#define SND_PACMAN_WAITING                                     152
-#define SND_PACMAN_DIGGING                                     153
-#define SND_DARK_YAMYAM_MOVING                         154
-#define SND_DARK_YAMYAM_WAITING                                155
-#define SND_DARK_YAMYAM_DIGGING                                156
-#define SND_PENGUIN_MOVING                                     157
-#define SND_PENGUIN_WAITING                                    158
-#define SND_PIG_MOVING                                 159
-#define SND_PIG_WAITING                                        160
-#define SND_PIG_DIGGING                                        161
-#define SND_DRAGON_MOVING                                      162
-#define SND_DRAGON_WAITING                                     163
-#define SND_DRAGON_ATTACKING                           164
-#define SND_GAME_STARTING                                      165
-#define SND_GAME_RUNNING_OUT_OF_TIME                   166
-#define SND_GAME_LEVELTIME_BONUS                               167
-#define SND_GAME_LOSING                                        168
-#define SND_GAME_WINNING                                       169
-#define SND_GAME_SOKOBAN_SOLVING                               170
-#define SND_DOOR_OPENING                                       171
-#define SND_DOOR_CLOSING                                       172
-#define SND_BACKGROUND_SCORES                          173
-#define SND_BACKGROUND_INFO                                    174
+#define SND_CLASS_EXIT_CLOSING                                 86
+#define SND_CLASS_EXIT_PASSING                                 87
+#define SND_PENGUIN_PASSING                                    88
+#define SND_BALLOON_MOVING                                     89
+#define SND_BALLOON_WAITING                                    90
+#define SND_BALLOON_PUSHING                                    91
+#define SND_CLASS_BALLOON_SWITCH_ACTIVATING                    92
+#define SND_SPRING_MOVING                                      93
+#define SND_SPRING_PUSHING                                     94
+#define SND_SPRING_IMPACT                                      95
+#define SND_CLASS_WALL_GROWING                                 96
+#define SND_PEARL_COLLECTING                           97
+#define SND_PEARL_BREAKING                                     98
+#define SND_PEARL_IMPACT                                       99
+#define SND_CRYSTAL_COLLECTING                         100
+#define SND_CRYSTAL_IMPACT                                     101
+#define SND_CLASS_ENVELOPE_COLLECTING                          102
+#define SND_CLASS_ENVELOPE_OPENING                             103
+#define SND_CLASS_ENVELOPE_CLOSING                             104
+#define SND_INVISIBLE_SAND_DIGGING                             105
+#define SND_SHIELD_NORMAL_COLLECTING                   106
+#define SND_SHIELD_NORMAL_ACTIVE                               107
+#define SND_SHIELD_DEADLY_COLLECTING                   108
+#define SND_SHIELD_DEADLY_ACTIVE                               109
+#define SND_EXTRA_TIME_COLLECTING                              110
+#define SND_MOLE_MOVING                                        111
+#define SND_MOLE_WAITING                                       112
+#define SND_MOLE_DIGGING                                       113
+#define SND_CLASS_SWITCHGATE_SWITCH_ACTIVATING                 114
+#define SND_CLASS_SWITCHGATE_OPENING                           115
+#define SND_CLASS_SWITCHGATE_CLOSING                           116
+#define SND_CLASS_SWITCHGATE_PASSING                           117
+#define SND_TIMEGATE_SWITCH_ACTIVATING                 118
+#define SND_TIMEGATE_SWITCH_ACTIVE                             119
+#define SND_TIMEGATE_SWITCH_DEACTIVATING                       120
+#define SND_TIMEGATE_OPENING                           121
+#define SND_CLASS_TIMEGATE_CLOSING                             122
+#define SND_CLASS_TIMEGATE_PASSING                             123
+#define SND_CLASS_CONVEYOR_BELT_SWITCH_ACTIVATING              124
+#define SND_CLASS_CONVEYOR_BELT_ACTIVE                         125
+#define SND_CLASS_CONVEYOR_BELT_SWITCH_DEACTIVATING            126
+#define SND_LIGHT_SWITCH_ACTIVATING                            127
+#define SND_LIGHT_SWITCH_DEACTIVATING                  128
+#define SND_DX_SUPABOMB_PUSHING                                129
+#define SND_TRAP_DIGGING                                       130
+#define SND_TRAP_ACTIVATING                                    131
+#define SND_CLASS_TUBE_WALKING                                 132
+#define SND_AMOEBA_TURNING_TO_GEM                              133
+#define SND_AMOEBA_TURNING_TO_ROCK                             134
+#define SND_SPEED_PILL_COLLECTING                              135
+#define SND_DYNABOMB_INCREASE_NUMBER_COLLECTING                136
+#define SND_DYNABOMB_INCREASE_SIZE_COLLECTING          137
+#define SND_DYNABOMB_INCREASE_POWER_COLLECTING         138
+#define SND_CLASS_DYNABOMB_DROPPING                            139
+#define SND_CLASS_DYNABOMB_ACTIVE                              140
+#define SND_SATELLITE_MOVING                           141
+#define SND_SATELLITE_WAITING                          142
+#define SND_SATELLITE_PUSHING                          143
+#define SND_LAMP_ACTIVATING                                    144
+#define SND_LAMP_DEACTIVATING                          145
+#define SND_TIME_ORB_FULL_COLLECTING                   146
+#define SND_TIME_ORB_FULL_IMPACT                               147
+#define SND_TIME_ORB_EMPTY_PUSHING                             148
+#define SND_TIME_ORB_EMPTY_IMPACT                              149
+#define SND_GAME_OF_LIFE_WAITING                               150
+#define SND_GAME_OF_LIFE_GROWING                               151
+#define SND_BIOMAZE_WAITING                                    152
+#define SND_BIOMAZE_GROWING                                    153
+#define SND_PACMAN_MOVING                                      154
+#define SND_PACMAN_WAITING                                     155
+#define SND_PACMAN_DIGGING                                     156
+#define SND_DARK_YAMYAM_MOVING                         157
+#define SND_DARK_YAMYAM_WAITING                                158
+#define SND_DARK_YAMYAM_DIGGING                                159
+#define SND_PENGUIN_MOVING                                     160
+#define SND_PENGUIN_WAITING                                    161
+#define SND_PIG_MOVING                                 162
+#define SND_PIG_WAITING                                        163
+#define SND_PIG_DIGGING                                        164
+#define SND_DRAGON_MOVING                                      165
+#define SND_DRAGON_WAITING                                     166
+#define SND_DRAGON_ATTACKING                           167
+#define SND_GAME_STARTING                                      168
+#define SND_GAME_RUNNING_OUT_OF_TIME                   169
+#define SND_GAME_LEVELTIME_BONUS                               170
+#define SND_GAME_LOSING                                        171
+#define SND_GAME_WINNING                                       172
+#define SND_GAME_SOKOBAN_SOLVING                               173
+#define SND_DOOR_OPENING                                       174
+#define SND_DOOR_CLOSING                                       175
+#define SND_BACKGROUND_SCORES                          176
+#define SND_BACKGROUND_INFO                                    177
 
-#define NUM_SOUND_FILES                                175
+#define NUM_SOUND_FILES                                178
 
 #endif /* CONF_SND_H */
index a5d63c8596f7b8fa7f95836181c1e29d59db05bb..e122ef128df5243bf8f178a95ca5e85c3add256b 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "[2003-09-13 01:34]"
+#define COMPILE_DATE_STRING "[2003-09-29 00:44]"
index bc79a60621764d53dee7949a6d61e6e1c2086c93..b3495358db2f6e407f98f830ef620ce45b59dae5 100644 (file)
@@ -24,6 +24,9 @@
 #include "tape.h"
 
 
+#define INFOTEXT_UNKNOWN_ELEMENT       "unknown"
+
+
 /*
   -----------------------------------------------------------------------------
   screen and artwork graphic pixel position definitions
                                         ED_GADGET_DISTANCE)
 /* extended custom change target */
 #define ED_AREA_ELEM_CONTENT6_XPOS     (29 * MINI_TILEX)
-#define ED_AREA_ELEM_CONTENT6_YPOS     (ED_SETTINGS_YPOS(9) + \
+#define ED_AREA_ELEM_CONTENT6_YPOS     (ED_SETTINGS_YPOS(10) + \
                                         ED_GADGET_DISTANCE - MINI_TILEY)
 
 /* values for random placement background drawing area */
 #define GADGET_ID_CHANGE_TIME_UNITS    (GADGET_ID_SELECTBOX_FIRST + 10)
 #define GADGET_ID_CHANGE_DIRECT_ACTION (GADGET_ID_SELECTBOX_FIRST + 11)
 #define GADGET_ID_CHANGE_OTHER_ACTION  (GADGET_ID_SELECTBOX_FIRST + 12)
-#define GADGET_ID_CHANGE_POWER         (GADGET_ID_SELECTBOX_FIRST + 13)
-#define GADGET_ID_SELECT_CHANGE_PAGE   (GADGET_ID_SELECTBOX_FIRST + 14)
+#define GADGET_ID_CHANGE_SIDES         (GADGET_ID_SELECTBOX_FIRST + 13)
+#define GADGET_ID_CHANGE_POWER         (GADGET_ID_SELECTBOX_FIRST + 14)
+#define GADGET_ID_SELECT_CHANGE_PAGE   (GADGET_ID_SELECTBOX_FIRST + 15)
 
 /* textbutton identifiers */
-#define GADGET_ID_TEXTBUTTON_FIRST     (GADGET_ID_SELECTBOX_FIRST + 15)
+#define GADGET_ID_TEXTBUTTON_FIRST     (GADGET_ID_SELECTBOX_FIRST + 16)
 
 #define GADGET_ID_PROPERTIES_INFO      (GADGET_ID_TEXTBUTTON_FIRST + 0)
 #define GADGET_ID_PROPERTIES_CONFIG    (GADGET_ID_TEXTBUTTON_FIRST + 1)
 #define ED_SELECTBOX_ID_CHANGE_TIME_UNITS      10
 #define ED_SELECTBOX_ID_CHANGE_DIRECT_ACTION   11
 #define ED_SELECTBOX_ID_CHANGE_OTHER_ACTION    12
-#define ED_SELECTBOX_ID_CHANGE_POWER           13
-#define ED_SELECTBOX_ID_SELECT_CHANGE_PAGE     14
+#define ED_SELECTBOX_ID_CHANGE_SIDES           13
+#define ED_SELECTBOX_ID_CHANGE_POWER           14
+#define ED_SELECTBOX_ID_SELECT_CHANGE_PAGE     15
 
-#define ED_NUM_SELECTBOX                       15
+#define ED_NUM_SELECTBOX                       16
 
 #define ED_SELECTBOX_ID_CUSTOM_FIRST   ED_SELECTBOX_ID_CUSTOM_ACCESS_TYPE
 #define ED_SELECTBOX_ID_CUSTOM_LAST    ED_SELECTBOX_ID_CUSTOM_CONSISTENCY
@@ -858,7 +863,7 @@ static struct
     MIN_ENVELOPE_XSIZE,                        MAX_ENVELOPE_XSIZE,
     GADGET_ID_ENVELOPE_XSIZE_DOWN,     GADGET_ID_ENVELOPE_XSIZE_UP,
     GADGET_ID_ENVELOPE_XSIZE_TEXT,     GADGET_ID_NONE,
-    &level.envelope_xsize,
+    NULL,
     NULL,                              NULL, "width",
   },
   {
@@ -866,7 +871,7 @@ static struct
     MIN_ENVELOPE_YSIZE,                        MAX_ENVELOPE_YSIZE,
     GADGET_ID_ENVELOPE_YSIZE_DOWN,     GADGET_ID_ENVELOPE_YSIZE_UP,
     GADGET_ID_ENVELOPE_YSIZE_TEXT,     GADGET_ID_ENVELOPE_XSIZE_UP,
-    &level.envelope_ysize,
+    NULL,
     NULL,                              " ", "height",
   },
 
@@ -940,12 +945,12 @@ static struct
     NULL,                              "+random", NULL
   },
   {
-    ED_SETTINGS_XPOS(3),               ED_SETTINGS_YPOS(11),
+    ED_SETTINGS_XPOS(3),               ED_SETTINGS_YPOS(12),
     0,                                 100,
     GADGET_ID_CHANGE_CONT_RND_DOWN,    GADGET_ID_CHANGE_CONT_RND_UP,
     GADGET_ID_CHANGE_CONT_RND_TEXT,    GADGET_ID_NONE,
     &custom_element_change.random,
-    NULL,                              "use random change:", "(%)"
+    NULL,                              "use random replace:", "%"
   },
 };
 
@@ -994,7 +999,7 @@ static struct
     ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(2),
     GADGET_ID_ENVELOPE_INFO,
     MAX_ENVELOPE_XSIZE, MAX_ENVELOPE_YSIZE,
-    level.envelope,
+    NULL,
     "Envelope Info:", "Envelope Info"
   }
 };
@@ -1038,6 +1043,7 @@ static struct ValueTextInfo options_move_pattern[] =
   { MV_ALONG_RIGHT_SIDE,       "along right side"              },
   { MV_TURNING_LEFT,           "turning left"                  },
   { MV_TURNING_RIGHT,          "turning right"                 },
+  { MV_WHEN_PUSHED,            "when pushed"                   },
   { -1,                                NULL                            }
 };
 
@@ -1099,18 +1105,20 @@ static struct ValueTextInfo options_consistency[] =
 
 static struct ValueTextInfo options_time_units[] =
 {
-  { FRAMES_PER_SECOND,         "seconds"                       },
   { 1,                         "frames"                        },
+  { FRAMES_PER_SECOND,         "seconds"                       },
   { -1,                                NULL                            }
 };
 
 static struct ValueTextInfo options_change_direct_action[] =
 {
-  { CE_TOUCHED_BY_PLAYER,      "touched by player"             },
-  { CE_PRESSED_BY_PLAYER,      "pressed by player"             },
-  { CE_PUSHED_BY_PLAYER,       "pushed by player"              },
+  { CE_TOUCHED_BY_PLAYER,      "touched by player ..."         },
+  { CE_PRESSED_BY_PLAYER,      "pressed by player ..."         },
+  { CE_PUSHED_BY_PLAYER,       "pushed by player ..."          },
+  { CE_ENTERED_BY_PLAYER,      "entered by player ..."         },
+  { CE_LEFT_BY_PLAYER,         "left by player ..."            },
   { CE_DROPPED_BY_PLAYER,      "dropped by player"             },
-  { CE_COLLISION,              "collision"                     },
+  { CE_COLLISION,              "collision ..."                 },
   { CE_IMPACT,                 "impact"                        },
   { CE_SMASHED,                        "smashed"                       },
   { -1,                                NULL                            }
@@ -1118,18 +1126,32 @@ static struct ValueTextInfo options_change_direct_action[] =
 
 static struct ValueTextInfo options_change_other_action[] =
 {
-  { CE_OTHER_GETS_TOUCHED,     "player touches"                },
-  { CE_OTHER_GETS_PRESSED,     "player presses"                },
-  { CE_OTHER_GETS_PUSHED,      "player pushes"                 },
+  { CE_OTHER_GETS_TOUCHED,     "player touches ..."            },
+  { CE_OTHER_GETS_PRESSED,     "player presses ..."            },
+  { CE_OTHER_GETS_PUSHED,      "player pushes ..."             },
+  { CE_OTHER_GETS_ENTERED,     "player enters ..."             },
+  { CE_OTHER_GETS_LEFT,                "player leaves ..."             },
   { CE_OTHER_GETS_DIGGED,      "player digs"                   },
   { CE_OTHER_GETS_COLLECTED,   "player collects"               },
   { CE_OTHER_GETS_DROPPED,     "player drops"                  },
-  { CE_OTHER_IS_TOUCHING,      "touching"                      },
+  { CE_OTHER_IS_TOUCHING,      "touching ..."                  },
   { CE_OTHER_IS_CHANGING,      "change of"                     },
   { CE_OTHER_IS_EXPLODING,     "explosion of"                  },
   { -1,                                NULL                            }
 };
 
+static struct ValueTextInfo options_change_sides[] =
+{
+  { CH_SIDE_LEFT,              "left side"                     },
+  { CH_SIDE_RIGHT,             "right side"                    },
+  { CH_SIDE_TOP,               "top side"                      },
+  { CH_SIDE_BOTTOM,            "bottom side"                   },
+  { CH_SIDE_LEFT_RIGHT,                "left/right side"               },
+  { CH_SIDE_TOP_BOTTOM,                "top/bottom side"               },
+  { CH_SIDE_ANY,               "all sides"                     },
+  { -1,                                NULL                            }
+};
+
 static struct ValueTextInfo options_change_power[] =
 {
   { CP_NON_DESTRUCTIVE,                "empty"                         },
@@ -1265,7 +1287,15 @@ static struct
     NULL, "element:",                  "type of other element action"
   },
   {
-    ED_SETTINGS_XPOS(2),               ED_SETTINGS_YPOS(9),
+    ED_SETTINGS_XPOS(2),               ED_SETTINGS_YPOS(7),
+    GADGET_ID_CHANGE_SIDES,            GADGET_ID_NONE,
+    -1,
+    options_change_sides,
+    &custom_element_change.sides,
+    "... at", NULL,                    "element side that causes change"
+  },
+  {
+    ED_SETTINGS_XPOS(2),               ED_SETTINGS_YPOS(10),
     GADGET_ID_CHANGE_POWER,            GADGET_ID_NONE,
     -1,
     options_change_power,
@@ -1273,7 +1303,7 @@ static struct
     "replace when", NULL,              "which elements can be replaced"
   },
   {
-    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(13),
+    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(14),
     GADGET_ID_SELECT_CHANGE_PAGE,      GADGET_ID_NONE,
     3,
     options_change_page,
@@ -1311,19 +1341,19 @@ static struct
     NULL, NULL,                                "Advanced element configuration"
   },
   {
-    -1,                                        ED_SETTINGS_YPOS(12),
+    -1,                                        ED_SETTINGS_YPOS(13),
     GADGET_ID_SAVE_AS_TEMPLATE,                GADGET_ID_CUSTOM_USE_TEMPLATE,
     -1,                                        "Save as template",
     " ", NULL,                         "Save current settings as new template"
   },
   {
-    -1,                                        ED_SETTINGS_YPOS(13),
+    -1,                                        ED_SETTINGS_YPOS(14),
     GADGET_ID_ADD_CHANGE_PAGE,         GADGET_ID_NEXT_CHANGE_PAGE,
     -1,                                        "New",
     " ", NULL,                         "Add new config page"
   },
   {
-    -1,                                        ED_SETTINGS_YPOS(13),
+    -1,                                        ED_SETTINGS_YPOS(14),
     GADGET_ID_DEL_CHANGE_PAGE,         GADGET_ID_ADD_CHANGE_PAGE,
     -1,                                        "Delete",
     NULL, NULL,                                "Delete current config page"
@@ -1342,14 +1372,14 @@ static struct
 {
   {
     ED_BUTTON_MINUS_XPOS,              ED_BUTTON_COUNT_YPOS,
-    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(13),
+    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(14),
     ED_BUTTON_COUNT_XSIZE,             ED_BUTTON_COUNT_YSIZE,
     GADGET_ID_PREV_CHANGE_PAGE,                GADGET_ID_NONE,
     NULL, NULL,                                "select previous config page"
   },
   {
     ED_BUTTON_PLUS_XPOS,               ED_BUTTON_COUNT_YPOS,
-    -1,                                        ED_SETTINGS_YPOS(13),
+    -1,                                        ED_SETTINGS_YPOS(14),
     ED_BUTTON_COUNT_XSIZE,             ED_BUTTON_COUNT_YSIZE,
     GADGET_ID_NEXT_CHANGE_PAGE,                GADGET_ID_SELECT_CHANGE_PAGE,
     NULL, "config page",               "select next config page"
@@ -1615,31 +1645,31 @@ static struct
     NULL, NULL,                                "element changes by other element"
   },
   {
-    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(7),
+    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(8),
     GADGET_ID_CHANGE_USE_EXPLOSION,    GADGET_ID_NONE,
     &custom_element_change.explode,
     NULL, "explode instead of change", "element explodes instead of change"
   },
   {
-    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(8),
+    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(9),
     GADGET_ID_CHANGE_USE_CONTENT,      GADGET_ID_NONE,
     &custom_element_change.use_content,
     NULL, "use extended change target:","element changes to more elements"
   },
   {
-    ED_SETTINGS_XPOS(2),               ED_SETTINGS_YPOS(10),
+    ED_SETTINGS_XPOS(2),               ED_SETTINGS_YPOS(11),
     GADGET_ID_CHANGE_ONLY_COMPLETE,    GADGET_ID_NONE,
     &custom_element_change.only_complete,
-    NULL, "only use complete change",  "only use complete extended content"
+    NULL, "replace all or nothing",    "only replace when all can be changed"
   },
   {
-    ED_SETTINGS_XPOS(2),               ED_SETTINGS_YPOS(11),
+    ED_SETTINGS_XPOS(2),               ED_SETTINGS_YPOS(12),
     GADGET_ID_CHANGE_USE_RANDOM,       GADGET_ID_NONE,
     &custom_element_change.use_random_change,
-    NULL, NULL,                                "use random value for new content"
+    NULL, NULL,                                "use percentage for random replace"
   },
   {
-    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(12),
+    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(13),
     GADGET_ID_CUSTOM_USE_TEMPLATE,     GADGET_ID_NONE,
     &level.use_custom_template,
     NULL, "use template",              "use template for custom properties"
@@ -1973,10 +2003,17 @@ static int editor_el_emerald_mine[] =
   EL_AMOEBA_WET,
   EL_AMOEBA_DRY,
 
+#if 1
+  EL_EM_KEY_1,
+  EL_EM_KEY_2,
+  EL_EM_KEY_3,
+  EL_EM_KEY_4,
+#else
   EL_EM_KEY_1_FILE,
   EL_EM_KEY_2_FILE,
   EL_EM_KEY_3_FILE,
   EL_EM_KEY_4_FILE,
+#endif
 
   EL_EM_GATE_1,
   EL_EM_GATE_2,
@@ -2056,17 +2093,17 @@ static int editor_el_more[] =
   EL_PIG,
   EL_DRAGON,
 
-  EL_EMPTY,
+  EL_BUG,
   EL_MOLE_UP,
-  EL_EMPTY,
-  EL_EMPTY,
+  EL_BD_BUTTERFLY,
+  EL_BD_FIREFLY,
 
   EL_MOLE_LEFT,
   EL_EMPTY,
   EL_MOLE_RIGHT,
-  EL_EMPTY,
+  EL_PACMAN,
 
-  EL_EMPTY,
+  EL_SPACESHIP,
   EL_MOLE_DOWN,
   EL_BALLOON,
   EL_BALLOON_SWITCH_ANY,
@@ -2137,7 +2174,11 @@ static int editor_hl_supaplex[] =
 
 static int editor_el_supaplex[] =
 {
+#if 1
+  EL_EMPTY,
+#else
   EL_SP_EMPTY,
+#endif
   EL_SP_ZONK,
   EL_SP_BASE,
   EL_SP_MURPHY,
@@ -2253,7 +2294,12 @@ static int editor_el_diamond_caves[] =
   EL_SWITCHGATE_OPEN,
   EL_SWITCHGATE_CLOSED,
   EL_SWITCHGATE_SWITCH_UP,
-  EL_ENVELOPE,
+  EL_EMPTY,
+
+  EL_ENVELOPE_1,
+  EL_ENVELOPE_2,
+  EL_ENVELOPE_3,
+  EL_ENVELOPE_4,
 
   EL_TIMEGATE_CLOSED,
   EL_TIMEGATE_OPEN,
@@ -2867,14 +2913,81 @@ editor_elements_info[] =
   -----------------------------------------------------------------------------
 */
 
+static int getMaxInfoTextLength()
+{
+  return (SXSIZE / getFontWidth(FONT_TEXT_2));
+}
+
+static int getTextWidthForGadget(char *text)
+{
+  if (text == NULL)
+    return 0;
+
+  return (getTextWidth(text, FONT_TEXT_1) + ED_GADGET_TEXT_DISTANCE);
+}
+
+static int getTextWidthForDrawingArea(char *text)
+{
+  if (text == NULL)
+    return 0;
+
+  return (getTextWidth(text, FONT_TEXT_1) + ED_DRAWINGAREA_TEXT_DISTANCE);
+}
+
+static int getRightGadgetBorder(struct GadgetInfo *gi, char *text)
+{
+  return (gi->x + gi->width + getTextWidthForGadget(text));
+}
+
+static char *getElementInfoText(int element)
+{
+  char *info_text = NULL;
+
+  if (element < NUM_FILE_ELEMENTS)
+  {
+    if (strlen(element_info[element].description) > 0)
+      info_text = element_info[element].description;
+    else if (element_info[element].custom_description != NULL)
+      info_text = element_info[element].custom_description;
+    else if (element_info[element].editor_description != NULL)
+      info_text = element_info[element].editor_description;
+  }
+
+  if (info_text == NULL)
+    info_text = INFOTEXT_UNKNOWN_ELEMENT;
+
+  return info_text;
+}
+
 static void ReinitializeElementList()
 {
+  static boolean initialized = FALSE;
   int pos = 0;
   int i, j;
 
   if (editor_elements != NULL)
     free(editor_elements);
 
+  /* do some sanity check for each element from element list at startup */
+  if (!initialized)
+  {
+    for (i=0; editor_elements_info[i].setup_value != NULL; i++)
+    {
+      for (j=0; j < *editor_elements_info[i].element_list_size; j++)
+      {
+       int element = editor_elements_info[i].element_list[j];
+
+       if (element >= NUM_FILE_ELEMENTS)
+         Error(ERR_WARN, "editor element %d is runtime element", element);
+
+       if (strcmp(getElementInfoText(element), INFOTEXT_UNKNOWN_ELEMENT) == 0)
+         Error(ERR_WARN, "no element description for element %d", element);
+      }
+    }
+
+    initialized = TRUE;
+  }
+
   num_editor_elements = 0;
 
   /* determine size of element list */
@@ -2953,56 +3066,6 @@ static void ReinitializeElementListButtons()
   initialization_needed = FALSE;
 }
 
-static int getMaxInfoTextLength()
-{
-  return (SXSIZE / getFontWidth(FONT_TEXT_2));
-}
-
-static int getTextWidthForGadget(char *text)
-{
-  if (text == NULL)
-    return 0;
-
-  return (getTextWidth(text, FONT_TEXT_1) + ED_GADGET_TEXT_DISTANCE);
-}
-
-static int getTextWidthForDrawingArea(char *text)
-{
-  if (text == NULL)
-    return 0;
-
-  return (getTextWidth(text, FONT_TEXT_1) + ED_DRAWINGAREA_TEXT_DISTANCE);
-}
-
-static int getRightGadgetBorder(struct GadgetInfo *gi, char *text)
-{
-  return (gi->x + gi->width + getTextWidthForGadget(text));
-}
-
-static char *getElementInfoText(int element)
-{
-  char *info_text = NULL;
-
-  if (element < NUM_FILE_ELEMENTS)
-  {
-    if (strlen(element_info[element].description) > 0)
-      info_text = element_info[element].description;
-    else if (element_info[element].custom_description != NULL)
-      info_text = element_info[element].custom_description;
-    else if (element_info[element].editor_description != NULL)
-      info_text = element_info[element].editor_description;
-  }
-
-  if (info_text == NULL)
-  {
-    info_text = "unknown";
-
-    Error(ERR_WARN, "no element description for element %d", element);
-  }
-
-  return info_text;
-}
-
 static void DrawElementBorder(int dest_x, int dest_y, int width, int height,
                              boolean input)
 {
@@ -3259,7 +3322,7 @@ static void CreateControlButtons()
   }
 
   /* create buttons for element list */
-  for (i=0; i<ED_NUM_ELEMENTLIST_BUTTONS; i++)
+  for (i=0; i < ED_NUM_ELEMENTLIST_BUTTONS; i++)
   {
     Bitmap *deco_bitmap;
     int deco_x, deco_y, deco_xpos, deco_ypos;
@@ -4527,6 +4590,8 @@ static void CopyCustomElementPropertiesToEditor(int element)
     (HAS_CHANGE_EVENT(element, CE_TOUCHED_BY_PLAYER) ? CE_TOUCHED_BY_PLAYER :
      HAS_CHANGE_EVENT(element, CE_PRESSED_BY_PLAYER) ? CE_PRESSED_BY_PLAYER :
      HAS_CHANGE_EVENT(element, CE_PUSHED_BY_PLAYER) ? CE_PUSHED_BY_PLAYER :
+     HAS_CHANGE_EVENT(element, CE_ENTERED_BY_PLAYER) ? CE_ENTERED_BY_PLAYER :
+     HAS_CHANGE_EVENT(element, CE_LEFT_BY_PLAYER) ? CE_LEFT_BY_PLAYER :
      HAS_CHANGE_EVENT(element, CE_DROPPED_BY_PLAYER) ? CE_DROPPED_BY_PLAYER :
      HAS_CHANGE_EVENT(element, CE_COLLISION) ? CE_COLLISION :
      HAS_CHANGE_EVENT(element, CE_IMPACT) ? CE_IMPACT :
@@ -4535,10 +4600,11 @@ static void CopyCustomElementPropertiesToEditor(int element)
 
   /* set "change by other element action" selectbox help value */
   custom_element_change.other_action =
-    (
-     HAS_CHANGE_EVENT(element, CE_OTHER_GETS_TOUCHED) ? CE_OTHER_GETS_TOUCHED :
+    (HAS_CHANGE_EVENT(element, CE_OTHER_GETS_TOUCHED) ? CE_OTHER_GETS_TOUCHED :
      HAS_CHANGE_EVENT(element, CE_OTHER_GETS_PRESSED) ? CE_OTHER_GETS_PRESSED :
      HAS_CHANGE_EVENT(element, CE_OTHER_GETS_PUSHED) ? CE_OTHER_GETS_PUSHED :
+     HAS_CHANGE_EVENT(element, CE_OTHER_GETS_ENTERED) ? CE_OTHER_GETS_ENTERED :
+     HAS_CHANGE_EVENT(element, CE_OTHER_GETS_LEFT) ? CE_OTHER_GETS_LEFT :
      HAS_CHANGE_EVENT(element, CE_OTHER_GETS_DIGGED) ? CE_OTHER_GETS_DIGGED :
      HAS_CHANGE_EVENT(element, CE_OTHER_GETS_COLLECTED) ? CE_OTHER_GETS_COLLECTED :
      HAS_CHANGE_EVENT(element, CE_OTHER_GETS_DROPPED) ? CE_OTHER_GETS_DROPPED :
@@ -4640,6 +4706,8 @@ static void CopyCustomElementPropertiesToGame(int element)
   custom_element_change_events[CE_TOUCHED_BY_PLAYER] = FALSE;
   custom_element_change_events[CE_PRESSED_BY_PLAYER] = FALSE;
   custom_element_change_events[CE_PUSHED_BY_PLAYER] = FALSE;
+  custom_element_change_events[CE_ENTERED_BY_PLAYER] = FALSE;
+  custom_element_change_events[CE_LEFT_BY_PLAYER] = FALSE;
   custom_element_change_events[CE_DROPPED_BY_PLAYER] = FALSE;
   custom_element_change_events[CE_COLLISION] = FALSE;
   custom_element_change_events[CE_IMPACT] = FALSE;
@@ -4648,15 +4716,17 @@ static void CopyCustomElementPropertiesToGame(int element)
     custom_element_change_events[CE_BY_DIRECT_ACTION];
 
   /* set other element action change event from checkbox and selectbox */
-  custom_element_change_events[CE_OTHER_IS_TOUCHING] = FALSE;
-  custom_element_change_events[CE_OTHER_IS_CHANGING] = FALSE;
-  custom_element_change_events[CE_OTHER_IS_EXPLODING] = FALSE;
   custom_element_change_events[CE_OTHER_GETS_TOUCHED] = FALSE;
   custom_element_change_events[CE_OTHER_GETS_PRESSED] = FALSE;
   custom_element_change_events[CE_OTHER_GETS_PUSHED] = FALSE;
+  custom_element_change_events[CE_OTHER_GETS_ENTERED] = FALSE;
+  custom_element_change_events[CE_OTHER_GETS_LEFT] = FALSE;
   custom_element_change_events[CE_OTHER_GETS_DIGGED] = FALSE;
   custom_element_change_events[CE_OTHER_GETS_COLLECTED] = FALSE;
   custom_element_change_events[CE_OTHER_GETS_DROPPED] = FALSE;
+  custom_element_change_events[CE_OTHER_IS_TOUCHING] = FALSE;
+  custom_element_change_events[CE_OTHER_IS_CHANGING] = FALSE;
+  custom_element_change_events[CE_OTHER_IS_EXPLODING] = FALSE;
   custom_element_change_events[custom_element_change.other_action] =
     custom_element_change_events[CE_BY_OTHER_ACTION];
 
@@ -5033,7 +5103,7 @@ static void DrawElementContentAreas()
   DrawText(x, y + 2 * MINI_TILEY, "smashed", FONT_TEXT_1);
 }
 
-static void DrawEnvelopeTextArea()
+static void DrawEnvelopeTextArea(int envelope_nr)
 {
   int id = ED_TEXTAREA_ID_ENVELOPE_INFO;
   struct GadgetInfo *gi = level_editor_gadget[textarea_info[id].gadget_id];
@@ -5041,8 +5111,14 @@ static void DrawEnvelopeTextArea()
   UnmapGadget(gi);
   DrawBackground(gi->x, gi->y, gi->width, gi->height);
 
-  ModifyGadget(gi, GDI_AREA_SIZE, level.envelope_xsize, level.envelope_ysize,
+  if (envelope_nr != -1)
+    textarea_info[id].value = level.envelope_text[envelope_nr];
+
+  ModifyGadget(gi, GDI_AREA_SIZE,
+              *counterbutton_info[ED_COUNTER_ID_ENVELOPE_XSIZE].value,
+              *counterbutton_info[ED_COUNTER_ID_ENVELOPE_YSIZE].value,
               GDI_END);
+
   MapTextAreaGadget(ED_TEXTAREA_ID_ENVELOPE_INFO);
 }
 
@@ -5301,7 +5377,7 @@ static void DrawPropertiesInfo()
     { EP_DONT_COLLIDE_WITH,    "- deadly when colliding with"          },
     { EP_DONT_TOUCH,           "- deadly when touching"                },
 
-    { EP_INDESTRUCTIBLE,       "- undestructible"                      },
+    { EP_INDESTRUCTIBLE,       "- indestructible"                      },
 
     { EP_CAN_EXPLODE_BY_FIRE,  "- can explode by fire or explosions"   },
     { EP_CAN_EXPLODE_SMASHED,  "- can explode when smashed"            },
@@ -5434,10 +5510,17 @@ static struct
   { EL_KEY_2,          &level.score[SC_KEY],           TEXT_COLLECTING },
   { EL_KEY_3,          &level.score[SC_KEY],           TEXT_COLLECTING },
   { EL_KEY_4,          &level.score[SC_KEY],           TEXT_COLLECTING },
+#if 1
+  { EL_EM_KEY_1,       &level.score[SC_KEY],           TEXT_COLLECTING },
+  { EL_EM_KEY_2,       &level.score[SC_KEY],           TEXT_COLLECTING },
+  { EL_EM_KEY_3,       &level.score[SC_KEY],           TEXT_COLLECTING },
+  { EL_EM_KEY_4,       &level.score[SC_KEY],           TEXT_COLLECTING },
+#else
   { EL_EM_KEY_1_FILE,  &level.score[SC_KEY],           TEXT_COLLECTING },
   { EL_EM_KEY_2_FILE,  &level.score[SC_KEY],           TEXT_COLLECTING },
   { EL_EM_KEY_3_FILE,  &level.score[SC_KEY],           TEXT_COLLECTING },
   { EL_EM_KEY_4_FILE,  &level.score[SC_KEY],           TEXT_COLLECTING },
+#endif
   { EL_AMOEBA_WET,     &level.amoeba_speed,            TEXT_SPEED      },
   { EL_AMOEBA_DRY,     &level.amoeba_speed,            TEXT_SPEED      },
   { EL_AMOEBA_FULL,    &level.amoeba_speed,            TEXT_SPEED      },
@@ -5453,8 +5536,8 @@ static boolean checkPropertiesConfig()
 
   if (IS_GEM(properties_element) ||
       IS_CUSTOM_ELEMENT(properties_element) ||
-      HAS_CONTENT(properties_element) ||
-      properties_element == EL_ENVELOPE)
+      IS_ENVELOPE(properties_element) ||
+      HAS_CONTENT(properties_element))
     return TRUE;
   else
     for (i=0; elements_with_counter[i].element != -1; i++)
@@ -5506,13 +5589,20 @@ static void DrawPropertiesConfig()
   if (IS_GEM(properties_element))
     MapCheckbuttonGadget(ED_CHECKBUTTON_ID_EM_SLIPPERY_GEMS);
 
-  if (properties_element == EL_ENVELOPE)
+  if (IS_ENVELOPE(properties_element))
   {
+    int counter1_id = ED_COUNTER_ID_ENVELOPE_XSIZE;
+    int counter2_id = ED_COUNTER_ID_ENVELOPE_YSIZE;
+    int envelope_nr = properties_element - EL_ENVELOPE_1;
+
+    counterbutton_info[counter1_id].value = &level.envelope_xsize[envelope_nr];
+    counterbutton_info[counter2_id].value = &level.envelope_ysize[envelope_nr];
+
     /* display counter to choose size of envelope text area */
     MapCounterButtons(ED_COUNTER_ID_ENVELOPE_XSIZE);
     MapCounterButtons(ED_COUNTER_ID_ENVELOPE_YSIZE);
 
-    DrawEnvelopeTextArea();
+    DrawEnvelopeTextArea(envelope_nr);
   }
 
   if (IS_CUSTOM_ELEMENT(properties_element))
@@ -6628,7 +6718,7 @@ static void HandleCounterButtons(struct GadgetInfo *gi)
 
     case ED_COUNTER_ID_ENVELOPE_XSIZE:
     case ED_COUNTER_ID_ENVELOPE_YSIZE:
-      DrawEnvelopeTextArea();
+      DrawEnvelopeTextArea(-1);
       break;
 
     case ED_COUNTER_ID_LEVEL_XSIZE:
@@ -7482,10 +7572,12 @@ void RequestExitLevelEditor(boolean ask_if_level_has_changed)
       Request("Level has changed! Exit without saving ?",
              REQ_ASK | REQ_STAY_OPEN))
   {
+#if 1
     CloseDoor(DOOR_CLOSE_1);
-    /*
+    SetDoorState(DOOR_CLOSE_2);
+#else
     CloseDoor(DOOR_CLOSE_ALL);
-    */
+#endif
     game_status = GAME_MODE_MAIN;
     DrawMainMenu();
   }
index ac3f0b4b86d92fafaa49f29987038a9ad8c3812f..4dac3c11d1c94aea0d67c9a1f63d284e85629607 100644 (file)
@@ -34,8 +34,6 @@
 #define LEVEL_CHUNK_CNT3_UNUSED        10      /* unused CNT3 chunk bytes    */
 #define LEVEL_CPART_CUS3_SIZE  134     /* size of CUS3 chunk part    */
 #define LEVEL_CPART_CUS3_UNUSED        15      /* unused CUS3 bytes / part   */
-#define LEVEL_CPART_CUS4_SIZE  ???     /* size of CUS4 chunk part    */
-#define LEVEL_CPART_CUS4_UNUSED        ???     /* unused CUS4 bytes / part   */
 #define TAPE_HEADER_SIZE       20      /* size of tape file header   */
 #define TAPE_HEADER_UNUSED     3       /* unused tape header bytes   */
 
@@ -74,11 +72,13 @@ void setElementChangeInfoToDefaults(struct ElementChangeInfo *change)
   change->can_change = FALSE;
 
   change->events = CE_BITMASK_DEFAULT;
+  change->sides = CH_SIDE_ANY;
+
   change->target_element = EL_EMPTY_SPACE;
 
   change->delay_fixed = 0;
   change->delay_random = 0;
-  change->delay_frames = -1;   /* later set to reliable default value */
+  change->delay_frames = 1;
 
   change->trigger_element = EL_EMPTY_SPACE;
 
@@ -86,7 +86,7 @@ void setElementChangeInfoToDefaults(struct ElementChangeInfo *change)
   change->use_content = FALSE;
   change->only_complete = FALSE;
   change->use_random_change = FALSE;
-  change->random = 0;
+  change->random = 100;
   change->power = CP_NON_DESTRUCTIVE;
 
   for(x=0; x<3; x++)
@@ -141,9 +141,12 @@ static void setLevelInfoToDefaults(struct LevelInfo *level)
   strcpy(level->name, NAMELESS_LEVEL_NAME);
   strcpy(level->author, ANONYMOUS_NAME);
 
-  level->envelope[0] = '\0';
-  level->envelope_xsize = MAX_ENVELOPE_XSIZE;
-  level->envelope_ysize = MAX_ENVELOPE_YSIZE;
+  for (i=0; i<4; i++)
+  {
+    level->envelope_text[i][0] = '\0';
+    level->envelope_xsize[i] = MAX_ENVELOPE_XSIZE;
+    level->envelope_ysize[i] = MAX_ENVELOPE_YSIZE;
+  }
 
   for(i=0; i<LEVEL_SCORE_ELEMENTS; i++)
     level->score[i] = 10;
@@ -272,15 +275,63 @@ boolean LevelFileExists(int level_nr)
 
 static int checkLevelElement(int element)
 {
+  /* map some (historic, now obsolete) elements */
+
+#if 1
+  switch (element)
+  {
+    case EL_PLAYER_OBSOLETE:
+      element = EL_PLAYER_1;
+      break;
+
+    case EL_KEY_OBSOLETE:
+      element = EL_KEY_1;
+
+    case EL_EM_KEY_1_FILE_OBSOLETE:
+      element = EL_EM_KEY_1;
+      break;
+
+    case EL_EM_KEY_2_FILE_OBSOLETE:
+      element = EL_EM_KEY_2;
+      break;
+
+    case EL_EM_KEY_3_FILE_OBSOLETE:
+      element = EL_EM_KEY_3;
+      break;
+
+    case EL_EM_KEY_4_FILE_OBSOLETE:
+      element = EL_EM_KEY_4;
+      break;
+
+    case EL_ENVELOPE_OBSOLETE:
+      element = EL_ENVELOPE_1;
+      break;
+
+    case EL_SP_EMPTY:
+      element = EL_EMPTY;
+      break;
+
+    default:
+      if (element >= NUM_FILE_ELEMENTS)
+      {
+       Error(ERR_WARN, "invalid level element %d", element);
+
+       element = EL_CHAR_QUESTION;
+      }
+      break;
+  }
+#else
   if (element >= NUM_FILE_ELEMENTS)
   {
     Error(ERR_WARN, "invalid level element %d", element);
+
     element = EL_CHAR_QUESTION;
   }
   else if (element == EL_PLAYER_OBSOLETE)
     element = EL_PLAYER_1;
   else if (element == EL_KEY_OBSOLETE)
     element = EL_KEY_1;
+#endif
 
   return element;
 }
@@ -458,13 +509,20 @@ static int LoadLevel_CNT3(FILE *file, int chunk_size, struct LevelInfo *level)
 {
   int i;
   int element;
+  int envelope_nr;
   int envelope_len;
   int chunk_size_expected;
 
   element = checkLevelElement(getFile16BitBE(file));
+  if (!IS_ENVELOPE(element))
+    element = EL_ENVELOPE_1;
+
+  envelope_nr = element - EL_ENVELOPE_1;
+
   envelope_len = getFile16BitBE(file);
-  level->envelope_xsize = getFile8Bit(file);
-  level->envelope_ysize = getFile8Bit(file);
+
+  level->envelope_xsize[envelope_nr] = getFile8Bit(file);
+  level->envelope_ysize[envelope_nr] = getFile8Bit(file);
 
   ReadUnusedBytesFromFile(file, LEVEL_CHUNK_CNT3_UNUSED);
 
@@ -477,7 +535,7 @@ static int LoadLevel_CNT3(FILE *file, int chunk_size, struct LevelInfo *level)
   }
 
   for(i=0; i < envelope_len; i++)
-    level->envelope[i] = getFile8Bit(file);
+    level->envelope_text[envelope_nr][i] = getFile8Bit(file);
 
   return chunk_size;
 }
@@ -695,6 +753,9 @@ static int LoadLevel_CUS4(FILE *file, int chunk_size, struct LevelInfo *level)
   {
     struct ElementChangeInfo *change = &ei->change_page[i];
 
+    /* always start with reliable default values */
+    setElementChangeInfoToDefaults(change);
+
     change->events = getFile32BitBE(file);
 
     change->target_element = checkLevelElement(getFile16BitBE(file));
@@ -719,8 +780,13 @@ static int LoadLevel_CUS4(FILE *file, int chunk_size, struct LevelInfo *level)
 
     change->can_change = getFile8Bit(file);
 
+    change->sides = getFile8Bit(file);
+
+    if (change->sides == CH_SIDE_NONE) /* correct empty sides field */
+      change->sides = CH_SIDE_ANY;
+
     /* some free bytes for future change property values and padding */
-    ReadUnusedBytesFromFile(file, 9);
+    ReadUnusedBytesFromFile(file, 8);
   }
 
   /* mark this custom element as modified */
@@ -1358,17 +1424,18 @@ static void SaveLevel_CNT2(FILE *file, struct LevelInfo *level, int element)
 static void SaveLevel_CNT3(FILE *file, struct LevelInfo *level, int element)
 {
   int i;
-  int envelope_len = strlen(level->envelope) + 1;
+  int envelope_nr = element - EL_ENVELOPE_1;
+  int envelope_len = strlen(level->envelope_text[envelope_nr]) + 1;
 
   putFile16BitBE(file, element);
   putFile16BitBE(file, envelope_len);
-  putFile8Bit(file, level->envelope_xsize);
-  putFile8Bit(file, level->envelope_ysize);
+  putFile8Bit(file, level->envelope_xsize[envelope_nr]);
+  putFile8Bit(file, level->envelope_ysize[envelope_nr]);
 
   WriteUnusedBytesToFile(file, LEVEL_CHUNK_CNT3_UNUSED);
 
   for(i=0; i < envelope_len; i++)
-    putFile8Bit(file, level->envelope[i]);
+    putFile8Bit(file, level->envelope_text[envelope_nr][i]);
 }
 
 #if 0
@@ -1585,8 +1652,10 @@ static void SaveLevel_CUS4(FILE *file, struct LevelInfo *level, int element)
 
     putFile8Bit(file, change->can_change);
 
+    putFile8Bit(file, change->sides);
+
     /* some free bytes for future change property values and padding */
-    WriteUnusedBytesToFile(file, 9);
+    WriteUnusedBytesToFile(file, 8);
   }
 }
 
@@ -1658,12 +1727,15 @@ static void SaveLevelFromFilename(struct LevelInfo *level, char *filename)
   }
 
   /* check for envelope content */
-  if (strlen(level->envelope) > 0)
+  for (i=0; i<4; i++)
   {
-    int envelope_len = strlen(level->envelope) + 1;
+    if (strlen(level->envelope_text[i]) > 0)
+    {
+      int envelope_len = strlen(level->envelope_text[i]) + 1;
 
-    putFileChunkBE(file, "CNT3", LEVEL_CHUNK_CNT3_HEADER + envelope_len);
-    SaveLevel_CNT3(file, level, EL_ENVELOPE);
+      putFileChunkBE(file, "CNT3", LEVEL_CHUNK_CNT3_HEADER + envelope_len);
+      SaveLevel_CNT3(file, level, EL_ENVELOPE_1 + i);
+    }
   }
 
   /* check for non-default custom elements (unless using template level) */
@@ -2755,7 +2827,8 @@ void LoadSpecialMenuDesignSettings()
     for (j=0; image_config[j].token != NULL; j++)
       if (strcmp(image_config_vars[i].token, image_config[j].token) == 0)
        *image_config_vars[i].value =
-         get_integer_from_string(image_config[j].value);
+         get_auto_parameter_value(image_config_vars[i].token,
+                                  image_config[j].value);
 
   if ((setup_file_hash = loadSetupFileHash(filename)) == NULL)
     return;
@@ -2781,7 +2854,8 @@ void LoadSpecialMenuDesignSettings()
     char *value = getHashEntry(setup_file_hash, image_config_vars[i].token);
 
     if (value != NULL)
-      *image_config_vars[i].value = get_integer_from_string(value);
+      *image_config_vars[i].value =
+       get_auto_parameter_value(image_config_vars[i].token, value);
   }
 
   freeSetupFileHash(setup_file_hash);
index 750c70a91e01a7ddfaeb6f63bf296c168b6bc7e9..3b06f4856fb2cb11b508431468892ff008dde8f8 100644 (file)
@@ -169,7 +169,9 @@ static void KillHeroUnlessProtected(int, int);
 static void TestIfPlayerTouchesCustomElement(int, int);
 static void TestIfElementTouchesCustomElement(int, int);
 
+static boolean CheckTriggeredElementSideChange(int, int, int, int, int);
 static boolean CheckTriggeredElementChange(int, int, int, int);
+static boolean CheckElementSideChange(int, int, int, int, int, int);
 static boolean CheckElementChange(int, int, int, int);
 
 static void PlaySoundLevel(int, int, int);
@@ -241,6 +243,14 @@ static struct ChangingElementInfo change_delay_list[] =
     NULL,
     NULL
   },
+  {
+    EL_EXIT_CLOSING,
+    EL_EXIT_CLOSED,
+    29,
+    NULL,
+    NULL,
+    NULL
+  },
   {
     EL_SWITCHGATE_OPENING,
     EL_SWITCHGATE_OPEN,
@@ -648,10 +658,13 @@ static void InitField(int x, int y, boolean init_game)
       MovDir[x][y] = 1 << RND(4);
       break;
 
+#if 0
     case EL_SP_EMPTY:
       Feld[x][y] = EL_EMPTY;
       break;
+#endif
 
+#if 0
     case EL_EM_KEY_1_FILE:
       Feld[x][y] = EL_EM_KEY_1;
       break;
@@ -664,6 +677,7 @@ static void InitField(int x, int y, boolean init_game)
     case EL_EM_KEY_4_FILE:
       Feld[x][y] = EL_EM_KEY_4;
       break;
+#endif
 
     case EL_CONVEYOR_BELT_1_SWITCH_LEFT:
     case EL_CONVEYOR_BELT_1_SWITCH_MIDDLE:
@@ -792,7 +806,7 @@ static void InitGameEngine()
     ei->change_events = CE_BITMASK_DEFAULT;
     for (j=0; j < NUM_CHANGE_EVENTS; j++)
     {
-      ei->event_page_num[j] = 0;
+      ei->event_page_nr[j] = 0;
       ei->event_page[j] = &ei->change_page[0];
     }
   }
@@ -831,7 +845,7 @@ static void InitGameEngine()
            !(ei->change_events & CH_EVENT_BIT(k)))
        {
          ei->change_events |= CH_EVENT_BIT(k);
-         ei->event_page_num[k] = j;
+         ei->event_page_nr[k] = j;
          ei->event_page[k] = &ei->change_page[j];
        }
       }
@@ -1014,6 +1028,8 @@ void InitGame()
     player->is_digging = FALSE;
     player->is_collecting = FALSE;
 
+    player->show_envelope = 0;
+
     player->move_delay       = game.initial_move_delay;
     player->move_delay_value = game.initial_move_delay_value;
 
@@ -1069,6 +1085,8 @@ void InitGame()
   game.balloon_dir = MV_NO_MOVING;
   game.explosions_delayed = TRUE;
 
+  game.envelope_active = FALSE;
+
   for (i=0; i<4; i++)
   {
     game.belt_dir[i] = MV_NO_MOVING;
@@ -1090,7 +1108,10 @@ void InitGame()
       JustStopped[x][y] = 0;
       Stop[x][y] = FALSE;
       Pushed[x][y] = FALSE;
-      Changed[x][y] = FALSE;
+
+      Changed[x][y] = CE_BITMASK_DEFAULT;
+      ChangeEvent[x][y] = CE_BITMASK_DEFAULT;
+
       ExplodePhase[x][y] = 0;
       ExplodeField[x][y] = EX_NO_EXPLOSION;
 
@@ -1646,6 +1667,14 @@ void GameWon()
       StopSound(SND_GAME_LEVELTIME_BONUS);
   }
 
+  /* close exit door after last player */
+  if (Feld[ExitX][ExitY] == EL_EXIT_OPEN && AllPlayersGone)
+  {
+    Feld[ExitX][ExitY] = EL_EXIT_CLOSING;
+
+    PlaySoundLevelElementAction(ExitX, ExitY, EL_EXIT_OPEN, ACTION_CLOSING);
+  }
+
   /* Hero disappears */
   DrawLevelField(ExitX, ExitY);
   BackToFront();
@@ -2294,8 +2323,10 @@ void Explode(int ex, int ey, int phase, int mode)
 
   if (GfxElement[x][y] == EL_UNDEFINED)
   {
+    printf("\n\n");
     printf("Explode(): x = %d, y = %d: GfxElement == EL_UNDEFINED\n", x, y);
     printf("Explode(): This should never happen!\n");
+    printf("\n\n");
 
     GfxElement[x][y] = EL_EMPTY;
   }
@@ -2346,7 +2377,9 @@ void Explode(int ex, int ey, int phase, int mode)
       InitMovDir(x, y);
     DrawLevelField(x, y);
 
-    if (CAN_BE_CRUMBLED(element))
+    TestIfElementTouchesCustomElement(x, y);
+
+    if (GFX_CRUMBLED(element))
       DrawLevelFieldCrumbledSandNeighbours(x, y);
 
     if (IS_PLAYER(x, y) && !PLAYERINFO(x,y)->present)
@@ -3616,6 +3649,13 @@ void TurnRound(int x, int y)
       MovDir[x][y] = old_move_dir;
     }
   }
+  else if (element_info[element].move_pattern == MV_WHEN_PUSHED)
+  {
+    if (!IN_LEV_FIELD_AND_IS_FREE(move_x, move_y))
+      MovDir[x][y] = MV_NO_MOVING;
+
+    MovDelay[x][y] = 0;
+  }
 }
 
 static boolean JustBeingPushed(int x, int y)
@@ -3797,6 +3837,15 @@ void StartMoving(int x, int y)
 #endif
     }
 #if 1
+
+#if 0
+    /* TEST: bug where player gets not killed by falling rock ... */
+    else if (CAN_SMASH(element) &&
+            (Feld[x][y + 1] == EL_BLOCKED ||
+             IS_PLAYER(x, y + 1)) &&
+            JustStopped[x][y] && !Pushed[x][y + 1])
+
+#else
 #if 1
     else if (game.engine_version < RELEASE_IDENT(2,2,0,7) &&
             CAN_SMASH(element) && Feld[x][y + 1] == EL_BLOCKED &&
@@ -3805,6 +3854,8 @@ void StartMoving(int x, int y)
     else if (CAN_SMASH(element) && Feld[x][y + 1] == EL_BLOCKED &&
             JustStopped[x][y])
 #endif
+#endif
+
     {
       /* calling "Impact()" here is not only completely unneccessary
         (because it already gets called from "ContinueMoving()" in
@@ -3915,11 +3966,16 @@ void StartMoving(int x, int y)
   {
     int newx, newy;
 
+#if 1
+    if (IS_PUSHABLE(element) && JustBeingPushed(x, y))
+      return;
+#else
     if ((element == EL_SATELLITE ||
         element == EL_BALLOON ||
         element == EL_SPRING)
        && JustBeingPushed(x, y))
       return;
+#endif
 
 #if 0
 #if 0
@@ -4391,6 +4447,12 @@ void ContinueMoving(int x, int y)
 
     /* copy element change control values to new field */
     ChangeDelay[newx][newy] = ChangeDelay[x][y];
+    Changed[newx][newy] = Changed[x][y];
+    ChangeEvent[newx][newy] = ChangeEvent[x][y];
+
+    ChangeDelay[x][y] = 0;
+    Changed[x][y] = CE_BITMASK_DEFAULT;
+    ChangeEvent[x][y] = CE_BITMASK_DEFAULT;
 
     /* copy animation control values to new field */
     GfxFrame[newx][newy]  = GfxFrame[x][y];
@@ -4446,7 +4508,11 @@ void ContinueMoving(int x, int y)
       Impact(x, newy);
 
     if (!IN_LEV_FIELD(nextx, nexty) || !IS_FREE(nextx, nexty))
-      CheckElementChange(newx, newy, element, CE_COLLISION);
+      CheckElementSideChange(newx, newy, element, direction, CE_COLLISION, -1);
+
+#if 1
+    TestIfElementTouchesCustomElement(x, y);           /* for empty space */
+#endif
 
     TestIfPlayerTouchesCustomElement(newx, newy);
     TestIfElementTouchesCustomElement(newx, newy);
@@ -4989,6 +5055,9 @@ void CheckExit(int x, int y)
     return;
   }
 
+  if (AllPlayersGone)  /* do not re-open exit door closed after last player */
+    return;
+
   Feld[x][y] = EL_EXIT_OPENING;
 
   PlaySoundLevelNearest(x, y, SND_CLASS_EXIT_OPENING);
@@ -5358,7 +5427,7 @@ static void ChangeElementNowExt(int x, int y, int target_element)
   RemoveField(x, y);
   Feld[x][y] = target_element;
 
-  Changed[x][y] = TRUE;                /* no more changes in this frame */
+  Changed[x][y] |= ChangeEvent[x][y];  /* ignore same changes in this frame */
 
   ResetGfxAnimation(x, y);
   ResetRandomAnimationValue(x, y);
@@ -5369,7 +5438,7 @@ static void ChangeElementNowExt(int x, int y, int target_element)
 
   DrawLevelField(x, y);
 
-  if (CAN_BE_CRUMBLED(Feld[x][y]))
+  if (GFX_CRUMBLED(Feld[x][y]))
     DrawLevelFieldCrumbledSandNeighbours(x, y);
 
   TestIfBadThingTouchesHero(x, y);
@@ -5384,10 +5453,20 @@ static boolean ChangeElementNow(int x, int y, int element, int page)
 {
   struct ElementChangeInfo *change = &element_info[element].change_page[page];
 
-  if (Changed[x][y])           /* do not change already changed elements */
+  /* always use default change event to prevent running into a loop */
+  if (ChangeEvent[x][y] == CE_BITMASK_DEFAULT)
+    ChangeEvent[x][y] = CH_EVENT_BIT(CE_DELAY);
+
+  /* do not change already changed elements with same change event */
+#if 0
+  if (Changed[x][y] & ChangeEvent[x][y])
+    return FALSE;
+#else
+  if (Changed[x][y])
     return FALSE;
+#endif
 
-  Changed[x][y] = TRUE;                /* no more changes in this frame */
+  Changed[x][y] |= ChangeEvent[x][y];  /* ignore same changes in this frame */
 
   CheckTriggeredElementChange(x, y, Feld[x][y], CE_OTHER_IS_CHANGING);
 
@@ -5495,6 +5574,19 @@ static void ChangeElement(int x, int y, int page)
   int element = MovingOrBlocked2Element(x, y);
   struct ElementChangeInfo *change = &element_info[element].change_page[page];
 
+#if 0
+#ifdef DEBUG
+  if (!CAN_CHANGE(element))
+  {
+    printf("\n\n");
+    printf("ChangeElement(): %d,%d: element = %d ('%s')\n",
+          x, y, element, element_info[element].token_name);
+    printf("ChangeElement(): This should never happen!\n");
+    printf("\n\n");
+  }
+#endif
+#endif
+
   if (ChangeDelay[x][y] == 0)          /* initialize element change */
   {
     ChangeDelay[x][y] = (    change->delay_fixed  * change->delay_frames +
@@ -5536,36 +5628,32 @@ static void ChangeElement(int x, int y, int page)
   }
 }
 
-static boolean CheckTriggeredElementChange(int lx, int ly, int trigger_element,
-                                          int trigger_event)
+static boolean CheckTriggeredElementSideChange(int lx, int ly,
+                                              int trigger_element,
+                                              int trigger_side,
+                                              int trigger_event)
 {
   int i, j, x, y;
 
   if (!(trigger_events[trigger_element] & CH_EVENT_BIT(trigger_event)))
     return FALSE;
 
-#if 0
-  /* prevent this function from running into a loop */
-  if (trigger_event == CE_OTHER_IS_CHANGING)
-    Changed[lx][ly] = TRUE;
-#endif
-
   for (i=0; i < NUM_CUSTOM_ELEMENTS; i++)
   {
     int element = EL_CUSTOM_START + i;
 
-#if 1
     boolean change_element = FALSE;
-    int page;
+    int page = 0;
 
-    if (!CAN_CHANGE(element) ||
-       !HAS_ANY_CHANGE_EVENT(element, trigger_event))
+    if (!CAN_CHANGE(element) || !HAS_ANY_CHANGE_EVENT(element, trigger_event))
       continue;
 
     for (j=0; j < element_info[element].num_change_pages; j++)
     {
-      if (element_info[element].change_page[j].trigger_element ==
-         trigger_element)
+      struct ElementChangeInfo *change = &element_info[element].change_page[j];
+
+      if (change->sides & trigger_side &&
+         change->trigger_element == trigger_element)
       {
        change_element = TRUE;
        page = j;
@@ -5577,54 +5665,52 @@ static boolean CheckTriggeredElementChange(int lx, int ly, int trigger_element,
     if (!change_element)
       continue;
 
-#else
-    if (!CAN_CHANGE(element) ||
-       !HAS_ANY_CHANGE_EVENT(element, trigger_event) ||
-       element_info[element].change->trigger_element != trigger_element)
-      continue;
-#endif
-
     for (y=0; y<lev_fieldy; y++) for (x=0; x<lev_fieldx; x++)
     {
-      if (x == lx && y == ly)  /* do not change trigger element itself */
-       continue;
-
 #if 0
-      if (Changed[x][y])       /* do not change already changed elements */
+      if (x == lx && y == ly)  /* do not change trigger element itself */
        continue;
 #endif
 
       if (Feld[x][y] == element)
       {
        ChangeDelay[x][y] = 1;
+       ChangeEvent[x][y] = CH_EVENT_BIT(trigger_event);
        ChangeElement(x, y, page);
-
-#if 0
-       Changed[x][y] = TRUE;   /* prevent element from being changed again */
-#endif
       }
     }
   }
 
-#if 0
-  /* reset change prevention array */
-  for (y=0; y<lev_fieldy; y++) for (x=0; x<lev_fieldx; x++)
-    Changed[x][y] = FALSE;
-#endif
-
   return TRUE;
 }
 
-static boolean CheckElementChangeExt(int x, int y, int element,
-                                    int trigger_event, int page)
+static boolean CheckTriggeredElementChange(int lx, int ly, int trigger_element,
+                                          int trigger_event)
+{
+  return CheckTriggeredElementSideChange(lx, ly, trigger_element, CH_SIDE_ANY,
+                                        trigger_event);
+}
+
+static boolean CheckElementSideChange(int x, int y, int element, int side,
+                                     int trigger_event, int page)
 {
   if (!CAN_CHANGE(element) || !HAS_ANY_CHANGE_EVENT(element, trigger_event))
     return FALSE;
 
   if (Feld[x][y] == EL_BLOCKED)
+  {
     Blocked2Moving(x, y, &x, &y);
+    element = Feld[x][y];
+  }
+
+  if (page < 0)
+    page = element_info[element].event_page_nr[trigger_event];
+
+  if (!(element_info[element].change_page[page].sides & side))
+    return FALSE;
 
   ChangeDelay[x][y] = 1;
+  ChangeEvent[x][y] = CH_EVENT_BIT(trigger_event);
   ChangeElement(x, y, page);
 
   return TRUE;
@@ -5632,9 +5718,7 @@ static boolean CheckElementChangeExt(int x, int y, int element,
 
 static boolean CheckElementChange(int x, int y, int element, int trigger_event)
 {
-  int page = element_info[element].event_page_num[trigger_event];
-
-  return CheckElementChangeExt(x, y, element, trigger_event, page);
+  return CheckElementSideChange(x, y, element, CH_SIDE_ANY, trigger_event, -1);
 }
 
 static void PlayerActions(struct PlayerInfo *player, byte player_action)
@@ -5824,7 +5908,8 @@ void GameActions()
 
   for (y=0; y<lev_fieldy; y++) for (x=0; x<lev_fieldx; x++)
   {
-    Changed[x][y] = FALSE;
+    Changed[x][y] = CE_BITMASK_DEFAULT;
+    ChangeEvent[x][y] = CE_BITMASK_DEFAULT;
 
     Stop[x][y] = FALSE;
     if (JustStopped[x][y] > 0)
@@ -5902,7 +5987,7 @@ void GameActions()
     /* this may take place after moving, so 'element' may have changed */
     if (IS_CHANGING(x, y))
     {
-      ChangeElement(x, y, element_info[element].event_page_num[CE_DELAY]);
+      ChangeElement(x, y, element_info[element].event_page_nr[CE_DELAY]);
       element = Feld[x][y];
       graphic = el_act_dir2img(element, GfxAction[x][y], MovDir[x][y]);
     }
@@ -6238,6 +6323,15 @@ void GameActions()
       stored_player[i].StepFrame += move_frames;
   }
 #endif
+
+#if 1
+  if (local_player->show_envelope != 0 && local_player->MovPos == 0)
+  {
+    ShowEnvelope(local_player->show_envelope - EL_ENVELOPE_1);
+
+    local_player->show_envelope = 0;
+  }
+#endif
 }
 
 static boolean AllPlayersInSight(struct PlayerInfo *player, int x, int y)
@@ -6348,8 +6442,22 @@ static void CheckGravityMovement(struct PlayerInfo *player)
 boolean MoveFigureOneStep(struct PlayerInfo *player,
                          int dx, int dy, int real_dx, int real_dy)
 {
+  static int change_sides[4][2] =
+  {
+    /* enter side        leave side */
+    { CH_SIDE_RIGHT,   CH_SIDE_LEFT    },      /* moving left  */
+    { CH_SIDE_LEFT,    CH_SIDE_RIGHT   },      /* moving right */
+    { CH_SIDE_BOTTOM,  CH_SIDE_TOP     },      /* moving up    */
+    { CH_SIDE_TOP,     CH_SIDE_BOTTOM  }       /* moving down  */
+  };
+  int move_direction = (dx == -1 ? MV_LEFT :
+                       dx == +1 ? MV_RIGHT :
+                       dy == -1 ? MV_UP :
+                       dy == +1 ? MV_DOWN : MV_NO_MOVING);
+  int enter_side = change_sides[MV_DIR_BIT(move_direction)][0];
+  int leave_side = change_sides[MV_DIR_BIT(move_direction)][1];
   int jx = player->jx, jy = player->jy;
-  int new_jx = jx+dx, new_jy = jy+dy;
+  int new_jx = jx + dx, new_jy = jy + dy;
   int element;
   int can_move;
 
@@ -6401,15 +6509,33 @@ boolean MoveFigureOneStep(struct PlayerInfo *player,
   StorePlayer[jx][jy] = 0;
   player->last_jx = jx;
   player->last_jy = jy;
-  jx = player->jx = new_jx;
-  jy = player->jy = new_jy;
-  StorePlayer[jx][jy] = player->element_nr;
+  player->jx = new_jx;
+  player->jy = new_jy;
+  StorePlayer[new_jx][new_jy] = player->element_nr;
 
   player->MovPos =
     (dx > 0 || dy > 0 ? -1 : 1) * (TILEX - TILEX / player->move_delay_value);
 
   ScrollFigure(player, SCROLL_INIT);
 
+#if 1
+  if (IS_CUSTOM_ELEMENT(Feld[jx][jy]))
+  {
+    CheckTriggeredElementSideChange(jx, jy, Feld[jx][jy], leave_side,
+                                   CE_OTHER_GETS_LEFT);
+    CheckElementSideChange(jx, jy, Feld[jx][jy], leave_side,
+                          CE_LEFT_BY_PLAYER, -1);
+  }
+
+  if (IS_CUSTOM_ELEMENT(Feld[new_jx][new_jy]))
+  {
+    CheckTriggeredElementSideChange(new_jx, new_jy, Feld[new_jx][new_jy],
+                                   enter_side, CE_OTHER_GETS_ENTERED);
+    CheckElementSideChange(new_jx, new_jy, Feld[new_jx][new_jy], enter_side,
+                          CE_ENTERED_BY_PLAYER, -1);
+  }
+#endif
+
   return MF_MOVING;
 }
 
@@ -6629,7 +6755,7 @@ void ScrollFigure(struct PlayerInfo *player, int mode)
   DrawPlayer(player);  /* needed here only to cleanup last field */
 #endif
 
-  if (player->MovPos == 0)
+  if (player->MovPos == 0)     /* player reached destination field */
   {
     if (IS_PASSABLE(Feld[last_jx][last_jy]))
     {
@@ -6700,6 +6826,14 @@ void TestIfPlayerTouchesCustomElement(int x, int y)
     { +1, 0 },
     { 0, +1 }
   };
+  static int change_sides[4][2] =
+  {
+    /* center side       border side */
+    { CH_SIDE_TOP,     CH_SIDE_BOTTOM  },      /* check top    */
+    { CH_SIDE_LEFT,    CH_SIDE_RIGHT   },      /* check left   */
+    { CH_SIDE_RIGHT,   CH_SIDE_LEFT    },      /* check right  */
+    { CH_SIDE_BOTTOM,  CH_SIDE_TOP     }       /* check bottom */
+  };
   int i;
 
 #if 0
@@ -6713,10 +6847,30 @@ void TestIfPlayerTouchesCustomElement(int x, int y)
   {
     int xx = x + xy[i][0];
     int yy = y + xy[i][1];
+    int center_side = change_sides[i][0];
+    int border_side = change_sides[i][1];
 
     if (!IN_LEV_FIELD(xx, yy))
       continue;
 
+#if 1
+    if (IS_PLAYER(x, y))
+    {
+      CheckTriggeredElementSideChange(xx, yy, Feld[xx][yy], border_side,
+                                     CE_OTHER_GETS_TOUCHED);
+      CheckElementSideChange(xx, yy, Feld[xx][yy], border_side,
+                            CE_TOUCHED_BY_PLAYER, -1);
+    }
+    else if (IS_PLAYER(xx, yy))
+    {
+      CheckTriggeredElementSideChange(x, y, Feld[x][y], center_side,
+                                     CE_OTHER_GETS_TOUCHED);
+      CheckElementSideChange(x, y, Feld[x][y], center_side,
+                            CE_TOUCHED_BY_PLAYER, -1);
+
+      break;
+    }
+#else
     if (IS_PLAYER(x, y))
     {
       CheckTriggeredElementChange(xx, yy, Feld[xx][yy], CE_OTHER_GETS_TOUCHED);
@@ -6729,6 +6883,7 @@ void TestIfPlayerTouchesCustomElement(int x, int y)
 
       break;
     }
+#endif
   }
 
 #if 0
@@ -6748,6 +6903,14 @@ void TestIfElementTouchesCustomElement(int x, int y)
     { +1, 0 },
     { 0, +1 }
   };
+  static int change_sides[4][2] =
+  {
+    /* center side       border side */
+    { CH_SIDE_TOP,     CH_SIDE_BOTTOM  },      /* check top    */
+    { CH_SIDE_LEFT,    CH_SIDE_RIGHT   },      /* check left   */
+    { CH_SIDE_RIGHT,   CH_SIDE_LEFT    },      /* check right  */
+    { CH_SIDE_BOTTOM,  CH_SIDE_TOP     }       /* check bottom */
+  };
   boolean change_center_element = FALSE;
   int center_element_change_page = 0;
   int center_element = Feld[x][y];
@@ -6764,6 +6927,8 @@ void TestIfElementTouchesCustomElement(int x, int y)
   {
     int xx = x + xy[i][0];
     int yy = y + xy[i][1];
+    int center_side = change_sides[i][0];
+    int border_side = change_sides[i][1];
     int border_element;
 
     if (!IN_LEV_FIELD(xx, yy))
@@ -6782,6 +6947,7 @@ void TestIfElementTouchesCustomElement(int x, int y)
          &element_info[center_element].change_page[j];
 
        if (change->events & CH_EVENT_BIT(CE_OTHER_IS_TOUCHING) &&
+           change->sides & border_side &&
            change->trigger_element == border_element)
        {
          change_center_element = TRUE;
@@ -6802,9 +6968,11 @@ void TestIfElementTouchesCustomElement(int x, int y)
          &element_info[border_element].change_page[j];
 
        if (change->events & CH_EVENT_BIT(CE_OTHER_IS_TOUCHING) &&
+           change->sides & center_side &&
            change->trigger_element == center_element)
        {
-         CheckElementChangeExt(xx,yy, border_element,CE_OTHER_IS_TOUCHING, j);
+         CheckElementSideChange(xx, yy, border_element, CH_SIDE_ANY,
+                                CE_OTHER_IS_TOUCHING, j);
          break;
        }
       }
@@ -6812,8 +6980,8 @@ void TestIfElementTouchesCustomElement(int x, int y)
   }
 
   if (change_center_element)
-    CheckElementChangeExt(x, y, center_element, CE_OTHER_IS_TOUCHING,
-                         center_element_change_page);
+    CheckElementSideChange(x, y, center_element, CH_SIDE_ANY,
+                          CE_OTHER_IS_TOUCHING, center_element_change_page);
 
 #if 0
   check_changing = FALSE;
@@ -7149,6 +7317,13 @@ static boolean checkDiagonalPushing(struct PlayerInfo *player,
 int DigField(struct PlayerInfo *player,
             int x, int y, int real_dx, int real_dy, int mode)
 {
+  static int change_sides[4] =
+  {
+    CH_SIDE_RIGHT,     /* moving left  */
+    CH_SIDE_LEFT,      /* moving right */
+    CH_SIDE_BOTTOM,    /* moving up    */
+    CH_SIDE_TOP,       /* moving down  */
+  };
   boolean use_spring_bug = (game.engine_version < VERSION_IDENT(2,2,0));
   int jx = player->jx, jy = player->jy;
   int dx = x - jx, dy = y - jy;
@@ -7157,6 +7332,7 @@ int DigField(struct PlayerInfo *player,
                        dx == +1 ? MV_RIGHT :
                        dy == -1 ? MV_UP :
                        dy == +1 ? MV_DOWN : MV_NO_MOVING);
+  int dig_side = change_sides[MV_DIR_BIT(move_direction)];
   int element;
 
   if (player->MovPos == 0)
@@ -7498,7 +7674,7 @@ int DigField(struct PlayerInfo *player,
          GfxElement[x][y] = GFX_ELEMENT(element);
 #else
          GfxElement[x][y] =
-           (CAN_BE_CRUMBLED(element) ? EL_SAND : GFX_ELEMENT(element));
+           (GFX_CRUMBLED(element) ? EL_SAND : GFX_ELEMENT(element));
 #endif
          player->is_digging = TRUE;
        }
@@ -7507,7 +7683,7 @@ int DigField(struct PlayerInfo *player,
 
        CheckTriggeredElementChange(x, y, element, CE_OTHER_GETS_DIGGED);
 
-       TestIfElementTouchesCustomElement(x, y);
+       TestIfElementTouchesCustomElement(x, y);        /* for empty space */
 
        break;
       }
@@ -7569,9 +7745,13 @@ int DigField(struct PlayerInfo *player,
                             el2edimg(EL_KEY_1 + key_nr));
          redraw_mask |= REDRAW_DOOR_1;
        }
-       else if (element == EL_ENVELOPE)
+       else if (IS_ENVELOPE(element))
        {
-         ShowEnvelope();
+#if 1
+         player->show_envelope = element;
+#else
+         ShowEnvelope(element - EL_ENVELOPE_1);
+#endif
        }
        else if (IS_DROPPABLE(element)) /* can be collected and dropped */
        {
@@ -7600,7 +7780,7 @@ int DigField(struct PlayerInfo *player,
 
        CheckTriggeredElementChange(x, y, element, CE_OTHER_GETS_COLLECTED);
 
-       TestIfElementTouchesCustomElement(x, y);
+       TestIfElementTouchesCustomElement(x, y);        /* for empty space */
 
        break;
       }
@@ -7616,9 +7796,22 @@ int DigField(struct PlayerInfo *player,
            !(element == EL_SPRING && use_spring_bug))
          return MF_NO_ACTION;
 
+#if 1
+       /*
+       printf("::: %d [%d,%d,%d => %d]\n", MovDir[x][y],
+              CAN_MOVE(element), move_direction, getElementMoveStepsize(x, y),
+              (CAN_MOVE(element) && MovDir[x][y] == move_direction &&
+               getElementMoveStepsize(x, y) > MOVE_STEPSIZE_NORMAL) );
+       */
+
+       /* do not push elements already moving away faster than player */
+       if (CAN_MOVE(element) && MovDir[x][y] == move_direction &&
+           ABS(getElementMoveStepsize(x, y)) > MOVE_STEPSIZE_NORMAL)
+         return MF_NO_ACTION;
+#else
        if (element == EL_SPRING && MovDir[x][y] != MV_NO_MOVING)
          return MF_NO_ACTION;
-
+#endif
        if (!player->Pushing &&
            game.engine_version >= RELEASE_IDENT(2,2,0,7))
          player->push_delay_value = GET_NEW_PUSH_DELAY(element);
@@ -7691,15 +7884,29 @@ int DigField(struct PlayerInfo *player,
        if (game.engine_version < RELEASE_IDENT(2,2,0,7))
          player->push_delay_value = GET_NEW_PUSH_DELAY(element);
 
+#if 1
+       CheckTriggeredElementSideChange(x, y, element, dig_side,
+                                       CE_OTHER_GETS_PUSHED);
+       CheckElementSideChange(x, y, element, dig_side,
+                              CE_PUSHED_BY_PLAYER, -1);
+#else
        CheckTriggeredElementChange(x, y, element, CE_OTHER_GETS_PUSHED);
        CheckElementChange(x, y, element, CE_PUSHED_BY_PLAYER);
+#endif
 
        break;
       }
       else
       {
+#if 1
+       CheckTriggeredElementSideChange(x, y, element, dig_side,
+                                   CE_OTHER_GETS_PRESSED);
+       CheckElementSideChange(x, y, element, dig_side,
+                              CE_PRESSED_BY_PLAYER, -1);
+#else
        CheckTriggeredElementChange(x, y, element, CE_OTHER_GETS_PRESSED);
        CheckElementChange(x, y, element, CE_PRESSED_BY_PLAYER);
+#endif
       }
 
       return MF_NO_ACTION;
index 93aceacd47e332b504895acb2042bc0fb8a3ac70..8ec25b1df7d3436fa1c9d795f10d50a8d03a9a36 100644 (file)
@@ -842,8 +842,6 @@ static void set_graphic_parameters(int graphic, char **parameter_raw)
     graphic_info[graphic].anim_delay = 1;
 
   graphic_info[graphic].anim_mode = parameter[GFX_ARG_ANIM_MODE];
-  if (graphic_info[graphic].anim_frames == 1)
-    graphic_info[graphic].anim_mode = ANIM_NONE;
 
   /* automatically determine correct start frame, if not defined */
   if (parameter[GFX_ARG_START_FRAME] == ARG_UNDEFINED_VALUE)
@@ -1363,7 +1361,10 @@ void InitElementPropertiesStatic()
     EL_SHIELD_NORMAL,
     EL_SHIELD_DEADLY,
     EL_EXTRA_TIME,
-    EL_ENVELOPE,
+    EL_ENVELOPE_1,
+    EL_ENVELOPE_2,
+    EL_ENVELOPE_3,
+    EL_ENVELOPE_4,
     EL_SPEED_PILL,
     -1
   };
@@ -1390,9 +1391,9 @@ void InitElementPropertiesStatic()
 
     /* !!! maybe this should better be handled by 'ep_diggable' !!! */
 #if 1
-    EL_SP_BUGGY_BASE_ACTIVE,
-    EL_TRAP_ACTIVE,
     EL_LANDMINE,
+    EL_TRAP_ACTIVE,
+    EL_SP_BUGGY_BASE_ACTIVE,
 #endif
     -1
   };
@@ -1791,6 +1792,16 @@ void InitElementPropertiesStatic()
     -1
   };
 
+  static int ep_droppable[] =
+  {
+    -1
+  };
+
+  static int ep_can_explode_1x1[] =
+  {
+    -1
+  };
+
   static int ep_pushable[] =
   {
     EL_ROCK,
@@ -1810,15 +1821,6 @@ void InitElementPropertiesStatic()
     -1
   };
 
-  static int ep_can_be_crumbled[] =
-  {
-    EL_SAND,
-    EL_LANDMINE,
-    EL_TRAP,
-    EL_TRAP_ACTIVE,
-    -1
-  };
-
   static int ep_player[] =
   {
     EL_PLAYER_1,
@@ -1904,6 +1906,9 @@ void InitElementPropertiesStatic()
 
   static int ep_sp_element[] =
   {
+    /* should always be valid */
+    EL_EMPTY,
+
     EL_SP_EMPTY,
     EL_SP_ZONK,
     EL_SP_BASE,
@@ -2540,6 +2545,20 @@ void InitElementPropertiesStatic()
     -1
   };
 
+  static int ep_em_slippery_wall[] =
+  {
+    -1
+  };
+
+  static int ep_gfx_crumbled[] =
+  {
+    EL_SAND,
+    EL_LANDMINE,
+    EL_TRAP,
+    EL_TRAP_ACTIVE,
+    -1
+  };
+
   static struct
   {
     int *elements;
@@ -2568,10 +2587,10 @@ void InitElementPropertiesStatic()
     { ep_passable_over,                EP_PASSABLE_OVER        },
     { ep_passable_inside,      EP_PASSABLE_INSIDE      },
     { ep_passable_under,       EP_PASSABLE_UNDER       },
+    { ep_droppable,            EP_DROPPABLE            },
+    { ep_can_explode_1x1,      EP_CAN_EXPLODE_1X1      },
     { ep_pushable,             EP_PUSHABLE             },
 
-    { ep_can_be_crumbled,      EP_CAN_BE_CRUMBLED      },
-
     { ep_player,               EP_PLAYER               },
     { ep_can_pass_magic_wall,  EP_CAN_PASS_MAGIC_WALL  },
     { ep_switchable,           EP_SWITCHABLE           },
@@ -2596,6 +2615,10 @@ void InitElementPropertiesStatic()
     { ep_active_bomb,          EP_ACTIVE_BOMB          },
     { ep_inactive,             EP_INACTIVE             },
 
+    { ep_em_slippery_wall,     EP_EM_SLIPPERY_WALL     },
+
+    { ep_gfx_crumbled,         EP_GFX_CRUMBLED         },
+
     { NULL,                    -1                      }
   };
 
@@ -2684,7 +2707,6 @@ void InitElementPropertiesEngine(int engine_version)
     EP_BELT_SWITCH,
     EP_WALKABLE_UNDER,
     EP_EM_SLIPPERY_WALL,
-    EP_CAN_BE_CRUMBLED,
   };
 #endif
 
@@ -2701,8 +2723,6 @@ void InitElementPropertiesEngine(int engine_version)
     EP_CAN_SMASH_EVERYTHING,
     EP_PUSHABLE,
 
-    EP_CAN_BE_CRUMBLED,
-
     EP_PLAYER,
     EP_GEM,
     EP_FOOD_DARK_YAMYAM,
@@ -2833,22 +2853,15 @@ void InitElementPropertiesEngine(int engine_version)
     SET_PROPERTY(i, EP_CAN_EXPLODE_3X3, (CAN_EXPLODE(i) &&
                                         !CAN_EXPLODE_1X1(i)));
 
-    /* ---------- CAN_BE_CRUMBLED ------------------------------------------ */
-    SET_PROPERTY(i, EP_CAN_BE_CRUMBLED,
-                element_info[i].crumbled[ACTION_DEFAULT] != IMG_EMPTY);
-
-#if 0
-    if (CAN_BE_CRUMBLED(i))
-      printf("::: '%s' can be crumbled [%d]\n",
-            element_info[i].token_name,
-            element_info[i].crumbled[ACTION_DEFAULT]);
-#endif
-
     /* ---------- CAN_CHANGE ----------------------------------------------- */
     SET_PROPERTY(i, EP_CAN_CHANGE, FALSE);     /* default: cannot change */
     for (j=0; j < element_info[i].num_change_pages; j++)
       if (element_info[i].change_page[j].can_change)
        SET_PROPERTY(i, EP_CAN_CHANGE, TRUE);
+
+    /* ---------- GFX_CRUMBLED --------------------------------------------- */
+    SET_PROPERTY(i, EP_GFX_CRUMBLED,
+                element_info[i].crumbled[ACTION_DEFAULT] != IMG_EMPTY);
   }
 
 #if 0
index dd9d28838273d6a98b8960b71d58705d950b9349..3f56f44efc2c01526c5758b7908cb1938841f716 100644 (file)
@@ -358,7 +358,7 @@ static void DrawGadget(struct GadgetInfo *gi, boolean pressed, boolean direct)
 
        /* gadget text value */
        DrawTextToTextArea(gi->x + border_x, gi->y + border_y,
-                          gi->textarea.value, font_nr,
+                          gi->textarea.value, font_nr, gi->textarea.xsize,
                           gi->textarea.xsize, gi->textarea.ysize,
                           BLIT_ON_BACKGROUND);
 
index 0d5a658e848b0bfef7f41385c9392a8a77ae4e3e..50a713f456be8c011b279044121e088516d57042 100644 (file)
@@ -1376,32 +1376,41 @@ int get_integer_from_string(char *s)
 {
   static char *number_text[][3] =
   {
-    { "0", "zero", "null", },
-    { "1", "one", "first" },
-    { "2", "two", "second" },
-    { "3", "three", "third" },
-    { "4", "four", "fourth" },
-    { "5", "five", "fifth" },
-    { "6", "six", "sixth" },
-    { "7", "seven", "seventh" },
-    { "8", "eight", "eighth" },
-    { "9", "nine", "ninth" },
-    { "10", "ten", "tenth" },
-    { "11", "eleven", "eleventh" },
-    { "12", "twelve", "twelfth" },
+    { "0",     "zero",         "null",         },
+    { "1",     "one",          "first"         },
+    { "2",     "two",          "second"        },
+    { "3",     "three",        "third"         },
+    { "4",     "four",         "fourth"        },
+    { "5",     "five",         "fifth"         },
+    { "6",     "six",          "sixth"         },
+    { "7",     "seven",        "seventh"       },
+    { "8",     "eight",        "eighth"        },
+    { "9",     "nine",         "ninth"         },
+    { "10",    "ten",          "tenth"         },
+    { "11",    "eleven",       "eleventh"      },
+    { "12",    "twelve",       "twelfth"       },
+
+    { NULL,    NULL,           NULL            },
   };
 
   int i, j;
   char *s_lower = getStringToLower(s);
   int result = -1;
 
-  for (i=0; i<13; i++)
-    for (j=0; j<3; j++)
+  for (i=0; number_text[i][0] != NULL; i++)
+    for (j=0; j < 3; j++)
       if (strcmp(s_lower, number_text[i][j]) == 0)
        result = i;
 
   if (result == -1)
-    result = atoi(s);
+  {
+    if (strcmp(s_lower, "false") == 0)
+      result = 0;
+    else if (strcmp(s_lower, "true") == 0)
+      result = 1;
+    else
+      result = atoi(s);
+  }
 
   free(s_lower);
 
@@ -1646,27 +1655,29 @@ static boolean string_has_parameter(char *s, char *s_contained)
   return string_has_parameter(substring, s_contained);
 }
 
-int get_parameter_value(char *token, char *value_raw, int type)
+int get_parameter_value(char *suffix, char *value_raw, int type)
 {
   char *value = getStringToLower(value_raw);
   int result = 0;      /* probably a save default value */
 
-  if (strcmp(token, ".direction") == 0)
+  if (strcmp(suffix, ".direction") == 0)
   {
     result = (strcmp(value, "left")  == 0 ? MV_LEFT :
              strcmp(value, "right") == 0 ? MV_RIGHT :
              strcmp(value, "up")    == 0 ? MV_UP :
              strcmp(value, "down")  == 0 ? MV_DOWN : MV_NO_MOVING);
   }
-  else if (strcmp(token, ".anim_mode") == 0)
-  {
-    result = (string_has_parameter(value, "loop")      ? ANIM_LOOP :
-             string_has_parameter(value, "linear")    ? ANIM_LINEAR :
-             string_has_parameter(value, "pingpong")  ? ANIM_PINGPONG :
-             string_has_parameter(value, "pingpong2") ? ANIM_PINGPONG2 :
-             string_has_parameter(value, "random")    ? ANIM_RANDOM :
-             string_has_parameter(value, "none")      ? ANIM_NONE :
-             ANIM_LOOP);
+  else if (strcmp(suffix, ".anim_mode") == 0)
+  {
+    result = (string_has_parameter(value, "none")       ? ANIM_NONE :
+             string_has_parameter(value, "loop")       ? ANIM_LOOP :
+             string_has_parameter(value, "linear")     ? ANIM_LINEAR :
+             string_has_parameter(value, "pingpong")   ? ANIM_PINGPONG :
+             string_has_parameter(value, "pingpong2")  ? ANIM_PINGPONG2 :
+             string_has_parameter(value, "random")     ? ANIM_RANDOM :
+             string_has_parameter(value, "horizontal") ? ANIM_HORIZONTAL :
+             string_has_parameter(value, "vertical")   ? ANIM_VERTICAL :
+             ANIM_DEFAULT);
 
     if (string_has_parameter(value, "reverse"))
       result |= ANIM_REVERSE;
@@ -1684,6 +1695,20 @@ int get_parameter_value(char *token, char *value_raw, int type)
   return result;
 }
 
+int get_auto_parameter_value(char *token, char *value_raw)
+{
+  char *suffix;
+
+  if (token == NULL || value_raw == NULL)
+    return ARG_UNDEFINED_VALUE;
+
+  suffix = strrchr(token, '.');
+  if (suffix == NULL)
+    suffix = token;
+
+  return get_parameter_value(suffix, value_raw, TYPE_INTEGER);
+}
+
 static void FreeCustomArtworkList(struct ArtworkListInfo *,
                                  struct ListNodeInfo ***, int *);
 
index 7fd0a1a5b83e25c9df3860f1fbf6d7b72beed304..71c0d7fe171ffcfb47a7e85a91089676191703e3 100644 (file)
@@ -160,6 +160,7 @@ boolean FileIsMusic(char *);
 boolean FileIsArtworkType(char *, int);
 
 int get_parameter_value(char *, char *, int);
+int get_auto_parameter_value(char *, char *);
 
 struct FileInfo *getFileListFromConfigList(struct ConfigInfo *,
                                           struct ConfigInfo *, char **, int);
index 4d8abb26e8594b0b83c6a89171d5227d1d40c900..e8ae45f215a6191d1dd508037279d21c2e303ba0 100644 (file)
@@ -2401,6 +2401,7 @@ void LoadLevelArtworkInfo()
   LoadArtworkInfoFromLevelInfo(&artwork.mus_first, leveldir_first);
 
   /* needed for reloading level artwork not known at ealier stage */
+
   if (strcmp(artwork.gfx_current_identifier, setup.graphics_set) != 0)
   {
     artwork.gfx_current =
index 73ec0f79aae512a66301a2563628baf24bfb7352..007e02d3542f7583735f555a5889b0f71a839e30 100644 (file)
 #define ANIM_RANDOM            (1 << 4)
 #define ANIM_REVERSE           (1 << 5)
 
+/* values for special (non game element) animation modes */
+#define ANIM_HORIZONTAL                (1 << 6)
+#define ANIM_VERTICAL          (1 << 7)
+
+#define ANIM_DEFAULT           ANIM_LOOP
 
 /* values for redraw_mask */
 #define REDRAW_NONE            (0)
index c5406657e54873bee17b59129a6557f5b3a6f80d..f41635ae3f4863b659f9283a7238bcb761cda5d3 100644 (file)
@@ -326,7 +326,7 @@ void DrawTextExt(DrawBuffer *dst_bitmap, int dst_x, int dst_y, char *text,
   }
 }
 
-void DrawTextToTextArea(int x, int y, char *text, int font_nr,
+void DrawTextToTextArea(int x, int y, char *text, int font_nr, int line_length,
                        int area_xsize, int area_ysize, int mask_mode)
 {
   int area_line = 0;
@@ -340,10 +340,10 @@ void DrawTextToTextArea(int x, int y, char *text, int font_nr,
     char buffer[MAX_OUTPUT_LINESIZE + 1];
     int i;
 
-    for (i=0; i < area_xsize && *text; i++)
+    for (i=0; i < line_length && *text; i++)
       if ((buffer[i] = *text++) == '\n')
        break;
-    buffer[i] = '\0';
+    buffer[MIN(i, area_xsize)] = '\0';
 
     DrawTextExt(drawto, x, y + area_line * font_height, buffer, font_nr,
                mask_mode);
index bde8ba9d661058af6a874f67a4bb1d8ebc558019..dc29e2837c00ac9ba5f6869a4af6258f46c65959 100644 (file)
@@ -66,6 +66,6 @@ void DrawTextF(int, int, int, char *, ...);
 void DrawTextFCentered(int, int, char *, ...);
 void DrawText(int, int, char *, int);
 void DrawTextExt(DrawBuffer *, int, int, char *, int, int);
-void DrawTextToTextArea(int, int, char *, int, int, int, int);
+void DrawTextToTextArea(int, int, char *, int, int, int, int, int);
 
 #endif /* TEXT_H */
index c8ab0efc85fac9471049ab5a6a15714fdd3e145c..558f180c526865d33504600f409218996c9de100 100644 (file)
@@ -17,6 +17,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdarg.h>
+#include <string.h>
 #include <sys/types.h>
 
 typedef unsigned char boolean;
index 1d85ad187af7805c82e8926d3f0cb206badce0a8..8498052e14a4ebccaf179c4ddcd1b8e8b21f308b 100644 (file)
@@ -50,7 +50,8 @@ short                 StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short                  Back[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 boolean                        Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 boolean                        Pushed[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
-boolean                        Changed[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+unsigned long          Changed[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+unsigned long          ChangeEvent[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short                  JustStopped[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short                  AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short                  AmoebaCnt[MAX_NUM_AMOEBA];
@@ -95,7 +96,7 @@ struct SetupInfo      setup;
 struct GameInfo                game;
 struct GlobalInfo      global;
 struct MenuInfo                menu;
-struct DoorInfo                door;
+struct DoorInfo                door_1, door_2;
 struct GraphicInfo     *graphic_info = NULL;
 struct SoundInfo       *sound_info = NULL;
 
@@ -139,8 +140,8 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS + 1] =
   },
   {
     "key_obsolete",
-    "key",
-    "key"
+    "obsolete",
+    "key (OBSOLETE)"
   },
   {
     "emerald",
@@ -154,18 +155,18 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS + 1] =
   },
   {
     "player_obsolete",
-    "player",
-    "player"
+    "obsolete",
+    "player (OBSOLETE)"
   },
   {
     "bug",
     "bug",
-    "bug"
+    "bug (random start direction)"
   },
   {
     "spaceship",
     "spaceship",
-    "spaceship"
+    "spaceship (random start direction)"
   },
   {
     "yamyam",
@@ -337,7 +338,7 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS + 1] =
   {
     "pacman",
     "pacman",
-    "pac man"
+    "pac man (random start direction)"
   },
   {
     "invisible_wall",
@@ -499,12 +500,12 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS + 1] =
   {
     "bd_butterfly",
     "bd_butterfly",
-    "butterfly"
+    "butterfly (random start direction)"
   },
   {
     "bd_firefly",
     "bd_firefly",
-    "firefly"
+    "firefly (random start direction)"
   },
   {
     "player_1",
@@ -656,7 +657,7 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS + 1] =
   {
     "mole",
     "mole",
-    "mole"
+    "mole (random start direction)"
   },
   {
     "penguin",
@@ -699,9 +700,9 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS + 1] =
     "fire breathing dragon"
   },
   {
-    "em_key_1_file",
-    "key",
-    "red key (EM style)"
+    "em_key_1_file_obsolete",
+    "obsolete",
+    "key (OBSOLETE)"
   },
   {
     "char_space",
@@ -1139,19 +1140,19 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS + 1] =
     "blue door (EM style)"
   },
   {
-    "em_key_2_file",
-    "key",
-    "yellow key (EM style)"
+    "em_key_2_file_obsolete",
+    "obsolete",
+    "key (OBSOLETE)"
   },
   {
-    "em_key_3_file",
-    "key",
-    "green key (EM style)"
+    "em_key_3_file_obsolete",
+    "obsolete",
+    "key (OBSOLETE)"
   },
   {
-    "em_key_4_file",
-    "key",
-    "blue key (EM style)"
+    "em_key_4_file_obsolete",
+    "obsolete",
+    "key (OBSOLETE)"
   },
   {
     "sp_empty_space",
@@ -1584,9 +1585,9 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS + 1] =
     "land mine"
   },
   {
-    "envelope",
-    "envelope",
-    "mail envelope"
+    "envelope_obsolete",
+    "obsolete",
+    "envelope (OBSOLETE)"
   },
   {
     "light_switch",
@@ -3183,31 +3184,51 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS + 1] =
     "custom",
     "custom element 256"
   },
-
-  /* ----------------------------------------------------------------------- */
-  /* "real" (and therefore drawable) runtime elements                        */
-  /* ----------------------------------------------------------------------- */
-
   {
     "em_key_1",
     "key",
-    "-"
+    "red key (EM style)"
     },
   {
     "em_key_2",
     "key",
-    "-"
+    "yellow key (EM style)"
     },
   {
     "em_key_3",
     "key",
-    "-"
+    "green key (EM style)"
   },
   {
     "em_key_4",
     "key",
-    "-"
+    "blue key (EM style)"
+  },
+  {
+    "envelope_1",
+    "envelope",
+    "mail envelope 1"
+  },
+  {
+    "envelope_2",
+    "envelope",
+    "mail envelope 2"
+  },
+  {
+    "envelope_3",
+    "envelope",
+    "mail envelope 3"
   },
+  {
+    "envelope_4",
+    "envelope",
+    "mail envelope 4"
+  },
+
+  /* ----------------------------------------------------------------------- */
+  /* "real" (and therefore drawable) runtime elements                        */
+  /* ----------------------------------------------------------------------- */
+
   {
     "dynabomb_player_1_active",
     "dynabomb",
@@ -3343,6 +3364,11 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS + 1] =
     "exit",
     "-"
   },
+  {
+    "exit_closing",
+    "exit",
+    "-"
+  },
   {
     "sp_exit_open",
     "sp_exit",
@@ -3721,8 +3747,12 @@ struct TokenIntPtrInfo image_config_vars[] =
   { "menu.list_size.SCORES",   &menu.list_size[GFX_SPECIAL_ARG_SCORES]    },
   { "menu.list_size.INFO",     &menu.list_size[GFX_SPECIAL_ARG_INFO]      },
 
-  { "door.step_offset",                &door.step_offset                          },
-  { "door.step_delay",         &door.step_delay                           },
+  { "door_1.step_offset",      &door_1.step_offset                        },
+  { "door_1.step_delay",       &door_1.step_delay                         },
+  { "door_1.anim_mode",                &door_1.anim_mode                          },
+  { "door_2.step_offset",      &door_2.step_offset                        },
+  { "door_2.step_delay",       &door_2.step_delay                         },
+  { "door_2.anim_mode",                &door_2.anim_mode                          },
 
   { NULL,                      NULL,                                      }
 };
@@ -3753,6 +3783,10 @@ struct FontInfo font_info[NUM_FONTS + 1] =
   { "font.text_2"              },
   { "font.text_3"              },
   { "font.text_4"              },
+  { "font.envelope_1"          },
+  { "font.envelope_2"          },
+  { "font.envelope_3"          },
+  { "font.envelope_4"          },
   { "font.input_1.active"      },
   { "font.input_2.active"      },
   { "font.input_1"             },
index 69c1c26c8fc7c81f4305dbdddb81b49d27d51402..27d2290217924810e5dfab10aaf8d2a2b2dcf3f4 100644 (file)
@@ -14,9 +14,6 @@
 #ifndef MAIN_H
 #define MAIN_H
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
 #include <time.h>
 #include <sys/time.h>
 #include <sys/types.h>
 #define EP_CAN_EXPLODE_1X1     23
 #define EP_PUSHABLE            24
 
+/* values for pre-defined properties */
+#define EP_PLAYER              32
+#define EP_CAN_PASS_MAGIC_WALL 33
+#define EP_SWITCHABLE          34
+#define EP_BD_ELEMENT          35
+#define EP_SP_ELEMENT          36
+#define EP_SB_ELEMENT          37
+#define EP_GEM                 38
+#define EP_FOOD_DARK_YAMYAM    39
+#define EP_FOOD_PENGUIN                40
+#define EP_FOOD_PIG            41
+#define EP_HISTORIC_WALL       42
+#define EP_HISTORIC_SOLID      43
+#define EP_CLASSIC_ENEMY       44
+#define EP_BELT                        45
+#define EP_BELT_ACTIVE         46
+#define EP_BELT_SWITCH         47
+#define EP_TUBE                        48
+#define EP_KEYGATE             49
+#define EP_AMOEBOID            50
+#define EP_AMOEBALIVE          51
+#define EP_HAS_CONTENT         52
+#define EP_ACTIVE_BOMB         53
+#define EP_INACTIVE            54
+
 /* values for special configurable properties (depending on level settings) */
-#define EP_EM_SLIPPERY_WALL    32
+#define EP_EM_SLIPPERY_WALL    55
 
 /* values for special graphics properties (no effect on game engine) */
-#define EP_CAN_BE_CRUMBLED     33
-
-/* values for pre-defined properties */
-#define EP_PLAYER              34
-#define EP_CAN_PASS_MAGIC_WALL 35
-#define EP_SWITCHABLE          36
-#define EP_BD_ELEMENT          37
-#define EP_SP_ELEMENT          38
-#define EP_SB_ELEMENT          39
-#define EP_GEM                 40
-#define EP_FOOD_DARK_YAMYAM    41
-#define EP_FOOD_PENGUIN                42
-#define EP_FOOD_PIG            43
-#define EP_HISTORIC_WALL       44
-#define EP_HISTORIC_SOLID      45
-#define EP_CLASSIC_ENEMY       46
-#define EP_BELT                        47
-#define EP_BELT_ACTIVE         48
-#define EP_BELT_SWITCH         49
-#define EP_TUBE                        50
-#define EP_KEYGATE             51
-#define EP_AMOEBOID            52
-#define EP_AMOEBALIVE          53
-#define EP_HAS_CONTENT         54
-#define EP_ACTIVE_BOMB         55
-#define EP_INACTIVE            56
+#define EP_GFX_CRUMBLED                56
 
 /* values for derived properties (determined from properties above) */
 #define EP_ACCESSIBLE_OVER     57
 #define CE_OTHER_GETS_PUSHED   13
 #define CE_OTHER_GETS_COLLECTED        14
 #define CE_OTHER_GETS_DROPPED  15
-#define CE_BY_PLAYER           16 /* obsolete; map'd to CE_BY_DIRECT_ACTION */
-#define CE_BY_COLLISION                17 /* obsolete; map'd to CE_BY_DIRECT_ACTION */
+#define CE_BY_PLAYER           16      /* obsolete; now CE_BY_DIRECT_ACTION */
+#define CE_BY_COLLISION                17      /* obsolete; now CE_BY_DIRECT_ACTION */
 #define CE_BY_OTHER_ACTION     18      /* activates other element events */
 #define CE_BY_DIRECT_ACTION    19      /* activates direct element events */
 #define CE_OTHER_GETS_DIGGED   20
+#define CE_ENTERED_BY_PLAYER   21
+#define CE_LEFT_BY_PLAYER      22
+#define CE_OTHER_GETS_ENTERED  23
+#define CE_OTHER_GETS_LEFT     24
 
-#define NUM_CHANGE_EVENTS      21
+/* values for derived change events (determined from properties above) */
+#define CE_TOUCHING_SOME_SIDE  25      /* summarized left/right/up/down/any */
+
+#define NUM_CHANGE_EVENTS      26
 
 #define CE_BITMASK_DEFAULT     0
 
                                  (CH_EVENT_VAR(e) |=  CH_EVENT_BIT(c)) : \
                                  (CH_EVENT_VAR(e) &= ~CH_EVENT_BIT(c))) : 0)
 
+/* values for change sides for custom elements */
+#define CH_SIDE_NONE           MV_NO_MOVING
+#define CH_SIDE_LEFT           MV_LEFT
+#define CH_SIDE_RIGHT          MV_RIGHT
+#define CH_SIDE_TOP            MV_UP
+#define CH_SIDE_BOTTOM         MV_DOWN
+#define CH_SIDE_LEFT_RIGHT     MV_HORIZONTAL
+#define CH_SIDE_TOP_BOTTOM     MV_VERTICAL
+#define CH_SIDE_ANY            MV_ANY_DIRECTION
+
 /* values for change power for custom elements */
 #define CP_NON_DESTRUCTIVE     0
 #define CP_HALF_DESTRUCTIVE    1
 #define MV_BIT_ALONG_RIGHT_SIDE        7
 #define MV_BIT_TURNING_LEFT    8
 #define MV_BIT_TURNING_RIGHT   9
+#define MV_BIT_WHEN_PUSHED     10
 
 /* values for special move patterns for custom elements */
 #define MV_HORIZONTAL          (MV_LEFT | MV_RIGHT)
 #define MV_ALONG_RIGHT_SIDE    (1 << MV_BIT_ALONG_RIGHT_SIDE)
 #define MV_TURNING_LEFT                (1 << MV_BIT_TURNING_LEFT)
 #define MV_TURNING_RIGHT       (1 << MV_BIT_TURNING_RIGHT)
+#define MV_WHEN_PUSHED         (1 << MV_BIT_WHEN_PUSHED)
 
 /* values for slippery property for custom elements */
 #define SLIPPERY_ANY_RANDOM    0
 #define IS_EM_SLIPPERY_WALL(e) HAS_PROPERTY(e, EP_EM_SLIPPERY_WALL)
 
 /* macros for special graphics properties */
-#define CAN_BE_CRUMBLED(e)     HAS_PROPERTY(GFX_ELEMENT(e),EP_CAN_BE_CRUMBLED)
+#define GFX_CRUMBLED(e)                HAS_PROPERTY(GFX_ELEMENT(e), EP_GFX_CRUMBLED)
 
 /* macros for pre-defined properties */
 #define ELEM_IS_PLAYER(e)      HAS_PROPERTY(e, EP_PLAYER)
 #define IS_CUSTOM_ELEMENT(e)   ((e) >= EL_CUSTOM_START &&              \
                                 (e) <= EL_CUSTOM_END)
 
+#define IS_ENVELOPE(e)         ((e) >= EL_ENVELOPE_1 &&                \
+                                (e) <= EL_ENVELOPE_4)
+
 #define GFX_ELEMENT(e)         (element_info[e].use_gfx_element ?      \
                                 element_info[e].gfx_element : e)
 
 #define EL_WALL                                2
 #define EL_WALL_SLIPPERY               3
 #define EL_ROCK                                4
-#define EL_KEY_OBSOLETE                        5 /* obsolete; mapped to EL_KEY_1 */
+#define EL_KEY_OBSOLETE                        5       /* obsolete; now EL_KEY_1 */
 #define EL_EMERALD                     6
 #define EL_EXIT_CLOSED                 7
-#define EL_PLAYER_OBSOLETE             8 /* obsolete; mapped to EL_PLAYER_1 */
+#define EL_PLAYER_OBSOLETE             8       /* obsolete; now EL_PLAYER_1 */
 #define EL_BUG                         9
 #define EL_SPACESHIP                   10
 #define EL_YAMYAM                      11
 #define EL_PIG                         117
 #define EL_DRAGON                      118
 
-#define EL_EM_KEY_1_FILE               119
+#define EL_EM_KEY_1_FILE_OBSOLETE      119     /* obsolete; now EL_EM_KEY_1 */
 
 #define EL_CHAR_START                  120
 #define EL_CHAR_ASCII0                 (EL_CHAR_START  - 32)
 #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_EM_KEY_2_FILE_OBSOLETE      207     /* obsolete; now EL_EM_KEY_2 */
+#define EL_EM_KEY_3_FILE_OBSOLETE      208     /* obsolete; now EL_EM_KEY_3 */
+#define EL_EM_KEY_4_FILE_OBSOLETE      209     /* obsolete; now EL_EM_KEY_4 */
 
 #define EL_SP_START                    210
 #define EL_SP_EMPTY_SPACE              (EL_SP_START + 0)
 #define EL_CONVEYOR_BELT_4_SWITCH_MIDDLE 293
 #define EL_CONVEYOR_BELT_4_SWITCH_RIGHT         294
 #define EL_LANDMINE                    295
-#define EL_ENVELOPE                    296
+#define EL_ENVELOPE_OBSOLETE           296   /* obsolete; now EL_ENVELOPE_1 */
 #define EL_LIGHT_SWITCH                        297
 #define EL_LIGHT_SWITCH_ACTIVE         298
 #define EL_SIGN_EXCLAMATION            299
 #define EL_UNUSED_358                  358
 #define EL_UNUSED_359                  359
 
+/* ---------- begin of custom elements section ----------------------------- */
 #define EL_CUSTOM_START                        360
 
 #include "conf_cus.h"  /* include auto-generated data structure definitions */
 
 #define NUM_CUSTOM_ELEMENTS            256
+#define EL_CUSTOM_END                  615
+/* ---------- end of custom elements section ------------------------------- */
 
-#define EL_CUSTOM_END          (EL_CUSTOM_START + NUM_CUSTOM_ELEMENTS - 1)
-#define NUM_FILE_ELEMENTS      (EL_CUSTOM_START + NUM_CUSTOM_ELEMENTS)
+#define EL_EM_KEY_1                    616
+#define EL_EM_KEY_2                    617
+#define EL_EM_KEY_3                    618
+#define EL_EM_KEY_4                    619
+#define EL_ENVELOPE_1                  620
+#define EL_ENVELOPE_2                  621
+#define EL_ENVELOPE_3                  622
+#define EL_ENVELOPE_4                  623
+
+#define NUM_FILE_ELEMENTS              624
 
 
 /* "real" (and therefore drawable) runtime elements */
 #define EL_FIRST_RUNTIME_REAL          NUM_FILE_ELEMENTS
 
-#define EL_EM_KEY_1                    (EL_FIRST_RUNTIME_REAL + 0)
-#define EL_EM_KEY_2                    (EL_FIRST_RUNTIME_REAL + 1)
-#define EL_EM_KEY_3                    (EL_FIRST_RUNTIME_REAL + 2)
-#define EL_EM_KEY_4                    (EL_FIRST_RUNTIME_REAL + 3)
-#define EL_DYNABOMB_PLAYER_1_ACTIVE    (EL_FIRST_RUNTIME_REAL + 4)
-#define EL_DYNABOMB_PLAYER_2_ACTIVE    (EL_FIRST_RUNTIME_REAL + 5)
-#define EL_DYNABOMB_PLAYER_3_ACTIVE    (EL_FIRST_RUNTIME_REAL + 6)
-#define EL_DYNABOMB_PLAYER_4_ACTIVE    (EL_FIRST_RUNTIME_REAL + 7)
-#define EL_SP_DISK_RED_ACTIVE          (EL_FIRST_RUNTIME_REAL + 8)
-#define EL_SWITCHGATE_OPENING          (EL_FIRST_RUNTIME_REAL + 9)
-#define EL_SWITCHGATE_CLOSING          (EL_FIRST_RUNTIME_REAL + 10)
-#define EL_TIMEGATE_OPENING            (EL_FIRST_RUNTIME_REAL + 11)
-#define EL_TIMEGATE_CLOSING            (EL_FIRST_RUNTIME_REAL + 12)
-#define EL_PEARL_BREAKING              (EL_FIRST_RUNTIME_REAL + 13)
-#define EL_TRAP_ACTIVE                 (EL_FIRST_RUNTIME_REAL + 14)
-#define EL_INVISIBLE_STEELWALL_ACTIVE  (EL_FIRST_RUNTIME_REAL + 15)
-#define EL_INVISIBLE_WALL_ACTIVE       (EL_FIRST_RUNTIME_REAL + 16)
-#define EL_INVISIBLE_SAND_ACTIVE       (EL_FIRST_RUNTIME_REAL + 17)
-#define EL_CONVEYOR_BELT_1_LEFT_ACTIVE  (EL_FIRST_RUNTIME_REAL + 18)
-#define EL_CONVEYOR_BELT_1_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 19)
-#define EL_CONVEYOR_BELT_1_RIGHT_ACTIVE         (EL_FIRST_RUNTIME_REAL + 20)
-#define EL_CONVEYOR_BELT_2_LEFT_ACTIVE  (EL_FIRST_RUNTIME_REAL + 21)
-#define EL_CONVEYOR_BELT_2_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 22)
-#define EL_CONVEYOR_BELT_2_RIGHT_ACTIVE         (EL_FIRST_RUNTIME_REAL + 23)
-#define EL_CONVEYOR_BELT_3_LEFT_ACTIVE  (EL_FIRST_RUNTIME_REAL + 24)
-#define EL_CONVEYOR_BELT_3_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 25)
-#define EL_CONVEYOR_BELT_3_RIGHT_ACTIVE         (EL_FIRST_RUNTIME_REAL + 26)
-#define EL_CONVEYOR_BELT_4_LEFT_ACTIVE  (EL_FIRST_RUNTIME_REAL + 27)
-#define EL_CONVEYOR_BELT_4_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 28)
-#define EL_CONVEYOR_BELT_4_RIGHT_ACTIVE         (EL_FIRST_RUNTIME_REAL + 29)
-#define EL_EXIT_OPENING                        (EL_FIRST_RUNTIME_REAL + 30)
-#define EL_SP_EXIT_OPEN                        (EL_FIRST_RUNTIME_REAL + 31)
-#define EL_SP_TERMINAL_ACTIVE          (EL_FIRST_RUNTIME_REAL + 32)
-#define EL_SP_BUGGY_BASE_ACTIVATING    (EL_FIRST_RUNTIME_REAL + 33)
-#define EL_SP_BUGGY_BASE_ACTIVE                (EL_FIRST_RUNTIME_REAL + 34)
-#define EL_SP_MURPHY_CLONE             (EL_FIRST_RUNTIME_REAL + 35)
-#define EL_AMOEBA_DROPPING             (EL_FIRST_RUNTIME_REAL + 36)
-#define EL_QUICKSAND_EMPTYING          (EL_FIRST_RUNTIME_REAL + 37)
-#define EL_MAGIC_WALL_ACTIVE           (EL_FIRST_RUNTIME_REAL + 38)
-#define EL_BD_MAGIC_WALL_ACTIVE                (EL_FIRST_RUNTIME_REAL + 39)
-#define EL_MAGIC_WALL_FULL             (EL_FIRST_RUNTIME_REAL + 40)
-#define EL_BD_MAGIC_WALL_FULL          (EL_FIRST_RUNTIME_REAL + 41)
-#define EL_MAGIC_WALL_EMPTYING         (EL_FIRST_RUNTIME_REAL + 42)
-#define EL_BD_MAGIC_WALL_EMPTYING      (EL_FIRST_RUNTIME_REAL + 43)
-#define EL_MAGIC_WALL_DEAD             (EL_FIRST_RUNTIME_REAL + 44)
-#define EL_BD_MAGIC_WALL_DEAD          (EL_FIRST_RUNTIME_REAL + 45)
+#define EL_DYNABOMB_PLAYER_1_ACTIVE    (EL_FIRST_RUNTIME_REAL + 0)
+#define EL_DYNABOMB_PLAYER_2_ACTIVE    (EL_FIRST_RUNTIME_REAL + 1)
+#define EL_DYNABOMB_PLAYER_3_ACTIVE    (EL_FIRST_RUNTIME_REAL + 2)
+#define EL_DYNABOMB_PLAYER_4_ACTIVE    (EL_FIRST_RUNTIME_REAL + 3)
+#define EL_SP_DISK_RED_ACTIVE          (EL_FIRST_RUNTIME_REAL + 4)
+#define EL_SWITCHGATE_OPENING          (EL_FIRST_RUNTIME_REAL + 5)
+#define EL_SWITCHGATE_CLOSING          (EL_FIRST_RUNTIME_REAL + 6)
+#define EL_TIMEGATE_OPENING            (EL_FIRST_RUNTIME_REAL + 7)
+#define EL_TIMEGATE_CLOSING            (EL_FIRST_RUNTIME_REAL + 8)
+#define EL_PEARL_BREAKING              (EL_FIRST_RUNTIME_REAL + 9)
+#define EL_TRAP_ACTIVE                 (EL_FIRST_RUNTIME_REAL + 10)
+#define EL_INVISIBLE_STEELWALL_ACTIVE  (EL_FIRST_RUNTIME_REAL + 11)
+#define EL_INVISIBLE_WALL_ACTIVE       (EL_FIRST_RUNTIME_REAL + 12)
+#define EL_INVISIBLE_SAND_ACTIVE       (EL_FIRST_RUNTIME_REAL + 13)
+#define EL_CONVEYOR_BELT_1_LEFT_ACTIVE  (EL_FIRST_RUNTIME_REAL + 14)
+#define EL_CONVEYOR_BELT_1_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 15)
+#define EL_CONVEYOR_BELT_1_RIGHT_ACTIVE         (EL_FIRST_RUNTIME_REAL + 16)
+#define EL_CONVEYOR_BELT_2_LEFT_ACTIVE  (EL_FIRST_RUNTIME_REAL + 17)
+#define EL_CONVEYOR_BELT_2_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 18)
+#define EL_CONVEYOR_BELT_2_RIGHT_ACTIVE         (EL_FIRST_RUNTIME_REAL + 19)
+#define EL_CONVEYOR_BELT_3_LEFT_ACTIVE  (EL_FIRST_RUNTIME_REAL + 20)
+#define EL_CONVEYOR_BELT_3_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 21)
+#define EL_CONVEYOR_BELT_3_RIGHT_ACTIVE         (EL_FIRST_RUNTIME_REAL + 22)
+#define EL_CONVEYOR_BELT_4_LEFT_ACTIVE  (EL_FIRST_RUNTIME_REAL + 23)
+#define EL_CONVEYOR_BELT_4_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 24)
+#define EL_CONVEYOR_BELT_4_RIGHT_ACTIVE         (EL_FIRST_RUNTIME_REAL + 25)
+#define EL_EXIT_OPENING                        (EL_FIRST_RUNTIME_REAL + 26)
+#define EL_EXIT_CLOSING                        (EL_FIRST_RUNTIME_REAL + 27)
+#define EL_SP_EXIT_OPEN                        (EL_FIRST_RUNTIME_REAL + 28)
+#define EL_SP_TERMINAL_ACTIVE          (EL_FIRST_RUNTIME_REAL + 29)
+#define EL_SP_BUGGY_BASE_ACTIVATING    (EL_FIRST_RUNTIME_REAL + 30)
+#define EL_SP_BUGGY_BASE_ACTIVE                (EL_FIRST_RUNTIME_REAL + 31)
+#define EL_SP_MURPHY_CLONE             (EL_FIRST_RUNTIME_REAL + 32)
+#define EL_AMOEBA_DROPPING             (EL_FIRST_RUNTIME_REAL + 33)
+#define EL_QUICKSAND_EMPTYING          (EL_FIRST_RUNTIME_REAL + 34)
+#define EL_MAGIC_WALL_ACTIVE           (EL_FIRST_RUNTIME_REAL + 35)
+#define EL_BD_MAGIC_WALL_ACTIVE                (EL_FIRST_RUNTIME_REAL + 36)
+#define EL_MAGIC_WALL_FULL             (EL_FIRST_RUNTIME_REAL + 37)
+#define EL_BD_MAGIC_WALL_FULL          (EL_FIRST_RUNTIME_REAL + 38)
+#define EL_MAGIC_WALL_EMPTYING         (EL_FIRST_RUNTIME_REAL + 39)
+#define EL_BD_MAGIC_WALL_EMPTYING      (EL_FIRST_RUNTIME_REAL + 40)
+#define EL_MAGIC_WALL_DEAD             (EL_FIRST_RUNTIME_REAL + 41)
+#define EL_BD_MAGIC_WALL_DEAD          (EL_FIRST_RUNTIME_REAL + 42)
 
 /* "unreal" (and therefore not drawable) runtime elements */
-#define EL_FIRST_RUNTIME_UNREAL                (EL_FIRST_RUNTIME_REAL + 46)
+#define EL_FIRST_RUNTIME_UNREAL                (EL_FIRST_RUNTIME_REAL + 43)
 
 #define EL_BLOCKED                     (EL_FIRST_RUNTIME_UNREAL + 0)
 #define EL_EXPLOSION                   (EL_FIRST_RUNTIME_UNREAL + 1)
 #define FONT_TEXT_2                            13
 #define FONT_TEXT_3                            14
 #define FONT_TEXT_4                            15
-#define FONT_INPUT_1_ACTIVE                    16
-#define FONT_INPUT_2_ACTIVE                    17
-#define FONT_INPUT_1                           18
-#define FONT_INPUT_2                           19
-#define FONT_OPTION_OFF                                20
-#define FONT_OPTION_ON                         21
-#define FONT_VALUE_1                           22
-#define FONT_VALUE_2                           23
-#define FONT_VALUE_OLD                         24
-#define FONT_LEVEL_NUMBER                      25
-#define FONT_TAPE_RECORDER                     26
-#define FONT_GAME_INFO                         27
-
-#define NUM_FONTS                              28
+#define FONT_ENVELOPE_1                                16
+#define FONT_ENVELOPE_2                                17
+#define FONT_ENVELOPE_3                                18
+#define FONT_ENVELOPE_4                                19
+#define FONT_INPUT_1_ACTIVE                    20
+#define FONT_INPUT_2_ACTIVE                    21
+#define FONT_INPUT_1                           22
+#define FONT_INPUT_2                           23
+#define FONT_OPTION_OFF                                24
+#define FONT_OPTION_ON                         25
+#define FONT_VALUE_1                           26
+#define FONT_VALUE_2                           27
+#define FONT_VALUE_OLD                         28
+#define FONT_LEVEL_NUMBER                      29
+#define FONT_TAPE_RECORDER                     30
+#define FONT_GAME_INFO                         31
+
+#define NUM_FONTS                              32
 #define NUM_INITIAL_FONTS                      4
 
 /* values for game_status (must match special image configuration suffixes) */
 
 #define PROGRAM_VERSION_MAJOR  3
 #define PROGRAM_VERSION_MINOR  0
-#define PROGRAM_VERSION_PATCH  4
+#define PROGRAM_VERSION_PATCH  5
 #define PROGRAM_VERSION_RELEASE        0
-#define PROGRAM_VERSION_STRING "3.0.4"
+#define PROGRAM_VERSION_STRING "3.0.5"
 
 #define PROGRAM_TITLE_STRING   "Rocks'n'Diamonds"
 #define PROGRAM_AUTHOR_STRING  "Holger Schemel"
 #define EMU_SOKOBAN            2
 #define EMU_SUPAPLEX           3
 
+struct MenuInfo
+{
+  int draw_xoffset_default;
+  int draw_yoffset_default;
+  int draw_xoffset[NUM_SPECIAL_GFX_ARGS];
+  int draw_yoffset[NUM_SPECIAL_GFX_ARGS];
+
+  int scrollbar_xoffset;
+
+  int list_size_default;
+  int list_size[NUM_SPECIAL_GFX_ARGS];
+};
+
+struct DoorInfo
+{
+  int step_offset;
+  int step_delay;
+  int anim_mode;
+};
+
 struct HiScore
 {
   char Name[MAX_PLAYER_NAME_LEN + 1];
@@ -1094,6 +1145,8 @@ struct PlayerInfo
   boolean is_digging;
   boolean is_collecting;
 
+  int show_envelope;
+
   unsigned long move_delay;
   int move_delay_value;
 
@@ -1130,8 +1183,8 @@ struct LevelInfo
   int gems_needed;
   char name[MAX_LEVEL_NAME_LEN + 1];
   char author[MAX_LEVEL_AUTHOR_LEN + 1];
-  char envelope[MAX_ENVELOPE_TEXT_LEN + 1];
-  int envelope_xsize, envelope_ysize;
+  char envelope_text[4][MAX_ENVELOPE_TEXT_LEN + 1];
+  int envelope_xsize[4], envelope_ysize[4];
   int score[LEVEL_SCORE_ELEMENTS];
   int yamyam_content[MAX_ELEMENT_CONTENTS][3][3];
   int num_yamyam_contents;
@@ -1193,6 +1246,8 @@ struct GameInfo
   int initial_move_delay;
   int initial_move_delay_value;
 
+  boolean envelope_active;
+
   /* variable within running game */
   int yamyam_content_nr;
   boolean magic_wall_active;
@@ -1218,30 +1273,12 @@ struct GlobalInfo
   int fps_slowdown_factor;
 };
 
-struct MenuInfo
-{
-  int draw_xoffset_default;
-  int draw_yoffset_default;
-  int draw_xoffset[NUM_SPECIAL_GFX_ARGS];
-  int draw_yoffset[NUM_SPECIAL_GFX_ARGS];
-
-  int scrollbar_xoffset;
-
-  int list_size_default;
-  int list_size[NUM_SPECIAL_GFX_ARGS];
-};
-
-struct DoorInfo
-{
-  int step_offset;
-  int step_delay;
-};
-
 struct ElementChangeInfo
 {
   boolean can_change;          /* use or ignore this change info */
 
-  unsigned long events;                /* bitfield for change events */
+  unsigned long events;                /* change events */
+  int sides;                   /* change sides */
 
   short target_element;                /* target element after change */
 
@@ -1328,7 +1365,7 @@ struct ElementInfo
 
   unsigned long change_events; /* bitfield for combined change events */
 
-  int event_page_num[NUM_CHANGE_EVENTS]; /* page number for each event */
+  int event_page_nr[NUM_CHANGE_EVENTS]; /* page number for each event */
   struct ElementChangeInfo *event_page[NUM_CHANGE_EVENTS]; /* page for event */
 
   /* ---------- internal values used in level editor ---------- */
@@ -1441,7 +1478,8 @@ extern short                      StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   Back[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern boolean                 Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern boolean                 Pushed[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
-extern boolean                 Changed[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern unsigned long           Changed[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern unsigned long           ChangeEvent[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];
@@ -1488,7 +1526,7 @@ extern struct TapeInfo            tape;
 extern struct GameInfo         game;
 extern struct GlobalInfo       global;
 extern struct MenuInfo         menu;
-extern struct DoorInfo         door;
+extern struct DoorInfo         door_1, door_2;
 extern struct ElementInfo      element_info[];
 extern struct ElementActionInfo        element_action_info[];
 extern struct ElementDirectionInfo element_direction_info[];
index 58c32a6e06d13391bb8d70d2dc8fcfffea75a48e..4a60007b8b47f397177bd13f46883620e1663ade 100644 (file)
@@ -20,7 +20,6 @@
 #include <signal.h>
 #include <sys/socket.h>
 #include <errno.h>
-#include <string.h>
 #include <netinet/in.h>
 #include <netinet/tcp.h>
 #include <arpa/inet.h>
index c119ff7c1eef22da85ce44d37fe4fb76cc8dfeae..54ba6a4110cc4863aec45fd9e0f4e1f96d076ba2 100644 (file)
@@ -212,6 +212,7 @@ void DrawMainMenu()
   {
     game_status = GAME_MODE_EDITOR;
     DrawLevelEd();
+
     return;
   }
 
index f8f37ea0c7d3e6e08d8098674b850950d9806610..a2d051fb1a87df424f3e5f704248e13110296684 100644 (file)
@@ -72,7 +72,7 @@ void SetDrawtoField(int mode)
 
 void RedrawPlayfield(boolean force_redraw, int x, int y, int width, int height)
 {
-  if (game_status == GAME_MODE_PLAYING)
+  if (game_status == GAME_MODE_PLAYING && !game.envelope_active)
   {
     if (force_redraw)
     {
@@ -506,7 +506,7 @@ inline void DrawLevelGraphicAnimationIfNeeded(int x, int y, int graphic)
 
   DrawGraphicAnimation(sx, sy, graphic);
 
-  if (CAN_BE_CRUMBLED(Feld[x][y]))
+  if (GFX_CRUMBLED(Feld[x][y]))
     DrawLevelFieldCrumbledSand(x, y);
 }
 
@@ -525,7 +525,7 @@ void DrawLevelElementAnimationIfNeeded(int x, int y, int element)
 
   DrawGraphicAnimation(sx, sy, graphic);
 
-  if (CAN_BE_CRUMBLED(element))
+  if (GFX_CRUMBLED(element))
     DrawLevelFieldCrumbledSand(x, y);
 }
 
@@ -671,7 +671,7 @@ void DrawPlayer(struct PlayerInfo *player)
     if (player_is_moving && GfxElement[jx][jy] != EL_UNDEFINED)
     {
 #if 1
-      if (CAN_BE_CRUMBLED(GfxElement[jx][jy]))
+      if (GFX_CRUMBLED(GfxElement[jx][jy]))
        DrawLevelFieldCrumbledSandDigging(jx, jy, move_dir, player->StepFrame);
 #else
       if (GfxElement[jx][jy] == EL_SAND)
@@ -1231,7 +1231,7 @@ static void DrawLevelFieldCrumbledSandExt(int x, int y, int graphic, int frame)
             GfxElement[x][y] : Feld[x][y]);
 
   /* crumble field itself */
-  if (CAN_BE_CRUMBLED(element) && !IS_MOVING(x, y))
+  if (GFX_CRUMBLED(element) && !IS_MOVING(x, y))
   {
     if (!IN_SCR_FIELD(sx, sy))
       return;
@@ -1246,14 +1246,14 @@ static void DrawLevelFieldCrumbledSandExt(int x, int y, int graphic, int frame)
       element = (IN_LEV_FIELD(xx, yy) ? Feld[xx][yy] : BorderElement);
 
       /* check if neighbour field is of same type */
-      if (CAN_BE_CRUMBLED(element) && !IS_MOVING(xx, yy))
+      if (GFX_CRUMBLED(element) && !IS_MOVING(xx, yy))
        continue;
 
 #if 0
       if (Feld[x][y] == EL_CUSTOM_START + 123)
        printf("::: crumble [%d] THE CHAOS ENGINE (%d, %d): %d, %d\n",
               i, Feld[x][y], element,
-              CAN_BE_CRUMBLED(element), IS_MOVING(x, y));
+              GFX_CRUMBLED(element), IS_MOVING(x, y));
 #endif
 
       if (i == 1 || i == 2)
@@ -1292,12 +1292,13 @@ static void DrawLevelFieldCrumbledSandExt(int x, int y, int graphic, int frame)
 
       if (!IN_LEV_FIELD(xx, yy) ||
          !IN_SCR_FIELD(sxx, syy) ||
-         !CAN_BE_CRUMBLED(Feld[xx][yy]) ||
+         !GFX_CRUMBLED(Feld[xx][yy]) ||
          IS_MOVING(xx, yy))
        continue;
 
 #if 1
       graphic = el_act2crm(Feld[xx][yy], ACTION_DEFAULT);
+      crumbled_border_size = graphic_info[graphic].border_size;
 
       getGraphicSource(graphic, frame, &src_bitmap, &src_x, &src_y);
 #endif
@@ -1380,7 +1381,7 @@ void DrawLevelFieldCrumbledSandNeighbours(int x, int y)
 
     if (!IN_LEV_FIELD(xx, yy) ||
        !IN_SCR_FIELD(sxx, syy) ||
-       !CAN_BE_CRUMBLED(Feld[xx][yy]) ||
+       !GFX_CRUMBLED(Feld[xx][yy]) ||
        IS_MOVING(xx, yy))
       continue;
 
@@ -1555,13 +1556,12 @@ void DrawMiniElementOrWall(int sx, int sy, int scroll_x, int scroll_y)
     DrawMiniGraphic(sx, sy, el2edimg(getBorderElement(x, y)));
 }
 
-#if 1
-void DrawEnvelopeBackground(int startx, int starty, int x, int y,
-                           int xsize, int ysize, int font_nr)
+void DrawEnvelopeBackground(int envelope_nr, int startx, int starty,
+                           int x, int y, int xsize, int ysize, int font_nr)
 {
   int font_width  = getFontWidth(font_nr);
   int font_height = getFontHeight(font_nr);
-  int graphic = IMG_GAME_ENVELOPE_BACKGROUND;
+  int graphic = IMG_BACKGROUND_ENVELOPE_1 + envelope_nr;
   Bitmap *src_bitmap;
   int src_x, src_y;
   int dst_x = SX + startx + x * font_width;
@@ -1599,63 +1599,34 @@ void DrawEnvelopeBackground(int startx, int starty, int x, int y,
               dst_x, dst_y);
 }
 
-#else
-
-void DrawEnvelopeBackground(int dst_x, int dst_y, int ex, int ey, int font_nr)
-{
-  int font_width = getFontWidth(font_nr);
-  int font_height = getFontHeight(font_nr);
-  int graphic = IMG_GAME_ENVELOPE_BACKGROUND;
-  Bitmap *src_bitmap;
-  int src_x, src_y;
-  int width = graphic_info[graphic].width;
-  int height = graphic_info[graphic].height;
-  boolean draw_masked = graphic_info[graphic].draw_masked;
-
-  getGraphicSource(graphic, 0, &src_bitmap, &src_x, &src_y);
-
-  if (src_bitmap == NULL)
-  {
-    ClearRectangle(drawto, dst_x, dst_y, font_width, font_height);
-    return;
-  }
-
-  src_x += (ex == -1 ? 0 : ex == +1 ? width  - font_width  : font_width);
-  src_y += (ey == -1 ? 0 : ey == +1 ? height - font_height : font_height);
-
-  if (draw_masked)
-  {
-    SetClipOrigin(src_bitmap, src_bitmap->stored_clip_gc,
-                 dst_x - src_x, dst_y - src_y);
-    BlitBitmapMasked(src_bitmap, drawto, src_x, src_y, font_width, font_height,
-                    dst_x, dst_y);
-  }
-  else
-    BlitBitmap(src_bitmap, drawto, src_x, src_y, font_width, font_height,
-              dst_x, dst_y);
-}
-#endif
-
-void ShowEnvelope()
+void AnimateEnvelope(int envelope_nr, int anim_mode, int action)
 {
-  int graphic = IMG_GAME_ENVELOPE_BACKGROUND;
+  int graphic = IMG_BACKGROUND_ENVELOPE_1 + envelope_nr;
   boolean draw_masked = graphic_info[graphic].draw_masked;
   int mask_mode = (draw_masked ? BLIT_MASKED : BLIT_ON_BACKGROUND);
-  int font_nr = FONT_TEXT_1;
+  boolean ffwd_delay = (tape.playing && tape.fast_forward);
+  unsigned long anim_delay = 0;
+  int anim_delay_value = (ffwd_delay ? FfwdFrameDelay : GameFrameDelay);
+  int font_nr = FONT_ENVELOPE_1 + envelope_nr;
   int font_width = getFontWidth(font_nr);
   int font_height = getFontHeight(font_nr);
-  boolean ffwd_delay = (tape.playing && tape.fast_forward);
-  int anim_delay = (ffwd_delay ? FfwdFrameDelay : GameFrameDelay);
-  int wait_delay = (ffwd_delay ? 500 : 1000);
-  int i, x, y;
+  int max_xsize = level.envelope_xsize[envelope_nr];
+  int max_ysize = level.envelope_ysize[envelope_nr];
+  int xstart = (anim_mode & ANIM_VERTICAL ? max_xsize : 0);
+  int ystart = (anim_mode & ANIM_HORIZONTAL ? max_ysize : 0);
+  int xend = max_xsize;
+  int yend = (anim_mode != ANIM_DEFAULT ? max_ysize : 0);
+  int xstep = (xstart < xend ? 1 : 0);
+  int ystep = (ystart < yend || xstep == 0 ? 1 : 0);
+  int x, y;
 
-  /* open envelope window horizontally */
-  for (i = 0; i <= level.envelope_xsize; i++)
+  for (x=xstart, y=ystart; x <= xend && y <= yend; x += xstep, y += ystep)
   {
-    int xsize = i + 2;
-    int ysize = 2;
-    int startx = (SXSIZE - xsize * font_width)  / 2;
-    int starty = (SYSIZE - ysize * font_height) / 2;
+    int xsize = (action == ACTION_CLOSING ? xend - (x - xstart) : x) + 2;
+    int ysize = (action == ACTION_CLOSING ? yend - (y - ystart) : y) + 2;
+    int sx = (SXSIZE - xsize * font_width)  / 2;
+    int sy = (SYSIZE - ysize * font_height) / 2;
+    int xx, yy;
 
     SetDrawtoField(DRAW_BUFFERED);
 
@@ -1663,144 +1634,55 @@ void ShowEnvelope()
 
     SetDrawtoField(DRAW_BACKBUFFER);
 
-#if 1
-    for (y=0; y < ysize; y++) for (x=0; x < xsize; x++)
-      DrawEnvelopeBackground(startx, starty, x, y, xsize, ysize, font_nr);
-#else
-    for (y=0; y < ysize; y++) for (x=0; x < xsize; x++)
-    {
-      int sx = SX + startx + x * font_width;
-      int sy = SY + starty + y * font_height;
-      int ex = (x == 0 ? -1 : x == xsize - 1 ? +1 : 0);
-      int ey = (y == 0 ? -1 : y == ysize - 1 ? +1 : 0);
+    for (yy=0; yy < ysize; yy++) for (xx=0; xx < xsize; xx++)
+      DrawEnvelopeBackground(envelope_nr, sx,sy, xx,yy, xsize, ysize, font_nr);
 
-      DrawEnvelopeBackground(sx, sy, ex, ey, font_nr);
-    }
-#endif
+    DrawTextToTextArea(SX + sx + font_width, SY + sy + font_height,
+                      level.envelope_text[envelope_nr], font_nr, max_xsize,
+                      xsize - 2, ysize - 2, mask_mode);
 
     redraw_mask |= REDRAW_FIELD | REDRAW_FROM_BACKBUFFER;
     BackToFront();
 
-    Delay(anim_delay);
+    WaitUntilDelayReached(&anim_delay, anim_delay_value / 2);
   }
+}
 
-  /* open envelope window vertically */
-  for (i = 0; i <= level.envelope_ysize; i++)
-  {
-    int xsize = level.envelope_xsize + 2;
-    int ysize = i + 2;
-    int startx = (SXSIZE - xsize * font_width)  / 2;
-    int starty = (SYSIZE - ysize * font_height) / 2;
-
-    SetDrawtoField(DRAW_BUFFERED);
-
-    BlitBitmap(fieldbuffer, backbuffer, FX, FY, SXSIZE, SYSIZE, SX, SY);
-
-    SetDrawtoField(DRAW_BACKBUFFER);
-
-#if 1
-    for (y=0; y < ysize; y++) for (x=0; x < xsize; x++)
-      DrawEnvelopeBackground(startx, starty, x, y, xsize, ysize, font_nr);
-#else
-    for (y=0; y < ysize; y++) for (x=0; x < xsize; x++)
-    {
-      int sx = SX + startx + x * font_width;
-      int sy = SY + starty + y * font_height;
-      int ex = (x == 0 ? -1 : x == xsize - 1 ? +1 : 0);
-      int ey = (y == 0 ? -1 : y == ysize - 1 ? +1 : 0);
+void ShowEnvelope(int envelope_nr)
+{
+  int element = EL_ENVELOPE_1 + envelope_nr;
+  int graphic = IMG_BACKGROUND_ENVELOPE_1 + envelope_nr;
+  int sound_opening = element_info[element].sound[ACTION_OPENING];
+  int sound_closing = element_info[element].sound[ACTION_CLOSING];
+  boolean ffwd_delay = (tape.playing && tape.fast_forward);
+  int wait_delay_value = (ffwd_delay ? 500 : 1000);
+  int anim_mode = graphic_info[graphic].anim_mode;
+  int main_anim_mode = (anim_mode == ANIM_NONE ? ANIM_VERTICAL|ANIM_HORIZONTAL:
+                       anim_mode == ANIM_DEFAULT ? ANIM_VERTICAL : anim_mode);
 
-      DrawEnvelopeBackground(sx, sy, ex, ey, font_nr);
-    }
-#endif
+  game.envelope_active = TRUE; /* needed for RedrawPlayfield() events */
 
-    DrawTextToTextArea(SX + startx + font_width,
-                      SY + starty + font_height, level.envelope,
-                      FONT_TEXT_1, level.envelope_xsize, i, mask_mode);
+  PlaySoundStereo(sound_opening, SOUND_MIDDLE);
 
-    redraw_mask |= REDRAW_FIELD | REDRAW_FROM_BACKBUFFER;
-    BackToFront();
+  if (anim_mode == ANIM_DEFAULT)
+    AnimateEnvelope(envelope_nr, ANIM_DEFAULT, ACTION_OPENING);
 
-    Delay(anim_delay);
-  }
+  AnimateEnvelope(envelope_nr, main_anim_mode, ACTION_OPENING);
 
   if (tape.playing)
-    Delay(wait_delay);
+    Delay(wait_delay_value);
   else
     WaitForEventToContinue();
 
-  /* close envelope window vertically */
-  for (i = level.envelope_ysize; i >= 0; i--)
-  {
-    int xsize = level.envelope_xsize + 2;
-    int ysize = i + 2;
-    int startx = (SXSIZE - xsize * font_width)  / 2;
-    int starty = (SYSIZE - ysize * font_height) / 2;
+  PlaySoundStereo(sound_closing, SOUND_MIDDLE);
 
-    SetDrawtoField(DRAW_BUFFERED);
+  if (anim_mode != ANIM_NONE)
+    AnimateEnvelope(envelope_nr, main_anim_mode, ACTION_CLOSING);
 
-    BlitBitmap(fieldbuffer, backbuffer, FX, FY, SXSIZE, SYSIZE, SX, SY);
+  if (anim_mode == ANIM_DEFAULT)
+    AnimateEnvelope(envelope_nr, ANIM_DEFAULT, ACTION_CLOSING);
 
-    SetDrawtoField(DRAW_BACKBUFFER);
-
-#if 1
-    for (y=0; y < ysize; y++) for (x=0; x < xsize; x++)
-      DrawEnvelopeBackground(startx, starty, x, y, xsize, ysize, font_nr);
-#else
-    for (y=0; y < ysize; y++) for (x=0; x < xsize; x++)
-    {
-      int sx = SX + startx + x * font_width;
-      int sy = SY + starty + y * font_height;
-      int ex = (x == 0 ? -1 : x == xsize - 1 ? +1 : 0);
-      int ey = (y == 0 ? -1 : y == ysize - 1 ? +1 : 0);
-
-      DrawEnvelopeBackground(sx, sy, ex, ey, font_nr);
-    }
-#endif
-
-    DrawTextToTextArea(SX + startx + font_width,
-                      SY + starty + font_height, level.envelope,
-                      FONT_TEXT_1, level.envelope_xsize, i, mask_mode);
-
-    redraw_mask |= REDRAW_FIELD | REDRAW_FROM_BACKBUFFER;
-    BackToFront();
-
-    Delay(anim_delay);
-  }
-
-  /* close envelope window horizontally */
-  for (i = level.envelope_xsize; i >= 0; i--)
-  {
-    int xsize = i + 2;
-    int ysize = 2;
-    int startx = (SXSIZE - xsize * font_width)  / 2;
-    int starty = (SYSIZE - ysize * font_height) / 2;
-
-    SetDrawtoField(DRAW_BUFFERED);
-
-    BlitBitmap(fieldbuffer, backbuffer, FX, FY, SXSIZE, SYSIZE, SX, SY);
-
-    SetDrawtoField(DRAW_BACKBUFFER);
-
-#if 1
-    for (y=0; y < ysize; y++) for (x=0; x < xsize; x++)
-      DrawEnvelopeBackground(startx, starty, x, y, xsize, ysize, font_nr);
-#else
-    for (y=0; y < ysize; y++) for (x=0; x < xsize; x++)
-    {
-      int sx = SX + startx + x * font_width;
-      int sy = SY + starty + y * font_height;
-      int ex = (x == 0 ? -1 : x == xsize - 1 ? +1 : 0);
-      int ey = (y == 0 ? -1 : y == ysize - 1 ? +1 : 0);
-
-      DrawEnvelopeBackground(sx, sy, ex, ey, font_nr);
-    }
-#endif
-
-    redraw_mask |= REDRAW_FIELD | REDRAW_FROM_BACKBUFFER;
-    BackToFront();
-
-    Delay(anim_delay);
-  }
+  game.envelope_active = FALSE;
 
   SetDrawtoField(DRAW_BUFFERED);
 
@@ -2404,9 +2286,9 @@ unsigned int MoveDoor(unsigned int door_state)
 {
   static int door1 = DOOR_OPEN_1;
   static int door2 = DOOR_CLOSE_2;
-  static unsigned long door_delay = 0;
-  int x, start, stepsize = door.step_offset;
-  unsigned long door_delay_value = door.step_delay;
+  unsigned long door_delay = 0;
+  unsigned long door_delay_value;
+  int stepsize = 1;
 
   if (door_state == DOOR_GET_STATE)
     return(door1 | door2);
@@ -2430,9 +2312,12 @@ unsigned int MoveDoor(unsigned int door_state)
   else if (door2 == DOOR_CLOSE_2 && door_state & DOOR_CLOSE_2)
     door_state &= ~DOOR_CLOSE_2;
 
+  door_delay_value = (door_state & DOOR_ACTION_1 ? door_1.step_delay :
+                     door_2.step_delay);
+
   if (setup.quick_doors)
   {
-    stepsize = 20;
+    stepsize = 20;             /* must be choosen to always draw last frame */
     door_delay_value = 0;
 
     StopSound(SND_DOOR_OPENING);
@@ -2447,6 +2332,13 @@ unsigned int MoveDoor(unsigned int door_state)
 
   if (door_state & DOOR_ACTION)
   {
+    boolean door_1_done = !(door_state & DOOR_ACTION_1);
+    boolean door_2_done = !(door_state & DOOR_ACTION_2);
+    int start = ((door_state & DOOR_NO_DELAY) ? DXSIZE : 0);
+    int end = (door_state & DOOR_ACTION_1 &&
+              door_1.anim_mode == ANIM_VERTICAL ? DYSIZE : DXSIZE);
+    int x;
+
     if (!(door_state & DOOR_NO_DELAY))
     {
       /* opening door sound has priority over simultaneously closing door */
@@ -2456,96 +2348,177 @@ unsigned int MoveDoor(unsigned int door_state)
        PlaySoundStereo(SND_DOOR_CLOSING, SOUND_MIDDLE);
     }
 
-    start = ((door_state & DOOR_NO_DELAY) ? DXSIZE : 0);
-
-    for(x=start; x<=DXSIZE; x+=stepsize)
+    for(x = start; x <= end && !(door_1_done && door_2_done); x += stepsize)
     {
       Bitmap *bitmap = graphic_info[IMG_GLOBAL_DOOR].bitmap;
       GC gc = bitmap->stored_clip_gc;
 
-      if (!(door_state & DOOR_NO_DELAY))
-       WaitUntilDelayReached(&door_delay, door_delay_value);
-
       if (door_state & DOOR_ACTION_1)
       {
-       int i = (door_state & DOOR_OPEN_1 ? DXSIZE-x : x);
-       int j = (DXSIZE - i) / 3;
-
-       BlitBitmap(bitmap_db_door, drawto,
-                  DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY1 + i/2,
-                  DXSIZE,DYSIZE - i/2, DX, DY);
-
-       ClearRectangle(drawto, DX, DY + DYSIZE - i/2, DXSIZE,i/2);
-
-       SetClipOrigin(bitmap, gc, DX - i, (DY + j) - DOOR_GFX_PAGEY1);
-       BlitBitmapMasked(bitmap, drawto,
-                        DXSIZE, DOOR_GFX_PAGEY1, i, 77,
-                        DX + DXSIZE - i, DY + j);
-       BlitBitmapMasked(bitmap, drawto,
-                        DXSIZE, DOOR_GFX_PAGEY1 + 140, i, 63,
-                        DX + DXSIZE - i, DY + 140 + j);
-       SetClipOrigin(bitmap, gc, DX - DXSIZE + i, DY - (DOOR_GFX_PAGEY1 + j));
-       BlitBitmapMasked(bitmap, drawto,
-                        DXSIZE - i, DOOR_GFX_PAGEY1 + j, i, 77 - j,
-                        DX, DY);
-       BlitBitmapMasked(bitmap, drawto,
-                        DXSIZE-i, DOOR_GFX_PAGEY1 + 140, i, 63,
-                        DX, DY + 140 - j);
-
-       BlitBitmapMasked(bitmap, drawto,
-                        DXSIZE - i, DOOR_GFX_PAGEY1 + 77, i, 63,
-                        DX, DY + 77 - j);
-       BlitBitmapMasked(bitmap, drawto,
-                        DXSIZE - i, DOOR_GFX_PAGEY1 + 203, i, 77,
-                        DX, DY + 203 - j);
-       SetClipOrigin(bitmap, gc, DX - i, (DY + j) - DOOR_GFX_PAGEY1);
-       BlitBitmapMasked(bitmap, drawto,
-                        DXSIZE, DOOR_GFX_PAGEY1 + 77, i, 63,
-                        DX + DXSIZE - i, DY + 77 + j);
-       BlitBitmapMasked(bitmap, drawto,
-                        DXSIZE, DOOR_GFX_PAGEY1 + 203, i, 77 - j,
-                        DX + DXSIZE - i, DY + 203 + j);
+       int a = MIN(x * door_1.step_offset, end);
+       int i = (door_state & DOOR_OPEN_1 ? end - a : a);
+
+       if (x <= a)
+       {
+         BlitBitmap(bitmap_db_door, drawto,
+                    DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY1 + i / 2,
+                    DXSIZE,DYSIZE - i / 2, DX, DY);
+
+         ClearRectangle(drawto, DX, DY + DYSIZE - i / 2, DXSIZE, i / 2);
+       }
+
+       if (door_1.anim_mode == ANIM_HORIZONTAL && x <= DXSIZE)
+       {
+         int src1_x = DXSIZE,          src1_y = DOOR_GFX_PAGEY1;
+         int dst1_x = DX + DXSIZE - i, dst1_y = DY;
+         int src2_x = DXSIZE - i,      src2_y = DOOR_GFX_PAGEY1;
+         int dst2_x = DX,              dst2_y = DY;
+         int width = i, height = DYSIZE;
+
+         SetClipOrigin(bitmap, gc, dst1_x - src1_x, dst1_y - src1_y);
+         BlitBitmapMasked(bitmap, drawto, src1_x, src1_y, width, height,
+                          dst1_x, dst1_y);
+
+         SetClipOrigin(bitmap, gc, dst2_x - src2_x, dst2_y - src2_y);
+         BlitBitmapMasked(bitmap, drawto, src2_x, src2_y, width, height,
+                          dst2_x, dst2_y);
+       }
+       else if (door_1.anim_mode == ANIM_VERTICAL && x <= DYSIZE)
+       {
+         int src1_x = DXSIZE,          src1_y = DOOR_GFX_PAGEY1;
+         int dst1_x = DX,              dst1_y = DY + DYSIZE - i;
+         int src2_x = 0,               src2_y = DOOR_GFX_PAGEY1 + DYSIZE - i;
+         int dst2_x = DX,              dst2_y = DY;
+         int width = DXSIZE, height = i;
+
+         SetClipOrigin(bitmap, gc, dst1_x - src1_x, dst1_y - src1_y);
+         BlitBitmapMasked(bitmap, drawto, src1_x, src1_y, width, height,
+                          dst1_x, dst1_y);
+
+         SetClipOrigin(bitmap, gc, dst2_x - src2_x, dst2_y - src2_y);
+         BlitBitmapMasked(bitmap, drawto, src2_x, src2_y, width, height,
+                          dst2_x, dst2_y);
+       }
+       else if (x <= DXSIZE)   /* ANIM_DEFAULT */
+       {
+         int j = (door_1.anim_mode == ANIM_DEFAULT ? (DXSIZE - i) / 3 : 0);
+
+         SetClipOrigin(bitmap, gc, DX - i, (DY + j) - DOOR_GFX_PAGEY1);
+         BlitBitmapMasked(bitmap, drawto,
+                          DXSIZE, DOOR_GFX_PAGEY1, i, 77,
+                          DX + DXSIZE - i, DY + j);
+         BlitBitmapMasked(bitmap, drawto,
+                          DXSIZE, DOOR_GFX_PAGEY1 + 140, i, 63,
+                          DX + DXSIZE - i, DY + 140 + j);
+         SetClipOrigin(bitmap, gc, DX - DXSIZE + i,
+                       DY - (DOOR_GFX_PAGEY1 + j));
+         BlitBitmapMasked(bitmap, drawto,
+                          DXSIZE - i, DOOR_GFX_PAGEY1 + j, i, 77 - j,
+                          DX, DY);
+         BlitBitmapMasked(bitmap, drawto,
+                          DXSIZE-i, DOOR_GFX_PAGEY1 + 140, i, 63,
+                          DX, DY + 140 - j);
+
+         BlitBitmapMasked(bitmap, drawto,
+                          DXSIZE - i, DOOR_GFX_PAGEY1 + 77, i, 63,
+                          DX, DY + 77 - j);
+         BlitBitmapMasked(bitmap, drawto,
+                          DXSIZE - i, DOOR_GFX_PAGEY1 + 203, i, 77,
+                          DX, DY + 203 - j);
+         SetClipOrigin(bitmap, gc, DX - i, (DY + j) - DOOR_GFX_PAGEY1);
+         BlitBitmapMasked(bitmap, drawto,
+                          DXSIZE, DOOR_GFX_PAGEY1 + 77, i, 63,
+                          DX + DXSIZE - i, DY + 77 + j);
+         BlitBitmapMasked(bitmap, drawto,
+                          DXSIZE, DOOR_GFX_PAGEY1 + 203, i, 77 - j,
+                          DX + DXSIZE - i, DY + 203 + j);
+       }
 
        redraw_mask |= REDRAW_DOOR_1;
+       door_1_done = (a == end);
       }
 
       if (door_state & DOOR_ACTION_2)
       {
-       int i = (door_state & DOOR_OPEN_2 ? VXSIZE - x : x);
-       int j = (VXSIZE - i) / 3;
-
-       BlitBitmap(bitmap_db_door, drawto,
-                  DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY2 + i/2,
-                  VXSIZE, VYSIZE - i/2, VX, VY);
-
-       ClearRectangle(drawto, VX, VY + VYSIZE-i/2, VXSIZE, i/2);
-
-       SetClipOrigin(bitmap, gc, VX - i, (VY + j) - DOOR_GFX_PAGEY2);
-       BlitBitmapMasked(bitmap, drawto,
-                        VXSIZE, DOOR_GFX_PAGEY2, i, VYSIZE / 2,
-                        VX + VXSIZE-i, VY+j);
-       SetClipOrigin(bitmap, gc,
-                     VX - VXSIZE + i, VY - (DOOR_GFX_PAGEY2 + j));
-       BlitBitmapMasked(bitmap, drawto,
-                        VXSIZE - i, DOOR_GFX_PAGEY2 + j, i, VYSIZE / 2 - j,
-                        VX, VY);
-
-       BlitBitmapMasked(bitmap, drawto,
-                        VXSIZE - i, DOOR_GFX_PAGEY2 + VYSIZE / 2,
-                        i, VYSIZE / 2, VX, VY + VYSIZE / 2 - j);
-       SetClipOrigin(bitmap, gc, VX - i, (VY + j) - DOOR_GFX_PAGEY2);
-       BlitBitmapMasked(bitmap, drawto,
-                        VXSIZE, DOOR_GFX_PAGEY2 + VYSIZE / 2,
-                        i, VYSIZE / 2 - j,
-                        VX + VXSIZE - i, VY + VYSIZE / 2 + j);
+       int a = MIN(x * door_2.step_offset, VXSIZE);
+       int i = (door_state & DOOR_OPEN_2 ? VXSIZE - a : a);
+
+       if (x <= VYSIZE)
+       {
+         BlitBitmap(bitmap_db_door, drawto,
+                    DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY2 + i / 2,
+                    VXSIZE, VYSIZE - i / 2, VX, VY);
+
+         ClearRectangle(drawto, VX, VY + VYSIZE - i / 2, VXSIZE, i / 2);
+       }
+
+       if (door_2.anim_mode == ANIM_HORIZONTAL && x <= VXSIZE)
+       {
+         int src1_x = VXSIZE,          src1_y = DOOR_GFX_PAGEY2;
+         int dst1_x = VX + VXSIZE - i, dst1_y = VY;
+         int src2_x = VXSIZE - i,      src2_y = DOOR_GFX_PAGEY2;
+         int dst2_x = VX,              dst2_y = VY;
+         int width = i, height = VYSIZE;
+
+         SetClipOrigin(bitmap, gc, dst1_x - src1_x, dst1_y - src1_y);
+         BlitBitmapMasked(bitmap, drawto, src1_x, src1_y, width, height,
+                          dst1_x, dst1_y);
+
+         SetClipOrigin(bitmap, gc, dst2_x - src2_x, dst2_y - src2_y);
+         BlitBitmapMasked(bitmap, drawto, src2_x, src2_y, width, height,
+                          dst2_x, dst2_y);
+       }
+       else if (door_2.anim_mode == ANIM_VERTICAL && x <= VYSIZE)
+       {
+         int src1_x = VXSIZE,          src1_y = DOOR_GFX_PAGEY2;
+         int dst1_x = VX,              dst1_y = VY + VYSIZE - i;
+         int src2_x = 0,               src2_y = DOOR_GFX_PAGEY2 + VYSIZE - i;
+         int dst2_x = VX,              dst2_y = VY;
+         int width = VXSIZE, height = i;
+
+         SetClipOrigin(bitmap, gc, dst1_x - src1_x, dst1_y - src1_y);
+         BlitBitmapMasked(bitmap, drawto, src1_x, src1_y, width, height,
+                          dst1_x, dst1_y);
+
+         SetClipOrigin(bitmap, gc, dst2_x - src2_x, dst2_y - src2_y);
+         BlitBitmapMasked(bitmap, drawto, src2_x, src2_y, width, height,
+                          dst2_x, dst2_y);
+       }
+       else if (x <= VXSIZE)   /* ANIM_DEFAULT */
+       {
+         int j = (door_2.anim_mode == ANIM_DEFAULT ? (VXSIZE - i) / 3 : 0);
+
+         SetClipOrigin(bitmap, gc, VX - i, (VY + j) - DOOR_GFX_PAGEY2);
+         BlitBitmapMasked(bitmap, drawto,
+                          VXSIZE, DOOR_GFX_PAGEY2, i, VYSIZE / 2,
+                          VX + VXSIZE - i, VY + j);
+         SetClipOrigin(bitmap, gc,
+                       VX - VXSIZE + i, VY - (DOOR_GFX_PAGEY2 + j));
+         BlitBitmapMasked(bitmap, drawto,
+                          VXSIZE - i, DOOR_GFX_PAGEY2 + j, i, VYSIZE / 2 - j,
+                          VX, VY);
+
+         BlitBitmapMasked(bitmap, drawto,
+                          VXSIZE - i, DOOR_GFX_PAGEY2 + VYSIZE / 2,
+                          i, VYSIZE / 2, VX, VY + VYSIZE / 2 - j);
+         SetClipOrigin(bitmap, gc, VX - i, (VY + j) - DOOR_GFX_PAGEY2);
+         BlitBitmapMasked(bitmap, drawto,
+                          VXSIZE, DOOR_GFX_PAGEY2 + VYSIZE / 2,
+                          i, VYSIZE / 2 - j,
+                          VX + VXSIZE - i, VY + VYSIZE / 2 + j);
+       }
 
        redraw_mask |= REDRAW_DOOR_2;
+       door_2_done = (a == VXSIZE);
       }
 
       BackToFront();
 
       if (game_status == GAME_MODE_MAIN)
        DoAnimation();
+
+      if (!(door_state & DOOR_NO_DELAY))
+       WaitUntilDelayReached(&door_delay, door_delay_value);
     }
   }