rnd-20021006-1-src
[rocksndiamonds.git] / src / main.c
index da3239dfc0b66ed1f21daaecae5e6d1a890ce133..23660fbd5f98dc942c7d28d4fb1bb8dd66252991 100644 (file)
@@ -42,6 +42,7 @@ short         Store[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          Frame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+short          GfxAction[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 boolean                Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          JustStopped[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
@@ -139,41 +140,43 @@ char *sound_name[NUM_SOUNDS] =
 /* this is used to reduce memory usage of the different animation types */
 int graphics_action_mapping[] =
 {
-  0,           /* GFX_ACTION_UNKNOWN           (0)  */
-  0,           /* GFX_ACTION_DEFAULT           (1)  */
-  0,           /* GFX_ACTION_WAITING           (2)  */
-
-  1,           /* GFX_ACTION_FALLING           (3)  */
-  2,           /* GFX_ACTION_MOVING            (4)  */
-  3,           /* GFX_ACTION_DIGGING           (5)  */
-  4,           /* GFX_ACTION_SNAPPING          (6)  */
-  5,           /* GFX_ACTION_COLLECTING        (7)  */
-  6,           /* GFX_ACTION_PUSHING           (8)  */
-
-  7,           /* GFX_ACTION_PASSING           (9)  */
-  7,           /* GFX_ACTION_IMPACT            (10) */
-  7,           /* GFX_ACTION_CRACKING          (11) */
-  7,           /* GFX_ACTION_ACTIVATING        (12) */
-  7,           /* GFX_ACTION_EATING            (13) */
-  7,           /* GFX_ACTION_ATTACKING         (14) */
-  7,           /* GFX_ACTION_GROWING           (15) */
-  7            /* GFX_ACTION_OTHER             (14) */
+  0,           /* GFX_ACTION_DEFAULT           (0)  */
+  0,           /* GFX_ACTION_WAITING           (1)  */
+
+  1,           /* GFX_ACTION_FALLING           (2)  */
+  2,           /* GFX_ACTION_MOVING            (3)  */
+  3,           /* GFX_ACTION_DIGGING           (4)  */
+  4,           /* GFX_ACTION_SNAPPING          (5)  */
+  5,           /* GFX_ACTION_COLLECTING        (6)  */
+  6,           /* GFX_ACTION_PUSHING           (7)  */
+
+  7,           /* GFX_ACTION_PASSING           (8)  */
+  7,           /* GFX_ACTION_IMPACT            (9) */
+  7,           /* GFX_ACTION_CRACKING          (10) */
+  7,           /* GFX_ACTION_ACTIVATING        (11) */
+  7,           /* GFX_ACTION_EATING            (12) */
+  7,           /* GFX_ACTION_ATTACKING         (13) */
+  7,           /* GFX_ACTION_GROWING           (14) */
+  7            /* GFX_ACTION_OTHER             (15) */
 };
 
 struct ConfigInfo image_config_suffix[] =
 {
   { ".xpos",                           "0"                     },
   { ".ypos",                           "0"                     },
+  { ".offset",                         "32"                    },
+  { ".vertical",                       "0"                     },
   { ".frames",                         "1"                     },
 #if 0
   { ".start_frame",                    "-1"                    },
 #endif
   { ".delay",                          "1"                     },
-  { ".pingpong",                       "0"                     },
-  { ".pingpong2",                      "0"                     },
-  { ".reverse",                                "0"                     },
+  { ".mode_loop",                      "0"                     },
+  { ".mode_linear",                    "0"                     },
+  { ".mode_pingpong",                  "0"                     },
+  { ".mode_pingpong2",                 "0"                     },
+  { ".mode_reverse",                   "0"                     },
   { ".global_sync",                    "0"                     },
-  { ".vertical",                       "0"                     },
 
   { NULL,                              NULL                    }
 };
@@ -209,6 +212,8 @@ struct ConfigInfo image_config[] =
   { "bd_diamond.xpos",                         "0"                     },
   { "bd_diamond.ypos",                         "10"                    },
   { "bd_diamond.frames",                       "4"                     },
+  { "bd_diamond.delay",                                "4"                     },
+  { "bd_diamond.mode_reverse",                 "1"                     },
   { "bd_diamond.falling",                      "RocksElements.pcx"     },
   { "bd_diamond.falling.xpos",                 "3"                     },
   { "bd_diamond.falling.ypos",                 "10"                    },
@@ -222,18 +227,26 @@ struct ConfigInfo image_config[] =
   { "bd_magic_wall.active.xpos",               "12"                    },
   { "bd_magic_wall.active.ypos",               "10"                    },
   { "bd_magic_wall.active.frames",             "4"                     },
+  { "bd_magic_wall.active.mode_reverse",       "1"                     },
+  { "bd_magic_wall.active.delay",              "4"                     },
   { "bd_magic_wall.filling",                   "RocksElements.pcx"     },
   { "bd_magic_wall.filling.xpos",              "12"                    },
   { "bd_magic_wall.filling.ypos",              "10"                    },
   { "bd_magic_wall.filling.frames",            "4"                     },
+  { "bd_magic_wall.filling.mode_reverse",      "1"                     },
+  { "bd_magic_wall.filling.delay",             "4"                     },
   { "bd_magic_wall.full",                      "RocksElements.pcx"     },
   { "bd_magic_wall.full.xpos",                 "12"                    },
   { "bd_magic_wall.full.ypos",                 "10"                    },
   { "bd_magic_wall.full.frames",               "4"                     },
+  { "bd_magic_wall.full.mode_reverse",         "1"                     },
+  { "bd_magic_wall.full.delay",                        "4"                     },
   { "bd_magic_wall.emptying",                  "RocksElements.pcx"     },
   { "bd_magic_wall.emptying.xpos",             "12"                    },
   { "bd_magic_wall.emptying.ypos",             "10"                    },
   { "bd_magic_wall.emptying.frames",           "4"                     },
+  { "bd_magic_wall.emptying.mode_reverse",     "1"                     },
+  { "bd_magic_wall.emptying.delay",            "4"                     },
   { "bd_magic_wall.dead",                      "RocksElements.pcx"     },
   { "bd_magic_wall.dead.xpos",                 "12"                    },
   { "bd_magic_wall.dead.ypos",                 "10"                    },
@@ -264,13 +277,13 @@ struct ConfigInfo image_config[] =
   { "bd_butterfly.xpos",                       "4"                     },
   { "bd_butterfly.ypos",                       "12"                    },
   { "bd_butterfly.frames",                     "2"                     },
-  { "bd_butterfly.pingpong",                   "1"                     },
+  { "bd_butterfly.mode_pingpong",              "1"                     },
   { "bd_butterfly.delay",                      "4"                     },
   { "bd_butterfly.moving",                     "RocksElements.pcx"     },
   { "bd_butterfly.moving.xpos",                        "4"                     },
   { "bd_butterfly.moving.ypos",                        "12"                    },
   { "bd_butterfly.moving.frames",              "2"                     },
-  { "bd_butterfly.moving.pingpong",            "1"                     },
+  { "bd_butterfly.moving.mode_pingpong",       "1"                     },
   { "bd_butterfly.moving.delay",               "4"                     },
   { "bd_butterfly_right",                      "RocksElements.pcx"     },
   { "bd_butterfly_right.xpos",                 "8"                     },
@@ -293,13 +306,13 @@ struct ConfigInfo image_config[] =
   { "bd_firefly.xpos",                         "6"                     },
   { "bd_firefly.ypos",                         "12"                    },
   { "bd_firefly.frames",                       "2"                     },
-  { "bd_firefly.pingpong",                     "1"                     },
+  { "bd_firefly.mode_pingpong",                        "1"                     },
   { "bd_firefly.delay",                                "4"                     },
   { "bd_firefly.moving",                       "RocksElements.pcx"     },
   { "bd_firefly.moving.xpos",                  "6"                     },
   { "bd_firefly.moving.ypos",                  "12"                    },
   { "bd_firefly.moving.frames",                        "2"                     },
-  { "bd_firefly.moving.pingpong",              "1"                     },
+  { "bd_firefly.moving.mode_pingpong",         "1"                     },
   { "bd_firefly.moving.delay",                 "4"                     },
   { "bd_firefly_right",                                "RocksElements.pcx"     },
   { "bd_firefly_right.xpos",                   "12"                    },
@@ -355,12 +368,12 @@ struct ConfigInfo image_config[] =
   { "sp_murphy_left.moving.xpos",              "8"                     },
   { "sp_murphy_left.moving.ypos",              "0"                     },
   { "sp_murphy_left.moving.frames",            "3"                     },
-  { "sp_murphy_left.moving.pingpong",          "1"                     },
+  { "sp_murphy_left.moving.mode_pingpong",     "1"                     },
   { "sp_murphy_left.digging",                  "RocksSP.pcx"           },
   { "sp_murphy_left.digging.xpos",             "8"                     },
   { "sp_murphy_left.digging.ypos",             "0"                     },
   { "sp_murphy_left.digging.frames",           "3"                     },
-  { "sp_murphy_left.digging.pingpong",         "1"                     },
+  { "sp_murphy_left.digging.mode_pingpong",    "1"                     },
   { "sp_murphy_left.pushing",                  "RocksSP.pcx"           },
   { "sp_murphy_left.pushing.xpos",             "11"                    },
   { "sp_murphy_left.pushing.ypos",             "1"                     },
@@ -378,12 +391,12 @@ struct ConfigInfo image_config[] =
   { "sp_murphy_right.moving.xpos",             "11"                    },
   { "sp_murphy_right.moving.ypos",             "0"                     },
   { "sp_murphy_right.moving.frames",           "3"                     },
-  { "sp_murphy_right.moving.pingpong",         "1"                     },
+  { "sp_murphy_right.moving.mode_pingpong",    "1"                     },
   { "sp_murphy_right.digging",                 "RocksSP.pcx"           },
   { "sp_murphy_right.digging.xpos",            "11"                    },
   { "sp_murphy_right.digging.ypos",            "0"                     },
   { "sp_murphy_right.digging.frames",          "3"                     },
-  { "sp_murphy_right.digging.pingpong",                "1"                     },
+  { "sp_murphy_right.digging.mode_pingpong",   "1"                     },
   { "sp_murphy_right.pushing",                 "RocksSP.pcx"           },
   { "sp_murphy_right.pushing.xpos",            "10"                    },
   { "sp_murphy_right.pushing.ypos",            "1"                     },
@@ -560,22 +573,22 @@ struct ConfigInfo image_config[] =
   { "sp_sniksnak_left.xpos",                   "8"                     },
   { "sp_sniksnak_left.ypos",                   "8"                     },
   { "sp_sniksnak_left.frames",                 "4"                     },
-  { "sp_sniksnak_left.pingpong2",              "1"                     },
+  { "sp_sniksnak_left.mode_pingpong2",         "1"                     },
   { "sp_sniksnak_right",                       "RocksSP.pcx"           },
   { "sp_sniksnak_right.xpos",                  "12"                    },
   { "sp_sniksnak_right.ypos",                  "8"                     },
   { "sp_sniksnak_right.frames",                        "4"                     },
-  { "sp_sniksnak_right.pingpong2",             "1"                     },
+  { "sp_sniksnak_right.mode_pingpong2",                "1"                     },
   { "sp_sniksnak_up",                          "RocksSP.pcx"           },
   { "sp_sniksnak_up.xpos",                     "8"                     },
   { "sp_sniksnak_up.ypos",                     "9"                     },
   { "sp_sniksnak_up.frames",                   "4"                     },
-  { "sp_sniksnak_up.pingpong2",                        "1"                     },
+  { "sp_sniksnak_up.mode_pingpong2",           "1"                     },
   { "sp_sniksnak_down",                                "RocksSP.pcx"           },
   { "sp_sniksnak_down.xpos",                   "12"                    },
   { "sp_sniksnak_down.ypos",                   "9"                     },
   { "sp_sniksnak_down.frames",                 "4"                     },
-  { "sp_sniksnak_down.pingpong2",              "1"                     },
+  { "sp_sniksnak_down.mode_pingpong2",         "1"                     },
 
   { "sp_electron",                             "RocksSP.pcx"           },
   { "sp_electron.xpos",                                "8"                     },
@@ -588,10 +601,12 @@ struct ConfigInfo image_config[] =
   { "sp_terminal.xpos",                                "8"                     },
   { "sp_terminal.ypos",                                "11"                    },
   { "sp_terminal.frames",                      "7"                     },
+  { "sp_terminal.delay",                       "12"                    },
   { "sp_terminal.active",                      "RocksSP.pcx"           },
   { "sp_terminal.active.xpos",                 "8"                     },
   { "sp_terminal.active.ypos",                 "12"                    },
   { "sp_terminal.active.frames",               "7"                     },
+  { "sp_terminal.active.delay",                        "4"                     },
 
   { "sp_buggy_base",                           "RocksSP.pcx"           },
   { "sp_buggy_base.xpos",                      "1"                     },
@@ -727,6 +742,8 @@ struct ConfigInfo image_config[] =
   { "nut.cracking.xpos",                       "13"                    },
   { "nut.cracking.ypos",                       "1"                     },
   { "nut.cracking.frames",                     "3"                     },
+  { "nut.cracking.delay",                      "2"                     },
+  { "nut.cracking.mode_linear",                        "1"                     },
 
   { "dynamite",                                        "RocksElements.pcx"     },
   { "dynamite.xpos",                           "0"                     },
@@ -736,6 +753,8 @@ struct ConfigInfo image_config[] =
   { "dynamite.active.xpos",                    "1"                     },
   { "dynamite.active.ypos",                    "3"                     },
   { "dynamite.active.frames",                  "7"                     },
+  { "dynamite.active.delay",                   "12"                    },
+  { "dynamite.active.mode_linear",             "1"                     },
 
   { "wall_emerald",                            "RocksElements.pcx"     },
   { "wall_emerald.xpos",                       "4"                     },
@@ -793,7 +812,7 @@ struct ConfigInfo image_config[] =
   { "yamyam.xpos",                             "0"                     },
   { "yamyam.ypos",                             "5"                     },
   { "yamyam.frames",                           "4"                     },
-  { "yamyam.pingpong",                         "1"                     },
+  { "yamyam.mode_pingpong2",                   "1"                     },
   { "yamyam.moving",                           "RocksElements.pcx"     },
   { "yamyam.moving.xpos",                      "0"                     },
   { "yamyam.moving.ypos",                      "5"                     },
@@ -803,7 +822,7 @@ struct ConfigInfo image_config[] =
   { "robot.xpos",                              "4"                     },
   { "robot.ypos",                              "5"                     },
   { "robot.frames",                            "4"                     },
-  { "robot.pingpong",                          "1"                     },
+  { "robot.mode_pingpong2",                    "1"                     },
 
   { "robot_wheel",                             "RocksElements.pcx"     },
   { "robot_wheel.xpos",                                "0"                     },
@@ -822,18 +841,26 @@ struct ConfigInfo image_config[] =
   { "magic_wall.active.xpos",                  "0"                     },
   { "magic_wall.active.ypos",                  "8"                     },
   { "magic_wall.active.frames",                        "4"                     },
+  { "magic_wall.active.mode_reverse",          "1"                     },
+  { "magic_wall.active.delay",                 "4"                     },
   { "magic_wall.filling",                      "RocksElements.pcx"     },
   { "magic_wall.filling.xpos",                 "0"                     },
   { "magic_wall.filling.ypos",                 "8"                     },
   { "magic_wall.filling.frames",               "4"                     },
+  { "magic_wall.filling.mode_reverse",         "1"                     },
+  { "magic_wall.filling.delay",                        "4"                     },
   { "magic_wall.full",                         "RocksElements.pcx"     },
   { "magic_wall.full.xpos",                    "0"                     },
   { "magic_wall.full.ypos",                    "8"                     },
   { "magic_wall.full.frames",                  "4"                     },
+  { "magic_wall.full.mode_reverse",            "1"                     },
+  { "magic_wall.full.delay",                   "4"                     },
   { "magic_wall.emptying",                     "RocksElements.pcx"     },
   { "magic_wall.emptying.xpos",                        "0"                     },
   { "magic_wall.emptying.ypos",                        "8"                     },
   { "magic_wall.emptying.frames",              "4"                     },
+  { "magic_wall.emptying.mode_reverse",                "1"                     },
+  { "magic_wall.emptying.delay",               "4"                     },
   { "magic_wall.dead",                         "RocksElements.pcx"     },
   { "magic_wall.dead.xpos",                    "0"                     },
   { "magic_wall.dead.ypos",                    "8"                     },
@@ -881,15 +908,18 @@ struct ConfigInfo image_config[] =
   { "acid.xpos",                               "12"                    },
   { "acid.ypos",                               "7"                     },
   { "acid.frames",                             "4"                     },
+  { "acid.delay",                              "10"                    },
 
   { "acid.splashing_left",                     "RocksHeroes.pcx"       },
   { "acid.splashing_left.xpos",                        "8"                     },
   { "acid.splashing_left.ypos",                        "10"                    },
   { "acid.splashing_left.frames",              "4"                     },
+  { "acid.splashing_left.delay",               "2"                     },
   { "acid.splashing_right",                    "RocksHeroes.pcx"       },
   { "acid.splashing_right.xpos",               "12"                    },
   { "acid.splashing_right.ypos",               "10"                    },
   { "acid.splashing_right.frames",             "4"                     },
+  { "acid.splashing_right.delay",              "2"                     },
 
   { "amoeba_drop",                             "RocksElements.pcx"     },
   { "amoeba_drop.xpos",                                "5"                     },
@@ -899,22 +929,79 @@ struct ConfigInfo image_config[] =
   { "amoeba.creating.xpos",                    "5"                     },
   { "amoeba.creating.ypos",                    "6"                     },
   { "amoeba.creating.frames",                  "3"                     },
-  { "amoeba.part1",                            "RocksElements.pcx"     },
-  { "amoeba.part1.xpos",                       "8"                     },
-  { "amoeba.part1.ypos",                       "6"                     },
-  { "amoeba.part1.frames",                     "1"                     },
-  { "amoeba.part2",                            "RocksElements.pcx"     },
-  { "amoeba.part2.xpos",                       "9"                     },
-  { "amoeba.part2.ypos",                       "6"                     },
-  { "amoeba.part2.frames",                     "1"                     },
-  { "amoeba.part3",                            "RocksElements.pcx"     },
-  { "amoeba.part3.xpos",                       "10"                    },
-  { "amoeba.part3.ypos",                       "6"                     },
-  { "amoeba.part3.frames",                     "1"                     },
-  { "amoeba.part4",                            "RocksElements.pcx"     },
-  { "amoeba.part4.xpos",                       "11"                    },
-  { "amoeba.part4.ypos",                       "6"                     },
-  { "amoeba.part4.frames",                     "1"                     },
+  { "amoeba.creating.delay",                   "2"                     },
+  { "amoeba.creating.mode_linear",             "1"                     },
+  { "amoeba.shrinking",                                "RocksElements.pcx"     },
+  { "amoeba.shrinking.xpos",                   "5"                     },
+  { "amoeba.shrinking.ypos",                   "6"                     },
+  { "amoeba.shrinking.frames",                 "3"                     },
+  { "amoeba.shrinking.delay",                  "2"                     },
+  { "amoeba.shrinking.mode_linear",            "1"                     },
+  { "amoeba.shrinking.mode_reverse",           "1"                     },
+  { "amoeba_wet",                              "RocksElements.pcx"     },
+  { "amoeba_wet.xpos",                         "8"                     },
+  { "amoeba_wet.ypos",                         "6"                     },
+  { "amoeba_wet.frames",                       "1"                     },
+  { "amoeba_wet.part1",                                "RocksElements.pcx"     },
+  { "amoeba_wet.part1.xpos",                   "8"                     },
+  { "amoeba_wet.part1.ypos",                   "6"                     },
+  { "amoeba_wet.part1.frames",                 "1"                     },
+  { "amoeba_wet.part2",                                "RocksElements.pcx"     },
+  { "amoeba_wet.part2.xpos",                   "9"                     },
+  { "amoeba_wet.part2.ypos",                   "6"                     },
+  { "amoeba_wet.part2.frames",                 "1"                     },
+  { "amoeba_wet.part3",                                "RocksElements.pcx"     },
+  { "amoeba_wet.part3.xpos",                   "10"                    },
+  { "amoeba_wet.part3.ypos",                   "6"                     },
+  { "amoeba_wet.part3.frames",                 "1"                     },
+  { "amoeba_wet.part4",                                "RocksElements.pcx"     },
+  { "amoeba_wet.part4.xpos",                   "11"                    },
+  { "amoeba_wet.part4.ypos",                   "6"                     },
+  { "amoeba_wet.part4.frames",                 "1"                     },
+  { "amoeba_dry",                              "RocksElements.pcx"     },
+  { "amoeba_dry.xpos",                         "8"                     },
+  { "amoeba_dry.ypos",                         "6"                     },
+  { "amoeba_dry.frames",                       "1"                     },
+  { "amoeba_dry.part1",                                "RocksElements.pcx"     },
+  { "amoeba_dry.part1.xpos",                   "8"                     },
+  { "amoeba_dry.part1.ypos",                   "6"                     },
+  { "amoeba_dry.part1.frames",                 "1"                     },
+  { "amoeba_dry.part2",                                "RocksElements.pcx"     },
+  { "amoeba_dry.part2.xpos",                   "9"                     },
+  { "amoeba_dry.part2.ypos",                   "6"                     },
+  { "amoeba_dry.part2.frames",                 "1"                     },
+  { "amoeba_dry.part3",                                "RocksElements.pcx"     },
+  { "amoeba_dry.part3.xpos",                   "10"                    },
+  { "amoeba_dry.part3.ypos",                   "6"                     },
+  { "amoeba_dry.part3.frames",                 "1"                     },
+  { "amoeba_dry.part4",                                "RocksElements.pcx"     },
+  { "amoeba_dry.part4.xpos",                   "11"                    },
+  { "amoeba_dry.part4.ypos",                   "6"                     },
+  { "amoeba_dry.part4.frames",                 "1"                     },
+  { "amoeba_full",                             "RocksElements.pcx"     },
+  { "amoeba_full.xpos",                                "8"                     },
+  { "amoeba_full.ypos",                                "6"                     },
+  { "amoeba_full.frames",                      "1"                     },
+  { "amoeba_full.part1",                       "RocksElements.pcx"     },
+  { "amoeba_full.part1.xpos",                  "8"                     },
+  { "amoeba_full.part1.ypos",                  "6"                     },
+  { "amoeba_full.part1.frames",                        "1"                     },
+  { "amoeba_full.part2",                       "RocksElements.pcx"     },
+  { "amoeba_full.part2.xpos",                  "9"                     },
+  { "amoeba_full.part2.ypos",                  "6"                     },
+  { "amoeba_full.part2.frames",                        "1"                     },
+  { "amoeba_full.part3",                       "RocksElements.pcx"     },
+  { "amoeba_full.part3.xpos",                  "10"                    },
+  { "amoeba_full.part3.ypos",                  "6"                     },
+  { "amoeba_full.part3.frames",                        "1"                     },
+  { "amoeba_full.part4",                       "RocksElements.pcx"     },
+  { "amoeba_full.part4.xpos",                  "11"                    },
+  { "amoeba_full.part4.ypos",                  "6"                     },
+  { "amoeba_full.part4.frames",                        "1"                     },
+  { "amoeba_dead",                             "RocksElements.pcx"     },
+  { "amoeba_dead.xpos",                                "12"                    },
+  { "amoeba_dead.ypos",                                "6"                     },
+  { "amoeba_dead.frames",                      "1"                     },
   { "amoeba_dead.part1",                       "RocksElements.pcx"     },
   { "amoeba_dead.part1.xpos",                  "12"                    },
   { "amoeba_dead.part1.ypos",                  "6"                     },
@@ -987,14 +1074,17 @@ struct ConfigInfo image_config[] =
   { "exit_closed.ypos",                                "11"                    },
   { "exit_closed.frames",                      "1"                     },
   { "exit.opening",                            "RocksElements.pcx"     },
-  { "exit.opening.xpos",                       "1"                     },
+  { "exit.opening.xpos",                       "0"                     },
   { "exit.opening.ypos",                       "11"                    },
-  { "exit.opening.frames",                     "4"                     },
+  { "exit.opening.frames",                     "5"                     },
+  { "exit.opening.delay",                      "6"                     },
+  { "exit.opening.mode_linear",                        "1"                     },
   { "exit_open",                               "RocksElements.pcx"     },
   { "exit_open.xpos",                          "4"                     },
   { "exit_open.ypos",                          "11"                    },
   { "exit_open.frames",                                "4"                     },
-  { "exit_open.pingpong",                      "1"                     },
+  { "exit_open.delay",                         "4"                     },
+  { "exit_open.mode_pingpong",                 "1"                     },
 
   /* images for Emerald Mine Club style elements and actions */
 
@@ -1006,7 +1096,8 @@ struct ConfigInfo image_config[] =
   { "balloon.moving.xpos",                     "12"                    },
   { "balloon.moving.ypos",                     "7"                     },
   { "balloon.moving.frames",                   "4"                     },
-  { "balloon.moving.pingpong",                 "1"                     },
+  { "balloon.moving.mode_pingpong",            "1"                     },
+  { "balloon.moving.delay",                    "2"                     },
 
   { "balloon_send_left",                       "RocksDC.pcx"           },
   { "balloon_send_left.xpos",                  "8"                     },
@@ -1126,6 +1217,7 @@ struct ConfigInfo image_config[] =
   { "conveyor_belt1_middle.active.xpos",       "0"                     },
   { "conveyor_belt1_middle.active.ypos",       "0"                     },
   { "conveyor_belt1_middle.active.frames",     "8"                     },
+  { "conveyor_belt1_middle.active.delay",      "2"                     },
   { "conveyor_belt1_left",                     "RocksDC.pcx"           },
   { "conveyor_belt1_left.xpos",                        "0"                     },
   { "conveyor_belt1_left.ypos",                        "1"                     },
@@ -1134,6 +1226,7 @@ struct ConfigInfo image_config[] =
   { "conveyor_belt1_left.active.xpos",         "0"                     },
   { "conveyor_belt1_left.active.ypos",         "1"                     },
   { "conveyor_belt1_left.active.frames",       "8"                     },
+  { "conveyor_belt1_left.active.delay",                "2"                     },
   { "conveyor_belt1_right",                    "RocksDC.pcx"           },
   { "conveyor_belt1_right.xpos",               "0"                     },
   { "conveyor_belt1_right.ypos",               "2"                     },
@@ -1142,6 +1235,7 @@ struct ConfigInfo image_config[] =
   { "conveyor_belt1_right.active.xpos",                "0"                     },
   { "conveyor_belt1_right.active.ypos",                "2"                     },
   { "conveyor_belt1_right.active.frames",      "8"                     },
+  { "conveyor_belt1_right.active.delay",       "2"                     },
   { "conveyor_belt1_switch_left",              "RocksDC.pcx"           },
   { "conveyor_belt1_switch_left.xpos",         "0"                     },
   { "conveyor_belt1_switch_left.ypos",         "12"                    },
@@ -1163,6 +1257,7 @@ struct ConfigInfo image_config[] =
   { "conveyor_belt2_middle.active.xpos",       "0"                     },
   { "conveyor_belt2_middle.active.ypos",       "3"                     },
   { "conveyor_belt2_middle.active.frames",     "8"                     },
+  { "conveyor_belt2_middle.active.delay",      "2"                     },
   { "conveyor_belt2_left",                     "RocksDC.pcx"           },
   { "conveyor_belt2_left.xpos",                        "0"                     },
   { "conveyor_belt2_left.ypos",                        "4"                     },
@@ -1171,6 +1266,7 @@ struct ConfigInfo image_config[] =
   { "conveyor_belt2_left.active.xpos",         "0"                     },
   { "conveyor_belt2_left.active.ypos",         "4"                     },
   { "conveyor_belt2_left.active.frames",       "8"                     },
+  { "conveyor_belt2_left.active.delay",                "2"                     },
   { "conveyor_belt2_right",                    "RocksDC.pcx"           },
   { "conveyor_belt2_right.xpos",               "0"                     },
   { "conveyor_belt2_right.ypos",               "5"                     },
@@ -1179,6 +1275,8 @@ struct ConfigInfo image_config[] =
   { "conveyor_belt2_right.active.xpos",                "0"                     },
   { "conveyor_belt2_right.active.ypos",                "5"                     },
   { "conveyor_belt2_right.active.frames",      "8"                     },
+  { "conveyor_belt2_right.active.delay",       "2"                     },
+  { "conveyor_belt2_right.active.delay",       "2"                     },
   { "conveyor_belt2_switch_left",              "RocksDC.pcx"           },
   { "conveyor_belt2_switch_left.xpos",         "1"                     },
   { "conveyor_belt2_switch_left.ypos",         "12"                    },
@@ -1200,6 +1298,7 @@ struct ConfigInfo image_config[] =
   { "conveyor_belt3_middle.active.xpos",       "0"                     },
   { "conveyor_belt3_middle.active.ypos",       "6"                     },
   { "conveyor_belt3_middle.active.frames",     "8"                     },
+  { "conveyor_belt3_middle.active.delay",      "2"                     },
   { "conveyor_belt3_left",                     "RocksDC.pcx"           },
   { "conveyor_belt3_left.xpos",                        "0"                     },
   { "conveyor_belt3_left.ypos",                        "7"                     },
@@ -1208,6 +1307,7 @@ struct ConfigInfo image_config[] =
   { "conveyor_belt3_left.active.xpos",         "0"                     },
   { "conveyor_belt3_left.active.ypos",         "7"                     },
   { "conveyor_belt3_left.active.frames",       "8"                     },
+  { "conveyor_belt3_left.active.delay",                "2"                     },
   { "conveyor_belt3_right",                    "RocksDC.pcx"           },
   { "conveyor_belt3_right.xpos",               "0"                     },
   { "conveyor_belt3_right.ypos",               "8"                     },
@@ -1216,6 +1316,8 @@ struct ConfigInfo image_config[] =
   { "conveyor_belt3_right.active.xpos",                "0"                     },
   { "conveyor_belt3_right.active.ypos",                "8"                     },
   { "conveyor_belt3_right.active.frames",      "8"                     },
+  { "conveyor_belt3_right.active.delay",       "2"                     },
+  { "conveyor_belt3_right.active.delay",       "2"                     },
   { "conveyor_belt3_switch_left",              "RocksDC.pcx"           },
   { "conveyor_belt3_switch_left.xpos",         "2"                     },
   { "conveyor_belt3_switch_left.ypos",         "12"                    },
@@ -1237,6 +1339,7 @@ struct ConfigInfo image_config[] =
   { "conveyor_belt4_middle.active.xpos",       "0"                     },
   { "conveyor_belt4_middle.active.ypos",       "9"                     },
   { "conveyor_belt4_middle.active.frames",     "8"                     },
+  { "conveyor_belt4_middle.active.delay",      "2"                     },
   { "conveyor_belt4_left",                     "RocksDC.pcx"           },
   { "conveyor_belt4_left.xpos",                        "0"                     },
   { "conveyor_belt4_left.ypos",                        "10"                    },
@@ -1245,6 +1348,7 @@ struct ConfigInfo image_config[] =
   { "conveyor_belt4_left.active.xpos",         "0"                     },
   { "conveyor_belt4_left.active.ypos",         "10"                    },
   { "conveyor_belt4_left.active.frames",       "8"                     },
+  { "conveyor_belt4_left.active.delay",                "2"                     },
   { "conveyor_belt4_right",                    "RocksDC.pcx"           },
   { "conveyor_belt4_right.xpos",               "0"                     },
   { "conveyor_belt4_right.ypos",               "11"                    },
@@ -1253,6 +1357,8 @@ struct ConfigInfo image_config[] =
   { "conveyor_belt4_right.active.xpos",                "0"                     },
   { "conveyor_belt4_right.active.ypos",                "11"                    },
   { "conveyor_belt4_right.active.frames",      "8"                     },
+  { "conveyor_belt4_right.active.delay",       "2"                     },
+  { "conveyor_belt4_right.active.delay",       "2"                     },
   { "conveyor_belt4_switch_left",              "RocksDC.pcx"           },
   { "conveyor_belt4_switch_left.xpos",         "3"                     },
   { "conveyor_belt4_switch_left.ypos",         "12"                    },
@@ -1322,28 +1428,31 @@ struct ConfigInfo image_config[] =
   { "extra_time.xpos",                         "8"                     },
   { "extra_time.ypos",                         "0"                     },
   { "extra_time.frames",                       "6"                     },
+  { "extra_time.delay",                                "4"                     },
 
   { "shield_normal",                           "RocksDC.pcx"           },
   { "shield_normal.xpos",                      "8"                     },
   { "shield_normal.ypos",                      "2"                     },
   { "shield_normal.frames",                    "6"                     },
+  { "shield_normal.delay",                     "4"                     },
 
   { "shield_deadly",                           "RocksDC.pcx"           },
   { "shield_deadly.xpos",                      "8"                     },
   { "shield_deadly.ypos",                      "1"                     },
   { "shield_deadly.frames",                    "6"                     },
+  { "shield_deadly.delay",                     "4"                     },
 
   { "shield_normal.active",                    "RocksHeroes.pcx"       },
   { "shield_normal.active.xpos",               "1"                     },
   { "shield_normal.active.ypos",               "13"                    },
   { "shield_normal.active.frames",             "3"                     },
-  { "shield_normal.active.pingpong",           "1"                     },
+  { "shield_normal.active.mode_pingpong",      "1"                     },
 
   { "shield_deadly.active",                    "RocksHeroes.pcx"       },
   { "shield_deadly.active.xpos",               "5"                     },
   { "shield_deadly.active.ypos",               "13"                    },
   { "shield_deadly.active.frames",             "3"                     },
-  { "shield_deadly.active.pingpong",           "1"                     },
+  { "shield_deadly.active.mode_pingpong",      "1"                     },
 
   { "switchgate_closed",                       "RocksDC.pcx"           },
   { "switchgate_closed.xpos",                  "8"                     },
@@ -1353,6 +1462,7 @@ struct ConfigInfo image_config[] =
   { "switchgate.opening.xpos",                 "8"                     },
   { "switchgate.opening.ypos",                 "5"                     },
   { "switchgate.opening.frames",               "5"                     },
+  { "switchgate.opening.delay",                        "6"                     },
   { "switchgate_open",                         "RocksDC.pcx"           },
   { "switchgate_open.xpos",                    "12"                    },
   { "switchgate_open.ypos",                    "5"                     },
@@ -1361,7 +1471,8 @@ struct ConfigInfo image_config[] =
   { "switchgate.closing.xpos",                 "8"                     },
   { "switchgate.closing.ypos",                 "5"                     },
   { "switchgate.closing.frames",               "5"                     },
-  { "switchgate.closing.reverse",              "1"                     },
+  { "switchgate.closing.delay",                        "6"                     },
+  { "switchgate.closing.mode_reverse",         "1"                     },
 
   { "timegate_closed",                         "RocksDC.pcx"           },
   { "timegate_closed.xpos",                    "8"                     },
@@ -1371,6 +1482,7 @@ struct ConfigInfo image_config[] =
   { "timegate.opening.xpos",                   "8"                     },
   { "timegate.opening.ypos",                   "6"                     },
   { "timegate.opening.frames",                 "5"                     },
+  { "timegate.opening.delay",                  "6"                     },
   { "timegate_open",                           "RocksDC.pcx"           },
   { "timegate_open.xpos",                      "12"                    },
   { "timegate_open.ypos",                      "6"                     },
@@ -1379,7 +1491,8 @@ struct ConfigInfo image_config[] =
   { "timegate.closing.xpos",                   "8"                     },
   { "timegate.closing.ypos",                   "6"                     },
   { "timegate.closing.frames",                 "5"                     },
-  { "timegate.closing.reverse",                        "1"                     },
+  { "timegate.closing.delay",                  "6"                     },
+  { "timegate.closing.mode_reverse",           "1"                     },
 
   { "pearl",                                   "RocksMore.pcx"         },
   { "pearl.xpos",                              "0"                     },
@@ -1389,6 +1502,8 @@ struct ConfigInfo image_config[] =
   { "pearl.breaking.xpos",                     "0"                     },
   { "pearl.breaking.ypos",                     "4"                     },
   { "pearl.breaking.frames",                   "4"                     },
+  { "pearl.breaking.delay",                    "2"                     },
+  { "pearl.breaking.mode_linear",              "4"                     },
 
   { "crystal",                                 "RocksMore.pcx"         },
   { "crystal.xpos",                            "1"                     },
@@ -1470,6 +1585,8 @@ struct ConfigInfo image_config[] =
   { "trap.active.xpos",                                "4"                     },
   { "trap.active.ypos",                                "0"                     },
   { "trap.active.frames",                      "4"                     },
+  { "trap.active.delay",                       "4"                     },
+  { "trap.active.mode_pingpong2",              "1"                     },
 
   { "dx_supabomb",                             "RocksMore.pcx"         },
   { "dx_supabomb.xpos",                                "7"                     },
@@ -1542,25 +1659,25 @@ struct ConfigInfo image_config[] =
   { "pacman_right.xpos",                       "8"                     },
   { "pacman_right.ypos",                       "5"                     },
   { "pacman_right.frames",                     "2"                     },
-  { "pacman_right.reverse",                    "1"                     },
+  { "pacman_right.mode_reverse",               "1"                     },
   { "pacman_right.delay",                      "4"                     },
   { "pacman_up",                               "RocksElements.pcx"     },
   { "pacman_up.xpos",                          "10"                    },
   { "pacman_up.ypos",                          "5"                     },
   { "pacman_up.frames",                                "2"                     },
-  { "pacman_up.reverse",                       "1"                     },
+  { "pacman_up.mode_reverse",                  "1"                     },
   { "pacman_up.delay",                         "4"                     },
   { "pacman_left",                             "RocksElements.pcx"     },
   { "pacman_left.xpos",                                "12"                    },
   { "pacman_left.ypos",                                "5"                     },
   { "pacman_left.frames",                      "2"                     },
-  { "pacman_left.reverse",                     "1"                     },
+  { "pacman_left.mode_reverse",                        "1"                     },
   { "pacman_left.delay",                       "4"                     },
   { "pacman_down",                             "RocksElements.pcx"     },
   { "pacman_down.xpos",                                "14"                    },
   { "pacman_down.ypos",                                "5"                     },
   { "pacman_down.frames",                      "2"                     },
-  { "pacman_down.reverse",                     "1"                     },
+  { "pacman_down.mode_reverse",                        "1"                     },
   { "pacman_down.delay",                       "4"                     },
 
   { "lamp",                                    "RocksElements.pcx"     },
@@ -1623,6 +1740,10 @@ struct ConfigInfo image_config[] =
   { "wall_bd_diamond.ypos",                    "8"                     },
   { "wall_bd_diamond.frames",                  "1"                     },
 
+  { "wall_growing",                            "RocksElements.pcx"     },
+  { "wall_growing.xpos",                       "11"                    },
+  { "wall_growing.ypos",                       "10"                    },
+  { "wall_growing.frames",                     "1"                     },
   { "wall_growing_xy",                         "RocksElements.pcx"     },
   { "wall_growing_xy.xpos",                    "4"                     },
   { "wall_growing_xy.ypos",                    "9"                     },
@@ -1640,18 +1761,22 @@ struct ConfigInfo image_config[] =
   { "wall_growing_active_left.xpos",           "8"                     },
   { "wall_growing_active_left.ypos",           "10"                    },
   { "wall_growing_active_left.frames",         "3"                     },
+  { "wall_growing_active_left.delay",          "6"                     },
   { "wall_growing_active_right",               "RocksElements.pcx"     },
   { "wall_growing_active_right.xpos",          "5"                     },
   { "wall_growing_active_right.ypos",          "10"                    },
   { "wall_growing_active_right.frames",                "3"                     },
+  { "wall_growing_active_right.delay",         "6"                     },
   { "wall_growing_active_up",                  "RocksHeroes.pcx"       },
   { "wall_growing_active_up.xpos",             "3"                     },
   { "wall_growing_active_up.ypos",             "12"                    },
   { "wall_growing_active_up.frames",           "3"                     },
+  { "wall_growing_active_up.delay",            "6"                     },
   { "wall_growing_active_down",                        "RocksHeroes.pcx"       },
   { "wall_growing_active_down.xpos",           "0"                     },
   { "wall_growing_active_down.ypos",           "12"                    },
   { "wall_growing_active_down.frames",         "3"                     },
+  { "wall_growing_active_down.delay",          "6"                     },
 
   { "black_orb",                               "RocksElements.pcx"     },
   { "black_orb.xpos",                          "13"                    },
@@ -1667,33 +1792,38 @@ struct ConfigInfo image_config[] =
   { "dark_yamyam.xpos",                                "8"                     },
   { "dark_yamyam.ypos",                                "11"                    },
   { "dark_yamyam.frames",                      "4"                     },
-  { "dark_yamyam.pingpong",                    "1"                     },
+  { "dark_yamyam.mode_pingpong2",              "1"                     },
 
   { "dynabomb.active",                         "RocksElements.pcx"     },
   { "dynabomb.active.xpos",                    "12"                    },
   { "dynabomb.active.ypos",                    "11"                    },
   { "dynabomb.active.frames",                  "4"                     },
-  { "dynabomb.active.pingpong",                        "1"                     },
+  { "dynabomb.active.delay",                   "6"                     },
+  { "dynabomb.active.mode_pingpong",           "1"                     },
   { "dynabomb_player1.active",                 "RocksElements.pcx"     },
   { "dynabomb_player1.active.xpos",            "12"                    },
   { "dynabomb_player1.active.ypos",            "11"                    },
   { "dynabomb_player1.active.frames",          "4"                     },
-  { "dynabomb_player1.active.pingpong",                "1"                     },
+  { "dynabomb_player1.active.delay",           "6"                     },
+  { "dynabomb_player1.active.mode_pingpong",   "1"                     },
   { "dynabomb_player2.active",                 "RocksElements.pcx"     },
   { "dynabomb_player2.active.xpos",            "12"                    },
   { "dynabomb_player2.active.ypos",            "11"                    },
   { "dynabomb_player2.active.frames",          "4"                     },
-  { "dynabomb_player2.active.pingpong",                "1"                     },
+  { "dynabomb_player2.active.delay",           "6"                     },
+  { "dynabomb_player2.active.mode_pingpong",   "1"                     },
   { "dynabomb_player3.active",                 "RocksElements.pcx"     },
   { "dynabomb_player3.active.xpos",            "12"                    },
   { "dynabomb_player3.active.ypos",            "11"                    },
   { "dynabomb_player3.active.frames",          "4"                     },
-  { "dynabomb_player3.active.pingpong",                "1"                     },
+  { "dynabomb_player3.active.delay",           "6"                     },
+  { "dynabomb_player3.active.mode_pingpong",   "1"                     },
   { "dynabomb_player4.active",                 "RocksElements.pcx"     },
   { "dynabomb_player4.active.xpos",            "12"                    },
   { "dynabomb_player4.active.ypos",            "11"                    },
   { "dynabomb_player4.active.frames",          "4"                     },
-  { "dynabomb_player4.active.pingpong",                "1"                     },
+  { "dynabomb_player4.active.delay",           "6"                     },
+  { "dynabomb_player4.active.mode_pingpong",   "1"                     },
   { "dynabomb_nr",                             "RocksElements.pcx"     },
   { "dynabomb_nr.xpos",                                "12"                    },
   { "dynabomb_nr.ypos",                                "11"                    },
@@ -1707,6 +1837,10 @@ struct ConfigInfo image_config[] =
   { "dynabomb_xl.ypos",                                "9"                     },
   { "dynabomb_xl.frames",                      "1"                     },
 
+  { "pig",                                     "RocksHeroes.pcx"       },
+  { "pig.xpos",                                        "8"                     },
+  { "pig.ypos",                                        "0"                     },
+  { "pig.frames",                              "1"                     },
   { "pig_down",                                        "RocksHeroes.pcx"       },
   { "pig_down.xpos",                           "8"                     },
   { "pig_down.ypos",                           "0"                     },
@@ -1715,10 +1849,12 @@ struct ConfigInfo image_config[] =
   { "pig_down.moving.xpos",                    "8"                     },
   { "pig_down.moving.ypos",                    "0"                     },
   { "pig_down.moving.frames",                  "4"                     },
+  { "pig_down.moving.delay",                   "2"                     },
   { "pig_down.eating",                         "RocksHeroes.pcx"       },
   { "pig_down.eating.xpos",                    "8"                     },
   { "pig_down.eating.ypos",                    "0"                     },
   { "pig_down.eating.frames",                  "4"                     },
+  { "pig_down.eating.delay",                   "2"                     },
   { "pig_up",                                  "RocksHeroes.pcx"       },
   { "pig_up.xpos",                             "12"                    },
   { "pig_up.ypos",                             "0"                     },
@@ -1727,10 +1863,12 @@ struct ConfigInfo image_config[] =
   { "pig_up.moving.xpos",                      "12"                    },
   { "pig_up.moving.ypos",                      "0"                     },
   { "pig_up.moving.frames",                    "4"                     },
+  { "pig_up.moving.delay",                     "2"                     },
   { "pig_up.eating",                           "RocksHeroes.pcx"       },
   { "pig_up.eating.xpos",                      "12"                    },
   { "pig_up.eating.ypos",                      "0"                     },
   { "pig_up.eating.frames",                    "4"                     },
+  { "pig_up.eating.delay",                     "2"                     },
   { "pig_left",                                        "RocksHeroes.pcx"       },
   { "pig_left.xpos",                           "8"                     },
   { "pig_left.ypos",                           "1"                     },
@@ -1739,10 +1877,12 @@ struct ConfigInfo image_config[] =
   { "pig_left.moving.xpos",                    "8"                     },
   { "pig_left.moving.ypos",                    "1"                     },
   { "pig_left.moving.frames",                  "4"                     },
+  { "pig_left.moving.delay",                   "2"                     },
   { "pig_left.eating",                         "RocksHeroes.pcx"       },
   { "pig_left.eating.xpos",                    "8"                     },
   { "pig_left.eating.ypos",                    "1"                     },
   { "pig_left.eating.frames",                  "4"                     },
+  { "pig_left.eating.delay",                   "2"                     },
   { "pig_right",                               "RocksHeroes.pcx"       },
   { "pig_right.xpos",                          "12"                    },
   { "pig_right.ypos",                          "1"                     },
@@ -1751,11 +1891,17 @@ struct ConfigInfo image_config[] =
   { "pig_right.moving.xpos",                   "12"                    },
   { "pig_right.moving.ypos",                   "1"                     },
   { "pig_right.moving.frames",                 "4"                     },
+  { "pig_right.moving.delay",                  "2"                     },
   { "pig_right.eating",                                "RocksHeroes.pcx"       },
   { "pig_right.eating.xpos",                   "12"                    },
   { "pig_right.eating.ypos",                   "1"                     },
   { "pig_right.eating.frames",                 "4"                     },
+  { "pig_right.eating.delay",                  "2"                     },
 
+  { "dragon",                                  "RocksHeroes.pcx"       },
+  { "dragon.xpos",                             "8"                     },
+  { "dragon.ypos",                             "2"                     },
+  { "dragon.frames",                           "1"                     },
   { "dragon_down",                             "RocksHeroes.pcx"       },
   { "dragon_down.xpos",                                "8"                     },
   { "dragon_down.ypos",                                "2"                     },
@@ -1764,10 +1910,11 @@ struct ConfigInfo image_config[] =
   { "dragon_down.moving.xpos",                 "8"                     },
   { "dragon_down.moving.ypos",                 "2"                     },
   { "dragon_down.moving.frames",               "4"                     },
+  { "dragon_down.moving.delay",                        "2"                     },
   { "dragon_down.attacking",                   "RocksHeroes.pcx"       },
   { "dragon_down.attacking.xpos",              "8"                     },
   { "dragon_down.attacking.ypos",              "2"                     },
-  { "dragon_down.attacking.frames",            "4"                     },
+  { "dragon_down.attacking.frames",            "1"                     },
   { "dragon_up",                               "RocksHeroes.pcx"       },
   { "dragon_up.xpos",                          "12"                    },
   { "dragon_up.ypos",                          "2"                     },
@@ -1776,10 +1923,11 @@ struct ConfigInfo image_config[] =
   { "dragon_up.moving.xpos",                   "12"                    },
   { "dragon_up.moving.ypos",                   "2"                     },
   { "dragon_up.moving.frames",                 "4"                     },
+  { "dragon_up.moving.delay",                  "2"                     },
   { "dragon_up.attacking",                     "RocksHeroes.pcx"       },
   { "dragon_up.attacking.xpos",                        "12"                    },
   { "dragon_up.attacking.ypos",                        "2"                     },
-  { "dragon_up.attacking.frames",              "4"                     },
+  { "dragon_up.attacking.frames",              "1"                     },
   { "dragon_left",                             "RocksHeroes.pcx"       },
   { "dragon_left.xpos",                                "8"                     },
   { "dragon_left.ypos",                                "3"                     },
@@ -1788,10 +1936,11 @@ struct ConfigInfo image_config[] =
   { "dragon_left.moving.xpos",                 "8"                     },
   { "dragon_left.moving.ypos",                 "3"                     },
   { "dragon_left.moving.frames",               "4"                     },
+  { "dragon_left.moving.delay",                        "2"                     },
   { "dragon_left.attacking",                   "RocksHeroes.pcx"       },
   { "dragon_left.attacking.xpos",              "8"                     },
   { "dragon_left.attacking.ypos",              "3"                     },
-  { "dragon_left.attacking.frames",            "4"                     },
+  { "dragon_left.attacking.frames",            "1"                     },
   { "dragon_right",                            "RocksHeroes.pcx"       },
   { "dragon_right.xpos",                       "12"                    },
   { "dragon_right.ypos",                       "3"                     },
@@ -1800,11 +1949,16 @@ struct ConfigInfo image_config[] =
   { "dragon_right.moving.xpos",                        "12"                    },
   { "dragon_right.moving.ypos",                        "3"                     },
   { "dragon_right.moving.frames",              "4"                     },
+  { "dragon_right.moving.delay",               "2"                     },
   { "dragon_right.attacking",                  "RocksHeroes.pcx"       },
   { "dragon_right.attacking.xpos",             "12"                    },
   { "dragon_right.attacking.ypos",             "3"                     },
-  { "dragon_right.attacking.frames",           "4"                     },
+  { "dragon_right.attacking.frames",           "1"                     },
 
+  { "mole",                                    "RocksHeroes.pcx"       },
+  { "mole.xpos",                               "8"                     },
+  { "mole.ypos",                               "4"                     },
+  { "mole.frames",                             "1"                     },
   { "mole_down",                               "RocksHeroes.pcx"       },
   { "mole_down.xpos",                          "8"                     },
   { "mole_down.ypos",                          "4"                     },
@@ -1813,10 +1967,12 @@ struct ConfigInfo image_config[] =
   { "mole_down.moving.xpos",                   "8"                     },
   { "mole_down.moving.ypos",                   "4"                     },
   { "mole_down.moving.frames",                 "4"                     },
+  { "mole_down.moving.delay",                  "2"                     },
   { "mole_down.digging",                       "RocksHeroes.pcx"       },
   { "mole_down.digging.xpos",                  "8"                     },
   { "mole_down.digging.ypos",                  "4"                     },
   { "mole_down.digging.frames",                        "4"                     },
+  { "mole_down.digging.delay",                 "2"                     },
   { "mole_up",                                 "RocksHeroes.pcx"       },
   { "mole_up.xpos",                            "12"                    },
   { "mole_up.ypos",                            "4"                     },
@@ -1825,10 +1981,12 @@ struct ConfigInfo image_config[] =
   { "mole_up.moving.xpos",                     "12"                    },
   { "mole_up.moving.ypos",                     "4"                     },
   { "mole_up.moving.frames",                   "4"                     },
+  { "mole_up.moving.delay",                    "2"                     },
   { "mole_up.digging",                         "RocksHeroes.pcx"       },
   { "mole_up.digging.xpos",                    "12"                    },
   { "mole_up.digging.ypos",                    "4"                     },
   { "mole_up.digging.frames",                  "4"                     },
+  { "mole_up.digging.delay",                   "2"                     },
   { "mole_left",                               "RocksHeroes.pcx"       },
   { "mole_left.xpos",                          "8"                     },
   { "mole_left.ypos",                          "5"                     },
@@ -1837,10 +1995,12 @@ struct ConfigInfo image_config[] =
   { "mole_left.moving.xpos",                   "8"                     },
   { "mole_left.moving.ypos",                   "5"                     },
   { "mole_left.moving.frames",                 "4"                     },
+  { "mole_left.moving.delay",                  "2"                     },
   { "mole_left.digging",                       "RocksHeroes.pcx"       },
   { "mole_left.digging.xpos",                  "8"                     },
   { "mole_left.digging.ypos",                  "5"                     },
   { "mole_left.digging.frames",                        "4"                     },
+  { "mole_left.digging.delay",                 "2"                     },
   { "mole_right",                              "RocksHeroes.pcx"       },
   { "mole_right.xpos",                         "12"                    },
   { "mole_right.ypos",                         "5"                     },
@@ -1849,11 +2009,17 @@ struct ConfigInfo image_config[] =
   { "mole_right.moving.xpos",                  "12"                    },
   { "mole_right.moving.ypos",                  "5"                     },
   { "mole_right.moving.frames",                        "4"                     },
+  { "mole_right.moving.delay",                 "2"                     },
   { "mole_right.digging",                      "RocksHeroes.pcx"       },
   { "mole_right.digging.xpos",                 "12"                    },
   { "mole_right.digging.ypos",                 "5"                     },
   { "mole_right.digging.frames",               "4"                     },
+  { "mole_right.digging.delay",                        "2"                     },
 
+  { "penguin",                                 "RocksHeroes.pcx"       },
+  { "penguin.xpos",                            "8"                     },
+  { "penguin.ypos",                            "6"                     },
+  { "penguin.frames",                          "1"                     },
   { "penguin_down",                            "RocksHeroes.pcx"       },
   { "penguin_down.xpos",                       "8"                     },
   { "penguin_down.ypos",                       "6"                     },
@@ -1862,6 +2028,7 @@ struct ConfigInfo image_config[] =
   { "penguin_down.moving.xpos",                        "8"                     },
   { "penguin_down.moving.ypos",                        "6"                     },
   { "penguin_down.moving.frames",              "4"                     },
+  { "penguin_down.moving.delay",               "2"                     },
   { "penguin_up",                              "RocksHeroes.pcx"       },
   { "penguin_up.xpos",                         "12"                    },
   { "penguin_up.ypos",                         "6"                     },
@@ -1870,6 +2037,7 @@ struct ConfigInfo image_config[] =
   { "penguin_up.moving.xpos",                  "12"                    },
   { "penguin_up.moving.ypos",                  "6"                     },
   { "penguin_up.moving.frames",                        "4"                     },
+  { "penguin_up.moving.delay",                 "2"                     },
   { "penguin_left",                            "RocksHeroes.pcx"       },
   { "penguin_left.xpos",                       "8"                     },
   { "penguin_left.ypos",                       "7"                     },
@@ -1878,6 +2046,7 @@ struct ConfigInfo image_config[] =
   { "penguin_left.moving.xpos",                        "8"                     },
   { "penguin_left.moving.ypos",                        "7"                     },
   { "penguin_left.moving.frames",              "4"                     },
+  { "penguin_left.moving.delay",               "2"                     },
   { "penguin_right",                           "RocksHeroes.pcx"       },
   { "penguin_right.xpos",                      "12"                    },
   { "penguin_right.ypos",                      "7"                     },
@@ -1886,6 +2055,7 @@ struct ConfigInfo image_config[] =
   { "penguin_right.moving.xpos",               "12"                    },
   { "penguin_right.moving.ypos",               "7"                     },
   { "penguin_right.moving.frames",             "4"                     },
+  { "penguin_right.moving.delay",              "2"                     },
 
   { "satellite",                               "RocksHeroes.pcx"       },
   { "satellite.xpos",                          "8"                     },
@@ -1902,53 +2072,65 @@ struct ConfigInfo image_config[] =
   { "flames_left1.xpos",                       "8"                     },
   { "flames_left1.ypos",                       "12"                    },
   { "flames_left1.frames",                     "2"                     },
+  { "flames_left1.offset",                     "96"                    },
   { "flames_left2",                            "RocksHeroes.pcx"       },
   { "flames_left2.xpos",                       "9"                     },
   { "flames_left2.ypos",                       "12"                    },
   { "flames_left2.frames",                     "2"                     },
+  { "flames_left2.offset",                     "96"                    },
   { "flames_left3",                            "RocksHeroes.pcx"       },
   { "flames_left3.xpos",                       "10"                    },
   { "flames_left3.ypos",                       "12"                    },
   { "flames_left3.frames",                     "2"                     },
+  { "flames_left3.offset",                     "96"                    },
 
   { "flames_right1",                           "RocksHeroes.pcx"       },
   { "flames_right1.xpos",                      "8"                     },
   { "flames_right1.ypos",                      "13"                    },
   { "flames_right1.frames",                    "2"                     },
+  { "flames_right1.offset",                    "96"                    },
   { "flames_right2",                           "RocksHeroes.pcx"       },
   { "flames_right2.xpos",                      "9"                     },
   { "flames_right2.ypos",                      "13"                    },
   { "flames_right2.frames",                    "2"                     },
+  { "flames_right2.offset",                    "96"                    },
   { "flames_right3",                           "RocksHeroes.pcx"       },
   { "flames_right3.xpos",                      "10"                    },
   { "flames_right3.ypos",                      "13"                    },
   { "flames_right3.frames",                    "2"                     },
+  { "flames_right3.offset",                    "96"                    },
 
   { "flames_up1",                              "RocksHeroes.pcx"       },
   { "flames_up1.xpos",                         "8"                     },
   { "flames_up1.ypos",                         "14"                    },
   { "flames_up1.frames",                       "2"                     },
+  { "flames_up1.offset",                       "96"                    },
   { "flames_up2",                              "RocksHeroes.pcx"       },
   { "flames_up2.xpos",                         "9"                     },
   { "flames_up2.ypos",                         "14"                    },
   { "flames_up2.frames",                       "2"                     },
+  { "flames_up2.offset",                       "96"                    },
   { "flames_up3",                              "RocksHeroes.pcx"       },
   { "flames_up3.xpos",                         "10"                    },
   { "flames_up3.ypos",                         "14"                    },
   { "flames_up3.frames",                       "2"                     },
+  { "flames_up3.offset",                       "96"                    },
 
   { "flames_down1",                            "RocksHeroes.pcx"       },
   { "flames_down1.xpos",                       "8"                     },
   { "flames_down1.ypos",                       "15"                    },
   { "flames_down1.frames",                     "2"                     },
+  { "flames_down1.offset",                     "96"                    },
   { "flames_down2",                            "RocksHeroes.pcx"       },
   { "flames_down2.xpos",                       "9"                     },
   { "flames_down2.ypos",                       "15"                    },
   { "flames_down2.frames",                     "2"                     },
+  { "flames_down2.offset",                     "96"                    },
   { "flames_down3",                            "RocksHeroes.pcx"       },
   { "flames_down3.xpos",                       "10"                    },
   { "flames_down3.ypos",                       "15"                    },
   { "flames_down3.frames",                     "2"                     },
+  { "flames_down3.offset",                     "96"                    },
 
   { "stoneblock",                              "RocksElements.pcx"     },
   { "stoneblock.xpos",                         "10"                    },
@@ -2303,15 +2485,17 @@ struct ConfigInfo image_config[] =
   { "explosion.frames",                                "8"                     },
 
   { "twinkle_blue",                            "RocksHeroes.pcx"       },
-  { "twinkle_blue.xpos",                       "8"                     },
+  { "twinkle_blue.xpos",                       "9"                     },
   { "twinkle_blue.ypos",                       "11"                    },
   { "twinkle_blue.frames",                     "3"                     },
-  { "twinkle_blue.pingpong",                   "1"                     },
+  { "twinkle_blue.delay",                      "2"                     },
+  { "twinkle_blue.mode_pingpong",              "1"                     },
   { "twinkle_white",                           "RocksHeroes.pcx"       },
-  { "twinkle_white.xpos",                      "8"                     },
+  { "twinkle_white.xpos",                      "13"                    },
   { "twinkle_white.ypos",                      "11"                    },
   { "twinkle_white.frames",                    "3"                     },
-  { "twinkle_white.pingpong",                  "1"                     },
+  { "twinkle_white.delay",                     "2"                     },
+  { "twinkle_white.mode_pingpong",             "1"                     },
 
   { "steelwall_topleft",                       "RocksElements.pcx"     },
   { "steelwall_topleft.xpos",                  "0"                     },
@@ -2414,10 +2598,7 @@ struct ConfigInfo image_config[] =
   { "scrollbar_yellow.ypos",                   "2"                     },
   { "scrollbar_yellow.frames",                 "1"                     },
 
-  { "char_question",                           "RocksFontEM.pcx"       },
-  { "char_question.xpos",                      "15"                    },
-  { "char_question.ypos",                      "1"                     },
-  { "char_question.frames",                    "1"                     },
+#include "conf_chr.c"  /* include auto-generated data structure definitions */
 
   { NULL,                                      NULL                    }
 };