Merge branch 'master' into releases 3.2.6.0
authorHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:57:13 +0000 (10:57 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:57:13 +0000 (10:57 +0200)
32 files changed:
ChangeLog
Makefile
src/Makefile
src/conf_cus.c
src/conf_gfx.c
src/conf_grp.c
src/config.c
src/conftime.h
src/editor.c
src/events.c
src/events.h
src/files.c
src/files.h
src/game.c
src/game.h
src/init.c
src/init.h
src/libgame/misc.c
src/libgame/misc.h
src/libgame/sdl.c
src/libgame/sdl.h
src/libgame/setup.c
src/libgame/setup.h
src/libgame/system.c
src/libgame/system.h
src/libgame/types.h
src/main.c
src/main.h
src/network.c
src/screens.c
src/tape.c
src/tools.c

index 58278f94c7c816077893d4ed7193f7a96934bccf..52445eae5e8ef61f0547924775e85372e08e4101 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,126 @@
+2008-10-11
+       * fixed behaviour of player option "no centering when relocating" which
+         was incorrect when disabled and relocation target inside visible area
+         and "no scrolling when relocating" enabled at the same time
+
+2008-10-06
+       * fixed problems with re-mapping players on playfield to input devices:
+         previously, players found on the level playfield were changed to the
+         players connected to input devices (for example, player 3 in the level
+         was changed to player 1 (using artwork of player 3, to be able to use
+         a player with a different color)); this had the disadvantage that CE
+         conditions using player elements did not work (because the players in
+         the level definition are different to those effectively used in-game);
+         the new system uses the same player elements as defined in the level
+         playfield and re-maps the input devices of connected players to the
+         corresponding player elements when playing the level (in the above
+         example, player 3 now really exists in the game and is moved using the
+         events from input device 1); level tapes still store the events from
+         input devices 1 to 4, which are then re-mapped to players accordingly
+         when re-playing the tape (just as it is done when playing the level)
+
+2008-09-29
+       * fixed bug with player relocation while the player switches an element
+
+2008-09-24
+       * fixed bug with EM/DC style exit and EM/DC style steel exit which was
+         not walkable (and did not let the player enter) when in process of
+         opening, but not fully open yet (which can cause the player not being
+         able to enter the exit in EM/DC style levels in time)
+
+2008-08-02
+       * fixed some bugs regarding the new level/CE random seed reset options
+
+2008-07-14
+       * moved "level settings" and "editor settings" to two tabbed screens in
+         level editor to gain space for additional level property settings
+       * added level setting to start a level with always the same random seed
+       * added CE action "set random seed" to re-initialize random seed in game
+         (this is the only CE action that gets executed before the CE changes,
+         which is needed to use the newly set random seed during the CE change)
+
+2008-06-16
+       * fixed redraw problem of special editor door when playing from editor
+
+2008-06-16
+       * fixed initialization of gfx_element for level sketch image creation
+
+2008-06-15
+       * added switch for EM style dynamite "[ ] explodes with chain reaction"
+         (with default set to "on" for existing levels, but "off" for all new
+         levels), as EM style dynamite does not chain-explode in original EM
+
+2008-02-05
+       * added optional initial inventory for players (pre-collected elements)
+       * added change page actions "set player inventory" and "set CE artwork"
+       * added recognition of "player" parameter on change pages when player
+         actions are defined, but no trigger player in corresponding condition
+         (this resulted in actions that only affected the first player before)
+       * fixed bug with change actions being executed for newly created custom
+         elements resulting from custom element changes, when the intention was
+         only to check for change actions for the previous custom element
+
+2008-02-03
+       * changed design and size of element drawing area in level editor
+       * added "element used as action parameter" to element change actions
+
+2008-01-27
+       * added possibility to reanimate player immediately after his death
+         (for example, by "change to <player> when explosion of <player>")
+
+2008-01-25
+       * fixed bug with "gray" white door not being uncovered by magnifier
+       * added score for collecting (any) key to the white key config page
+
+2008-01-22
+       * added condition "deadly when <getting hit by>" for custom elements
+         that behaves a bit like the existing "deadly when <colliding with>",
+         but with the following differences:
+         - it only kills players or friends when it was moving before it hits
+         - it does not kill players or friends that try to run into it
+
+2008-01-21
+       * fixed the following change conditions where a player element is used
+         as the "element that is triggering the custom element change":
+         - touching <element>
+         - hitting <element>
+         - explosion of <element>
+         - move of <element>
+         (the last two conditions already worked partially, but only for the
+         first player, and not for the "Murphy" player when using "move of")
+
+2008-01-20
+       * fixed crash bug caused by accessing invalid element (with value -1)
+         in UpdateGameControlValues()
+       * fixed graphical bug when using two-tile movement animations with EMC
+         game engine without explicitly using native EMC graphics engine
+
+2007-10-31
+       * fixed bug in new "can dig" feature (see below) so that an unsuccessful
+         try to push something (due to push delay) does not cause a dig action
+
+2007-10-29
+       * fixed bug with reference elements used as trigger elements on custom
+         element change pages not being recognized
+       * fixed bug with reference elements not being removed from the playfield
+       * added engine functionality that allows custom elements that "can dig"
+         other elements not only to do so when moving by themselves, but also
+         when being pushed by the player (therefore adding the functionality to
+         push one element over another element, replacing it with the new one)
+
+2007-10-23
+       * added command line function to write level sketch images to directory
+
+2007-10-20
+       * merged override and auto-override options into new override options
+         with a new data type than can take the values "no", "yes" and "auto"
+
+2007-10-18
+       * fixed growing steel wall to also leave behind steel wall instead of
+         normal, destructible wall
+       * fixed handling of rocks falling through stacks of quicksand with
+         different speed (before, the rocks just got stuck in the quicksand)
+
 2007-10-09
        * fixed nasty bug with auto-override and normal override not working on
          program startup (especially when current level set has custom artwork)
index ea1154ef1c2ea54566dc97b86ab836b3fda47884..65ea127afc122305d32049d1b72a8af35326133c 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -42,7 +42,7 @@ CROSS_PATH_MSDOS = /usr/local/cross-msdos/i386-msdosdjgpp
 CROSS_PATH_WIN32 = /usr/local/cross-tools/i386-mingw32msvc
 
 # compile special edition of R'n'D instead of the normal (classic) version
-SPECIAL_EDITION = rnd_jue
+SPECIAL_EDITION = rnd_jue
 
 
 # -----------------------------------------------------------------------------
@@ -130,6 +130,9 @@ enginetestnew: all
 leveltest: all
        ./Scripts/make_enginetest.sh leveltest
 
+levelsketch_images: all
+       ./Scripts/make_levelsketch_images.sh
+
 backup:
        ./Scripts/make_backup.sh src 1
 
index 6b82fb507336ffd46a8cb74be0b81e533352cfdc..bd5538eae7cb19bdd3894e5c8fdf911a1d3f589e 100644 (file)
@@ -311,13 +311,13 @@ clean: clean-obj clean-ico clean-bin
 # -----------------------------------------------------------------------------
 
 run: all
-       $(PROGNAME) --verbose
+       cd .. && ./$(PROGBASE) --verbose
 
 gdb: all
-       gdb -batch -x ../GDB_COMMANDS $(PROGNAME)
+       cd .. && gdb -batch -x GDB_COMMANDS ./$(PROGBASE)
 
 valgrind: all
-       valgrind -v --leak-check=yes $(PROGNAME) 2> ../valgrind.out
+       cd .. && valgrind -v --leak-check=yes ./$(PROGBASE) 2> valgrind.out
 
 
 # -----------------------------------------------------------------------------
index 06f91a75b05df05b12807a3f4985f8d6f25dea2e..50d70783bb40cad7166dd459c9fe5390b9aeffb7 100644 (file)
 
 /* values for graphics configuration (custom elements) */
 
-  { "custom_1",                                        "RocksElements.pcx"     },
-  { "custom_1.xpos",                           "7"                     },
-  { "custom_1.ypos",                           "9"                     },
+  { "custom_1",                                        "RocksCE.pcx"           },
+  { "custom_1.xpos",                           "0"                     },
+  { "custom_1.ypos",                           "0"                     },
   { "custom_1.frames",                         "1"                     },
-  { "custom_1.EDITOR",                         "RocksElements.pcx"     },
-  { "custom_1.EDITOR.xpos",                    "15"                    },
-  { "custom_1.EDITOR.ypos",                    "13"                    },
+  { "custom_1.EDITOR",                         "RocksCE.pcx"           },
+  { "custom_1.EDITOR.xpos",                    "16"                    },
+  { "custom_1.EDITOR.ypos",                    "0"                     },
 
-  { "custom_2",                                        "RocksElements.pcx"     },
-  { "custom_2.xpos",                           "7"                     },
-  { "custom_2.ypos",                           "9"                     },
+  { "custom_2",                                        "RocksCE.pcx"           },
+  { "custom_2.xpos",                           "1"                     },
+  { "custom_2.ypos",                           "0"                     },
   { "custom_2.frames",                         "1"                     },
-  { "custom_2.EDITOR",                         "RocksElements.pcx"     },
-  { "custom_2.EDITOR.xpos",                    "15"                    },
-  { "custom_2.EDITOR.ypos",                    "13"                    },
+  { "custom_2.EDITOR",                         "RocksCE.pcx"           },
+  { "custom_2.EDITOR.xpos",                    "17"                    },
+  { "custom_2.EDITOR.ypos",                    "0"                     },
 
-  { "custom_3",                                        "RocksElements.pcx"     },
-  { "custom_3.xpos",                           "7"                     },
-  { "custom_3.ypos",                           "9"                     },
+  { "custom_3",                                        "RocksCE.pcx"           },
+  { "custom_3.xpos",                           "2"                     },
+  { "custom_3.ypos",                           "0"                     },
   { "custom_3.frames",                         "1"                     },
-  { "custom_3.EDITOR",                         "RocksElements.pcx"     },
-  { "custom_3.EDITOR.xpos",                    "15"                    },
-  { "custom_3.EDITOR.ypos",                    "13"                    },
+  { "custom_3.EDITOR",                         "RocksCE.pcx"           },
+  { "custom_3.EDITOR.xpos",                    "18"                    },
+  { "custom_3.EDITOR.ypos",                    "0"                     },
 
-  { "custom_4",                                        "RocksElements.pcx"     },
-  { "custom_4.xpos",                           "7"                     },
-  { "custom_4.ypos",                           "9"                     },
+  { "custom_4",                                        "RocksCE.pcx"           },
+  { "custom_4.xpos",                           "3"                     },
+  { "custom_4.ypos",                           "0"                     },
   { "custom_4.frames",                         "1"                     },
-  { "custom_4.EDITOR",                         "RocksElements.pcx"     },
-  { "custom_4.EDITOR.xpos",                    "15"                    },
-  { "custom_4.EDITOR.ypos",                    "13"                    },
+  { "custom_4.EDITOR",                         "RocksCE.pcx"           },
+  { "custom_4.EDITOR.xpos",                    "19"                    },
+  { "custom_4.EDITOR.ypos",                    "0"                     },
 
-  { "custom_5",                                        "RocksElements.pcx"     },
-  { "custom_5.xpos",                           "7"                     },
-  { "custom_5.ypos",                           "9"                     },
+  { "custom_5",                                        "RocksCE.pcx"           },
+  { "custom_5.xpos",                           "4"                     },
+  { "custom_5.ypos",                           "0"                     },
   { "custom_5.frames",                         "1"                     },
-  { "custom_5.EDITOR",                         "RocksElements.pcx"     },
-  { "custom_5.EDITOR.xpos",                    "15"                    },
-  { "custom_5.EDITOR.ypos",                    "13"                    },
+  { "custom_5.EDITOR",                         "RocksCE.pcx"           },
+  { "custom_5.EDITOR.xpos",                    "20"                    },
+  { "custom_5.EDITOR.ypos",                    "0"                     },
 
-  { "custom_6",                                        "RocksElements.pcx"     },
-  { "custom_6.xpos",                           "7"                     },
-  { "custom_6.ypos",                           "9"                     },
+  { "custom_6",                                        "RocksCE.pcx"           },
+  { "custom_6.xpos",                           "5"                     },
+  { "custom_6.ypos",                           "0"                     },
   { "custom_6.frames",                         "1"                     },
-  { "custom_6.EDITOR",                         "RocksElements.pcx"     },
-  { "custom_6.EDITOR.xpos",                    "15"                    },
-  { "custom_6.EDITOR.ypos",                    "13"                    },
+  { "custom_6.EDITOR",                         "RocksCE.pcx"           },
+  { "custom_6.EDITOR.xpos",                    "21"                    },
+  { "custom_6.EDITOR.ypos",                    "0"                     },
 
-  { "custom_7",                                        "RocksElements.pcx"     },
-  { "custom_7.xpos",                           "7"                     },
-  { "custom_7.ypos",                           "9"                     },
+  { "custom_7",                                        "RocksCE.pcx"           },
+  { "custom_7.xpos",                           "6"                     },
+  { "custom_7.ypos",                           "0"                     },
   { "custom_7.frames",                         "1"                     },
-  { "custom_7.EDITOR",                         "RocksElements.pcx"     },
-  { "custom_7.EDITOR.xpos",                    "15"                    },
-  { "custom_7.EDITOR.ypos",                    "13"                    },
+  { "custom_7.EDITOR",                         "RocksCE.pcx"           },
+  { "custom_7.EDITOR.xpos",                    "22"                    },
+  { "custom_7.EDITOR.ypos",                    "0"                     },
 
-  { "custom_8",                                        "RocksElements.pcx"     },
+  { "custom_8",                                        "RocksCE.pcx"           },
   { "custom_8.xpos",                           "7"                     },
-  { "custom_8.ypos",                           "9"                     },
+  { "custom_8.ypos",                           "0"                     },
   { "custom_8.frames",                         "1"                     },
-  { "custom_8.EDITOR",                         "RocksElements.pcx"     },
-  { "custom_8.EDITOR.xpos",                    "15"                    },
-  { "custom_8.EDITOR.ypos",                    "13"                    },
+  { "custom_8.EDITOR",                         "RocksCE.pcx"           },
+  { "custom_8.EDITOR.xpos",                    "23"                    },
+  { "custom_8.EDITOR.ypos",                    "0"                     },
 
-  { "custom_9",                                        "RocksElements.pcx"     },
-  { "custom_9.xpos",                           "7"                     },
-  { "custom_9.ypos",                           "9"                     },
+  { "custom_9",                                        "RocksCE.pcx"           },
+  { "custom_9.xpos",                           "8"                     },
+  { "custom_9.ypos",                           "0"                     },
   { "custom_9.frames",                         "1"                     },
-  { "custom_9.EDITOR",                         "RocksElements.pcx"     },
-  { "custom_9.EDITOR.xpos",                    "15"                    },
-  { "custom_9.EDITOR.ypos",                    "13"                    },
+  { "custom_9.EDITOR",                         "RocksCE.pcx"           },
+  { "custom_9.EDITOR.xpos",                    "24"                    },
+  { "custom_9.EDITOR.ypos",                    "0"                     },
 
-  { "custom_10",                               "RocksElements.pcx"     },
-  { "custom_10.xpos",                          "7"                     },
-  { "custom_10.ypos",                          "9"                     },
+  { "custom_10",                               "RocksCE.pcx"           },
+  { "custom_10.xpos",                          "9"                     },
+  { "custom_10.ypos",                          "0"                     },
   { "custom_10.frames",                                "1"                     },
-  { "custom_10.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_10.EDITOR.xpos",                   "15"                    },
-  { "custom_10.EDITOR.ypos",                   "13"                    },
+  { "custom_10.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_10.EDITOR.xpos",                   "25"                    },
+  { "custom_10.EDITOR.ypos",                   "0"                     },
 
-  { "custom_11",                               "RocksElements.pcx"     },
-  { "custom_11.xpos",                          "7"                     },
-  { "custom_11.ypos",                          "9"                     },
+  { "custom_11",                               "RocksCE.pcx"           },
+  { "custom_11.xpos",                          "10"                    },
+  { "custom_11.ypos",                          "0"                     },
   { "custom_11.frames",                                "1"                     },
-  { "custom_11.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_11.EDITOR.xpos",                   "15"                    },
-  { "custom_11.EDITOR.ypos",                   "13"                    },
+  { "custom_11.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_11.EDITOR.xpos",                   "26"                    },
+  { "custom_11.EDITOR.ypos",                   "0"                     },
 
-  { "custom_12",                               "RocksElements.pcx"     },
-  { "custom_12.xpos",                          "7"                     },
-  { "custom_12.ypos",                          "9"                     },
+  { "custom_12",                               "RocksCE.pcx"           },
+  { "custom_12.xpos",                          "11"                    },
+  { "custom_12.ypos",                          "0"                     },
   { "custom_12.frames",                                "1"                     },
-  { "custom_12.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_12.EDITOR.xpos",                   "15"                    },
-  { "custom_12.EDITOR.ypos",                   "13"                    },
+  { "custom_12.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_12.EDITOR.xpos",                   "27"                    },
+  { "custom_12.EDITOR.ypos",                   "0"                     },
 
-  { "custom_13",                               "RocksElements.pcx"     },
-  { "custom_13.xpos",                          "7"                     },
-  { "custom_13.ypos",                          "9"                     },
+  { "custom_13",                               "RocksCE.pcx"           },
+  { "custom_13.xpos",                          "12"                    },
+  { "custom_13.ypos",                          "0"                     },
   { "custom_13.frames",                                "1"                     },
-  { "custom_13.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_13.EDITOR.xpos",                   "15"                    },
-  { "custom_13.EDITOR.ypos",                   "13"                    },
+  { "custom_13.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_13.EDITOR.xpos",                   "28"                    },
+  { "custom_13.EDITOR.ypos",                   "0"                     },
 
-  { "custom_14",                               "RocksElements.pcx"     },
-  { "custom_14.xpos",                          "7"                     },
-  { "custom_14.ypos",                          "9"                     },
+  { "custom_14",                               "RocksCE.pcx"           },
+  { "custom_14.xpos",                          "13"                    },
+  { "custom_14.ypos",                          "0"                     },
   { "custom_14.frames",                                "1"                     },
-  { "custom_14.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_14.EDITOR.xpos",                   "15"                    },
-  { "custom_14.EDITOR.ypos",                   "13"                    },
+  { "custom_14.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_14.EDITOR.xpos",                   "29"                    },
+  { "custom_14.EDITOR.ypos",                   "0"                     },
 
-  { "custom_15",                               "RocksElements.pcx"     },
-  { "custom_15.xpos",                          "7"                     },
-  { "custom_15.ypos",                          "9"                     },
+  { "custom_15",                               "RocksCE.pcx"           },
+  { "custom_15.xpos",                          "14"                    },
+  { "custom_15.ypos",                          "0"                     },
   { "custom_15.frames",                                "1"                     },
-  { "custom_15.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_15.EDITOR.xpos",                   "15"                    },
-  { "custom_15.EDITOR.ypos",                   "13"                    },
+  { "custom_15.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_15.EDITOR.xpos",                   "30"                    },
+  { "custom_15.EDITOR.ypos",                   "0"                     },
 
-  { "custom_16",                               "RocksElements.pcx"     },
-  { "custom_16.xpos",                          "7"                     },
-  { "custom_16.ypos",                          "9"                     },
+  { "custom_16",                               "RocksCE.pcx"           },
+  { "custom_16.xpos",                          "15"                    },
+  { "custom_16.ypos",                          "0"                     },
   { "custom_16.frames",                                "1"                     },
-  { "custom_16.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_16.EDITOR.xpos",                   "15"                    },
-  { "custom_16.EDITOR.ypos",                   "13"                    },
+  { "custom_16.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_16.EDITOR.xpos",                   "31"                    },
+  { "custom_16.EDITOR.ypos",                   "0"                     },
 
-  { "custom_17",                               "RocksElements.pcx"     },
-  { "custom_17.xpos",                          "7"                     },
-  { "custom_17.ypos",                          "9"                     },
+  { "custom_17",                               "RocksCE.pcx"           },
+  { "custom_17.xpos",                          "0"                     },
+  { "custom_17.ypos",                          "1"                     },
   { "custom_17.frames",                                "1"                     },
-  { "custom_17.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_17.EDITOR.xpos",                   "15"                    },
-  { "custom_17.EDITOR.ypos",                   "13"                    },
+  { "custom_17.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_17.EDITOR.xpos",                   "16"                    },
+  { "custom_17.EDITOR.ypos",                   "1                    },
 
-  { "custom_18",                               "RocksElements.pcx"     },
-  { "custom_18.xpos",                          "7"                     },
-  { "custom_18.ypos",                          "9"                     },
+  { "custom_18",                               "RocksCE.pcx"           },
+  { "custom_18.xpos",                          "1"                     },
+  { "custom_18.ypos",                          "1"                     },
   { "custom_18.frames",                                "1"                     },
-  { "custom_18.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_18.EDITOR.xpos",                   "15"                    },
-  { "custom_18.EDITOR.ypos",                   "13"                    },
+  { "custom_18.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_18.EDITOR.xpos",                   "17"                    },
+  { "custom_18.EDITOR.ypos",                   "1                    },
 
-  { "custom_19",                               "RocksElements.pcx"     },
-  { "custom_19.xpos",                          "7"                     },
-  { "custom_19.ypos",                          "9"                     },
+  { "custom_19",                               "RocksCE.pcx"           },
+  { "custom_19.xpos",                          "2"                     },
+  { "custom_19.ypos",                          "1"                     },
   { "custom_19.frames",                                "1"                     },
-  { "custom_19.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_19.EDITOR.xpos",                   "15"                    },
-  { "custom_19.EDITOR.ypos",                   "13"                    },
+  { "custom_19.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_19.EDITOR.xpos",                   "18"                    },
+  { "custom_19.EDITOR.ypos",                   "1                    },
 
-  { "custom_20",                               "RocksElements.pcx"     },
-  { "custom_20.xpos",                          "7"                     },
-  { "custom_20.ypos",                          "9"                     },
+  { "custom_20",                               "RocksCE.pcx"           },
+  { "custom_20.xpos",                          "3"                     },
+  { "custom_20.ypos",                          "1"                     },
   { "custom_20.frames",                                "1"                     },
-  { "custom_20.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_20.EDITOR.xpos",                   "15"                    },
-  { "custom_20.EDITOR.ypos",                   "13"                    },
+  { "custom_20.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_20.EDITOR.xpos",                   "19"                    },
+  { "custom_20.EDITOR.ypos",                   "1                    },
 
-  { "custom_21",                               "RocksElements.pcx"     },
-  { "custom_21.xpos",                          "7"                     },
-  { "custom_21.ypos",                          "9"                     },
+  { "custom_21",                               "RocksCE.pcx"           },
+  { "custom_21.xpos",                          "4"                     },
+  { "custom_21.ypos",                          "1"                     },
   { "custom_21.frames",                                "1"                     },
-  { "custom_21.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_21.EDITOR.xpos",                   "15"                    },
-  { "custom_21.EDITOR.ypos",                   "13"                    },
+  { "custom_21.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_21.EDITOR.xpos",                   "20"                    },
+  { "custom_21.EDITOR.ypos",                   "1                    },
 
-  { "custom_22",                               "RocksElements.pcx"     },
-  { "custom_22.xpos",                          "7"                     },
-  { "custom_22.ypos",                          "9"                     },
+  { "custom_22",                               "RocksCE.pcx"           },
+  { "custom_22.xpos",                          "5"                     },
+  { "custom_22.ypos",                          "1"                     },
   { "custom_22.frames",                                "1"                     },
-  { "custom_22.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_22.EDITOR.xpos",                   "15"                    },
-  { "custom_22.EDITOR.ypos",                   "13"                    },
+  { "custom_22.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_22.EDITOR.xpos",                   "21"                    },
+  { "custom_22.EDITOR.ypos",                   "1                    },
 
-  { "custom_23",                               "RocksElements.pcx"     },
-  { "custom_23.xpos",                          "7"                     },
-  { "custom_23.ypos",                          "9"                     },
+  { "custom_23",                               "RocksCE.pcx"           },
+  { "custom_23.xpos",                          "6"                     },
+  { "custom_23.ypos",                          "1"                     },
   { "custom_23.frames",                                "1"                     },
-  { "custom_23.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_23.EDITOR.xpos",                   "15"                    },
-  { "custom_23.EDITOR.ypos",                   "13"                    },
+  { "custom_23.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_23.EDITOR.xpos",                   "22"                    },
+  { "custom_23.EDITOR.ypos",                   "1                    },
 
-  { "custom_24",                               "RocksElements.pcx"     },
+  { "custom_24",                               "RocksCE.pcx"           },
   { "custom_24.xpos",                          "7"                     },
-  { "custom_24.ypos",                          "9"                     },
+  { "custom_24.ypos",                          "1"                     },
   { "custom_24.frames",                                "1"                     },
-  { "custom_24.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_24.EDITOR.xpos",                   "15"                    },
-  { "custom_24.EDITOR.ypos",                   "13"                    },
+  { "custom_24.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_24.EDITOR.xpos",                   "23"                    },
+  { "custom_24.EDITOR.ypos",                   "1                    },
 
-  { "custom_25",                               "RocksElements.pcx"     },
-  { "custom_25.xpos",                          "7"                     },
-  { "custom_25.ypos",                          "9"                     },
+  { "custom_25",                               "RocksCE.pcx"           },
+  { "custom_25.xpos",                          "8"                     },
+  { "custom_25.ypos",                          "1"                     },
   { "custom_25.frames",                                "1"                     },
-  { "custom_25.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_25.EDITOR.xpos",                   "15"                    },
-  { "custom_25.EDITOR.ypos",                   "13"                    },
+  { "custom_25.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_25.EDITOR.xpos",                   "24"                    },
+  { "custom_25.EDITOR.ypos",                   "1                    },
 
-  { "custom_26",                               "RocksElements.pcx"     },
-  { "custom_26.xpos",                          "7"                     },
-  { "custom_26.ypos",                          "9"                     },
+  { "custom_26",                               "RocksCE.pcx"           },
+  { "custom_26.xpos",                          "9"                     },
+  { "custom_26.ypos",                          "1"                     },
   { "custom_26.frames",                                "1"                     },
-  { "custom_26.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_26.EDITOR.xpos",                   "15"                    },
-  { "custom_26.EDITOR.ypos",                   "13"                    },
+  { "custom_26.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_26.EDITOR.xpos",                   "25"                    },
+  { "custom_26.EDITOR.ypos",                   "1                    },
 
-  { "custom_27",                               "RocksElements.pcx"     },
-  { "custom_27.xpos",                          "7"                     },
-  { "custom_27.ypos",                          "9"                     },
+  { "custom_27",                               "RocksCE.pcx"           },
+  { "custom_27.xpos",                          "10"                    },
+  { "custom_27.ypos",                          "1"                     },
   { "custom_27.frames",                                "1"                     },
-  { "custom_27.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_27.EDITOR.xpos",                   "15"                    },
-  { "custom_27.EDITOR.ypos",                   "13"                    },
+  { "custom_27.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_27.EDITOR.xpos",                   "26"                    },
+  { "custom_27.EDITOR.ypos",                   "1                    },
 
-  { "custom_28",                               "RocksElements.pcx"     },
-  { "custom_28.xpos",                          "7"                     },
-  { "custom_28.ypos",                          "9"                     },
+  { "custom_28",                               "RocksCE.pcx"           },
+  { "custom_28.xpos",                          "11"                    },
+  { "custom_28.ypos",                          "1"                     },
   { "custom_28.frames",                                "1"                     },
-  { "custom_28.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_28.EDITOR.xpos",                   "15"                    },
-  { "custom_28.EDITOR.ypos",                   "13"                    },
+  { "custom_28.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_28.EDITOR.xpos",                   "27"                    },
+  { "custom_28.EDITOR.ypos",                   "1                    },
 
-  { "custom_29",                               "RocksElements.pcx"     },
-  { "custom_29.xpos",                          "7"                     },
-  { "custom_29.ypos",                          "9"                     },
+  { "custom_29",                               "RocksCE.pcx"           },
+  { "custom_29.xpos",                          "12"                    },
+  { "custom_29.ypos",                          "1"                     },
   { "custom_29.frames",                                "1"                     },
-  { "custom_29.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_29.EDITOR.xpos",                   "15"                    },
-  { "custom_29.EDITOR.ypos",                   "13"                    },
+  { "custom_29.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_29.EDITOR.xpos",                   "28"                    },
+  { "custom_29.EDITOR.ypos",                   "1                    },
 
-  { "custom_30",                               "RocksElements.pcx"     },
-  { "custom_30.xpos",                          "7"                     },
-  { "custom_30.ypos",                          "9"                     },
+  { "custom_30",                               "RocksCE.pcx"           },
+  { "custom_30.xpos",                          "13"                    },
+  { "custom_30.ypos",                          "1"                     },
   { "custom_30.frames",                                "1"                     },
-  { "custom_30.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_30.EDITOR.xpos",                   "15"                    },
-  { "custom_30.EDITOR.ypos",                   "13"                    },
+  { "custom_30.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_30.EDITOR.xpos",                   "29"                    },
+  { "custom_30.EDITOR.ypos",                   "1                    },
 
-  { "custom_31",                               "RocksElements.pcx"     },
-  { "custom_31.xpos",                          "7"                     },
-  { "custom_31.ypos",                          "9"                     },
+  { "custom_31",                               "RocksCE.pcx"           },
+  { "custom_31.xpos",                          "14"                    },
+  { "custom_31.ypos",                          "1"                     },
   { "custom_31.frames",                                "1"                     },
-  { "custom_31.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_31.EDITOR.xpos",                   "15"                    },
-  { "custom_31.EDITOR.ypos",                   "13"                    },
+  { "custom_31.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_31.EDITOR.xpos",                   "30"                    },
+  { "custom_31.EDITOR.ypos",                   "1                    },
 
-  { "custom_32",                               "RocksElements.pcx"     },
-  { "custom_32.xpos",                          "7"                     },
-  { "custom_32.ypos",                          "9"                     },
+  { "custom_32",                               "RocksCE.pcx"           },
+  { "custom_32.xpos",                          "15"                    },
+  { "custom_32.ypos",                          "1"                     },
   { "custom_32.frames",                                "1"                     },
-  { "custom_32.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_32.EDITOR.xpos",                   "15"                    },
-  { "custom_32.EDITOR.ypos",                   "13"                    },
+  { "custom_32.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_32.EDITOR.xpos",                   "31"                    },
+  { "custom_32.EDITOR.ypos",                   "1                    },
 
-  { "custom_33",                               "RocksElements.pcx"     },
-  { "custom_33.xpos",                          "7"                     },
-  { "custom_33.ypos",                          "9"                     },
+  { "custom_33",                               "RocksCE.pcx"           },
+  { "custom_33.xpos",                          "0"                     },
+  { "custom_33.ypos",                          "2"                     },
   { "custom_33.frames",                                "1"                     },
-  { "custom_33.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_33.EDITOR.xpos",                   "15"                    },
-  { "custom_33.EDITOR.ypos",                   "13"                    },
+  { "custom_33.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_33.EDITOR.xpos",                   "16"                    },
+  { "custom_33.EDITOR.ypos",                   "2"                     },
 
-  { "custom_34",                               "RocksElements.pcx"     },
-  { "custom_34.xpos",                          "7"                     },
-  { "custom_34.ypos",                          "9"                     },
+  { "custom_34",                               "RocksCE.pcx"           },
+  { "custom_34.xpos",                          "1"                     },
+  { "custom_34.ypos",                          "2"                     },
   { "custom_34.frames",                                "1"                     },
-  { "custom_34.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_34.EDITOR.xpos",                   "15"                    },
-  { "custom_34.EDITOR.ypos",                   "13"                    },
+  { "custom_34.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_34.EDITOR.xpos",                   "17"                    },
+  { "custom_34.EDITOR.ypos",                   "2"                     },
 
-  { "custom_35",                               "RocksElements.pcx"     },
-  { "custom_35.xpos",                          "7"                     },
-  { "custom_35.ypos",                          "9"                     },
+  { "custom_35",                               "RocksCE.pcx"           },
+  { "custom_35.xpos",                          "2"                     },
+  { "custom_35.ypos",                          "2"                     },
   { "custom_35.frames",                                "1"                     },
-  { "custom_35.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_35.EDITOR.xpos",                   "15"                    },
-  { "custom_35.EDITOR.ypos",                   "13"                    },
+  { "custom_35.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_35.EDITOR.xpos",                   "18"                    },
+  { "custom_35.EDITOR.ypos",                   "2"                     },
 
-  { "custom_36",                               "RocksElements.pcx"     },
-  { "custom_36.xpos",                          "7"                     },
-  { "custom_36.ypos",                          "9"                     },
+  { "custom_36",                               "RocksCE.pcx"           },
+  { "custom_36.xpos",                          "3"                     },
+  { "custom_36.ypos",                          "2"                     },
   { "custom_36.frames",                                "1"                     },
-  { "custom_36.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_36.EDITOR.xpos",                   "15"                    },
-  { "custom_36.EDITOR.ypos",                   "13"                    },
+  { "custom_36.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_36.EDITOR.xpos",                   "19"                    },
+  { "custom_36.EDITOR.ypos",                   "2"                     },
 
-  { "custom_37",                               "RocksElements.pcx"     },
-  { "custom_37.xpos",                          "7"                     },
-  { "custom_37.ypos",                          "9"                     },
+  { "custom_37",                               "RocksCE.pcx"           },
+  { "custom_37.xpos",                          "4"                     },
+  { "custom_37.ypos",                          "2"                     },
   { "custom_37.frames",                                "1"                     },
-  { "custom_37.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_37.EDITOR.xpos",                   "15"                    },
-  { "custom_37.EDITOR.ypos",                   "13"                    },
+  { "custom_37.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_37.EDITOR.xpos",                   "20"                    },
+  { "custom_37.EDITOR.ypos",                   "2"                     },
 
-  { "custom_38",                               "RocksElements.pcx"     },
-  { "custom_38.xpos",                          "7"                     },
-  { "custom_38.ypos",                          "9"                     },
+  { "custom_38",                               "RocksCE.pcx"           },
+  { "custom_38.xpos",                          "5"                     },
+  { "custom_38.ypos",                          "2"                     },
   { "custom_38.frames",                                "1"                     },
-  { "custom_38.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_38.EDITOR.xpos",                   "15"                    },
-  { "custom_38.EDITOR.ypos",                   "13"                    },
+  { "custom_38.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_38.EDITOR.xpos",                   "21"                    },
+  { "custom_38.EDITOR.ypos",                   "2"                     },
 
-  { "custom_39",                               "RocksElements.pcx"     },
-  { "custom_39.xpos",                          "7"                     },
-  { "custom_39.ypos",                          "9"                     },
+  { "custom_39",                               "RocksCE.pcx"           },
+  { "custom_39.xpos",                          "6"                     },
+  { "custom_39.ypos",                          "2"                     },
   { "custom_39.frames",                                "1"                     },
-  { "custom_39.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_39.EDITOR.xpos",                   "15"                    },
-  { "custom_39.EDITOR.ypos",                   "13"                    },
+  { "custom_39.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_39.EDITOR.xpos",                   "22"                    },
+  { "custom_39.EDITOR.ypos",                   "2"                     },
 
-  { "custom_40",                               "RocksElements.pcx"     },
+  { "custom_40",                               "RocksCE.pcx"           },
   { "custom_40.xpos",                          "7"                     },
-  { "custom_40.ypos",                          "9"                     },
+  { "custom_40.ypos",                          "2"                     },
   { "custom_40.frames",                                "1"                     },
-  { "custom_40.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_40.EDITOR.xpos",                   "15"                    },
-  { "custom_40.EDITOR.ypos",                   "13"                    },
+  { "custom_40.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_40.EDITOR.xpos",                   "23"                    },
+  { "custom_40.EDITOR.ypos",                   "2"                     },
 
-  { "custom_41",                               "RocksElements.pcx"     },
-  { "custom_41.xpos",                          "7"                     },
-  { "custom_41.ypos",                          "9"                     },
+  { "custom_41",                               "RocksCE.pcx"           },
+  { "custom_41.xpos",                          "8"                     },
+  { "custom_41.ypos",                          "2"                     },
   { "custom_41.frames",                                "1"                     },
-  { "custom_41.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_41.EDITOR.xpos",                   "15"                    },
-  { "custom_41.EDITOR.ypos",                   "13"                    },
+  { "custom_41.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_41.EDITOR.xpos",                   "24"                    },
+  { "custom_41.EDITOR.ypos",                   "2"                     },
 
-  { "custom_42",                               "RocksElements.pcx"     },
-  { "custom_42.xpos",                          "7"                     },
-  { "custom_42.ypos",                          "9"                     },
+  { "custom_42",                               "RocksCE.pcx"           },
+  { "custom_42.xpos",                          "9"                     },
+  { "custom_42.ypos",                          "2"                     },
   { "custom_42.frames",                                "1"                     },
-  { "custom_42.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_42.EDITOR.xpos",                   "15"                    },
-  { "custom_42.EDITOR.ypos",                   "13"                    },
+  { "custom_42.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_42.EDITOR.xpos",                   "25"                    },
+  { "custom_42.EDITOR.ypos",                   "2"                     },
 
-  { "custom_43",                               "RocksElements.pcx"     },
-  { "custom_43.xpos",                          "7"                     },
-  { "custom_43.ypos",                          "9"                     },
+  { "custom_43",                               "RocksCE.pcx"           },
+  { "custom_43.xpos",                          "10"                    },
+  { "custom_43.ypos",                          "2"                     },
   { "custom_43.frames",                                "1"                     },
-  { "custom_43.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_43.EDITOR.xpos",                   "15"                    },
-  { "custom_43.EDITOR.ypos",                   "13"                    },
+  { "custom_43.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_43.EDITOR.xpos",                   "26"                    },
+  { "custom_43.EDITOR.ypos",                   "2"                     },
 
-  { "custom_44",                               "RocksElements.pcx"     },
-  { "custom_44.xpos",                          "7"                     },
-  { "custom_44.ypos",                          "9"                     },
+  { "custom_44",                               "RocksCE.pcx"           },
+  { "custom_44.xpos",                          "11"                    },
+  { "custom_44.ypos",                          "2"                     },
   { "custom_44.frames",                                "1"                     },
-  { "custom_44.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_44.EDITOR.xpos",                   "15"                    },
-  { "custom_44.EDITOR.ypos",                   "13"                    },
+  { "custom_44.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_44.EDITOR.xpos",                   "27"                    },
+  { "custom_44.EDITOR.ypos",                   "2"                     },
 
-  { "custom_45",                               "RocksElements.pcx"     },
-  { "custom_45.xpos",                          "7"                     },
-  { "custom_45.ypos",                          "9"                     },
+  { "custom_45",                               "RocksCE.pcx"           },
+  { "custom_45.xpos",                          "12"                    },
+  { "custom_45.ypos",                          "2"                     },
   { "custom_45.frames",                                "1"                     },
-  { "custom_45.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_45.EDITOR.xpos",                   "15"                    },
-  { "custom_45.EDITOR.ypos",                   "13"                    },
+  { "custom_45.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_45.EDITOR.xpos",                   "28"                    },
+  { "custom_45.EDITOR.ypos",                   "2"                     },
 
-  { "custom_46",                               "RocksElements.pcx"     },
-  { "custom_46.xpos",                          "7"                     },
-  { "custom_46.ypos",                          "9"                     },
+  { "custom_46",                               "RocksCE.pcx"           },
+  { "custom_46.xpos",                          "13"                    },
+  { "custom_46.ypos",                          "2"                     },
   { "custom_46.frames",                                "1"                     },
-  { "custom_46.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_46.EDITOR.xpos",                   "15"                    },
-  { "custom_46.EDITOR.ypos",                   "13"                    },
+  { "custom_46.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_46.EDITOR.xpos",                   "29"                    },
+  { "custom_46.EDITOR.ypos",                   "2"                     },
 
-  { "custom_47",                               "RocksElements.pcx"     },
-  { "custom_47.xpos",                          "7"                     },
-  { "custom_47.ypos",                          "9"                     },
+  { "custom_47",                               "RocksCE.pcx"           },
+  { "custom_47.xpos",                          "14"                    },
+  { "custom_47.ypos",                          "2"                     },
   { "custom_47.frames",                                "1"                     },
-  { "custom_47.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_47.EDITOR.xpos",                   "15"                    },
-  { "custom_47.EDITOR.ypos",                   "13"                    },
+  { "custom_47.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_47.EDITOR.xpos",                   "30"                    },
+  { "custom_47.EDITOR.ypos",                   "2"                     },
 
-  { "custom_48",                               "RocksElements.pcx"     },
-  { "custom_48.xpos",                          "7"                     },
-  { "custom_48.ypos",                          "9"                     },
+  { "custom_48",                               "RocksCE.pcx"           },
+  { "custom_48.xpos",                          "15"                    },
+  { "custom_48.ypos",                          "2"                     },
   { "custom_48.frames",                                "1"                     },
-  { "custom_48.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_48.EDITOR.xpos",                   "15"                    },
-  { "custom_48.EDITOR.ypos",                   "13"                    },
+  { "custom_48.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_48.EDITOR.xpos",                   "31"                    },
+  { "custom_48.EDITOR.ypos",                   "2"                     },
 
-  { "custom_49",                               "RocksElements.pcx"     },
-  { "custom_49.xpos",                          "7"                     },
-  { "custom_49.ypos",                          "9"                     },
+  { "custom_49",                               "RocksCE.pcx"           },
+  { "custom_49.xpos",                          "0"                     },
+  { "custom_49.ypos",                          "3"                     },
   { "custom_49.frames",                                "1"                     },
-  { "custom_49.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_49.EDITOR.xpos",                   "15"                    },
-  { "custom_49.EDITOR.ypos",                   "13"                    },
+  { "custom_49.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_49.EDITOR.xpos",                   "16"                    },
+  { "custom_49.EDITOR.ypos",                   "3"                     },
 
-  { "custom_50",                               "RocksElements.pcx"     },
-  { "custom_50.xpos",                          "7"                     },
-  { "custom_50.ypos",                          "9"                     },
+  { "custom_50",                               "RocksCE.pcx"           },
+  { "custom_50.xpos",                          "1"                     },
+  { "custom_50.ypos",                          "3"                     },
   { "custom_50.frames",                                "1"                     },
-  { "custom_50.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_50.EDITOR.xpos",                   "15"                    },
-  { "custom_50.EDITOR.ypos",                   "13"                    },
+  { "custom_50.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_50.EDITOR.xpos",                   "17"                    },
+  { "custom_50.EDITOR.ypos",                   "3"                     },
 
-  { "custom_51",                               "RocksElements.pcx"     },
-  { "custom_51.xpos",                          "7"                     },
-  { "custom_51.ypos",                          "9"                     },
+  { "custom_51",                               "RocksCE.pcx"           },
+  { "custom_51.xpos",                          "2"                     },
+  { "custom_51.ypos",                          "3"                     },
   { "custom_51.frames",                                "1"                     },
-  { "custom_51.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_51.EDITOR.xpos",                   "15"                    },
-  { "custom_51.EDITOR.ypos",                   "13"                    },
+  { "custom_51.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_51.EDITOR.xpos",                   "18"                    },
+  { "custom_51.EDITOR.ypos",                   "3"                     },
 
-  { "custom_52",                               "RocksElements.pcx"     },
-  { "custom_52.xpos",                          "7"                     },
-  { "custom_52.ypos",                          "9"                     },
+  { "custom_52",                               "RocksCE.pcx"           },
+  { "custom_52.xpos",                          "3"                     },
+  { "custom_52.ypos",                          "3"                     },
   { "custom_52.frames",                                "1"                     },
-  { "custom_52.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_52.EDITOR.xpos",                   "15"                    },
-  { "custom_52.EDITOR.ypos",                   "13"                    },
+  { "custom_52.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_52.EDITOR.xpos",                   "19"                    },
+  { "custom_52.EDITOR.ypos",                   "3"                     },
 
-  { "custom_53",                               "RocksElements.pcx"     },
-  { "custom_53.xpos",                          "7"                     },
-  { "custom_53.ypos",                          "9"                     },
+  { "custom_53",                               "RocksCE.pcx"           },
+  { "custom_53.xpos",                          "4"                     },
+  { "custom_53.ypos",                          "3"                     },
   { "custom_53.frames",                                "1"                     },
-  { "custom_53.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_53.EDITOR.xpos",                   "15"                    },
-  { "custom_53.EDITOR.ypos",                   "13"                    },
+  { "custom_53.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_53.EDITOR.xpos",                   "20"                    },
+  { "custom_53.EDITOR.ypos",                   "3"                     },
 
-  { "custom_54",                               "RocksElements.pcx"     },
-  { "custom_54.xpos",                          "7"                     },
-  { "custom_54.ypos",                          "9"                     },
+  { "custom_54",                               "RocksCE.pcx"           },
+  { "custom_54.xpos",                          "5"                     },
+  { "custom_54.ypos",                          "3"                     },
   { "custom_54.frames",                                "1"                     },
-  { "custom_54.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_54.EDITOR.xpos",                   "15"                    },
-  { "custom_54.EDITOR.ypos",                   "13"                    },
+  { "custom_54.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_54.EDITOR.xpos",                   "21"                    },
+  { "custom_54.EDITOR.ypos",                   "3"                     },
 
-  { "custom_55",                               "RocksElements.pcx"     },
-  { "custom_55.xpos",                          "7"                     },
-  { "custom_55.ypos",                          "9"                     },
+  { "custom_55",                               "RocksCE.pcx"           },
+  { "custom_55.xpos",                          "6"                     },
+  { "custom_55.ypos",                          "3"                     },
   { "custom_55.frames",                                "1"                     },
-  { "custom_55.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_55.EDITOR.xpos",                   "15"                    },
-  { "custom_55.EDITOR.ypos",                   "13"                    },
+  { "custom_55.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_55.EDITOR.xpos",                   "22"                    },
+  { "custom_55.EDITOR.ypos",                   "3"                     },
 
-  { "custom_56",                               "RocksElements.pcx"     },
+  { "custom_56",                               "RocksCE.pcx"           },
   { "custom_56.xpos",                          "7"                     },
-  { "custom_56.ypos",                          "9"                     },
+  { "custom_56.ypos",                          "3"                     },
   { "custom_56.frames",                                "1"                     },
-  { "custom_56.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_56.EDITOR.xpos",                   "15"                    },
-  { "custom_56.EDITOR.ypos",                   "13"                    },
+  { "custom_56.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_56.EDITOR.xpos",                   "23"                    },
+  { "custom_56.EDITOR.ypos",                   "3"                     },
 
-  { "custom_57",                               "RocksElements.pcx"     },
-  { "custom_57.xpos",                          "7"                     },
-  { "custom_57.ypos",                          "9"                     },
+  { "custom_57",                               "RocksCE.pcx"           },
+  { "custom_57.xpos",                          "8"                     },
+  { "custom_57.ypos",                          "3"                     },
   { "custom_57.frames",                                "1"                     },
-  { "custom_57.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_57.EDITOR.xpos",                   "15"                    },
-  { "custom_57.EDITOR.ypos",                   "13"                    },
+  { "custom_57.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_57.EDITOR.xpos",                   "24"                    },
+  { "custom_57.EDITOR.ypos",                   "3"                     },
 
-  { "custom_58",                               "RocksElements.pcx"     },
-  { "custom_58.xpos",                          "7"                     },
-  { "custom_58.ypos",                          "9"                     },
+  { "custom_58",                               "RocksCE.pcx"           },
+  { "custom_58.xpos",                          "9"                     },
+  { "custom_58.ypos",                          "3"                     },
   { "custom_58.frames",                                "1"                     },
-  { "custom_58.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_58.EDITOR.xpos",                   "15"                    },
-  { "custom_58.EDITOR.ypos",                   "13"                    },
+  { "custom_58.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_58.EDITOR.xpos",                   "25"                    },
+  { "custom_58.EDITOR.ypos",                   "3"                     },
 
-  { "custom_59",                               "RocksElements.pcx"     },
-  { "custom_59.xpos",                          "7"                     },
-  { "custom_59.ypos",                          "9"                     },
+  { "custom_59",                               "RocksCE.pcx"           },
+  { "custom_59.xpos",                          "10"                    },
+  { "custom_59.ypos",                          "3"                     },
   { "custom_59.frames",                                "1"                     },
-  { "custom_59.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_59.EDITOR.xpos",                   "15"                    },
-  { "custom_59.EDITOR.ypos",                   "13"                    },
+  { "custom_59.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_59.EDITOR.xpos",                   "26"                    },
+  { "custom_59.EDITOR.ypos",                   "3"                     },
 
-  { "custom_60",                               "RocksElements.pcx"     },
-  { "custom_60.xpos",                          "7"                     },
-  { "custom_60.ypos",                          "9"                     },
+  { "custom_60",                               "RocksCE.pcx"           },
+  { "custom_60.xpos",                          "11"                    },
+  { "custom_60.ypos",                          "3"                     },
   { "custom_60.frames",                                "1"                     },
-  { "custom_60.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_60.EDITOR.xpos",                   "15"                    },
-  { "custom_60.EDITOR.ypos",                   "13"                    },
+  { "custom_60.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_60.EDITOR.xpos",                   "27"                    },
+  { "custom_60.EDITOR.ypos",                   "3"                     },
 
-  { "custom_61",                               "RocksElements.pcx"     },
-  { "custom_61.xpos",                          "7"                     },
-  { "custom_61.ypos",                          "9"                     },
+  { "custom_61",                               "RocksCE.pcx"           },
+  { "custom_61.xpos",                          "12"                    },
+  { "custom_61.ypos",                          "3"                     },
   { "custom_61.frames",                                "1"                     },
-  { "custom_61.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_61.EDITOR.xpos",                   "15"                    },
-  { "custom_61.EDITOR.ypos",                   "13"                    },
+  { "custom_61.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_61.EDITOR.xpos",                   "28"                    },
+  { "custom_61.EDITOR.ypos",                   "3"                     },
 
-  { "custom_62",                               "RocksElements.pcx"     },
-  { "custom_62.xpos",                          "7"                     },
-  { "custom_62.ypos",                          "9"                     },
+  { "custom_62",                               "RocksCE.pcx"           },
+  { "custom_62.xpos",                          "13"                    },
+  { "custom_62.ypos",                          "3"                     },
   { "custom_62.frames",                                "1"                     },
-  { "custom_62.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_62.EDITOR.xpos",                   "15"                    },
-  { "custom_62.EDITOR.ypos",                   "13"                    },
+  { "custom_62.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_62.EDITOR.xpos",                   "29"                    },
+  { "custom_62.EDITOR.ypos",                   "3"                     },
 
-  { "custom_63",                               "RocksElements.pcx"     },
-  { "custom_63.xpos",                          "7"                     },
-  { "custom_63.ypos",                          "9"                     },
+  { "custom_63",                               "RocksCE.pcx"           },
+  { "custom_63.xpos",                          "14"                    },
+  { "custom_63.ypos",                          "3"                     },
   { "custom_63.frames",                                "1"                     },
-  { "custom_63.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_63.EDITOR.xpos",                   "15"                    },
-  { "custom_63.EDITOR.ypos",                   "13"                    },
+  { "custom_63.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_63.EDITOR.xpos",                   "30"                    },
+  { "custom_63.EDITOR.ypos",                   "3"                     },
 
-  { "custom_64",                               "RocksElements.pcx"     },
-  { "custom_64.xpos",                          "7"                     },
-  { "custom_64.ypos",                          "9"                     },
+  { "custom_64",                               "RocksCE.pcx"           },
+  { "custom_64.xpos",                          "15"                    },
+  { "custom_64.ypos",                          "3"                     },
   { "custom_64.frames",                                "1"                     },
-  { "custom_64.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_64.EDITOR.xpos",                   "15"                    },
-  { "custom_64.EDITOR.ypos",                   "13"                    },
+  { "custom_64.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_64.EDITOR.xpos",                   "31"                    },
+  { "custom_64.EDITOR.ypos",                   "3"                     },
 
-  { "custom_65",                               "RocksElements.pcx"     },
-  { "custom_65.xpos",                          "7"                     },
-  { "custom_65.ypos",                          "9"                     },
+  { "custom_65",                               "RocksCE.pcx"           },
+  { "custom_65.xpos",                          "0"                     },
+  { "custom_65.ypos",                          "4"                     },
   { "custom_65.frames",                                "1"                     },
-  { "custom_65.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_65.EDITOR.xpos",                   "15"                    },
-  { "custom_65.EDITOR.ypos",                   "13"                    },
+  { "custom_65.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_65.EDITOR.xpos",                   "16"                    },
+  { "custom_65.EDITOR.ypos",                   "4"                     },
 
-  { "custom_66",                               "RocksElements.pcx"     },
-  { "custom_66.xpos",                          "7"                     },
-  { "custom_66.ypos",                          "9"                     },
+  { "custom_66",                               "RocksCE.pcx"           },
+  { "custom_66.xpos",                          "1"                     },
+  { "custom_66.ypos",                          "4"                     },
   { "custom_66.frames",                                "1"                     },
-  { "custom_66.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_66.EDITOR.xpos",                   "15"                    },
-  { "custom_66.EDITOR.ypos",                   "13"                    },
+  { "custom_66.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_66.EDITOR.xpos",                   "17"                    },
+  { "custom_66.EDITOR.ypos",                   "4"                     },
 
-  { "custom_67",                               "RocksElements.pcx"     },
-  { "custom_67.xpos",                          "7"                     },
-  { "custom_67.ypos",                          "9"                     },
+  { "custom_67",                               "RocksCE.pcx"           },
+  { "custom_67.xpos",                          "2"                     },
+  { "custom_67.ypos",                          "4"                     },
   { "custom_67.frames",                                "1"                     },
-  { "custom_67.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_67.EDITOR.xpos",                   "15"                    },
-  { "custom_67.EDITOR.ypos",                   "13"                    },
+  { "custom_67.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_67.EDITOR.xpos",                   "18"                    },
+  { "custom_67.EDITOR.ypos",                   "4"                     },
 
-  { "custom_68",                               "RocksElements.pcx"     },
-  { "custom_68.xpos",                          "7"                     },
-  { "custom_68.ypos",                          "9"                     },
+  { "custom_68",                               "RocksCE.pcx"           },
+  { "custom_68.xpos",                          "3"                     },
+  { "custom_68.ypos",                          "4"                     },
   { "custom_68.frames",                                "1"                     },
-  { "custom_68.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_68.EDITOR.xpos",                   "15"                    },
-  { "custom_68.EDITOR.ypos",                   "13"                    },
+  { "custom_68.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_68.EDITOR.xpos",                   "19"                    },
+  { "custom_68.EDITOR.ypos",                   "4"                     },
 
-  { "custom_69",                               "RocksElements.pcx"     },
-  { "custom_69.xpos",                          "7"                     },
-  { "custom_69.ypos",                          "9"                     },
+  { "custom_69",                               "RocksCE.pcx"           },
+  { "custom_69.xpos",                          "4"                     },
+  { "custom_69.ypos",                          "4"                     },
   { "custom_69.frames",                                "1"                     },
-  { "custom_69.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_69.EDITOR.xpos",                   "15"                    },
-  { "custom_69.EDITOR.ypos",                   "13"                    },
+  { "custom_69.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_69.EDITOR.xpos",                   "20"                    },
+  { "custom_69.EDITOR.ypos",                   "4"                     },
 
-  { "custom_70",                               "RocksElements.pcx"     },
-  { "custom_70.xpos",                          "7"                     },
-  { "custom_70.ypos",                          "9"                     },
+  { "custom_70",                               "RocksCE.pcx"           },
+  { "custom_70.xpos",                          "5"                     },
+  { "custom_70.ypos",                          "4"                     },
   { "custom_70.frames",                                "1"                     },
-  { "custom_70.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_70.EDITOR.xpos",                   "15"                    },
-  { "custom_70.EDITOR.ypos",                   "13"                    },
+  { "custom_70.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_70.EDITOR.xpos",                   "21"                    },
+  { "custom_70.EDITOR.ypos",                   "4"                     },
 
-  { "custom_71",                               "RocksElements.pcx"     },
-  { "custom_71.xpos",                          "7"                     },
-  { "custom_71.ypos",                          "9"                     },
+  { "custom_71",                               "RocksCE.pcx"           },
+  { "custom_71.xpos",                          "6"                     },
+  { "custom_71.ypos",                          "4"                     },
   { "custom_71.frames",                                "1"                     },
-  { "custom_71.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_71.EDITOR.xpos",                   "15"                    },
-  { "custom_71.EDITOR.ypos",                   "13"                    },
+  { "custom_71.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_71.EDITOR.xpos",                   "22"                    },
+  { "custom_71.EDITOR.ypos",                   "4"                     },
 
-  { "custom_72",                               "RocksElements.pcx"     },
+  { "custom_72",                               "RocksCE.pcx"           },
   { "custom_72.xpos",                          "7"                     },
-  { "custom_72.ypos",                          "9"                     },
+  { "custom_72.ypos",                          "4"                     },
   { "custom_72.frames",                                "1"                     },
-  { "custom_72.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_72.EDITOR.xpos",                   "15"                    },
-  { "custom_72.EDITOR.ypos",                   "13"                    },
+  { "custom_72.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_72.EDITOR.xpos",                   "23"                    },
+  { "custom_72.EDITOR.ypos",                   "4"                     },
 
-  { "custom_73",                               "RocksElements.pcx"     },
-  { "custom_73.xpos",                          "7"                     },
-  { "custom_73.ypos",                          "9"                     },
+  { "custom_73",                               "RocksCE.pcx"           },
+  { "custom_73.xpos",                          "8"                     },
+  { "custom_73.ypos",                          "4"                     },
   { "custom_73.frames",                                "1"                     },
-  { "custom_73.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_73.EDITOR.xpos",                   "15"                    },
-  { "custom_73.EDITOR.ypos",                   "13"                    },
+  { "custom_73.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_73.EDITOR.xpos",                   "24"                    },
+  { "custom_73.EDITOR.ypos",                   "4"                     },
 
-  { "custom_74",                               "RocksElements.pcx"     },
-  { "custom_74.xpos",                          "7"                     },
-  { "custom_74.ypos",                          "9"                     },
+  { "custom_74",                               "RocksCE.pcx"           },
+  { "custom_74.xpos",                          "9"                     },
+  { "custom_74.ypos",                          "4"                     },
   { "custom_74.frames",                                "1"                     },
-  { "custom_74.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_74.EDITOR.xpos",                   "15"                    },
-  { "custom_74.EDITOR.ypos",                   "13"                    },
+  { "custom_74.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_74.EDITOR.xpos",                   "25"                    },
+  { "custom_74.EDITOR.ypos",                   "4"                     },
 
-  { "custom_75",                               "RocksElements.pcx"     },
-  { "custom_75.xpos",                          "7"                     },
-  { "custom_75.ypos",                          "9"                     },
+  { "custom_75",                               "RocksCE.pcx"           },
+  { "custom_75.xpos",                          "10"                    },
+  { "custom_75.ypos",                          "4"                     },
   { "custom_75.frames",                                "1"                     },
-  { "custom_75.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_75.EDITOR.xpos",                   "15"                    },
-  { "custom_75.EDITOR.ypos",                   "13"                    },
+  { "custom_75.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_75.EDITOR.xpos",                   "26"                    },
+  { "custom_75.EDITOR.ypos",                   "4"                     },
 
-  { "custom_76",                               "RocksElements.pcx"     },
-  { "custom_76.xpos",                          "7"                     },
-  { "custom_76.ypos",                          "9"                     },
+  { "custom_76",                               "RocksCE.pcx"           },
+  { "custom_76.xpos",                          "11"                    },
+  { "custom_76.ypos",                          "4"                     },
   { "custom_76.frames",                                "1"                     },
-  { "custom_76.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_76.EDITOR.xpos",                   "15"                    },
-  { "custom_76.EDITOR.ypos",                   "13"                    },
+  { "custom_76.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_76.EDITOR.xpos",                   "27"                    },
+  { "custom_76.EDITOR.ypos",                   "4"                     },
 
-  { "custom_77",                               "RocksElements.pcx"     },
-  { "custom_77.xpos",                          "7"                     },
-  { "custom_77.ypos",                          "9"                     },
+  { "custom_77",                               "RocksCE.pcx"           },
+  { "custom_77.xpos",                          "12"                    },
+  { "custom_77.ypos",                          "4"                     },
   { "custom_77.frames",                                "1"                     },
-  { "custom_77.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_77.EDITOR.xpos",                   "15"                    },
-  { "custom_77.EDITOR.ypos",                   "13"                    },
+  { "custom_77.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_77.EDITOR.xpos",                   "28"                    },
+  { "custom_77.EDITOR.ypos",                   "4"                     },
 
-  { "custom_78",                               "RocksElements.pcx"     },
-  { "custom_78.xpos",                          "7"                     },
-  { "custom_78.ypos",                          "9"                     },
+  { "custom_78",                               "RocksCE.pcx"           },
+  { "custom_78.xpos",                          "13"                    },
+  { "custom_78.ypos",                          "4"                     },
   { "custom_78.frames",                                "1"                     },
-  { "custom_78.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_78.EDITOR.xpos",                   "15"                    },
-  { "custom_78.EDITOR.ypos",                   "13"                    },
+  { "custom_78.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_78.EDITOR.xpos",                   "29"                    },
+  { "custom_78.EDITOR.ypos",                   "4"                     },
 
-  { "custom_79",                               "RocksElements.pcx"     },
-  { "custom_79.xpos",                          "7"                     },
-  { "custom_79.ypos",                          "9"                     },
+  { "custom_79",                               "RocksCE.pcx"           },
+  { "custom_79.xpos",                          "14"                    },
+  { "custom_79.ypos",                          "4"                     },
   { "custom_79.frames",                                "1"                     },
-  { "custom_79.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_79.EDITOR.xpos",                   "15"                    },
-  { "custom_79.EDITOR.ypos",                   "13"                    },
+  { "custom_79.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_79.EDITOR.xpos",                   "30"                    },
+  { "custom_79.EDITOR.ypos",                   "4"                     },
 
-  { "custom_80",                               "RocksElements.pcx"     },
-  { "custom_80.xpos",                          "7"                     },
-  { "custom_80.ypos",                          "9"                     },
+  { "custom_80",                               "RocksCE.pcx"           },
+  { "custom_80.xpos",                          "15"                    },
+  { "custom_80.ypos",                          "4"                     },
   { "custom_80.frames",                                "1"                     },
-  { "custom_80.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_80.EDITOR.xpos",                   "15"                    },
-  { "custom_80.EDITOR.ypos",                   "13"                    },
+  { "custom_80.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_80.EDITOR.xpos",                   "31"                    },
+  { "custom_80.EDITOR.ypos",                   "4"                     },
 
-  { "custom_81",                               "RocksElements.pcx"     },
-  { "custom_81.xpos",                          "7"                     },
-  { "custom_81.ypos",                          "9"                     },
+  { "custom_81",                               "RocksCE.pcx"           },
+  { "custom_81.xpos",                          "0"                     },
+  { "custom_81.ypos",                          "5"                     },
   { "custom_81.frames",                                "1"                     },
-  { "custom_81.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_81.EDITOR.xpos",                   "15"                    },
-  { "custom_81.EDITOR.ypos",                   "13"                    },
+  { "custom_81.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_81.EDITOR.xpos",                   "16"                    },
+  { "custom_81.EDITOR.ypos",                   "5"                     },
 
-  { "custom_82",                               "RocksElements.pcx"     },
-  { "custom_82.xpos",                          "7"                     },
-  { "custom_82.ypos",                          "9"                     },
+  { "custom_82",                               "RocksCE.pcx"           },
+  { "custom_82.xpos",                          "1"                     },
+  { "custom_82.ypos",                          "5"                     },
   { "custom_82.frames",                                "1"                     },
-  { "custom_82.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_82.EDITOR.xpos",                   "15"                    },
-  { "custom_82.EDITOR.ypos",                   "13"                    },
+  { "custom_82.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_82.EDITOR.xpos",                   "17"                    },
+  { "custom_82.EDITOR.ypos",                   "5"                     },
 
-  { "custom_83",                               "RocksElements.pcx"     },
-  { "custom_83.xpos",                          "7"                     },
-  { "custom_83.ypos",                          "9"                     },
+  { "custom_83",                               "RocksCE.pcx"           },
+  { "custom_83.xpos",                          "2"                     },
+  { "custom_83.ypos",                          "5"                     },
   { "custom_83.frames",                                "1"                     },
-  { "custom_83.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_83.EDITOR.xpos",                   "15"                    },
-  { "custom_83.EDITOR.ypos",                   "13"                    },
+  { "custom_83.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_83.EDITOR.xpos",                   "18"                    },
+  { "custom_83.EDITOR.ypos",                   "5"                     },
 
-  { "custom_84",                               "RocksElements.pcx"     },
-  { "custom_84.xpos",                          "7"                     },
-  { "custom_84.ypos",                          "9"                     },
+  { "custom_84",                               "RocksCE.pcx"           },
+  { "custom_84.xpos",                          "3"                     },
+  { "custom_84.ypos",                          "5"                     },
   { "custom_84.frames",                                "1"                     },
-  { "custom_84.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_84.EDITOR.xpos",                   "15"                    },
-  { "custom_84.EDITOR.ypos",                   "13"                    },
+  { "custom_84.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_84.EDITOR.xpos",                   "19"                    },
+  { "custom_84.EDITOR.ypos",                   "5"                     },
 
-  { "custom_85",                               "RocksElements.pcx"     },
-  { "custom_85.xpos",                          "7"                     },
-  { "custom_85.ypos",                          "9"                     },
+  { "custom_85",                               "RocksCE.pcx"           },
+  { "custom_85.xpos",                          "4"                     },
+  { "custom_85.ypos",                          "5"                     },
   { "custom_85.frames",                                "1"                     },
-  { "custom_85.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_85.EDITOR.xpos",                   "15"                    },
-  { "custom_85.EDITOR.ypos",                   "13"                    },
+  { "custom_85.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_85.EDITOR.xpos",                   "20"                    },
+  { "custom_85.EDITOR.ypos",                   "5"                     },
 
-  { "custom_86",                               "RocksElements.pcx"     },
-  { "custom_86.xpos",                          "7"                     },
-  { "custom_86.ypos",                          "9"                     },
+  { "custom_86",                               "RocksCE.pcx"           },
+  { "custom_86.xpos",                          "5"                     },
+  { "custom_86.ypos",                          "5"                     },
   { "custom_86.frames",                                "1"                     },
-  { "custom_86.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_86.EDITOR.xpos",                   "15"                    },
-  { "custom_86.EDITOR.ypos",                   "13"                    },
+  { "custom_86.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_86.EDITOR.xpos",                   "21"                    },
+  { "custom_86.EDITOR.ypos",                   "5"                     },
 
-  { "custom_87",                               "RocksElements.pcx"     },
-  { "custom_87.xpos",                          "7"                     },
-  { "custom_87.ypos",                          "9"                     },
+  { "custom_87",                               "RocksCE.pcx"           },
+  { "custom_87.xpos",                          "6"                     },
+  { "custom_87.ypos",                          "5"                     },
   { "custom_87.frames",                                "1"                     },
-  { "custom_87.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_87.EDITOR.xpos",                   "15"                    },
-  { "custom_87.EDITOR.ypos",                   "13"                    },
+  { "custom_87.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_87.EDITOR.xpos",                   "22"                    },
+  { "custom_87.EDITOR.ypos",                   "5"                     },
 
-  { "custom_88",                               "RocksElements.pcx"     },
+  { "custom_88",                               "RocksCE.pcx"           },
   { "custom_88.xpos",                          "7"                     },
-  { "custom_88.ypos",                          "9"                     },
+  { "custom_88.ypos",                          "5"                     },
   { "custom_88.frames",                                "1"                     },
-  { "custom_88.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_88.EDITOR.xpos",                   "15"                    },
-  { "custom_88.EDITOR.ypos",                   "13"                    },
+  { "custom_88.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_88.EDITOR.xpos",                   "23"                    },
+  { "custom_88.EDITOR.ypos",                   "5"                     },
 
-  { "custom_89",                               "RocksElements.pcx"     },
-  { "custom_89.xpos",                          "7"                     },
-  { "custom_89.ypos",                          "9"                     },
+  { "custom_89",                               "RocksCE.pcx"           },
+  { "custom_89.xpos",                          "8"                     },
+  { "custom_89.ypos",                          "5"                     },
   { "custom_89.frames",                                "1"                     },
-  { "custom_89.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_89.EDITOR.xpos",                   "15"                    },
-  { "custom_89.EDITOR.ypos",                   "13"                    },
+  { "custom_89.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_89.EDITOR.xpos",                   "24"                    },
+  { "custom_89.EDITOR.ypos",                   "5"                     },
 
-  { "custom_90",                               "RocksElements.pcx"     },
-  { "custom_90.xpos",                          "7"                     },
-  { "custom_90.ypos",                          "9"                     },
+  { "custom_90",                               "RocksCE.pcx"           },
+  { "custom_90.xpos",                          "9"                     },
+  { "custom_90.ypos",                          "5"                     },
   { "custom_90.frames",                                "1"                     },
-  { "custom_90.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_90.EDITOR.xpos",                   "15"                    },
-  { "custom_90.EDITOR.ypos",                   "13"                    },
+  { "custom_90.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_90.EDITOR.xpos",                   "25"                    },
+  { "custom_90.EDITOR.ypos",                   "5"                     },
 
-  { "custom_91",                               "RocksElements.pcx"     },
-  { "custom_91.xpos",                          "7"                     },
-  { "custom_91.ypos",                          "9"                     },
+  { "custom_91",                               "RocksCE.pcx"           },
+  { "custom_91.xpos",                          "10"                    },
+  { "custom_91.ypos",                          "5"                     },
   { "custom_91.frames",                                "1"                     },
-  { "custom_91.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_91.EDITOR.xpos",                   "15"                    },
-  { "custom_91.EDITOR.ypos",                   "13"                    },
+  { "custom_91.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_91.EDITOR.xpos",                   "26"                    },
+  { "custom_91.EDITOR.ypos",                   "5"                     },
 
-  { "custom_92",                               "RocksElements.pcx"     },
-  { "custom_92.xpos",                          "7"                     },
-  { "custom_92.ypos",                          "9"                     },
+  { "custom_92",                               "RocksCE.pcx"           },
+  { "custom_92.xpos",                          "11"                    },
+  { "custom_92.ypos",                          "5"                     },
   { "custom_92.frames",                                "1"                     },
-  { "custom_92.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_92.EDITOR.xpos",                   "15"                    },
-  { "custom_92.EDITOR.ypos",                   "13"                    },
+  { "custom_92.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_92.EDITOR.xpos",                   "27"                    },
+  { "custom_92.EDITOR.ypos",                   "5"                     },
 
-  { "custom_93",                               "RocksElements.pcx"     },
-  { "custom_93.xpos",                          "7"                     },
-  { "custom_93.ypos",                          "9"                     },
+  { "custom_93",                               "RocksCE.pcx"           },
+  { "custom_93.xpos",                          "12"                    },
+  { "custom_93.ypos",                          "5"                     },
   { "custom_93.frames",                                "1"                     },
-  { "custom_93.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_93.EDITOR.xpos",                   "15"                    },
-  { "custom_93.EDITOR.ypos",                   "13"                    },
+  { "custom_93.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_93.EDITOR.xpos",                   "28"                    },
+  { "custom_93.EDITOR.ypos",                   "5"                     },
 
-  { "custom_94",                               "RocksElements.pcx"     },
-  { "custom_94.xpos",                          "7"                     },
-  { "custom_94.ypos",                          "9"                     },
+  { "custom_94",                               "RocksCE.pcx"           },
+  { "custom_94.xpos",                          "13"                    },
+  { "custom_94.ypos",                          "5"                     },
   { "custom_94.frames",                                "1"                     },
-  { "custom_94.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_94.EDITOR.xpos",                   "15"                    },
-  { "custom_94.EDITOR.ypos",                   "13"                    },
+  { "custom_94.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_94.EDITOR.xpos",                   "29"                    },
+  { "custom_94.EDITOR.ypos",                   "5"                     },
 
-  { "custom_95",                               "RocksElements.pcx"     },
-  { "custom_95.xpos",                          "7"                     },
-  { "custom_95.ypos",                          "9"                     },
+  { "custom_95",                               "RocksCE.pcx"           },
+  { "custom_95.xpos",                          "14"                    },
+  { "custom_95.ypos",                          "5"                     },
   { "custom_95.frames",                                "1"                     },
-  { "custom_95.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_95.EDITOR.xpos",                   "15"                    },
-  { "custom_95.EDITOR.ypos",                   "13"                    },
+  { "custom_95.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_95.EDITOR.xpos",                   "30"                    },
+  { "custom_95.EDITOR.ypos",                   "5"                     },
 
-  { "custom_96",                               "RocksElements.pcx"     },
-  { "custom_96.xpos",                          "7"                     },
-  { "custom_96.ypos",                          "9"                     },
+  { "custom_96",                               "RocksCE.pcx"           },
+  { "custom_96.xpos",                          "15"                    },
+  { "custom_96.ypos",                          "5"                     },
   { "custom_96.frames",                                "1"                     },
-  { "custom_96.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_96.EDITOR.xpos",                   "15"                    },
-  { "custom_96.EDITOR.ypos",                   "13"                    },
+  { "custom_96.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_96.EDITOR.xpos",                   "31"                    },
+  { "custom_96.EDITOR.ypos",                   "5"                     },
 
-  { "custom_97",                               "RocksElements.pcx"     },
-  { "custom_97.xpos",                          "7"                     },
-  { "custom_97.ypos",                          "9"                     },
+  { "custom_97",                               "RocksCE.pcx"           },
+  { "custom_97.xpos",                          "0"                     },
+  { "custom_97.ypos",                          "6"                     },
   { "custom_97.frames",                                "1"                     },
-  { "custom_97.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_97.EDITOR.xpos",                   "15"                    },
-  { "custom_97.EDITOR.ypos",                   "13"                    },
+  { "custom_97.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_97.EDITOR.xpos",                   "16"                    },
+  { "custom_97.EDITOR.ypos",                   "6"                     },
 
-  { "custom_98",                               "RocksElements.pcx"     },
-  { "custom_98.xpos",                          "7"                     },
-  { "custom_98.ypos",                          "9"                     },
+  { "custom_98",                               "RocksCE.pcx"           },
+  { "custom_98.xpos",                          "1"                     },
+  { "custom_98.ypos",                          "6"                     },
   { "custom_98.frames",                                "1"                     },
-  { "custom_98.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_98.EDITOR.xpos",                   "15"                    },
-  { "custom_98.EDITOR.ypos",                   "13"                    },
+  { "custom_98.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_98.EDITOR.xpos",                   "17"                    },
+  { "custom_98.EDITOR.ypos",                   "6"                     },
 
-  { "custom_99",                               "RocksElements.pcx"     },
-  { "custom_99.xpos",                          "7"                     },
-  { "custom_99.ypos",                          "9"                     },
+  { "custom_99",                               "RocksCE.pcx"           },
+  { "custom_99.xpos",                          "2"                     },
+  { "custom_99.ypos",                          "6"                     },
   { "custom_99.frames",                                "1"                     },
-  { "custom_99.EDITOR",                                "RocksElements.pcx"     },
-  { "custom_99.EDITOR.xpos",                   "15"                    },
-  { "custom_99.EDITOR.ypos",                   "13"                    },
+  { "custom_99.EDITOR",                                "RocksCE.pcx"           },
+  { "custom_99.EDITOR.xpos",                   "18"                    },
+  { "custom_99.EDITOR.ypos",                   "6"                     },
 
-  { "custom_100",                              "RocksElements.pcx"     },
-  { "custom_100.xpos",                         "7"                     },
-  { "custom_100.ypos",                         "9"                     },
+  { "custom_100",                              "RocksCE.pcx"           },
+  { "custom_100.xpos",                         "3"                     },
+  { "custom_100.ypos",                         "6"                     },
   { "custom_100.frames",                       "1"                     },
-  { "custom_100.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_100.EDITOR.xpos",                  "15"                    },
-  { "custom_100.EDITOR.ypos",                  "13"                    },
+  { "custom_100.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_100.EDITOR.xpos",                  "19"                    },
+  { "custom_100.EDITOR.ypos",                  "6"                     },
 
-  { "custom_101",                              "RocksElements.pcx"     },
-  { "custom_101.xpos",                         "7"                     },
-  { "custom_101.ypos",                         "9"                     },
+  { "custom_101",                              "RocksCE.pcx"           },
+  { "custom_101.xpos",                         "4"                     },
+  { "custom_101.ypos",                         "6"                     },
   { "custom_101.frames",                       "1"                     },
-  { "custom_101.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_101.EDITOR.xpos",                  "15"                    },
-  { "custom_101.EDITOR.ypos",                  "13"                    },
+  { "custom_101.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_101.EDITOR.xpos",                  "20"                    },
+  { "custom_101.EDITOR.ypos",                  "6"                     },
 
-  { "custom_102",                              "RocksElements.pcx"     },
-  { "custom_102.xpos",                         "7"                     },
-  { "custom_102.ypos",                         "9"                     },
+  { "custom_102",                              "RocksCE.pcx"           },
+  { "custom_102.xpos",                         "5"                     },
+  { "custom_102.ypos",                         "6"                     },
   { "custom_102.frames",                       "1"                     },
-  { "custom_102.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_102.EDITOR.xpos",                  "15"                    },
-  { "custom_102.EDITOR.ypos",                  "13"                    },
+  { "custom_102.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_102.EDITOR.xpos",                  "21"                    },
+  { "custom_102.EDITOR.ypos",                  "6"                     },
 
-  { "custom_103",                              "RocksElements.pcx"     },
-  { "custom_103.xpos",                         "7"                     },
-  { "custom_103.ypos",                         "9"                     },
+  { "custom_103",                              "RocksCE.pcx"           },
+  { "custom_103.xpos",                         "6"                     },
+  { "custom_103.ypos",                         "6"                     },
   { "custom_103.frames",                       "1"                     },
-  { "custom_103.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_103.EDITOR.xpos",                  "15"                    },
-  { "custom_103.EDITOR.ypos",                  "13"                    },
+  { "custom_103.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_103.EDITOR.xpos",                  "22"                    },
+  { "custom_103.EDITOR.ypos",                  "6"                     },
 
-  { "custom_104",                              "RocksElements.pcx"     },
+  { "custom_104",                              "RocksCE.pcx"           },
   { "custom_104.xpos",                         "7"                     },
-  { "custom_104.ypos",                         "9"                     },
+  { "custom_104.ypos",                         "6"                     },
   { "custom_104.frames",                       "1"                     },
-  { "custom_104.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_104.EDITOR.xpos",                  "15"                    },
-  { "custom_104.EDITOR.ypos",                  "13"                    },
+  { "custom_104.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_104.EDITOR.xpos",                  "23"                    },
+  { "custom_104.EDITOR.ypos",                  "6"                     },
 
-  { "custom_105",                              "RocksElements.pcx"     },
-  { "custom_105.xpos",                         "7"                     },
-  { "custom_105.ypos",                         "9"                     },
+  { "custom_105",                              "RocksCE.pcx"           },
+  { "custom_105.xpos",                         "8"                     },
+  { "custom_105.ypos",                         "6"                     },
   { "custom_105.frames",                       "1"                     },
-  { "custom_105.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_105.EDITOR.xpos",                  "15"                    },
-  { "custom_105.EDITOR.ypos",                  "13"                    },
+  { "custom_105.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_105.EDITOR.xpos",                  "24"                    },
+  { "custom_105.EDITOR.ypos",                  "6"                     },
 
-  { "custom_106",                              "RocksElements.pcx"     },
-  { "custom_106.xpos",                         "7"                     },
-  { "custom_106.ypos",                         "9"                     },
+  { "custom_106",                              "RocksCE.pcx"           },
+  { "custom_106.xpos",                         "9"                     },
+  { "custom_106.ypos",                         "6"                     },
   { "custom_106.frames",                       "1"                     },
-  { "custom_106.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_106.EDITOR.xpos",                  "15"                    },
-  { "custom_106.EDITOR.ypos",                  "13"                    },
+  { "custom_106.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_106.EDITOR.xpos",                  "25"                    },
+  { "custom_106.EDITOR.ypos",                  "6"                     },
 
-  { "custom_107",                              "RocksElements.pcx"     },
-  { "custom_107.xpos",                         "7"                     },
-  { "custom_107.ypos",                         "9"                     },
+  { "custom_107",                              "RocksCE.pcx"           },
+  { "custom_107.xpos",                         "10"                    },
+  { "custom_107.ypos",                         "6"                     },
   { "custom_107.frames",                       "1"                     },
-  { "custom_107.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_107.EDITOR.xpos",                  "15"                    },
-  { "custom_107.EDITOR.ypos",                  "13"                    },
+  { "custom_107.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_107.EDITOR.xpos",                  "26"                    },
+  { "custom_107.EDITOR.ypos",                  "6"                     },
 
-  { "custom_108",                              "RocksElements.pcx"     },
-  { "custom_108.xpos",                         "7"                     },
-  { "custom_108.ypos",                         "9"                     },
+  { "custom_108",                              "RocksCE.pcx"           },
+  { "custom_108.xpos",                         "11"                    },
+  { "custom_108.ypos",                         "6"                     },
   { "custom_108.frames",                       "1"                     },
-  { "custom_108.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_108.EDITOR.xpos",                  "15"                    },
-  { "custom_108.EDITOR.ypos",                  "13"                    },
+  { "custom_108.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_108.EDITOR.xpos",                  "27"                    },
+  { "custom_108.EDITOR.ypos",                  "6"                     },
 
-  { "custom_109",                              "RocksElements.pcx"     },
-  { "custom_109.xpos",                         "7"                     },
-  { "custom_109.ypos",                         "9"                     },
+  { "custom_109",                              "RocksCE.pcx"           },
+  { "custom_109.xpos",                         "12"                    },
+  { "custom_109.ypos",                         "6"                     },
   { "custom_109.frames",                       "1"                     },
-  { "custom_109.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_109.EDITOR.xpos",                  "15"                    },
-  { "custom_109.EDITOR.ypos",                  "13"                    },
+  { "custom_109.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_109.EDITOR.xpos",                  "28"                    },
+  { "custom_109.EDITOR.ypos",                  "6"                     },
 
-  { "custom_110",                              "RocksElements.pcx"     },
-  { "custom_110.xpos",                         "7"                     },
-  { "custom_110.ypos",                         "9"                     },
+  { "custom_110",                              "RocksCE.pcx"           },
+  { "custom_110.xpos",                         "13"                    },
+  { "custom_110.ypos",                         "6"                     },
   { "custom_110.frames",                       "1"                     },
-  { "custom_110.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_110.EDITOR.xpos",                  "15"                    },
-  { "custom_110.EDITOR.ypos",                  "13"                    },
+  { "custom_110.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_110.EDITOR.xpos",                  "29"                    },
+  { "custom_110.EDITOR.ypos",                  "6"                     },
 
-  { "custom_111",                              "RocksElements.pcx"     },
-  { "custom_111.xpos",                         "7"                     },
-  { "custom_111.ypos",                         "9"                     },
+  { "custom_111",                              "RocksCE.pcx"           },
+  { "custom_111.xpos",                         "14"                    },
+  { "custom_111.ypos",                         "6"                     },
   { "custom_111.frames",                       "1"                     },
-  { "custom_111.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_111.EDITOR.xpos",                  "15"                    },
-  { "custom_111.EDITOR.ypos",                  "13"                    },
+  { "custom_111.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_111.EDITOR.xpos",                  "30"                    },
+  { "custom_111.EDITOR.ypos",                  "6"                     },
 
-  { "custom_112",                              "RocksElements.pcx"     },
-  { "custom_112.xpos",                         "7"                     },
-  { "custom_112.ypos",                         "9"                     },
+  { "custom_112",                              "RocksCE.pcx"           },
+  { "custom_112.xpos",                         "15"                    },
+  { "custom_112.ypos",                         "6"                     },
   { "custom_112.frames",                       "1"                     },
-  { "custom_112.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_112.EDITOR.xpos",                  "15"                    },
-  { "custom_112.EDITOR.ypos",                  "13"                    },
+  { "custom_112.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_112.EDITOR.xpos",                  "31"                    },
+  { "custom_112.EDITOR.ypos",                  "6"                     },
 
-  { "custom_113",                              "RocksElements.pcx"     },
-  { "custom_113.xpos",                         "7"                     },
-  { "custom_113.ypos",                         "9"                     },
+  { "custom_113",                              "RocksCE.pcx"           },
+  { "custom_113.xpos",                         "0"                     },
+  { "custom_113.ypos",                         "7"                     },
   { "custom_113.frames",                       "1"                     },
-  { "custom_113.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_113.EDITOR.xpos",                  "15"                    },
-  { "custom_113.EDITOR.ypos",                  "13"                    },
+  { "custom_113.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_113.EDITOR.xpos",                  "16"                    },
+  { "custom_113.EDITOR.ypos",                  "7"                     },
 
-  { "custom_114",                              "RocksElements.pcx"     },
-  { "custom_114.xpos",                         "7"                     },
-  { "custom_114.ypos",                         "9"                     },
+  { "custom_114",                              "RocksCE.pcx"           },
+  { "custom_114.xpos",                         "1"                     },
+  { "custom_114.ypos",                         "7"                     },
   { "custom_114.frames",                       "1"                     },
-  { "custom_114.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_114.EDITOR.xpos",                  "15"                    },
-  { "custom_114.EDITOR.ypos",                  "13"                    },
+  { "custom_114.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_114.EDITOR.xpos",                  "17"                    },
+  { "custom_114.EDITOR.ypos",                  "7"                     },
 
-  { "custom_115",                              "RocksElements.pcx"     },
-  { "custom_115.xpos",                         "7"                     },
-  { "custom_115.ypos",                         "9"                     },
+  { "custom_115",                              "RocksCE.pcx"           },
+  { "custom_115.xpos",                         "2"                     },
+  { "custom_115.ypos",                         "7"                     },
   { "custom_115.frames",                       "1"                     },
-  { "custom_115.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_115.EDITOR.xpos",                  "15"                    },
-  { "custom_115.EDITOR.ypos",                  "13"                    },
+  { "custom_115.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_115.EDITOR.xpos",                  "18"                    },
+  { "custom_115.EDITOR.ypos",                  "7"                     },
 
-  { "custom_116",                              "RocksElements.pcx"     },
-  { "custom_116.xpos",                         "7"                     },
-  { "custom_116.ypos",                         "9"                     },
+  { "custom_116",                              "RocksCE.pcx"           },
+  { "custom_116.xpos",                         "3"                     },
+  { "custom_116.ypos",                         "7"                     },
   { "custom_116.frames",                       "1"                     },
-  { "custom_116.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_116.EDITOR.xpos",                  "15"                    },
-  { "custom_116.EDITOR.ypos",                  "13"                    },
+  { "custom_116.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_116.EDITOR.xpos",                  "19"                    },
+  { "custom_116.EDITOR.ypos",                  "7"                     },
 
-  { "custom_117",                              "RocksElements.pcx"     },
-  { "custom_117.xpos",                         "7"                     },
-  { "custom_117.ypos",                         "9"                     },
+  { "custom_117",                              "RocksCE.pcx"           },
+  { "custom_117.xpos",                         "4"                     },
+  { "custom_117.ypos",                         "7"                     },
   { "custom_117.frames",                       "1"                     },
-  { "custom_117.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_117.EDITOR.xpos",                  "15"                    },
-  { "custom_117.EDITOR.ypos",                  "13"                    },
+  { "custom_117.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_117.EDITOR.xpos",                  "20"                    },
+  { "custom_117.EDITOR.ypos",                  "7"                     },
 
-  { "custom_118",                              "RocksElements.pcx"     },
-  { "custom_118.xpos",                         "7"                     },
-  { "custom_118.ypos",                         "9"                     },
+  { "custom_118",                              "RocksCE.pcx"           },
+  { "custom_118.xpos",                         "5"                     },
+  { "custom_118.ypos",                         "7"                     },
   { "custom_118.frames",                       "1"                     },
-  { "custom_118.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_118.EDITOR.xpos",                  "15"                    },
-  { "custom_118.EDITOR.ypos",                  "13"                    },
+  { "custom_118.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_118.EDITOR.xpos",                  "21"                    },
+  { "custom_118.EDITOR.ypos",                  "7"                     },
 
-  { "custom_119",                              "RocksElements.pcx"     },
-  { "custom_119.xpos",                         "7"                     },
-  { "custom_119.ypos",                         "9"                     },
+  { "custom_119",                              "RocksCE.pcx"           },
+  { "custom_119.xpos",                         "6"                     },
+  { "custom_119.ypos",                         "7"                     },
   { "custom_119.frames",                       "1"                     },
-  { "custom_119.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_119.EDITOR.xpos",                  "15"                    },
-  { "custom_119.EDITOR.ypos",                  "13"                    },
+  { "custom_119.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_119.EDITOR.xpos",                  "22"                    },
+  { "custom_119.EDITOR.ypos",                  "7"                     },
 
-  { "custom_120",                              "RocksElements.pcx"     },
+  { "custom_120",                              "RocksCE.pcx"           },
   { "custom_120.xpos",                         "7"                     },
-  { "custom_120.ypos",                         "9"                     },
+  { "custom_120.ypos",                         "7"                     },
   { "custom_120.frames",                       "1"                     },
-  { "custom_120.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_120.EDITOR.xpos",                  "15"                    },
-  { "custom_120.EDITOR.ypos",                  "13"                    },
+  { "custom_120.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_120.EDITOR.xpos",                  "23"                    },
+  { "custom_120.EDITOR.ypos",                  "7"                     },
 
-  { "custom_121",                              "RocksElements.pcx"     },
-  { "custom_121.xpos",                         "7"                     },
-  { "custom_121.ypos",                         "9"                     },
+  { "custom_121",                              "RocksCE.pcx"           },
+  { "custom_121.xpos",                         "8"                     },
+  { "custom_121.ypos",                         "7"                     },
   { "custom_121.frames",                       "1"                     },
-  { "custom_121.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_121.EDITOR.xpos",                  "15"                    },
-  { "custom_121.EDITOR.ypos",                  "13"                    },
+  { "custom_121.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_121.EDITOR.xpos",                  "24"                    },
+  { "custom_121.EDITOR.ypos",                  "7"                     },
 
-  { "custom_122",                              "RocksElements.pcx"     },
-  { "custom_122.xpos",                         "7"                     },
-  { "custom_122.ypos",                         "9"                     },
+  { "custom_122",                              "RocksCE.pcx"           },
+  { "custom_122.xpos",                         "9"                     },
+  { "custom_122.ypos",                         "7"                     },
   { "custom_122.frames",                       "1"                     },
-  { "custom_122.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_122.EDITOR.xpos",                  "15"                    },
-  { "custom_122.EDITOR.ypos",                  "13"                    },
+  { "custom_122.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_122.EDITOR.xpos",                  "25"                    },
+  { "custom_122.EDITOR.ypos",                  "7"                     },
 
-  { "custom_123",                              "RocksElements.pcx"     },
-  { "custom_123.xpos",                         "7"                     },
-  { "custom_123.ypos",                         "9"                     },
+  { "custom_123",                              "RocksCE.pcx"           },
+  { "custom_123.xpos",                         "10"                    },
+  { "custom_123.ypos",                         "7"                     },
   { "custom_123.frames",                       "1"                     },
-  { "custom_123.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_123.EDITOR.xpos",                  "15"                    },
-  { "custom_123.EDITOR.ypos",                  "13"                    },
+  { "custom_123.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_123.EDITOR.xpos",                  "26"                    },
+  { "custom_123.EDITOR.ypos",                  "7"                     },
 
-  { "custom_124",                              "RocksElements.pcx"     },
-  { "custom_124.xpos",                         "7"                     },
-  { "custom_124.ypos",                         "9"                     },
+  { "custom_124",                              "RocksCE.pcx"           },
+  { "custom_124.xpos",                         "11"                    },
+  { "custom_124.ypos",                         "7"                     },
   { "custom_124.frames",                       "1"                     },
-  { "custom_124.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_124.EDITOR.xpos",                  "15"                    },
-  { "custom_124.EDITOR.ypos",                  "13"                    },
+  { "custom_124.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_124.EDITOR.xpos",                  "27"                    },
+  { "custom_124.EDITOR.ypos",                  "7"                     },
 
-  { "custom_125",                              "RocksElements.pcx"     },
-  { "custom_125.xpos",                         "7"                     },
-  { "custom_125.ypos",                         "9"                     },
+  { "custom_125",                              "RocksCE.pcx"           },
+  { "custom_125.xpos",                         "12"                    },
+  { "custom_125.ypos",                         "7"                     },
   { "custom_125.frames",                       "1"                     },
-  { "custom_125.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_125.EDITOR.xpos",                  "15"                    },
-  { "custom_125.EDITOR.ypos",                  "13"                    },
+  { "custom_125.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_125.EDITOR.xpos",                  "28"                    },
+  { "custom_125.EDITOR.ypos",                  "7"                     },
 
-  { "custom_126",                              "RocksElements.pcx"     },
-  { "custom_126.xpos",                         "7"                     },
-  { "custom_126.ypos",                         "9"                     },
+  { "custom_126",                              "RocksCE.pcx"           },
+  { "custom_126.xpos",                         "13"                    },
+  { "custom_126.ypos",                         "7"                     },
   { "custom_126.frames",                       "1"                     },
-  { "custom_126.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_126.EDITOR.xpos",                  "15"                    },
-  { "custom_126.EDITOR.ypos",                  "13"                    },
+  { "custom_126.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_126.EDITOR.xpos",                  "29"                    },
+  { "custom_126.EDITOR.ypos",                  "7"                     },
 
-  { "custom_127",                              "RocksElements.pcx"     },
-  { "custom_127.xpos",                         "7"                     },
-  { "custom_127.ypos",                         "9"                     },
+  { "custom_127",                              "RocksCE.pcx"           },
+  { "custom_127.xpos",                         "14"                    },
+  { "custom_127.ypos",                         "7"                     },
   { "custom_127.frames",                       "1"                     },
-  { "custom_127.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_127.EDITOR.xpos",                  "15"                    },
-  { "custom_127.EDITOR.ypos",                  "13"                    },
+  { "custom_127.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_127.EDITOR.xpos",                  "30"                    },
+  { "custom_127.EDITOR.ypos",                  "7"                     },
 
-  { "custom_128",                              "RocksElements.pcx"     },
-  { "custom_128.xpos",                         "7"                     },
-  { "custom_128.ypos",                         "9"                     },
+  { "custom_128",                              "RocksCE.pcx"           },
+  { "custom_128.xpos",                         "15"                    },
+  { "custom_128.ypos",                         "7"                     },
   { "custom_128.frames",                       "1"                     },
-  { "custom_128.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_128.EDITOR.xpos",                  "15"                    },
-  { "custom_128.EDITOR.ypos",                  "13"                    },
+  { "custom_128.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_128.EDITOR.xpos",                  "31"                    },
+  { "custom_128.EDITOR.ypos",                  "7"                     },
 
-  { "custom_129",                              "RocksElements.pcx"     },
-  { "custom_129.xpos",                         "7"                     },
-  { "custom_129.ypos",                         "9"                     },
+  { "custom_129",                              "RocksCE.pcx"           },
+  { "custom_129.xpos",                         "0"                     },
+  { "custom_129.ypos",                         "8"                     },
   { "custom_129.frames",                       "1"                     },
-  { "custom_129.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_129.EDITOR.xpos",                  "15"                    },
-  { "custom_129.EDITOR.ypos",                  "13"                    },
+  { "custom_129.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_129.EDITOR.xpos",                  "16"                    },
+  { "custom_129.EDITOR.ypos",                  "8"                     },
 
-  { "custom_130",                              "RocksElements.pcx"     },
-  { "custom_130.xpos",                         "7"                     },
-  { "custom_130.ypos",                         "9"                     },
+  { "custom_130",                              "RocksCE.pcx"           },
+  { "custom_130.xpos",                         "1"                     },
+  { "custom_130.ypos",                         "8"                     },
   { "custom_130.frames",                       "1"                     },
-  { "custom_130.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_130.EDITOR.xpos",                  "15"                    },
-  { "custom_130.EDITOR.ypos",                  "13"                    },
+  { "custom_130.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_130.EDITOR.xpos",                  "17"                    },
+  { "custom_130.EDITOR.ypos",                  "8"                     },
 
-  { "custom_131",                              "RocksElements.pcx"     },
-  { "custom_131.xpos",                         "7"                     },
-  { "custom_131.ypos",                         "9"                     },
+  { "custom_131",                              "RocksCE.pcx"           },
+  { "custom_131.xpos",                         "2"                     },
+  { "custom_131.ypos",                         "8"                     },
   { "custom_131.frames",                       "1"                     },
-  { "custom_131.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_131.EDITOR.xpos",                  "15"                    },
-  { "custom_131.EDITOR.ypos",                  "13"                    },
+  { "custom_131.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_131.EDITOR.xpos",                  "18"                    },
+  { "custom_131.EDITOR.ypos",                  "8"                     },
 
-  { "custom_132",                              "RocksElements.pcx"     },
-  { "custom_132.xpos",                         "7"                     },
-  { "custom_132.ypos",                         "9"                     },
+  { "custom_132",                              "RocksCE.pcx"           },
+  { "custom_132.xpos",                         "3"                     },
+  { "custom_132.ypos",                         "8"                     },
   { "custom_132.frames",                       "1"                     },
-  { "custom_132.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_132.EDITOR.xpos",                  "15"                    },
-  { "custom_132.EDITOR.ypos",                  "13"                    },
+  { "custom_132.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_132.EDITOR.xpos",                  "19"                    },
+  { "custom_132.EDITOR.ypos",                  "8"                     },
 
-  { "custom_133",                              "RocksElements.pcx"     },
-  { "custom_133.xpos",                         "7"                     },
-  { "custom_133.ypos",                         "9"                     },
+  { "custom_133",                              "RocksCE.pcx"           },
+  { "custom_133.xpos",                         "4"                     },
+  { "custom_133.ypos",                         "8"                     },
   { "custom_133.frames",                       "1"                     },
-  { "custom_133.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_133.EDITOR.xpos",                  "15"                    },
-  { "custom_133.EDITOR.ypos",                  "13"                    },
+  { "custom_133.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_133.EDITOR.xpos",                  "20"                    },
+  { "custom_133.EDITOR.ypos",                  "8"                     },
 
-  { "custom_134",                              "RocksElements.pcx"     },
-  { "custom_134.xpos",                         "7"                     },
-  { "custom_134.ypos",                         "9"                     },
+  { "custom_134",                              "RocksCE.pcx"           },
+  { "custom_134.xpos",                         "5"                     },
+  { "custom_134.ypos",                         "8"                     },
   { "custom_134.frames",                       "1"                     },
-  { "custom_134.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_134.EDITOR.xpos",                  "15"                    },
-  { "custom_134.EDITOR.ypos",                  "13"                    },
+  { "custom_134.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_134.EDITOR.xpos",                  "21"                    },
+  { "custom_134.EDITOR.ypos",                  "8"                     },
 
-  { "custom_135",                              "RocksElements.pcx"     },
-  { "custom_135.xpos",                         "7"                     },
-  { "custom_135.ypos",                         "9"                     },
+  { "custom_135",                              "RocksCE.pcx"           },
+  { "custom_135.xpos",                         "6"                     },
+  { "custom_135.ypos",                         "8"                     },
   { "custom_135.frames",                       "1"                     },
-  { "custom_135.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_135.EDITOR.xpos",                  "15"                    },
-  { "custom_135.EDITOR.ypos",                  "13"                    },
+  { "custom_135.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_135.EDITOR.xpos",                  "22"                    },
+  { "custom_135.EDITOR.ypos",                  "8"                     },
 
-  { "custom_136",                              "RocksElements.pcx"     },
+  { "custom_136",                              "RocksCE.pcx"           },
   { "custom_136.xpos",                         "7"                     },
-  { "custom_136.ypos",                         "9"                     },
+  { "custom_136.ypos",                         "8"                     },
   { "custom_136.frames",                       "1"                     },
-  { "custom_136.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_136.EDITOR.xpos",                  "15"                    },
-  { "custom_136.EDITOR.ypos",                  "13"                    },
+  { "custom_136.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_136.EDITOR.xpos",                  "23"                    },
+  { "custom_136.EDITOR.ypos",                  "8"                     },
 
-  { "custom_137",                              "RocksElements.pcx"     },
-  { "custom_137.xpos",                         "7"                     },
-  { "custom_137.ypos",                         "9"                     },
+  { "custom_137",                              "RocksCE.pcx"           },
+  { "custom_137.xpos",                         "8"                     },
+  { "custom_137.ypos",                         "8"                     },
   { "custom_137.frames",                       "1"                     },
-  { "custom_137.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_137.EDITOR.xpos",                  "15"                    },
-  { "custom_137.EDITOR.ypos",                  "13"                    },
+  { "custom_137.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_137.EDITOR.xpos",                  "24"                    },
+  { "custom_137.EDITOR.ypos",                  "8"                     },
 
-  { "custom_138",                              "RocksElements.pcx"     },
-  { "custom_138.xpos",                         "7"                     },
-  { "custom_138.ypos",                         "9"                     },
+  { "custom_138",                              "RocksCE.pcx"           },
+  { "custom_138.xpos",                         "9"                     },
+  { "custom_138.ypos",                         "8"                     },
   { "custom_138.frames",                       "1"                     },
-  { "custom_138.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_138.EDITOR.xpos",                  "15"                    },
-  { "custom_138.EDITOR.ypos",                  "13"                    },
+  { "custom_138.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_138.EDITOR.xpos",                  "25"                    },
+  { "custom_138.EDITOR.ypos",                  "8"                     },
 
-  { "custom_139",                              "RocksElements.pcx"     },
-  { "custom_139.xpos",                         "7"                     },
-  { "custom_139.ypos",                         "9"                     },
+  { "custom_139",                              "RocksCE.pcx"           },
+  { "custom_139.xpos",                         "10"                    },
+  { "custom_139.ypos",                         "8"                     },
   { "custom_139.frames",                       "1"                     },
-  { "custom_139.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_139.EDITOR.xpos",                  "15"                    },
-  { "custom_139.EDITOR.ypos",                  "13"                    },
+  { "custom_139.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_139.EDITOR.xpos",                  "26"                    },
+  { "custom_139.EDITOR.ypos",                  "8"                     },
 
-  { "custom_140",                              "RocksElements.pcx"     },
-  { "custom_140.xpos",                         "7"                     },
-  { "custom_140.ypos",                         "9"                     },
+  { "custom_140",                              "RocksCE.pcx"           },
+  { "custom_140.xpos",                         "11"                    },
+  { "custom_140.ypos",                         "8"                     },
   { "custom_140.frames",                       "1"                     },
-  { "custom_140.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_140.EDITOR.xpos",                  "15"                    },
-  { "custom_140.EDITOR.ypos",                  "13"                    },
+  { "custom_140.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_140.EDITOR.xpos",                  "27"                    },
+  { "custom_140.EDITOR.ypos",                  "8"                     },
 
-  { "custom_141",                              "RocksElements.pcx"     },
-  { "custom_141.xpos",                         "7"                     },
-  { "custom_141.ypos",                         "9"                     },
+  { "custom_141",                              "RocksCE.pcx"           },
+  { "custom_141.xpos",                         "12"                    },
+  { "custom_141.ypos",                         "8"                     },
   { "custom_141.frames",                       "1"                     },
-  { "custom_141.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_141.EDITOR.xpos",                  "15"                    },
-  { "custom_141.EDITOR.ypos",                  "13"                    },
+  { "custom_141.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_141.EDITOR.xpos",                  "28"                    },
+  { "custom_141.EDITOR.ypos",                  "8"                     },
 
-  { "custom_142",                              "RocksElements.pcx"     },
-  { "custom_142.xpos",                         "7"                     },
-  { "custom_142.ypos",                         "9"                     },
+  { "custom_142",                              "RocksCE.pcx"           },
+  { "custom_142.xpos",                         "13"                    },
+  { "custom_142.ypos",                         "8"                     },
   { "custom_142.frames",                       "1"                     },
-  { "custom_142.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_142.EDITOR.xpos",                  "15"                    },
-  { "custom_142.EDITOR.ypos",                  "13"                    },
+  { "custom_142.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_142.EDITOR.xpos",                  "29"                    },
+  { "custom_142.EDITOR.ypos",                  "8"                     },
 
-  { "custom_143",                              "RocksElements.pcx"     },
-  { "custom_143.xpos",                         "7"                     },
-  { "custom_143.ypos",                         "9"                     },
+  { "custom_143",                              "RocksCE.pcx"           },
+  { "custom_143.xpos",                         "14"                    },
+  { "custom_143.ypos",                         "8"                     },
   { "custom_143.frames",                       "1"                     },
-  { "custom_143.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_143.EDITOR.xpos",                  "15"                    },
-  { "custom_143.EDITOR.ypos",                  "13"                    },
+  { "custom_143.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_143.EDITOR.xpos",                  "30"                    },
+  { "custom_143.EDITOR.ypos",                  "8"                     },
 
-  { "custom_144",                              "RocksElements.pcx"     },
-  { "custom_144.xpos",                         "7"                     },
-  { "custom_144.ypos",                         "9"                     },
+  { "custom_144",                              "RocksCE.pcx"           },
+  { "custom_144.xpos",                         "15"                    },
+  { "custom_144.ypos",                         "8"                     },
   { "custom_144.frames",                       "1"                     },
-  { "custom_144.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_144.EDITOR.xpos",                  "15"                    },
-  { "custom_144.EDITOR.ypos",                  "13"                    },
+  { "custom_144.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_144.EDITOR.xpos",                  "31"                    },
+  { "custom_144.EDITOR.ypos",                  "8"                     },
 
-  { "custom_145",                              "RocksElements.pcx"     },
-  { "custom_145.xpos",                         "7"                     },
+  { "custom_145",                              "RocksCE.pcx"           },
+  { "custom_145.xpos",                         "0"                     },
   { "custom_145.ypos",                         "9"                     },
   { "custom_145.frames",                       "1"                     },
-  { "custom_145.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_145.EDITOR.xpos",                  "15"                    },
-  { "custom_145.EDITOR.ypos",                  "13"                    },
+  { "custom_145.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_145.EDITOR.xpos",                  "16"                    },
+  { "custom_145.EDITOR.ypos",                  "9"                     },
 
-  { "custom_146",                              "RocksElements.pcx"     },
-  { "custom_146.xpos",                         "7"                     },
+  { "custom_146",                              "RocksCE.pcx"           },
+  { "custom_146.xpos",                         "1"                     },
   { "custom_146.ypos",                         "9"                     },
   { "custom_146.frames",                       "1"                     },
-  { "custom_146.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_146.EDITOR.xpos",                  "15"                    },
-  { "custom_146.EDITOR.ypos",                  "13"                    },
+  { "custom_146.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_146.EDITOR.xpos",                  "17"                    },
+  { "custom_146.EDITOR.ypos",                  "9"                     },
 
-  { "custom_147",                              "RocksElements.pcx"     },
-  { "custom_147.xpos",                         "7"                     },
+  { "custom_147",                              "RocksCE.pcx"           },
+  { "custom_147.xpos",                         "2"                     },
   { "custom_147.ypos",                         "9"                     },
   { "custom_147.frames",                       "1"                     },
-  { "custom_147.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_147.EDITOR.xpos",                  "15"                    },
-  { "custom_147.EDITOR.ypos",                  "13"                    },
+  { "custom_147.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_147.EDITOR.xpos",                  "18"                    },
+  { "custom_147.EDITOR.ypos",                  "9"                     },
 
-  { "custom_148",                              "RocksElements.pcx"     },
-  { "custom_148.xpos",                         "7"                     },
+  { "custom_148",                              "RocksCE.pcx"           },
+  { "custom_148.xpos",                         "3"                     },
   { "custom_148.ypos",                         "9"                     },
   { "custom_148.frames",                       "1"                     },
-  { "custom_148.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_148.EDITOR.xpos",                  "15"                    },
-  { "custom_148.EDITOR.ypos",                  "13"                    },
+  { "custom_148.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_148.EDITOR.xpos",                  "19"                    },
+  { "custom_148.EDITOR.ypos",                  "9"                     },
 
-  { "custom_149",                              "RocksElements.pcx"     },
-  { "custom_149.xpos",                         "7"                     },
+  { "custom_149",                              "RocksCE.pcx"           },
+  { "custom_149.xpos",                         "4"                     },
   { "custom_149.ypos",                         "9"                     },
   { "custom_149.frames",                       "1"                     },
-  { "custom_149.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_149.EDITOR.xpos",                  "15"                    },
-  { "custom_149.EDITOR.ypos",                  "13"                    },
+  { "custom_149.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_149.EDITOR.xpos",                  "20"                    },
+  { "custom_149.EDITOR.ypos",                  "9"                     },
 
-  { "custom_150",                              "RocksElements.pcx"     },
-  { "custom_150.xpos",                         "7"                     },
+  { "custom_150",                              "RocksCE.pcx"           },
+  { "custom_150.xpos",                         "5"                     },
   { "custom_150.ypos",                         "9"                     },
   { "custom_150.frames",                       "1"                     },
-  { "custom_150.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_150.EDITOR.xpos",                  "15"                    },
-  { "custom_150.EDITOR.ypos",                  "13"                    },
+  { "custom_150.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_150.EDITOR.xpos",                  "21"                    },
+  { "custom_150.EDITOR.ypos",                  "9"                     },
 
-  { "custom_151",                              "RocksElements.pcx"     },
-  { "custom_151.xpos",                         "7"                     },
+  { "custom_151",                              "RocksCE.pcx"           },
+  { "custom_151.xpos",                         "6"                     },
   { "custom_151.ypos",                         "9"                     },
   { "custom_151.frames",                       "1"                     },
-  { "custom_151.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_151.EDITOR.xpos",                  "15"                    },
-  { "custom_151.EDITOR.ypos",                  "13"                    },
+  { "custom_151.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_151.EDITOR.xpos",                  "22"                    },
+  { "custom_151.EDITOR.ypos",                  "9"                     },
 
-  { "custom_152",                              "RocksElements.pcx"     },
+  { "custom_152",                              "RocksCE.pcx"           },
   { "custom_152.xpos",                         "7"                     },
   { "custom_152.ypos",                         "9"                     },
   { "custom_152.frames",                       "1"                     },
-  { "custom_152.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_152.EDITOR.xpos",                  "15"                    },
-  { "custom_152.EDITOR.ypos",                  "13"                    },
+  { "custom_152.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_152.EDITOR.xpos",                  "23"                    },
+  { "custom_152.EDITOR.ypos",                  "9"                     },
 
-  { "custom_153",                              "RocksElements.pcx"     },
-  { "custom_153.xpos",                         "7"                     },
+  { "custom_153",                              "RocksCE.pcx"           },
+  { "custom_153.xpos",                         "8"                     },
   { "custom_153.ypos",                         "9"                     },
   { "custom_153.frames",                       "1"                     },
-  { "custom_153.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_153.EDITOR.xpos",                  "15"                    },
-  { "custom_153.EDITOR.ypos",                  "13"                    },
+  { "custom_153.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_153.EDITOR.xpos",                  "24"                    },
+  { "custom_153.EDITOR.ypos",                  "9"                     },
 
-  { "custom_154",                              "RocksElements.pcx"     },
-  { "custom_154.xpos",                         "7"                     },
+  { "custom_154",                              "RocksCE.pcx"           },
+  { "custom_154.xpos",                         "9"                     },
   { "custom_154.ypos",                         "9"                     },
   { "custom_154.frames",                       "1"                     },
-  { "custom_154.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_154.EDITOR.xpos",                  "15"                    },
-  { "custom_154.EDITOR.ypos",                  "13"                    },
+  { "custom_154.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_154.EDITOR.xpos",                  "25"                    },
+  { "custom_154.EDITOR.ypos",                  "9"                     },
 
-  { "custom_155",                              "RocksElements.pcx"     },
-  { "custom_155.xpos",                         "7"                     },
+  { "custom_155",                              "RocksCE.pcx"           },
+  { "custom_155.xpos",                         "10"                    },
   { "custom_155.ypos",                         "9"                     },
   { "custom_155.frames",                       "1"                     },
-  { "custom_155.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_155.EDITOR.xpos",                  "15"                    },
-  { "custom_155.EDITOR.ypos",                  "13"                    },
+  { "custom_155.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_155.EDITOR.xpos",                  "26"                    },
+  { "custom_155.EDITOR.ypos",                  "9"                     },
 
-  { "custom_156",                              "RocksElements.pcx"     },
-  { "custom_156.xpos",                         "7"                     },
+  { "custom_156",                              "RocksCE.pcx"           },
+  { "custom_156.xpos",                         "11"                    },
   { "custom_156.ypos",                         "9"                     },
   { "custom_156.frames",                       "1"                     },
-  { "custom_156.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_156.EDITOR.xpos",                  "15"                    },
-  { "custom_156.EDITOR.ypos",                  "13"                    },
+  { "custom_156.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_156.EDITOR.xpos",                  "27"                    },
+  { "custom_156.EDITOR.ypos",                  "9"                     },
 
-  { "custom_157",                              "RocksElements.pcx"     },
-  { "custom_157.xpos",                         "7"                     },
+  { "custom_157",                              "RocksCE.pcx"           },
+  { "custom_157.xpos",                         "12"                    },
   { "custom_157.ypos",                         "9"                     },
   { "custom_157.frames",                       "1"                     },
-  { "custom_157.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_157.EDITOR.xpos",                  "15"                    },
-  { "custom_157.EDITOR.ypos",                  "13"                    },
+  { "custom_157.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_157.EDITOR.xpos",                  "28"                    },
+  { "custom_157.EDITOR.ypos",                  "9"                     },
 
-  { "custom_158",                              "RocksElements.pcx"     },
-  { "custom_158.xpos",                         "7"                     },
+  { "custom_158",                              "RocksCE.pcx"           },
+  { "custom_158.xpos",                         "13"                    },
   { "custom_158.ypos",                         "9"                     },
   { "custom_158.frames",                       "1"                     },
-  { "custom_158.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_158.EDITOR.xpos",                  "15"                    },
-  { "custom_158.EDITOR.ypos",                  "13"                    },
+  { "custom_158.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_158.EDITOR.xpos",                  "29"                    },
+  { "custom_158.EDITOR.ypos",                  "9"                     },
 
-  { "custom_159",                              "RocksElements.pcx"     },
-  { "custom_159.xpos",                         "7"                     },
+  { "custom_159",                              "RocksCE.pcx"           },
+  { "custom_159.xpos",                         "14"                    },
   { "custom_159.ypos",                         "9"                     },
   { "custom_159.frames",                       "1"                     },
-  { "custom_159.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_159.EDITOR.xpos",                  "15"                    },
-  { "custom_159.EDITOR.ypos",                  "13"                    },
+  { "custom_159.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_159.EDITOR.xpos",                  "30"                    },
+  { "custom_159.EDITOR.ypos",                  "9"                     },
 
-  { "custom_160",                              "RocksElements.pcx"     },
-  { "custom_160.xpos",                         "7"                     },
+  { "custom_160",                              "RocksCE.pcx"           },
+  { "custom_160.xpos",                         "15"                    },
   { "custom_160.ypos",                         "9"                     },
   { "custom_160.frames",                       "1"                     },
-  { "custom_160.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_160.EDITOR.xpos",                  "15"                    },
-  { "custom_160.EDITOR.ypos",                  "13"                    },
+  { "custom_160.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_160.EDITOR.xpos",                  "31"                    },
+  { "custom_160.EDITOR.ypos",                  "9"                     },
 
-  { "custom_161",                              "RocksElements.pcx"     },
-  { "custom_161.xpos",                         "7"                     },
-  { "custom_161.ypos",                         "9"                     },
+  { "custom_161",                              "RocksCE.pcx"           },
+  { "custom_161.xpos",                         "0"                     },
+  { "custom_161.ypos",                         "10"                    },
   { "custom_161.frames",                       "1"                     },
-  { "custom_161.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_161.EDITOR.xpos",                  "15"                    },
-  { "custom_161.EDITOR.ypos",                  "13"                    },
+  { "custom_161.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_161.EDITOR.xpos",                  "16"                    },
+  { "custom_161.EDITOR.ypos",                  "10"                    },
 
-  { "custom_162",                              "RocksElements.pcx"     },
-  { "custom_162.xpos",                         "7"                     },
-  { "custom_162.ypos",                         "9"                     },
+  { "custom_162",                              "RocksCE.pcx"           },
+  { "custom_162.xpos",                         "1"                     },
+  { "custom_162.ypos",                         "10"                    },
   { "custom_162.frames",                       "1"                     },
-  { "custom_162.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_162.EDITOR.xpos",                  "15"                    },
-  { "custom_162.EDITOR.ypos",                  "13"                    },
+  { "custom_162.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_162.EDITOR.xpos",                  "17"                    },
+  { "custom_162.EDITOR.ypos",                  "10"                    },
 
-  { "custom_163",                              "RocksElements.pcx"     },
-  { "custom_163.xpos",                         "7"                     },
-  { "custom_163.ypos",                         "9"                     },
+  { "custom_163",                              "RocksCE.pcx"           },
+  { "custom_163.xpos",                         "2"                     },
+  { "custom_163.ypos",                         "10"                    },
   { "custom_163.frames",                       "1"                     },
-  { "custom_163.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_163.EDITOR.xpos",                  "15"                    },
-  { "custom_163.EDITOR.ypos",                  "13"                    },
+  { "custom_163.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_163.EDITOR.xpos",                  "18"                    },
+  { "custom_163.EDITOR.ypos",                  "10"                    },
 
-  { "custom_164",                              "RocksElements.pcx"     },
-  { "custom_164.xpos",                         "7"                     },
-  { "custom_164.ypos",                         "9"                     },
+  { "custom_164",                              "RocksCE.pcx"           },
+  { "custom_164.xpos",                         "3"                     },
+  { "custom_164.ypos",                         "10"                    },
   { "custom_164.frames",                       "1"                     },
-  { "custom_164.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_164.EDITOR.xpos",                  "15"                    },
-  { "custom_164.EDITOR.ypos",                  "13"                    },
+  { "custom_164.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_164.EDITOR.xpos",                  "19"                    },
+  { "custom_164.EDITOR.ypos",                  "10"                    },
 
-  { "custom_165",                              "RocksElements.pcx"     },
-  { "custom_165.xpos",                         "7"                     },
-  { "custom_165.ypos",                         "9"                     },
+  { "custom_165",                              "RocksCE.pcx"           },
+  { "custom_165.xpos",                         "4"                     },
+  { "custom_165.ypos",                         "10"                    },
   { "custom_165.frames",                       "1"                     },
-  { "custom_165.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_165.EDITOR.xpos",                  "15"                    },
-  { "custom_165.EDITOR.ypos",                  "13"                    },
+  { "custom_165.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_165.EDITOR.xpos",                  "20"                    },
+  { "custom_165.EDITOR.ypos",                  "10"                    },
 
-  { "custom_166",                              "RocksElements.pcx"     },
-  { "custom_166.xpos",                         "7"                     },
-  { "custom_166.ypos",                         "9"                     },
+  { "custom_166",                              "RocksCE.pcx"           },
+  { "custom_166.xpos",                         "5"                     },
+  { "custom_166.ypos",                         "10"                    },
   { "custom_166.frames",                       "1"                     },
-  { "custom_166.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_166.EDITOR.xpos",                  "15"                    },
-  { "custom_166.EDITOR.ypos",                  "13"                    },
+  { "custom_166.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_166.EDITOR.xpos",                  "21"                    },
+  { "custom_166.EDITOR.ypos",                  "10"                    },
 
-  { "custom_167",                              "RocksElements.pcx"     },
-  { "custom_167.xpos",                         "7"                     },
-  { "custom_167.ypos",                         "9"                     },
+  { "custom_167",                              "RocksCE.pcx"           },
+  { "custom_167.xpos",                         "6"                     },
+  { "custom_167.ypos",                         "10"                    },
   { "custom_167.frames",                       "1"                     },
-  { "custom_167.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_167.EDITOR.xpos",                  "15"                    },
-  { "custom_167.EDITOR.ypos",                  "13"                    },
+  { "custom_167.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_167.EDITOR.xpos",                  "22"                    },
+  { "custom_167.EDITOR.ypos",                  "10"                    },
 
-  { "custom_168",                              "RocksElements.pcx"     },
+  { "custom_168",                              "RocksCE.pcx"           },
   { "custom_168.xpos",                         "7"                     },
-  { "custom_168.ypos",                         "9"                     },
+  { "custom_168.ypos",                         "10"                    },
   { "custom_168.frames",                       "1"                     },
-  { "custom_168.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_168.EDITOR.xpos",                  "15"                    },
-  { "custom_168.EDITOR.ypos",                  "13"                    },
+  { "custom_168.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_168.EDITOR.xpos",                  "23"                    },
+  { "custom_168.EDITOR.ypos",                  "10"                    },
 
-  { "custom_169",                              "RocksElements.pcx"     },
-  { "custom_169.xpos",                         "7"                     },
-  { "custom_169.ypos",                         "9"                     },
+  { "custom_169",                              "RocksCE.pcx"           },
+  { "custom_169.xpos",                         "8"                     },
+  { "custom_169.ypos",                         "10"                    },
   { "custom_169.frames",                       "1"                     },
-  { "custom_169.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_169.EDITOR.xpos",                  "15"                    },
-  { "custom_169.EDITOR.ypos",                  "13"                    },
+  { "custom_169.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_169.EDITOR.xpos",                  "24"                    },
+  { "custom_169.EDITOR.ypos",                  "10"                    },
 
-  { "custom_170",                              "RocksElements.pcx"     },
-  { "custom_170.xpos",                         "7"                     },
-  { "custom_170.ypos",                         "9"                     },
+  { "custom_170",                              "RocksCE.pcx"           },
+  { "custom_170.xpos",                         "9"                     },
+  { "custom_170.ypos",                         "10"                    },
   { "custom_170.frames",                       "1"                     },
-  { "custom_170.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_170.EDITOR.xpos",                  "15"                    },
-  { "custom_170.EDITOR.ypos",                  "13"                    },
+  { "custom_170.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_170.EDITOR.xpos",                  "25"                    },
+  { "custom_170.EDITOR.ypos",                  "10"                    },
 
-  { "custom_171",                              "RocksElements.pcx"     },
-  { "custom_171.xpos",                         "7"                     },
-  { "custom_171.ypos",                         "9"                     },
+  { "custom_171",                              "RocksCE.pcx"           },
+  { "custom_171.xpos",                         "10"                    },
+  { "custom_171.ypos",                         "10"                    },
   { "custom_171.frames",                       "1"                     },
-  { "custom_171.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_171.EDITOR.xpos",                  "15"                    },
-  { "custom_171.EDITOR.ypos",                  "13"                    },
+  { "custom_171.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_171.EDITOR.xpos",                  "26"                    },
+  { "custom_171.EDITOR.ypos",                  "10"                    },
 
-  { "custom_172",                              "RocksElements.pcx"     },
-  { "custom_172.xpos",                         "7"                     },
-  { "custom_172.ypos",                         "9"                     },
+  { "custom_172",                              "RocksCE.pcx"           },
+  { "custom_172.xpos",                         "11"                    },
+  { "custom_172.ypos",                         "10"                    },
   { "custom_172.frames",                       "1"                     },
-  { "custom_172.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_172.EDITOR.xpos",                  "15"                    },
-  { "custom_172.EDITOR.ypos",                  "13"                    },
+  { "custom_172.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_172.EDITOR.xpos",                  "27"                    },
+  { "custom_172.EDITOR.ypos",                  "10"                    },
 
-  { "custom_173",                              "RocksElements.pcx"     },
-  { "custom_173.xpos",                         "7"                     },
-  { "custom_173.ypos",                         "9"                     },
+  { "custom_173",                              "RocksCE.pcx"           },
+  { "custom_173.xpos",                         "12"                    },
+  { "custom_173.ypos",                         "10"                    },
   { "custom_173.frames",                       "1"                     },
-  { "custom_173.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_173.EDITOR.xpos",                  "15"                    },
-  { "custom_173.EDITOR.ypos",                  "13"                    },
+  { "custom_173.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_173.EDITOR.xpos",                  "28"                    },
+  { "custom_173.EDITOR.ypos",                  "10"                    },
 
-  { "custom_174",                              "RocksElements.pcx"     },
-  { "custom_174.xpos",                         "7"                     },
-  { "custom_174.ypos",                         "9"                     },
+  { "custom_174",                              "RocksCE.pcx"           },
+  { "custom_174.xpos",                         "13"                    },
+  { "custom_174.ypos",                         "10"                    },
   { "custom_174.frames",                       "1"                     },
-  { "custom_174.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_174.EDITOR.xpos",                  "15"                    },
-  { "custom_174.EDITOR.ypos",                  "13"                    },
+  { "custom_174.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_174.EDITOR.xpos",                  "29"                    },
+  { "custom_174.EDITOR.ypos",                  "10"                    },
 
-  { "custom_175",                              "RocksElements.pcx"     },
-  { "custom_175.xpos",                         "7"                     },
-  { "custom_175.ypos",                         "9"                     },
+  { "custom_175",                              "RocksCE.pcx"           },
+  { "custom_175.xpos",                         "14"                    },
+  { "custom_175.ypos",                         "10"                    },
   { "custom_175.frames",                       "1"                     },
-  { "custom_175.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_175.EDITOR.xpos",                  "15"                    },
-  { "custom_175.EDITOR.ypos",                  "13"                    },
+  { "custom_175.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_175.EDITOR.xpos",                  "30"                    },
+  { "custom_175.EDITOR.ypos",                  "10"                    },
 
-  { "custom_176",                              "RocksElements.pcx"     },
-  { "custom_176.xpos",                         "7"                     },
-  { "custom_176.ypos",                         "9"                     },
+  { "custom_176",                              "RocksCE.pcx"           },
+  { "custom_176.xpos",                         "15"                    },
+  { "custom_176.ypos",                         "10"                    },
   { "custom_176.frames",                       "1"                     },
-  { "custom_176.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_176.EDITOR.xpos",                  "15"                    },
-  { "custom_176.EDITOR.ypos",                  "13"                    },
+  { "custom_176.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_176.EDITOR.xpos",                  "31"                    },
+  { "custom_176.EDITOR.ypos",                  "10"                    },
 
-  { "custom_177",                              "RocksElements.pcx"     },
-  { "custom_177.xpos",                         "7"                     },
-  { "custom_177.ypos",                         "9"                     },
+  { "custom_177",                              "RocksCE.pcx"           },
+  { "custom_177.xpos",                         "0"                     },
+  { "custom_177.ypos",                         "11"                    },
   { "custom_177.frames",                       "1"                     },
-  { "custom_177.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_177.EDITOR.xpos",                  "15"                    },
-  { "custom_177.EDITOR.ypos",                  "13"                    },
+  { "custom_177.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_177.EDITOR.xpos",                  "16"                    },
+  { "custom_177.EDITOR.ypos",                  "11"                    },
 
-  { "custom_178",                              "RocksElements.pcx"     },
-  { "custom_178.xpos",                         "7"                     },
-  { "custom_178.ypos",                         "9"                     },
+  { "custom_178",                              "RocksCE.pcx"           },
+  { "custom_178.xpos",                         "1"                     },
+  { "custom_178.ypos",                         "11"                    },
   { "custom_178.frames",                       "1"                     },
-  { "custom_178.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_178.EDITOR.xpos",                  "15"                    },
-  { "custom_178.EDITOR.ypos",                  "13"                    },
+  { "custom_178.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_178.EDITOR.xpos",                  "17"                    },
+  { "custom_178.EDITOR.ypos",                  "11"                    },
 
-  { "custom_179",                              "RocksElements.pcx"     },
-  { "custom_179.xpos",                         "7"                     },
-  { "custom_179.ypos",                         "9"                     },
+  { "custom_179",                              "RocksCE.pcx"           },
+  { "custom_179.xpos",                         "2"                     },
+  { "custom_179.ypos",                         "11"                    },
   { "custom_179.frames",                       "1"                     },
-  { "custom_179.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_179.EDITOR.xpos",                  "15"                    },
-  { "custom_179.EDITOR.ypos",                  "13"                    },
+  { "custom_179.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_179.EDITOR.xpos",                  "18"                    },
+  { "custom_179.EDITOR.ypos",                  "11"                    },
 
-  { "custom_180",                              "RocksElements.pcx"     },
-  { "custom_180.xpos",                         "7"                     },
-  { "custom_180.ypos",                         "9"                     },
+  { "custom_180",                              "RocksCE.pcx"           },
+  { "custom_180.xpos",                         "3"                     },
+  { "custom_180.ypos",                         "11"                    },
   { "custom_180.frames",                       "1"                     },
-  { "custom_180.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_180.EDITOR.xpos",                  "15"                    },
-  { "custom_180.EDITOR.ypos",                  "13"                    },
+  { "custom_180.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_180.EDITOR.xpos",                  "19"                    },
+  { "custom_180.EDITOR.ypos",                  "11"                    },
 
-  { "custom_181",                              "RocksElements.pcx"     },
-  { "custom_181.xpos",                         "7"                     },
-  { "custom_181.ypos",                         "9"                     },
+  { "custom_181",                              "RocksCE.pcx"           },
+  { "custom_181.xpos",                         "4"                     },
+  { "custom_181.ypos",                         "11"                    },
   { "custom_181.frames",                       "1"                     },
-  { "custom_181.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_181.EDITOR.xpos",                  "15"                    },
-  { "custom_181.EDITOR.ypos",                  "13"                    },
+  { "custom_181.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_181.EDITOR.xpos",                  "20"                    },
+  { "custom_181.EDITOR.ypos",                  "11"                    },
 
-  { "custom_182",                              "RocksElements.pcx"     },
-  { "custom_182.xpos",                         "7"                     },
-  { "custom_182.ypos",                         "9"                     },
+  { "custom_182",                              "RocksCE.pcx"           },
+  { "custom_182.xpos",                         "5"                     },
+  { "custom_182.ypos",                         "11"                    },
   { "custom_182.frames",                       "1"                     },
-  { "custom_182.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_182.EDITOR.xpos",                  "15"                    },
-  { "custom_182.EDITOR.ypos",                  "13"                    },
+  { "custom_182.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_182.EDITOR.xpos",                  "21"                    },
+  { "custom_182.EDITOR.ypos",                  "11"                    },
 
-  { "custom_183",                              "RocksElements.pcx"     },
-  { "custom_183.xpos",                         "7"                     },
-  { "custom_183.ypos",                         "9"                     },
+  { "custom_183",                              "RocksCE.pcx"           },
+  { "custom_183.xpos",                         "6"                     },
+  { "custom_183.ypos",                         "11"                    },
   { "custom_183.frames",                       "1"                     },
-  { "custom_183.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_183.EDITOR.xpos",                  "15"                    },
-  { "custom_183.EDITOR.ypos",                  "13"                    },
+  { "custom_183.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_183.EDITOR.xpos",                  "22"                    },
+  { "custom_183.EDITOR.ypos",                  "11"                    },
 
-  { "custom_184",                              "RocksElements.pcx"     },
+  { "custom_184",                              "RocksCE.pcx"           },
   { "custom_184.xpos",                         "7"                     },
-  { "custom_184.ypos",                         "9"                     },
+  { "custom_184.ypos",                         "11"                    },
   { "custom_184.frames",                       "1"                     },
-  { "custom_184.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_184.EDITOR.xpos",                  "15"                    },
-  { "custom_184.EDITOR.ypos",                  "13"                    },
+  { "custom_184.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_184.EDITOR.xpos",                  "23"                    },
+  { "custom_184.EDITOR.ypos",                  "11"                    },
 
-  { "custom_185",                              "RocksElements.pcx"     },
-  { "custom_185.xpos",                         "7"                     },
-  { "custom_185.ypos",                         "9"                     },
+  { "custom_185",                              "RocksCE.pcx"           },
+  { "custom_185.xpos",                         "8"                     },
+  { "custom_185.ypos",                         "11"                    },
   { "custom_185.frames",                       "1"                     },
-  { "custom_185.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_185.EDITOR.xpos",                  "15"                    },
-  { "custom_185.EDITOR.ypos",                  "13"                    },
+  { "custom_185.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_185.EDITOR.xpos",                  "24"                    },
+  { "custom_185.EDITOR.ypos",                  "11"                    },
 
-  { "custom_186",                              "RocksElements.pcx"     },
-  { "custom_186.xpos",                         "7"                     },
-  { "custom_186.ypos",                         "9"                     },
+  { "custom_186",                              "RocksCE.pcx"           },
+  { "custom_186.xpos",                         "9"                     },
+  { "custom_186.ypos",                         "11"                    },
   { "custom_186.frames",                       "1"                     },
-  { "custom_186.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_186.EDITOR.xpos",                  "15"                    },
-  { "custom_186.EDITOR.ypos",                  "13"                    },
+  { "custom_186.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_186.EDITOR.xpos",                  "25"                    },
+  { "custom_186.EDITOR.ypos",                  "11"                    },
 
-  { "custom_187",                              "RocksElements.pcx"     },
-  { "custom_187.xpos",                         "7"                     },
-  { "custom_187.ypos",                         "9"                     },
+  { "custom_187",                              "RocksCE.pcx"           },
+  { "custom_187.xpos",                         "10"                    },
+  { "custom_187.ypos",                         "11"                    },
   { "custom_187.frames",                       "1"                     },
-  { "custom_187.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_187.EDITOR.xpos",                  "15"                    },
-  { "custom_187.EDITOR.ypos",                  "13"                    },
+  { "custom_187.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_187.EDITOR.xpos",                  "26"                    },
+  { "custom_187.EDITOR.ypos",                  "11"                    },
 
-  { "custom_188",                              "RocksElements.pcx"     },
-  { "custom_188.xpos",                         "7"                     },
-  { "custom_188.ypos",                         "9"                     },
+  { "custom_188",                              "RocksCE.pcx"           },
+  { "custom_188.xpos",                         "11"                    },
+  { "custom_188.ypos",                         "11"                    },
   { "custom_188.frames",                       "1"                     },
-  { "custom_188.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_188.EDITOR.xpos",                  "15"                    },
-  { "custom_188.EDITOR.ypos",                  "13"                    },
+  { "custom_188.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_188.EDITOR.xpos",                  "27"                    },
+  { "custom_188.EDITOR.ypos",                  "11"                    },
 
-  { "custom_189",                              "RocksElements.pcx"     },
-  { "custom_189.xpos",                         "7"                     },
-  { "custom_189.ypos",                         "9"                     },
+  { "custom_189",                              "RocksCE.pcx"           },
+  { "custom_189.xpos",                         "12"                    },
+  { "custom_189.ypos",                         "11"                    },
   { "custom_189.frames",                       "1"                     },
-  { "custom_189.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_189.EDITOR.xpos",                  "15"                    },
-  { "custom_189.EDITOR.ypos",                  "13"                    },
+  { "custom_189.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_189.EDITOR.xpos",                  "28"                    },
+  { "custom_189.EDITOR.ypos",                  "11"                    },
 
-  { "custom_190",                              "RocksElements.pcx"     },
-  { "custom_190.xpos",                         "7"                     },
-  { "custom_190.ypos",                         "9"                     },
+  { "custom_190",                              "RocksCE.pcx"           },
+  { "custom_190.xpos",                         "13"                    },
+  { "custom_190.ypos",                         "11"                    },
   { "custom_190.frames",                       "1"                     },
-  { "custom_190.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_190.EDITOR.xpos",                  "15"                    },
-  { "custom_190.EDITOR.ypos",                  "13"                    },
+  { "custom_190.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_190.EDITOR.xpos",                  "29"                    },
+  { "custom_190.EDITOR.ypos",                  "11"                    },
 
-  { "custom_191",                              "RocksElements.pcx"     },
-  { "custom_191.xpos",                         "7"                     },
-  { "custom_191.ypos",                         "9"                     },
+  { "custom_191",                              "RocksCE.pcx"           },
+  { "custom_191.xpos",                         "14"                    },
+  { "custom_191.ypos",                         "11"                    },
   { "custom_191.frames",                       "1"                     },
-  { "custom_191.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_191.EDITOR.xpos",                  "15"                    },
-  { "custom_191.EDITOR.ypos",                  "13"                    },
+  { "custom_191.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_191.EDITOR.xpos",                  "30"                    },
+  { "custom_191.EDITOR.ypos",                  "11"                    },
 
-  { "custom_192",                              "RocksElements.pcx"     },
-  { "custom_192.xpos",                         "7"                     },
-  { "custom_192.ypos",                         "9"                     },
+  { "custom_192",                              "RocksCE.pcx"           },
+  { "custom_192.xpos",                         "15"                    },
+  { "custom_192.ypos",                         "11"                    },
   { "custom_192.frames",                       "1"                     },
-  { "custom_192.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_192.EDITOR.xpos",                  "15"                    },
-  { "custom_192.EDITOR.ypos",                  "13"                    },
+  { "custom_192.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_192.EDITOR.xpos",                  "31"                    },
+  { "custom_192.EDITOR.ypos",                  "11"                    },
 
-  { "custom_193",                              "RocksElements.pcx"     },
-  { "custom_193.xpos",                         "7"                     },
-  { "custom_193.ypos",                         "9"                     },
+  { "custom_193",                              "RocksCE.pcx"           },
+  { "custom_193.xpos",                         "0"                     },
+  { "custom_193.ypos",                         "12"                    },
   { "custom_193.frames",                       "1"                     },
-  { "custom_193.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_193.EDITOR.xpos",                  "15"                    },
-  { "custom_193.EDITOR.ypos",                  "13"                    },
+  { "custom_193.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_193.EDITOR.xpos",                  "16"                    },
+  { "custom_193.EDITOR.ypos",                  "12"                    },
 
-  { "custom_194",                              "RocksElements.pcx"     },
-  { "custom_194.xpos",                         "7"                     },
-  { "custom_194.ypos",                         "9"                     },
+  { "custom_194",                              "RocksCE.pcx"           },
+  { "custom_194.xpos",                         "1"                     },
+  { "custom_194.ypos",                         "12"                    },
   { "custom_194.frames",                       "1"                     },
-  { "custom_194.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_194.EDITOR.xpos",                  "15"                    },
-  { "custom_194.EDITOR.ypos",                  "13"                    },
+  { "custom_194.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_194.EDITOR.xpos",                  "17"                    },
+  { "custom_194.EDITOR.ypos",                  "12"                    },
 
-  { "custom_195",                              "RocksElements.pcx"     },
-  { "custom_195.xpos",                         "7"                     },
-  { "custom_195.ypos",                         "9"                     },
+  { "custom_195",                              "RocksCE.pcx"           },
+  { "custom_195.xpos",                         "2"                     },
+  { "custom_195.ypos",                         "12"                    },
   { "custom_195.frames",                       "1"                     },
-  { "custom_195.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_195.EDITOR.xpos",                  "15"                    },
-  { "custom_195.EDITOR.ypos",                  "13"                    },
+  { "custom_195.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_195.EDITOR.xpos",                  "18"                    },
+  { "custom_195.EDITOR.ypos",                  "12"                    },
 
-  { "custom_196",                              "RocksElements.pcx"     },
-  { "custom_196.xpos",                         "7"                     },
-  { "custom_196.ypos",                         "9"                     },
+  { "custom_196",                              "RocksCE.pcx"           },
+  { "custom_196.xpos",                         "3"                     },
+  { "custom_196.ypos",                         "12"                    },
   { "custom_196.frames",                       "1"                     },
-  { "custom_196.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_196.EDITOR.xpos",                  "15"                    },
-  { "custom_196.EDITOR.ypos",                  "13"                    },
+  { "custom_196.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_196.EDITOR.xpos",                  "19"                    },
+  { "custom_196.EDITOR.ypos",                  "12"                    },
 
-  { "custom_197",                              "RocksElements.pcx"     },
-  { "custom_197.xpos",                         "7"                     },
-  { "custom_197.ypos",                         "9"                     },
+  { "custom_197",                              "RocksCE.pcx"           },
+  { "custom_197.xpos",                         "4"                     },
+  { "custom_197.ypos",                         "12"                    },
   { "custom_197.frames",                       "1"                     },
-  { "custom_197.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_197.EDITOR.xpos",                  "15"                    },
-  { "custom_197.EDITOR.ypos",                  "13"                    },
+  { "custom_197.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_197.EDITOR.xpos",                  "20"                    },
+  { "custom_197.EDITOR.ypos",                  "12"                    },
 
-  { "custom_198",                              "RocksElements.pcx"     },
-  { "custom_198.xpos",                         "7"                     },
-  { "custom_198.ypos",                         "9"                     },
+  { "custom_198",                              "RocksCE.pcx"           },
+  { "custom_198.xpos",                         "5"                     },
+  { "custom_198.ypos",                         "12"                    },
   { "custom_198.frames",                       "1"                     },
-  { "custom_198.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_198.EDITOR.xpos",                  "15"                    },
-  { "custom_198.EDITOR.ypos",                  "13"                    },
+  { "custom_198.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_198.EDITOR.xpos",                  "21"                    },
+  { "custom_198.EDITOR.ypos",                  "12"                    },
 
-  { "custom_199",                              "RocksElements.pcx"     },
-  { "custom_199.xpos",                         "7"                     },
-  { "custom_199.ypos",                         "9"                     },
+  { "custom_199",                              "RocksCE.pcx"           },
+  { "custom_199.xpos",                         "6"                     },
+  { "custom_199.ypos",                         "12"                    },
   { "custom_199.frames",                       "1"                     },
-  { "custom_199.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_199.EDITOR.xpos",                  "15"                    },
-  { "custom_199.EDITOR.ypos",                  "13"                    },
+  { "custom_199.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_199.EDITOR.xpos",                  "22"                    },
+  { "custom_199.EDITOR.ypos",                  "12"                    },
 
-  { "custom_200",                              "RocksElements.pcx"     },
+  { "custom_200",                              "RocksCE.pcx"           },
   { "custom_200.xpos",                         "7"                     },
-  { "custom_200.ypos",                         "9"                     },
+  { "custom_200.ypos",                         "12"                    },
   { "custom_200.frames",                       "1"                     },
-  { "custom_200.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_200.EDITOR.xpos",                  "15"                    },
-  { "custom_200.EDITOR.ypos",                  "13"                    },
+  { "custom_200.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_200.EDITOR.xpos",                  "23"                    },
+  { "custom_200.EDITOR.ypos",                  "12"                    },
 
-  { "custom_201",                              "RocksElements.pcx"     },
-  { "custom_201.xpos",                         "7"                     },
-  { "custom_201.ypos",                         "9"                     },
+  { "custom_201",                              "RocksCE.pcx"           },
+  { "custom_201.xpos",                         "8"                     },
+  { "custom_201.ypos",                         "12"                    },
   { "custom_201.frames",                       "1"                     },
-  { "custom_201.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_201.EDITOR.xpos",                  "15"                    },
-  { "custom_201.EDITOR.ypos",                  "13"                    },
+  { "custom_201.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_201.EDITOR.xpos",                  "24"                    },
+  { "custom_201.EDITOR.ypos",                  "12"                    },
 
-  { "custom_202",                              "RocksElements.pcx"     },
-  { "custom_202.xpos",                         "7"                     },
-  { "custom_202.ypos",                         "9"                     },
+  { "custom_202",                              "RocksCE.pcx"           },
+  { "custom_202.xpos",                         "9"                     },
+  { "custom_202.ypos",                         "12"                    },
   { "custom_202.frames",                       "1"                     },
-  { "custom_202.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_202.EDITOR.xpos",                  "15"                    },
-  { "custom_202.EDITOR.ypos",                  "13"                    },
+  { "custom_202.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_202.EDITOR.xpos",                  "25"                    },
+  { "custom_202.EDITOR.ypos",                  "12"                    },
 
-  { "custom_203",                              "RocksElements.pcx"     },
-  { "custom_203.xpos",                         "7"                     },
-  { "custom_203.ypos",                         "9"                     },
+  { "custom_203",                              "RocksCE.pcx"           },
+  { "custom_203.xpos",                         "10"                    },
+  { "custom_203.ypos",                         "12"                    },
   { "custom_203.frames",                       "1"                     },
-  { "custom_203.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_203.EDITOR.xpos",                  "15"                    },
-  { "custom_203.EDITOR.ypos",                  "13"                    },
+  { "custom_203.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_203.EDITOR.xpos",                  "26"                    },
+  { "custom_203.EDITOR.ypos",                  "12"                    },
 
-  { "custom_204",                              "RocksElements.pcx"     },
-  { "custom_204.xpos",                         "7"                     },
-  { "custom_204.ypos",                         "9"                     },
+  { "custom_204",                              "RocksCE.pcx"           },
+  { "custom_204.xpos",                         "11"                    },
+  { "custom_204.ypos",                         "12"                    },
   { "custom_204.frames",                       "1"                     },
-  { "custom_204.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_204.EDITOR.xpos",                  "15"                    },
-  { "custom_204.EDITOR.ypos",                  "13"                    },
+  { "custom_204.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_204.EDITOR.xpos",                  "27"                    },
+  { "custom_204.EDITOR.ypos",                  "12"                    },
 
-  { "custom_205",                              "RocksElements.pcx"     },
-  { "custom_205.xpos",                         "7"                     },
-  { "custom_205.ypos",                         "9"                     },
+  { "custom_205",                              "RocksCE.pcx"           },
+  { "custom_205.xpos",                         "12"                    },
+  { "custom_205.ypos",                         "12"                    },
   { "custom_205.frames",                       "1"                     },
-  { "custom_205.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_205.EDITOR.xpos",                  "15"                    },
-  { "custom_205.EDITOR.ypos",                  "13"                    },
+  { "custom_205.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_205.EDITOR.xpos",                  "28"                    },
+  { "custom_205.EDITOR.ypos",                  "12"                    },
 
-  { "custom_206",                              "RocksElements.pcx"     },
-  { "custom_206.xpos",                         "7"                     },
-  { "custom_206.ypos",                         "9"                     },
+  { "custom_206",                              "RocksCE.pcx"           },
+  { "custom_206.xpos",                         "13"                    },
+  { "custom_206.ypos",                         "12"                    },
   { "custom_206.frames",                       "1"                     },
-  { "custom_206.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_206.EDITOR.xpos",                  "15"                    },
-  { "custom_206.EDITOR.ypos",                  "13"                    },
+  { "custom_206.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_206.EDITOR.xpos",                  "29"                    },
+  { "custom_206.EDITOR.ypos",                  "12"                    },
 
-  { "custom_207",                              "RocksElements.pcx"     },
-  { "custom_207.xpos",                         "7"                     },
-  { "custom_207.ypos",                         "9"                     },
+  { "custom_207",                              "RocksCE.pcx"           },
+  { "custom_207.xpos",                         "14"                    },
+  { "custom_207.ypos",                         "12"                    },
   { "custom_207.frames",                       "1"                     },
-  { "custom_207.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_207.EDITOR.xpos",                  "15"                    },
-  { "custom_207.EDITOR.ypos",                  "13"                    },
+  { "custom_207.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_207.EDITOR.xpos",                  "30"                    },
+  { "custom_207.EDITOR.ypos",                  "12"                    },
 
-  { "custom_208",                              "RocksElements.pcx"     },
-  { "custom_208.xpos",                         "7"                     },
-  { "custom_208.ypos",                         "9"                     },
+  { "custom_208",                              "RocksCE.pcx"           },
+  { "custom_208.xpos",                         "15"                    },
+  { "custom_208.ypos",                         "12"                    },
   { "custom_208.frames",                       "1"                     },
-  { "custom_208.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_208.EDITOR.xpos",                  "15"                    },
-  { "custom_208.EDITOR.ypos",                  "13"                    },
+  { "custom_208.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_208.EDITOR.xpos",                  "31"                    },
+  { "custom_208.EDITOR.ypos",                  "12"                    },
 
-  { "custom_209",                              "RocksElements.pcx"     },
-  { "custom_209.xpos",                         "7"                     },
-  { "custom_209.ypos",                         "9"                     },
+  { "custom_209",                              "RocksCE.pcx"           },
+  { "custom_209.xpos",                         "0"                     },
+  { "custom_209.ypos",                         "13"                    },
   { "custom_209.frames",                       "1"                     },
-  { "custom_209.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_209.EDITOR.xpos",                  "15"                    },
+  { "custom_209.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_209.EDITOR.xpos",                  "16"                    },
   { "custom_209.EDITOR.ypos",                  "13"                    },
 
-  { "custom_210",                              "RocksElements.pcx"     },
-  { "custom_210.xpos",                         "7"                     },
-  { "custom_210.ypos",                         "9"                     },
+  { "custom_210",                              "RocksCE.pcx"           },
+  { "custom_210.xpos",                         "1"                     },
+  { "custom_210.ypos",                         "13"                    },
   { "custom_210.frames",                       "1"                     },
-  { "custom_210.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_210.EDITOR.xpos",                  "15"                    },
+  { "custom_210.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_210.EDITOR.xpos",                  "17"                    },
   { "custom_210.EDITOR.ypos",                  "13"                    },
 
-  { "custom_211",                              "RocksElements.pcx"     },
-  { "custom_211.xpos",                         "7"                     },
-  { "custom_211.ypos",                         "9"                     },
+  { "custom_211",                              "RocksCE.pcx"           },
+  { "custom_211.xpos",                         "2"                     },
+  { "custom_211.ypos",                         "13"                    },
   { "custom_211.frames",                       "1"                     },
-  { "custom_211.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_211.EDITOR.xpos",                  "15"                    },
+  { "custom_211.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_211.EDITOR.xpos",                  "18"                    },
   { "custom_211.EDITOR.ypos",                  "13"                    },
 
-  { "custom_212",                              "RocksElements.pcx"     },
-  { "custom_212.xpos",                         "7"                     },
-  { "custom_212.ypos",                         "9"                     },
+  { "custom_212",                              "RocksCE.pcx"           },
+  { "custom_212.xpos",                         "3"                     },
+  { "custom_212.ypos",                         "13"                    },
   { "custom_212.frames",                       "1"                     },
-  { "custom_212.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_212.EDITOR.xpos",                  "15"                    },
+  { "custom_212.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_212.EDITOR.xpos",                  "19"                    },
   { "custom_212.EDITOR.ypos",                  "13"                    },
 
-  { "custom_213",                              "RocksElements.pcx"     },
-  { "custom_213.xpos",                         "7"                     },
-  { "custom_213.ypos",                         "9"                     },
+  { "custom_213",                              "RocksCE.pcx"           },
+  { "custom_213.xpos",                         "4"                     },
+  { "custom_213.ypos",                         "13"                    },
   { "custom_213.frames",                       "1"                     },
-  { "custom_213.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_213.EDITOR.xpos",                  "15"                    },
+  { "custom_213.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_213.EDITOR.xpos",                  "20"                    },
   { "custom_213.EDITOR.ypos",                  "13"                    },
 
-  { "custom_214",                              "RocksElements.pcx"     },
-  { "custom_214.xpos",                         "7"                     },
-  { "custom_214.ypos",                         "9"                     },
+  { "custom_214",                              "RocksCE.pcx"           },
+  { "custom_214.xpos",                         "5"                     },
+  { "custom_214.ypos",                         "13"                    },
   { "custom_214.frames",                       "1"                     },
-  { "custom_214.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_214.EDITOR.xpos",                  "15"                    },
+  { "custom_214.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_214.EDITOR.xpos",                  "21"                    },
   { "custom_214.EDITOR.ypos",                  "13"                    },
 
-  { "custom_215",                              "RocksElements.pcx"     },
-  { "custom_215.xpos",                         "7"                     },
-  { "custom_215.ypos",                         "9"                     },
+  { "custom_215",                              "RocksCE.pcx"           },
+  { "custom_215.xpos",                         "6"                     },
+  { "custom_215.ypos",                         "13"                    },
   { "custom_215.frames",                       "1"                     },
-  { "custom_215.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_215.EDITOR.xpos",                  "15"                    },
+  { "custom_215.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_215.EDITOR.xpos",                  "22"                    },
   { "custom_215.EDITOR.ypos",                  "13"                    },
 
-  { "custom_216",                              "RocksElements.pcx"     },
+  { "custom_216",                              "RocksCE.pcx"           },
   { "custom_216.xpos",                         "7"                     },
-  { "custom_216.ypos",                         "9"                     },
+  { "custom_216.ypos",                         "13"                    },
   { "custom_216.frames",                       "1"                     },
-  { "custom_216.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_216.EDITOR.xpos",                  "15"                    },
+  { "custom_216.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_216.EDITOR.xpos",                  "23"                    },
   { "custom_216.EDITOR.ypos",                  "13"                    },
 
-  { "custom_217",                              "RocksElements.pcx"     },
-  { "custom_217.xpos",                         "7"                     },
-  { "custom_217.ypos",                         "9"                     },
+  { "custom_217",                              "RocksCE.pcx"           },
+  { "custom_217.xpos",                         "8"                     },
+  { "custom_217.ypos",                         "13"                    },
   { "custom_217.frames",                       "1"                     },
-  { "custom_217.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_217.EDITOR.xpos",                  "15"                    },
+  { "custom_217.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_217.EDITOR.xpos",                  "24"                    },
   { "custom_217.EDITOR.ypos",                  "13"                    },
 
-  { "custom_218",                              "RocksElements.pcx"     },
-  { "custom_218.xpos",                         "7"                     },
-  { "custom_218.ypos",                         "9"                     },
+  { "custom_218",                              "RocksCE.pcx"           },
+  { "custom_218.xpos",                         "9"                     },
+  { "custom_218.ypos",                         "13"                    },
   { "custom_218.frames",                       "1"                     },
-  { "custom_218.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_218.EDITOR.xpos",                  "15"                    },
+  { "custom_218.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_218.EDITOR.xpos",                  "25"                    },
   { "custom_218.EDITOR.ypos",                  "13"                    },
 
-  { "custom_219",                              "RocksElements.pcx"     },
-  { "custom_219.xpos",                         "7"                     },
-  { "custom_219.ypos",                         "9"                     },
+  { "custom_219",                              "RocksCE.pcx"           },
+  { "custom_219.xpos",                         "10"                    },
+  { "custom_219.ypos",                         "13"                    },
   { "custom_219.frames",                       "1"                     },
-  { "custom_219.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_219.EDITOR.xpos",                  "15"                    },
+  { "custom_219.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_219.EDITOR.xpos",                  "26"                    },
   { "custom_219.EDITOR.ypos",                  "13"                    },
 
-  { "custom_220",                              "RocksElements.pcx"     },
-  { "custom_220.xpos",                         "7"                     },
-  { "custom_220.ypos",                         "9"                     },
+  { "custom_220",                              "RocksCE.pcx"           },
+  { "custom_220.xpos",                         "11"                    },
+  { "custom_220.ypos",                         "13"                    },
   { "custom_220.frames",                       "1"                     },
-  { "custom_220.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_220.EDITOR.xpos",                  "15"                    },
+  { "custom_220.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_220.EDITOR.xpos",                  "27"                    },
   { "custom_220.EDITOR.ypos",                  "13"                    },
 
-  { "custom_221",                              "RocksElements.pcx"     },
-  { "custom_221.xpos",                         "7"                     },
-  { "custom_221.ypos",                         "9"                     },
+  { "custom_221",                              "RocksCE.pcx"           },
+  { "custom_221.xpos",                         "12"                    },
+  { "custom_221.ypos",                         "13"                    },
   { "custom_221.frames",                       "1"                     },
-  { "custom_221.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_221.EDITOR.xpos",                  "15"                    },
+  { "custom_221.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_221.EDITOR.xpos",                  "28"                    },
   { "custom_221.EDITOR.ypos",                  "13"                    },
 
-  { "custom_222",                              "RocksElements.pcx"     },
-  { "custom_222.xpos",                         "7"                     },
-  { "custom_222.ypos",                         "9"                     },
+  { "custom_222",                              "RocksCE.pcx"           },
+  { "custom_222.xpos",                         "13"                    },
+  { "custom_222.ypos",                         "13"                    },
   { "custom_222.frames",                       "1"                     },
-  { "custom_222.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_222.EDITOR.xpos",                  "15"                    },
+  { "custom_222.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_222.EDITOR.xpos",                  "29"                    },
   { "custom_222.EDITOR.ypos",                  "13"                    },
 
-  { "custom_223",                              "RocksElements.pcx"     },
-  { "custom_223.xpos",                         "7"                     },
-  { "custom_223.ypos",                         "9"                     },
+  { "custom_223",                              "RocksCE.pcx"           },
+  { "custom_223.xpos",                         "14"                    },
+  { "custom_223.ypos",                         "13"                    },
   { "custom_223.frames",                       "1"                     },
-  { "custom_223.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_223.EDITOR.xpos",                  "15"                    },
+  { "custom_223.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_223.EDITOR.xpos",                  "30"                    },
   { "custom_223.EDITOR.ypos",                  "13"                    },
 
-  { "custom_224",                              "RocksElements.pcx"     },
-  { "custom_224.xpos",                         "7"                     },
-  { "custom_224.ypos",                         "9"                     },
+  { "custom_224",                              "RocksCE.pcx"           },
+  { "custom_224.xpos",                         "15"                    },
+  { "custom_224.ypos",                         "13"                    },
   { "custom_224.frames",                       "1"                     },
-  { "custom_224.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_224.EDITOR.xpos",                  "15"                    },
+  { "custom_224.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_224.EDITOR.xpos",                  "31"                    },
   { "custom_224.EDITOR.ypos",                  "13"                    },
 
-  { "custom_225",                              "RocksElements.pcx"     },
-  { "custom_225.xpos",                         "7"                     },
-  { "custom_225.ypos",                         "9"                     },
+  { "custom_225",                              "RocksCE.pcx"           },
+  { "custom_225.xpos",                         "0"                     },
+  { "custom_225.ypos",                         "14"                    },
   { "custom_225.frames",                       "1"                     },
-  { "custom_225.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_225.EDITOR.xpos",                  "15"                    },
-  { "custom_225.EDITOR.ypos",                  "13"                    },
+  { "custom_225.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_225.EDITOR.xpos",                  "16"                    },
+  { "custom_225.EDITOR.ypos",                  "14"                    },
 
-  { "custom_226",                              "RocksElements.pcx"     },
-  { "custom_226.xpos",                         "7"                     },
-  { "custom_226.ypos",                         "9"                     },
+  { "custom_226",                              "RocksCE.pcx"           },
+  { "custom_226.xpos",                         "1"                     },
+  { "custom_226.ypos",                         "14"                    },
   { "custom_226.frames",                       "1"                     },
-  { "custom_226.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_226.EDITOR.xpos",                  "15"                    },
-  { "custom_226.EDITOR.ypos",                  "13"                    },
+  { "custom_226.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_226.EDITOR.xpos",                  "17"                    },
+  { "custom_226.EDITOR.ypos",                  "14"                    },
 
-  { "custom_227",                              "RocksElements.pcx"     },
-  { "custom_227.xpos",                         "7"                     },
-  { "custom_227.ypos",                         "9"                     },
+  { "custom_227",                              "RocksCE.pcx"           },
+  { "custom_227.xpos",                         "2"                     },
+  { "custom_227.ypos",                         "14"                    },
   { "custom_227.frames",                       "1"                     },
-  { "custom_227.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_227.EDITOR.xpos",                  "15"                    },
-  { "custom_227.EDITOR.ypos",                  "13"                    },
+  { "custom_227.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_227.EDITOR.xpos",                  "18"                    },
+  { "custom_227.EDITOR.ypos",                  "14"                    },
 
-  { "custom_228",                              "RocksElements.pcx"     },
-  { "custom_228.xpos",                         "7"                     },
-  { "custom_228.ypos",                         "9"                     },
+  { "custom_228",                              "RocksCE.pcx"           },
+  { "custom_228.xpos",                         "3"                     },
+  { "custom_228.ypos",                         "14"                    },
   { "custom_228.frames",                       "1"                     },
-  { "custom_228.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_228.EDITOR.xpos",                  "15"                    },
-  { "custom_228.EDITOR.ypos",                  "13"                    },
+  { "custom_228.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_228.EDITOR.xpos",                  "19"                    },
+  { "custom_228.EDITOR.ypos",                  "14"                    },
 
-  { "custom_229",                              "RocksElements.pcx"     },
-  { "custom_229.xpos",                         "7"                     },
-  { "custom_229.ypos",                         "9"                     },
+  { "custom_229",                              "RocksCE.pcx"           },
+  { "custom_229.xpos",                         "4"                     },
+  { "custom_229.ypos",                         "14"                    },
   { "custom_229.frames",                       "1"                     },
-  { "custom_229.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_229.EDITOR.xpos",                  "15"                    },
-  { "custom_229.EDITOR.ypos",                  "13"                    },
+  { "custom_229.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_229.EDITOR.xpos",                  "20"                    },
+  { "custom_229.EDITOR.ypos",                  "14"                    },
 
-  { "custom_230",                              "RocksElements.pcx"     },
-  { "custom_230.xpos",                         "7"                     },
-  { "custom_230.ypos",                         "9"                     },
+  { "custom_230",                              "RocksCE.pcx"           },
+  { "custom_230.xpos",                         "5"                     },
+  { "custom_230.ypos",                         "14"                    },
   { "custom_230.frames",                       "1"                     },
-  { "custom_230.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_230.EDITOR.xpos",                  "15"                    },
-  { "custom_230.EDITOR.ypos",                  "13"                    },
+  { "custom_230.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_230.EDITOR.xpos",                  "21"                    },
+  { "custom_230.EDITOR.ypos",                  "14"                    },
 
-  { "custom_231",                              "RocksElements.pcx"     },
-  { "custom_231.xpos",                         "7"                     },
-  { "custom_231.ypos",                         "9"                     },
+  { "custom_231",                              "RocksCE.pcx"           },
+  { "custom_231.xpos",                         "6"                     },
+  { "custom_231.ypos",                         "14"                    },
   { "custom_231.frames",                       "1"                     },
-  { "custom_231.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_231.EDITOR.xpos",                  "15"                    },
-  { "custom_231.EDITOR.ypos",                  "13"                    },
+  { "custom_231.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_231.EDITOR.xpos",                  "22"                    },
+  { "custom_231.EDITOR.ypos",                  "14"                    },
 
-  { "custom_232",                              "RocksElements.pcx"     },
+  { "custom_232",                              "RocksCE.pcx"           },
   { "custom_232.xpos",                         "7"                     },
-  { "custom_232.ypos",                         "9"                     },
+  { "custom_232.ypos",                         "14"                    },
   { "custom_232.frames",                       "1"                     },
-  { "custom_232.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_232.EDITOR.xpos",                  "15"                    },
-  { "custom_232.EDITOR.ypos",                  "13"                    },
+  { "custom_232.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_232.EDITOR.xpos",                  "23"                    },
+  { "custom_232.EDITOR.ypos",                  "14"                    },
 
-  { "custom_233",                              "RocksElements.pcx"     },
-  { "custom_233.xpos",                         "7"                     },
-  { "custom_233.ypos",                         "9"                     },
+  { "custom_233",                              "RocksCE.pcx"           },
+  { "custom_233.xpos",                         "8"                     },
+  { "custom_233.ypos",                         "14"                    },
   { "custom_233.frames",                       "1"                     },
-  { "custom_233.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_233.EDITOR.xpos",                  "15"                    },
-  { "custom_233.EDITOR.ypos",                  "13"                    },
+  { "custom_233.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_233.EDITOR.xpos",                  "24"                    },
+  { "custom_233.EDITOR.ypos",                  "14"                    },
 
-  { "custom_234",                              "RocksElements.pcx"     },
-  { "custom_234.xpos",                         "7"                     },
-  { "custom_234.ypos",                         "9"                     },
+  { "custom_234",                              "RocksCE.pcx"           },
+  { "custom_234.xpos",                         "9"                     },
+  { "custom_234.ypos",                         "14"                    },
   { "custom_234.frames",                       "1"                     },
-  { "custom_234.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_234.EDITOR.xpos",                  "15"                    },
-  { "custom_234.EDITOR.ypos",                  "13"                    },
+  { "custom_234.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_234.EDITOR.xpos",                  "25"                    },
+  { "custom_234.EDITOR.ypos",                  "14"                    },
 
-  { "custom_235",                              "RocksElements.pcx"     },
-  { "custom_235.xpos",                         "7"                     },
-  { "custom_235.ypos",                         "9"                     },
+  { "custom_235",                              "RocksCE.pcx"           },
+  { "custom_235.xpos",                         "10"                    },
+  { "custom_235.ypos",                         "14"                    },
   { "custom_235.frames",                       "1"                     },
-  { "custom_235.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_235.EDITOR.xpos",                  "15"                    },
-  { "custom_235.EDITOR.ypos",                  "13"                    },
+  { "custom_235.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_235.EDITOR.xpos",                  "26"                    },
+  { "custom_235.EDITOR.ypos",                  "14"                    },
 
-  { "custom_236",                              "RocksElements.pcx"     },
-  { "custom_236.xpos",                         "7"                     },
-  { "custom_236.ypos",                         "9"                     },
+  { "custom_236",                              "RocksCE.pcx"           },
+  { "custom_236.xpos",                         "11"                    },
+  { "custom_236.ypos",                         "14"                    },
   { "custom_236.frames",                       "1"                     },
-  { "custom_236.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_236.EDITOR.xpos",                  "15"                    },
-  { "custom_236.EDITOR.ypos",                  "13"                    },
+  { "custom_236.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_236.EDITOR.xpos",                  "27"                    },
+  { "custom_236.EDITOR.ypos",                  "14"                    },
 
-  { "custom_237",                              "RocksElements.pcx"     },
-  { "custom_237.xpos",                         "7"                     },
-  { "custom_237.ypos",                         "9"                     },
+  { "custom_237",                              "RocksCE.pcx"           },
+  { "custom_237.xpos",                         "12"                    },
+  { "custom_237.ypos",                         "14"                    },
   { "custom_237.frames",                       "1"                     },
-  { "custom_237.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_237.EDITOR.xpos",                  "15"                    },
-  { "custom_237.EDITOR.ypos",                  "13"                    },
+  { "custom_237.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_237.EDITOR.xpos",                  "28"                    },
+  { "custom_237.EDITOR.ypos",                  "14"                    },
 
-  { "custom_238",                              "RocksElements.pcx"     },
-  { "custom_238.xpos",                         "7"                     },
-  { "custom_238.ypos",                         "9"                     },
+  { "custom_238",                              "RocksCE.pcx"           },
+  { "custom_238.xpos",                         "13"                    },
+  { "custom_238.ypos",                         "14"                    },
   { "custom_238.frames",                       "1"                     },
-  { "custom_238.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_238.EDITOR.xpos",                  "15"                    },
-  { "custom_238.EDITOR.ypos",                  "13"                    },
+  { "custom_238.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_238.EDITOR.xpos",                  "29"                    },
+  { "custom_238.EDITOR.ypos",                  "14"                    },
 
-  { "custom_239",                              "RocksElements.pcx"     },
-  { "custom_239.xpos",                         "7"                     },
-  { "custom_239.ypos",                         "9"                     },
+  { "custom_239",                              "RocksCE.pcx"           },
+  { "custom_239.xpos",                         "14"                    },
+  { "custom_239.ypos",                         "14"                    },
   { "custom_239.frames",                       "1"                     },
-  { "custom_239.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_239.EDITOR.xpos",                  "15"                    },
-  { "custom_239.EDITOR.ypos",                  "13"                    },
+  { "custom_239.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_239.EDITOR.xpos",                  "30"                    },
+  { "custom_239.EDITOR.ypos",                  "14"                    },
 
-  { "custom_240",                              "RocksElements.pcx"     },
-  { "custom_240.xpos",                         "7"                     },
-  { "custom_240.ypos",                         "9"                     },
+  { "custom_240",                              "RocksCE.pcx"           },
+  { "custom_240.xpos",                         "15"                    },
+  { "custom_240.ypos",                         "14"                    },
   { "custom_240.frames",                       "1"                     },
-  { "custom_240.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_240.EDITOR.xpos",                  "15"                    },
-  { "custom_240.EDITOR.ypos",                  "13"                    },
+  { "custom_240.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_240.EDITOR.xpos",                  "31"                    },
+  { "custom_240.EDITOR.ypos",                  "14"                    },
 
-  { "custom_241",                              "RocksElements.pcx"     },
-  { "custom_241.xpos",                         "7"                     },
-  { "custom_241.ypos",                         "9"                     },
+  { "custom_241",                              "RocksCE.pcx"           },
+  { "custom_241.xpos",                         "0"                     },
+  { "custom_241.ypos",                         "15"                    },
   { "custom_241.frames",                       "1"                     },
-  { "custom_241.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_241.EDITOR.xpos",                  "15"                    },
-  { "custom_241.EDITOR.ypos",                  "13"                    },
+  { "custom_241.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_241.EDITOR.xpos",                  "16"                    },
+  { "custom_241.EDITOR.ypos",                  "15"                    },
 
-  { "custom_242",                              "RocksElements.pcx"     },
-  { "custom_242.xpos",                         "7"                     },
-  { "custom_242.ypos",                         "9"                     },
+  { "custom_242",                              "RocksCE.pcx"           },
+  { "custom_242.xpos",                         "1"                     },
+  { "custom_242.ypos",                         "15"                    },
   { "custom_242.frames",                       "1"                     },
-  { "custom_242.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_242.EDITOR.xpos",                  "15"                    },
-  { "custom_242.EDITOR.ypos",                  "13"                    },
+  { "custom_242.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_242.EDITOR.xpos",                  "17"                    },
+  { "custom_242.EDITOR.ypos",                  "15"                    },
 
-  { "custom_243",                              "RocksElements.pcx"     },
-  { "custom_243.xpos",                         "7"                     },
-  { "custom_243.ypos",                         "9"                     },
+  { "custom_243",                              "RocksCE.pcx"           },
+  { "custom_243.xpos",                         "2"                     },
+  { "custom_243.ypos",                         "15"                    },
   { "custom_243.frames",                       "1"                     },
-  { "custom_243.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_243.EDITOR.xpos",                  "15"                    },
-  { "custom_243.EDITOR.ypos",                  "13"                    },
+  { "custom_243.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_243.EDITOR.xpos",                  "18"                    },
+  { "custom_243.EDITOR.ypos",                  "15"                    },
 
-  { "custom_244",                              "RocksElements.pcx"     },
-  { "custom_244.xpos",                         "7"                     },
-  { "custom_244.ypos",                         "9"                     },
+  { "custom_244",                              "RocksCE.pcx"           },
+  { "custom_244.xpos",                         "3"                     },
+  { "custom_244.ypos",                         "15"                    },
   { "custom_244.frames",                       "1"                     },
-  { "custom_244.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_244.EDITOR.xpos",                  "15"                    },
-  { "custom_244.EDITOR.ypos",                  "13"                    },
+  { "custom_244.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_244.EDITOR.xpos",                  "19"                    },
+  { "custom_244.EDITOR.ypos",                  "15"                    },
 
-  { "custom_245",                              "RocksElements.pcx"     },
-  { "custom_245.xpos",                         "7"                     },
-  { "custom_245.ypos",                         "9"                     },
+  { "custom_245",                              "RocksCE.pcx"           },
+  { "custom_245.xpos",                         "4"                     },
+  { "custom_245.ypos",                         "15"                    },
   { "custom_245.frames",                       "1"                     },
-  { "custom_245.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_245.EDITOR.xpos",                  "15"                    },
-  { "custom_245.EDITOR.ypos",                  "13"                    },
+  { "custom_245.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_245.EDITOR.xpos",                  "20"                    },
+  { "custom_245.EDITOR.ypos",                  "15"                    },
 
-  { "custom_246",                              "RocksElements.pcx"     },
-  { "custom_246.xpos",                         "7"                     },
-  { "custom_246.ypos",                         "9"                     },
+  { "custom_246",                              "RocksCE.pcx"           },
+  { "custom_246.xpos",                         "5"                     },
+  { "custom_246.ypos",                         "15"                    },
   { "custom_246.frames",                       "1"                     },
-  { "custom_246.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_246.EDITOR.xpos",                  "15"                    },
-  { "custom_246.EDITOR.ypos",                  "13"                    },
+  { "custom_246.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_246.EDITOR.xpos",                  "21"                    },
+  { "custom_246.EDITOR.ypos",                  "15"                    },
 
-  { "custom_247",                              "RocksElements.pcx"     },
-  { "custom_247.xpos",                         "7"                     },
-  { "custom_247.ypos",                         "9"                     },
+  { "custom_247",                              "RocksCE.pcx"           },
+  { "custom_247.xpos",                         "6"                     },
+  { "custom_247.ypos",                         "15"                    },
   { "custom_247.frames",                       "1"                     },
-  { "custom_247.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_247.EDITOR.xpos",                  "15"                    },
-  { "custom_247.EDITOR.ypos",                  "13"                    },
+  { "custom_247.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_247.EDITOR.xpos",                  "22"                    },
+  { "custom_247.EDITOR.ypos",                  "15"                    },
 
-  { "custom_248",                              "RocksElements.pcx"     },
+  { "custom_248",                              "RocksCE.pcx"           },
   { "custom_248.xpos",                         "7"                     },
-  { "custom_248.ypos",                         "9"                     },
+  { "custom_248.ypos",                         "15"                    },
   { "custom_248.frames",                       "1"                     },
-  { "custom_248.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_248.EDITOR.xpos",                  "15"                    },
-  { "custom_248.EDITOR.ypos",                  "13"                    },
+  { "custom_248.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_248.EDITOR.xpos",                  "23"                    },
+  { "custom_248.EDITOR.ypos",                  "15"                    },
 
-  { "custom_249",                              "RocksElements.pcx"     },
-  { "custom_249.xpos",                         "7"                     },
-  { "custom_249.ypos",                         "9"                     },
+  { "custom_249",                              "RocksCE.pcx"           },
+  { "custom_249.xpos",                         "8"                     },
+  { "custom_249.ypos",                         "15"                    },
   { "custom_249.frames",                       "1"                     },
-  { "custom_249.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_249.EDITOR.xpos",                  "15"                    },
-  { "custom_249.EDITOR.ypos",                  "13"                    },
+  { "custom_249.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_249.EDITOR.xpos",                  "24"                    },
+  { "custom_249.EDITOR.ypos",                  "15"                    },
 
-  { "custom_250",                              "RocksElements.pcx"     },
-  { "custom_250.xpos",                         "7"                     },
-  { "custom_250.ypos",                         "9"                     },
+  { "custom_250",                              "RocksCE.pcx"           },
+  { "custom_250.xpos",                         "9"                     },
+  { "custom_250.ypos",                         "15"                    },
   { "custom_250.frames",                       "1"                     },
-  { "custom_250.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_250.EDITOR.xpos",                  "15"                    },
-  { "custom_250.EDITOR.ypos",                  "13"                    },
+  { "custom_250.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_250.EDITOR.xpos",                  "25"                    },
+  { "custom_250.EDITOR.ypos",                  "15"                    },
 
-  { "custom_251",                              "RocksElements.pcx"     },
-  { "custom_251.xpos",                         "7"                     },
-  { "custom_251.ypos",                         "9"                     },
+  { "custom_251",                              "RocksCE.pcx"           },
+  { "custom_251.xpos",                         "10"                    },
+  { "custom_251.ypos",                         "15"                    },
   { "custom_251.frames",                       "1"                     },
-  { "custom_251.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_251.EDITOR.xpos",                  "15"                    },
-  { "custom_251.EDITOR.ypos",                  "13"                    },
+  { "custom_251.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_251.EDITOR.xpos",                  "26"                    },
+  { "custom_251.EDITOR.ypos",                  "15"                    },
 
-  { "custom_252",                              "RocksElements.pcx"     },
-  { "custom_252.xpos",                         "7"                     },
-  { "custom_252.ypos",                         "9"                     },
+  { "custom_252",                              "RocksCE.pcx"           },
+  { "custom_252.xpos",                         "11"                    },
+  { "custom_252.ypos",                         "15"                    },
   { "custom_252.frames",                       "1"                     },
-  { "custom_252.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_252.EDITOR.xpos",                  "15"                    },
-  { "custom_252.EDITOR.ypos",                  "13"                    },
+  { "custom_252.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_252.EDITOR.xpos",                  "27"                    },
+  { "custom_252.EDITOR.ypos",                  "15"                    },
 
-  { "custom_253",                              "RocksElements.pcx"     },
-  { "custom_253.xpos",                         "7"                     },
-  { "custom_253.ypos",                         "9"                     },
+  { "custom_253",                              "RocksCE.pcx"           },
+  { "custom_253.xpos",                         "12"                    },
+  { "custom_253.ypos",                         "15"                    },
   { "custom_253.frames",                       "1"                     },
-  { "custom_253.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_253.EDITOR.xpos",                  "15"                    },
-  { "custom_253.EDITOR.ypos",                  "13"                    },
+  { "custom_253.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_253.EDITOR.xpos",                  "28"                    },
+  { "custom_253.EDITOR.ypos",                  "15"                    },
 
-  { "custom_254",                              "RocksElements.pcx"     },
-  { "custom_254.xpos",                         "7"                     },
-  { "custom_254.ypos",                         "9"                     },
+  { "custom_254",                              "RocksCE.pcx"           },
+  { "custom_254.xpos",                         "13"                    },
+  { "custom_254.ypos",                         "15"                    },
   { "custom_254.frames",                       "1"                     },
-  { "custom_254.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_254.EDITOR.xpos",                  "15"                    },
-  { "custom_254.EDITOR.ypos",                  "13"                    },
+  { "custom_254.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_254.EDITOR.xpos",                  "29"                    },
+  { "custom_254.EDITOR.ypos",                  "15"                    },
 
-  { "custom_255",                              "RocksElements.pcx"     },
-  { "custom_255.xpos",                         "7"                     },
-  { "custom_255.ypos",                         "9"                     },
+  { "custom_255",                              "RocksCE.pcx"           },
+  { "custom_255.xpos",                         "14"                    },
+  { "custom_255.ypos",                         "15"                    },
   { "custom_255.frames",                       "1"                     },
-  { "custom_255.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_255.EDITOR.xpos",                  "15"                    },
-  { "custom_255.EDITOR.ypos",                  "13"                    },
+  { "custom_255.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_255.EDITOR.xpos",                  "30"                    },
+  { "custom_255.EDITOR.ypos",                  "15"                    },
 
-  { "custom_256",                              "RocksElements.pcx"     },
-  { "custom_256.xpos",                         "7"                     },
-  { "custom_256.ypos",                         "9"                     },
+  { "custom_256",                              "RocksCE.pcx"           },
+  { "custom_256.xpos",                         "15"                    },
+  { "custom_256.ypos",                         "15"                    },
   { "custom_256.frames",                       "1"                     },
-  { "custom_256.EDITOR",                       "RocksElements.pcx"     },
-  { "custom_256.EDITOR.xpos",                  "15"                    },
-  { "custom_256.EDITOR.ypos",                  "13"                    },
+  { "custom_256.EDITOR",                       "RocksCE.pcx"           },
+  { "custom_256.EDITOR.xpos",                  "31"                    },
+  { "custom_256.EDITOR.ypos",                  "15"                    },
 
 
 #endif /* CONF_CUS_C */
index fd978dae45dd7b10c2adf267f4656dca2252e810..49dca0a7271981c746a4e9f41e97ab43fca69cc8 100644 (file)
@@ -4944,12 +4944,12 @@ struct ConfigInfo image_config[] =
   { "global.busy.delay",                       "2"                     },
 
   { "editor.element_border",                   "RocksElements.pcx"     },
-  { "editor.element_border.xpos",              "0"                     },
-  { "editor.element_border.ypos",              "0"                     },
+  { "editor.element_border.x",                 "0"                     },
+  { "editor.element_border.y",                 "0"                     },
 
-  { "editor.element_border_input",             "RocksElements.pcx"     },
-  { "editor.element_border_input.xpos",                "0"                     },
-  { "editor.element_border_input.ypos",                "0"                     },
+  { "editor.element_border_input",             "RocksDoor.pcx"         },
+  { "editor.element_border_input.x",           "740"                   },
+  { "editor.element_border_input.y",           "48"                    },
 
   { "editor.cascade_list",                     "RocksDoor.pcx"         },
   { "editor.cascade_list.x",                   "708"                   },
index bf92917f0bd0689ead93033620ce03c44dddc115..7c89bcaa34cdabccb90b8233c395a9d2d6daed96 100644 (file)
 
 /* values for graphics configuration (group elements) */
 
-  { "group_1",                                 "RocksDC.pcx"           },
-  { "group_1.xpos",                            "4"                     },
-  { "group_1.ypos",                            "15"                    },
+  { "group_1",                                 "RocksCE.pcx"           },
+  { "group_1.xpos",                            "0"                     },
+  { "group_1.ypos",                            "16"                    },
   { "group_1.frames",                          "1"                     },
-  { "group_1.EDITOR",                          "RocksDC.pcx"           },
-  { "group_1.EDITOR.xpos",                     "14"                    },
-  { "group_1.EDITOR.ypos",                     "15"                    },
+  { "group_1.EDITOR",                          "RocksCE.pcx"           },
+  { "group_1.EDITOR.xpos",                     "16"                    },
+  { "group_1.EDITOR.ypos",                     "16"                    },
 
-  { "group_2",                                 "RocksDC.pcx"           },
-  { "group_2.xpos",                            "4"                     },
-  { "group_2.ypos",                            "15"                    },
+  { "group_2",                                 "RocksCE.pcx"           },
+  { "group_2.xpos",                            "1"                     },
+  { "group_2.ypos",                            "16"                    },
   { "group_2.frames",                          "1"                     },
-  { "group_2.EDITOR",                          "RocksDC.pcx"           },
-  { "group_2.EDITOR.xpos",                     "14"                    },
-  { "group_2.EDITOR.ypos",                     "15"                    },
+  { "group_2.EDITOR",                          "RocksCE.pcx"           },
+  { "group_2.EDITOR.xpos",                     "17"                    },
+  { "group_2.EDITOR.ypos",                     "16"                    },
 
-  { "group_3",                                 "RocksDC.pcx"           },
-  { "group_3.xpos",                            "4"                     },
-  { "group_3.ypos",                            "15"                    },
+  { "group_3",                                 "RocksCE.pcx"           },
+  { "group_3.xpos",                            "2"                     },
+  { "group_3.ypos",                            "16"                    },
   { "group_3.frames",                          "1"                     },
-  { "group_3.EDITOR",                          "RocksDC.pcx"           },
-  { "group_3.EDITOR.xpos",                     "14"                    },
-  { "group_3.EDITOR.ypos",                     "15"                    },
+  { "group_3.EDITOR",                          "RocksCE.pcx"           },
+  { "group_3.EDITOR.xpos",                     "18"                    },
+  { "group_3.EDITOR.ypos",                     "16"                    },
 
-  { "group_4",                                 "RocksDC.pcx"           },
-  { "group_4.xpos",                            "4"                     },
-  { "group_4.ypos",                            "15"                    },
+  { "group_4",                                 "RocksCE.pcx"           },
+  { "group_4.xpos",                            "3"                     },
+  { "group_4.ypos",                            "16"                    },
   { "group_4.frames",                          "1"                     },
-  { "group_4.EDITOR",                          "RocksDC.pcx"           },
-  { "group_4.EDITOR.xpos",                     "14"                    },
-  { "group_4.EDITOR.ypos",                     "15"                    },
+  { "group_4.EDITOR",                          "RocksCE.pcx"           },
+  { "group_4.EDITOR.xpos",                     "19"                    },
+  { "group_4.EDITOR.ypos",                     "16"                    },
 
-  { "group_5",                                 "RocksDC.pcx"           },
+  { "group_5",                                 "RocksCE.pcx"           },
   { "group_5.xpos",                            "4"                     },
-  { "group_5.ypos",                            "15"                    },
+  { "group_5.ypos",                            "16"                    },
   { "group_5.frames",                          "1"                     },
-  { "group_5.EDITOR",                          "RocksDC.pcx"           },
-  { "group_5.EDITOR.xpos",                     "14"                    },
-  { "group_5.EDITOR.ypos",                     "15"                    },
+  { "group_5.EDITOR",                          "RocksCE.pcx"           },
+  { "group_5.EDITOR.xpos",                     "20"                    },
+  { "group_5.EDITOR.ypos",                     "16"                    },
 
-  { "group_6",                                 "RocksDC.pcx"           },
-  { "group_6.xpos",                            "4"                     },
-  { "group_6.ypos",                            "15"                    },
+  { "group_6",                                 "RocksCE.pcx"           },
+  { "group_6.xpos",                            "5"                     },
+  { "group_6.ypos",                            "16"                    },
   { "group_6.frames",                          "1"                     },
-  { "group_6.EDITOR",                          "RocksDC.pcx"           },
-  { "group_6.EDITOR.xpos",                     "14"                    },
-  { "group_6.EDITOR.ypos",                     "15"                    },
+  { "group_6.EDITOR",                          "RocksCE.pcx"           },
+  { "group_6.EDITOR.xpos",                     "21"                    },
+  { "group_6.EDITOR.ypos",                     "16"                    },
 
-  { "group_7",                                 "RocksDC.pcx"           },
-  { "group_7.xpos",                            "4"                     },
-  { "group_7.ypos",                            "15"                    },
+  { "group_7",                                 "RocksCE.pcx"           },
+  { "group_7.xpos",                            "6"                     },
+  { "group_7.ypos",                            "16"                    },
   { "group_7.frames",                          "1"                     },
-  { "group_7.EDITOR",                          "RocksDC.pcx"           },
-  { "group_7.EDITOR.xpos",                     "14"                    },
-  { "group_7.EDITOR.ypos",                     "15"                    },
+  { "group_7.EDITOR",                          "RocksCE.pcx"           },
+  { "group_7.EDITOR.xpos",                     "22"                    },
+  { "group_7.EDITOR.ypos",                     "16"                    },
 
-  { "group_8",                                 "RocksDC.pcx"           },
-  { "group_8.xpos",                            "4"                     },
-  { "group_8.ypos",                            "15"                    },
+  { "group_8",                                 "RocksCE.pcx"           },
+  { "group_8.xpos",                            "7"                     },
+  { "group_8.ypos",                            "16"                    },
   { "group_8.frames",                          "1"                     },
-  { "group_8.EDITOR",                          "RocksDC.pcx"           },
-  { "group_8.EDITOR.xpos",                     "14"                    },
-  { "group_8.EDITOR.ypos",                     "15"                    },
+  { "group_8.EDITOR",                          "RocksCE.pcx"           },
+  { "group_8.EDITOR.xpos",                     "23"                    },
+  { "group_8.EDITOR.ypos",                     "16"                    },
 
-  { "group_9",                                 "RocksDC.pcx"           },
-  { "group_9.xpos",                            "4"                     },
-  { "group_9.ypos",                            "15"                    },
+  { "group_9",                                 "RocksCE.pcx"           },
+  { "group_9.xpos",                            "8"                     },
+  { "group_9.ypos",                            "16"                    },
   { "group_9.frames",                          "1"                     },
-  { "group_9.EDITOR",                          "RocksDC.pcx"           },
-  { "group_9.EDITOR.xpos",                     "14"                    },
-  { "group_9.EDITOR.ypos",                     "15"                    },
+  { "group_9.EDITOR",                          "RocksCE.pcx"           },
+  { "group_9.EDITOR.xpos",                     "24"                    },
+  { "group_9.EDITOR.ypos",                     "16"                    },
 
-  { "group_10",                                        "RocksDC.pcx"           },
-  { "group_10.xpos",                           "4"                     },
-  { "group_10.ypos",                           "15"                    },
+  { "group_10",                                        "RocksCE.pcx"           },
+  { "group_10.xpos",                           "9"                     },
+  { "group_10.ypos",                           "16"                    },
   { "group_10.frames",                         "1"                     },
-  { "group_10.EDITOR",                         "RocksDC.pcx"           },
-  { "group_10.EDITOR.xpos",                    "14"                    },
-  { "group_10.EDITOR.ypos",                    "15"                    },
+  { "group_10.EDITOR",                         "RocksCE.pcx"           },
+  { "group_10.EDITOR.xpos",                    "25"                    },
+  { "group_10.EDITOR.ypos",                    "16"                    },
 
-  { "group_11",                                        "RocksDC.pcx"           },
-  { "group_11.xpos",                           "4"                     },
-  { "group_11.ypos",                           "15"                    },
+  { "group_11",                                        "RocksCE.pcx"           },
+  { "group_11.xpos",                           "10"                    },
+  { "group_11.ypos",                           "16"                    },
   { "group_11.frames",                         "1"                     },
-  { "group_11.EDITOR",                         "RocksDC.pcx"           },
-  { "group_11.EDITOR.xpos",                    "14"                    },
-  { "group_11.EDITOR.ypos",                    "15"                    },
+  { "group_11.EDITOR",                         "RocksCE.pcx"           },
+  { "group_11.EDITOR.xpos",                    "26"                    },
+  { "group_11.EDITOR.ypos",                    "16"                    },
 
-  { "group_12",                                        "RocksDC.pcx"           },
-  { "group_12.xpos",                           "4"                     },
-  { "group_12.ypos",                           "15"                    },
+  { "group_12",                                        "RocksCE.pcx"           },
+  { "group_12.xpos",                           "11"                    },
+  { "group_12.ypos",                           "16"                    },
   { "group_12.frames",                         "1"                     },
-  { "group_12.EDITOR",                         "RocksDC.pcx"           },
-  { "group_12.EDITOR.xpos",                    "14"                    },
-  { "group_12.EDITOR.ypos",                    "15"                    },
+  { "group_12.EDITOR",                         "RocksCE.pcx"           },
+  { "group_12.EDITOR.xpos",                    "27"                    },
+  { "group_12.EDITOR.ypos",                    "16"                    },
 
-  { "group_13",                                        "RocksDC.pcx"           },
-  { "group_13.xpos",                           "4"                     },
-  { "group_13.ypos",                           "15"                    },
+  { "group_13",                                        "RocksCE.pcx"           },
+  { "group_13.xpos",                           "12"                    },
+  { "group_13.ypos",                           "16"                    },
   { "group_13.frames",                         "1"                     },
-  { "group_13.EDITOR",                         "RocksDC.pcx"           },
-  { "group_13.EDITOR.xpos",                    "14"                    },
-  { "group_13.EDITOR.ypos",                    "15"                    },
+  { "group_13.EDITOR",                         "RocksCE.pcx"           },
+  { "group_13.EDITOR.xpos",                    "28"                    },
+  { "group_13.EDITOR.ypos",                    "16"                    },
 
-  { "group_14",                                        "RocksDC.pcx"           },
-  { "group_14.xpos",                           "4"                     },
-  { "group_14.ypos",                           "15"                    },
+  { "group_14",                                        "RocksCE.pcx"           },
+  { "group_14.xpos",                           "13"                    },
+  { "group_14.ypos",                           "16"                    },
   { "group_14.frames",                         "1"                     },
-  { "group_14.EDITOR",                         "RocksDC.pcx"           },
-  { "group_14.EDITOR.xpos",                    "14"                    },
-  { "group_14.EDITOR.ypos",                    "15"                    },
+  { "group_14.EDITOR",                         "RocksCE.pcx"           },
+  { "group_14.EDITOR.xpos",                    "29"                    },
+  { "group_14.EDITOR.ypos",                    "16"                    },
 
-  { "group_15",                                        "RocksDC.pcx"           },
-  { "group_15.xpos",                           "4"                     },
-  { "group_15.ypos",                           "15"                    },
+  { "group_15",                                        "RocksCE.pcx"           },
+  { "group_15.xpos",                           "14"                    },
+  { "group_15.ypos",                           "16"                    },
   { "group_15.frames",                         "1"                     },
-  { "group_15.EDITOR",                         "RocksDC.pcx"           },
-  { "group_15.EDITOR.xpos",                    "14"                    },
-  { "group_15.EDITOR.ypos",                    "15"                    },
+  { "group_15.EDITOR",                         "RocksCE.pcx"           },
+  { "group_15.EDITOR.xpos",                    "30"                    },
+  { "group_15.EDITOR.ypos",                    "16"                    },
 
-  { "group_16",                                        "RocksDC.pcx"           },
-  { "group_16.xpos",                           "4"                     },
-  { "group_16.ypos",                           "15"                    },
+  { "group_16",                                        "RocksCE.pcx"           },
+  { "group_16.xpos",                           "15"                    },
+  { "group_16.ypos",                           "16"                    },
   { "group_16.frames",                         "1"                     },
-  { "group_16.EDITOR",                         "RocksDC.pcx"           },
-  { "group_16.EDITOR.xpos",                    "14"                    },
-  { "group_16.EDITOR.ypos",                    "15"                    },
+  { "group_16.EDITOR",                         "RocksCE.pcx"           },
+  { "group_16.EDITOR.xpos",                    "31"                    },
+  { "group_16.EDITOR.ypos",                    "16"                    },
 
-  { "group_17",                                        "RocksDC.pcx"           },
-  { "group_17.xpos",                           "4"                     },
-  { "group_17.ypos",                           "15"                    },
+  { "group_17",                                        "RocksCE.pcx"           },
+  { "group_17.xpos",                           "0"                     },
+  { "group_17.ypos",                           "17"                    },
   { "group_17.frames",                         "1"                     },
-  { "group_17.EDITOR",                         "RocksDC.pcx"           },
-  { "group_17.EDITOR.xpos",                    "14"                    },
-  { "group_17.EDITOR.ypos",                    "15"                    },
+  { "group_17.EDITOR",                         "RocksCE.pcx"           },
+  { "group_17.EDITOR.xpos",                    "16"                    },
+  { "group_17.EDITOR.ypos",                    "17"                    },
 
-  { "group_18",                                        "RocksDC.pcx"           },
-  { "group_18.xpos",                           "4"                     },
-  { "group_18.ypos",                           "15"                    },
+  { "group_18",                                        "RocksCE.pcx"           },
+  { "group_18.xpos",                           "1"                     },
+  { "group_18.ypos",                           "17"                    },
   { "group_18.frames",                         "1"                     },
-  { "group_18.EDITOR",                         "RocksDC.pcx"           },
-  { "group_18.EDITOR.xpos",                    "14"                    },
-  { "group_18.EDITOR.ypos",                    "15"                    },
+  { "group_18.EDITOR",                         "RocksCE.pcx"           },
+  { "group_18.EDITOR.xpos",                    "17"                    },
+  { "group_18.EDITOR.ypos",                    "17"                    },
 
-  { "group_19",                                        "RocksDC.pcx"           },
-  { "group_19.xpos",                           "4"                     },
-  { "group_19.ypos",                           "15"                    },
+  { "group_19",                                        "RocksCE.pcx"           },
+  { "group_19.xpos",                           "2"                     },
+  { "group_19.ypos",                           "17"                    },
   { "group_19.frames",                         "1"                     },
-  { "group_19.EDITOR",                         "RocksDC.pcx"           },
-  { "group_19.EDITOR.xpos",                    "14"                    },
-  { "group_19.EDITOR.ypos",                    "15"                    },
+  { "group_19.EDITOR",                         "RocksCE.pcx"           },
+  { "group_19.EDITOR.xpos",                    "18"                    },
+  { "group_19.EDITOR.ypos",                    "17"                    },
 
-  { "group_20",                                        "RocksDC.pcx"           },
-  { "group_20.xpos",                           "4"                     },
-  { "group_20.ypos",                           "15"                    },
+  { "group_20",                                        "RocksCE.pcx"           },
+  { "group_20.xpos",                           "3"                     },
+  { "group_20.ypos",                           "17"                    },
   { "group_20.frames",                         "1"                     },
-  { "group_20.EDITOR",                         "RocksDC.pcx"           },
-  { "group_20.EDITOR.xpos",                    "14"                    },
-  { "group_20.EDITOR.ypos",                    "15"                    },
+  { "group_20.EDITOR",                         "RocksCE.pcx"           },
+  { "group_20.EDITOR.xpos",                    "19"                    },
+  { "group_20.EDITOR.ypos",                    "17"                    },
 
-  { "group_21",                                        "RocksDC.pcx"           },
+  { "group_21",                                        "RocksCE.pcx"           },
   { "group_21.xpos",                           "4"                     },
-  { "group_21.ypos",                           "15"                    },
+  { "group_21.ypos",                           "17"                    },
   { "group_21.frames",                         "1"                     },
-  { "group_21.EDITOR",                         "RocksDC.pcx"           },
-  { "group_21.EDITOR.xpos",                    "14"                    },
-  { "group_21.EDITOR.ypos",                    "15"                    },
+  { "group_21.EDITOR",                         "RocksCE.pcx"           },
+  { "group_21.EDITOR.xpos",                    "20"                    },
+  { "group_21.EDITOR.ypos",                    "17"                    },
 
-  { "group_22",                                        "RocksDC.pcx"           },
-  { "group_22.xpos",                           "4"                     },
-  { "group_22.ypos",                           "15"                    },
+  { "group_22",                                        "RocksCE.pcx"           },
+  { "group_22.xpos",                           "5"                     },
+  { "group_22.ypos",                           "17"                    },
   { "group_22.frames",                         "1"                     },
-  { "group_22.EDITOR",                         "RocksDC.pcx"           },
-  { "group_22.EDITOR.xpos",                    "14"                    },
-  { "group_22.EDITOR.ypos",                    "15"                    },
+  { "group_22.EDITOR",                         "RocksCE.pcx"           },
+  { "group_22.EDITOR.xpos",                    "21"                    },
+  { "group_22.EDITOR.ypos",                    "17"                    },
 
-  { "group_23",                                        "RocksDC.pcx"           },
-  { "group_23.xpos",                           "4"                     },
-  { "group_23.ypos",                           "15"                    },
+  { "group_23",                                        "RocksCE.pcx"           },
+  { "group_23.xpos",                           "6"                     },
+  { "group_23.ypos",                           "17"                    },
   { "group_23.frames",                         "1"                     },
-  { "group_23.EDITOR",                         "RocksDC.pcx"           },
-  { "group_23.EDITOR.xpos",                    "14"                    },
-  { "group_23.EDITOR.ypos",                    "15"                    },
+  { "group_23.EDITOR",                         "RocksCE.pcx"           },
+  { "group_23.EDITOR.xpos",                    "22"                    },
+  { "group_23.EDITOR.ypos",                    "17"                    },
 
-  { "group_24",                                        "RocksDC.pcx"           },
-  { "group_24.xpos",                           "4"                     },
-  { "group_24.ypos",                           "15"                    },
+  { "group_24",                                        "RocksCE.pcx"           },
+  { "group_24.xpos",                           "7"                     },
+  { "group_24.ypos",                           "17"                    },
   { "group_24.frames",                         "1"                     },
-  { "group_24.EDITOR",                         "RocksDC.pcx"           },
-  { "group_24.EDITOR.xpos",                    "14"                    },
-  { "group_24.EDITOR.ypos",                    "15"                    },
+  { "group_24.EDITOR",                         "RocksCE.pcx"           },
+  { "group_24.EDITOR.xpos",                    "23"                    },
+  { "group_24.EDITOR.ypos",                    "17"                    },
 
-  { "group_25",                                        "RocksDC.pcx"           },
-  { "group_25.xpos",                           "4"                     },
-  { "group_25.ypos",                           "15"                    },
+  { "group_25",                                        "RocksCE.pcx"           },
+  { "group_25.xpos",                           "8"                     },
+  { "group_25.ypos",                           "17"                    },
   { "group_25.frames",                         "1"                     },
-  { "group_25.EDITOR",                         "RocksDC.pcx"           },
-  { "group_25.EDITOR.xpos",                    "14"                    },
-  { "group_25.EDITOR.ypos",                    "15"                    },
+  { "group_25.EDITOR",                         "RocksCE.pcx"           },
+  { "group_25.EDITOR.xpos",                    "24"                    },
+  { "group_25.EDITOR.ypos",                    "17"                    },
 
-  { "group_26",                                        "RocksDC.pcx"           },
-  { "group_26.xpos",                           "4"                     },
-  { "group_26.ypos",                           "15"                    },
+  { "group_26",                                        "RocksCE.pcx"           },
+  { "group_26.xpos",                           "9"                     },
+  { "group_26.ypos",                           "17"                    },
   { "group_26.frames",                         "1"                     },
-  { "group_26.EDITOR",                         "RocksDC.pcx"           },
-  { "group_26.EDITOR.xpos",                    "14"                    },
-  { "group_26.EDITOR.ypos",                    "15"                    },
+  { "group_26.EDITOR",                         "RocksCE.pcx"           },
+  { "group_26.EDITOR.xpos",                    "25"                    },
+  { "group_26.EDITOR.ypos",                    "17"                    },
 
-  { "group_27",                                        "RocksDC.pcx"           },
-  { "group_27.xpos",                           "4"                     },
-  { "group_27.ypos",                           "15"                    },
+  { "group_27",                                        "RocksCE.pcx"           },
+  { "group_27.xpos",                           "10"                    },
+  { "group_27.ypos",                           "17"                    },
   { "group_27.frames",                         "1"                     },
-  { "group_27.EDITOR",                         "RocksDC.pcx"           },
-  { "group_27.EDITOR.xpos",                    "14"                    },
-  { "group_27.EDITOR.ypos",                    "15"                    },
+  { "group_27.EDITOR",                         "RocksCE.pcx"           },
+  { "group_27.EDITOR.xpos",                    "26"                    },
+  { "group_27.EDITOR.ypos",                    "17"                    },
 
-  { "group_28",                                        "RocksDC.pcx"           },
-  { "group_28.xpos",                           "4"                     },
-  { "group_28.ypos",                           "15"                    },
+  { "group_28",                                        "RocksCE.pcx"           },
+  { "group_28.xpos",                           "11"                    },
+  { "group_28.ypos",                           "17"                    },
   { "group_28.frames",                         "1"                     },
-  { "group_28.EDITOR",                         "RocksDC.pcx"           },
-  { "group_28.EDITOR.xpos",                    "14"                    },
-  { "group_28.EDITOR.ypos",                    "15"                    },
+  { "group_28.EDITOR",                         "RocksCE.pcx"           },
+  { "group_28.EDITOR.xpos",                    "27"                    },
+  { "group_28.EDITOR.ypos",                    "17"                    },
 
-  { "group_29",                                        "RocksDC.pcx"           },
-  { "group_29.xpos",                           "4"                     },
-  { "group_29.ypos",                           "15"                    },
+  { "group_29",                                        "RocksCE.pcx"           },
+  { "group_29.xpos",                           "12"                    },
+  { "group_29.ypos",                           "17"                    },
   { "group_29.frames",                         "1"                     },
-  { "group_29.EDITOR",                         "RocksDC.pcx"           },
-  { "group_29.EDITOR.xpos",                    "14"                    },
-  { "group_29.EDITOR.ypos",                    "15"                    },
+  { "group_29.EDITOR",                         "RocksCE.pcx"           },
+  { "group_29.EDITOR.xpos",                    "28"                    },
+  { "group_29.EDITOR.ypos",                    "17"                    },
 
-  { "group_30",                                        "RocksDC.pcx"           },
-  { "group_30.xpos",                           "4"                     },
-  { "group_30.ypos",                           "15"                    },
+  { "group_30",                                        "RocksCE.pcx"           },
+  { "group_30.xpos",                           "13"                    },
+  { "group_30.ypos",                           "17"                    },
   { "group_30.frames",                         "1"                     },
-  { "group_30.EDITOR",                         "RocksDC.pcx"           },
-  { "group_30.EDITOR.xpos",                    "14"                    },
-  { "group_30.EDITOR.ypos",                    "15"                    },
+  { "group_30.EDITOR",                         "RocksCE.pcx"           },
+  { "group_30.EDITOR.xpos",                    "29"                    },
+  { "group_30.EDITOR.ypos",                    "17"                    },
 
-  { "group_31",                                        "RocksDC.pcx"           },
-  { "group_31.xpos",                           "4"                     },
-  { "group_31.ypos",                           "15"                    },
+  { "group_31",                                        "RocksCE.pcx"           },
+  { "group_31.xpos",                           "14"                    },
+  { "group_31.ypos",                           "17"                    },
   { "group_31.frames",                         "1"                     },
-  { "group_31.EDITOR",                         "RocksDC.pcx"           },
-  { "group_31.EDITOR.xpos",                    "14"                    },
-  { "group_31.EDITOR.ypos",                    "15"                    },
+  { "group_31.EDITOR",                         "RocksCE.pcx"           },
+  { "group_31.EDITOR.xpos",                    "30"                    },
+  { "group_31.EDITOR.ypos",                    "17"                    },
 
-  { "group_32",                                        "RocksDC.pcx"           },
-  { "group_32.xpos",                           "4"                     },
-  { "group_32.ypos",                           "15"                    },
+  { "group_32",                                        "RocksCE.pcx"           },
+  { "group_32.xpos",                           "15"                    },
+  { "group_32.ypos",                           "17"                    },
   { "group_32.frames",                         "1"                     },
-  { "group_32.EDITOR",                         "RocksDC.pcx"           },
-  { "group_32.EDITOR.xpos",                    "14"                    },
-  { "group_32.EDITOR.ypos",                    "15"                    },
+  { "group_32.EDITOR",                         "RocksCE.pcx"           },
+  { "group_32.EDITOR.xpos",                    "31"                    },
+  { "group_32.EDITOR.ypos",                    "17"                    },
 
 
 #endif /* CONF_GRP_C */
index 5e8add2a31620885c21728b482c33e2abd724493..c812adfdbfd148588e2f4af3727e4b99d9e3cb6c 100644 (file)
@@ -17,6 +17,9 @@
 #include "conftime.h"
 
 
+#define USE_EXTENDED_VERSION   1
+
+
 char *getCompileDateString()
 {
   return COMPILE_DATE_STRING;
@@ -26,8 +29,14 @@ char *getProgramReleaseVersionString()
 {
   static char program_version_string[32];
 
+#if USE_EXTENDED_VERSION
+  sprintf(program_version_string, "%d.%d.%d.%d",
+         PROGRAM_VERSION_MAJOR, PROGRAM_VERSION_MINOR, PROGRAM_VERSION_PATCH,
+         PROGRAM_VERSION_BUILD);
+#else
   sprintf(program_version_string, "%d.%d.%d",
          PROGRAM_VERSION_MAJOR, PROGRAM_VERSION_MINOR, PROGRAM_VERSION_PATCH);
+#endif
 
   return program_version_string;
 }
@@ -36,9 +45,15 @@ char *getProgramFullVersionString()
 {
   static char program_version_string[32];
 
+#if USE_EXTENDED_VERSION
+  sprintf(program_version_string, "%d.%d.%d.%d",
+         PROGRAM_VERSION_MAJOR, PROGRAM_VERSION_MINOR, PROGRAM_VERSION_PATCH,
+         PROGRAM_VERSION_BUILD);
+#else
   sprintf(program_version_string, "%d.%d.%d-%d",
          PROGRAM_VERSION_MAJOR, PROGRAM_VERSION_MINOR, PROGRAM_VERSION_PATCH,
          PROGRAM_VERSION_BUILD);
+#endif
 
   return program_version_string;
 }
index 44ea4b9515bf1ac62e022134981ecfcc31ccecc0..c8c6c65664eaaa0d4d5f4fd48ed4a96da64e0a07 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "2007-10-09 00:21"
+#define COMPILE_DATE_STRING "2008-11-03 21:21"
index 2fab93d6a7d73b5d5657f22b5b09f32378db25b8..5fb4dd93b4444f26017086e13c78fbcd145dee6c 100644 (file)
 
 /* values for the settings windows */
 #define ED_LEVEL_SETTINGS_XSTART       (3 * MINI_TILEX / 2)
-#define ED_LEVEL_SETTINGS_YSTART       (5 * MINI_TILEY)
+#define ED_LEVEL_SETTINGS_YSTART       (7 * MINI_TILEY)
 
 #define ED_ELEMENT_SETTINGS_XSTART     (3 * MINI_TILEX / 2)
 #define ED_ELEMENT_SETTINGS_YSTART     (10 * MINI_TILEY)
 
 #define ED_SETTINGS_XOFFSET            ED_XOFFSET_CHECKBOX
 #define ED_SETTINGS_YOFFSET            (3 * MINI_TILEY / 2)
+#define ED_SETTINGS_TAB_XOFFSET                124
 
 #define ED_LEVEL_SETTINGS_XPOS(n)      (ED_LEVEL_SETTINGS_XSTART +     \
                                         (n) * ED_SETTINGS_XOFFSET)
 #define ED_ELEMENT_SETTINGS_YPOS(n)    (ED_ELEMENT_SETTINGS_YSTART +   \
                                         (n) * ED_SETTINGS_YOFFSET)
 
+#define ED_LEVEL_SETTINGS_TABS_XPOS(n) (ED_LEVEL_SETTINGS_XPOS(0) +    \
+                                       (n) * ED_SETTINGS_TAB_XOFFSET)
+#define ED_LEVEL_SETTINGS_TABS_YPOS(n) (ED_LEVEL_SETTINGS_YSTART -     \
+                                        3 * MINI_TILEY)
+
+#define ED_ELEMENT_SETTINGS_TABS_XPOS(n) (ED_ELEMENT_SETTINGS_XPOS(0) +        \
+                                        (n) * ED_SETTINGS_TAB_XOFFSET)
+#define ED_ELEMENT_SETTINGS_TABS_YPOS(n) (ED_ELEMENT_SETTINGS_YSTART - \
+                                        2 * MINI_TILEY)
+
 #define ED_SETTINGS1_YPOS              MINI_TILEY
 #define ED_SETTINGS2_XPOS              MINI_TILEX
 #define ED_SETTINGS2_YPOS              (ED_SETTINGS1_YPOS + 12 * TILEY - 2)
 #define GADGET_ID_LEVEL_TIMESCORE_DOWN (GADGET_ID_COUNTER_FIRST + 18)
 #define GADGET_ID_LEVEL_TIMESCORE_TEXT (GADGET_ID_COUNTER_FIRST + 19)
 #define GADGET_ID_LEVEL_TIMESCORE_UP   (GADGET_ID_COUNTER_FIRST + 20)
-#define GADGET_ID_ELEMENT_VALUE1_DOWN  (GADGET_ID_COUNTER_FIRST + 21)
-#define GADGET_ID_ELEMENT_VALUE1_TEXT  (GADGET_ID_COUNTER_FIRST + 22)
-#define GADGET_ID_ELEMENT_VALUE1_UP    (GADGET_ID_COUNTER_FIRST + 23)
-#define GADGET_ID_ELEMENT_VALUE2_DOWN  (GADGET_ID_COUNTER_FIRST + 24)
-#define GADGET_ID_ELEMENT_VALUE2_TEXT  (GADGET_ID_COUNTER_FIRST + 25)
-#define GADGET_ID_ELEMENT_VALUE2_UP    (GADGET_ID_COUNTER_FIRST + 26)
-#define GADGET_ID_ELEMENT_VALUE3_DOWN  (GADGET_ID_COUNTER_FIRST + 27)
-#define GADGET_ID_ELEMENT_VALUE3_TEXT  (GADGET_ID_COUNTER_FIRST + 28)
-#define GADGET_ID_ELEMENT_VALUE3_UP    (GADGET_ID_COUNTER_FIRST + 29)
-#define GADGET_ID_ELEMENT_VALUE4_DOWN  (GADGET_ID_COUNTER_FIRST + 30)
-#define GADGET_ID_ELEMENT_VALUE4_TEXT  (GADGET_ID_COUNTER_FIRST + 31)
-#define GADGET_ID_ELEMENT_VALUE4_UP    (GADGET_ID_COUNTER_FIRST + 32)
-#define GADGET_ID_YAMYAM_CONTENT_DOWN  (GADGET_ID_COUNTER_FIRST + 33)
-#define GADGET_ID_YAMYAM_CONTENT_TEXT  (GADGET_ID_COUNTER_FIRST + 34)
-#define GADGET_ID_YAMYAM_CONTENT_UP    (GADGET_ID_COUNTER_FIRST + 35)
-#define GADGET_ID_BALL_CONTENT_DOWN    (GADGET_ID_COUNTER_FIRST + 36)
-#define GADGET_ID_BALL_CONTENT_TEXT    (GADGET_ID_COUNTER_FIRST + 37)
-#define GADGET_ID_BALL_CONTENT_UP      (GADGET_ID_COUNTER_FIRST + 38)
-#define GADGET_ID_ANDROID_CONTENT_DOWN (GADGET_ID_COUNTER_FIRST + 39)
-#define GADGET_ID_ANDROID_CONTENT_TEXT (GADGET_ID_COUNTER_FIRST + 40)
-#define GADGET_ID_ANDROID_CONTENT_UP   (GADGET_ID_COUNTER_FIRST + 41)
-#define GADGET_ID_ENVELOPE_XSIZE_DOWN  (GADGET_ID_COUNTER_FIRST + 42)
-#define GADGET_ID_ENVELOPE_XSIZE_TEXT  (GADGET_ID_COUNTER_FIRST + 43)
-#define GADGET_ID_ENVELOPE_XSIZE_UP    (GADGET_ID_COUNTER_FIRST + 44)
-#define GADGET_ID_ENVELOPE_YSIZE_DOWN  (GADGET_ID_COUNTER_FIRST + 45)
-#define GADGET_ID_ENVELOPE_YSIZE_TEXT  (GADGET_ID_COUNTER_FIRST + 46)
-#define GADGET_ID_ENVELOPE_YSIZE_UP    (GADGET_ID_COUNTER_FIRST + 47)
-#define GADGET_ID_CUSTOM_SCORE_DOWN    (GADGET_ID_COUNTER_FIRST + 48)
-#define GADGET_ID_CUSTOM_SCORE_TEXT    (GADGET_ID_COUNTER_FIRST + 49)
-#define GADGET_ID_CUSTOM_SCORE_UP      (GADGET_ID_COUNTER_FIRST + 50)
-#define GADGET_ID_CUSTOM_GEMCOUNT_DOWN (GADGET_ID_COUNTER_FIRST + 51)
-#define GADGET_ID_CUSTOM_GEMCOUNT_TEXT (GADGET_ID_COUNTER_FIRST + 52)
-#define GADGET_ID_CUSTOM_GEMCOUNT_UP   (GADGET_ID_COUNTER_FIRST + 53)
-#define GADGET_ID_CUSTOM_VALUE_FIX_DOWN        (GADGET_ID_COUNTER_FIRST + 54)
-#define GADGET_ID_CUSTOM_VALUE_FIX_TEXT        (GADGET_ID_COUNTER_FIRST + 55)
-#define GADGET_ID_CUSTOM_VALUE_FIX_UP  (GADGET_ID_COUNTER_FIRST + 56)
-#define GADGET_ID_CUSTOM_VALUE_RND_DOWN        (GADGET_ID_COUNTER_FIRST + 57)
-#define GADGET_ID_CUSTOM_VALUE_RND_TEXT        (GADGET_ID_COUNTER_FIRST + 58)
-#define GADGET_ID_CUSTOM_VALUE_RND_UP  (GADGET_ID_COUNTER_FIRST + 59)
-#define GADGET_ID_PUSH_DELAY_FIX_DOWN  (GADGET_ID_COUNTER_FIRST + 60)
-#define GADGET_ID_PUSH_DELAY_FIX_TEXT  (GADGET_ID_COUNTER_FIRST + 61)
-#define GADGET_ID_PUSH_DELAY_FIX_UP    (GADGET_ID_COUNTER_FIRST + 62)
-#define GADGET_ID_PUSH_DELAY_RND_DOWN  (GADGET_ID_COUNTER_FIRST + 63)
-#define GADGET_ID_PUSH_DELAY_RND_TEXT  (GADGET_ID_COUNTER_FIRST + 64)
-#define GADGET_ID_PUSH_DELAY_RND_UP    (GADGET_ID_COUNTER_FIRST + 65)
-#define GADGET_ID_DROP_DELAY_FIX_DOWN  (GADGET_ID_COUNTER_FIRST + 66)
-#define GADGET_ID_DROP_DELAY_FIX_TEXT  (GADGET_ID_COUNTER_FIRST + 67)
-#define GADGET_ID_DROP_DELAY_FIX_UP    (GADGET_ID_COUNTER_FIRST + 68)
-#define GADGET_ID_DROP_DELAY_RND_DOWN  (GADGET_ID_COUNTER_FIRST + 69)
-#define GADGET_ID_DROP_DELAY_RND_TEXT  (GADGET_ID_COUNTER_FIRST + 70)
-#define GADGET_ID_DROP_DELAY_RND_UP    (GADGET_ID_COUNTER_FIRST + 71)
-#define GADGET_ID_MOVE_DELAY_FIX_DOWN  (GADGET_ID_COUNTER_FIRST + 72)
-#define GADGET_ID_MOVE_DELAY_FIX_TEXT  (GADGET_ID_COUNTER_FIRST + 73)
-#define GADGET_ID_MOVE_DELAY_FIX_UP    (GADGET_ID_COUNTER_FIRST + 74)
-#define GADGET_ID_MOVE_DELAY_RND_DOWN  (GADGET_ID_COUNTER_FIRST + 75)
-#define GADGET_ID_MOVE_DELAY_RND_TEXT  (GADGET_ID_COUNTER_FIRST + 76)
-#define GADGET_ID_MOVE_DELAY_RND_UP    (GADGET_ID_COUNTER_FIRST + 77)
-#define GADGET_ID_EXPLOSION_DELAY_DOWN (GADGET_ID_COUNTER_FIRST + 78)
-#define GADGET_ID_EXPLOSION_DELAY_TEXT (GADGET_ID_COUNTER_FIRST + 79)
-#define GADGET_ID_EXPLOSION_DELAY_UP   (GADGET_ID_COUNTER_FIRST + 80)
-#define GADGET_ID_IGNITION_DELAY_DOWN  (GADGET_ID_COUNTER_FIRST + 81)
-#define GADGET_ID_IGNITION_DELAY_TEXT  (GADGET_ID_COUNTER_FIRST + 82)
-#define GADGET_ID_IGNITION_DELAY_UP    (GADGET_ID_COUNTER_FIRST + 83)
-#define GADGET_ID_CHANGE_DELAY_FIX_DOWN        (GADGET_ID_COUNTER_FIRST + 84)
-#define GADGET_ID_CHANGE_DELAY_FIX_TEXT        (GADGET_ID_COUNTER_FIRST + 85)
-#define GADGET_ID_CHANGE_DELAY_FIX_UP  (GADGET_ID_COUNTER_FIRST + 86)
-#define GADGET_ID_CHANGE_DELAY_RND_DOWN        (GADGET_ID_COUNTER_FIRST + 87)
-#define GADGET_ID_CHANGE_DELAY_RND_TEXT        (GADGET_ID_COUNTER_FIRST + 88)
-#define GADGET_ID_CHANGE_DELAY_RND_UP  (GADGET_ID_COUNTER_FIRST + 89)
-#define GADGET_ID_CHANGE_CONT_RND_DOWN (GADGET_ID_COUNTER_FIRST + 90)
-#define GADGET_ID_CHANGE_CONT_RND_TEXT (GADGET_ID_COUNTER_FIRST + 91)
-#define GADGET_ID_CHANGE_CONT_RND_UP   (GADGET_ID_COUNTER_FIRST + 92)
-#define GADGET_ID_GROUP_CONTENT_DOWN   (GADGET_ID_COUNTER_FIRST + 93)
-#define GADGET_ID_GROUP_CONTENT_TEXT   (GADGET_ID_COUNTER_FIRST + 94)
-#define GADGET_ID_GROUP_CONTENT_UP     (GADGET_ID_COUNTER_FIRST + 95)
+#define GADGET_ID_LEVEL_RANDOM_SEED_DOWN (GADGET_ID_COUNTER_FIRST + 21)
+#define GADGET_ID_LEVEL_RANDOM_SEED_TEXT (GADGET_ID_COUNTER_FIRST + 22)
+#define GADGET_ID_LEVEL_RANDOM_SEED_UP (GADGET_ID_COUNTER_FIRST + 23)
+#define GADGET_ID_ELEMENT_VALUE1_DOWN  (GADGET_ID_COUNTER_FIRST + 24)
+#define GADGET_ID_ELEMENT_VALUE1_TEXT  (GADGET_ID_COUNTER_FIRST + 25)
+#define GADGET_ID_ELEMENT_VALUE1_UP    (GADGET_ID_COUNTER_FIRST + 26)
+#define GADGET_ID_ELEMENT_VALUE2_DOWN  (GADGET_ID_COUNTER_FIRST + 27)
+#define GADGET_ID_ELEMENT_VALUE2_TEXT  (GADGET_ID_COUNTER_FIRST + 28)
+#define GADGET_ID_ELEMENT_VALUE2_UP    (GADGET_ID_COUNTER_FIRST + 29)
+#define GADGET_ID_ELEMENT_VALUE3_DOWN  (GADGET_ID_COUNTER_FIRST + 30)
+#define GADGET_ID_ELEMENT_VALUE3_TEXT  (GADGET_ID_COUNTER_FIRST + 31)
+#define GADGET_ID_ELEMENT_VALUE3_UP    (GADGET_ID_COUNTER_FIRST + 32)
+#define GADGET_ID_ELEMENT_VALUE4_DOWN  (GADGET_ID_COUNTER_FIRST + 33)
+#define GADGET_ID_ELEMENT_VALUE4_TEXT  (GADGET_ID_COUNTER_FIRST + 34)
+#define GADGET_ID_ELEMENT_VALUE4_UP    (GADGET_ID_COUNTER_FIRST + 35)
+#define GADGET_ID_YAMYAM_CONTENT_DOWN  (GADGET_ID_COUNTER_FIRST + 36)
+#define GADGET_ID_YAMYAM_CONTENT_TEXT  (GADGET_ID_COUNTER_FIRST + 37)
+#define GADGET_ID_YAMYAM_CONTENT_UP    (GADGET_ID_COUNTER_FIRST + 38)
+#define GADGET_ID_BALL_CONTENT_DOWN    (GADGET_ID_COUNTER_FIRST + 39)
+#define GADGET_ID_BALL_CONTENT_TEXT    (GADGET_ID_COUNTER_FIRST + 40)
+#define GADGET_ID_BALL_CONTENT_UP      (GADGET_ID_COUNTER_FIRST + 41)
+#define GADGET_ID_ANDROID_CONTENT_DOWN (GADGET_ID_COUNTER_FIRST + 42)
+#define GADGET_ID_ANDROID_CONTENT_TEXT (GADGET_ID_COUNTER_FIRST + 43)
+#define GADGET_ID_ANDROID_CONTENT_UP   (GADGET_ID_COUNTER_FIRST + 44)
+#define GADGET_ID_ENVELOPE_XSIZE_DOWN  (GADGET_ID_COUNTER_FIRST + 45)
+#define GADGET_ID_ENVELOPE_XSIZE_TEXT  (GADGET_ID_COUNTER_FIRST + 46)
+#define GADGET_ID_ENVELOPE_XSIZE_UP    (GADGET_ID_COUNTER_FIRST + 47)
+#define GADGET_ID_ENVELOPE_YSIZE_DOWN  (GADGET_ID_COUNTER_FIRST + 48)
+#define GADGET_ID_ENVELOPE_YSIZE_TEXT  (GADGET_ID_COUNTER_FIRST + 49)
+#define GADGET_ID_ENVELOPE_YSIZE_UP    (GADGET_ID_COUNTER_FIRST + 50)
+#define GADGET_ID_INVENTORY_SIZE_DOWN  (GADGET_ID_COUNTER_FIRST + 51)
+#define GADGET_ID_INVENTORY_SIZE_TEXT  (GADGET_ID_COUNTER_FIRST + 52)
+#define GADGET_ID_INVENTORY_SIZE_UP    (GADGET_ID_COUNTER_FIRST + 53)
+#define GADGET_ID_CUSTOM_SCORE_DOWN    (GADGET_ID_COUNTER_FIRST + 54)
+#define GADGET_ID_CUSTOM_SCORE_TEXT    (GADGET_ID_COUNTER_FIRST + 55)
+#define GADGET_ID_CUSTOM_SCORE_UP      (GADGET_ID_COUNTER_FIRST + 56)
+#define GADGET_ID_CUSTOM_GEMCOUNT_DOWN (GADGET_ID_COUNTER_FIRST + 57)
+#define GADGET_ID_CUSTOM_GEMCOUNT_TEXT (GADGET_ID_COUNTER_FIRST + 58)
+#define GADGET_ID_CUSTOM_GEMCOUNT_UP   (GADGET_ID_COUNTER_FIRST + 59)
+#define GADGET_ID_CUSTOM_VALUE_FIX_DOWN        (GADGET_ID_COUNTER_FIRST + 60)
+#define GADGET_ID_CUSTOM_VALUE_FIX_TEXT        (GADGET_ID_COUNTER_FIRST + 61)
+#define GADGET_ID_CUSTOM_VALUE_FIX_UP  (GADGET_ID_COUNTER_FIRST + 62)
+#define GADGET_ID_CUSTOM_VALUE_RND_DOWN        (GADGET_ID_COUNTER_FIRST + 63)
+#define GADGET_ID_CUSTOM_VALUE_RND_TEXT        (GADGET_ID_COUNTER_FIRST + 64)
+#define GADGET_ID_CUSTOM_VALUE_RND_UP  (GADGET_ID_COUNTER_FIRST + 65)
+#define GADGET_ID_PUSH_DELAY_FIX_DOWN  (GADGET_ID_COUNTER_FIRST + 66)
+#define GADGET_ID_PUSH_DELAY_FIX_TEXT  (GADGET_ID_COUNTER_FIRST + 67)
+#define GADGET_ID_PUSH_DELAY_FIX_UP    (GADGET_ID_COUNTER_FIRST + 68)
+#define GADGET_ID_PUSH_DELAY_RND_DOWN  (GADGET_ID_COUNTER_FIRST + 69)
+#define GADGET_ID_PUSH_DELAY_RND_TEXT  (GADGET_ID_COUNTER_FIRST + 70)
+#define GADGET_ID_PUSH_DELAY_RND_UP    (GADGET_ID_COUNTER_FIRST + 71)
+#define GADGET_ID_DROP_DELAY_FIX_DOWN  (GADGET_ID_COUNTER_FIRST + 72)
+#define GADGET_ID_DROP_DELAY_FIX_TEXT  (GADGET_ID_COUNTER_FIRST + 73)
+#define GADGET_ID_DROP_DELAY_FIX_UP    (GADGET_ID_COUNTER_FIRST + 74)
+#define GADGET_ID_DROP_DELAY_RND_DOWN  (GADGET_ID_COUNTER_FIRST + 75)
+#define GADGET_ID_DROP_DELAY_RND_TEXT  (GADGET_ID_COUNTER_FIRST + 76)
+#define GADGET_ID_DROP_DELAY_RND_UP    (GADGET_ID_COUNTER_FIRST + 77)
+#define GADGET_ID_MOVE_DELAY_FIX_DOWN  (GADGET_ID_COUNTER_FIRST + 78)
+#define GADGET_ID_MOVE_DELAY_FIX_TEXT  (GADGET_ID_COUNTER_FIRST + 79)
+#define GADGET_ID_MOVE_DELAY_FIX_UP    (GADGET_ID_COUNTER_FIRST + 80)
+#define GADGET_ID_MOVE_DELAY_RND_DOWN  (GADGET_ID_COUNTER_FIRST + 81)
+#define GADGET_ID_MOVE_DELAY_RND_TEXT  (GADGET_ID_COUNTER_FIRST + 82)
+#define GADGET_ID_MOVE_DELAY_RND_UP    (GADGET_ID_COUNTER_FIRST + 83)
+#define GADGET_ID_EXPLOSION_DELAY_DOWN (GADGET_ID_COUNTER_FIRST + 84)
+#define GADGET_ID_EXPLOSION_DELAY_TEXT (GADGET_ID_COUNTER_FIRST + 85)
+#define GADGET_ID_EXPLOSION_DELAY_UP   (GADGET_ID_COUNTER_FIRST + 86)
+#define GADGET_ID_IGNITION_DELAY_DOWN  (GADGET_ID_COUNTER_FIRST + 87)
+#define GADGET_ID_IGNITION_DELAY_TEXT  (GADGET_ID_COUNTER_FIRST + 88)
+#define GADGET_ID_IGNITION_DELAY_UP    (GADGET_ID_COUNTER_FIRST + 89)
+#define GADGET_ID_CHANGE_DELAY_FIX_DOWN        (GADGET_ID_COUNTER_FIRST + 90)
+#define GADGET_ID_CHANGE_DELAY_FIX_TEXT        (GADGET_ID_COUNTER_FIRST + 91)
+#define GADGET_ID_CHANGE_DELAY_FIX_UP  (GADGET_ID_COUNTER_FIRST + 92)
+#define GADGET_ID_CHANGE_DELAY_RND_DOWN        (GADGET_ID_COUNTER_FIRST + 93)
+#define GADGET_ID_CHANGE_DELAY_RND_TEXT        (GADGET_ID_COUNTER_FIRST + 94)
+#define GADGET_ID_CHANGE_DELAY_RND_UP  (GADGET_ID_COUNTER_FIRST + 95)
+#define GADGET_ID_CHANGE_CONT_RND_DOWN (GADGET_ID_COUNTER_FIRST + 96)
+#define GADGET_ID_CHANGE_CONT_RND_TEXT (GADGET_ID_COUNTER_FIRST + 97)
+#define GADGET_ID_CHANGE_CONT_RND_UP   (GADGET_ID_COUNTER_FIRST + 98)
+#define GADGET_ID_GROUP_CONTENT_DOWN   (GADGET_ID_COUNTER_FIRST + 99)
+#define GADGET_ID_GROUP_CONTENT_TEXT   (GADGET_ID_COUNTER_FIRST + 100)
+#define GADGET_ID_GROUP_CONTENT_UP     (GADGET_ID_COUNTER_FIRST + 101)
 
 /* drawing area identifiers */
-#define GADGET_ID_DRAWING_AREA_FIRST   (GADGET_ID_COUNTER_FIRST + 96)
+#define GADGET_ID_DRAWING_AREA_FIRST   (GADGET_ID_COUNTER_FIRST + 102)
 
 #define GADGET_ID_DRAWING_LEVEL                (GADGET_ID_DRAWING_AREA_FIRST + 0)
 #define GADGET_ID_YAMYAM_CONTENT_0     (GADGET_ID_DRAWING_AREA_FIRST + 1)
 #define GADGET_ID_START_ELEMENT                (GADGET_ID_DRAWING_AREA_FIRST + 19)
 #define GADGET_ID_ARTWORK_ELEMENT      (GADGET_ID_DRAWING_AREA_FIRST + 20)
 #define GADGET_ID_EXPLOSION_ELEMENT    (GADGET_ID_DRAWING_AREA_FIRST + 21)
-#define GADGET_ID_CUSTOM_GRAPHIC       (GADGET_ID_DRAWING_AREA_FIRST + 22)
-#define GADGET_ID_CUSTOM_CONTENT       (GADGET_ID_DRAWING_AREA_FIRST + 23)
-#define GADGET_ID_CUSTOM_MOVE_ENTER    (GADGET_ID_DRAWING_AREA_FIRST + 24)
-#define GADGET_ID_CUSTOM_MOVE_LEAVE    (GADGET_ID_DRAWING_AREA_FIRST + 25)
-#define GADGET_ID_CUSTOM_CHANGE_TARGET (GADGET_ID_DRAWING_AREA_FIRST + 26)
-#define GADGET_ID_CUSTOM_CHANGE_CONTENT        (GADGET_ID_DRAWING_AREA_FIRST + 27)
-#define GADGET_ID_CUSTOM_CHANGE_TRIGGER        (GADGET_ID_DRAWING_AREA_FIRST + 28)
-#define GADGET_ID_GROUP_CONTENT                (GADGET_ID_DRAWING_AREA_FIRST + 29)
-#define GADGET_ID_RANDOM_BACKGROUND    (GADGET_ID_DRAWING_AREA_FIRST + 30)
+#define GADGET_ID_INVENTORY_CONTENT    (GADGET_ID_DRAWING_AREA_FIRST + 22)
+#define GADGET_ID_CUSTOM_GRAPHIC       (GADGET_ID_DRAWING_AREA_FIRST + 23)
+#define GADGET_ID_CUSTOM_CONTENT       (GADGET_ID_DRAWING_AREA_FIRST + 24)
+#define GADGET_ID_CUSTOM_MOVE_ENTER    (GADGET_ID_DRAWING_AREA_FIRST + 25)
+#define GADGET_ID_CUSTOM_MOVE_LEAVE    (GADGET_ID_DRAWING_AREA_FIRST + 26)
+#define GADGET_ID_CUSTOM_CHANGE_TARGET (GADGET_ID_DRAWING_AREA_FIRST + 27)
+#define GADGET_ID_CUSTOM_CHANGE_CONTENT        (GADGET_ID_DRAWING_AREA_FIRST + 28)
+#define GADGET_ID_CUSTOM_CHANGE_TRIGGER        (GADGET_ID_DRAWING_AREA_FIRST + 29)
+#define GADGET_ID_CUSTOM_CHANGE_ACTION (GADGET_ID_DRAWING_AREA_FIRST + 30)
+#define GADGET_ID_GROUP_CONTENT                (GADGET_ID_DRAWING_AREA_FIRST + 31)
+#define GADGET_ID_RANDOM_BACKGROUND    (GADGET_ID_DRAWING_AREA_FIRST + 32)
 
 /* text input identifiers */
-#define GADGET_ID_TEXT_INPUT_FIRST     (GADGET_ID_DRAWING_AREA_FIRST + 31)
+#define GADGET_ID_TEXT_INPUT_FIRST     (GADGET_ID_DRAWING_AREA_FIRST + 33)
 
 #define GADGET_ID_LEVEL_NAME           (GADGET_ID_TEXT_INPUT_FIRST + 0)
 #define GADGET_ID_LEVEL_AUTHOR         (GADGET_ID_TEXT_INPUT_FIRST + 1)
 /* textbutton identifiers */
 #define GADGET_ID_TEXTBUTTON_FIRST     (GADGET_ID_SELECTBOX_FIRST + 29)
 
-#define GADGET_ID_PROPERTIES_INFO      (GADGET_ID_TEXTBUTTON_FIRST + 0)
-#define GADGET_ID_PROPERTIES_CONFIG    (GADGET_ID_TEXTBUTTON_FIRST + 1)
-#define GADGET_ID_PROPERTIES_CONFIG_1  (GADGET_ID_TEXTBUTTON_FIRST + 2)
-#define GADGET_ID_PROPERTIES_CONFIG_2  (GADGET_ID_TEXTBUTTON_FIRST + 3)
-#define GADGET_ID_PROPERTIES_CHANGE    (GADGET_ID_TEXTBUTTON_FIRST + 4)
-#define GADGET_ID_SAVE_AS_TEMPLATE     (GADGET_ID_TEXTBUTTON_FIRST + 5)
-#define GADGET_ID_ADD_CHANGE_PAGE      (GADGET_ID_TEXTBUTTON_FIRST + 6)
-#define GADGET_ID_DEL_CHANGE_PAGE      (GADGET_ID_TEXTBUTTON_FIRST + 7)
+#define GADGET_ID_LEVELINFO_LEVEL      (GADGET_ID_TEXTBUTTON_FIRST + 0)
+#define GADGET_ID_LEVELINFO_EDITOR     (GADGET_ID_TEXTBUTTON_FIRST + 1)
+#define GADGET_ID_PROPERTIES_INFO      (GADGET_ID_TEXTBUTTON_FIRST + 2)
+#define GADGET_ID_PROPERTIES_CONFIG    (GADGET_ID_TEXTBUTTON_FIRST + 3)
+#define GADGET_ID_PROPERTIES_CONFIG_1  (GADGET_ID_TEXTBUTTON_FIRST + 4)
+#define GADGET_ID_PROPERTIES_CONFIG_2  (GADGET_ID_TEXTBUTTON_FIRST + 5)
+#define GADGET_ID_PROPERTIES_CHANGE    (GADGET_ID_TEXTBUTTON_FIRST + 6)
+#define GADGET_ID_SAVE_AS_TEMPLATE     (GADGET_ID_TEXTBUTTON_FIRST + 7)
+#define GADGET_ID_ADD_CHANGE_PAGE      (GADGET_ID_TEXTBUTTON_FIRST + 8)
+#define GADGET_ID_DEL_CHANGE_PAGE      (GADGET_ID_TEXTBUTTON_FIRST + 9)
 
 /* graphicbutton identifiers */
-#define GADGET_ID_GRAPHICBUTTON_FIRST  (GADGET_ID_TEXTBUTTON_FIRST + 8)
+#define GADGET_ID_GRAPHICBUTTON_FIRST  (GADGET_ID_TEXTBUTTON_FIRST + 10)
 
 #define GADGET_ID_PREV_CHANGE_PAGE     (GADGET_ID_GRAPHICBUTTON_FIRST + 0)
 #define GADGET_ID_NEXT_CHANGE_PAGE     (GADGET_ID_GRAPHICBUTTON_FIRST + 1)
 #define GADGET_ID_RANDOM_RESTRICTED    (GADGET_ID_CHECKBUTTON_FIRST + 2)
 #define GADGET_ID_STICK_ELEMENT                (GADGET_ID_CHECKBUTTON_FIRST + 3)
 #define GADGET_ID_EM_SLIPPERY_GEMS     (GADGET_ID_CHECKBUTTON_FIRST + 4)
-#define GADGET_ID_USE_SPRING_BUG       (GADGET_ID_CHECKBUTTON_FIRST + 5)
-#define GADGET_ID_USE_TIME_ORB_BUG     (GADGET_ID_CHECKBUTTON_FIRST + 6)
-#define GADGET_ID_RANDOM_BALL_CONTENT  (GADGET_ID_CHECKBUTTON_FIRST + 7)
-#define GADGET_ID_INITIAL_BALL_STATE   (GADGET_ID_CHECKBUTTON_FIRST + 8)
-#define GADGET_ID_GROW_INTO_DIGGABLE   (GADGET_ID_CHECKBUTTON_FIRST + 9)
-#define GADGET_ID_CONTINUOUS_SNAPPING  (GADGET_ID_CHECKBUTTON_FIRST + 10)
-#define GADGET_ID_BLOCK_SNAP_FIELD     (GADGET_ID_CHECKBUTTON_FIRST + 11)
-#define GADGET_ID_BLOCK_LAST_FIELD     (GADGET_ID_CHECKBUTTON_FIRST + 12)
-#define GADGET_ID_SP_BLOCK_LAST_FIELD  (GADGET_ID_CHECKBUTTON_FIRST + 13)
-#define GADGET_ID_INSTANT_RELOCATION   (GADGET_ID_CHECKBUTTON_FIRST + 14)
-#define GADGET_ID_SHIFTED_RELOCATION   (GADGET_ID_CHECKBUTTON_FIRST + 15)
-#define GADGET_ID_USE_START_ELEMENT    (GADGET_ID_CHECKBUTTON_FIRST + 16)
-#define GADGET_ID_USE_ARTWORK_ELEMENT  (GADGET_ID_CHECKBUTTON_FIRST + 17)
-#define GADGET_ID_USE_EXPLOSION_ELEMENT        (GADGET_ID_CHECKBUTTON_FIRST + 18)
-#define GADGET_ID_INITIAL_GRAVITY      (GADGET_ID_CHECKBUTTON_FIRST + 19)
-#define GADGET_ID_CAN_PASS_TO_WALKABLE (GADGET_ID_CHECKBUTTON_FIRST + 20)
-#define GADGET_ID_CAN_FALL_INTO_ACID   (GADGET_ID_CHECKBUTTON_FIRST + 21)
-#define GADGET_ID_CAN_MOVE_INTO_ACID   (GADGET_ID_CHECKBUTTON_FIRST + 22)
-#define GADGET_ID_DONT_COLLIDE_WITH    (GADGET_ID_CHECKBUTTON_FIRST + 23)
-#define GADGET_ID_ENVELOPE_AUTOWRAP    (GADGET_ID_CHECKBUTTON_FIRST + 24)
-#define GADGET_ID_ENVELOPE_CENTERED    (GADGET_ID_CHECKBUTTON_FIRST + 25)
-#define GADGET_ID_CUSTOM_INDESTRUCTIBLE        (GADGET_ID_CHECKBUTTON_FIRST + 26)
-#define GADGET_ID_CUSTOM_CAN_EXPLODE   (GADGET_ID_CHECKBUTTON_FIRST + 27)
-#define GADGET_ID_CUSTOM_EXPLODE_FIRE  (GADGET_ID_CHECKBUTTON_FIRST + 28)
-#define GADGET_ID_CUSTOM_EXPLODE_SMASH (GADGET_ID_CHECKBUTTON_FIRST + 29)
-#define GADGET_ID_CUSTOM_EXPLODE_IMPACT        (GADGET_ID_CHECKBUTTON_FIRST + 30)
-#define GADGET_ID_CUSTOM_WALK_TO_OBJECT        (GADGET_ID_CHECKBUTTON_FIRST + 31)
-#define GADGET_ID_CUSTOM_DEADLY                (GADGET_ID_CHECKBUTTON_FIRST + 32)
-#define GADGET_ID_CUSTOM_CAN_MOVE      (GADGET_ID_CHECKBUTTON_FIRST + 33)
-#define GADGET_ID_CUSTOM_CAN_FALL      (GADGET_ID_CHECKBUTTON_FIRST + 34)
-#define GADGET_ID_CUSTOM_CAN_SMASH     (GADGET_ID_CHECKBUTTON_FIRST + 35)
-#define GADGET_ID_CUSTOM_SLIPPERY      (GADGET_ID_CHECKBUTTON_FIRST + 36)
-#define GADGET_ID_CUSTOM_ACCESSIBLE    (GADGET_ID_CHECKBUTTON_FIRST + 37)
-#define GADGET_ID_CUSTOM_GRAV_REACHABLE        (GADGET_ID_CHECKBUTTON_FIRST + 38)
-#define GADGET_ID_CUSTOM_USE_LAST_VALUE        (GADGET_ID_CHECKBUTTON_FIRST + 39)
-#define GADGET_ID_CUSTOM_USE_GRAPHIC   (GADGET_ID_CHECKBUTTON_FIRST + 40)
-#define GADGET_ID_CUSTOM_USE_TEMPLATE  (GADGET_ID_CHECKBUTTON_FIRST + 41)
-#define GADGET_ID_CUSTOM_CAN_CHANGE    (GADGET_ID_CHECKBUTTON_FIRST + 42)
-#define GADGET_ID_CHANGE_USE_CONTENT   (GADGET_ID_CHECKBUTTON_FIRST + 43)
-#define GADGET_ID_CHANGE_USE_EXPLOSION (GADGET_ID_CHECKBUTTON_FIRST + 44)
-#define GADGET_ID_CHANGE_ONLY_COMPLETE (GADGET_ID_CHECKBUTTON_FIRST + 45)
-#define GADGET_ID_CHANGE_USE_RANDOM    (GADGET_ID_CHECKBUTTON_FIRST + 46)
-#define GADGET_ID_CHANGE_HAS_ACTION    (GADGET_ID_CHECKBUTTON_FIRST + 47)
-#define GADGET_ID_CHANGE_DELAY         (GADGET_ID_CHECKBUTTON_FIRST + 48)
-#define GADGET_ID_CHANGE_BY_DIRECT_ACT (GADGET_ID_CHECKBUTTON_FIRST + 49)
-#define GADGET_ID_CHANGE_BY_OTHER_ACT  (GADGET_ID_CHECKBUTTON_FIRST + 50)
+#define GADGET_ID_EM_EXPLODES_BY_FIRE  (GADGET_ID_CHECKBUTTON_FIRST + 5)
+#define GADGET_ID_USE_SPRING_BUG       (GADGET_ID_CHECKBUTTON_FIRST + 6)
+#define GADGET_ID_USE_TIME_ORB_BUG     (GADGET_ID_CHECKBUTTON_FIRST + 7)
+#define GADGET_ID_RANDOM_BALL_CONTENT  (GADGET_ID_CHECKBUTTON_FIRST + 8)
+#define GADGET_ID_INITIAL_BALL_STATE   (GADGET_ID_CHECKBUTTON_FIRST + 9)
+#define GADGET_ID_GROW_INTO_DIGGABLE   (GADGET_ID_CHECKBUTTON_FIRST + 10)
+#define GADGET_ID_CONTINUOUS_SNAPPING  (GADGET_ID_CHECKBUTTON_FIRST + 11)
+#define GADGET_ID_BLOCK_SNAP_FIELD     (GADGET_ID_CHECKBUTTON_FIRST + 12)
+#define GADGET_ID_BLOCK_LAST_FIELD     (GADGET_ID_CHECKBUTTON_FIRST + 13)
+#define GADGET_ID_SP_BLOCK_LAST_FIELD  (GADGET_ID_CHECKBUTTON_FIRST + 14)
+#define GADGET_ID_INSTANT_RELOCATION   (GADGET_ID_CHECKBUTTON_FIRST + 15)
+#define GADGET_ID_SHIFTED_RELOCATION   (GADGET_ID_CHECKBUTTON_FIRST + 16)
+#define GADGET_ID_USE_START_ELEMENT    (GADGET_ID_CHECKBUTTON_FIRST + 17)
+#define GADGET_ID_USE_ARTWORK_ELEMENT  (GADGET_ID_CHECKBUTTON_FIRST + 18)
+#define GADGET_ID_USE_EXPLOSION_ELEMENT        (GADGET_ID_CHECKBUTTON_FIRST + 19)
+#define GADGET_ID_INITIAL_GRAVITY      (GADGET_ID_CHECKBUTTON_FIRST + 20)
+#define GADGET_ID_USE_INITIAL_INVENTORY        (GADGET_ID_CHECKBUTTON_FIRST + 21)
+#define GADGET_ID_CAN_PASS_TO_WALKABLE (GADGET_ID_CHECKBUTTON_FIRST + 22)
+#define GADGET_ID_CAN_FALL_INTO_ACID   (GADGET_ID_CHECKBUTTON_FIRST + 23)
+#define GADGET_ID_CAN_MOVE_INTO_ACID   (GADGET_ID_CHECKBUTTON_FIRST + 24)
+#define GADGET_ID_DONT_COLLIDE_WITH    (GADGET_ID_CHECKBUTTON_FIRST + 25)
+#define GADGET_ID_ENVELOPE_AUTOWRAP    (GADGET_ID_CHECKBUTTON_FIRST + 26)
+#define GADGET_ID_ENVELOPE_CENTERED    (GADGET_ID_CHECKBUTTON_FIRST + 27)
+#define GADGET_ID_CUSTOM_INDESTRUCTIBLE        (GADGET_ID_CHECKBUTTON_FIRST + 28)
+#define GADGET_ID_CUSTOM_CAN_EXPLODE   (GADGET_ID_CHECKBUTTON_FIRST + 29)
+#define GADGET_ID_CUSTOM_EXPLODE_FIRE  (GADGET_ID_CHECKBUTTON_FIRST + 30)
+#define GADGET_ID_CUSTOM_EXPLODE_SMASH (GADGET_ID_CHECKBUTTON_FIRST + 31)
+#define GADGET_ID_CUSTOM_EXPLODE_IMPACT        (GADGET_ID_CHECKBUTTON_FIRST + 32)
+#define GADGET_ID_CUSTOM_WALK_TO_OBJECT        (GADGET_ID_CHECKBUTTON_FIRST + 33)
+#define GADGET_ID_CUSTOM_DEADLY                (GADGET_ID_CHECKBUTTON_FIRST + 34)
+#define GADGET_ID_CUSTOM_CAN_MOVE      (GADGET_ID_CHECKBUTTON_FIRST + 35)
+#define GADGET_ID_CUSTOM_CAN_FALL      (GADGET_ID_CHECKBUTTON_FIRST + 36)
+#define GADGET_ID_CUSTOM_CAN_SMASH     (GADGET_ID_CHECKBUTTON_FIRST + 37)
+#define GADGET_ID_CUSTOM_SLIPPERY      (GADGET_ID_CHECKBUTTON_FIRST + 38)
+#define GADGET_ID_CUSTOM_ACCESSIBLE    (GADGET_ID_CHECKBUTTON_FIRST + 39)
+#define GADGET_ID_CUSTOM_GRAV_REACHABLE        (GADGET_ID_CHECKBUTTON_FIRST + 40)
+#define GADGET_ID_CUSTOM_USE_LAST_VALUE        (GADGET_ID_CHECKBUTTON_FIRST + 41)
+#define GADGET_ID_CUSTOM_USE_GRAPHIC   (GADGET_ID_CHECKBUTTON_FIRST + 42)
+#define GADGET_ID_CUSTOM_USE_TEMPLATE  (GADGET_ID_CHECKBUTTON_FIRST + 43)
+#define GADGET_ID_CUSTOM_CAN_CHANGE    (GADGET_ID_CHECKBUTTON_FIRST + 44)
+#define GADGET_ID_CHANGE_USE_CONTENT   (GADGET_ID_CHECKBUTTON_FIRST + 45)
+#define GADGET_ID_CHANGE_USE_EXPLOSION (GADGET_ID_CHECKBUTTON_FIRST + 46)
+#define GADGET_ID_CHANGE_ONLY_COMPLETE (GADGET_ID_CHECKBUTTON_FIRST + 47)
+#define GADGET_ID_CHANGE_USE_RANDOM    (GADGET_ID_CHECKBUTTON_FIRST + 48)
+#define GADGET_ID_CHANGE_HAS_ACTION    (GADGET_ID_CHECKBUTTON_FIRST + 49)
+#define GADGET_ID_CHANGE_DELAY         (GADGET_ID_CHECKBUTTON_FIRST + 50)
+#define GADGET_ID_CHANGE_BY_DIRECT_ACT (GADGET_ID_CHECKBUTTON_FIRST + 51)
+#define GADGET_ID_CHANGE_BY_OTHER_ACT  (GADGET_ID_CHECKBUTTON_FIRST + 52)
 
 /* gadgets for buttons in element list */
-#define GADGET_ID_ELEMENTLIST_FIRST    (GADGET_ID_CHECKBUTTON_FIRST + 51)
+#define GADGET_ID_ELEMENTLIST_FIRST    (GADGET_ID_CHECKBUTTON_FIRST + 53)
 #define GADGET_ID_ELEMENTLIST_LAST     (GADGET_ID_ELEMENTLIST_FIRST +  \
                                        ED_NUM_ELEMENTLIST_BUTTONS - 1)
 
 #define ED_COUNTER_ID_LEVEL_GEMSLIMIT  3
 #define ED_COUNTER_ID_LEVEL_TIMELIMIT  4
 #define ED_COUNTER_ID_LEVEL_TIMESCORE  5
-#define ED_COUNTER_ID_LEVEL_RANDOM     6
-#define ED_COUNTER_ID_ELEMENT_VALUE1   7
-#define ED_COUNTER_ID_ELEMENT_VALUE2   8
-#define ED_COUNTER_ID_ELEMENT_VALUE3   9
-#define ED_COUNTER_ID_ELEMENT_VALUE4   10
-#define ED_COUNTER_ID_YAMYAM_CONTENT   11
-#define ED_COUNTER_ID_BALL_CONTENT     12
-#define ED_COUNTER_ID_ANDROID_CONTENT  13
-#define ED_COUNTER_ID_ENVELOPE_XSIZE   14
-#define ED_COUNTER_ID_ENVELOPE_YSIZE   15
-#define ED_COUNTER_ID_CUSTOM_SCORE     16
-#define ED_COUNTER_ID_CUSTOM_GEMCOUNT  17
-#define ED_COUNTER_ID_CUSTOM_VALUE_FIX 18
-#define ED_COUNTER_ID_CUSTOM_VALUE_RND 19
-#define ED_COUNTER_ID_PUSH_DELAY_FIX   20
-#define ED_COUNTER_ID_PUSH_DELAY_RND   21
-#define ED_COUNTER_ID_DROP_DELAY_FIX   22
-#define ED_COUNTER_ID_DROP_DELAY_RND   23
-#define ED_COUNTER_ID_MOVE_DELAY_FIX   24
-#define ED_COUNTER_ID_MOVE_DELAY_RND   25
-#define ED_COUNTER_ID_EXPLOSION_DELAY  26
-#define ED_COUNTER_ID_IGNITION_DELAY   27
-#define ED_COUNTER_ID_GROUP_CONTENT    28
-#define ED_COUNTER_ID_CHANGE_DELAY_FIX 29
-#define ED_COUNTER_ID_CHANGE_DELAY_RND 30
-#define ED_COUNTER_ID_CHANGE_CONT_RND  31
-
-#define ED_NUM_COUNTERBUTTONS          32
+#define ED_COUNTER_ID_LEVEL_RANDOM_SEED        6
+#define ED_COUNTER_ID_LEVEL_RANDOM     7
+#define ED_COUNTER_ID_ELEMENT_VALUE1   8
+#define ED_COUNTER_ID_ELEMENT_VALUE2   9
+#define ED_COUNTER_ID_ELEMENT_VALUE3   10
+#define ED_COUNTER_ID_ELEMENT_VALUE4   11
+#define ED_COUNTER_ID_YAMYAM_CONTENT   12
+#define ED_COUNTER_ID_BALL_CONTENT     13
+#define ED_COUNTER_ID_ANDROID_CONTENT  14
+#define ED_COUNTER_ID_ENVELOPE_XSIZE   15
+#define ED_COUNTER_ID_ENVELOPE_YSIZE   16
+#define ED_COUNTER_ID_INVENTORY_SIZE   17
+#define ED_COUNTER_ID_CUSTOM_SCORE     18
+#define ED_COUNTER_ID_CUSTOM_GEMCOUNT  19
+#define ED_COUNTER_ID_CUSTOM_VALUE_FIX 20
+#define ED_COUNTER_ID_CUSTOM_VALUE_RND 21
+#define ED_COUNTER_ID_PUSH_DELAY_FIX   22
+#define ED_COUNTER_ID_PUSH_DELAY_RND   23
+#define ED_COUNTER_ID_DROP_DELAY_FIX   24
+#define ED_COUNTER_ID_DROP_DELAY_RND   25
+#define ED_COUNTER_ID_MOVE_DELAY_FIX   26
+#define ED_COUNTER_ID_MOVE_DELAY_RND   27
+#define ED_COUNTER_ID_EXPLOSION_DELAY  28
+#define ED_COUNTER_ID_IGNITION_DELAY   29
+#define ED_COUNTER_ID_GROUP_CONTENT    30
+#define ED_COUNTER_ID_CHANGE_DELAY_FIX 31
+#define ED_COUNTER_ID_CHANGE_DELAY_RND 32
+#define ED_COUNTER_ID_CHANGE_CONT_RND  33
+
+#define ED_NUM_COUNTERBUTTONS          34
 
 #define ED_COUNTER_ID_LEVEL_FIRST      ED_COUNTER_ID_LEVEL_XSIZE
-#define ED_COUNTER_ID_LEVEL_LAST       ED_COUNTER_ID_LEVEL_RANDOM
+#define ED_COUNTER_ID_LEVEL_LAST       ED_COUNTER_ID_LEVEL_RANDOM_SEED
+#define ED_COUNTER_ID_EDITOR_FIRST     ED_COUNTER_ID_LEVEL_RANDOM
+#define ED_COUNTER_ID_EDITOR_LAST      ED_COUNTER_ID_LEVEL_RANDOM
 
 #define ED_COUNTER_ID_CUSTOM1_FIRST    ED_COUNTER_ID_CUSTOM_SCORE
 #define ED_COUNTER_ID_CUSTOM1_LAST     ED_COUNTER_ID_DROP_DELAY_RND
 #define ED_SELECTBOX_ID_CHANGE_LAST    ED_SELECTBOX_ID_SELECT_CHANGE_PAGE
 
 /* values for textbutton gadgets */
-#define ED_TEXTBUTTON_ID_PROPERTIES_INFO       0
-#define ED_TEXTBUTTON_ID_PROPERTIES_CONFIG     1
-#define ED_TEXTBUTTON_ID_PROPERTIES_CONFIG_1   2
-#define ED_TEXTBUTTON_ID_PROPERTIES_CONFIG_2   3
-#define ED_TEXTBUTTON_ID_PROPERTIES_CHANGE     4
-#define ED_TEXTBUTTON_ID_SAVE_AS_TEMPLATE      5
-#define ED_TEXTBUTTON_ID_ADD_CHANGE_PAGE       6
-#define ED_TEXTBUTTON_ID_DEL_CHANGE_PAGE       7
-
-#define ED_NUM_TEXTBUTTONS                     8
+#define ED_TEXTBUTTON_ID_LEVELINFO_LEVEL       0
+#define ED_TEXTBUTTON_ID_LEVELINFO_EDITOR      1
+#define ED_TEXTBUTTON_ID_PROPERTIES_INFO       2
+#define ED_TEXTBUTTON_ID_PROPERTIES_CONFIG     3
+#define ED_TEXTBUTTON_ID_PROPERTIES_CONFIG_1   4
+#define ED_TEXTBUTTON_ID_PROPERTIES_CONFIG_2   5
+#define ED_TEXTBUTTON_ID_PROPERTIES_CHANGE     6
+#define ED_TEXTBUTTON_ID_SAVE_AS_TEMPLATE      7
+#define ED_TEXTBUTTON_ID_ADD_CHANGE_PAGE       8
+#define ED_TEXTBUTTON_ID_DEL_CHANGE_PAGE       9
+
+#define ED_NUM_TEXTBUTTONS                     10
+
+#define ED_TEXTBUTTON_ID_LEVELINFO_FIRST ED_TEXTBUTTON_ID_LEVELINFO_LEVEL
+#define ED_TEXTBUTTON_ID_LEVELINFO_LAST  ED_TEXTBUTTON_ID_LEVELINFO_EDITOR
 
 #define ED_TEXTBUTTON_ID_PROPERTIES_FIRST ED_TEXTBUTTON_ID_PROPERTIES_INFO
 #define ED_TEXTBUTTON_ID_PROPERTIES_LAST  ED_TEXTBUTTON_ID_PROPERTIES_CHANGE
 #define ED_CHECKBUTTON_ID_RANDOM_RESTRICTED    0
 #define ED_CHECKBUTTON_ID_STICK_ELEMENT                1
 #define ED_CHECKBUTTON_ID_EM_SLIPPERY_GEMS     2
-#define ED_CHECKBUTTON_ID_USE_SPRING_BUG       3
-#define ED_CHECKBUTTON_ID_USE_TIME_ORB_BUG     4
-#define ED_CHECKBUTTON_ID_RANDOM_BALL_CONTENT  5
-#define ED_CHECKBUTTON_ID_INITIAL_BALL_STATE   6
-#define ED_CHECKBUTTON_ID_GROW_INTO_DIGGABLE   7
-#define ED_CHECKBUTTON_ID_CONTINUOUS_SNAPPING  8
-#define ED_CHECKBUTTON_ID_BLOCK_SNAP_FIELD     9
-#define ED_CHECKBUTTON_ID_BLOCK_LAST_FIELD     10
-#define ED_CHECKBUTTON_ID_SP_BLOCK_LAST_FIELD  11
-#define ED_CHECKBUTTON_ID_INSTANT_RELOCATION   12
-#define ED_CHECKBUTTON_ID_SHIFTED_RELOCATION   13
-#define ED_CHECKBUTTON_ID_USE_START_ELEMENT    14
-#define ED_CHECKBUTTON_ID_USE_ARTWORK_ELEMENT  15
-#define ED_CHECKBUTTON_ID_USE_EXPLOSION_ELEMENT        16
-#define ED_CHECKBUTTON_ID_INITIAL_GRAVITY      17
-#define ED_CHECKBUTTON_ID_CAN_PASS_TO_WALKABLE 18
-#define ED_CHECKBUTTON_ID_CAN_FALL_INTO_ACID   19
-#define ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID   20
-#define ED_CHECKBUTTON_ID_DONT_COLLIDE_WITH    21
-#define ED_CHECKBUTTON_ID_ENVELOPE_AUTOWRAP    22
-#define ED_CHECKBUTTON_ID_ENVELOPE_CENTERED    23
-#define ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC   24
-#define ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE  25
-#define ED_CHECKBUTTON_ID_CUSTOM_ACCESSIBLE    26
-#define ED_CHECKBUTTON_ID_CUSTOM_GRAV_REACHABLE        27
-#define ED_CHECKBUTTON_ID_CUSTOM_USE_LAST_VALUE        28
-#define ED_CHECKBUTTON_ID_CUSTOM_WALK_TO_OBJECT        29
-#define ED_CHECKBUTTON_ID_CUSTOM_INDESTRUCTIBLE        30
-#define ED_CHECKBUTTON_ID_CUSTOM_CAN_MOVE      31
-#define ED_CHECKBUTTON_ID_CUSTOM_CAN_FALL      32
-#define ED_CHECKBUTTON_ID_CUSTOM_CAN_SMASH     33
-#define ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY      34
-#define ED_CHECKBUTTON_ID_CUSTOM_DEADLY                35
-#define ED_CHECKBUTTON_ID_CUSTOM_CAN_EXPLODE   36
-#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_FIRE  37
-#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_SMASH 38
-#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_IMPACT        39
-#define ED_CHECKBUTTON_ID_CUSTOM_CAN_CHANGE    40
-#define ED_CHECKBUTTON_ID_CHANGE_DELAY         41
-#define ED_CHECKBUTTON_ID_CHANGE_BY_DIRECT_ACT 42
-#define ED_CHECKBUTTON_ID_CHANGE_BY_OTHER_ACT  43
-#define ED_CHECKBUTTON_ID_CHANGE_USE_EXPLOSION 44
-#define ED_CHECKBUTTON_ID_CHANGE_USE_CONTENT   45
-#define ED_CHECKBUTTON_ID_CHANGE_ONLY_COMPLETE 46
-#define ED_CHECKBUTTON_ID_CHANGE_USE_RANDOM    47
-#define ED_CHECKBUTTON_ID_CHANGE_HAS_ACTION    48
-
-#define ED_NUM_CHECKBUTTONS                    49
-
-#define ED_CHECKBUTTON_ID_LEVEL_FIRST  ED_CHECKBUTTON_ID_RANDOM_RESTRICTED
-#define ED_CHECKBUTTON_ID_LEVEL_LAST   ED_CHECKBUTTON_ID_RANDOM_RESTRICTED
+#define ED_CHECKBUTTON_ID_EM_EXPLODES_BY_FIRE  3
+#define ED_CHECKBUTTON_ID_USE_SPRING_BUG       4
+#define ED_CHECKBUTTON_ID_USE_TIME_ORB_BUG     5
+#define ED_CHECKBUTTON_ID_RANDOM_BALL_CONTENT  6
+#define ED_CHECKBUTTON_ID_INITIAL_BALL_STATE   7
+#define ED_CHECKBUTTON_ID_GROW_INTO_DIGGABLE   8
+#define ED_CHECKBUTTON_ID_CONTINUOUS_SNAPPING  9
+#define ED_CHECKBUTTON_ID_BLOCK_SNAP_FIELD     10
+#define ED_CHECKBUTTON_ID_BLOCK_LAST_FIELD     11
+#define ED_CHECKBUTTON_ID_SP_BLOCK_LAST_FIELD  12
+#define ED_CHECKBUTTON_ID_INSTANT_RELOCATION   13
+#define ED_CHECKBUTTON_ID_SHIFTED_RELOCATION   14
+#define ED_CHECKBUTTON_ID_USE_START_ELEMENT    15
+#define ED_CHECKBUTTON_ID_USE_ARTWORK_ELEMENT  16
+#define ED_CHECKBUTTON_ID_USE_EXPLOSION_ELEMENT        17
+#define ED_CHECKBUTTON_ID_INITIAL_GRAVITY      18
+#define ED_CHECKBUTTON_ID_USE_INITIAL_INVENTORY        19
+#define ED_CHECKBUTTON_ID_CAN_PASS_TO_WALKABLE 20
+#define ED_CHECKBUTTON_ID_CAN_FALL_INTO_ACID   21
+#define ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID   22
+#define ED_CHECKBUTTON_ID_DONT_COLLIDE_WITH    23
+#define ED_CHECKBUTTON_ID_ENVELOPE_AUTOWRAP    24
+#define ED_CHECKBUTTON_ID_ENVELOPE_CENTERED    25
+#define ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC   26
+#define ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE  27
+#define ED_CHECKBUTTON_ID_CUSTOM_ACCESSIBLE    28
+#define ED_CHECKBUTTON_ID_CUSTOM_GRAV_REACHABLE        29
+#define ED_CHECKBUTTON_ID_CUSTOM_USE_LAST_VALUE        30
+#define ED_CHECKBUTTON_ID_CUSTOM_WALK_TO_OBJECT        31
+#define ED_CHECKBUTTON_ID_CUSTOM_INDESTRUCTIBLE        32
+#define ED_CHECKBUTTON_ID_CUSTOM_CAN_MOVE      33
+#define ED_CHECKBUTTON_ID_CUSTOM_CAN_FALL      34
+#define ED_CHECKBUTTON_ID_CUSTOM_CAN_SMASH     35
+#define ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY      36
+#define ED_CHECKBUTTON_ID_CUSTOM_DEADLY                37
+#define ED_CHECKBUTTON_ID_CUSTOM_CAN_EXPLODE   38
+#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_FIRE  39
+#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_SMASH 40
+#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_IMPACT        41
+#define ED_CHECKBUTTON_ID_CUSTOM_CAN_CHANGE    42
+#define ED_CHECKBUTTON_ID_CHANGE_DELAY         43
+#define ED_CHECKBUTTON_ID_CHANGE_BY_DIRECT_ACT 44
+#define ED_CHECKBUTTON_ID_CHANGE_BY_OTHER_ACT  45
+#define ED_CHECKBUTTON_ID_CHANGE_USE_EXPLOSION 46
+#define ED_CHECKBUTTON_ID_CHANGE_USE_CONTENT   47
+#define ED_CHECKBUTTON_ID_CHANGE_ONLY_COMPLETE 48
+#define ED_CHECKBUTTON_ID_CHANGE_USE_RANDOM    49
+#define ED_CHECKBUTTON_ID_CHANGE_HAS_ACTION    50
+
+#define ED_NUM_CHECKBUTTONS                    51
+
+#define ED_CHECKBUTTON_ID_EDITOR_FIRST ED_CHECKBUTTON_ID_RANDOM_RESTRICTED
+#define ED_CHECKBUTTON_ID_EDITOR_LAST  ED_CHECKBUTTON_ID_RANDOM_RESTRICTED
 
 #define ED_CHECKBUTTON_ID_CUSTOM1_FIRST        ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC
 #define ED_CHECKBUTTON_ID_CUSTOM1_LAST ED_CHECKBUTTON_ID_CUSTOM_INDESTRUCTIBLE
 
 #define ED_NUM_RADIOBUTTONS            2
 
-#define ED_RADIOBUTTON_ID_LEVEL_FIRST  ED_RADIOBUTTON_ID_PERCENTAGE
-#define ED_RADIOBUTTON_ID_LEVEL_LAST   ED_RADIOBUTTON_ID_QUANTITY
+#define ED_RADIOBUTTON_ID_EDITOR_FIRST ED_RADIOBUTTON_ID_PERCENTAGE
+#define ED_RADIOBUTTON_ID_EDITOR_LAST  ED_RADIOBUTTON_ID_QUANTITY
 
 /* values for drawing area gadgets */
 #define ED_DRAWING_ID_DRAWING_LEVEL            0
 #define ED_DRAWING_ID_START_ELEMENT            19
 #define ED_DRAWING_ID_ARTWORK_ELEMENT          20
 #define ED_DRAWING_ID_EXPLOSION_ELEMENT                21
-#define ED_DRAWING_ID_CUSTOM_GRAPHIC           22
-#define ED_DRAWING_ID_CUSTOM_CONTENT           23
-#define ED_DRAWING_ID_CUSTOM_MOVE_ENTER                24
-#define ED_DRAWING_ID_CUSTOM_MOVE_LEAVE                25
-#define ED_DRAWING_ID_CUSTOM_CHANGE_TARGET     26
-#define ED_DRAWING_ID_CUSTOM_CHANGE_CONTENT    27
-#define ED_DRAWING_ID_CUSTOM_CHANGE_TRIGGER    28
-#define ED_DRAWING_ID_GROUP_CONTENT            29
-#define ED_DRAWING_ID_RANDOM_BACKGROUND                30
+#define ED_DRAWING_ID_INVENTORY_CONTENT                22
+#define ED_DRAWING_ID_CUSTOM_GRAPHIC           23
+#define ED_DRAWING_ID_CUSTOM_CONTENT           24
+#define ED_DRAWING_ID_CUSTOM_MOVE_ENTER                25
+#define ED_DRAWING_ID_CUSTOM_MOVE_LEAVE                26
+#define ED_DRAWING_ID_CUSTOM_CHANGE_TARGET     27
+#define ED_DRAWING_ID_CUSTOM_CHANGE_CONTENT    28
+#define ED_DRAWING_ID_CUSTOM_CHANGE_TRIGGER    29
+#define ED_DRAWING_ID_CUSTOM_CHANGE_ACTION     30
+#define ED_DRAWING_ID_GROUP_CONTENT            31
+#define ED_DRAWING_ID_RANDOM_BACKGROUND                32
 
-#define ED_NUM_DRAWING_AREAS                   31
+#define ED_NUM_DRAWING_AREAS                   33
 
 
 /*
 #define ED_MODE_INFO                   1
 #define ED_MODE_PROPERTIES             2
 
+/* sub-screens in the global settings section */
+#define ED_MODE_LEVELINFO_LEVEL                ED_TEXTBUTTON_ID_LEVELINFO_LEVEL
+#define ED_MODE_LEVELINFO_EDITOR       ED_TEXTBUTTON_ID_LEVELINFO_EDITOR
+
 /* sub-screens in the element properties section */
 #define ED_MODE_PROPERTIES_INFO                ED_TEXTBUTTON_ID_PROPERTIES_INFO
 #define ED_MODE_PROPERTIES_CONFIG      ED_TEXTBUTTON_ID_PROPERTIES_CONFIG
@@ -966,7 +1006,7 @@ static struct
   { ',',       "pick drawing element"                  },
 
   { 'U',       "undo last operation"                   },
-  { 'I',       "level properties"                      },
+  { 'I',       "properties of level"                   },
   { 'S',       "save level"                            },
   { 'C',       "clear level"                           },
   { 'T',       "test level"                            },
@@ -1037,7 +1077,7 @@ static struct
     GADGET_ID_LEVEL_GEMSLIMIT_DOWN,    GADGET_ID_LEVEL_GEMSLIMIT_UP,
     GADGET_ID_LEVEL_GEMSLIMIT_TEXT,    GADGET_ID_NONE,
     &level.gems_needed,
-    NULL, "number of gems to collect:",        NULL
+    NULL,                              "number of gems to collect:", NULL
   },
   {
     ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(7),
@@ -1056,7 +1096,15 @@ static struct
     "score for each second/step left:",        NULL, NULL
   },
   {
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_COUNTER2_YPOS(8),
+    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(12),
+    0,                                 9999,
+    GADGET_ID_LEVEL_RANDOM_SEED_DOWN,  GADGET_ID_LEVEL_RANDOM_SEED_UP,
+    GADGET_ID_LEVEL_RANDOM_SEED_TEXT,  GADGET_ID_NONE,
+    &level.random_seed,
+    NULL,                              "random seed:", "(0 => random)"
+  },
+  {
+    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(0),
     1,                                 100,
     GADGET_ID_LEVEL_RANDOM_DOWN,       GADGET_ID_LEVEL_RANDOM_UP,
     GADGET_ID_LEVEL_RANDOM_TEXT,       GADGET_ID_NONE,
@@ -1138,6 +1186,14 @@ static struct
     NULL,                              /* will be set when used */
     NULL,                              " ", "height",
   },
+  {
+    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(2),
+    MIN_INITIAL_INVENTORY_SIZE,                MAX_INITIAL_INVENTORY_SIZE,
+    GADGET_ID_INVENTORY_SIZE_DOWN,     GADGET_ID_INVENTORY_SIZE_UP,
+    GADGET_ID_INVENTORY_SIZE_TEXT,     GADGET_ID_NONE,
+    &level.initial_inventory_size[0],
+    NULL,                              NULL, "number of inventory elements"
+  },
 
   /* ---------- element settings: configure 1 (custom elements) ------------ */
 
@@ -1515,6 +1571,7 @@ static struct ValueTextInfo options_deadliness[] =
 {
   { EP_DONT_RUN_INTO,          "running into"                  },
   { EP_DONT_COLLIDE_WITH,      "colliding with"                },
+  { EP_DONT_GET_HIT_BY,                "getting hit by"                },
   { EP_DONT_TOUCH,             "touching"                      },
 
   { -1,                                NULL                            }
@@ -1673,15 +1730,16 @@ static struct ValueTextInfo options_action_type[] =
 {
   { CA_NO_ACTION,              "no action"                     },
   { CA_UNDEFINED,              " "                             },
-  { CA_HEADLINE_LEVEL_ACTIONS, "[level actions]"               },
+  { CA_HEADLINE_LEVEL_ACTIONS, "[level]"                       },
   { CA_RESTART_LEVEL,          "restart level"                 },
   { CA_SHOW_ENVELOPE,          "show envelope"                 },
   { CA_SET_LEVEL_TIME,         "set time"                      },
   { CA_SET_LEVEL_SCORE,                "set score"                     },
-  { CA_SET_LEVEL_GEMS,         "set needed gems"               },
+  { CA_SET_LEVEL_GEMS,         "set gems"                      },
   { CA_SET_LEVEL_WIND,         "set wind dir."                 },
+  { CA_SET_LEVEL_RANDOM_SEED,  "set rand. seed"                },
   { CA_UNDEFINED,              " "                             },
-  { CA_HEADLINE_PLAYER_ACTIONS,        "[player actions]"              },
+  { CA_HEADLINE_PLAYER_ACTIONS,        "[player]"                      },
   { CA_MOVE_PLAYER,            "move player"                   },
   { CA_EXIT_PLAYER,            "exit player"                   },
   { CA_KILL_PLAYER,            "kill player"                   },
@@ -1690,12 +1748,14 @@ static struct ValueTextInfo options_action_type[] =
   { CA_SET_PLAYER_SHIELD,      "set shield"                    },
   { CA_SET_PLAYER_GRAVITY,     "set gravity"                   },
   { CA_SET_PLAYER_ARTWORK,     "set artwork"                   },
+  { CA_SET_PLAYER_INVENTORY,   "set inventory"                 },
   { CA_UNDEFINED,              " "                             },
-  { CA_HEADLINE_CE_ACTIONS,    "[CE actions]"                  },
+  { CA_HEADLINE_CE_ACTIONS,    "[CE]"                          },
   { CA_SET_CE_VALUE,           "set CE value"                  },
   { CA_SET_CE_SCORE,           "set CE score"                  },
+  { CA_SET_CE_ARTWORK,         "set CE artwork"                },
   { CA_UNDEFINED,              " "                             },
-  { CA_HEADLINE_ENGINE_ACTIONS,        "[engine actions]"              },
+  { CA_HEADLINE_ENGINE_ACTIONS,        "[engine]"                      },
   { CA_SET_ENGINE_SCAN_MODE,   "set scan mode"                 },
 
   { -1,                                NULL                            }
@@ -1751,6 +1811,7 @@ static struct ValueTextInfo options_action_arg_player[] =
   { CA_ARG_PLAYER_4,           "4"                             },
   { CA_ARG_PLAYER_ANY,         "any"                           },
   { CA_ARG_PLAYER_TRIGGER,     "trigger"                       },
+  { CA_ARG_PLAYER_ACTION,      "action ->"                     },
 
   { -1,                                NULL                            }
 };
@@ -1784,10 +1845,12 @@ static struct ValueTextInfo options_action_arg_number[] =
   { CA_ARG_ELEMENT_CV_HEADLINE,        "[CE value]"                    },
   { CA_ARG_ELEMENT_CV_TARGET,  "target"                        },
   { CA_ARG_ELEMENT_CV_TRIGGER, "trigger"                       },
+  { CA_ARG_ELEMENT_CV_ACTION,  "action ->"                     },
   { CA_ARG_UNDEFINED,          " "                             },
   { CA_ARG_ELEMENT_CS_HEADLINE,        "[CE score]"                    },
   { CA_ARG_ELEMENT_CS_TARGET,  "target"                        },
   { CA_ARG_ELEMENT_CS_TRIGGER, "trigger"                       },
+  { CA_ARG_ELEMENT_CS_ACTION,  "action ->"                     },
 
   { -1,                                NULL                            }
 };
@@ -1821,14 +1884,17 @@ static struct ValueTextInfo options_action_arg_value[] =
   { CA_ARG_ELEMENT_CV_HEADLINE,        "[CE value]"                    },
   { CA_ARG_ELEMENT_CV_TARGET,  "target"                        },
   { CA_ARG_ELEMENT_CV_TRIGGER, "trigger"                       },
+  { CA_ARG_ELEMENT_CV_ACTION,  "action ->"                     },
   { CA_ARG_UNDEFINED,          " "                             },
   { CA_ARG_ELEMENT_CS_HEADLINE,        "[CE score]"                    },
   { CA_ARG_ELEMENT_CS_TARGET,  "target"                        },
   { CA_ARG_ELEMENT_CS_TRIGGER, "trigger"                       },
+  { CA_ARG_ELEMENT_CS_ACTION,  "action ->"                     },
   { CA_ARG_UNDEFINED,          " "                             },
   { CA_ARG_ELEMENT_NR_HEADLINE,        "[element]"                     },
   { CA_ARG_ELEMENT_NR_TARGET,  "target"                        },
   { CA_ARG_ELEMENT_NR_TRIGGER, "trigger"                       },
+  { CA_ARG_ELEMENT_NR_ACTION,  "action ->"                     },
 
   { -1,                                NULL                            }
 };
@@ -1844,6 +1910,7 @@ static struct ValueTextInfo options_action_arg_envelope[] =
   { CA_ARG_ELEMENT_HEADLINE,   "[element]"                     },
   { CA_ARG_ELEMENT_TARGET,     "target"                        },
   { CA_ARG_ELEMENT_TRIGGER,    "trigger"                       },
+  { CA_ARG_ELEMENT_ACTION,     "action ->"                     },
 
   { -1,                                NULL                            }
 };
@@ -1863,6 +1930,7 @@ static struct ValueTextInfo options_action_arg_key[] =
   { CA_ARG_ELEMENT_HEADLINE,   "[element]"                     },
   { CA_ARG_ELEMENT_TARGET,     "target"                        },
   { CA_ARG_ELEMENT_TRIGGER,    "trigger"                       },
+  { CA_ARG_ELEMENT_ACTION,     "action ->"                     },
 
   { -1,                                NULL                            }
 };
@@ -1901,6 +1969,7 @@ static struct ValueTextInfo options_action_arg_artwork[] =
   { CA_ARG_ELEMENT_HEADLINE,   "[element]"                     },
   { CA_ARG_ELEMENT_TARGET,     "target"                        },
   { CA_ARG_ELEMENT_TRIGGER,    "trigger"                       },
+  { CA_ARG_ELEMENT_ACTION,     "action ->"                     },
   { CA_ARG_UNDEFINED,          " "                             },
   { CA_ARG_ELEMENT_RESET,      "reset"                         },
 
@@ -1940,6 +2009,26 @@ static struct ValueTextInfo options_action_arg_scan_mode[] =
   { -1,                                NULL                            }
 };
 
+static struct ValueTextInfo options_action_arg_inventory[] =
+{
+  { CA_ARG_INVENTORY_HEADLINE, "[add]"                         },
+  { CA_ARG_ELEMENT_TARGET,     "+ target"                      },
+  { CA_ARG_ELEMENT_TRIGGER,    "+ trigger"                     },
+  { CA_ARG_ELEMENT_ACTION,     "+ action"                      },
+  { CA_ARG_UNDEFINED,          " "                             },
+  { CA_ARG_INVENTORY_RM_HEADLINE,"[remove]"                    },
+  { CA_ARG_INVENTORY_RM_TARGET,        "- target"                      },
+  { CA_ARG_INVENTORY_RM_TRIGGER,"- trigger"                    },
+  { CA_ARG_INVENTORY_RM_ACTION,        "- action"                      },
+  { CA_ARG_INVENTORY_RM_FIRST, "- first"                       },
+  { CA_ARG_INVENTORY_RM_LAST,  "- last"                        },
+  { CA_ARG_INVENTORY_RM_ALL,   "- all"                         },
+  { CA_ARG_UNDEFINED,          " "                             },
+  { CA_ARG_INVENTORY_RESET,    "reset"                         },
+
+  { -1,                                NULL                            }
+};
+
 static char options_change_page_strings[MAX_CHANGE_PAGES][10];
 static struct ValueTextInfo options_change_page[MAX_CHANGE_PAGES + 1] =
 {
@@ -1983,13 +2072,16 @@ action_arg_options[] =
   { CA_SET_LEVEL_GEMS,         3,      options_action_arg_number,      },
   { CA_SET_LEVEL_SCORE,                3,      options_action_arg_number,      },
   { CA_SET_LEVEL_WIND,         1,      options_action_arg_direction,   },
+  { CA_SET_LEVEL_RANDOM_SEED,  1,      options_action_arg_number,      },
   { CA_SET_PLAYER_KEYS,                2,      options_action_arg_key,         },
   { CA_SET_PLAYER_SPEED,       1,      options_action_arg_speed,       },
   { CA_SET_PLAYER_SHIELD,      1,      options_action_arg_shield,      },
   { CA_SET_PLAYER_GRAVITY,     1,      options_action_arg_gravity,     },
   { CA_SET_PLAYER_ARTWORK,     1,      options_action_arg_artwork,     },
+  { CA_SET_PLAYER_INVENTORY,   0,      options_action_arg_inventory,   },
   { CA_SET_CE_VALUE,           3,      options_action_arg_value,       },
   { CA_SET_CE_SCORE,           3,      options_action_arg_value,       },
+  { CA_SET_CE_ARTWORK,         1,      options_action_arg_artwork,     },
   { CA_SET_ENGINE_SCAN_MODE,   1,      options_action_arg_scan_mode,   },
 
   { -1,                                FALSE,  NULL                            }
@@ -2268,34 +2360,46 @@ static struct
 } textbutton_info[ED_NUM_TEXTBUTTONS] =
 {
   {
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_COUNTER_YPOS(1),
+    ED_LEVEL_SETTINGS_TABS_XPOS(0),    ED_LEVEL_SETTINGS_TABS_YPOS(0),
+    GADGET_ID_LEVELINFO_LEVEL,         GADGET_ID_NONE,
+    8,                                 "Level",                        
+    NULL, NULL,                                "Configure level properties"
+  },
+  {
+    ED_LEVEL_SETTINGS_TABS_XPOS(1),    ED_LEVEL_SETTINGS_TABS_YPOS(0),
+    GADGET_ID_LEVELINFO_EDITOR,                GADGET_ID_NONE,
+    8,                                 "Editor",                       
+    NULL, NULL,                                "Configure editor properties"
+  },
+  {
+    ED_ELEMENT_SETTINGS_TABS_XPOS(0),  ED_ELEMENT_SETTINGS_TABS_YPOS(0),
     GADGET_ID_PROPERTIES_INFO,         GADGET_ID_NONE,
     8,                                 "Info",                 
     NULL, NULL,                                "Show information about element"
   },
   {
-    ED_ELEMENT_SETTINGS_XPOS(0) + 124, ED_COUNTER_YPOS(1),
+    ED_ELEMENT_SETTINGS_TABS_XPOS(1),  ED_ELEMENT_SETTINGS_TABS_YPOS(0),
     GADGET_ID_PROPERTIES_CONFIG,       GADGET_ID_NONE,
     8,                                 "Config",
     NULL, NULL,                                "Configure element properties"
   },
   {
-    ED_ELEMENT_SETTINGS_XPOS(0) + 124, ED_COUNTER_YPOS(1),
+    ED_ELEMENT_SETTINGS_TABS_XPOS(1),  ED_ELEMENT_SETTINGS_TABS_YPOS(0),
     GADGET_ID_PROPERTIES_CONFIG_1,     GADGET_ID_NONE,
     8,                                 "Config 1",
-    NULL, NULL,                                "Configure custom element properties"
+    NULL, NULL,                                "Configure element properties, part 1"
   },
   {
-    ED_ELEMENT_SETTINGS_XPOS(0) + 248, ED_COUNTER_YPOS(1),
+    ED_ELEMENT_SETTINGS_TABS_XPOS(2),  ED_ELEMENT_SETTINGS_TABS_YPOS(0),
     GADGET_ID_PROPERTIES_CONFIG_2,     GADGET_ID_NONE,
     8,                                 "Config 2",
-    NULL, NULL,                                "Configure custom element properties"
+    NULL, NULL,                                "Configure element properties, part 2"
   },
   {
-    ED_ELEMENT_SETTINGS_XPOS(0) + 372, ED_COUNTER_YPOS(1),
+    ED_ELEMENT_SETTINGS_TABS_XPOS(3),  ED_ELEMENT_SETTINGS_TABS_YPOS(0),
     GADGET_ID_PROPERTIES_CHANGE,       GADGET_ID_NONE,
     8,                                 "Change",
-    NULL, NULL,                                "Custom element change configuration"
+    NULL, NULL,                                "Configure custom element change pages"
   },
   {
     -1,                                        ED_ELEMENT_SETTINGS_YPOS(2),
@@ -2474,14 +2578,14 @@ static struct
 } radiobutton_info[ED_NUM_RADIOBUTTONS] =
 {
   {
-    -1,                                        ED_COUNTER2_YPOS(8),
+    -1,                                        ED_LEVEL_SETTINGS_YPOS(0),
     GADGET_ID_RANDOM_PERCENTAGE,       GADGET_ID_LEVEL_RANDOM_UP,
     RADIO_NR_RANDOM_ELEMENTS,
     &random_placement_method,          RANDOM_USE_PERCENTAGE,
     " ", "percentage",                 "use percentage for random elements"
   },
   {
-    -1,                                        ED_COUNTER2_YPOS(8),
+    -1,                                        ED_LEVEL_SETTINGS_YPOS(0),
     GADGET_ID_RANDOM_QUANTITY,         GADGET_ID_RANDOM_PERCENTAGE,
     RADIO_NR_RANDOM_ELEMENTS,
     &random_placement_method,          RANDOM_USE_QUANTITY,
@@ -2501,7 +2605,7 @@ static struct
   /* ---------- level and editor settings ---------------------------------- */
 
   {
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_COUNTER2_YPOS(9) - MINI_TILEY,
+    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(1),
     GADGET_ID_RANDOM_RESTRICTED,       GADGET_ID_NONE,
     &random_placement_background_restricted,
     NULL,
@@ -2524,6 +2628,13 @@ static struct
     NULL,
     "slip down from certain flat walls","use EM/DC style slipping behaviour"
   },
+  {
+    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(1),
+    GADGET_ID_EM_EXPLODES_BY_FIRE,     GADGET_ID_NONE,
+    &level.em_explodes_by_fire,
+    NULL,
+    "explodes with chain reaction",    "use R'n'D style explosion behaviour"
+  },
   {
     ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(2),
     GADGET_ID_USE_SPRING_BUG,          GADGET_ID_NONE,
@@ -2629,6 +2740,13 @@ static struct
     NULL,
     "use initial gravity",             "set initial player gravity"
   },
+  {
+    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(1),
+    GADGET_ID_USE_INITIAL_INVENTORY,   GADGET_ID_NONE,
+    &level.use_initial_inventory[0],
+    NULL,
+    "use initial inventory:",          "use collected elements on level start"
+  },
   {
     ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(5),
     GADGET_ID_CAN_PASS_TO_WALKABLE,    GADGET_ID_NONE,
@@ -3030,6 +3148,15 @@ static struct
     NULL, NULL, NULL,                  "element for player explosion"
   },
 
+  /* ---------- player initial inventory ----------------------------------- */
+
+  {
+    -1,                                        ED_AREA_1X1_SETTINGS_YPOS(1),
+    GADGET_ID_INVENTORY_CONTENT,       GADGET_ID_USE_INITIAL_INVENTORY,
+    &level.initial_inventory_content[0][0], MAX_INITIAL_INVENTORY_SIZE, 1,
+    NULL, NULL, NULL,                  "content for initial inventory"
+  },
+
   /* ---------- element settings: configure 1 (custom elements) ----------- */
 
   /* ---------- custom graphic --------------------------------------------- */
@@ -3037,7 +3164,7 @@ static struct
   {
     -1,                                        ED_AREA_1X1_SETTINGS_YPOS(1),
     GADGET_ID_CUSTOM_GRAPHIC,          GADGET_ID_CUSTOM_USE_GRAPHIC,
-    &custom_element.gfx_element,       1, 1,
+    &custom_element.gfx_element_initial,1, 1,
     NULL, NULL, NULL,                  "custom graphic element"
   },
 
@@ -3092,10 +3219,19 @@ static struct
   {
     -1,                                        ED_AREA_1X1_SETTINGS_YPOS(5),
     GADGET_ID_CUSTOM_CHANGE_TRIGGER,   GADGET_ID_CHANGE_OTHER_ACTION,
-    &custom_element_change.trigger_element, 1, 1,
+    &custom_element_change.initial_trigger_element, 1, 1,
     NULL, NULL, NULL,                  "other element triggering change"
   },
 
+  /* ---------- custom change action (element used for action) ------------- */
+
+  {
+    -1,                                        ED_AREA_1X1_SETTINGS_YPOS(13),
+    GADGET_ID_CUSTOM_CHANGE_ACTION,    GADGET_ID_ACTION_ARG,
+    &custom_element_change.action_element, 1, 1,
+    NULL, NULL, NULL,                  "element used as action parameter"
+  },
+
   /* ---------- group element content -------------------------------------- */
 
   {
@@ -3108,7 +3244,7 @@ static struct
   /* ---------- random background (for random painting) -------------------- */
 
   {
-    -1,                                        ED_ELEMENT_SETTINGS_YPOS(14),
+    -1,                                        ED_AREA_1X1_SETTINGS_YPOS(-1),
     GADGET_ID_RANDOM_BACKGROUND,       GADGET_ID_RANDOM_RESTRICTED,
     &random_placement_background_element, 1, 1,
     NULL, NULL, NULL,                  "random placement background"
@@ -3188,6 +3324,7 @@ static int undo_buffer_position = 0;
 static int undo_buffer_steps = 0;
 
 static int edit_mode;
+static int edit_mode_levelinfo;
 static int edit_mode_properties;
 
 static int element_shift = 0;
@@ -4946,27 +5083,40 @@ static void DrawElementBorder(int dest_x, int dest_y, int width, int height,
     (input ? IMG_EDITOR_ELEMENT_BORDER_INPUT : IMG_EDITOR_ELEMENT_BORDER);
   Bitmap *src_bitmap;
   int src_x, src_y;
-  int num_mini_tilex = width  / MINI_TILEX + 1;
-  int num_mini_tiley = height / MINI_TILEY + 1;
-  int from_x = dest_x - MINI_TILEX / 2;
-  int from_y = dest_y - MINI_TILEY / 2;
-  int to_x = from_x + num_mini_tilex * MINI_TILEX - 1;
-  int to_y = from_y + num_mini_tiley * MINI_TILEY - 1;
-  int x, y;
+  int bx = (input ? 4 : 8);
+  int by = (input ? 4 : 8);
+  int bx2 = TILEX - bx;
+  int by2 = TILEY - by;
+  int i;
 
-  getMiniGraphicSource(border_graphic, &src_bitmap, &src_x, &src_y);
+  getGraphicSource(border_graphic, 0, &src_bitmap, &src_x, &src_y);
 
-  for (y = 0; y < num_mini_tiley; y++)
-    for (x = 0; x < num_mini_tilex; x++)
-      BlitBitmap(src_bitmap, drawto, src_x, src_y, MINI_TILEX, MINI_TILEY,
-                from_x + x * MINI_TILEX, from_y + y * MINI_TILEY);
+  BlitBitmap(src_bitmap, drawto, src_x, src_y,
+            bx, by, dest_x - bx, dest_y - by);
+  BlitBitmap(src_bitmap, drawto, src_x + bx2, src_y,
+            bx, by, dest_x + width, dest_y - by);
+  BlitBitmap(src_bitmap, drawto, src_x, src_y + by2,
+            bx, by, dest_x - bx, dest_y + height);
+  BlitBitmap(src_bitmap, drawto, src_x + bx2, src_y + by2,
+            bx, by, dest_x + width, dest_y + height);
 
-  ClearRectangle(drawto, dest_x - 1, dest_y - 1, width + 2, height + 2);
+  for (i = 0; i < width / MINI_TILEX; i++)
+  {
+    BlitBitmap(src_bitmap, drawto, src_x + bx, src_y, MINI_TILEX, by,
+              dest_x + i * MINI_TILEX, dest_y - by);
+    BlitBitmap(src_bitmap, drawto, src_x + bx, src_y + by2, MINI_TILEX, by,
+              dest_x + i * MINI_TILEX, dest_y + height);
+  }
 
-  DrawSimpleBlackLine(drawto, from_x, from_y, to_x, from_y);
-  DrawSimpleBlackLine(drawto, to_x, from_y, to_x, to_y);
-  DrawSimpleBlackLine(drawto, to_x, to_y, from_x, to_y);
-  DrawSimpleBlackLine(drawto, from_x, to_y, from_x, from_y);
+  for (i = 0; i < height / MINI_TILEY; i++)
+  {
+    BlitBitmap(src_bitmap, drawto, src_x, src_y + by, bx, MINI_TILEY,
+              dest_x - bx, dest_y + i * MINI_TILEY);
+    BlitBitmap(src_bitmap, drawto, src_x + bx2, src_y + by, bx, MINI_TILEY,
+              dest_x + width, dest_y + i * MINI_TILEY);
+  }
+
+  ClearRectangle(drawto, dest_x - 1, dest_y - 1, width + 2, height + 2);
 }
 
 static void DrawDrawingArea(int id)
@@ -4988,14 +5138,16 @@ static void DrawDrawingArea(int id)
 
 static void ScrollMiniLevel(int from_x, int from_y, int scroll)
 {
-#if 1
+#if 0
+  /* (directly solved in BlitBitmap() now) */
   static Bitmap *tmp_backbuffer = NULL;
 #endif
   int x, y;
   int dx = (scroll == ED_SCROLL_LEFT ? -1 : scroll == ED_SCROLL_RIGHT ? 1 : 0);
   int dy = (scroll == ED_SCROLL_UP   ? -1 : scroll == ED_SCROLL_DOWN  ? 1 : 0);
 
-#if 1
+#if 0
+  /* (directly solved in BlitBitmap() now) */
   if (tmp_backbuffer == NULL)
     tmp_backbuffer = CreateBitmap(WIN_XSIZE, WIN_YSIZE, DEFAULT_DEPTH);
 
@@ -5027,8 +5179,6 @@ static void ScrollMiniLevel(int from_x, int from_y, int scroll)
             SY + (dy == +1 ? MINI_TILEY : 0));
 #endif
 
-  printf("::: ScrollMiniLevel: A.1\n");
-
   if (dx)
   {
     x = (dx == 1 ? 0 : ed_fieldx - 1);
@@ -5042,8 +5192,6 @@ static void ScrollMiniLevel(int from_x, int from_y, int scroll)
       DrawMiniElementOrWall(x, y, from_x, from_y);
   }
 
-  printf("::: ScrollMiniLevel: Z\n");
-
   redraw_mask |= REDRAW_FIELD;
   BackToFront();
 }
@@ -5695,7 +5843,8 @@ static void CreateTextbuttonGadgets()
 
     event_mask = GD_EVENT_RELEASED;
 
-    if (id >= GADGET_ID_PROPERTIES_INFO && id <= GADGET_ID_PROPERTIES_CHANGE)
+    if ((id >= GADGET_ID_LEVELINFO_LEVEL && id <= GADGET_ID_LEVELINFO_EDITOR) ||
+       (id >= GADGET_ID_PROPERTIES_INFO && id <= GADGET_ID_PROPERTIES_CHANGE))
     {
       gd_x1 = DOOR_GFX_PAGEX4 + ED_TEXTBUTTON_TAB_XPOS;
       gd_x2 = DOOR_GFX_PAGEX3 + ED_TEXTBUTTON_TAB_XPOS;
@@ -6594,8 +6743,11 @@ static void replace_custom_element_in_settings(int element_from,
       if (change->target_element == element_from)
        change->target_element = element_to;
 
-      if (change->trigger_element == element_from)
-       change->trigger_element = element_to;
+      if (change->initial_trigger_element == element_from)
+       change->initial_trigger_element = element_to;
+
+      if (change->action_element == element_from)
+       change->action_element = element_to;
 
       for (y = 0; y < 3; y++)
        for (x = 0; x < 3; x++)
@@ -6771,11 +6923,13 @@ static void CopyCustomElementPropertiesToEditor(int element)
   /* set deadliness selectbox help value */
   custom_element.deadliness =
     (DONT_TOUCH(element) ? EP_DONT_TOUCH :
+     DONT_GET_HIT_BY(element) ? EP_DONT_GET_HIT_BY :
      DONT_COLLIDE_WITH(element) ? EP_DONT_COLLIDE_WITH :
      DONT_RUN_INTO(element) ? EP_DONT_RUN_INTO :
      custom_element.deadliness);
   custom_element_properties[EP_DEADLY] =
     (DONT_TOUCH(element) ||
+     DONT_GET_HIT_BY(element) ||
      DONT_COLLIDE_WITH(element) ||
      DONT_RUN_INTO(element));
 
@@ -6923,6 +7077,7 @@ static void CopyCustomElementPropertiesToGame(int element)
   /* set deadliness property from checkbox and selectbox */
   custom_element_properties[EP_DONT_RUN_INTO] = FALSE;
   custom_element_properties[EP_DONT_COLLIDE_WITH] = FALSE;
+  custom_element_properties[EP_DONT_GET_HIT_BY] = FALSE;
   custom_element_properties[EP_DONT_TOUCH] = FALSE;
   custom_element_properties[custom_element.deadliness] =
     custom_element_properties[EP_DEADLY];
@@ -7031,6 +7186,8 @@ void CheckElementDescriptions()
 
 void DrawLevelEd()
 {
+  StopAnimation();
+
   CloseDoor(DOOR_CLOSE_ALL);
 
 #if 1
@@ -7053,6 +7210,7 @@ void DrawLevelEd()
   else
   {
     edit_mode = ED_MODE_DRAWING;
+    edit_mode_levelinfo = ED_MODE_LEVELINFO_LEVEL;
     edit_mode_properties = ED_MODE_PROPERTIES_INFO;
 
     ResetUndoBuffer();
@@ -7077,6 +7235,8 @@ void DrawLevelEd()
   ReinitializeElementList();           /* update dynamic level element list */
   ReinitializeElementListButtons();    /* custom element may look different */
 
+  InitElementPropertiesGfxElement();
+
 #if 1
   UnmapAllGadgets();
 #else
@@ -7372,25 +7532,125 @@ static void DrawDrawingWindow()
   MapLevelEditorToolboxDrawingGadgets();
 }
 
-static void DrawLevelInfoWindow()
+static int getTabulatorBarWidth()
 {
+  struct GadgetInfo *gd_gi1 = level_editor_gadget[GADGET_ID_PROPERTIES_INFO];
+  struct GadgetInfo *gd_gi4 = level_editor_gadget[GADGET_ID_PROPERTIES_CHANGE];
+
+  return gd_gi4->x - gd_gi1->x + gd_gi4->width;
+}
+
+static void DrawLevelInfoTabulatorGadgets()
+{
+  struct GadgetInfo *gd_gi1 = level_editor_gadget[GADGET_ID_LEVELINFO_LEVEL];
+  struct GadgetDesign *gd = &gd_gi1->alt_design[GD_BUTTON_UNPRESSED];
+  int gd_x = gd->x + gd_gi1->border.width / 2;
+  int gd_y = gd->y + gd_gi1->height - 1;
+  Pixel tab_color = GetPixel(gd->bitmap, gd_x, gd_y);
+  int id_first = ED_TEXTBUTTON_ID_LEVELINFO_LEVEL;
+  int id_last  = ED_TEXTBUTTON_ID_LEVELINFO_EDITOR;
+#if 1
+#else
+  int max_tabs = 2;
+#endif
   int i;
 
-  stick_element_properties_window = FALSE;
+  for (i = id_first; i <= id_last; i++)
+  {
+    int gadget_id = textbutton_info[i].gadget_id;
+    struct GadgetInfo *gi = level_editor_gadget[gadget_id];
+    boolean active = (i != edit_mode_levelinfo);
 
-  SetMainBackgroundImage(IMG_BACKGROUND_EDITOR);
-  ClearField();
-  UnmapLevelEditorWindowGadgets();
+    /* draw background line below tabulator button */
+    ClearRectangleOnBackground(drawto, gi->x, gi->y + gi->height, gi->width, 1);
 
-#if 0
-  DrawTextSCentered(ED_SETTINGS1_YPOS, FONT_TITLE_1, "Level Settings");
-  DrawTextSCentered(ED_SETTINGS2_YPOS, FONT_TITLE_1, "Editor Settings");
+    /* draw solid line below inactive tabulator buttons */
+    if (!active && tab_color != BLACK_PIXEL)   /* black => transparent */
+      FillRectangle(drawto, gi->x, gi->y + gi->height, gi->width, 1, tab_color);
+
+    ModifyGadget(gi, GDI_ACTIVE, active, GDI_END);
+    MapTextbuttonGadget(i);
+  }
+
+#if 1
+  /* draw little border line below tabulator buttons */
+  if (tab_color != BLACK_PIXEL)                        /* black => transparent */
+    FillRectangle(drawto, gd_gi1->x, gd_gi1->y + gd_gi1->height + 1,
+                 getTabulatorBarWidth(), ED_GADGET_DISTANCE,
+                 tab_color);
 #else
-  DrawText(SX + ED_SETTINGS2_XPOS, SY + ED_SETTINGS1_YPOS,
-          "Level Settings", FONT_TITLE_1);
-  DrawText(SX + ED_SETTINGS2_XPOS, SY + ED_SETTINGS2_YPOS,
-          "Editor Settings", FONT_TITLE_1);
+  /* draw little border line below tabulator buttons */
+  if (tab_color != BLACK_PIXEL)                        /* black => transparent */
+    FillRectangle(drawto, gd_gi1->x, gd_gi1->y + gd_gi1->height + 1,
+                 max_tabs * gd_gi1->width + (max_tabs -1) * ED_GADGET_DISTANCE,
+                 ED_GADGET_DISTANCE, tab_color);
+#endif
+}
+
+static void DrawPropertiesTabulatorGadgets()
+{
+  struct GadgetInfo *gd_gi1 = level_editor_gadget[GADGET_ID_PROPERTIES_INFO];
+  struct GadgetDesign *gd = &gd_gi1->alt_design[GD_BUTTON_UNPRESSED];
+  int gd_x = gd->x + gd_gi1->border.width / 2;
+  int gd_y = gd->y + gd_gi1->height - 1;
+  Pixel tab_color = GetPixel(gd->bitmap, gd_x, gd_y);
+  int id_first = ED_TEXTBUTTON_ID_PROPERTIES_INFO;
+  int id_last  = ED_TEXTBUTTON_ID_PROPERTIES_CONFIG;
+#if 1
+#else
+  int max_tabs = 4;
 #endif
+  int i;
+
+  /* draw two config tabulators for player elements */
+  if (ELEM_IS_PLAYER(properties_element))
+    id_last = ED_TEXTBUTTON_ID_PROPERTIES_CONFIG_2;
+
+  /* draw two config and one "change" tabulator for custom elements */
+  if (IS_CUSTOM_ELEMENT(properties_element))
+    id_last = ED_TEXTBUTTON_ID_PROPERTIES_CHANGE;
+
+  for (i = id_first; i <= id_last; i++)
+  {
+    int gadget_id = textbutton_info[i].gadget_id;
+    struct GadgetInfo *gi = level_editor_gadget[gadget_id];
+    boolean active = (i != edit_mode_properties);
+
+    /* use "config 1" and "config 2" instead of "config" for players and CEs */
+    if (i == ED_TEXTBUTTON_ID_PROPERTIES_CONFIG &&
+       (ELEM_IS_PLAYER(properties_element) ||
+        IS_CUSTOM_ELEMENT(properties_element)))
+      continue;
+
+    /* draw background line below tabulator button */
+    ClearRectangleOnBackground(drawto, gi->x, gi->y + gi->height, gi->width, 1);
+
+    /* draw solid line below inactive tabulator buttons */
+    if (!active && tab_color != BLACK_PIXEL)   /* black => transparent */
+      FillRectangle(drawto, gi->x, gi->y + gi->height, gi->width, 1, tab_color);
+
+    ModifyGadget(gi, GDI_ACTIVE, active, GDI_END);
+    MapTextbuttonGadget(i);
+  }
+
+#if 1
+  /* draw little border line below tabulator buttons */
+  if (tab_color != BLACK_PIXEL)                        /* black => transparent */
+    FillRectangle(drawto, gd_gi1->x, gd_gi1->y + gd_gi1->height + 1,
+                 getTabulatorBarWidth(), ED_GADGET_DISTANCE,
+                 tab_color);
+#else
+  /* draw little border line below tabulator buttons */
+  if (tab_color != BLACK_PIXEL)                        /* black => transparent */
+    FillRectangle(drawto, gd_gi1->x, gd_gi1->y + gd_gi1->height + 1,
+                 max_tabs * gd_gi1->width + (max_tabs -1) * ED_GADGET_DISTANCE,
+                 ED_GADGET_DISTANCE, tab_color);
+#endif
+}
+
+static void DrawLevelInfoLevel()
+{
+  int i;
 
   /* draw counter gadgets */
   for (i = ED_COUNTER_ID_LEVEL_FIRST; i <= ED_COUNTER_ID_LEVEL_LAST; i++)
@@ -7400,22 +7660,62 @@ static void DrawLevelInfoWindow()
   for (i = ED_SELECTBOX_ID_LEVEL_FIRST; i <= ED_SELECTBOX_ID_LEVEL_LAST; i++)
     MapSelectboxGadget(i);
 
+  /* draw text input gadgets */
+  for (i = ED_TEXTINPUT_ID_LEVEL_FIRST; i <= ED_TEXTINPUT_ID_LEVEL_LAST; i++)
+    MapTextInputGadget(i);
+}
+
+static void DrawLevelInfoEditor()
+{
+  int i;
+
+  /* draw counter gadgets */
+  for (i = ED_COUNTER_ID_EDITOR_FIRST; i <= ED_COUNTER_ID_EDITOR_LAST; i++)
+    MapCounterButtons(i);
+
   /* draw checkbutton gadgets */
-  for (i=ED_CHECKBUTTON_ID_LEVEL_FIRST; i <= ED_CHECKBUTTON_ID_LEVEL_LAST; i++)
+  for (i=ED_CHECKBUTTON_ID_EDITOR_FIRST; i<= ED_CHECKBUTTON_ID_EDITOR_LAST; i++)
     MapCheckbuttonGadget(i);
 
   /* draw radiobutton gadgets */
-  for (i=ED_RADIOBUTTON_ID_LEVEL_FIRST; i <= ED_RADIOBUTTON_ID_LEVEL_LAST; i++)
+  for (i=ED_RADIOBUTTON_ID_EDITOR_FIRST; i<= ED_RADIOBUTTON_ID_EDITOR_LAST; i++)
     MapRadiobuttonGadget(i);
 
-  /* draw text input gadgets */
-  for (i = ED_TEXTINPUT_ID_LEVEL_FIRST; i <= ED_TEXTINPUT_ID_LEVEL_LAST; i++)
-    MapTextInputGadget(i);
-
   /* draw drawing area */
   MapDrawingArea(ED_DRAWING_ID_RANDOM_BACKGROUND);
 }
 
+static void DrawLevelInfoWindow()
+{
+  stick_element_properties_window = FALSE;
+
+  UnmapLevelEditorWindowGadgets();
+
+  SetMainBackgroundImage(IMG_BACKGROUND_EDITOR);
+  ClearField();
+
+#if 1
+#if 1
+  DrawTextSCentered(ED_SETTINGS1_YPOS, FONT_TITLE_1, "Global Settings");
+#else
+  DrawTextSCentered(ED_SETTINGS1_YPOS, FONT_TITLE_1, "Level Settings");
+  DrawTextSCentered(ED_SETTINGS2_YPOS, FONT_TITLE_1, "Editor Settings");
+#endif
+#else
+  DrawText(SX + ED_SETTINGS2_XPOS, SY + ED_SETTINGS1_YPOS,
+          "Level Settings", FONT_TITLE_1);
+  DrawText(SX + ED_SETTINGS2_XPOS, SY + ED_SETTINGS2_YPOS,
+          "Editor Settings", FONT_TITLE_1);
+#endif
+
+  DrawLevelInfoTabulatorGadgets();
+
+  if (edit_mode_levelinfo == ED_MODE_LEVELINFO_LEVEL)
+    DrawLevelInfoLevel();
+  else /* (edit_mode_levelinfo == ED_MODE_LEVELINFO_EDITOR) */
+    DrawLevelInfoEditor();
+}
+
 static void DrawCustomContentArea()
 {
   int id = ED_DRAWING_ID_CUSTOM_CONTENT;
@@ -7566,6 +7866,35 @@ static void DrawGroupElementArea(int element)
   MapDrawingArea(id);
 }
 
+static void DrawPlayerInitialInventoryArea(int element)
+{
+  int player_nr = GET_PLAYER_NR(element);
+  int num_elements = level.initial_inventory_size[player_nr];
+  int id = ED_DRAWING_ID_INVENTORY_CONTENT;
+  int sx = SX + drawingarea_info[id].x - MINI_TILEX / 2;
+  int sy = SY + drawingarea_info[id].y - MINI_TILEY / 2;
+  int xsize = MAX_INITIAL_INVENTORY_SIZE;
+  int ysize = 1;
+
+  /* determine horizontal position to the right of specified gadget */
+  if (drawingarea_info[id].gadget_id_align != GADGET_ID_NONE)
+    sx += (right_gadget_border[drawingarea_info[id].gadget_id_align] +
+          ED_DRAWINGAREA_TEXT_DISTANCE);
+
+  /* determine horizontal offset for leading text */
+  if (drawingarea_info[id].text_left != NULL)
+    sx += getTextWidthForDrawingArea(drawingarea_info[id].text_left);
+
+  UnmapDrawingArea(id);
+
+  ModifyEditorDrawingArea(id, num_elements, 1);
+
+  /* delete content areas in case of reducing number of them */
+  DrawBackground(sx, sy, (xsize + 1) * MINI_TILEX, (ysize + 1) * MINI_TILEY);
+
+  MapDrawingArea(id);
+}
+
 static void DrawEnvelopeTextArea(int envelope_nr)
 {
   int id = ED_TEXTAREA_ID_ENVELOPE_INFO;
@@ -7618,63 +7947,6 @@ static int PrintElementDescriptionFromFile(char *filename, int start_line)
                      max_lines_per_screen, -1, TRUE, FALSE, FALSE);
 }
 
-static void DrawPropertiesTabulatorGadgets()
-{
-  struct GadgetInfo *gd_gi1 = level_editor_gadget[GADGET_ID_PROPERTIES_INFO];
-  struct GadgetInfo *gd_gi4 = level_editor_gadget[GADGET_ID_PROPERTIES_CHANGE];
-  struct GadgetDesign *gd = &gd_gi1->alt_design[GD_BUTTON_UNPRESSED];
-  int gd_x = gd->x + gd_gi1->border.width / 2;
-  int gd_y = gd->y + gd_gi1->height - 1;
-  Pixel tab_color = GetPixel(gd->bitmap, gd_x, gd_y);
-  int id_first = ED_TEXTBUTTON_ID_PROPERTIES_INFO;
-  int id_last  = ED_TEXTBUTTON_ID_PROPERTIES_CONFIG;
-#if 1
-#else
-  int max_tabs = 4;
-#endif
-  int i;
-
-  /* draw additional "change" tabulator for custom elements */
-  if (IS_CUSTOM_ELEMENT(properties_element))
-    id_last = ED_TEXTBUTTON_ID_PROPERTIES_CHANGE;
-
-  for (i = id_first; i <= id_last; i++)
-  {
-    int gadget_id = textbutton_info[i].gadget_id;
-    struct GadgetInfo *gi = level_editor_gadget[gadget_id];
-    boolean active = (i != edit_mode_properties);
-
-    /* use "config 1" and "config 2" instead of "config" */
-    if (i == ED_TEXTBUTTON_ID_PROPERTIES_CONFIG &&
-       IS_CUSTOM_ELEMENT(properties_element))
-      continue;
-
-    /* draw background line below tabulator button */
-    ClearRectangleOnBackground(drawto, gi->x, gi->y + gi->height, gi->width, 1);
-
-    /* draw solid line below inactive tabulator buttons */
-    if (!active && tab_color != BLACK_PIXEL)   /* black => transparent */
-      FillRectangle(drawto, gi->x, gi->y + gi->height, gi->width, 1, tab_color);
-
-    ModifyGadget(gi, GDI_ACTIVE, active, GDI_END);
-    MapTextbuttonGadget(i);
-  }
-
-#if 1
-  /* draw little border line below tabulator buttons */
-  if (tab_color != BLACK_PIXEL)                        /* black => transparent */
-    FillRectangle(drawto, gd_gi1->x, gd_gi1->y + gd_gi1->height + 1,
-                 gd_gi4->x - gd_gi1->x + gd_gi4->width, ED_GADGET_DISTANCE,
-                 tab_color);
-#else
-  /* draw little border line below tabulator buttons */
-  if (tab_color != BLACK_PIXEL)                        /* black => transparent */
-    FillRectangle(drawto, gd_gi1->x, gd_gi1->y + gd_gi1->height + 1,
-                 max_tabs * gd_gi1->width + (max_tabs -1) * ED_GADGET_DISTANCE,
-                 ED_GADGET_DISTANCE, tab_color);
-#endif
-}
-
 static void DrawPropertiesInfo()
 {
   static struct
@@ -7714,6 +7986,7 @@ static void DrawPropertiesInfo()
 
     { EP_DONT_RUN_INTO,                "- deadly when running into"            },
     { EP_DONT_COLLIDE_WITH,    "- deadly when colliding with"          },
+    { EP_DONT_GET_HIT_BY,      "- deadly when getting hit by"          },
     { EP_DONT_TOUCH,           "- deadly when touching"                },
 
     { EP_INDESTRUCTIBLE,       "- indestructible"                      },
@@ -7887,6 +8160,7 @@ static struct
   { EL_EMC_KEY_6,      &level.score[SC_KEY],           TEXT_COLLECTING },
   { EL_EMC_KEY_7,      &level.score[SC_KEY],           TEXT_COLLECTING },
   { EL_EMC_KEY_8,      &level.score[SC_KEY],           TEXT_COLLECTING },
+  { EL_DC_KEY_WHITE,   &level.score[SC_KEY],           TEXT_COLLECTING },
   { EL_AMOEBA_WET,     &level.amoeba_speed,            TEXT_AMOEBA_SPEED },
   { EL_AMOEBA_DRY,     &level.amoeba_speed,            TEXT_AMOEBA_SPEED },
   { EL_AMOEBA_FULL,    &level.amoeba_speed,            TEXT_AMOEBA_SPEED },
@@ -8031,49 +8305,75 @@ static void DrawPropertiesConfig()
 
     /* these properties can be set for every player individually */
 
-    drawingarea_info[ED_DRAWING_ID_START_ELEMENT].value =
-      &level.start_element[player_nr];
-    drawingarea_info[ED_DRAWING_ID_ARTWORK_ELEMENT].value =
-      &level.artwork_element[player_nr];
-    drawingarea_info[ED_DRAWING_ID_EXPLOSION_ELEMENT].value =
-      &level.explosion_element[player_nr];
-
-    checkbutton_info[ED_CHECKBUTTON_ID_USE_START_ELEMENT].value =
-      &level.use_start_element[player_nr];
-    checkbutton_info[ED_CHECKBUTTON_ID_USE_ARTWORK_ELEMENT].value =
-      &level.use_artwork_element[player_nr];
-    checkbutton_info[ED_CHECKBUTTON_ID_USE_EXPLOSION_ELEMENT].value =
-      &level.use_explosion_element[player_nr];
-    checkbutton_info[ED_CHECKBUTTON_ID_INITIAL_GRAVITY].value =
-      &level.initial_player_gravity[player_nr];
-
-    selectbox_info[ED_SELECTBOX_ID_PLAYER_SPEED].value =
-      &level.initial_player_stepsize[player_nr];
-
-    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_CAN_FALL_INTO_ACID);
-    MapCheckbuttonGadget(properties_element == EL_SP_MURPHY ?
-                        ED_CHECKBUTTON_ID_SP_BLOCK_LAST_FIELD :
-                        ED_CHECKBUTTON_ID_BLOCK_LAST_FIELD);
-    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BLOCK_SNAP_FIELD);
-    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_CONTINUOUS_SNAPPING);
-    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_INSTANT_RELOCATION);
-    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_SHIFTED_RELOCATION);
-    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_USE_START_ELEMENT);
-    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_USE_ARTWORK_ELEMENT);
-    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_USE_EXPLOSION_ELEMENT);
-    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_INITIAL_GRAVITY);
-    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_CAN_PASS_TO_WALKABLE);
-
-    MapDrawingArea(ED_DRAWING_ID_START_ELEMENT);
-    MapDrawingArea(ED_DRAWING_ID_ARTWORK_ELEMENT);
-    MapDrawingArea(ED_DRAWING_ID_EXPLOSION_ELEMENT);
-
-    MapSelectboxGadget(ED_SELECTBOX_ID_PLAYER_SPEED);
+    if (edit_mode_properties == ED_MODE_PROPERTIES_CONFIG_1)
+    {
+      drawingarea_info[ED_DRAWING_ID_START_ELEMENT].value =
+       &level.start_element[player_nr];
+      drawingarea_info[ED_DRAWING_ID_ARTWORK_ELEMENT].value =
+       &level.artwork_element[player_nr];
+      drawingarea_info[ED_DRAWING_ID_EXPLOSION_ELEMENT].value =
+       &level.explosion_element[player_nr];
+
+      checkbutton_info[ED_CHECKBUTTON_ID_USE_START_ELEMENT].value =
+       &level.use_start_element[player_nr];
+      checkbutton_info[ED_CHECKBUTTON_ID_USE_ARTWORK_ELEMENT].value =
+       &level.use_artwork_element[player_nr];
+      checkbutton_info[ED_CHECKBUTTON_ID_USE_EXPLOSION_ELEMENT].value =
+       &level.use_explosion_element[player_nr];
+      checkbutton_info[ED_CHECKBUTTON_ID_INITIAL_GRAVITY].value =
+       &level.initial_player_gravity[player_nr];
+
+      selectbox_info[ED_SELECTBOX_ID_PLAYER_SPEED].value =
+       &level.initial_player_stepsize[player_nr];
+
+      MapCheckbuttonGadget(ED_CHECKBUTTON_ID_CAN_FALL_INTO_ACID);
+      MapCheckbuttonGadget(properties_element == EL_SP_MURPHY ?
+                          ED_CHECKBUTTON_ID_SP_BLOCK_LAST_FIELD :
+                          ED_CHECKBUTTON_ID_BLOCK_LAST_FIELD);
+      MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BLOCK_SNAP_FIELD);
+      MapCheckbuttonGadget(ED_CHECKBUTTON_ID_CONTINUOUS_SNAPPING);
+      MapCheckbuttonGadget(ED_CHECKBUTTON_ID_INSTANT_RELOCATION);
+      MapCheckbuttonGadget(ED_CHECKBUTTON_ID_SHIFTED_RELOCATION);
+      MapCheckbuttonGadget(ED_CHECKBUTTON_ID_USE_START_ELEMENT);
+      MapCheckbuttonGadget(ED_CHECKBUTTON_ID_USE_ARTWORK_ELEMENT);
+      MapCheckbuttonGadget(ED_CHECKBUTTON_ID_USE_EXPLOSION_ELEMENT);
+      MapCheckbuttonGadget(ED_CHECKBUTTON_ID_INITIAL_GRAVITY);
+      MapCheckbuttonGadget(ED_CHECKBUTTON_ID_CAN_PASS_TO_WALKABLE);
+
+      MapDrawingArea(ED_DRAWING_ID_START_ELEMENT);
+      MapDrawingArea(ED_DRAWING_ID_ARTWORK_ELEMENT);
+      MapDrawingArea(ED_DRAWING_ID_EXPLOSION_ELEMENT);
+
+      MapSelectboxGadget(ED_SELECTBOX_ID_PLAYER_SPEED);
+    }
+    else if (edit_mode_properties == ED_MODE_PROPERTIES_CONFIG_2)
+    {
+      drawingarea_info[ED_DRAWING_ID_INVENTORY_CONTENT].value =
+       &level.initial_inventory_content[player_nr][0];
+
+      counterbutton_info[ED_COUNTER_ID_INVENTORY_SIZE].value =
+       &level.initial_inventory_size[player_nr];
+
+      checkbutton_info[ED_CHECKBUTTON_ID_USE_INITIAL_INVENTORY].value =
+       &level.use_initial_inventory[player_nr];
+
+      /* draw checkbutton gadgets */
+      MapCheckbuttonGadget(ED_CHECKBUTTON_ID_USE_INITIAL_INVENTORY);
+
+      /* draw counter gadgets */
+      MapCounterButtons(ED_COUNTER_ID_INVENTORY_SIZE);
+
+      /* draw drawing area gadgets */
+      DrawPlayerInitialInventoryArea(properties_element);
+    }
   }
 
   if (IS_GEM(properties_element))
     MapCheckbuttonGadget(ED_CHECKBUTTON_ID_EM_SLIPPERY_GEMS);
 
+  if (properties_element == EL_EM_DYNAMITE)
+    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_EM_EXPLODES_BY_FIRE);
+
   if (COULD_MOVE_INTO_ACID(properties_element) &&
       !ELEM_IS_PLAYER(properties_element) &&
       (!IS_CUSTOM_ELEMENT(properties_element) ||
@@ -8220,6 +8520,7 @@ static void DrawPropertiesChangeDrawingAreas()
   {
     MapDrawingArea(ED_DRAWING_ID_CUSTOM_CHANGE_TARGET);
     MapDrawingArea(ED_DRAWING_ID_CUSTOM_CHANGE_TRIGGER);
+    MapDrawingArea(ED_DRAWING_ID_CUSTOM_CHANGE_ACTION);
 
     DrawCustomChangeContentArea();
   }
@@ -8330,12 +8631,18 @@ static void DrawPropertiesWindow()
   stick_element_properties_window = FALSE;
 
   /* make sure that previous properties edit mode exists for this element */
+  if (edit_mode_properties > ED_MODE_PROPERTIES_CONFIG_2 &&
+      !IS_CUSTOM_ELEMENT(properties_element))
+    edit_mode_properties = ED_MODE_PROPERTIES_CONFIG_2;
+
   if (edit_mode_properties > ED_MODE_PROPERTIES_CONFIG &&
+      !ELEM_IS_PLAYER(properties_element) &&
       !IS_CUSTOM_ELEMENT(properties_element))
     edit_mode_properties = ED_MODE_PROPERTIES_CONFIG;
 
   if (edit_mode_properties == ED_MODE_PROPERTIES_CONFIG &&
-      IS_CUSTOM_ELEMENT(properties_element))
+      (ELEM_IS_PLAYER(properties_element) ||
+       IS_CUSTOM_ELEMENT(properties_element)))
     edit_mode_properties = ED_MODE_PROPERTIES_CONFIG_1;
 
   CopyElementPropertiesToEditor(properties_element);
@@ -8351,7 +8658,7 @@ static void DrawPropertiesWindow()
   SetMainBackgroundImage(IMG_BACKGROUND_EDITOR);
   ClearField();
 
-#if 0
+#if 1
   DrawTextSCentered(ED_SETTINGS1_YPOS, FONT_TITLE_1, "Element Settings");
 #else
   DrawText(SX + ED_SETTINGS2_XPOS, SY + ED_SETTINGS1_YPOS,
@@ -8383,8 +8690,12 @@ static void DrawPropertiesWindow()
 
 static void UpdateCustomElementGraphicGadgets()
 {
+  struct ElementInfo *ei = &element_info[properties_element];
   int i;
 
+  ei->gfx_element = (ei->use_gfx_element ? ei->gfx_element_initial :
+                    properties_element);
+
   ModifyEditorElementList();
   RedrawDrawingElements();
 
@@ -10361,6 +10672,10 @@ static void HandleCounterButtons(struct GadgetInfo *gi)
       CopyGroupElementPropertiesToGame(properties_element);
       break;
 
+    case ED_COUNTER_ID_INVENTORY_SIZE:
+      DrawPlayerInitialInventoryArea(properties_element);
+      break;
+
     case ED_COUNTER_ID_ENVELOPE_XSIZE:
     case ED_COUNTER_ID_ENVELOPE_YSIZE:
       DrawEnvelopeTextArea(-1);
@@ -10457,8 +10772,15 @@ static void HandleTextbuttonGadgets(struct GadgetInfo *gi)
   int type_id = gi->custom_type_id;
   int i;
 
-  if (type_id >= ED_TEXTBUTTON_ID_PROPERTIES_FIRST &&
-      type_id <= ED_TEXTBUTTON_ID_PROPERTIES_LAST)
+  if (type_id >= ED_TEXTBUTTON_ID_LEVELINFO_FIRST &&
+      type_id <= ED_TEXTBUTTON_ID_LEVELINFO_LAST)
+  {
+    edit_mode_levelinfo = gi->custom_type_id;
+
+    DrawLevelInfoWindow();
+  }
+  else if (type_id >= ED_TEXTBUTTON_ID_PROPERTIES_FIRST &&
+          type_id <= ED_TEXTBUTTON_ID_PROPERTIES_LAST)
   {
     edit_mode_properties = gi->custom_type_id;
 
@@ -10924,11 +11246,13 @@ static void HandleControlButtons(struct GadgetInfo *gi)
 
        CloseDoor(DOOR_CLOSE_ALL);
 
+       BackToFront();          /* force redraw of undrawn special door */
+
        DrawCompleteVideoDisplay();
 
        level_editor_test_game = TRUE;
 
-       StartGameActions(FALSE, setup.autorecord, NEW_RANDOMIZE);
+       StartGameActions(FALSE, setup.autorecord, level.random_seed);
       }
       break;
 
@@ -11153,6 +11477,7 @@ void HandleLevelEditorIdle()
   static unsigned long action_delay = 0;
   unsigned long action_delay_value = GameFrameDelay;
   int xpos = 1, ypos = 2;
+  int i;
 
   if (edit_mode != ED_MODE_PROPERTIES)
     return;
@@ -11160,6 +11485,14 @@ void HandleLevelEditorIdle()
   if (!DelayReached(&action_delay, action_delay_value))
     return;
 
+  for (i = 0; i < ED_NUM_SELECTBOX; i++)
+  {
+    struct GadgetInfo *gi = level_editor_gadget[selectbox_info[i].gadget_id];
+
+    if (gi->mapped && gi->active && gi->selectbox.open)
+      return;
+  }
+
   DrawEditorElementAnimation(SX + xpos * TILEX,
                             SY + ypos * TILEY + MINI_TILEY / 2);
 
index 811d8f9ae87e01fdfc9b03eddfa96f93823a7160..278704e6763f9924142f2a6cc4c74c00f055773a 100644 (file)
@@ -223,6 +223,10 @@ void HandleOtherEvents(Event *event)
     case SDL_JOYBUTTONUP:
       HandleJoystickEvent(event);
       break;
+
+    case SDL_SYSWMEVENT:
+      HandleWindowManagerEvent(event);
+      break;
 #endif
 
     default:
@@ -413,6 +417,13 @@ void HandleClientMessageEvent(ClientMessageEvent *event)
     CloseAllAndExit(0);
 }
 
+void HandleWindowManagerEvent(Event *event)
+{
+#if defined(TARGET_SDL)
+  SDLHandleWindowManagerEvent(event);
+#endif
+}
+
 void HandleButton(int mx, int my, int button, int button_nr)
 {
   static int old_mx = 0, old_my = 0;
@@ -733,7 +744,7 @@ void HandleKey(Key key, int key_status)
   if (game_status == GAME_MODE_MAIN &&
       (key == setup.shortcut.toggle_pause || key == KSYM_space))
   {
-    StartGameActions(options.network, setup.autorecord, NEW_RANDOMIZE);
+    StartGameActions(options.network, setup.autorecord, level.random_seed);
 
     return;
   }
index 16b15ebdf747b2f96944c83b70a93ddb14811d22..7cde0e00f57ff12dd946995e06c50ef96f584d46 100644 (file)
@@ -28,7 +28,8 @@ void HandleButtonEvent(ButtonEvent *);
 void HandleMotionEvent(MotionEvent *);
 void HandleKeyEvent(KeyEvent *);
 void HandleFocusEvent(FocusChangeEvent *);
-void HandleClientMessageEvent(ClientMessageEvent *event);
+void HandleClientMessageEvent(ClientMessageEvent *);
+void HandleWindowManagerEvent(Event *);
 
 void HandleNoEvent(void);
 
index 3b51e6e28b92236f2126c769e29d3f78f924735a..c32777225a076a5a2477b678b15150dbe8b2a627 100644 (file)
@@ -182,6 +182,12 @@ static struct LevelFileConfigInfo chunk_config_INFO[] =
     &li.gems_needed,                   0
   },
 
+  {
+    -1,                                        -1,
+    TYPE_INTEGER,                      CONF_VALUE_32_BIT(2),
+    &li.random_seed,                   0
+  },
+
   {
     -1,                                        -1,
     TYPE_BOOLEAN,                      CONF_VALUE_8_BIT(2),
@@ -218,6 +224,12 @@ static struct LevelFileConfigInfo chunk_config_INFO[] =
     &li.dont_collide_with_bits,                ~0      /* default: always deadly */
   },
 
+  {
+    -1,                                        -1,
+    TYPE_BOOLEAN,                      CONF_VALUE_8_BIT(8),
+    &li.em_explodes_by_fire,           FALSE
+  },
+
   {
     -1,                                        -1,
     TYPE_INTEGER,                      CONF_VALUE_16_BIT(5),
@@ -311,6 +323,22 @@ static struct LevelFileConfigInfo chunk_config_ELEM[] =
     TYPE_ELEMENT,                      CONF_VALUE_16_BIT(3),
     &li.explosion_element[0],          EL_PLAYER_1
   },
+  {
+    EL_PLAYER_1,                       -1,
+    TYPE_BOOLEAN,                      CONF_VALUE_8_BIT(13),
+    &li.use_initial_inventory[0],      FALSE
+  },
+  {
+    EL_PLAYER_1,                       -1,
+    TYPE_BOOLEAN,                      CONF_VALUE_8_BIT(14),
+    &li.initial_inventory_size[0],     1
+  },
+  {
+    EL_PLAYER_1,                       -1,
+    TYPE_ELEMENT_LIST,                 CONF_VALUE_BYTES(1),
+    &li.initial_inventory_content[0][0],EL_EMPTY, NULL,
+    &li.initial_inventory_size[0],     1, MAX_INITIAL_INVENTORY_SIZE
+  },
 
   {
     EL_PLAYER_2,                       -1,
@@ -352,6 +380,22 @@ static struct LevelFileConfigInfo chunk_config_ELEM[] =
     TYPE_ELEMENT,                      CONF_VALUE_16_BIT(3),
     &li.explosion_element[1],          EL_PLAYER_2
   },
+  {
+    EL_PLAYER_2,                       -1,
+    TYPE_BOOLEAN,                      CONF_VALUE_8_BIT(13),
+    &li.use_initial_inventory[1],      FALSE
+  },
+  {
+    EL_PLAYER_2,                       -1,
+    TYPE_BOOLEAN,                      CONF_VALUE_8_BIT(14),
+    &li.initial_inventory_size[1],     1
+  },
+  {
+    EL_PLAYER_2,                       -1,
+    TYPE_ELEMENT_LIST,                 CONF_VALUE_BYTES(1),
+    &li.initial_inventory_content[1][0],EL_EMPTY, NULL,
+    &li.initial_inventory_size[1],     1, MAX_INITIAL_INVENTORY_SIZE
+  },
 
   {
     EL_PLAYER_3,                       -1,
@@ -393,6 +437,22 @@ static struct LevelFileConfigInfo chunk_config_ELEM[] =
     TYPE_ELEMENT,                      CONF_VALUE_16_BIT(3),
     &li.explosion_element[2],          EL_PLAYER_3
   },
+  {
+    EL_PLAYER_3,                       -1,
+    TYPE_BOOLEAN,                      CONF_VALUE_8_BIT(13),
+    &li.use_initial_inventory[2],      FALSE
+  },
+  {
+    EL_PLAYER_3,                       -1,
+    TYPE_BOOLEAN,                      CONF_VALUE_8_BIT(14),
+    &li.initial_inventory_size[2],     1
+  },
+  {
+    EL_PLAYER_3,                       -1,
+    TYPE_ELEMENT_LIST,                 CONF_VALUE_BYTES(1),
+    &li.initial_inventory_content[2][0],EL_EMPTY, NULL,
+    &li.initial_inventory_size[2],     1, MAX_INITIAL_INVENTORY_SIZE
+  },
 
   {
     EL_PLAYER_4,                       -1,
@@ -434,6 +494,22 @@ static struct LevelFileConfigInfo chunk_config_ELEM[] =
     TYPE_ELEMENT,                      CONF_VALUE_16_BIT(3),
     &li.explosion_element[3],          EL_PLAYER_4
   },
+  {
+    EL_PLAYER_4,                       -1,
+    TYPE_BOOLEAN,                      CONF_VALUE_8_BIT(13),
+    &li.use_initial_inventory[3],      FALSE
+  },
+  {
+    EL_PLAYER_4,                       -1,
+    TYPE_BOOLEAN,                      CONF_VALUE_8_BIT(14),
+    &li.initial_inventory_size[3],     1
+  },
+  {
+    EL_PLAYER_4,                       -1,
+    TYPE_ELEMENT_LIST,                 CONF_VALUE_BYTES(1),
+    &li.initial_inventory_content[3][0],EL_EMPTY, NULL,
+    &li.initial_inventory_size[3],     1, MAX_INITIAL_INVENTORY_SIZE
+  },
 
   {
     EL_EMERALD,                                -1,
@@ -806,8 +882,8 @@ static struct LevelFileConfigInfo chunk_config_CUSX_base[] =
   {
     -1,                                        -1,
     TYPE_ELEMENT,                      CONF_VALUE_16_BIT(1),
-    &xx_ei.gfx_element,                        EL_EMPTY_SPACE,
-    &yy_ei.gfx_element
+    &xx_ei.gfx_element_initial,                EL_EMPTY_SPACE,
+    &yy_ei.gfx_element_initial
   },
 
   {
@@ -1045,7 +1121,7 @@ static struct LevelFileConfigInfo chunk_config_CUSX_change[] =
   {
     -1,                                        -1,
     TYPE_ELEMENT,                      CONF_VALUE_16_BIT(5),
-    &xx_change.trigger_element,                EL_EMPTY_SPACE
+    &xx_change.initial_trigger_element,        EL_EMPTY_SPACE
   },
 
   {
@@ -1100,6 +1176,12 @@ static struct LevelFileConfigInfo chunk_config_CUSX_change[] =
     &xx_change.action_arg,             CA_ARG_UNDEFINED
   },
 
+  {
+    -1,                                        -1,
+    TYPE_ELEMENT,                      CONF_VALUE_16_BIT(7),
+    &xx_change.action_element,         EL_EMPTY_SPACE
+  },
+
   {
     -1,                                        -1,
     TYPE_CONTENT_LIST,                 CONF_VALUE_BYTES(1),
@@ -1132,7 +1214,7 @@ static struct LevelFileConfigInfo chunk_config_GRPX[] =
   {
     -1,                                        -1,
     TYPE_ELEMENT,                      CONF_VALUE_16_BIT(1),
-    &xx_ei.gfx_element,                        EL_EMPTY_SPACE
+    &xx_ei.gfx_element_initial,                EL_EMPTY_SPACE
   },
 
   {
@@ -1620,6 +1702,9 @@ static void setLevelInfoToDefaults(struct LevelInfo *level)
 
   level->changed = FALSE;
 
+  /* set all bug compatibility flags to "false" => do not emulate this bug */
+  level->use_action_after_change_bug = FALSE;
+
   if (leveldir_current == NULL)                /* only when dumping level */
     return;
 
@@ -1950,6 +2035,7 @@ int getMappedElement(int element)
 
     case EL_KEY_OBSOLETE:
       element = EL_KEY_1;
+      break;
 
     case EL_EM_KEY_1_FILE_OBSOLETE:
       element = EL_EM_KEY_1;
@@ -2355,7 +2441,7 @@ static int LoadLevel_CUS3(FILE *file, int chunk_size, struct LevelInfo *level)
     ReadUnusedBytesFromFile(file, 7);
 
     ei->use_gfx_element = getFile8Bit(file);
-    ei->gfx_element = getMappedElement(getFile16BitBE(file));
+    ei->gfx_element_initial = getMappedElement(getFile16BitBE(file));
 
     ei->collect_score_initial = getFile8Bit(file);
     ei->collect_count_initial = getFile8Bit(file);
@@ -2384,7 +2470,7 @@ static int LoadLevel_CUS3(FILE *file, int chunk_size, struct LevelInfo *level)
     ei->change->delay_random = getFile16BitBE(file);
     ei->change->delay_frames = getFile16BitBE(file);
 
-    ei->change->trigger_element = getMappedElement(getFile16BitBE(file));
+    ei->change->initial_trigger_element= getMappedElement(getFile16BitBE(file));
 
     ei->change->explode = getFile8Bit(file);
     ei->change->use_target_content = getFile8Bit(file);
@@ -2454,7 +2540,7 @@ static int LoadLevel_CUS4(FILE *file, int chunk_size, struct LevelInfo *level)
   ei->use_last_ce_value = getFile8Bit(file);
 
   ei->use_gfx_element = getFile8Bit(file);
-  ei->gfx_element = getMappedElement(getFile16BitBE(file));
+  ei->gfx_element_initial = getMappedElement(getFile16BitBE(file));
 
   ei->collect_score_initial = getFile8Bit(file);
   ei->collect_count_initial = getFile8Bit(file);
@@ -2517,7 +2603,7 @@ static int LoadLevel_CUS4(FILE *file, int chunk_size, struct LevelInfo *level)
     change->delay_random = getFile16BitBE(file);
     change->delay_frames = getFile16BitBE(file);
 
-    change->trigger_element = getMappedElement(getFile16BitBE(file));
+    change->initial_trigger_element = getMappedElement(getFile16BitBE(file));
 
     change->explode = getFile8Bit(file);
     change->use_target_content = getFile8Bit(file);
@@ -2587,7 +2673,7 @@ static int LoadLevel_GRP1(FILE *file, int chunk_size, struct LevelInfo *level)
   group->num_elements = getFile8Bit(file);
 
   ei->use_gfx_element = getFile8Bit(file);
-  ei->gfx_element = getMappedElement(getFile16BitBE(file));
+  ei->gfx_element_initial = getMappedElement(getFile16BitBE(file));
 
   group->choice_mode = getFile8Bit(file);
 
@@ -6239,7 +6325,7 @@ static void LoadLevel_InitVersion(struct LevelInfo *level, char *filename)
 
   /* try to detect and fix "Snake Bite" levels, which are broken with 3.2.0 */
   {
-    int element = EL_CUSTOM_START + 255;
+    int element = EL_CUSTOM_256;
     struct ElementInfo *ei = &element_info[element];
     struct ElementChangeInfo *change = &ei->change_page[0];
 
@@ -6259,9 +6345,40 @@ static void LoadLevel_InitVersion(struct LevelInfo *level, char *filename)
       change->target_element = EL_PLAYER_1;
   }
 
+  /* try to detect and fix "Zelda II" levels, which are broken with 3.2.5 */
+  {
+    int element = EL_CUSTOM_16;
+    struct ElementInfo *ei = &element_info[element];
+
+    /* This is needed to fix a problem that was caused by a bugfix in function
+       game.c/CheckTriggeredElementChangeExt() introduced with 3.2.5 that
+       corrects the behaviour when a custom element changes to another custom
+       element with a higher element number that has change actions defined.
+       Normally, only one change per frame is allowed for custom elements.
+       Therefore, it is checked if a custom element already changed in the
+       current frame; if it did, subsequent changes are suppressed.
+       Unfortunately, this is only checked for element changes, but not for
+       change actions, which are still executed. As the function above loops
+       through all custom elements from lower to higher, an element change
+       resulting in a lower CE number won't be checked again, while a target
+       element with a higher number will also be checked, and potential change
+       actions will get executed for this CE, too (which is wrong), while
+       further changes are ignored (which is correct). As this bugfix breaks
+       Zelda II (but no other levels), allow the previous, incorrect behaviour
+       for this outstanding level set to not break the game or existing tapes */
+
+    if (strncmp(leveldir_current->identifier, "zelda2", 6) == 0 ||
+       strncmp(ei->description, "scanline - row 1", 16) == 0)
+      level->use_action_after_change_bug = TRUE;
+  }
+
   /* not centering level after relocating player was default only in 3.2.3 */
   if (level->game_version == VERSION_IDENT(3,2,3,0))   /* (no pre-releases) */
     level->shifted_relocation = TRUE;
+
+  /* EM style elements always chain-exploded in R'n'D engine before 3.2.6 */
+  if (level->game_version < VERSION_IDENT(3,2,6,0))
+    level->em_explodes_by_fire = TRUE;
 }
 
 static void LoadLevel_InitElements(struct LevelInfo *level, char *filename)
@@ -6393,6 +6510,7 @@ static void LoadLevel_InitElements(struct LevelInfo *level, char *filename)
   /* initialize element properties for level editor etc. */
   InitElementPropertiesEngine(level->game_version);
   InitElementPropertiesAfterLoading(level->game_version);
+  InitElementPropertiesGfxElement();
 }
 
 static void LoadLevel_InitPlayfield(struct LevelInfo *level, char *filename)
@@ -6771,7 +6889,7 @@ static void SaveLevel_CUS3(FILE *file, struct LevelInfo *level,
        WriteUnusedBytesToFile(file, 7);
 
        putFile8Bit(file, ei->use_gfx_element);
-       putFile16BitBE(file, ei->gfx_element);
+       putFile16BitBE(file, ei->gfx_element_initial);
 
        putFile8Bit(file, ei->collect_score_initial);
        putFile8Bit(file, ei->collect_count_initial);
@@ -6797,7 +6915,7 @@ static void SaveLevel_CUS3(FILE *file, struct LevelInfo *level,
        putFile16BitBE(file, ei->change->delay_random);
        putFile16BitBE(file, ei->change->delay_frames);
 
-       putFile16BitBE(file, ei->change->trigger_element);
+       putFile16BitBE(file, ei->change->initial_trigger_element);
 
        putFile8Bit(file, ei->change->explode);
        putFile8Bit(file, ei->change->use_target_content);
@@ -6850,7 +6968,7 @@ static void SaveLevel_CUS4(FILE *file, struct LevelInfo *level, int element)
   putFile8Bit(file, ei->use_last_ce_value);
 
   putFile8Bit(file, ei->use_gfx_element);
-  putFile16BitBE(file, ei->gfx_element);
+  putFile16BitBE(file, ei->gfx_element_initial);
 
   putFile8Bit(file, ei->collect_score_initial);
   putFile8Bit(file, ei->collect_count_initial);
@@ -6909,7 +7027,7 @@ static void SaveLevel_CUS4(FILE *file, struct LevelInfo *level, int element)
     putFile16BitBE(file, change->delay_random);
     putFile16BitBE(file, change->delay_frames);
 
-    putFile16BitBE(file, change->trigger_element);
+    putFile16BitBE(file, change->initial_trigger_element);
 
     putFile8Bit(file, change->explode);
     putFile8Bit(file, change->use_target_content);
@@ -6961,7 +7079,7 @@ static void SaveLevel_GRP1(FILE *file, struct LevelInfo *level, int element)
   putFile8Bit(file, group->num_elements);
 
   putFile8Bit(file, ei->use_gfx_element);
-  putFile16BitBE(file, ei->gfx_element);
+  putFile16BitBE(file, ei->gfx_element_initial);
 
   putFile8Bit(file, group->choice_mode);
 
@@ -8013,9 +8131,8 @@ void SaveScore(int nr)
 #define SETUP_TOKEN_OVERRIDE_LEVEL_GRAPHICS    28
 #define SETUP_TOKEN_OVERRIDE_LEVEL_SOUNDS      29
 #define SETUP_TOKEN_OVERRIDE_LEVEL_MUSIC       30
-#define SETUP_TOKEN_AUTO_OVERRIDE_ARTWORK      31
 
-#define NUM_GLOBAL_SETUP_TOKENS                        32
+#define NUM_GLOBAL_SETUP_TOKENS                        31
 
 /* editor setup */
 #define SETUP_TOKEN_EDITOR_EL_BOULDERDASH      0
@@ -8140,10 +8257,9 @@ static struct TokenInfo global_setup_tokens[] =
   { TYPE_STRING, &si.graphics_set,     "graphics_set"                  },
   { TYPE_STRING, &si.sounds_set,       "sounds_set"                    },
   { TYPE_STRING, &si.music_set,                "music_set"                     },
-  { TYPE_SWITCH, &si.override_level_graphics, "override_level_graphics"        },
-  { TYPE_SWITCH, &si.override_level_sounds,   "override_level_sounds"  },
-  { TYPE_SWITCH, &si.override_level_music,    "override_level_music"   },
-  { TYPE_SWITCH, &si.auto_override_artwork,   "auto_override_artwork"  },
+  { TYPE_SWITCH3,&si.override_level_graphics, "override_level_graphics"        },
+  { TYPE_SWITCH3,&si.override_level_sounds,   "override_level_sounds"  },
+  { TYPE_SWITCH3,&si.override_level_music,    "override_level_music"   },
 };
 
 static boolean not_used = FALSE;
@@ -8298,7 +8414,6 @@ static void setSetupInfoToDefaults(struct SetupInfo *si)
   si->override_level_graphics = FALSE;
   si->override_level_sounds = FALSE;
   si->override_level_music = FALSE;
-  si->auto_override_artwork = FALSE;
 
   si->editor.el_boulderdash            = TRUE;
   si->editor.el_emerald_mine           = TRUE;
@@ -8357,7 +8472,9 @@ static void setSetupInfoToDefaults(struct SetupInfo *si)
 #if defined(CREATE_SPECIAL_EDITION_RND_JUE)
   si->handicap = FALSE;
   si->fullscreen = TRUE;
-  si->auto_override_artwork = TRUE;
+  si->override_level_graphics = AUTO;
+  si->override_level_sounds = AUTO;
+  si->override_level_music = AUTO;
 #endif
 }
 
@@ -9626,9 +9743,9 @@ void LoadHelpTextInfo()
 }
 
 
-/* ------------------------------------------------------------------------- *
- * convert levels
- * ------------------------------------------------------------------------- */
+/* ------------------------------------------------------------------------- */
+/* convert levels                                                            */
+/* ------------------------------------------------------------------------- */
 
 #define MAX_NUM_CONVERT_LEVELS         1000
 
@@ -9738,3 +9855,165 @@ void ConvertLevels()
 
   CloseAllAndExit(0);
 }
+
+
+/* ------------------------------------------------------------------------- */
+/* create and save images for use in level sketches (raw BMP format)         */
+/* ------------------------------------------------------------------------- */
+
+void CreateLevelSketchImages()
+{
+#if defined(TARGET_SDL)
+  Bitmap *bitmap1;
+  Bitmap *bitmap2;
+  int i;
+
+  InitElementPropertiesGfxElement();
+
+  bitmap1 = CreateBitmap(TILEX, TILEY, DEFAULT_DEPTH);
+  bitmap2 = CreateBitmap(MINI_TILEX, MINI_TILEY, DEFAULT_DEPTH);
+
+  for (i = 0; i < NUM_FILE_ELEMENTS; i++)
+  {
+    Bitmap *src_bitmap;
+    int src_x, src_y;
+    int element = getMappedElement(i);
+    int graphic = el2edimg(element);
+    char basename1[16];
+    char basename2[16];
+    char *filename1;
+    char *filename2;
+
+    sprintf(basename1, "%03d.bmp", i);
+    sprintf(basename2, "%03ds.bmp", i);
+
+    filename1 = getPath2(global.create_images_dir, basename1);
+    filename2 = getPath2(global.create_images_dir, basename2);
+
+    getGraphicSource(graphic, 0, &src_bitmap, &src_x, &src_y);
+    BlitBitmap(src_bitmap, bitmap1, src_x, src_y, TILEX, TILEY, 0, 0);
+
+    if (SDL_SaveBMP(bitmap1->surface, filename1) != 0)
+      Error(ERR_EXIT, "cannot save level sketch image file '%s'", filename1);
+
+    getMiniGraphicSource(graphic, &src_bitmap, &src_x, &src_y);
+    BlitBitmap(src_bitmap, bitmap2, src_x, src_y, MINI_TILEX, MINI_TILEY, 0, 0);
+
+    if (SDL_SaveBMP(bitmap2->surface, filename2) != 0)
+      Error(ERR_EXIT, "cannot save level sketch image file '%s'", filename2);
+
+    free(filename1);
+    free(filename2);
+
+    if (options.debug)
+      printf("%03d `%03d%c", i, i, (i % 10 < 9 ? ' ' : '\n'));
+  }
+
+  FreeBitmap(bitmap1);
+  FreeBitmap(bitmap2);
+
+  if (options.debug)
+    printf("\n");
+
+  Error(ERR_INFO, "%d normal and small images created", NUM_FILE_ELEMENTS);
+
+  CloseAllAndExit(0);
+#endif
+}
+
+
+/* ------------------------------------------------------------------------- */
+/* create and save images for custom and group elements (raw BMP format)     */
+/* ------------------------------------------------------------------------- */
+
+void CreateCustomElementImages()
+{
+#if defined(TARGET_SDL)
+  char *filename = "graphics.classic/RocksCE.bmp";
+  Bitmap *bitmap;
+  Bitmap *src_bitmap;
+  int dummy_graphic = IMG_CUSTOM_99;
+  int yoffset_ce = 0;
+  int yoffset_ge = (TILEY * NUM_CUSTOM_ELEMENTS / 16);
+  int src_x, src_y;
+  int i;
+
+  bitmap = CreateBitmap(TILEX * 16 * 2,
+                       TILEY * (NUM_CUSTOM_ELEMENTS + NUM_GROUP_ELEMENTS) / 16,
+                       DEFAULT_DEPTH);
+
+  getGraphicSource(dummy_graphic, 0, &src_bitmap, &src_x, &src_y);
+
+  for (i = 0; i < NUM_CUSTOM_ELEMENTS; i++)
+  {
+    int x = i % 16;
+    int y = i / 16;
+    int ii = i + 1;
+    int j;
+
+    BlitBitmap(src_bitmap, bitmap, 0, 0, TILEX, TILEY,
+              TILEX * x, TILEY * y + yoffset_ce);
+
+    BlitBitmap(src_bitmap, bitmap, 0, TILEY, TILEX, TILEY,
+              TILEX * x + TILEX * 16, TILEY * y + yoffset_ce);
+
+    for (j = 2; j >= 0; j--)
+    {
+      int c = ii % 10;
+
+      BlitBitmap(src_bitmap, bitmap, TILEX + c * 7, 0, 6, 10,
+                TILEX * x + 6 + j * 7,
+                TILEY * y + 11 + yoffset_ce);
+
+      BlitBitmap(src_bitmap, bitmap, TILEX + c * 8, TILEY, 6, 10,
+                TILEX * 16 + TILEX * x + 6 + j * 8,
+                TILEY * y + 10 + yoffset_ce);
+
+      ii /= 10;
+    }
+  }
+
+  for (i = 0; i < NUM_GROUP_ELEMENTS; i++)
+  {
+    int x = i % 16;
+    int y = i / 16;
+    int ii = i + 1;
+    int j;
+
+    BlitBitmap(src_bitmap, bitmap, 0, 0, TILEX, TILEY,
+              TILEX * x, TILEY * y + yoffset_ge);
+
+    BlitBitmap(src_bitmap, bitmap, 0, TILEY, TILEX, TILEY,
+              TILEX * x + TILEX * 16, TILEY * y + yoffset_ge);
+
+    for (j = 1; j >= 0; j--)
+    {
+      int c = ii % 10;
+
+      BlitBitmap(src_bitmap, bitmap, TILEX + c * 10, 11, 10, 10,
+                TILEX * x + 6 + j * 10,
+                TILEY * y + 11 + yoffset_ge);
+
+      BlitBitmap(src_bitmap, bitmap, TILEX + c * 8, TILEY + 12, 6, 10,
+                TILEX * 16 + TILEX * x + 10 + j * 8,
+                TILEY * y + 10 + yoffset_ge);
+
+      ii /= 10;
+    }
+  }
+
+  if (SDL_SaveBMP(bitmap->surface, filename) != 0)
+    Error(ERR_EXIT, "cannot save CE graphics file '%s'", filename);
+
+  FreeBitmap(bitmap);
+
+  CloseAllAndExit(0);
+#endif
+}
+
+#if 0
+void CreateLevelSketchImages_TEST()
+{
+  void CreateCustomElementImages()
+}
+#endif
index 51509f8cbc03d3e42a7c918faec1df3d3c4db840..75dc34601e02e72b237e06b1f872f102aa1bb0ed 100644 (file)
@@ -68,6 +68,7 @@ void LoadMusicInfo();
 void LoadHelpAnimInfo();
 void LoadHelpTextInfo();
 
-void ConvertLevels(void);
+void ConvertLevels();
+void CreateLevelSketchImages();
 
 #endif /* FILES_H */
index 708c0510debe1782b44f865456fb4c26785d6ff9..d4e4cf3f28c69bc7331151108bc03d011410b082 100644 (file)
 
 #define USE_FIX_KILLED_BY_NON_WALKABLE (USE_NEW_STUFF          * 1)
 #define USE_FIX_IMPACT_COLLISION       (USE_NEW_STUFF          * 1)
+#define USE_FIX_CE_ACTION_WITH_PLAYER  (USE_NEW_STUFF          * 1)
+#define USE_FIX_NO_ACTION_AFTER_CHANGE (USE_NEW_STUFF          * 1)
+
+#define USE_PLAYER_REANIMATION         (USE_NEW_STUFF          * 1)
 
 #define USE_GFX_RESET_WHEN_NOT_MOVING  (USE_NEW_STUFF          * 1)
 
+#define USE_NEW_PLAYER_ASSIGNMENTS     (USE_NEW_STUFF          * 1)
+
+#define USE_DELAYED_GFX_REDRAW         (USE_NEW_STUFF          * 0)
+
+#if USE_DELAYED_GFX_REDRAW
+#define TEST_DrawLevelField(x, y)                              \
+       GfxRedraw[x][y] |= GFX_REDRAW_TILE
+#define TEST_DrawLevelFieldCrumbledSand(x, y)                  \
+       GfxRedraw[x][y] |= GFX_REDRAW_TILE_CRUMBLED
+#define TEST_DrawLevelFieldCrumbledSandNeighbours(x, y)                \
+       GfxRedraw[x][y] |= GFX_REDRAW_TILE_CRUMBLED_NEIGHBOURS
+#define TEST_DrawTwinkleOnField(x, y)                          \
+       GfxRedraw[x][y] |= GFX_REDRAW_TILE_TWINKLED
+#else
+#define TEST_DrawLevelField(x, y)                              \
+            DrawLevelField(x, y)
+#define TEST_DrawLevelFieldCrumbledSand(x, y)                  \
+            DrawLevelFieldCrumbledSand(x, y)
+#define TEST_DrawLevelFieldCrumbledSandNeighbours(x, y)                \
+            DrawLevelFieldCrumbledSandNeighbours(x, y)
+#define TEST_DrawTwinkleOnField(x, y)                          \
+            DrawTwinkleOnField(x, y)
+#endif
+
 
 /* for DigField() */
 #define DF_NO_PUSH             0
@@ -1033,7 +1061,10 @@ static boolean MovePlayer(struct PlayerInfo *, int, int);
 static void ScrollPlayer(struct PlayerInfo *, int);
 static void ScrollScreen(struct PlayerInfo *, int);
 
-int DigField(struct PlayerInfo *, int, int, int, int, int, int, int);
+static int DigField(struct PlayerInfo *, int, int, int, int, int, int, int);
+static boolean DigFieldByCE(int, int, int);
+static boolean SnapField(struct PlayerInfo *, int, int);
+static boolean DropElement(struct PlayerInfo *);
 
 static void InitBeltMovement(void);
 static void CloseAllOpenTimegates(void);
@@ -1100,14 +1131,12 @@ void TestIfBadThingRunsIntoPlayer(int, int, int);
 void TestIfFriendTouchesBadThing(int, int);
 void TestIfBadThingTouchesFriend(int, int);
 void TestIfBadThingTouchesOtherBadThing(int, int);
+void TestIfGoodThingGetsHitByBadThing(int, int, int);
 
 void KillPlayer(struct PlayerInfo *);
 void BuryPlayer(struct PlayerInfo *);
 void RemovePlayer(struct PlayerInfo *);
 
-boolean SnapField(struct PlayerInfo *, int, int);
-boolean DropElement(struct PlayerInfo *);
-
 static int getInvisibleActiveFromInvisibleElement(int);
 static int getInvisibleFromInvisibleActiveElement(int);
 
@@ -1140,6 +1169,8 @@ static int recursion_loop_depth;
 static boolean recursion_loop_detected;
 static boolean recursion_loop_element;
 
+static int map_player_action[MAX_PLAYERS];
+
 
 /* ------------------------------------------------------------------------- */
 /* definition of elements that automatically change to other elements after  */
@@ -1698,6 +1729,7 @@ static void InitPlayerField(int x, int y, int element, boolean init_game)
       }
       else
       {
+       stored_player[0].initial_element = element;
        stored_player[0].use_murphy = TRUE;
 
        if (!level.use_artwork_element[0])
@@ -1756,6 +1788,17 @@ static void InitPlayerField(int x, int y, int element, boolean init_game)
     player->jx = player->last_jx = x;
     player->jy = player->last_jy = y;
   }
+
+#if USE_PLAYER_REANIMATION
+  if (!init_game)
+  {
+    int player_nr = GET_PLAYER_NR(element);
+    struct PlayerInfo *player = &stored_player[player_nr];
+
+    if (player->active && player->killed)
+      player->reanimated = TRUE; /* if player was just killed, reanimate him */
+  }
+#endif
 }
 
 static void InitField(int x, int y, boolean init_game)
@@ -1943,6 +1986,34 @@ static void InitField(int x, int y, boolean init_game)
        Feld[x][y] = EL_EMC_MAGIC_BALL_SWITCH_ACTIVE;
       break;
 
+    case EL_TRIGGER_PLAYER:
+    case EL_TRIGGER_ELEMENT:
+    case EL_TRIGGER_CE_VALUE:
+    case EL_TRIGGER_CE_SCORE:
+    case EL_SELF:
+    case EL_ANY_ELEMENT:
+    case EL_CURRENT_CE_VALUE:
+    case EL_CURRENT_CE_SCORE:
+    case EL_PREV_CE_1:
+    case EL_PREV_CE_2:
+    case EL_PREV_CE_3:
+    case EL_PREV_CE_4:
+    case EL_PREV_CE_5:
+    case EL_PREV_CE_6:
+    case EL_PREV_CE_7:
+    case EL_PREV_CE_8:
+    case EL_NEXT_CE_1:
+    case EL_NEXT_CE_2:
+    case EL_NEXT_CE_3:
+    case EL_NEXT_CE_4:
+    case EL_NEXT_CE_5:
+    case EL_NEXT_CE_6:
+    case EL_NEXT_CE_7:
+    case EL_NEXT_CE_8:
+      /* reference elements should not be used on the playfield */
+      Feld[x][y] = EL_EMPTY;
+      break;
+
     default:
       if (IS_CUSTOM_ELEMENT(element))
       {
@@ -2383,35 +2454,38 @@ void UpdateGameControlValues()
 
     if (gpc->type == TYPE_ELEMENT)
     {
-      int last_anim_random_frame = gfx.anim_random_frame;
-      int element = gpc->value;
-      int graphic = el2panelimg(element);
-
-      if (gpc->value != gpc->last_value)
-      {
-       gpc->gfx_frame = 0;
-       gpc->gfx_random = INIT_GFX_RANDOM();
-      }
-      else
+      if (gpc->value != EL_UNDEFINED && gpc->value != EL_EMPTY)
       {
-       gpc->gfx_frame++;
+       int last_anim_random_frame = gfx.anim_random_frame;
+       int element = gpc->value;
+       int graphic = el2panelimg(element);
 
-       if (ANIM_MODE(graphic) == ANIM_RANDOM &&
-           IS_NEXT_FRAME(gpc->gfx_frame, graphic))
+       if (gpc->value != gpc->last_value)
+       {
+         gpc->gfx_frame = 0;
          gpc->gfx_random = INIT_GFX_RANDOM();
-      }
+       }
+       else
+       {
+         gpc->gfx_frame++;
+
+         if (ANIM_MODE(graphic) == ANIM_RANDOM &&
+             IS_NEXT_FRAME(gpc->gfx_frame, graphic))
+           gpc->gfx_random = INIT_GFX_RANDOM();
+       }
 
-      if (ANIM_MODE(graphic) == ANIM_RANDOM)
-       gfx.anim_random_frame = gpc->gfx_random;
+       if (ANIM_MODE(graphic) == ANIM_RANDOM)
+         gfx.anim_random_frame = gpc->gfx_random;
 
-      if (ANIM_MODE(graphic) == ANIM_CE_SCORE)
-       gpc->gfx_frame = element_info[element].collect_score;
+       if (ANIM_MODE(graphic) == ANIM_CE_SCORE)
+         gpc->gfx_frame = element_info[element].collect_score;
 
-      gpc->frame = getGraphicAnimationFrame(el2panelimg(gpc->value),
-                                           gpc->gfx_frame);
+       gpc->frame = getGraphicAnimationFrame(el2panelimg(gpc->value),
+                                             gpc->gfx_frame);
 
-      if (ANIM_MODE(graphic) == ANIM_RANDOM)
-       gfx.anim_random_frame = last_anim_random_frame;
+       if (ANIM_MODE(graphic) == ANIM_RANDOM)
+         gfx.anim_random_frame = last_anim_random_frame;
+      }
     }
   }
 }
@@ -3313,7 +3387,7 @@ static void InitGameEngine()
     SET_PROPERTY(ch_delay->element, EP_CAN_CHANGE_OR_HAS_ACTION, TRUE);
   }
 
-  /* ---------- initialize internal run-time variables ------------- */
+  /* ---------- initialize internal run-time variables --------------------- */
 
   for (i = 0; i < NUM_CUSTOM_ELEMENTS; i++)
   {
@@ -3351,6 +3425,27 @@ static void InitGameEngine()
     }
   }
 
+#if 1
+  /* ---------- initialize reference elements in change conditions --------- */
+
+  for (i = 0; i < NUM_CUSTOM_ELEMENTS; i++)
+  {
+    int element = EL_CUSTOM_START + i;
+    struct ElementInfo *ei = &element_info[element];
+
+    for (j = 0; j < ei->num_change_pages; j++)
+    {
+      int trigger_element = ei->change_page[j].initial_trigger_element;
+
+      if (trigger_element >= EL_PREV_CE_8 &&
+         trigger_element <= EL_NEXT_CE_8)
+       trigger_element = RESOLVED_REFERENCE_ELEMENT(element, trigger_element);
+
+      ei->change_page[j].trigger_element = trigger_element;
+    }
+  }
+#endif
+
   /* ---------- initialize run-time trigger player and element ------------- */
 
   for (i = 0; i < NUM_CUSTOM_ELEMENTS; i++)
@@ -3360,8 +3455,8 @@ static void InitGameEngine()
     for (j = 0; j < ei->num_change_pages; j++)
     {
       ei->change_page[j].actual_trigger_element = EL_EMPTY;
-      ei->change_page[j].actual_trigger_player = EL_PLAYER_1;
-      ei->change_page[j].actual_trigger_player_bits = CH_PLAYER_1;
+      ei->change_page[j].actual_trigger_player = EL_EMPTY;
+      ei->change_page[j].actual_trigger_player_bits = CH_PLAYER_NONE;
       ei->change_page[j].actual_trigger_side = CH_SIDE_NONE;
       ei->change_page[j].actual_trigger_ce_value = 0;
       ei->change_page[j].actual_trigger_ce_score = 0;
@@ -3589,6 +3684,11 @@ void InitGame()
   boolean emulate_sp = TRUE;   /* unless non-SUPAPLEX    elements found */
 #if 0
   boolean do_fading = (game_status == GAME_MODE_MAIN);
+#endif
+#if 1
+  int initial_move_dir = MV_DOWN;
+#else
+  int initial_move_dir = MV_NONE;
 #endif
   int i, j, x, y;
 
@@ -3610,7 +3710,10 @@ void InitGame()
 
     player->present = FALSE;
     player->active = FALSE;
+    player->mapped = FALSE;
+
     player->killed = FALSE;
+    player->reanimated = FALSE;
 
     player->action = 0;
     player->effective_action = 0;
@@ -3634,18 +3737,19 @@ void InitGame()
     player->dynabombs_left = 0;
     player->dynabomb_xl = FALSE;
 
-    player->MovDir = MV_NONE;
+    player->MovDir = initial_move_dir;
     player->MovPos = 0;
     player->GfxPos = 0;
-    player->GfxDir = MV_NONE;
+    player->GfxDir = initial_move_dir;
     player->GfxAction = ACTION_DEFAULT;
     player->Frame = 0;
     player->StepFrame = 0;
 
-    player->use_murphy = FALSE;
+    player->initial_element = player->element_nr;
     player->artwork_element =
       (level.use_artwork_element[i] ? level.artwork_element[i] :
        player->element_nr);
+    player->use_murphy = FALSE;
 
     player->block_last_field = FALSE;  /* initialized in InitPlayerField() */
     player->block_delay_adjustment = 0;        /* initialized in InitPlayerField() */
@@ -3658,7 +3762,7 @@ void InitGame()
 
     player->step_counter = 0;
 
-    player->last_move_dir = MV_NONE;
+    player->last_move_dir = initial_move_dir;
 
     player->is_active = FALSE;
 
@@ -3682,7 +3786,7 @@ void InitGame()
     player->anim_delay_counter = 0;
     player->post_delay_counter = 0;
 
-    player->dir_waiting = MV_NONE;
+    player->dir_waiting = initial_move_dir;
     player->action_waiting = ACTION_DEFAULT;
     player->last_action_waiting = ACTION_DEFAULT;
     player->special_action_bored = ACTION_DEFAULT;
@@ -3715,6 +3819,26 @@ void InitGame()
     player->inventory_infinite_element = EL_UNDEFINED;
     player->inventory_size = 0;
 
+    if (level.use_initial_inventory[i])
+    {
+      for (j = 0; j < level.initial_inventory_size[i]; j++)
+      {
+       int element = level.initial_inventory_content[i][j];
+       int collect_count = element_info[element].collect_count_initial;
+       int k;
+
+       if (!IS_CUSTOM_ELEMENT(element))
+         collect_count = 1;
+
+       if (collect_count == 0)
+         player->inventory_infinite_element = element;
+       else
+         for (k = 0; k < collect_count; k++)
+           if (player->inventory_size < MAX_INVENTORY_SIZE)
+             player->inventory_element[player->inventory_size++] = element;
+      }
+    }
+
     DigField(player, 0, 0, 0, 0, 0, 0, DF_NO_PUSH);
     SnapField(player, 0, 0);
 
@@ -3728,6 +3852,8 @@ void InitGame()
     player->LevelSolved_SaveScore = FALSE;
     player->LevelSolved_CountingTime = 0;
     player->LevelSolved_CountingScore = 0;
+
+    map_player_action[i] = i;
   }
 
   network_player_action_received = FALSE;
@@ -3831,6 +3957,7 @@ void InitGame()
     GfxElement[x][y] = EL_UNDEFINED;
     GfxAction[x][y] = ACTION_DEFAULT;
     GfxDir[x][y] = MV_NONE;
+    GfxRedraw[x][y] = GFX_REDRAW_NONE;
   }
 
   SCAN_PLAYFIELD(x, y)
@@ -3919,6 +4046,124 @@ void InitGame()
     if (game.belt_dir[i] == MV_NONE)
       game.belt_dir_nr[i] = 3;         /* not moving, next moving left */
 
+#if USE_NEW_PLAYER_ASSIGNMENTS
+  /* !!! SAME AS init.c:InitPlayerInfo() -- FIX THIS !!! */
+  /* choose default local player */
+  local_player = &stored_player[0];
+
+  for (i = 0; i < MAX_PLAYERS; i++)
+    stored_player[i].connected = FALSE;
+
+  local_player->connected = TRUE;
+  /* !!! SAME AS init.c:InitPlayerInfo() -- FIX THIS !!! */
+
+  if (tape.playing)
+  {
+    /* try to guess locally connected team mode players (needed for correct
+       assignment of player figures from level to locally playing players) */
+
+    for (i = 0; i < MAX_PLAYERS; i++)
+      if (tape.player_participates[i])
+       stored_player[i].connected = TRUE;
+  }
+  else if (setup.team_mode && !options.network)
+  {
+    /* try to guess locally connected team mode players (needed for correct
+       assignment of player figures from level to locally playing players) */
+
+    for (i = 0; i < MAX_PLAYERS; i++)
+      if (setup.input[i].use_joystick ||
+         setup.input[i].key.left != KSYM_UNDEFINED)
+       stored_player[i].connected = TRUE;
+  }
+
+#if 0
+  for (i = 0; i < MAX_PLAYERS; i++)
+    printf("::: player %d: %s\n", i,
+          (stored_player[i].connected ? "connected" : "not connected"));
+
+  for (i = 0; i < MAX_PLAYERS; i++)
+    printf("::: player %d: %s\n", i,
+          (stored_player[i].present ? "present" : "not present"));
+#endif
+
+  /* check if any connected player was not found in playfield */
+  for (i = 0; i < MAX_PLAYERS; i++)
+  {
+    struct PlayerInfo *player = &stored_player[i];
+
+    if (player->connected && !player->present)
+    {
+      struct PlayerInfo *field_player = NULL;
+
+#if 0
+      printf("::: looking for field player for player %d ...\n", i);
+#endif
+
+      /* assign first free player found that is present in the playfield */
+
+      /* first try: look for unmapped playfield player that is not connected */
+      if (field_player == NULL)
+       for (j = 0; j < MAX_PLAYERS; j++)
+         if (stored_player[j].present &&
+             !stored_player[j].mapped &&
+             !stored_player[j].connected)
+           field_player = &stored_player[j];
+
+      /* second try: look for *any* unmapped playfield player */
+      if (field_player == NULL)
+       for (j = 0; j < MAX_PLAYERS; j++)
+         if (stored_player[j].present &&
+             !stored_player[j].mapped)
+           field_player = &stored_player[j];
+
+      if (field_player != NULL)
+      {
+       int jx = field_player->jx, jy = field_player->jy;
+
+#if 0
+       printf("::: found player figure %d\n", field_player->index_nr);
+#endif
+
+       player->present = FALSE;
+       player->active = FALSE;
+
+       field_player->present = TRUE;
+       field_player->active = TRUE;
+
+       /*
+       player->initial_element = field_player->initial_element;
+       player->artwork_element = field_player->artwork_element;
+
+       player->block_last_field       = field_player->block_last_field;
+       player->block_delay_adjustment = field_player->block_delay_adjustment;
+       */
+
+       StorePlayer[jx][jy] = field_player->element_nr;
+
+       field_player->jx = field_player->last_jx = jx;
+       field_player->jy = field_player->last_jy = jy;
+
+       if (local_player == player)
+         local_player = field_player;
+
+       map_player_action[field_player->index_nr] = i;
+
+       field_player->mapped = TRUE;
+
+#if 0
+       printf("::: map_player_action[%d] == %d\n",
+              field_player->index_nr, i);
+#endif
+      }
+    }
+
+    if (player->connected && player->present)
+      player->mapped = TRUE;
+  }
+
+#else
+
   /* check if any connected player was not found in playfield */
   for (i = 0; i < MAX_PLAYERS; i++)
   {
@@ -3928,24 +4173,26 @@ void InitGame()
     {
       for (j = 0; j < MAX_PLAYERS; j++)
       {
-       struct PlayerInfo *some_player = &stored_player[j];
-       int jx = some_player->jx, jy = some_player->jy;
+       struct PlayerInfo *field_player = &stored_player[j];
+       int jx = field_player->jx, jy = field_player->jy;
 
        /* assign first free player found that is present in the playfield */
-       if (some_player->present && !some_player->connected)
+       if (field_player->present && !field_player->connected)
        {
          player->present = TRUE;
          player->active = TRUE;
 
-         some_player->present = FALSE;
-         some_player->active = FALSE;
+         field_player->present = FALSE;
+         field_player->active = FALSE;
 
-         player->artwork_element = some_player->artwork_element;
+         player->initial_element = field_player->initial_element;
+         player->artwork_element = field_player->artwork_element;
 
-         player->block_last_field       = some_player->block_last_field;
-         player->block_delay_adjustment = some_player->block_delay_adjustment;
+         player->block_last_field       = field_player->block_last_field;
+         player->block_delay_adjustment = field_player->block_delay_adjustment;
 
          StorePlayer[jx][jy] = player->element_nr;
+
          player->jx = player->last_jx = jx;
          player->jy = player->last_jy = jy;
 
@@ -3954,14 +4201,35 @@ void InitGame()
       }
     }
   }
+#endif
+
+#if 0
+  printf("::: local_player->present == %d\n", local_player->present);
+#endif
 
   if (tape.playing)
   {
     /* when playing a tape, eliminate all players who do not participate */
 
+#if USE_NEW_PLAYER_ASSIGNMENTS
+    for (i = 0; i < MAX_PLAYERS; i++)
+    {
+      if (stored_player[i].active &&
+         !tape.player_participates[map_player_action[i]])
+      {
+       struct PlayerInfo *player = &stored_player[i];
+       int jx = player->jx, jy = player->jy;
+
+       player->active = FALSE;
+       StorePlayer[jx][jy] = 0;
+       Feld[jx][jy] = EL_EMPTY;
+      }
+    }
+#else
     for (i = 0; i < MAX_PLAYERS; i++)
     {
-      if (stored_player[i].active && !tape.player_participates[i])
+      if (stored_player[i].active &&
+         !tape.player_participates[i])
       {
        struct PlayerInfo *player = &stored_player[i];
        int jx = player->jx, jy = player->jy;
@@ -3971,6 +4239,7 @@ void InitGame()
        Feld[jx][jy] = EL_EMPTY;
       }
     }
+#endif
   }
   else if (!options.network && !setup.team_mode)       /* && !tape.playing */
   {
@@ -4001,9 +4270,15 @@ void InitGame()
   /* when recording the game, store which players take part in the game */
   if (tape.recording)
   {
+#if USE_NEW_PLAYER_ASSIGNMENTS
+    for (i = 0; i < MAX_PLAYERS; i++)
+      if (stored_player[i].connected)
+       tape.player_participates[i] = TRUE;
+#else
     for (i = 0; i < MAX_PLAYERS; i++)
       if (stored_player[i].active)
        tape.player_participates[i] = TRUE;
+#endif
   }
 
   if (options.debug)
@@ -5061,6 +5336,10 @@ static void RemoveField(int x, int y)
   GfxElement[x][y] = EL_UNDEFINED;
   GfxAction[x][y] = ACTION_DEFAULT;
   GfxDir[x][y] = MV_NONE;
+#if 0
+  /* !!! this would prevent the removed tile from being redrawn !!! */
+  GfxRedraw[x][y] = GFX_REDRAW_NONE;
+#endif
 }
 
 void RemoveMovingField(int x, int y)
@@ -5086,7 +5365,7 @@ void RemoveMovingField(int x, int y)
 
       Store[oldx][oldy] = Store2[oldx][oldy] = 0;
 
-      DrawLevelField(oldx, oldy);
+      TEST_DrawLevelField(oldx, oldy);
 
       return;
     }
@@ -5115,8 +5394,8 @@ void RemoveMovingField(int x, int y)
   if (next_element != EL_UNDEFINED)
     Feld[oldx][oldy] = next_element;
 
-  DrawLevelField(oldx, oldy);
-  DrawLevelField(newx, newy);
+  TEST_DrawLevelField(oldx, oldy);
+  TEST_DrawLevelField(newx, newy);
 }
 
 void DrawDynamite(int x, int y)
@@ -5224,8 +5503,6 @@ void DrawRelocateScreen(int old_x, int old_y, int x, int y, int move_dir,
 
   if (quick_relocation)
   {
-    int offset = game.scroll_delay_value;
-
     if (!IN_VIS_FIELD(SCREENX(x), SCREENY(y)) || center_screen)
     {
       if (!level.shifted_relocation || center_screen)
@@ -5266,8 +5543,47 @@ void DrawRelocateScreen(int old_x, int old_y, int x, int y, int move_dir,
     }
     else
     {
+#if 1
+      if (!level.shifted_relocation || center_screen)
+      {
+       /* quick relocation (without scrolling), with centering of screen */
+
+       scroll_x = (x < SBX_Left  + MIDPOSX ? SBX_Left :
+                   x > SBX_Right + MIDPOSX ? SBX_Right :
+                   x - MIDPOSX);
+
+       scroll_y = (y < SBY_Upper + MIDPOSY ? SBY_Upper :
+                   y > SBY_Lower + MIDPOSY ? SBY_Lower :
+                   y - MIDPOSY);
+      }
+      else
+      {
+       /* quick relocation (without scrolling), but do not center screen */
+
+       int center_scroll_x = (old_x < SBX_Left  + MIDPOSX ? SBX_Left :
+                              old_x > SBX_Right + MIDPOSX ? SBX_Right :
+                              old_x - MIDPOSX);
+
+       int center_scroll_y = (old_y < SBY_Upper + MIDPOSY ? SBY_Upper :
+                              old_y > SBY_Lower + MIDPOSY ? SBY_Lower :
+                              old_y - MIDPOSY);
+
+       int offset_x = x + (scroll_x - center_scroll_x);
+       int offset_y = y + (scroll_y - center_scroll_y);
+
+       scroll_x = (offset_x < SBX_Left  + MIDPOSX ? SBX_Left :
+                   offset_x > SBX_Right + MIDPOSX ? SBX_Right :
+                   offset_x - MIDPOSX);
+
+       scroll_y = (offset_y < SBY_Upper + MIDPOSY ? SBY_Upper :
+                   offset_y > SBY_Lower + MIDPOSY ? SBY_Lower :
+                   offset_y - MIDPOSY);
+      }
+#else
       /* quick relocation (without scrolling), inside visible screen area */
 
+      int offset = game.scroll_delay_value;
+
       if ((move_dir == MV_LEFT  && scroll_x > x - MIDPOSX + offset) ||
          (move_dir == MV_RIGHT && scroll_x < x - MIDPOSX - offset))
        scroll_x = x - MIDPOSX + (scroll_x < x - MIDPOSX ? -offset : +offset);
@@ -5283,6 +5599,7 @@ void DrawRelocateScreen(int old_x, int old_y, int x, int y, int move_dir,
       /* don't scroll over playfield boundaries */
       if (scroll_y < SBY_Upper || scroll_y > SBY_Lower)
        scroll_y = (scroll_y < SBY_Upper ? SBY_Upper : SBY_Lower);
+#endif
     }
 
     RedrawPlayfield(TRUE, 0,0,0,0);
@@ -5467,6 +5784,21 @@ void RelocatePlayer(int jx, int jy, int el_player_raw)
 
   CheckTriggeredElementChangeByPlayer(jx, jy, element, CE_PLAYER_ENTERS_X,
                                      player->index_bit, enter_side);
+
+#if 1
+  if (player->is_switching)
+  {
+    /* ensure that relocation while still switching an element does not cause
+       a new element to be treated as also switched directly after relocation
+       (this is important for teleporter switches that teleport the player to
+       a place where another teleporter switch is in the same direction, which
+       would then incorrectly be treated as immediately switched before the
+       direction key that caused the switch was released) */
+
+    player->switch_x += jx - old_jx;
+    player->switch_y += jy - old_jy;
+  }
+#endif
 }
 
 void Explode(int ex, int ey, int phase, int mode)
@@ -5779,12 +6111,12 @@ void Explode(int ex, int ey, int phase, int mode)
 
     InitField_WithBug2(x, y, FALSE);
 
-    DrawLevelField(x, y);
+    TEST_DrawLevelField(x, y);
 
     TestIfElementTouchesCustomElement(x, y);
 
     if (GFX_CRUMBLED(element))
-      DrawLevelFieldCrumbledSandNeighbours(x, y);
+      TEST_DrawLevelFieldCrumbledSandNeighbours(x, y);
 
     if (IS_PLAYER(x, y) && !PLAYERINFO(x, y)->present)
       StorePlayer[x][y] = 0;
@@ -5798,7 +6130,7 @@ void Explode(int ex, int ey, int phase, int mode)
     int frame = getGraphicAnimationFrame(graphic, GfxFrame[x][y]);
 
     if (phase == delay)
-      DrawLevelFieldCrumbledSand(x, y);
+      TEST_DrawLevelFieldCrumbledSand(x, y);
 
     if (IS_WALKABLE_OVER(Back[x][y]) && Back[x][y] != EL_EMPTY)
     {
@@ -5875,8 +6207,12 @@ void Bang(int x, int y)
   {
     struct PlayerInfo *player = PLAYERINFO(x, y);
 
+#if USE_FIX_CE_ACTION_WITH_PLAYER
+    element = Feld[x][y] = player->initial_element;
+#else
     element = Feld[x][y] = (player->use_murphy ? EL_SP_MURPHY :
                            player->element_nr);
+#endif
 
     if (level.use_explosion_element[player->index_nr])
     {
@@ -6101,7 +6437,7 @@ static void ToggleBeltSwitch(int x, int y)
       if (e_belt_nr == belt_nr)
       {
        Feld[xx][yy] = belt_base_switch_element[belt_nr] + belt_dir_nr;
-       DrawLevelField(xx, yy);
+       TEST_DrawLevelField(xx, yy);
       }
     }
     else if (IS_BELT(element) && belt_dir != MV_NONE)
@@ -6113,7 +6449,7 @@ static void ToggleBeltSwitch(int x, int y)
        int belt_part = Feld[xx][yy] - belt_base_element[belt_nr];
 
        Feld[xx][yy] = belt_base_active_element[belt_nr] + belt_part;
-       DrawLevelField(xx, yy);
+       TEST_DrawLevelField(xx, yy);
       }
     }
     else if (IS_BELT_ACTIVE(element) && belt_dir == MV_NONE)
@@ -6125,7 +6461,7 @@ static void ToggleBeltSwitch(int x, int y)
        int belt_part = Feld[xx][yy] - belt_base_active_element[belt_nr];
 
        Feld[xx][yy] = belt_base_element[belt_nr] + belt_part;
-       DrawLevelField(xx, yy);
+       TEST_DrawLevelField(xx, yy);
       }
     }
   }
@@ -6146,34 +6482,34 @@ static void ToggleSwitchgateSwitch(int x, int y)
        element == EL_SWITCHGATE_SWITCH_DOWN)
     {
       Feld[xx][yy] = EL_SWITCHGATE_SWITCH_UP + game.switchgate_pos;
-      DrawLevelField(xx, yy);
+      TEST_DrawLevelField(xx, yy);
     }
     else if (element == EL_DC_SWITCHGATE_SWITCH_UP ||
             element == EL_DC_SWITCHGATE_SWITCH_DOWN)
     {
       Feld[xx][yy] = EL_DC_SWITCHGATE_SWITCH_UP + game.switchgate_pos;
-      DrawLevelField(xx, yy);
+      TEST_DrawLevelField(xx, yy);
     }
 #else
     if (element == EL_SWITCHGATE_SWITCH_UP)
     {
       Feld[xx][yy] = EL_SWITCHGATE_SWITCH_DOWN;
-      DrawLevelField(xx, yy);
+      TEST_DrawLevelField(xx, yy);
     }
     else if (element == EL_SWITCHGATE_SWITCH_DOWN)
     {
       Feld[xx][yy] = EL_SWITCHGATE_SWITCH_UP;
-      DrawLevelField(xx, yy);
+      TEST_DrawLevelField(xx, yy);
     }
     else if (element == EL_DC_SWITCHGATE_SWITCH_UP)
     {
       Feld[xx][yy] = EL_DC_SWITCHGATE_SWITCH_DOWN;
-      DrawLevelField(xx, yy);
+      TEST_DrawLevelField(xx, yy);
     }
     else if (element == EL_DC_SWITCHGATE_SWITCH_DOWN)
     {
       Feld[xx][yy] = EL_DC_SWITCHGATE_SWITCH_UP;
-      DrawLevelField(xx, yy);
+      TEST_DrawLevelField(xx, yy);
     }
 #endif
     else if (element == EL_SWITCHGATE_OPEN ||
@@ -6221,25 +6557,25 @@ static void RedrawAllLightSwitchesAndInvisibleElements()
        game.light_time_left > 0)
     {
       Feld[x][y] = EL_LIGHT_SWITCH_ACTIVE;
-      DrawLevelField(x, y);
+      TEST_DrawLevelField(x, y);
     }
     else if (element == EL_LIGHT_SWITCH_ACTIVE &&
             game.light_time_left == 0)
     {
       Feld[x][y] = EL_LIGHT_SWITCH;
-      DrawLevelField(x, y);
+      TEST_DrawLevelField(x, y);
     }
     else if (element == EL_EMC_DRIPPER &&
             game.light_time_left > 0)
     {
       Feld[x][y] = EL_EMC_DRIPPER_ACTIVE;
-      DrawLevelField(x, y);
+      TEST_DrawLevelField(x, y);
     }
     else if (element == EL_EMC_DRIPPER_ACTIVE &&
             game.light_time_left == 0)
     {
       Feld[x][y] = EL_EMC_DRIPPER;
-      DrawLevelField(x, y);
+      TEST_DrawLevelField(x, y);
     }
     else if (element == EL_INVISIBLE_STEELWALL ||
             element == EL_INVISIBLE_WALL ||
@@ -6248,11 +6584,11 @@ static void RedrawAllLightSwitchesAndInvisibleElements()
       if (game.light_time_left > 0)
        Feld[x][y] = getInvisibleActiveFromInvisibleElement(element);
 
-      DrawLevelField(x, y);
+      TEST_DrawLevelField(x, y);
 
       /* uncrumble neighbour fields, if needed */
       if (element == EL_INVISIBLE_SAND)
-       DrawLevelFieldCrumbledSandNeighbours(x, y);
+       TEST_DrawLevelFieldCrumbledSandNeighbours(x, y);
     }
     else if (element == EL_INVISIBLE_STEELWALL_ACTIVE ||
             element == EL_INVISIBLE_WALL_ACTIVE ||
@@ -6261,11 +6597,11 @@ static void RedrawAllLightSwitchesAndInvisibleElements()
       if (game.light_time_left == 0)
        Feld[x][y] = getInvisibleFromInvisibleActiveElement(element);
 
-      DrawLevelField(x, y);
+      TEST_DrawLevelField(x, y);
 
       /* re-crumble neighbour fields, if needed */
       if (element == EL_INVISIBLE_SAND)
-       DrawLevelFieldCrumbledSandNeighbours(x, y);
+       TEST_DrawLevelFieldCrumbledSandNeighbours(x, y);
     }
   }
 }
@@ -6282,13 +6618,13 @@ static void RedrawAllInvisibleElementsForLenses()
        game.lenses_time_left > 0)
     {
       Feld[x][y] = EL_EMC_DRIPPER_ACTIVE;
-      DrawLevelField(x, y);
+      TEST_DrawLevelField(x, y);
     }
     else if (element == EL_EMC_DRIPPER_ACTIVE &&
             game.lenses_time_left == 0)
     {
       Feld[x][y] = EL_EMC_DRIPPER;
-      DrawLevelField(x, y);
+      TEST_DrawLevelField(x, y);
     }
     else if (element == EL_INVISIBLE_STEELWALL ||
             element == EL_INVISIBLE_WALL ||
@@ -6297,11 +6633,11 @@ static void RedrawAllInvisibleElementsForLenses()
       if (game.lenses_time_left > 0)
        Feld[x][y] = getInvisibleActiveFromInvisibleElement(element);
 
-      DrawLevelField(x, y);
+      TEST_DrawLevelField(x, y);
 
       /* uncrumble neighbour fields, if needed */
       if (element == EL_INVISIBLE_SAND)
-       DrawLevelFieldCrumbledSandNeighbours(x, y);
+       TEST_DrawLevelFieldCrumbledSandNeighbours(x, y);
     }
     else if (element == EL_INVISIBLE_STEELWALL_ACTIVE ||
             element == EL_INVISIBLE_WALL_ACTIVE ||
@@ -6310,11 +6646,11 @@ static void RedrawAllInvisibleElementsForLenses()
       if (game.lenses_time_left == 0)
        Feld[x][y] = getInvisibleFromInvisibleActiveElement(element);
 
-      DrawLevelField(x, y);
+      TEST_DrawLevelField(x, y);
 
       /* re-crumble neighbour fields, if needed */
       if (element == EL_INVISIBLE_SAND)
-       DrawLevelFieldCrumbledSandNeighbours(x, y);
+       TEST_DrawLevelFieldCrumbledSandNeighbours(x, y);
     }
   }
 }
@@ -6331,13 +6667,13 @@ static void RedrawAllInvisibleElementsForMagnifier()
        game.magnify_time_left > 0)
     {
       Feld[x][y] = EL_EMC_FAKE_GRASS_ACTIVE;
-      DrawLevelField(x, y);
+      TEST_DrawLevelField(x, y);
     }
     else if (element == EL_EMC_FAKE_GRASS_ACTIVE &&
             game.magnify_time_left == 0)
     {
       Feld[x][y] = EL_EMC_FAKE_GRASS;
-      DrawLevelField(x, y);
+      TEST_DrawLevelField(x, y);
     }
     else if (IS_GATE_GRAY(element) &&
             game.magnify_time_left > 0)
@@ -6348,8 +6684,10 @@ static void RedrawAllInvisibleElementsForMagnifier()
                    element - EL_EM_GATE_1_GRAY + EL_EM_GATE_1_GRAY_ACTIVE :
                    IS_EMC_GATE_GRAY(element) ?
                    element - EL_EMC_GATE_5_GRAY + EL_EMC_GATE_5_GRAY_ACTIVE :
+                   IS_DC_GATE_GRAY(element) ?
+                   EL_DC_GATE_WHITE_GRAY_ACTIVE :
                    element);
-      DrawLevelField(x, y);
+      TEST_DrawLevelField(x, y);
     }
     else if (IS_GATE_GRAY_ACTIVE(element) &&
             game.magnify_time_left == 0)
@@ -6360,8 +6698,10 @@ static void RedrawAllInvisibleElementsForMagnifier()
                    element - EL_EM_GATE_1_GRAY_ACTIVE + EL_EM_GATE_1_GRAY :
                    IS_EMC_GATE_GRAY_ACTIVE(element) ?
                    element - EL_EMC_GATE_5_GRAY_ACTIVE + EL_EMC_GATE_5_GRAY :
+                   IS_DC_GATE_GRAY_ACTIVE(element) ?
+                   EL_DC_GATE_WHITE_GRAY :
                    element);
-      DrawLevelField(x, y);
+      TEST_DrawLevelField(x, y);
     }
   }
 }
@@ -6398,7 +6738,7 @@ static void ActivateTimegateSwitch(int x, int y)
     else if (element == EL_TIMEGATE_SWITCH_ACTIVE)
     {
       Feld[xx][yy] = EL_TIMEGATE_SWITCH;
-      DrawLevelField(xx, yy);
+      TEST_DrawLevelField(xx, yy);
     }
     */
 
@@ -6440,7 +6780,7 @@ void Impact(int x, int y)
       RemoveMovingField(x, y + 1);
       Feld[x][y + 1] = EL_QUICKSAND_EMPTY;
       Feld[x][y + 2] = EL_ROCK;
-      DrawLevelField(x, y + 2);
+      TEST_DrawLevelField(x, y + 2);
 
       object_hit = TRUE;
     }
@@ -6450,7 +6790,7 @@ void Impact(int x, int y)
       RemoveMovingField(x, y + 1);
       Feld[x][y + 1] = EL_QUICKSAND_FAST_EMPTY;
       Feld[x][y + 2] = EL_ROCK;
-      DrawLevelField(x, y + 2);
+      TEST_DrawLevelField(x, y + 2);
 
       object_hit = TRUE;
     }
@@ -6474,7 +6814,7 @@ void Impact(int x, int y)
       el_act_dir2img(element, GfxAction[x][y], MV_DOWN) != el2img(element))
   {
     ResetGfxAnimation(x, y);
-    DrawLevelField(x, y);
+    TEST_DrawLevelField(x, y);
   }
 
   if (impact && CAN_EXPLODE_IMPACT(element))
@@ -6948,7 +7288,7 @@ inline static void TurnRoundExt(int x, int y)
       {
        Feld[move_x][move_y] = EL_EMC_SPRING_BUMPER_ACTIVE;
        ResetGfxAnimation(move_x, move_y);
-       DrawLevelField(move_x, move_y);
+       TEST_DrawLevelField(move_x, move_y);
 
        MovDir[x][y] = back_dir;
       }
@@ -7587,6 +7927,33 @@ void StartMoving(int x, int y)
        Store[x][y + 1] = Store[x][y];
        Store[x][y] = 0;
 
+       PlayLevelSoundAction(x, y, ACTION_FILLING);
+      }
+      else if (Feld[x][y + 1] == EL_QUICKSAND_FAST_EMPTY)
+      {
+       if (!MovDelay[x][y])
+       {
+         MovDelay[x][y] = TILEY + 1;
+
+         ResetGfxAnimation(x, y);
+         ResetGfxAnimation(x, y + 1);
+       }
+
+       if (MovDelay[x][y])
+       {
+         DrawLevelElement(x, y, EL_QUICKSAND_EMPTYING);
+         DrawLevelElement(x, y + 1, EL_QUICKSAND_FAST_FILLING);
+
+         MovDelay[x][y]--;
+         if (MovDelay[x][y])
+           return;
+       }
+
+       Feld[x][y] = EL_QUICKSAND_EMPTY;
+       Feld[x][y + 1] = EL_QUICKSAND_FAST_FULL;
+       Store[x][y + 1] = Store[x][y];
+       Store[x][y] = 0;
+
        PlayLevelSoundAction(x, y, ACTION_FILLING);
       }
     }
@@ -7632,6 +7999,33 @@ void StartMoving(int x, int y)
        Store[x][y + 1] = Store[x][y];
        Store[x][y] = 0;
 
+       PlayLevelSoundAction(x, y, ACTION_FILLING);
+      }
+      else if (Feld[x][y + 1] == EL_QUICKSAND_EMPTY)
+      {
+       if (!MovDelay[x][y])
+       {
+         MovDelay[x][y] = TILEY + 1;
+
+         ResetGfxAnimation(x, y);
+         ResetGfxAnimation(x, y + 1);
+       }
+
+       if (MovDelay[x][y])
+       {
+         DrawLevelElement(x, y, EL_QUICKSAND_FAST_EMPTYING);
+         DrawLevelElement(x, y + 1, EL_QUICKSAND_FILLING);
+
+         MovDelay[x][y]--;
+         if (MovDelay[x][y])
+           return;
+       }
+
+       Feld[x][y] = EL_QUICKSAND_FAST_EMPTY;
+       Feld[x][y + 1] = EL_QUICKSAND_FULL;
+       Store[x][y + 1] = Store[x][y];
+       Store[x][y] = 0;
+
        PlayLevelSoundAction(x, y, ACTION_FILLING);
       }
     }
@@ -7999,7 +8393,7 @@ void StartMoving(int x, int y)
                               element == EL_SP_SNIKSNAK ||
                               element == EL_SP_ELECTRON ||
                               element == EL_MOLE))
-         DrawLevelField(x, y);
+         TEST_DrawLevelField(x, y);
       }
     }
 
@@ -8033,7 +8427,7 @@ void StartMoving(int x, int y)
        if (IS_PLAYER(x, y))
          DrawPlayerField(x, y);
        else
-         DrawLevelField(x, y);
+         TEST_DrawLevelField(x, y);
 
        PlayLevelSoundActionIfLoop(x, y, ACTION_ATTACKING);
 
@@ -8073,7 +8467,7 @@ void StartMoving(int x, int y)
 
            if (IN_SCR_FIELD(sx, sy))
            {
-             DrawLevelFieldCrumbledSand(xx, yy);
+             TEST_DrawLevelFieldCrumbledSand(xx, yy);
              DrawGraphic(sx, sy, flame_graphic, frame);
            }
          }
@@ -8081,7 +8475,7 @@ void StartMoving(int x, int y)
          {
            if (Feld[xx][yy] == EL_FLAMES)
              Feld[xx][yy] = EL_EMPTY;
-           DrawLevelField(xx, yy);
+           TEST_DrawLevelField(xx, yy);
          }
        }
       }
@@ -8124,7 +8518,7 @@ void StartMoving(int x, int y)
          Feld[newx][newy] == EL_EM_STEEL_EXIT_OPEN)
       {
        RemoveField(x, y);
-       DrawLevelField(x, y);
+       TEST_DrawLevelField(x, y);
 
        PlayLevelSound(newx, newy, SND_PENGUIN_PASSING);
        if (IN_SCR_FIELD(SCREENX(newx), SCREENY(newy)))
@@ -8140,7 +8534,7 @@ void StartMoving(int x, int y)
       else if (IS_FOOD_PENGUIN(Feld[newx][newy]))
       {
        if (DigField(local_player, x, y, newx, newy, 0,0, DF_DIG) == MP_MOVING)
-         DrawLevelField(newx, newy);
+         TEST_DrawLevelField(newx, newy);
        else
          GfxDir[x][y] = MovDir[x][y] = MV_NONE;
       }
@@ -8151,7 +8545,7 @@ void StartMoving(int x, int y)
        if (IS_PLAYER(x, y))
          DrawPlayerField(x, y);
        else
-         DrawLevelField(x, y);
+         TEST_DrawLevelField(x, y);
 
        return;
       }
@@ -8165,7 +8559,7 @@ void StartMoving(int x, int y)
        else
        {
          Feld[newx][newy] = EL_EMPTY;
-         DrawLevelField(newx, newy);
+         TEST_DrawLevelField(newx, newy);
        }
 
        PlayLevelSound(x, y, SND_PIG_DIGGING);
@@ -8175,7 +8569,7 @@ void StartMoving(int x, int y)
        if (IS_PLAYER(x, y))
          DrawPlayerField(x, y);
        else
-         DrawLevelField(x, y);
+         TEST_DrawLevelField(x, y);
 
        return;
       }
@@ -8254,7 +8648,7 @@ void StartMoving(int x, int y)
        else
        {
          Feld[newx][newy] = EL_EMPTY;
-         DrawLevelField(newx, newy);
+         TEST_DrawLevelField(newx, newy);
 
          PlayLevelSoundAction(x, y, ACTION_DIGGING);
        }
@@ -8265,7 +8659,7 @@ void StartMoving(int x, int y)
        if (IS_PLAYER(x, y))
          DrawPlayerField(x, y);
        else
-         DrawLevelField(x, y);
+         TEST_DrawLevelField(x, y);
 #endif
 
        return;
@@ -8274,6 +8668,10 @@ void StartMoving(int x, int y)
     else if (IS_CUSTOM_ELEMENT(element) &&
             CUSTOM_ELEMENT_CAN_ENTER_FIELD(element, newx, newy))
     {
+#if 1
+      if (!DigFieldByCE(newx, newy, element))
+       return;
+#else
       int new_element = Feld[newx][newy];
 
       if (!IS_FREE(newx, newy))
@@ -8302,7 +8700,7 @@ void StartMoving(int x, int y)
        else
        {
          RemoveField(newx, newy);
-         DrawLevelField(newx, newy);
+         TEST_DrawLevelField(newx, newy);
        }
 
        /* if digged element was about to explode, prevent the explosion */
@@ -8312,6 +8710,7 @@ void StartMoving(int x, int y)
       }
 
       Store[newx][newy] = EL_EMPTY;
+
 #if 1
       /* this makes it possible to leave the removed element again */
       if (IS_EQUAL_OR_IN_GROUP(new_element, MOVE_ENTER_EL(element)))
@@ -8325,6 +8724,8 @@ void StartMoving(int x, int y)
        Store[newx][newy] = (move_leave_element == EL_TRIGGER_ELEMENT ?
                             new_element : move_leave_element);
       }
+#endif
+
 #endif
 
       if (move_pattern & MV_MAZE_RUNNER_STYLE)
@@ -8340,7 +8741,7 @@ void StartMoving(int x, int y)
        if (IS_PLAYER(x, y))
          DrawPlayerField(x, y);
        else
-         DrawLevelField(x, y);
+         TEST_DrawLevelField(x, y);
 
        return;
       }
@@ -8367,7 +8768,7 @@ void StartMoving(int x, int y)
          if (IS_PLAYER(x, y))
            DrawPlayerField(x, y);
          else
-           DrawLevelField(x, y);
+           TEST_DrawLevelField(x, y);
 
          PlayLevelSound(x, y, SND_DRAGON_ATTACKING);
 
@@ -8405,7 +8806,7 @@ void StartMoving(int x, int y)
       else
       {
        Feld[newx][newy] = EL_EMPTY;
-       DrawLevelField(newx, newy);
+       TEST_DrawLevelField(newx, newy);
       }
 
       PlayLevelSound(x, y, SND_YAMYAM_DIGGING);
@@ -8436,7 +8837,7 @@ void StartMoving(int x, int y)
       else
       {
        Feld[newx][newy] = EL_EMPTY;
-       DrawLevelField(newx, newy);
+       TEST_DrawLevelField(newx, newy);
       }
 
       PlayLevelSound(x, y, SND_DARK_YAMYAM_DIGGING);
@@ -8459,7 +8860,7 @@ void StartMoving(int x, int y)
 
        ResetGfxAnimation(x, y);
        GfxAction[x][y] = ACTION_DIGGING;
-       DrawLevelField(x, y);
+       TEST_DrawLevelField(x, y);
 
        MovDelay[newx][newy] = 0;       /* start amoeba shrinking delay */
 
@@ -8468,7 +8869,7 @@ void StartMoving(int x, int y)
       else     /* element == EL_PACMAN */
       {
        Feld[newx][newy] = EL_EMPTY;
-       DrawLevelField(newx, newy);
+       TEST_DrawLevelField(newx, newy);
        PlayLevelSound(x, y, SND_PACMAN_DIGGING);
       }
     }
@@ -8550,7 +8951,7 @@ void ContinueMoving(int x, int y)
           GfxAction[x][y], GfxDir[x][y], GfxFrame[x][y]);
 #endif
 
-    DrawLevelField(x, y);
+    TEST_DrawLevelField(x, y);
 
     return;    /* element is still moving */
   }
@@ -8569,7 +8970,7 @@ void ContinueMoving(int x, int y)
   {
     Feld[x][y] = EL_SAND;
 
-    DrawLevelFieldCrumbledSandNeighbours(x, y);
+    TEST_DrawLevelFieldCrumbledSandNeighbours(x, y);
   }
   else if (element == EL_QUICKSAND_FILLING)
   {
@@ -8736,7 +9137,7 @@ void ContinueMoving(int x, int y)
     InitField(x, y, FALSE);
 
     if (GFX_CRUMBLED(Feld[x][y]))
-      DrawLevelFieldCrumbledSandNeighbours(x, y);
+      TEST_DrawLevelFieldCrumbledSandNeighbours(x, y);
 
     if (ELEM_IS_PLAYER(move_leave_element))
       RelocatePlayer(x, y, move_leave_element);
@@ -8752,8 +9153,8 @@ void ContinueMoving(int x, int y)
        element_info[element].move_pattern == MV_WHEN_DROPPED)))
     GfxDir[x][y] = MovDir[newx][newy] = 0;
 
-  DrawLevelField(x, y);
-  DrawLevelField(newx, newy);
+  TEST_DrawLevelField(x, y);
+  TEST_DrawLevelField(newx, newy);
 
   Stop[newx][newy] = TRUE;     /* ignore this element until the next frame */
 
@@ -8798,7 +9199,12 @@ void ContinueMoving(int x, int y)
   else if (element == EL_PENGUIN)
     TestIfFriendTouchesBadThing(newx, newy);
 
-  /* give the player one last chance (one more frame) to move away */
+  if (DONT_GET_HIT_BY(element))
+  {
+    TestIfGoodThingGetsHitByBadThing(newx, newy, direction);
+  }
+
+  /* give the player one last chance (one more frame) to move away */
   if (CAN_FALL(element) && direction == MV_DOWN &&
       (last_line || (!IS_FREE(x, newy + 1) &&
                     (!IS_PLAYER(x, newy + 1) ||
@@ -9015,7 +9421,7 @@ void AmoebeUmwandelnBD(int ax, int ay, int new_element)
       AmoebaNr[x][y] = 0;
       Feld[x][y] = new_element;
       InitField(x, y, FALSE);
-      DrawLevelField(x, y);
+      TEST_DrawLevelField(x, y);
       done = TRUE;
     }
   }
@@ -9057,7 +9463,7 @@ void AmoebeWaechst(int x, int y)
     {
       Feld[x][y] = Store[x][y];
       Store[x][y] = 0;
-      DrawLevelField(x, y);
+      TEST_DrawLevelField(x, y);
     }
   }
 }
@@ -9089,7 +9495,7 @@ void AmoebaDisappearing(int x, int y)
     if (!MovDelay[x][y])
     {
       Feld[x][y] = EL_EMPTY;
-      DrawLevelField(x, y);
+      TEST_DrawLevelField(x, y);
 
       /* don't let mole enter this field in this cycle;
         (give priority to objects falling to this field from above) */
@@ -9116,7 +9522,7 @@ void AmoebeAbleger(int ax, int ay)
   if (!level.amoeba_speed && element != EL_EMC_DRIPPER)
   {
     Feld[ax][ay] = EL_AMOEBA_DEAD;
-    DrawLevelField(ax, ay);
+    TEST_DrawLevelField(ax, ay);
     return;
   }
 
@@ -9186,7 +9592,7 @@ void AmoebeAbleger(int ax, int ay)
       if (i == 4 && (!waiting_for_player || element == EL_BD_AMOEBA))
       {
        Feld[ax][ay] = EL_AMOEBA_DEAD;
-       DrawLevelField(ax, ay);
+       TEST_DrawLevelField(ax, ay);
        AmoebaCnt[AmoebaNr[ax][ay]]--;
 
        if (AmoebaCnt[AmoebaNr[ax][ay]] <= 0)   /* amoeba is completely dead */
@@ -9250,7 +9656,7 @@ void AmoebeAbleger(int ax, int ay)
     return;
   }
 
-  DrawLevelField(newax, neway);
+  TEST_DrawLevelField(newax, neway);
 }
 
 void Life(int ax, int ay)
@@ -9308,7 +9714,7 @@ void Life(int ax, int ay)
       {
        Feld[xx][yy] = EL_EMPTY;
        if (!Stop[xx][yy])
-         DrawLevelField(xx, yy);
+         TEST_DrawLevelField(xx, yy);
        Stop[xx][yy] = TRUE;
        changed = TRUE;
       }
@@ -9321,7 +9727,7 @@ void Life(int ax, int ay)
        Feld[xx][yy] = element;
        MovDelay[xx][yy] = (element == EL_GAME_OF_LIFE ? 0 : life_time-1);
        if (!Stop[xx][yy])
-         DrawLevelField(xx, yy);
+         TEST_DrawLevelField(xx, yy);
        Stop[xx][yy] = TRUE;
        changed = TRUE;
       }
@@ -9585,28 +9991,28 @@ void MauerWaechst(int x, int y)
       if (MovDir[x][y] == MV_LEFT)
       {
        if (IN_LEV_FIELD(x - 1, y) && IS_WALL(Feld[x - 1][y]))
-         DrawLevelField(x - 1, y);
+         TEST_DrawLevelField(x - 1, y);
       }
       else if (MovDir[x][y] == MV_RIGHT)
       {
        if (IN_LEV_FIELD(x + 1, y) && IS_WALL(Feld[x + 1][y]))
-         DrawLevelField(x + 1, y);
+         TEST_DrawLevelField(x + 1, y);
       }
       else if (MovDir[x][y] == MV_UP)
       {
        if (IN_LEV_FIELD(x, y - 1) && IS_WALL(Feld[x][y - 1]))
-         DrawLevelField(x, y - 1);
+         TEST_DrawLevelField(x, y - 1);
       }
       else
       {
        if (IN_LEV_FIELD(x, y + 1) && IS_WALL(Feld[x][y + 1]))
-         DrawLevelField(x, y + 1);
+         TEST_DrawLevelField(x, y + 1);
       }
 
       Feld[x][y] = Store[x][y];
       Store[x][y] = 0;
       GfxDir[x][y] = MovDir[x][y] = MV_NONE;
-      DrawLevelField(x, y);
+      TEST_DrawLevelField(x, y);
     }
   }
 }
@@ -9697,7 +10103,7 @@ void MauerAbleger(int ax, int ay)
   }
 
   if (element == EL_EXPANDABLE_WALL && (links_frei || rechts_frei))
-    DrawLevelField(ax, ay);
+    TEST_DrawLevelField(ax, ay);
 
   if (!IN_LEV_FIELD(ax, ay-1) || IS_WALL(Feld[ax][ay-1]))
     oben_massiv = TRUE;
@@ -9815,7 +10221,7 @@ void MauerAblegerStahl(int ax, int ay)
        element == EL_EXPANDABLE_STEELWALL_HORIZONTAL) &&
       ((links_massiv && rechts_massiv) ||
        element == EL_EXPANDABLE_STEELWALL_VERTICAL))
-    Feld[ax][ay] = EL_WALL;
+    Feld[ax][ay] = EL_STEELWALL;
 
   if (new_wall)
     PlayLevelSoundAction(ax, ay, ACTION_GROWING);
@@ -9861,7 +10267,7 @@ void CheckForDragon(int x, int y)
        if (IN_LEV_FIELD(xx, yy) && Feld[xx][yy] == EL_FLAMES)
        {
          Feld[xx][yy] = EL_EMPTY;
-         DrawLevelField(xx, yy);
+         TEST_DrawLevelField(xx, yy);
        }
        else
          break;
@@ -9925,7 +10331,7 @@ static void ChangeActiveTrap(int x, int y)
 
   /* if new animation frame was drawn, correct crumbled sand border */
   if (IS_NEW_FRAME(GfxFrame[x][y], graphic))
-    DrawLevelFieldCrumbledSand(x, y);
+    TEST_DrawLevelFieldCrumbledSand(x, y);
 }
 
 static int getSpecialActionElement(int element, int number, int base_element)
@@ -9959,6 +10365,7 @@ static void ExecuteCustomElementAction(int x, int y, int element, int page)
   int action_type = change->action_type;
   int action_mode = change->action_mode;
   int action_arg = change->action_arg;
+  int action_element = change->action_element;
   int i;
 
   if (!change->has_action)
@@ -9970,11 +10377,21 @@ static void ExecuteCustomElementAction(int x, int y, int element, int page)
     (level.time > 0 ? TimeLeft :
      TimePlayed);
 
-  int action_arg_element =
+  int action_arg_element_raw =
     (action_arg == CA_ARG_PLAYER_TRIGGER  ? change->actual_trigger_player :
      action_arg == CA_ARG_ELEMENT_TRIGGER ? change->actual_trigger_element :
      action_arg == CA_ARG_ELEMENT_TARGET  ? change->target_element :
+     action_arg == CA_ARG_ELEMENT_ACTION  ? change->action_element :
+     action_arg == CA_ARG_INVENTORY_RM_TRIGGER ? change->actual_trigger_element:
+     action_arg == CA_ARG_INVENTORY_RM_TARGET  ? change->target_element :
+     action_arg == CA_ARG_INVENTORY_RM_ACTION  ? change->action_element :
      EL_EMPTY);
+  int action_arg_element = GetElementFromGroupElement(action_arg_element_raw);
+
+#if 0
+  if (action_arg_element_raw == EL_GROUP_START)
+    printf("::: %d,%d: %d ('%s')\n", x, y, element, EL_NAME(element));
+#endif
 
   int action_arg_direction =
     (action_arg >= CA_ARG_DIRECTION_LEFT &&
@@ -10031,10 +10448,13 @@ static void ExecuteCustomElementAction(int x, int y, int element, int page)
      action_arg == CA_ARG_NUMBER_LEVEL_SCORE ? local_player->score :
      action_arg == CA_ARG_ELEMENT_CV_TARGET ? GET_NEW_CE_VALUE(target_element):
      action_arg == CA_ARG_ELEMENT_CV_TRIGGER ? change->actual_trigger_ce_value:
+     action_arg == CA_ARG_ELEMENT_CV_ACTION ? GET_NEW_CE_VALUE(action_element):
      action_arg == CA_ARG_ELEMENT_CS_TARGET ? GET_CE_SCORE(target_element) :
      action_arg == CA_ARG_ELEMENT_CS_TRIGGER ? change->actual_trigger_ce_score:
+     action_arg == CA_ARG_ELEMENT_CS_ACTION ? GET_CE_SCORE(action_element) :
      action_arg == CA_ARG_ELEMENT_NR_TARGET  ? change->target_element :
      action_arg == CA_ARG_ELEMENT_NR_TRIGGER ? change->actual_trigger_element :
+     action_arg == CA_ARG_ELEMENT_NR_ACTION  ? change->action_element :
      -1);
 
   int action_arg_number_old =
@@ -10051,7 +10471,9 @@ static void ExecuteCustomElementAction(int x, int y, int element, int page)
                            action_arg_number_min, action_arg_number_max);
 
 #if 1
-  int trigger_player_bits = change->actual_trigger_player_bits;
+  int trigger_player_bits =
+    (change->actual_trigger_player_bits != CH_PLAYER_NONE ?
+     change->actual_trigger_player_bits : change->trigger_player);
 #else
   int trigger_player_bits =
     (change->actual_trigger_player >= EL_PLAYER_1 &&
@@ -10064,6 +10486,7 @@ static void ExecuteCustomElementAction(int x, int y, int element, int page)
     (action_arg >= CA_ARG_PLAYER_1 &&
      action_arg <= CA_ARG_PLAYER_4 ? action_arg - CA_ARG_PLAYER :
      action_arg == CA_ARG_PLAYER_TRIGGER ? trigger_player_bits :
+     action_arg == CA_ARG_PLAYER_ACTION ? 1 << GET_PLAYER_NR(action_element) :
      PLAYER_BITS_ANY);
 
   /* ---------- execute action  -------------------------------------------- */
@@ -10165,6 +10588,33 @@ static void ExecuteCustomElementAction(int x, int y, int element, int page)
       break;
     }
 
+    case CA_SET_LEVEL_RANDOM_SEED:
+    {
+#if 1
+      /* ensure that setting a new random seed while playing is predictable */
+      InitRND(action_arg_number_new ? action_arg_number_new : RND(1000000) + 1);
+#else
+      InitRND(action_arg_number_new);
+#endif
+
+#if 0
+      printf("::: %d -> %d\n", action_arg_number_new, RND(10));
+#endif
+
+#if 0
+      {
+       int i;
+
+       printf("::: ");
+       for (i = 0; i < 9; i++)
+         printf("%d, ", RND(2));
+       printf("\n");
+      }
+#endif
+
+      break;
+    }
+
     /* ---------- player actions  ------------------------------------------ */
 
     case CA_MOVE_PLAYER:
@@ -10219,6 +10669,10 @@ static void ExecuteCustomElementAction(int x, int y, int element, int page)
 
     case CA_SET_PLAYER_SPEED:
     {
+#if 0
+      printf("::: trigger_player_bits == %d\n", trigger_player_bits);
+#endif
+
       for (i = 0; i < MAX_PLAYERS; i++)
       {
        if (trigger_player_bits & (1 << i))
@@ -10336,6 +10790,104 @@ static void ExecuteCustomElementAction(int x, int y, int element, int page)
       break;
     }
 
+    case CA_SET_PLAYER_INVENTORY:
+    {
+      for (i = 0; i < MAX_PLAYERS; i++)
+      {
+       struct PlayerInfo *player = &stored_player[i];
+       int j, k;
+
+       if (trigger_player_bits & (1 << i))
+       {
+         int inventory_element = action_arg_element;
+
+         if (action_arg == CA_ARG_ELEMENT_TARGET ||
+             action_arg == CA_ARG_ELEMENT_TRIGGER ||
+             action_arg == CA_ARG_ELEMENT_ACTION)
+         {
+           int element = inventory_element;
+           int collect_count = element_info[element].collect_count_initial;
+
+           if (!IS_CUSTOM_ELEMENT(element))
+             collect_count = 1;
+
+           if (collect_count == 0)
+             player->inventory_infinite_element = element;
+           else
+             for (k = 0; k < collect_count; k++)
+               if (player->inventory_size < MAX_INVENTORY_SIZE)
+                 player->inventory_element[player->inventory_size++] =
+                   element;
+         }
+         else if (action_arg == CA_ARG_INVENTORY_RM_TARGET ||
+                  action_arg == CA_ARG_INVENTORY_RM_TRIGGER ||
+                  action_arg == CA_ARG_INVENTORY_RM_ACTION)
+         {
+           if (player->inventory_infinite_element != EL_UNDEFINED &&
+               IS_EQUAL_OR_IN_GROUP(player->inventory_infinite_element,
+                                    action_arg_element_raw))
+             player->inventory_infinite_element = EL_UNDEFINED;
+
+           for (k = 0, j = 0; j < player->inventory_size; j++)
+           {
+             if (!IS_EQUAL_OR_IN_GROUP(player->inventory_element[j],
+                                       action_arg_element_raw))
+               player->inventory_element[k++] = player->inventory_element[j];
+           }
+
+           player->inventory_size = k;
+         }
+         else if (action_arg == CA_ARG_INVENTORY_RM_FIRST)
+         {
+           if (player->inventory_size > 0)
+           {
+             for (j = 0; j < player->inventory_size - 1; j++)
+               player->inventory_element[j] = player->inventory_element[j + 1];
+
+             player->inventory_size--;
+           }
+         }
+         else if (action_arg == CA_ARG_INVENTORY_RM_LAST)
+         {
+           if (player->inventory_size > 0)
+             player->inventory_size--;
+         }
+         else if (action_arg == CA_ARG_INVENTORY_RM_ALL)
+         {
+           player->inventory_infinite_element = EL_UNDEFINED;
+           player->inventory_size = 0;
+         }
+         else if (action_arg == CA_ARG_INVENTORY_RESET)
+         {
+           player->inventory_infinite_element = EL_UNDEFINED;
+           player->inventory_size = 0;
+
+           if (level.use_initial_inventory[i])
+           {
+             for (j = 0; j < level.initial_inventory_size[i]; j++)
+             {
+               int element = level.initial_inventory_content[i][j];
+               int collect_count = element_info[element].collect_count_initial;
+
+               if (!IS_CUSTOM_ELEMENT(element))
+                 collect_count = 1;
+
+               if (collect_count == 0)
+                 player->inventory_infinite_element = element;
+               else
+                 for (k = 0; k < collect_count; k++)
+                   if (player->inventory_size < MAX_INVENTORY_SIZE)
+                     player->inventory_element[player->inventory_size++] =
+                       element;
+             }
+           }
+         }
+       }
+      }
+
+      break;
+    }
+
     /* ---------- CE actions  ---------------------------------------------- */
 
     case CA_SET_CE_VALUE:
@@ -10404,6 +10956,38 @@ static void ExecuteCustomElementAction(int x, int y, int element, int page)
       break;
     }
 
+    case CA_SET_CE_ARTWORK:
+    {
+      int artwork_element = action_arg_element;
+      boolean reset_frame = FALSE;
+      int xx, yy;
+
+      if (action_arg == CA_ARG_ELEMENT_RESET)
+       artwork_element = (ei->use_gfx_element ? ei->gfx_element_initial :
+                          element);
+
+      if (ei->gfx_element != artwork_element)
+       reset_frame = TRUE;
+
+      ei->gfx_element = artwork_element;
+
+      SCAN_PLAYFIELD(xx, yy)
+      {
+       if (Feld[xx][yy] == element)
+       {
+         if (reset_frame)
+         {
+           ResetGfxAnimation(xx, yy);
+           ResetRandomAnimationValue(xx, yy);
+         }
+
+         TEST_DrawLevelField(xx, yy);
+       }
+      }
+
+      break;
+    }
+
     /* ---------- engine actions  ------------------------------------------ */
 
     case CA_SET_ENGINE_SCAN_MODE:
@@ -10480,10 +11064,10 @@ static void CreateFieldExt(int x, int y, int element, boolean is_change)
     ResetRandomAnimationValue(x, y);
 #endif
 
-    DrawLevelField(x, y);
+    TEST_DrawLevelField(x, y);
 
     if (GFX_CRUMBLED(new_element))
-      DrawLevelFieldCrumbledSandNeighbours(x, y);
+      TEST_DrawLevelFieldCrumbledSandNeighbours(x, y);
   }
 
 #if 1
@@ -10563,8 +11147,8 @@ static boolean ChangeElement(int x, int y, int element, int page)
   {
     /* reset actual trigger element, trigger player and action element */
     change->actual_trigger_element = EL_EMPTY;
-    change->actual_trigger_player = EL_PLAYER_1;
-    change->actual_trigger_player_bits = CH_PLAYER_1;
+    change->actual_trigger_player = EL_EMPTY;
+    change->actual_trigger_player_bits = CH_PLAYER_NONE;
     change->actual_trigger_side = CH_SIDE_NONE;
     change->actual_trigger_ce_value = 0;
     change->actual_trigger_ce_score = 0;
@@ -10724,6 +11308,7 @@ static void HandleElementChange(int x, int y, int page)
   int element = MovingOrBlocked2Element(x, y);
   struct ElementInfo *ei = &element_info[element];
   struct ElementChangeInfo *change = &ei->change_page[page];
+  boolean handle_action_before_change = FALSE;
 
 #ifdef DEBUG
   if (!CAN_CHANGE_OR_HAS_ACTION(element) &&
@@ -10806,6 +11391,15 @@ static void HandleElementChange(int x, int y, int page)
       return;
     }
 
+#if 1
+    /* special case: set new level random seed before changing element */
+    if (change->has_action && change->action_type == CA_SET_LEVEL_RANDOM_SEED)
+      handle_action_before_change = TRUE;
+
+    if (change->has_action && handle_action_before_change)
+      ExecuteCustomElementAction(x, y, element, page);
+#endif
+
     if (change->can_change)
     {
       if (ChangeElement(x, y, element, page))
@@ -10815,7 +11409,7 @@ static void HandleElementChange(int x, int y, int page)
       }
     }
 
-    if (change->has_action)
+    if (change->has_action && !handle_action_before_change)
       ExecuteCustomElementAction(x, y, element, page);
   }
 }
@@ -10951,6 +11545,11 @@ static boolean CheckTriggeredElementChangeExt(int trigger_x, int trigger_y,
        change->actual_trigger_ce_value = CustomValue[trigger_x][trigger_y];
        change->actual_trigger_ce_score = GET_CE_SCORE(trigger_element);
 
+#if 0
+       printf("::: TRIGGERED CHANGE FOUND: %d ['%s'], %d\n",
+              element, EL_NAME(element), p);
+#endif
+
        if ((change->can_change && !change_done) || change->has_action)
        {
          int x, y;
@@ -10961,6 +11560,21 @@ static boolean CheckTriggeredElementChangeExt(int trigger_x, int trigger_y,
            {
              if (change->can_change && !change_done)
              {
+#if USE_FIX_NO_ACTION_AFTER_CHANGE
+               /* if element already changed in this frame, not only prevent
+                  another element change (checked in ChangeElement()), but
+                  also prevent additional element actions for this element */
+
+               if (ChangeCount[x][y] >= game.max_num_changes_per_frame &&
+                   !level.use_action_after_change_bug)
+                 continue;
+#endif
+
+#if 0
+               printf("::: TRIGGERED CHANGE FOUND: %d ['%s'], %d -- CHANGE\n",
+                      element, EL_NAME(element), p);
+#endif
+
                ChangeDelay[x][y] = 1;
                ChangeEvent[x][y] = trigger_event;
 
@@ -10969,6 +11583,22 @@ static boolean CheckTriggeredElementChangeExt(int trigger_x, int trigger_y,
 #if USE_NEW_DELAYED_ACTION
              else if (change->has_action)
              {
+#if USE_FIX_NO_ACTION_AFTER_CHANGE
+               /* if element already changed in this frame, not only prevent
+                  another element change (checked in ChangeElement()), but
+                  also prevent additional element actions for this element */
+
+               if (ChangeCount[x][y] >= game.max_num_changes_per_frame &&
+                   !level.use_action_after_change_bug)
+                 continue;
+#endif
+
+
+#if 0
+               printf("::: TRIGGERED CHANGE FOUND: %d ['%s'], %d -- ACTION\n",
+                      element, EL_NAME(element), p);
+#endif
+
                ExecuteCustomElementAction(x, y, element, p);
                PlayLevelSoundElementAction(x, y, element, ACTION_PAGE_1 + p);
              }
@@ -10986,6 +11616,12 @@ static boolean CheckTriggeredElementChangeExt(int trigger_x, int trigger_y,
          {
            change_done = TRUE;
            change_done_any = TRUE;
+
+#if 0
+           printf("::: TRIGGERED CHANGE FOUND: %d ['%s'], %d -- DONE\n",
+                  element, EL_NAME(element), p);
+#endif
+
          }
        }
       }
@@ -11040,6 +11676,10 @@ static boolean CheckElementChangeExt(int x, int y,
 
   RECURSION_LOOP_DETECTION_START(trigger_element, FALSE);
 
+#if 0
+  printf("::: X: trigger_player_bits == %d\n", trigger_player);
+#endif
+
   for (p = 0; p < element_info[element].num_change_pages; p++)
   {
     struct ElementChangeInfo *change = &element_info[element].change_page[p];
@@ -11565,7 +12205,7 @@ void GameActions()
   }
 
   if (game.restart_level)
-    StartGameActions(options.network, setup.autorecord, NEW_RANDOMIZE);
+    StartGameActions(options.network, setup.autorecord, level.random_seed);
 
   if (level.game_engine_type == GAME_ENGINE_TYPE_EM)
   {
@@ -11685,6 +12325,18 @@ void GameActions()
   if (tape.recording)
     TapeRecordAction(tape_action);
 
+#if USE_NEW_PLAYER_ASSIGNMENTS
+  {
+    byte mapped_action[MAX_PLAYERS];
+
+    for (i = 0; i < MAX_PLAYERS; i++)
+      mapped_action[i] = stored_player[map_player_action[i]].effective_action;
+
+    for (i = 0; i < MAX_PLAYERS; i++)
+      stored_player[i].effective_action = mapped_action[i];
+  }
+#endif
+
   if (level.game_engine_type == GAME_ENGINE_TYPE_EM)
   {
     GameActions_EM_Main();
@@ -11851,7 +12503,7 @@ void GameActions_RND()
       if (MovDelay[x][y] <= 0)
       {
        RemoveField(x, y);
-       DrawLevelField(x, y);
+       TEST_DrawLevelField(x, y);
 
        TestIfElementTouchesCustomElement(x, y);        /* for empty space */
       }
@@ -11885,7 +12537,7 @@ void GameActions_RND()
     if (GfxAction[x][y] == ACTION_PUSHING && !IS_MOVING(x, y))
     {
       ResetGfxAnimation(x, y);
-      DrawLevelField(x, y);
+      TEST_DrawLevelField(x, y);
     }
 
 #if DEBUG
@@ -12020,7 +12672,7 @@ void GameActions_RND()
        DrawLevelGraphicAnimationIfNeeded(x, y, graphic);
 
       if (IS_GEM(element) || element == EL_SP_INFOTRON)
-       DrawTwinkleOnField(x, y);
+       TEST_DrawTwinkleOnField(x, y);
     }
     else if (IS_MOVING(x, y))
       ContinueMoving(x, y);
@@ -12155,7 +12807,7 @@ void GameActions_RND()
        DrawLevelGraphicAnimationIfNeeded(x, y, graphic);
 
       if (IS_GEM(element) || element == EL_SP_INFOTRON)
-       DrawTwinkleOnField(x, y);
+       TEST_DrawTwinkleOnField(x, y);
     }
     else if ((element == EL_ACID ||
              element == EL_EXIT_OPEN ||
@@ -12340,19 +12992,19 @@ void GameActions_RND()
              element == EL_MAGIC_WALL_FULL)
          {
            Feld[x][y] = EL_MAGIC_WALL_DEAD;
-           DrawLevelField(x, y);
+           TEST_DrawLevelField(x, y);
          }
          else if (element == EL_BD_MAGIC_WALL_ACTIVE ||
                   element == EL_BD_MAGIC_WALL_FULL)
          {
            Feld[x][y] = EL_BD_MAGIC_WALL_DEAD;
-           DrawLevelField(x, y);
+           TEST_DrawLevelField(x, y);
          }
          else if (element == EL_DC_MAGIC_WALL_ACTIVE ||
                   element == EL_DC_MAGIC_WALL_FULL)
          {
            Feld[x][y] = EL_DC_MAGIC_WALL_DEAD;
-           DrawLevelField(x, y);
+           TEST_DrawLevelField(x, y);
          }
        }
 
@@ -12406,6 +13058,36 @@ void GameActions_RND()
     }
   }
 
+#if USE_DELAYED_GFX_REDRAW
+  SCAN_PLAYFIELD(x, y)
+  {
+#if 1
+    if (GfxRedraw[x][y] != GFX_REDRAW_NONE)
+#else
+    if (IN_SCR_FIELD(SCREENX(x), SCREENY(y)) &&
+       GfxRedraw[x][y] != GFX_REDRAW_NONE)
+#endif
+    {
+      /* !!! PROBLEM: THIS REDRAWS THE PLAYFIELD _AFTER_ THE SCAN, BUT TILES
+        !!! MAY HAVE CHANGED AFTER BEING DRAWN DURING PLAYFIELD SCAN !!! */
+
+      if (GfxRedraw[x][y] & GFX_REDRAW_TILE)
+       DrawLevelField(x, y);
+
+      if (GfxRedraw[x][y] & GFX_REDRAW_TILE_CRUMBLED)
+       DrawLevelFieldCrumbledSand(x, y);
+
+      if (GfxRedraw[x][y] & GFX_REDRAW_TILE_CRUMBLED_NEIGHBOURS)
+       DrawLevelFieldCrumbledSandNeighbours(x, y);
+
+      if (GfxRedraw[x][y] & GFX_REDRAW_TILE_TWINKLED)
+       DrawTwinkleOnField(x, y);
+    }
+
+    GfxRedraw[x][y] = GFX_REDRAW_NONE;
+  }
+#endif
+
   CheckLevelTime();
 
   DrawAllPlayers();
@@ -12490,12 +13172,13 @@ static boolean AllPlayersInVisibleScreen()
 
 void ScrollLevel(int dx, int dy)
 {
-#if 1
+#if 0
+  /* (directly solved in BlitBitmap() now) */
   static Bitmap *bitmap_db_field2 = NULL;
   int softscroll_offset = (setup.soft_scrolling ? TILEX : 0);
   int x, y;
 #else
-  int i, x, y;
+  int x, y;
 #endif
 
 #if 0
@@ -12505,7 +13188,8 @@ void ScrollLevel(int dx, int dy)
     return;
 #endif
 
-#if 1
+#if 0
+  /* (directly solved in BlitBitmap() now) */
   if (bitmap_db_field2 == NULL)
     bitmap_db_field2 = CreateBitmap(FXSIZE, FYSIZE, DEFAULT_DEPTH);
 
@@ -12963,7 +13647,7 @@ boolean MovePlayer(struct PlayerInfo *player, int dx, int dy)
     else if (old_jx == jx && old_jy != jy)
       player->MovDir = (old_jy < jy ? MV_DOWN : MV_UP);
 
-    DrawLevelField(jx, jy);    /* for "crumbled sand" */
+    TEST_DrawLevelField(jx, jy);       /* for "crumbled sand" */
 
     player->last_move_dir = player->MovDir;
     player->is_moving = TRUE;
@@ -13108,8 +13792,14 @@ void ScrollPlayer(struct PlayerInfo *player, int mode)
 
     if (Feld[jx][jy] == EL_EXIT_OPEN ||
        Feld[jx][jy] == EL_EM_EXIT_OPEN ||
+#if 1
+       Feld[jx][jy] == EL_EM_EXIT_OPENING ||
+#endif
        Feld[jx][jy] == EL_STEEL_EXIT_OPEN ||
        Feld[jx][jy] == EL_EM_STEEL_EXIT_OPEN ||
+#if 1
+       Feld[jx][jy] == EL_EM_STEEL_EXIT_OPENING ||
+#endif
        Feld[jx][jy] == EL_SP_EXIT_OPEN ||
        Feld[jx][jy] == EL_SP_EXIT_OPENING)     /* <-- special case */
     {
@@ -13148,8 +13838,13 @@ void ScrollPlayer(struct PlayerInfo *player, int mode)
                                          CE_PLAYER_ENTERS_X,
                                          player->index_bit, enter_side);
 
+#if USE_FIX_CE_ACTION_WITH_PLAYER
+      CheckTriggeredElementChangeBySide(jx, jy, player->initial_element,
+                                       CE_MOVE_OF_X, move_direction);
+#else
       CheckTriggeredElementChangeBySide(jx, jy, player->element_nr,
                                        CE_MOVE_OF_X, move_direction);
+#endif
     }
 
     if (game.engine_version >= VERSION_IDENT(3,0,7,0))
@@ -13276,7 +13971,7 @@ void TestIfPlayerTouchesCustomElement(int x, int y)
     if (!IN_LEV_FIELD(xx, yy))
       continue;
 
-    if (IS_PLAYER(x, y))
+    if (IS_PLAYER(x, y))               /* player found at center element */
     {
       struct PlayerInfo *player = PLAYERINFO(x, y);
 
@@ -13294,8 +13989,21 @@ void TestIfPlayerTouchesCustomElement(int x, int y)
       CheckTriggeredElementChangeByPlayer(xx, yy, border_element,
                                          CE_PLAYER_TOUCHES_X,
                                          player->index_bit, border_side);
+
+#if USE_FIX_CE_ACTION_WITH_PLAYER
+      {
+       /* use player element that is initially defined in the level playfield,
+          not the player element that corresponds to the runtime player number
+          (example: a level that contains EL_PLAYER_3 as the only player would
+          incorrectly give EL_PLAYER_1 for "player->element_nr") */
+       int player_element = PLAYERINFO(x, y)->initial_element;
+
+       CheckElementChangeBySide(xx, yy, border_element, player_element,
+                                CE_TOUCHING_X, border_side);
+      }
+#endif
     }
-    else if (IS_PLAYER(xx, yy))
+    else if (IS_PLAYER(xx, yy))                /* player found at border element */
     {
       struct PlayerInfo *player = PLAYERINFO(xx, yy);
 
@@ -13310,6 +14018,20 @@ void TestIfPlayerTouchesCustomElement(int x, int y)
       CheckTriggeredElementChangeByPlayer(x, y, center_element,
                                          CE_PLAYER_TOUCHES_X,
                                          player->index_bit, center_side);
+
+#if USE_FIX_CE_ACTION_WITH_PLAYER
+      {
+       /* use player element that is initially defined in the level playfield,
+          not the player element that corresponds to the runtime player number
+          (example: a level that contains EL_PLAYER_3 as the only player would
+          incorrectly give EL_PLAYER_1 for "player->element_nr") */
+       int player_element = PLAYERINFO(xx, yy)->initial_element;
+
+       CheckElementChangeBySide(x, y, center_element, player_element,
+                                CE_TOUCHING_X, center_side);
+      }
+#endif
+
       break;
     }
   }
@@ -13382,10 +14104,14 @@ void TestIfElementTouchesCustomElement(int x, int y)
     /* check for change of border element */
     CheckElementChangeBySide(xx, yy, border_element, center_element,
                             CE_TOUCHING_X, center_side);
+
+    /* (center element cannot be player, so we dont have to check this here) */
   }
 
   for (i = 0; i < NUM_DIRECTIONS; i++)
   {
+    int xx = x + xy[i][0];
+    int yy = y + xy[i][1];
     int border_side = trigger_sides[i][1];
     int border_element = border_element_old[i];
 
@@ -13397,6 +14123,20 @@ void TestIfElementTouchesCustomElement(int x, int y)
       change_center_element =
        CheckElementChangeBySide(x, y, center_element, border_element,
                                 CE_TOUCHING_X, border_side);
+
+#if USE_FIX_CE_ACTION_WITH_PLAYER
+    if (IS_PLAYER(xx, yy))
+    {
+      /* use player element that is initially defined in the level playfield,
+        not the player element that corresponds to the runtime player number
+        (example: a level that contains EL_PLAYER_3 as the only player would
+        incorrectly give EL_PLAYER_1 for "player->element_nr") */
+      int player_element = PLAYERINFO(xx, yy)->initial_element;
+
+      CheckElementChangeBySide(x, y, center_element, player_element,
+                              CE_TOUCHING_X, border_side);
+    }
+#endif
   }
 }
 
@@ -13494,11 +14234,25 @@ void TestIfElementHitsCustomElement(int x, int y, int direction)
       CheckElementChangeBySide(x, y, hitting_element, touched_element,
                               CE_HITTING_X, touched_side);
 
-      CheckElementChangeBySide(hitx, hity, touched_element,
-                              hitting_element, CE_HIT_BY_X, hitting_side);
+      CheckElementChangeBySide(hitx, hity, touched_element, hitting_element,
+                              CE_HIT_BY_X, hitting_side);
 
       CheckElementChangeBySide(hitx, hity, touched_element, hitting_element,
                               CE_HIT_BY_SOMETHING, opposite_direction);
+
+#if USE_FIX_CE_ACTION_WITH_PLAYER
+      if (IS_PLAYER(hitx, hity))
+      {
+       /* use player element that is initially defined in the level playfield,
+          not the player element that corresponds to the runtime player number
+          (example: a level that contains EL_PLAYER_3 as the only player would
+          incorrectly give EL_PLAYER_1 for "player->element_nr") */
+       int player_element = PLAYERINFO(hitx, hity)->initial_element;
+
+       CheckElementChangeBySide(x, y, hitting_element, player_element,
+                                CE_HITTING_X, touched_side);
+      }
+#endif
     }
   }
 
@@ -13671,6 +14425,7 @@ void TestIfBadThingHitsGoodThing(int bad_x, int bad_y, int bad_move_dir)
 
     test_x = bad_x + test_xy[i][0];
     test_y = bad_y + test_xy[i][1];
+
     if (!IN_LEV_FIELD(test_x, test_y))
       continue;
 
@@ -13701,12 +14456,14 @@ void TestIfBadThingHitsGoodThing(int bad_x, int bad_y, int bad_move_dir)
 
        kill_x = test_x;
        kill_y = test_y;
+
        break;
       }
       else if (test_element == EL_PENGUIN)
       {
        kill_x = test_x;
        kill_y = test_y;
+
        break;
       }
     }
@@ -13729,6 +14486,63 @@ void TestIfBadThingHitsGoodThing(int bad_x, int bad_y, int bad_move_dir)
   }
 }
 
+void TestIfGoodThingGetsHitByBadThing(int bad_x, int bad_y, int bad_move_dir)
+{
+  int bad_element = Feld[bad_x][bad_y];
+  int dx = (bad_move_dir == MV_LEFT ? -1 : bad_move_dir == MV_RIGHT ? +1 : 0);
+  int dy = (bad_move_dir == MV_UP   ? -1 : bad_move_dir == MV_DOWN  ? +1 : 0);
+  int test_x = bad_x + dx, test_y = bad_y + dy;
+  int test_move_dir, test_element;
+  int kill_x = -1, kill_y = -1;
+
+  if (!IN_LEV_FIELD(test_x, test_y))
+    return;
+
+  test_move_dir =
+    (IS_MOVING(test_x, test_y) ? MovDir[test_x][test_y] : MV_NONE);
+
+  test_element = Feld[test_x][test_y];
+
+  if (test_move_dir != bad_move_dir)
+  {
+    /* good thing can be player or penguin that does not move away */
+    if (IS_PLAYER(test_x, test_y))
+    {
+      struct PlayerInfo *player = PLAYERINFO(test_x, test_y);
+
+      /* (note: in comparison to DONT_RUN_TO and DONT_TOUCH, also handle the
+        player as being hit when he is moving towards the bad thing, because
+        the "get hit by" condition would be lost after the player stops) */
+      if (player->MovPos != 0 && player->MovDir == bad_move_dir)
+       return;         /* player moves away from bad thing */
+
+      kill_x = test_x;
+      kill_y = test_y;
+    }
+    else if (test_element == EL_PENGUIN)
+    {
+      kill_x = test_x;
+      kill_y = test_y;
+    }
+  }
+
+  if (kill_x != -1 || kill_y != -1)
+  {
+    if (IS_PLAYER(kill_x, kill_y))
+    {
+      struct PlayerInfo *player = PLAYERINFO(kill_x, kill_y);
+
+      if (player->shield_deadly_time_left > 0 &&
+         !IS_INDESTRUCTIBLE(bad_element))
+       Bang(bad_x, bad_y);
+      else if (!PLAYER_ENEMY_PROTECTED(kill_x, kill_y))
+       KillPlayer(player);
+    }
+    else
+      Bang(kill_x, kill_y);
+  }
+}
+
 void TestIfPlayerTouchesBadThing(int x, int y)
 {
   TestIfGoodThingHitsBadThing(x, y, MV_NONE);
@@ -13800,6 +14614,11 @@ void KillPlayer(struct PlayerInfo *player)
   if (!player->active)
     return;
 
+#if 0
+  printf("::: 0: killed == %d, active == %d, reanimated == %d\n",
+        player->killed, player->active, player->reanimated);
+#endif
+
   /* the following code was introduced to prevent an infinite loop when calling
      -> Bang()
      -> CheckTriggeredElementChangeExt()
@@ -13824,8 +14643,31 @@ void KillPlayer(struct PlayerInfo *player)
   player->shield_normal_time_left = 0;
   player->shield_deadly_time_left = 0;
 
+#if 0
+  printf("::: 1: killed == %d, active == %d, reanimated == %d\n",
+        player->killed, player->active, player->reanimated);
+#endif
+
   Bang(jx, jy);
+
+#if 0
+  printf("::: 2: killed == %d, active == %d, reanimated == %d\n",
+        player->killed, player->active, player->reanimated);
+#endif
+
+#if USE_PLAYER_REANIMATION
+#if 1
+  if (player->reanimated)      /* killed player may have been reanimated */
+    player->killed = player->reanimated = FALSE;
+  else
+    BuryPlayer(player);
+#else
+  if (player->killed)          /* player may have been reanimated */
+    BuryPlayer(player);
+#endif
+#else
   BuryPlayer(player);
+#endif
 }
 
 static void KillPlayerUnlessEnemyProtected(int x, int y)
@@ -13866,7 +14708,7 @@ void RemovePlayer(struct PlayerInfo *player)
     StorePlayer[jx][jy] = 0;
 
   if (player->is_moving)
-    DrawLevelField(player->last_jx, player->last_jy);
+    TEST_DrawLevelField(player->last_jx, player->last_jy);
 
   for (i = 0; i < MAX_PLAYERS; i++)
     if (stored_player[i].active)
@@ -13937,9 +14779,9 @@ static boolean checkDiagonalPushing(struct PlayerInfo *player,
   =============================================================================
 */
 
-int DigField(struct PlayerInfo *player,
-            int oldx, int oldy, int x, int y,
-            int real_dx, int real_dy, int mode)
+static int DigField(struct PlayerInfo *player,
+                   int oldx, int oldy, int x, int y,
+                   int real_dx, int real_dy, int mode)
 {
   boolean is_player = (IS_PLAYER(oldx, oldy) || mode != DF_DIG);
   boolean player_was_pushing = player->is_pushing;
@@ -14094,8 +14936,14 @@ int DigField(struct PlayerInfo *player,
     }
     else if (element == EL_EXIT_OPEN ||
             element == EL_EM_EXIT_OPEN ||
+#if 1
+            element == EL_EM_EXIT_OPENING ||
+#endif
             element == EL_STEEL_EXIT_OPEN ||
             element == EL_EM_STEEL_EXIT_OPEN ||
+#if 1
+            element == EL_EM_STEEL_EXIT_OPENING ||
+#endif
             element == EL_SP_EXIT_OPEN ||
             element == EL_SP_EXIT_OPENING)
     {
@@ -14418,8 +15266,10 @@ int DigField(struct PlayerInfo *player,
 
     if (!(IN_LEV_FIELD(nextx, nexty) &&
          (IS_FREE(nextx, nexty) ||
-          (Feld[nextx][nexty] == EL_SOKOBAN_FIELD_EMPTY &&
-           IS_SB_ELEMENT(element)))))
+          (IS_SB_ELEMENT(element) &&
+           Feld[nextx][nexty] == EL_SOKOBAN_FIELD_EMPTY) ||
+          (IS_CUSTOM_ELEMENT(element) &&
+           CUSTOM_ELEMENT_CAN_ENTER_FIELD(element, nextx, nexty)))))
       return MP_NO_ACTION;
 
     if (!checkDiagonalPushing(player, x, y, real_dx, real_dy))
@@ -14439,6 +15289,13 @@ int DigField(struct PlayerInfo *player,
       return MP_NO_ACTION;
     }
 
+    if (IS_CUSTOM_ELEMENT(element) &&
+       CUSTOM_ELEMENT_CAN_ENTER_FIELD(element, nextx, nexty))
+    {
+      if (!DigFieldByCE(nextx, nexty, element))
+       return MP_NO_ACTION;
+    }
+
     if (IS_SB_ELEMENT(element))
     {
       if (element == EL_SOKOBAN_FIELD_FULL)
@@ -14524,7 +15381,7 @@ int DigField(struct PlayerInfo *player,
 
       game.robot_wheel_active = TRUE;
 
-      DrawLevelField(x, y);
+      TEST_DrawLevelField(x, y);
     }
     else if (element == EL_SP_TERMINAL)
     {
@@ -14579,7 +15436,7 @@ int DigField(struct PlayerInfo *player,
       local_player->lights_still_needed--;
 
       ResetGfxAnimation(x, y);
-      DrawLevelField(x, y);
+      TEST_DrawLevelField(x, y);
     }
     else if (element == EL_TIME_ORB_FULL)
     {
@@ -14599,7 +15456,7 @@ int DigField(struct PlayerInfo *player,
       }
 
       ResetGfxAnimation(x, y);
-      DrawLevelField(x, y);
+      TEST_DrawLevelField(x, y);
     }
     else if (element == EL_EMC_MAGIC_BALL_SWITCH ||
             element == EL_EMC_MAGIC_BALL_SWITCH_ACTIVE)
@@ -14681,7 +15538,66 @@ int DigField(struct PlayerInfo *player,
   return MP_MOVING;
 }
 
-boolean SnapField(struct PlayerInfo *player, int dx, int dy)
+static boolean DigFieldByCE(int x, int y, int digging_element)
+{
+  int element = Feld[x][y];
+
+  if (!IS_FREE(x, y))
+  {
+    int action = (IS_DIGGABLE(element) ? ACTION_DIGGING :
+                 IS_COLLECTIBLE(element) ? ACTION_COLLECTING :
+                 ACTION_BREAKING);
+
+    /* no element can dig solid indestructible elements */
+    if (IS_INDESTRUCTIBLE(element) &&
+       !IS_DIGGABLE(element) &&
+       !IS_COLLECTIBLE(element))
+      return FALSE;
+
+    if (AmoebaNr[x][y] &&
+       (element == EL_AMOEBA_FULL ||
+        element == EL_BD_AMOEBA ||
+        element == EL_AMOEBA_GROWING))
+    {
+      AmoebaCnt[AmoebaNr[x][y]]--;
+      AmoebaCnt2[AmoebaNr[x][y]]--;
+    }
+
+    if (IS_MOVING(x, y))
+      RemoveMovingField(x, y);
+    else
+    {
+      RemoveField(x, y);
+      TEST_DrawLevelField(x, y);
+    }
+
+    /* if digged element was about to explode, prevent the explosion */
+    ExplodeField[x][y] = EX_TYPE_NONE;
+
+    PlayLevelSoundAction(x, y, action);
+  }
+
+  Store[x][y] = EL_EMPTY;
+
+#if 1
+  /* this makes it possible to leave the removed element again */
+  if (IS_EQUAL_OR_IN_GROUP(element, MOVE_ENTER_EL(digging_element)))
+    Store[x][y] = element;
+#else
+  if (IS_EQUAL_OR_IN_GROUP(element, MOVE_ENTER_EL(digging_element)))
+  {
+    int move_leave_element = element_info[digging_element].move_leave_element;
+
+    /* this makes it possible to leave the removed element again */
+    Store[x][y] = (move_leave_element == EL_TRIGGER_ELEMENT ?
+                  element : move_leave_element);
+  }
+#endif
+
+  return TRUE;
+}
+
+static boolean SnapField(struct PlayerInfo *player, int dx, int dy)
 {
   int jx = player->jx, jy = player->jy;
   int x = jx + dx, y = jy + dy;
@@ -14754,14 +15670,14 @@ boolean SnapField(struct PlayerInfo *player, int dx, int dy)
   }
 
   if (player->MovPos != 0)     /* prevent graphic bugs in versions < 2.2.0 */
-    DrawLevelField(player->last_jx, player->last_jy);
+    TEST_DrawLevelField(player->last_jx, player->last_jy);
 
-  DrawLevelField(x, y);
+  TEST_DrawLevelField(x, y);
 
   return TRUE;
 }
 
-boolean DropElement(struct PlayerInfo *player)
+static boolean DropElement(struct PlayerInfo *player)
 {
   int old_element, new_element;
   int dropx = player->jx, dropy = player->jy;
index f4216805b6606b776b1e06cb562de5db66416b2b..7a9bf984963fd9b76a8cc276605e23c203f0ac41 100644 (file)
@@ -182,7 +182,10 @@ struct PlayerInfo
   boolean present;             /* player present in level playfield */
   boolean connected;           /* player connected (locally or via network) */
   boolean active;              /* player present and connected */
+  boolean mapped;              /* player already mapped to input device */
+
   boolean killed;              /* player maybe present/active, but killed */
+  boolean reanimated;          /* player maybe killed, but reanimated */
 
   int index_nr;                        /* player number (0 to 3) */
   int index_bit;               /* player number bit (1 << 0 to 1 << 3) */
@@ -190,6 +193,7 @@ struct PlayerInfo
   int client_nr;               /* network client identifier */
 
   byte action;                 /* action from local input device */
+  byte mapped_action;          /* action mapped from device to player */
   byte effective_action;       /* action acknowledged from network server
                                   or summarized over all configured input
                                   devices when in single player mode */
@@ -202,8 +206,9 @@ struct PlayerInfo
 
   int GfxAction;
 
-  boolean use_murphy;
+  int initial_element;         /* EL_PLAYER_1 to EL_PLAYER_4 or EL_SP_MURPHY */
   int artwork_element;
+  boolean use_murphy;
 
   boolean block_last_field;
   int block_delay_adjustment;  /* needed for different engine versions */
index 9c89ceb5db0b7137d87db9969c5e95a3b46b8741..9dab9371e449ca0d78369721134f346fe34443cc 100644 (file)
@@ -344,6 +344,15 @@ static int getFontBitmapID(int font_nr)
     special = GFX_SPECIAL_ARG_DOOR;
 #endif
 
+#if 0
+  if (special != -1)
+  {
+    printf("%s%s\n",
+          font_info[font_nr].token_name,
+          special_suffix_info[special].suffix);
+  }
+#endif
+
   if (special != -1)
     return font_info[font_nr].special_bitmap_id[special];
   else
@@ -3144,10 +3153,16 @@ void InitElementPropertiesStatic()
     EL_SOKOBAN_FIELD_EMPTY,
     EL_EXIT_OPEN,
     EL_EM_EXIT_OPEN,
+#if 1
+    EL_EM_EXIT_OPENING,
+#endif
     EL_SP_EXIT_OPEN,
     EL_SP_EXIT_OPENING,
     EL_STEEL_EXIT_OPEN,
     EL_EM_STEEL_EXIT_OPEN,
+#if 1
+    EL_EM_STEEL_EXIT_OPENING,
+#endif
     EL_GATE_1,
     EL_GATE_2,
     EL_GATE_3,
@@ -4849,6 +4864,14 @@ void InitElementPropertiesEngine(int engine_version)
       -1
     };
 
+    static int ep_em_explodes_by_fire[] =
+    {
+      EL_EM_DYNAMITE,
+      EL_EM_DYNAMITE_ACTIVE,
+      EL_MOLE,
+      -1
+    };
+
     /* special EM style gems behaviour */
     for (i = 0; ep_em_slippery_wall[i] != -1; i++)
       SET_PROPERTY(ep_em_slippery_wall[i], EP_EM_SLIPPERY_WALL,
@@ -4858,6 +4881,11 @@ void InitElementPropertiesEngine(int engine_version)
     SET_PROPERTY(EL_EXPANDABLE_WALL_GROWING, EP_EM_SLIPPERY_WALL,
                 (level.em_slippery_gems &&
                  engine_version > VERSION_IDENT(2,0,1,0)));
+
+    /* special EM style explosion behaviour regarding chain reactions */
+    for (i = 0; ep_em_explodes_by_fire[i] != -1; i++)
+      SET_PROPERTY(ep_em_explodes_by_fire[i], EP_EXPLODES_BY_FIRE,
+                  level.em_explodes_by_fire);
   }
 
   /* this is needed because some graphics depend on element properties */
@@ -4884,6 +4912,18 @@ void InitElementPropertiesAfterLoading(int engine_version)
   }
 }
 
+void InitElementPropertiesGfxElement()
+{
+  int i;
+
+  for (i = 0; i < MAX_NUM_ELEMENTS; i++)
+  {
+    struct ElementInfo *ei = &element_info[i];
+
+    ei->gfx_element = (ei->use_gfx_element ? ei->gfx_element_initial : i);
+  }
+}
+
 static void InitGlobal()
 {
   int graphic;
@@ -4976,6 +5016,7 @@ static void InitGlobal()
 
   global.autoplay_leveldir = NULL;
   global.convert_leveldir = NULL;
+  global.create_images_dir = NULL;
 
   global.frames_per_second = 0;
   global.fps_slowdown = FALSE;
@@ -5157,6 +5198,18 @@ void Execute_Command(char *command)
       global.convert_level_nr = atoi(str_ptr); /* get level_nr value */
     }
   }
+  else if (strncmp(command, "create images ", 14) == 0)
+  {
+#if defined(TARGET_SDL)
+    global.create_images_dir = getStringCopy(&command[14]);
+
+    if (access(global.create_images_dir, W_OK) != 0)
+      Error(ERR_EXIT, "image target directory '%s' not found or not writable",
+           global.create_images_dir);
+#else
+    Error(ERR_EXIT, "command only available for SDL target");
+#endif
+  }
 
 #if DEBUG
 #if defined(TARGET_SDL)
@@ -5611,8 +5664,30 @@ static void InitImages()
 {
   print_timestamp_init("InitImages");
 
+#if 0
+  printf("::: leveldir_current->identifier == '%s'\n",
+        leveldir_current == NULL ? "[NULL]" : leveldir_current->identifier);
+  printf("::: leveldir_current->graphics_path == '%s'\n",
+        leveldir_current == NULL ? "[NULL]" : leveldir_current->graphics_path);
+  printf("::: leveldir_current->graphics_set == '%s'\n",
+        leveldir_current == NULL ? "[NULL]" : leveldir_current->graphics_set);
+  printf("::: getLevelArtworkSet(ARTWORK_TYPE_GRAPHICS) == '%s'\n",
+        leveldir_current == NULL ? "[NULL]" : LEVELDIR_ARTWORK_SET(leveldir_current, ARTWORK_TYPE_GRAPHICS));
+#endif
+
   setLevelArtworkDir(artwork.gfx_first);
 
+#if 0
+  printf("::: leveldir_current->identifier == '%s'\n",
+        leveldir_current == NULL ? "[NULL]" : leveldir_current->identifier);
+  printf("::: leveldir_current->graphics_path == '%s'\n",
+        leveldir_current == NULL ? "[NULL]" : leveldir_current->graphics_path);
+  printf("::: leveldir_current->graphics_set == '%s'\n",
+        leveldir_current == NULL ? "[NULL]" : leveldir_current->graphics_set);
+  printf("::: getLevelArtworkSet(ARTWORK_TYPE_GRAPHICS) == '%s'\n",
+        leveldir_current == NULL ? "[NULL]" : LEVELDIR_ARTWORK_SET(leveldir_current, ARTWORK_TYPE_GRAPHICS));
+#endif
+
 #if 0
   printf("::: InitImages for '%s' ['%s', '%s'] ['%s', '%s']\n",
         leveldir_current->identifier,
@@ -5736,46 +5811,94 @@ static boolean CheckArtworkConfigForCustomElements(char *filename)
   return redefined_ce_found;
 }
 
-static void InitOverrideArtwork()
+static boolean CheckArtworkTypeForRedefinedCustomElements(int type)
 {
-  boolean init_override_from_setup = TRUE;
+  char *filename_base, *filename_local;
+  boolean redefined_ce_found = FALSE;
 
-  gfx.override_level_graphics = FALSE;
-  gfx.override_level_sounds   = FALSE;
-  gfx.override_level_music    = FALSE;
+  setLevelArtworkDir(ARTWORK_FIRST_NODE(artwork, type));
 
-  if (setup.auto_override_artwork)
-  {
-    char *filename_base, *filename_local;
-    boolean redefined_ce_found = FALSE;
+#if 0
+  printf("::: leveldir_current->identifier == '%s'\n",
+        leveldir_current == NULL ? "[NULL]" : leveldir_current->identifier);
+  printf("::: leveldir_current->graphics_path == '%s'\n",
+        leveldir_current == NULL ? "[NULL]" : leveldir_current->graphics_path);
+  printf("::: leveldir_current->graphics_set == '%s'\n",
+        leveldir_current == NULL ? "[NULL]" : leveldir_current->graphics_set);
+  printf("::: getLevelArtworkSet(ARTWORK_TYPE_GRAPHICS) == '%s'\n",
+        leveldir_current == NULL ? "[NULL]" :
+        LEVELDIR_ARTWORK_SET(leveldir_current, type));
+#endif
 
-    /* first look for special artwork configured in level series config */
-    filename_base = getCustomArtworkLevelConfigFilename(ARTWORK_TYPE_GRAPHICS);
+  /* first look for special artwork configured in level series config */
+  filename_base = getCustomArtworkLevelConfigFilename(type);
 
-    if (fileExists(filename_base))
-      redefined_ce_found |= CheckArtworkConfigForCustomElements(filename_base);
+#if 0
+  printf("::: filename_base == '%s'\n", filename_base);
+#endif
 
-    filename_local = getCustomArtworkConfigFilename(ARTWORK_TYPE_GRAPHICS);
+  if (fileExists(filename_base))
+    redefined_ce_found |= CheckArtworkConfigForCustomElements(filename_base);
 
-    if (filename_local != NULL && !strEqual(filename_base, filename_local))
-      redefined_ce_found |= CheckArtworkConfigForCustomElements(filename_local);
+  filename_local = getCustomArtworkConfigFilename(type);
 
-    if (!redefined_ce_found)
-    {
-      gfx.override_level_graphics = TRUE;
-      gfx.override_level_sounds   = TRUE;
-      gfx.override_level_music    = TRUE;
+#if 0
+  printf("::: filename_local == '%s'\n", filename_local);
+#endif
 
-      init_override_from_setup = FALSE;
-    }
-  }
+  if (filename_local != NULL && !strEqual(filename_base, filename_local))
+    redefined_ce_found |= CheckArtworkConfigForCustomElements(filename_local);
+
+#if 0
+  printf("::: redefined_ce_found == %d\n", redefined_ce_found);
+#endif
 
-  if (init_override_from_setup)
+  return redefined_ce_found;
+}
+
+static void InitOverrideArtwork()
+{
+  boolean redefined_ce_found = FALSE;
+
+  /* to check if this level set redefines any CEs, do not use overriding */
+  gfx.override_level_graphics = FALSE;
+  gfx.override_level_sounds   = FALSE;
+  gfx.override_level_music    = FALSE;
+
+  /* now check if this level set has definitions for custom elements */
+  if (setup.override_level_graphics == AUTO ||
+      setup.override_level_sounds   == AUTO ||
+      setup.override_level_music    == AUTO)
+    redefined_ce_found =
+      (CheckArtworkTypeForRedefinedCustomElements(ARTWORK_TYPE_GRAPHICS) |
+       CheckArtworkTypeForRedefinedCustomElements(ARTWORK_TYPE_SOUNDS) |
+       CheckArtworkTypeForRedefinedCustomElements(ARTWORK_TYPE_MUSIC));
+
+#if 0
+  printf("::: redefined_ce_found == %d\n", redefined_ce_found);
+#endif
+
+  if (redefined_ce_found)
   {
-    gfx.override_level_graphics = setup.override_level_graphics;
-    gfx.override_level_sounds   = setup.override_level_sounds;
-    gfx.override_level_music    = setup.override_level_music;
+    /* this level set has CE definitions: change "AUTO" to "FALSE" */
+    gfx.override_level_graphics = (setup.override_level_graphics == TRUE);
+    gfx.override_level_sounds   = (setup.override_level_sounds   == TRUE);
+    gfx.override_level_music    = (setup.override_level_music    == TRUE);
   }
+  else
+  {
+    /* this level set has no CE definitions: change "AUTO" to "TRUE" */
+    gfx.override_level_graphics = (setup.override_level_graphics != FALSE);
+    gfx.override_level_sounds   = (setup.override_level_sounds   != FALSE);
+    gfx.override_level_music    = (setup.override_level_music    != FALSE);
+  }
+
+#if 0
+  printf("::: => %d, %d, %d\n",
+        gfx.override_level_graphics,
+        gfx.override_level_sounds,
+        gfx.override_level_music);
+#endif
 }
 
 static char *getNewArtworkIdentifier(int type)
@@ -6108,6 +6231,11 @@ void OpenAll()
     ConvertLevels();
     return;
   }
+  else if (global.create_images_dir)
+  {
+    CreateLevelSketchImages();
+    return;
+  }
 
   game_status = GAME_MODE_MAIN;
 
index 3df39d265cb852d02c3d5f2325124f7c1ee75970..4226241afc7bfe467ead6e61854c153e1c7a48a2 100644 (file)
@@ -36,6 +36,7 @@ void ResolveGroupElement(int);
 void InitElementPropertiesStatic(void);
 void InitElementPropertiesEngine(int);
 void InitElementPropertiesAfterLoading(int);
+void InitElementPropertiesGfxElement();
 
 void ReloadCustomArtwork(int);
 void RedrawBackground();
index 9d23c75f838c42301f3b44f07ad27d530e9f124b..5e4b9310bc4701f9921603fa1b353a94398462d9 100644 (file)
@@ -337,13 +337,26 @@ unsigned int init_random_number(int nr, long seed)
 {
   if (seed == NEW_RANDOMIZE)
   {
-#if defined(TARGET_SDL)
-    seed = (long)SDL_GetTicks();
-#else
+    /* default random seed */
+    seed = (long)time(NULL);                   // seconds since the epoch
+
+#if !defined(PLATFORM_WIN32)
+    /* add some more randomness */
     struct timeval current_time;
 
     gettimeofday(&current_time, NULL);
-    seed = (long)current_time.tv_usec;
+
+    seed += (long)current_time.tv_usec;                // microseconds since the epoch
+#endif
+
+#if defined(TARGET_SDL)
+    /* add some more randomness */
+    seed += (long)SDL_GetTicks();              // milliseconds since SDL init
+#endif
+
+#if 1
+    /* add some more randomness */
+    seed += GetSimpleRandom(1000000);
 #endif
   }
 
@@ -1600,6 +1613,24 @@ boolean get_boolean_from_string(char *s)
   return result;
 }
 
+int get_switch3_from_string(char *s)
+{
+  char *s_lower = getStringToLower(s);
+  int result = FALSE;
+
+  if (strEqual(s_lower, "true") ||
+      strEqual(s_lower, "yes") ||
+      strEqual(s_lower, "on") ||
+      get_integer_from_string(s) == 1)
+    result = TRUE;
+  else if (strEqual(s_lower, "auto"))
+    result = AUTO;
+
+  free(s_lower);
+
+  return result;
+}
+
 
 /* ------------------------------------------------------------------------- */
 /* functions for generic lists                                               */
index 29aaee7043fe7b4701c6c2cc5450bec8e99c0b6f..56467dc1220255a11c51d9870a660b2dad4c6a75 100644 (file)
@@ -25,7 +25,7 @@
 #define READ_COUNTER                   1
 
 /* values for InitRND() */
-#define NEW_RANDOMIZE                  -1
+#define NEW_RANDOMIZE                  0
 
 #define RANDOM_ENGINE                  0
 #define RANDOM_SIMPLE                  1
@@ -169,6 +169,7 @@ char getValidConfigValueChar(char);
 
 int get_integer_from_string(char *);
 boolean get_boolean_from_string(char *);
+int get_switch3_from_string(char *);
 
 ListNode *newListNode(void);
 void addNodeToList(ListNode **, char *, void *);
index ab3ac82d20e80fa80ebb2f1ea29ad41f790a2da0..f751fe85be2a5e568b94c6929f3ea79fc5f3d0ee 100644 (file)
@@ -296,6 +296,26 @@ boolean SDLSetVideoMode(DrawBuffer **backbuffer, boolean fullscreen)
     }
   }
 
+
+#if 1
+  SDL_EventState(SDL_SYSWMEVENT, SDL_ENABLE);
+
+#if defined(PLATFORM_WIN32)
+  {
+    SDL_SysWMinfo wminfo;
+    HWND hwnd;
+
+    SDL_VERSION(&wminfo.version);
+    SDL_GetWMInfo(&wminfo);
+
+    hwnd = wminfo.window;
+
+    DragAcceptFiles(hwnd, TRUE);
+  }
+#endif
+#endif
+
+
   return success;
 }
 
@@ -1787,6 +1807,36 @@ void SDLNextEvent(Event *event)
   }
 }
 
+void SDLHandleWindowManagerEvent(Event *event)
+{
+#if defined(PLATFORM_WIN32)
+  SDL_SysWMEvent *syswmevent = (SDL_SysWMEvent *)event;
+  SDL_SysWMmsg *syswmmsg = (SDL_SysWMmsg *)(syswmevent->msg);
+
+  if (syswmmsg->msg == WM_DROPFILES)
+  {
+    HDROP hdrop = (HDROP)syswmmsg->wParam;
+    int i, num_files;
+
+    printf("::: SDL_SYSWMEVENT:\n");
+
+    num_files = DragQueryFile(hdrop, 0xffffffff, NULL, 0);
+
+    for (i = 0; i < num_files; i++)
+    {
+      int buffer_len = DragQueryFile(hdrop, i, NULL, 0);
+      char buffer[buffer_len + 1];
+
+      DragQueryFile(hdrop, i, buffer, buffer_len + 1);
+
+      printf("::: - '%s'\n", buffer);
+    }
+
+    DragFinish((HDROP)syswmmsg->wParam);
+  }
+#endif
+}
+
 
 /* ========================================================================= */
 /* joystick functions                                                        */
index 19ead5e5200254255dd6ff022ee4a7c4fb3dee5c..62196e1aadff8bc25ca1b67a080eb4b4bd35c0b2 100644 (file)
@@ -19,7 +19,9 @@
 #include <SDL_mixer.h>
 #include <SDL_net.h>
 #include <SDL_thread.h>
-
+#if defined(PLATFORM_WIN32)
+#include <SDL_syswm.h>
+#endif
 
 /* definitions needed for "system.c" */
 
@@ -375,6 +377,7 @@ void SDLOpenAudio(void);
 void SDLCloseAudio(void);
 
 void SDLNextEvent(Event *);
+void SDLHandleWindowManagerEvent(Event *);
 
 void HandleJoystickEvent(Event *);
 void SDLInitJoysticks(void);
index 9d095724b4363edf088ebf8b0928f6741c4ac846..3e5392498dbdb63474df4b3e75b19c22488452d5 100644 (file)
@@ -334,7 +334,9 @@ char *setLevelArtworkDir(TreeInfo *ti)
   checked_free(*artwork_path_ptr);
 
   if ((level_artwork = getTreeInfoFromIdentifier(ti, *artwork_set_ptr)))
+  {
     *artwork_path_ptr = getStringCopy(getSetupArtworkDir(level_artwork));
+  }
   else
   {
     /*
@@ -2685,6 +2687,10 @@ void setSetupInfo(struct TokenInfo *token_info,
       *(boolean *)setup_value = get_boolean_from_string(token_value);
       break;
 
+    case TYPE_SWITCH3:
+      *(int *)setup_value = get_switch3_from_string(token_value);
+      break;
+
     case TYPE_KEY:
       *(Key *)setup_value = getKeyFromKeyName(token_value);
       break;
@@ -3747,10 +3753,20 @@ char *getSetupValue(int type, void *value)
       strcpy(value_string, (*(boolean *)value ? "on" : "off"));
       break;
 
+    case TYPE_SWITCH3:
+      strcpy(value_string, (*(int *)value == AUTO  ? "auto" :
+                           *(int *)value == FALSE ? "off" : "on"));
+      break;
+
     case TYPE_YES_NO:
       strcpy(value_string, (*(boolean *)value ? "yes" : "no"));
       break;
 
+    case TYPE_YES_NO_AUTO:
+      strcpy(value_string, (*(int *)value == AUTO  ? "auto" :
+                           *(int *)value == FALSE ? "no" : "yes"));
+      break;
+
     case TYPE_ECS_AGA:
       strcpy(value_string, (*(boolean *)value ? "AGA" : "ECS"));
       break;
index 02a815ab8c02edbf8bf7fbfc8a909664ef03e52b..414cf74e7ad2db66db009756387c0d644f68bbce 100644 (file)
 /* values for setup file handling */
 #define TYPE_BOOLEAN                   (1 << 0)
 #define TYPE_SWITCH                    (1 << 1)
-#define TYPE_YES_NO                    (1 << 2)
-#define TYPE_ECS_AGA                   (1 << 3)
-#define TYPE_KEY                       (1 << 4)
-#define TYPE_KEY_X11                   (1 << 5)
-#define TYPE_INTEGER                   (1 << 6)
-#define TYPE_STRING                    (1 << 7)
-#define TYPE_ELEMENT                   (1 << 8)
-#define TYPE_GRAPHIC                   (1 << 9)
+#define TYPE_SWITCH3                   (1 << 2)
+#define TYPE_YES_NO                    (1 << 3)
+#define TYPE_YES_NO_AUTO               (1 << 4)
+#define TYPE_ECS_AGA                   (1 << 5)
+#define TYPE_KEY                       (1 << 6)
+#define TYPE_KEY_X11                   (1 << 7)
+#define TYPE_INTEGER                   (1 << 8)
+#define TYPE_STRING                    (1 << 9)
+#define TYPE_ELEMENT                   (1 << 10)
+#define TYPE_GRAPHIC                   (1 << 11)
 
 /* additional values for setup screen */
-#define TYPE_ENTER_SCREEN              (1 << 10)
-#define TYPE_LEAVE_SCREEN              (1 << 11)
-#define TYPE_ENTER_MENU                        (1 << 12)
-#define TYPE_LEAVE_MENU                        (1 << 13)
-#define TYPE_ENTER_LIST                        (1 << 14)
-#define TYPE_LEAVE_LIST                        (1 << 15)
-#define TYPE_EMPTY                     (1 << 16)
-#define TYPE_KEYTEXT                   (1 << 17)
-
-#define TYPE_GHOSTED                   (1 << 18)
-#define TYPE_QUERY                     (1 << 19)
+#define TYPE_ENTER_SCREEN              (1 << 12)
+#define TYPE_LEAVE_SCREEN              (1 << 13)
+#define TYPE_ENTER_MENU                        (1 << 14)
+#define TYPE_LEAVE_MENU                        (1 << 15)
+#define TYPE_ENTER_LIST                        (1 << 16)
+#define TYPE_LEAVE_LIST                        (1 << 17)
+#define TYPE_EMPTY                     (1 << 18)
+#define TYPE_KEYTEXT                   (1 << 19)
+
+#define TYPE_GHOSTED                   (1 << 20)
+#define TYPE_QUERY                     (1 << 21)
 
 /* additional values for internal purposes */
-#define TYPE_BITFIELD                  (1 << 20)
-#define TYPE_CONTENT                   (1 << 21)
-#define TYPE_ELEMENT_LIST              (1 << 22)
-#define TYPE_CONTENT_LIST              (1 << 23)
+#define TYPE_BITFIELD                  (1 << 22)
+#define TYPE_CONTENT                   (1 << 23)
+#define TYPE_ELEMENT_LIST              (1 << 24)
+#define TYPE_CONTENT_LIST              (1 << 25)
 
 /* derived values for setup file handling */
 #define TYPE_BOOLEAN_STYLE             (TYPE_BOOLEAN | \
@@ -57,6 +59,8 @@
 
 /* derived values for setup screen */
 #define TYPE_VALUE                     (TYPE_BOOLEAN_STYLE     | \
+                                        TYPE_SWITCH3           | \
+                                        TYPE_YES_NO_AUTO       | \
                                         TYPE_KEY               | \
                                         TYPE_KEY_X11           | \
                                         TYPE_INTEGER           | \
index 7a6618eb9176dc7b08b8de21a9a5891c50c0e25b..20ea20bed03553ee0e76107830f8dc3031045e41 100644 (file)
@@ -491,8 +491,34 @@ void BlitBitmap(Bitmap *src_bitmap, Bitmap *dst_bitmap,
   if (DrawingDeactivated(dst_x, dst_y, width, height))
     return;
 
-  sysCopyArea(src_bitmap, dst_bitmap, src_x, src_y, width, height,
-             dst_x, dst_y, BLIT_OPAQUE);
+#if 0
+  /* !!! APPARENTLY THIS HAS BEEN FIXED IN SDL 1.2.12 !!! */
+#if defined(TARGET_SDL) && defined(PLATFORM_WIN32)
+  if (src_bitmap == dst_bitmap)
+  {
+    /* !!! THIS IS A BUG (IN THE SDL LIBRARY?) AND SHOULD BE FIXED !!! */
+
+    /* needed when blitting directly to same bitmap -- should not be needed with
+       recent SDL libraries, but apparently does not work in 1.2.11 directly */
+
+    static Bitmap *tmp_bitmap = NULL;
+
+    if (tmp_bitmap == NULL)
+      tmp_bitmap = CreateBitmap(MAX(FXSIZE, WIN_XSIZE),
+                               MAX(FYSIZE, WIN_YSIZE), DEFAULT_DEPTH);
+
+    sysCopyArea(src_bitmap, tmp_bitmap,
+               src_x, src_y, width, height, dst_x, dst_y, BLIT_OPAQUE);
+    sysCopyArea(tmp_bitmap, dst_bitmap,
+               src_x, src_y, width, height, dst_x, dst_y, BLIT_OPAQUE);
+
+    return;
+  }
+#endif
+#endif
+
+  sysCopyArea(src_bitmap, dst_bitmap,
+             src_x, src_y, width, height, dst_x, dst_y, BLIT_OPAQUE);
 }
 
 void FadeRectangle(Bitmap *bitmap_cross, int x, int y, int width, int height,
index 28e5a2eaf8a6395656e09f0ea84753d5aed7df34..3791f1e6523b07e16e7d70b6886f5b22a01cefc0 100644 (file)
@@ -870,10 +870,9 @@ struct SetupInfo
   char *graphics_set;
   char *sounds_set;
   char *music_set;
-  boolean override_level_graphics;
-  boolean override_level_sounds;
-  boolean override_level_music;
-  boolean auto_override_artwork;
+  int override_level_graphics;         /* not boolean -- can also be "AUTO" */
+  int override_level_sounds;           /* not boolean -- can also be "AUTO" */
+  int override_level_music;            /* not boolean -- can also be "AUTO" */
 
   struct SetupEditorInfo editor;
   struct SetupEditorCascadeInfo editor_cascade;
index f4d0e820847c59c9a0aef9240014d02dcf288a3f..d6f49bdd68026c47a6557575f8eb15ad2e8c1d86 100644 (file)
@@ -26,11 +26,22 @@ typedef int boolean;
 typedef unsigned char byte;
 #endif
 
-#ifndef FALSE
-#define FALSE          0
-#define TRUE           (!FALSE)
+#ifdef TRUE
+#undef TRUE
+#endif
+
+#ifdef FALSE
+#undef FALSE
 #endif
 
+#ifdef AUTO
+#undef AUTO
+#endif
+
+#define TRUE           1
+#define FALSE          0
+#define AUTO           -1
+
 #ifndef MIN
 #define MIN(a,b)       ((a) < (b) ? (a) : (b))
 #endif
index aae4944aace422cf3f208817a530c3be47c35015..f1ea104e361ad855d33dc45b9977f49fb2bac73f 100644 (file)
@@ -75,6 +75,7 @@ int                   GfxRandom[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 int                    GfxElement[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 int                    GfxAction[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 int                    GfxDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+int                    GfxRedraw[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 
 int                    ActiveElement[MAX_NUM_ELEMENTS];
 int                    ActiveButton[NUM_IMAGE_FILES];
@@ -5538,6 +5539,7 @@ static void print_usage()
         "  \"dump tape FILE\"                 dump tape data from FILE\n"
         "  \"autoplay LEVELDIR [NR ...]\"     play level tapes for LEVELDIR\n"
         "  \"convert LEVELDIR [NR]\"          convert levels in LEVELDIR\n"
+        "  \"create images DIRECTORY\"        write BMP images to DIRECTORY\n"
         "\n",
         program.command_basename);
 }
index 763195b9b7aa6db58295ea39d476d1c243ba294f..d47b40686a75dfdf113932272fd9e2b48df710fe 100644 (file)
 #define EP_THROWABLE                   28
 #define EP_CAN_EXPLODE                 29
 #define EP_GRAVITY_REACHABLE           30
+#define EP_DONT_GET_HIT_BY             31
 
 /* values for pre-defined properties */
 /* (from here on, values can be changed by inserting new values) */
                                         PLAYER_BITS_3 | \
                                         PLAYER_BITS_4)
 #define PLAYER_BITS_TRIGGER            (1 << 4)
+#define PLAYER_BITS_ACTION             (1 << 5)
 
 /* values for move directions (bits 0 - 3: basic move directions) */
 #define MV_BIT_PREVIOUS                        4
 #define CP_WHEN_REMOVABLE              4
 #define CP_WHEN_WALKABLE               5
 
-/* values for change actions for custom elements */
+/* values for change actions for custom elements (stored in level file) */
 #define CA_NO_ACTION                   0
 #define CA_EXIT_PLAYER                 1
 #define CA_KILL_PLAYER                 2
 #define CA_SET_CE_SCORE                        15
 #define CA_SET_CE_VALUE                        16
 #define CA_SET_ENGINE_SCAN_MODE                17
+#define CA_SET_PLAYER_INVENTORY                18
+#define CA_SET_CE_ARTWORK              19
+#define CA_SET_LEVEL_RANDOM_SEED       20
 
 #define CA_HEADLINE_LEVEL_ACTIONS      250
 #define CA_HEADLINE_PLAYER_ACTIONS     251
 #define CA_ARG_PLAYER_4                        (CA_ARG_PLAYER + PLAYER_BITS_4)
 #define CA_ARG_PLAYER_ANY              (CA_ARG_PLAYER + PLAYER_BITS_ANY)
 #define CA_ARG_PLAYER_TRIGGER          (CA_ARG_PLAYER + PLAYER_BITS_TRIGGER)
+#define CA_ARG_PLAYER_ACTION           (CA_ARG_PLAYER + PLAYER_BITS_ACTION)
 #define CA_ARG_PLAYER_HEADLINE         (CA_ARG_PLAYER + 999)
 #define CA_ARG_NUMBER                  11000
 #define CA_ARG_NUMBER_MIN              (CA_ARG_NUMBER + 0)
 #define CA_ARG_ELEMENT_RESET           (CA_ARG_ELEMENT + 0)
 #define CA_ARG_ELEMENT_TARGET          (CA_ARG_ELEMENT + 1)
 #define CA_ARG_ELEMENT_TRIGGER         (CA_ARG_ELEMENT + 2)
+#define CA_ARG_ELEMENT_ACTION          (CA_ARG_ELEMENT + 7)
 #define CA_ARG_ELEMENT_HEADLINE                (CA_ARG_ELEMENT + 997)
 #define CA_ARG_ELEMENT_CV_TARGET       (CA_ARG_ELEMENT_TARGET)
 #define CA_ARG_ELEMENT_CV_TRIGGER      (CA_ARG_ELEMENT_TRIGGER)
+#define CA_ARG_ELEMENT_CV_ACTION       (CA_ARG_ELEMENT_ACTION)
 #define CA_ARG_ELEMENT_CV_HEADLINE     (CA_ARG_ELEMENT_HEADLINE)
 #define CA_ARG_ELEMENT_NR_TARGET       (CA_ARG_ELEMENT + 3)
 #define CA_ARG_ELEMENT_NR_TRIGGER      (CA_ARG_ELEMENT + 4)
+#define CA_ARG_ELEMENT_NR_ACTION       (CA_ARG_ELEMENT + 8)
 #define CA_ARG_ELEMENT_NR_HEADLINE     (CA_ARG_ELEMENT + 998)
 #define CA_ARG_ELEMENT_CS_TARGET       (CA_ARG_ELEMENT + 5)
 #define CA_ARG_ELEMENT_CS_TRIGGER      (CA_ARG_ELEMENT + 6)
+#define CA_ARG_ELEMENT_CS_ACTION       (CA_ARG_ELEMENT + 9)
 #define CA_ARG_ELEMENT_CS_HEADLINE     (CA_ARG_ELEMENT + 999)
 #define CA_ARG_SPEED                   13000
 #define CA_ARG_SPEED_NOT_MOVING                (CA_ARG_SPEED + STEPSIZE_NOT_MOVING)
 #define CA_ARG_SCAN_MODE_NORMAL                (CA_ARG_SCAN_MODE + MV_NORMAL)
 #define CA_ARG_SCAN_MODE_REVERSE       (CA_ARG_SCAN_MODE + MV_REVERSE)
 #define CA_ARG_SCAN_MODE_HEADLINE      (CA_ARG_SCAN_MODE + 999)
+#define CA_ARG_INVENTORY               18000
+#define CA_ARG_INVENTORY_RESET         (CA_ARG_INVENTORY + 0)
+#define CA_ARG_INVENTORY_RM_TARGET     (CA_ARG_INVENTORY + 1)
+#define CA_ARG_INVENTORY_RM_TRIGGER    (CA_ARG_INVENTORY + 2)
+#define CA_ARG_INVENTORY_RM_ACTION     (CA_ARG_INVENTORY + 3)
+#define CA_ARG_INVENTORY_RM_FIRST      (CA_ARG_INVENTORY + 4)
+#define CA_ARG_INVENTORY_RM_LAST       (CA_ARG_INVENTORY + 5)
+#define CA_ARG_INVENTORY_RM_ALL                (CA_ARG_INVENTORY + 6)
+#define CA_ARG_INVENTORY_HEADLINE      (CA_ARG_INVENTORY + 998)
+#define CA_ARG_INVENTORY_RM_HEADLINE   (CA_ARG_INVENTORY + 999)
 #define CA_ARG_UNDEFINED               65535
 
 /* values for custom move patterns (bits 0 - 3: basic move directions) */
 #define IS_THROWABLE(e)                HAS_PROPERTY(e, EP_THROWABLE)
 #define CAN_EXPLODE(e)         HAS_PROPERTY(e, EP_CAN_EXPLODE)
 #define IS_GRAVITY_REACHABLE(e)        HAS_PROPERTY(e, EP_GRAVITY_REACHABLE)
+#define DONT_GET_HIT_BY(e)     HAS_PROPERTY(e, EP_DONT_GET_HIT_BY)
 
 /* macros for special configurable properties */
 #define IS_EM_SLIPPERY_WALL(e) HAS_PROPERTY(e, EP_EM_SLIPPERY_WALL)
                                 (e) <= EL_EM_GATE_4)
 #define IS_EMC_GATE(e)         ((e) >= EL_EMC_GATE_5 &&                \
                                 (e) <= EL_EMC_GATE_8)
+#define IS_DC_GATE(e)          ((e) == EL_DC_GATE_WHITE)
 #define IS_GATE(e)             (IS_RND_GATE(e) ||                      \
                                 IS_EM_GATE(e) ||                       \
-                                IS_EMC_GATE(e))
+                                IS_EMC_GATE(e) ||                      \
+                                IS_DC_GATE(e))
 #define RND_GATE_NR(e)         ((e) - EL_GATE_1)
 #define EM_GATE_NR(e)          ((e) - EL_EM_GATE_1)
 #define EMC_GATE_NR(e)         ((e) - EL_EMC_GATE_5 + 4)
                                 (e) <= EL_EMC_GATE_8_GRAY)
 #define IS_EMC_GATE_GRAY_ACTIVE(e) ((e) >= EL_EMC_GATE_5_GRAY_ACTIVE &&        \
                                 (e) <= EL_EMC_GATE_8_GRAY_ACTIVE)
+#define IS_DC_GATE_GRAY(e)     ((e) == EL_DC_GATE_WHITE_GRAY)
+#define IS_DC_GATE_GRAY_ACTIVE(e) ((e) == EL_DC_GATE_WHITE_GRAY_ACTIVE)
+
 #define IS_GATE_GRAY(e)                (IS_RND_GATE_GRAY(e) ||                 \
                                 IS_EM_GATE_GRAY(e) ||                  \
-                                IS_EMC_GATE_GRAY(e))
+                                IS_EMC_GATE_GRAY(e) ||                 \
+                                IS_DC_GATE_GRAY(e))
 #define IS_GATE_GRAY_ACTIVE(e) (IS_RND_GATE_GRAY_ACTIVE(e) ||          \
                                 IS_EM_GATE_GRAY_ACTIVE(e) ||           \
-                                IS_EMC_GATE_GRAY_ACTIVE(e))
+                                IS_EMC_GATE_GRAY_ACTIVE(e) ||          \
+                                IS_DC_GATE_GRAY_ACTIVE(e))
 #define RND_GATE_GRAY_NR(e)    ((e) - EL_GATE_1_GRAY)
 #define RND_GATE_GRAY_ACTIVE_NR(e) ((e) - EL_GATE_1_GRAY_ACTIVE)
 #define EM_GATE_GRAY_NR(e)     ((e) - EL_EM_GATE_1_GRAY)
 #define IS_DC_STEELWALL_2(e)   ((e) >= EL_DC_STEELWALL_2_LEFT &&       \
                                 (e) <= EL_DC_STEELWALL_2_SINGLE)
 
+#if 1
+#define GFX_ELEMENT(e)         (element_info[e].gfx_element)
+#else
 #define GFX_ELEMENT(e)         (element_info[e].use_gfx_element ?      \
                                 element_info[e].gfx_element : e)
+#endif
 
 /* !!! CHECK THIS !!! */
 #if 1
 #define STD_ELEMENT_CONTENTS   4
 #define MAX_ELEMENT_CONTENTS   8
 
+/* values for initial player inventory */
+#define MIN_INITIAL_INVENTORY_SIZE     1
+#define MAX_INITIAL_INVENTORY_SIZE     8
+
 /* often used screen positions */
 #define SX                     8
 #define SY                     8
 #define MICROLABEL1_YPOS       (MICROLEVEL_YPOS - 36)
 #define MICROLABEL2_YPOS       (MICROLEVEL_YPOS + MICROLEVEL_YSIZE + 7)
 
+/* values for GfxRedraw */
+#define GFX_REDRAW_NONE                                (0)
+#define GFX_REDRAW_TILE                                (1 << 0)
+#define GFX_REDRAW_TILE_CRUMBLED               (1 << 1)
+#define GFX_REDRAW_TILE_CRUMBLED_NEIGHBOURS    (1 << 2)
+#define GFX_REDRAW_TILE_TWINKLED               (1 << 3)
 
 /* score for elements */
 #define SC_EMERALD             0
 /* program information and versioning definitions */
 #define PROGRAM_VERSION_MAJOR          3
 #define PROGRAM_VERSION_MINOR          2
-#define PROGRAM_VERSION_PATCH          5
+#define PROGRAM_VERSION_PATCH          6
 #define PROGRAM_VERSION_BUILD          0
 
 #define PROGRAM_TITLE_STRING           "Rocks'n'Diamonds"
 #define PROGRAM_AUTHOR_STRING          "Holger Schemel"
-#define PROGRAM_COPYRIGHT_STRING       "Copyright Â©1995-2007 by Holger Schemel"
+#define PROGRAM_COPYRIGHT_STRING       "Copyright Â©1995-2008 by Holger Schemel"
 #define PROGRAM_EMAIL_STRING           "info@artsoft.org"
 #define PROGRAM_WEBSITE_STRING         "http://www.artsoft.org/"
 #define PROGRAM_GAME_BY_STRING         "A Game by Artsoft Entertainment"
@@ -2252,6 +2294,8 @@ struct LevelInfo
   char name[MAX_LEVEL_NAME_LEN + 1];
   char author[MAX_LEVEL_AUTHOR_LEN + 1];
 
+  int random_seed;
+
   struct EnvelopeInfo envelope[NUM_ENVELOPES];
 
   int score[LEVEL_SCORE_ELEMENTS];
@@ -2312,7 +2356,12 @@ struct LevelInfo
   int initial_player_stepsize[MAX_PLAYERS];    /* initial player speed */
   boolean initial_player_gravity[MAX_PLAYERS];
 
+  boolean use_initial_inventory[MAX_PLAYERS];
+  int initial_inventory_size[MAX_PLAYERS];
+  int initial_inventory_content[MAX_PLAYERS][MAX_INITIAL_INVENTORY_SIZE];
+
   boolean em_slippery_gems;    /* EM style "gems slip from wall" behaviour */
+  boolean em_explodes_by_fire; /* EM style chain explosion behaviour */
   boolean use_spring_bug;      /* for compatibility with old levels */
   boolean use_time_orb_bug;    /* for compatibility with old levels */
   boolean instant_relocation;  /* no visual delay when relocating player */
@@ -2335,6 +2384,9 @@ struct LevelInfo
   boolean no_valid_file;       /* set when level file missing or invalid */
 
   boolean changed;             /* set when level was changed in the editor */
+
+  /* runtime flags to handle bugs in old levels (not stored in level file) */
+  boolean use_action_after_change_bug;
 };
 
 struct GlobalInfo
@@ -2346,6 +2398,8 @@ struct GlobalInfo
   char *convert_leveldir;
   int convert_level_nr;
 
+  char *create_images_dir;
+
   int num_toons;
 
   float frames_per_second;
@@ -2376,7 +2430,7 @@ struct ElementChangeInfo
   int delay_random;            /* added frame delay before changed (random) */
   int delay_frames;            /* either 1 (frames) or 50 (seconds; 50 fps) */
 
-  int trigger_element;         /* element triggering change */
+  int initial_trigger_element; /* initial element triggering change */
 
   struct Content target_content;/* elements for extended change target */
   boolean use_target_content;  /* use extended change target */
@@ -2391,9 +2445,12 @@ struct ElementChangeInfo
   int action_type;             /* type of action */
   int action_mode;             /* mode of action */
   int action_arg;              /* parameter of action */
+  int action_element;          /* element related to action */
 
   /* ---------- internal values used at runtime when playing ---------- */
 
+  int trigger_element;         /* element triggering change */
+
   /* functions that are called before, while and after the change of an
      element -- currently only used for non-custom elements */
   void (*pre_change_function)(int x, int y);
@@ -2471,7 +2528,7 @@ struct ElementInfo
   unsigned long properties[NUM_EP_BITFIELDS];  /* element base properties */
 
   boolean use_gfx_element;     /* use custom graphic element */
-  int gfx_element;             /* optional custom graphic element */
+  int gfx_element_initial;     /* initial optional custom graphic element */
 
   int access_direction;                /* accessible from which direction */
 
@@ -2522,6 +2579,8 @@ struct ElementInfo
 
   boolean in_group[NUM_GROUP_ELEMENTS];
 
+  int gfx_element;             /* runtime optional custom graphic element */
+
   int collect_score;           /* runtime score value for collecting */
 
   /* count of this element on playfield, calculated after each frame */
@@ -2738,6 +2797,7 @@ extern int                        GfxRandom[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern int                     GfxElement[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern int                     GfxAction[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern int                     GfxDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern int                     GfxRedraw[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 
 extern int                     ActiveElement[MAX_NUM_ELEMENTS];
 extern int                     ActiveButton[NUM_IMAGE_FILES];
index 1a0feda699008b9eaf90d9b937f7ed447e8f2f49..fd98b62d8e72ca9ce7522f905d799ca468a563cd 100644 (file)
@@ -308,7 +308,7 @@ void SendToServer_NrWanted(int nr_wanted)
 
 void SendToServer_StartPlaying()
 {
-  unsigned long new_random_seed = InitRND(NEW_RANDOMIZE);
+  unsigned long new_random_seed = InitRND(level.random_seed);
 
   int dummy = 0;               /* !!! HAS NO MEANING ANYMORE !!! */
                                /* the name of the level must be enough */
index 0d162f25ad657553682f4caef1220b34abab48f8..60bba4561f390f7af8f3bc768ca9bcf12b8d9ef8 100644 (file)
@@ -1776,7 +1776,7 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button)
       }
       else if (pos == MAIN_CONTROL_GAME)
       {
-       StartGameActions(options.network, setup.autorecord, NEW_RANDOMIZE);
+       StartGameActions(options.network, setup.autorecord, level.random_seed);
       }
       else if (pos == MAIN_CONTROL_SETUP)
       {
@@ -2010,7 +2010,8 @@ void HandleInfoScreen_Main(int mx, int my, int dx, int dy, int button)
 
       if (info_info[choice].type & menu_navigation_type ||
          info_info[choice].type & TYPE_ENTER_SCREEN ||
-         info_info[choice].type & TYPE_BOOLEAN_STYLE)
+         info_info[choice].type & TYPE_BOOLEAN_STYLE ||
+         info_info[choice].type & TYPE_YES_NO_AUTO)
        button = MB_MENU_CHOICE;
     }
     else if (dy)
@@ -4019,6 +4020,13 @@ static void execSetupSound()
 
 static void execSetupArtwork()
 {
+#if 0
+  printf("::: '%s', '%s', '%s'\n",
+        artwork.gfx_current->subdir,
+        artwork.gfx_current->fullpath,
+        artwork.gfx_current->basepath);
+#endif
+
   setup.graphics_set = artwork.gfx_current->identifier;
   setup.sounds_set = artwork.snd_current->identifier;
   setup.music_set = artwork.mus_current->identifier;
@@ -4203,10 +4211,16 @@ static struct TokenInfo setup_info_artwork[] =
   { TYPE_STRING,       &music_set_name,        ""                      },
   { TYPE_EMPTY,                NULL,                   ""                      },
 #if 1
+#if 1
+  { TYPE_YES_NO_AUTO,&setup.override_level_graphics,"Override Level Graphics:"},
+  { TYPE_YES_NO_AUTO,&setup.override_level_sounds,  "Override Level Sounds:"  },
+  { TYPE_YES_NO_AUTO,&setup.override_level_music,   "Override Level Music:"   },
+#else
   { TYPE_YES_NO, &setup.override_level_graphics,"Override Level Graphics:" },
   { TYPE_YES_NO, &setup.override_level_sounds, "Override Level Sounds:"   },
   { TYPE_YES_NO, &setup.override_level_music,  "Override Level Music:"    },
   { TYPE_YES_NO, &setup.auto_override_artwork, "Auto-Override Non-CE Sets:" },
+#endif
 #else
   { TYPE_STRING,       NULL,                   "Override Level Artwork:"},
   { TYPE_YES_NO,       &setup.override_level_graphics, "Graphics:"     },
@@ -4323,11 +4337,12 @@ static Key getSetupKey()
 
 static int getSetupTextFont(int type)
 {
-  if (type & (TYPE_SWITCH |
-             TYPE_YES_NO |
-             TYPE_STRING |
-             TYPE_ECS_AGA |
-             TYPE_KEYTEXT |
+  if (type & (TYPE_SWITCH      |
+             TYPE_YES_NO       |
+             TYPE_YES_NO_AUTO  |
+             TYPE_STRING       |
+             TYPE_ECS_AGA      |
+             TYPE_KEYTEXT      |
              TYPE_ENTER_LIST))
     return FONT_MENU_2;
   else
@@ -4344,6 +4359,9 @@ static int getSetupValueFont(int type, void *value)
     return FONT_VALUE_1;
   else if (type & TYPE_BOOLEAN_STYLE)
     return (*(boolean *)value ? FONT_OPTION_ON : FONT_OPTION_OFF);
+  else if (type & TYPE_YES_NO_AUTO)
+    return (*(int *)value == AUTO  ? FONT_OPTION_ON :
+           *(int *)value == FALSE ? FONT_OPTION_OFF : FONT_OPTION_ON);
   else
     return FONT_VALUE_1;
 }
@@ -4356,11 +4374,13 @@ static void drawSetupValue(int pos)
   int ypos = MENU_SCREEN_START_YPOS + pos;
   int startx = mSX + xpos * 32;
   int starty = mSY + ypos * 32;
-  int font_nr, font_width;
+  int font_nr, font_width, font_height;
   int type = setup_info[pos].type;
   void *value = setup_info[pos].value;
   char *value_string = getSetupValue(type, value);
+#if 1
   int i;
+#endif
 
   if (value_string == NULL)
     return;
@@ -4370,9 +4390,7 @@ static void drawSetupValue(int pos)
     xpos = MENU_SCREEN_START_XPOS;
 
     if (type & TYPE_QUERY)
-    {
       value_string = "<press key>";
-    }
   }
   else if (type & TYPE_STRING)
   {
@@ -4383,11 +4401,16 @@ static void drawSetupValue(int pos)
     if (strlen(value_string) > max_value_len)
       value_string[max_value_len] = '\0';
   }
+  else if (type & TYPE_YES_NO_AUTO)
+  {
+    xpos = MENU_SCREEN_VALUE_XPOS - 1;
+  }
 
   startx = mSX + xpos * 32;
   starty = mSY + ypos * 32;
   font_nr = getSetupValueFont(type, value);
   font_width = getFontWidth(font_nr);
+  font_height = getFontHeight(font_nr);
 
   /* downward compatibility correction for Juergen Bonhagen's menu settings */
   if (setup_mode != SETUP_MODE_INPUT)
@@ -4424,8 +4447,12 @@ static void drawSetupValue(int pos)
     }
   }
 
+#if 0
+  DrawBackground(startx, starty, SX + SXSIZE - startx, font_height);
+#else
   for (i = 0; i <= MENU_SCREEN_MAX_XPOS - xpos; i++)
     DrawText(startx + i * font_width, starty, " ", font_nr);
+#endif
 
   DrawText(startx, starty, value_string, font_nr);
 
@@ -4433,12 +4460,21 @@ static void drawSetupValue(int pos)
     getFontBitmapInfo(font_nr)->draw_xoffset = font_draw_xoffset_old;
 }
 
-static void changeSetupValue(int pos)
+static void changeSetupValue(int pos, int dx)
 {
   if (setup_info[pos].type & TYPE_BOOLEAN_STYLE)
   {
     *(boolean *)setup_info[pos].value ^= TRUE;
   }
+  else if (setup_info[pos].type & TYPE_YES_NO_AUTO)
+  {
+    *(int *)setup_info[pos].value =
+      (dx == -1 ?
+       (*(int *)setup_info[pos].value == AUTO ? TRUE :
+       *(int *)setup_info[pos].value == TRUE ? FALSE : AUTO) :
+       (*(int *)setup_info[pos].value == TRUE ? AUTO :
+       *(int *)setup_info[pos].value == AUTO ? FALSE : TRUE));
+  }
   else if (setup_info[pos].type & TYPE_KEY)
   {
     Key key;
@@ -4651,7 +4687,8 @@ void HandleSetupScreen_Generic(int mx, int my, int dx, int dy, int button)
       int menu_navigation_type = (dx < 0 ? TYPE_LEAVE : TYPE_ENTER);
 
       if (setup_info[choice].type & menu_navigation_type ||
-         setup_info[choice].type & TYPE_BOOLEAN_STYLE)
+         setup_info[choice].type & TYPE_BOOLEAN_STYLE ||
+         setup_info[choice].type & TYPE_YES_NO_AUTO)
        button = MB_MENU_CHOICE;
     }
     else if (dy)
@@ -4702,7 +4739,7 @@ void HandleSetupScreen_Generic(int mx, int my, int dx, int dy, int button)
       else
       {
        if (setup_info[y].type & TYPE_VALUE)
-         changeSetupValue(y);
+         changeSetupValue(y, dx);
       }
     }
   }
index fc90ad51461d9beccc831c1cb5c712268ae48074..49f06aa32272c5f77c13e0de6584d78411a23561 100644 (file)
@@ -475,7 +475,7 @@ void TapeErase()
   tape.pos[tape.counter].delay = 0;
   tape.changed = TRUE;
 
-  tape.random_seed = InitRND(NEW_RANDOMIZE);
+  tape.random_seed = InitRND(level.random_seed);
 
   tape.file_version = FILE_VERSION_ACTUAL;
   tape.game_version = GAME_VERSION_ACTUAL;
@@ -538,7 +538,7 @@ void TapeStartRecording(long random_seed)
 
 static void TapeStartGameRecording()
 {
-  TapeStartRecording(NEW_RANDOMIZE);
+  TapeStartRecording(level.random_seed);
 
 #if defined(NETWORK_AVALIABLE)
   if (options.network)
index b26add564164aa3468f02f09a5e8bb8c9cf2fff5..e80cd9967eb6c6acfd8e603e3c3fe0e87bf7c6f2 100644 (file)
@@ -503,6 +503,16 @@ static void FadeExt(int fade_mask, int fade_mode, int fade_type)
     return;
   }
 
+#if 0
+  printf("::: !!! FADING %d ... [%d] [%d]\n", fade_mode, fade_type,
+        fade_type_skip);
+#endif
+
+#if 1
+  fade_delay = fading.fade_delay;
+  post_delay = (fade_mode == FADE_MODE_FADE_OUT ? fading.post_delay : 0);
+#endif
+
   if (fade_type_skip != FADE_TYPE_NONE)
   {
 #if 0
@@ -513,7 +523,11 @@ static void FadeExt(int fade_mask, int fade_mode, int fade_type)
     if (fade_type & fade_type_skip)
       fade_type_skip = FADE_TYPE_NONE;
 
+#if 1
+    fade_delay = 0;
+#else
     return;
+#endif
   }
 
 #if 1
@@ -534,7 +548,7 @@ static void FadeExt(int fade_mask, int fade_mode, int fade_type)
   }
 #endif
 
-  /* !!! what abount fade_mask == REDRAW_FIELD | REDRAW_ALL ??? !!! */
+  /* !!! what about fade_mask == REDRAW_FIELD | REDRAW_ALL ??? !!! */
 
 #if 0
   printf("::: NOW FADING %d ... [%d]\n", fade_mode, fade_type);
@@ -553,8 +567,10 @@ static void FadeExt(int fade_mask, int fade_mode, int fade_type)
     width  = FULL_SXSIZE;
     height = FULL_SYSIZE;
 
+#if 0
     fade_delay = fading.fade_delay;
     post_delay = (fade_mode == FADE_MODE_FADE_OUT ? fading.post_delay : 0);
+#endif
 
     if (border.draw_masked_when_fading)
       draw_border_function = DrawMaskedBorder_FIELD;   /* update when fading */
@@ -568,8 +584,10 @@ static void FadeExt(int fade_mask, int fade_mode, int fade_type)
     width  = WIN_XSIZE;
     height = WIN_YSIZE;
 
+#if 0
     fade_delay = fading.fade_delay;
     post_delay = (fade_mode == FADE_MODE_FADE_OUT ? fading.post_delay : 0);
+#endif
   }
 
 #if 1
@@ -6203,6 +6221,19 @@ void SetGfxAnimation_EM(struct GraphicInfo_EM *g_em,
                             action == ACTION_FILLING ||
                             action == ACTION_EMPTYING);
 
+  /* special case: graphic uses "2nd movement tile" and has defined
+     7 frames for movement animation (or less) => use default graphic
+     for last (8th) frame which ends the movement animation */
+  if (g->double_movement && g->anim_frames < 8 && frame_em == 7)
+  {
+    action = ACTION_DEFAULT;   /* (keep action_* unchanged for now) */
+    graphic = (direction == MV_NONE ?
+              el_act2img(effective_element, action) :
+              el_act_dir2img(effective_element, action, direction));
+
+    g = &graphic_info[graphic];
+  }
+
 #if 0
   if (tile == Xsand_stonesand_1 ||
       tile == Xsand_stonesand_2 ||
@@ -6237,6 +6268,16 @@ void SetGfxAnimation_EM(struct GraphicInfo_EM *g_em,
 
       GfxFrame[x][y]++;
 
+#if 1
+      /* !!! TEST !!! NEW !!! DOES NOT WORK RIGHT YET !!! */
+      if (g->double_movement && frame_em == 0)
+      {
+       GfxFrame[x][y] = 0;
+
+       // printf("::: resetting... [%d]\n", tile);
+      }
+#endif
+
       if (move_dir == MV_LEFT)
        GfxFrame[x - 1][y] = GfxFrame[x][y];
       else if (move_dir == MV_RIGHT)
@@ -6291,13 +6332,21 @@ void getGraphicSourceObjectExt_EM(struct GraphicInfo_EM *g_em,
 {
   int action = object_mapping[tile].action;
   int direction = object_mapping[tile].direction;
+  boolean is_backside = object_mapping[tile].is_backside;
   int effective_element = get_effective_element_EM(tile, frame_em);
+#if 1
+  int effective_action = action;
+#else
+  int effective_action = (frame_em < 7 ? action : ACTION_DEFAULT);
+#endif
   int graphic = (direction == MV_NONE ?
-                el_act2img(effective_element, action) :
-                el_act_dir2img(effective_element, action, direction));
+                el_act2img(effective_element, effective_action) :
+                el_act_dir2img(effective_element, effective_action,
+                               direction));
   int crumbled = (direction == MV_NONE ?
-                 el_act2crm(effective_element, action) :
-                 el_act_dir2crm(effective_element, action, direction));
+                 el_act2crm(effective_element, effective_action) :
+                 el_act_dir2crm(effective_element, effective_action,
+                                direction));
   int base_graphic = el_act2img(effective_element, ACTION_DEFAULT);
   int base_crumbled = el_act2crm(effective_element, ACTION_DEFAULT);
   boolean has_crumbled_graphics = (base_crumbled != base_graphic);
@@ -6307,6 +6356,30 @@ void getGraphicSourceObjectExt_EM(struct GraphicInfo_EM *g_em,
 #endif
   int sync_frame;
 
+  /* special case: graphic uses "2nd movement tile" and has defined
+     7 frames for movement animation (or less) => use default graphic
+     for last (8th) frame which ends the movement animation */
+  if (g->double_movement && g->anim_frames < 8 && frame_em == 7)
+  {
+    effective_action = ACTION_DEFAULT;
+    graphic = (direction == MV_NONE ?
+              el_act2img(effective_element, effective_action) :
+              el_act_dir2img(effective_element, effective_action,
+                             direction));
+    crumbled = (direction == MV_NONE ?
+               el_act2crm(effective_element, effective_action) :
+               el_act_dir2crm(effective_element, effective_action,
+                              direction));
+
+    g = &graphic_info[graphic];
+  }
+
+#if 0
+  if (frame_em == 7)
+    return;
+#endif
+
+
 #if 0
   if (frame_em == 0)   /* reset animation frame for certain elements */
   {
@@ -6324,14 +6397,391 @@ void getGraphicSourceObjectExt_EM(struct GraphicInfo_EM *g_em,
 
   SetRandomAnimationValue(x, y);
 
+#if 0
+  int i = tile;
+  int j = frame_em;
+  int xxx_sync_frame = (i == Xdrip_stretch ? 7 :
+                       i == Xdrip_stretchB ? 7 :
+                       i == Ydrip_s2 ? j + 8 :
+                       i == Ydrip_s2B ? j + 8 :
+                       i == Xacid_1 ? 0 :
+                       i == Xacid_2 ? 10 :
+                       i == Xacid_3 ? 20 :
+                       i == Xacid_4 ? 30 :
+                       i == Xacid_5 ? 40 :
+                       i == Xacid_6 ? 50 :
+                       i == Xacid_7 ? 60 :
+                       i == Xacid_8 ? 70 :
+                       i == Xfake_acid_1 ? 0 :
+                       i == Xfake_acid_2 ? 10 :
+                       i == Xfake_acid_3 ? 20 :
+                       i == Xfake_acid_4 ? 30 :
+                       i == Xfake_acid_5 ? 40 :
+                       i == Xfake_acid_6 ? 50 :
+                       i == Xfake_acid_7 ? 60 :
+                       i == Xfake_acid_8 ? 70 :
+                       i == Xball_2 ? 7 :
+                       i == Xball_2B ? j + 8 :
+                       i == Yball_eat ? j + 1 :
+                       i == Ykey_1_eat ? j + 1 :
+                       i == Ykey_2_eat ? j + 1 :
+                       i == Ykey_3_eat ? j + 1 :
+                       i == Ykey_4_eat ? j + 1 :
+                       i == Ykey_5_eat ? j + 1 :
+                       i == Ykey_6_eat ? j + 1 :
+                       i == Ykey_7_eat ? j + 1 :
+                       i == Ykey_8_eat ? j + 1 :
+                       i == Ylenses_eat ? j + 1 :
+                       i == Ymagnify_eat ? j + 1 :
+                       i == Ygrass_eat ? j + 1 :
+                       i == Ydirt_eat ? j + 1 :
+                       i == Xamoeba_1 ? 0 :
+                       i == Xamoeba_2 ? 1 :
+                       i == Xamoeba_3 ? 2 :
+                       i == Xamoeba_4 ? 3 :
+                       i == Xamoeba_5 ? 0 :
+                       i == Xamoeba_6 ? 1 :
+                       i == Xamoeba_7 ? 2 :
+                       i == Xamoeba_8 ? 3 :
+                       i == Xexit_2 ? j + 8 :
+                       i == Xexit_3 ? j + 16 :
+                       i == Xdynamite_1 ? 0 :
+                       i == Xdynamite_2 ? 8 :
+                       i == Xdynamite_3 ? 16 :
+                       i == Xdynamite_4 ? 24 :
+                       i == Xsand_stonein_1 ? j + 1 :
+                       i == Xsand_stonein_2 ? j + 9 :
+                       i == Xsand_stonein_3 ? j + 17 :
+                       i == Xsand_stonein_4 ? j + 25 :
+                       i == Xsand_stoneout_1 && j == 0 ? 0 :
+                       i == Xsand_stoneout_1 && j == 1 ? 0 :
+                       i == Xsand_stoneout_1 && j == 2 ? 1 :
+                       i == Xsand_stoneout_1 && j == 3 ? 2 :
+                       i == Xsand_stoneout_1 && j == 4 ? 2 :
+                       i == Xsand_stoneout_1 && j == 5 ? 3 :
+                       i == Xsand_stoneout_1 && j == 6 ? 4 :
+                       i == Xsand_stoneout_1 && j == 7 ? 4 :
+                       i == Xsand_stoneout_2 && j == 0 ? 5 :
+                       i == Xsand_stoneout_2 && j == 1 ? 6 :
+                       i == Xsand_stoneout_2 && j == 2 ? 7 :
+                       i == Xsand_stoneout_2 && j == 3 ? 8 :
+                       i == Xsand_stoneout_2 && j == 4 ? 9 :
+                       i == Xsand_stoneout_2 && j == 5 ? 11 :
+                       i == Xsand_stoneout_2 && j == 6 ? 13 :
+                       i == Xsand_stoneout_2 && j == 7 ? 15 :
+                       i == Xboom_bug && j == 1 ? 2 :
+                       i == Xboom_bug && j == 2 ? 2 :
+                       i == Xboom_bug && j == 3 ? 4 :
+                       i == Xboom_bug && j == 4 ? 4 :
+                       i == Xboom_bug && j == 5 ? 2 :
+                       i == Xboom_bug && j == 6 ? 2 :
+                       i == Xboom_bug && j == 7 ? 0 :
+                       i == Xboom_bomb && j == 1 ? 2 :
+                       i == Xboom_bomb && j == 2 ? 2 :
+                       i == Xboom_bomb && j == 3 ? 4 :
+                       i == Xboom_bomb && j == 4 ? 4 :
+                       i == Xboom_bomb && j == 5 ? 2 :
+                       i == Xboom_bomb && j == 6 ? 2 :
+                       i == Xboom_bomb && j == 7 ? 0 :
+                       i == Xboom_android && j == 7 ? 6 :
+                       i == Xboom_1 && j == 1 ? 2 :
+                       i == Xboom_1 && j == 2 ? 2 :
+                       i == Xboom_1 && j == 3 ? 4 :
+                       i == Xboom_1 && j == 4 ? 4 :
+                       i == Xboom_1 && j == 5 ? 6 :
+                       i == Xboom_1 && j == 6 ? 6 :
+                       i == Xboom_1 && j == 7 ? 8 :
+                       i == Xboom_2 && j == 0 ? 8 :
+                       i == Xboom_2 && j == 1 ? 8 :
+                       i == Xboom_2 && j == 2 ? 10 :
+                       i == Xboom_2 && j == 3 ? 10 :
+                       i == Xboom_2 && j == 4 ? 10 :
+                       i == Xboom_2 && j == 5 ? 12 :
+                       i == Xboom_2 && j == 6 ? 12 :
+                       i == Xboom_2 && j == 7 ? 12 :
+#if 0
+                       special_animation && j == 4 ? 3 :
+                       effective_action != action ? 0 :
+#endif
+                       j);
+#endif
+
+#if 0
+  int xxx_effective_action;
+  int xxx_has_action_graphics;
+
+  {
+    int element = object_mapping[i].element_rnd;
+    int action = object_mapping[i].action;
+    int direction = object_mapping[i].direction;
+    boolean is_backside = object_mapping[i].is_backside;
+#if 0
+    boolean action_removing = (action == ACTION_DIGGING ||
+                              action == ACTION_SNAPPING ||
+                              action == ACTION_COLLECTING);
+#endif
+    boolean action_exploding = ((action == ACTION_EXPLODING ||
+                                action == ACTION_SMASHED_BY_ROCK ||
+                                action == ACTION_SMASHED_BY_SPRING) &&
+                               element != EL_DIAMOND);
+    boolean action_active = (action == ACTION_ACTIVE);
+    boolean action_other = (action == ACTION_OTHER);
+
+    {
+#if 1
+      int effective_element = get_effective_element_EM(i, j);
+#else
+      int effective_element = (j > 5 && i == Yacid_splash_eB ? EL_EMPTY :
+                              j > 5 && i == Yacid_splash_wB ? EL_EMPTY :
+                              j < 7 ? element :
+                              i == Xdrip_stretch ? element :
+                              i == Xdrip_stretchB ? element :
+                              i == Ydrip_s1 ? element :
+                              i == Ydrip_s1B ? element :
+                              i == Xball_1B ? element :
+                              i == Xball_2 ? element :
+                              i == Xball_2B ? element :
+                              i == Yball_eat ? element :
+                              i == Ykey_1_eat ? element :
+                              i == Ykey_2_eat ? element :
+                              i == Ykey_3_eat ? element :
+                              i == Ykey_4_eat ? element :
+                              i == Ykey_5_eat ? element :
+                              i == Ykey_6_eat ? element :
+                              i == Ykey_7_eat ? element :
+                              i == Ykey_8_eat ? element :
+                              i == Ylenses_eat ? element :
+                              i == Ymagnify_eat ? element :
+                              i == Ygrass_eat ? element :
+                              i == Ydirt_eat ? element :
+                              i == Yemerald_stone ? EL_EMERALD :
+                              i == Ydiamond_stone ? EL_ROCK :
+                              i == Xsand_stonein_1 ? element :
+                              i == Xsand_stonein_2 ? element :
+                              i == Xsand_stonein_3 ? element :
+                              i == Xsand_stonein_4 ? element :
+                              is_backside ? EL_EMPTY :
+                              action_removing ? EL_EMPTY :
+                              element);
+#endif
+      int effective_action = (j < 7 ? action :
+                             i == Xdrip_stretch ? action :
+                             i == Xdrip_stretchB ? action :
+                             i == Ydrip_s1 ? action :
+                             i == Ydrip_s1B ? action :
+                             i == Xball_1B ? action :
+                             i == Xball_2 ? action :
+                             i == Xball_2B ? action :
+                             i == Yball_eat ? action :
+                             i == Ykey_1_eat ? action :
+                             i == Ykey_2_eat ? action :
+                             i == Ykey_3_eat ? action :
+                             i == Ykey_4_eat ? action :
+                             i == Ykey_5_eat ? action :
+                             i == Ykey_6_eat ? action :
+                             i == Ykey_7_eat ? action :
+                             i == Ykey_8_eat ? action :
+                             i == Ylenses_eat ? action :
+                             i == Ymagnify_eat ? action :
+                             i == Ygrass_eat ? action :
+                             i == Ydirt_eat ? action :
+                             i == Xsand_stonein_1 ? action :
+                             i == Xsand_stonein_2 ? action :
+                             i == Xsand_stonein_3 ? action :
+                             i == Xsand_stonein_4 ? action :
+                             i == Xsand_stoneout_1 ? action :
+                             i == Xsand_stoneout_2 ? action :
+                             i == Xboom_android ? ACTION_EXPLODING :
+                             action_exploding ? ACTION_EXPLODING :
+                             action_active ? action :
+                             action_other ? action :
+                             ACTION_DEFAULT);
+      int graphic = (el_act_dir2img(effective_element, effective_action,
+                                   direction));
+      int crumbled = (el_act_dir2crm(effective_element, effective_action,
+                                    direction));
+      int base_graphic = el_act2img(effective_element, ACTION_DEFAULT);
+      int base_crumbled = el_act2crm(effective_element, ACTION_DEFAULT);
+      boolean has_action_graphics = (graphic != base_graphic);
+      boolean has_crumbled_graphics = (base_crumbled != base_graphic);
+      struct GraphicInfo *g = &graphic_info[graphic];
+#if 0
+      struct GraphicInfo *g_crumbled = &graphic_info[crumbled];
+#endif
+      struct GraphicInfo_EM *g_em = &graphic_info_em_object[i][7 - j];
+      Bitmap *src_bitmap;
+      int src_x, src_y;
+      /* ensure to get symmetric 3-frame, 2-delay animations as used in EM */
+      boolean special_animation = (action != ACTION_DEFAULT &&
+                                  g->anim_frames == 3 &&
+                                  g->anim_delay == 2 &&
+                                  g->anim_mode & ANIM_LINEAR);
+      xxx_sync_frame = (i == Xdrip_stretch ? 7 :
+                       i == Xdrip_stretchB ? 7 :
+                       i == Ydrip_s2 ? j + 8 :
+                       i == Ydrip_s2B ? j + 8 :
+                       i == Xacid_1 ? 0 :
+                       i == Xacid_2 ? 10 :
+                       i == Xacid_3 ? 20 :
+                       i == Xacid_4 ? 30 :
+                       i == Xacid_5 ? 40 :
+                       i == Xacid_6 ? 50 :
+                       i == Xacid_7 ? 60 :
+                       i == Xacid_8 ? 70 :
+                       i == Xfake_acid_1 ? 0 :
+                       i == Xfake_acid_2 ? 10 :
+                       i == Xfake_acid_3 ? 20 :
+                       i == Xfake_acid_4 ? 30 :
+                       i == Xfake_acid_5 ? 40 :
+                       i == Xfake_acid_6 ? 50 :
+                       i == Xfake_acid_7 ? 60 :
+                       i == Xfake_acid_8 ? 70 :
+                       i == Xball_2 ? 7 :
+                       i == Xball_2B ? j + 8 :
+                       i == Yball_eat ? j + 1 :
+                       i == Ykey_1_eat ? j + 1 :
+                       i == Ykey_2_eat ? j + 1 :
+                       i == Ykey_3_eat ? j + 1 :
+                       i == Ykey_4_eat ? j + 1 :
+                       i == Ykey_5_eat ? j + 1 :
+                       i == Ykey_6_eat ? j + 1 :
+                       i == Ykey_7_eat ? j + 1 :
+                       i == Ykey_8_eat ? j + 1 :
+                       i == Ylenses_eat ? j + 1 :
+                       i == Ymagnify_eat ? j + 1 :
+                       i == Ygrass_eat ? j + 1 :
+                       i == Ydirt_eat ? j + 1 :
+                       i == Xamoeba_1 ? 0 :
+                       i == Xamoeba_2 ? 1 :
+                       i == Xamoeba_3 ? 2 :
+                       i == Xamoeba_4 ? 3 :
+                       i == Xamoeba_5 ? 0 :
+                       i == Xamoeba_6 ? 1 :
+                       i == Xamoeba_7 ? 2 :
+                       i == Xamoeba_8 ? 3 :
+                       i == Xexit_2 ? j + 8 :
+                       i == Xexit_3 ? j + 16 :
+                       i == Xdynamite_1 ? 0 :
+                       i == Xdynamite_2 ? 8 :
+                       i == Xdynamite_3 ? 16 :
+                       i == Xdynamite_4 ? 24 :
+                       i == Xsand_stonein_1 ? j + 1 :
+                       i == Xsand_stonein_2 ? j + 9 :
+                       i == Xsand_stonein_3 ? j + 17 :
+                       i == Xsand_stonein_4 ? j + 25 :
+                       i == Xsand_stoneout_1 && j == 0 ? 0 :
+                       i == Xsand_stoneout_1 && j == 1 ? 0 :
+                       i == Xsand_stoneout_1 && j == 2 ? 1 :
+                       i == Xsand_stoneout_1 && j == 3 ? 2 :
+                       i == Xsand_stoneout_1 && j == 4 ? 2 :
+                       i == Xsand_stoneout_1 && j == 5 ? 3 :
+                       i == Xsand_stoneout_1 && j == 6 ? 4 :
+                       i == Xsand_stoneout_1 && j == 7 ? 4 :
+                       i == Xsand_stoneout_2 && j == 0 ? 5 :
+                       i == Xsand_stoneout_2 && j == 1 ? 6 :
+                       i == Xsand_stoneout_2 && j == 2 ? 7 :
+                       i == Xsand_stoneout_2 && j == 3 ? 8 :
+                       i == Xsand_stoneout_2 && j == 4 ? 9 :
+                       i == Xsand_stoneout_2 && j == 5 ? 11 :
+                       i == Xsand_stoneout_2 && j == 6 ? 13 :
+                       i == Xsand_stoneout_2 && j == 7 ? 15 :
+                       i == Xboom_bug && j == 1 ? 2 :
+                       i == Xboom_bug && j == 2 ? 2 :
+                       i == Xboom_bug && j == 3 ? 4 :
+                       i == Xboom_bug && j == 4 ? 4 :
+                       i == Xboom_bug && j == 5 ? 2 :
+                       i == Xboom_bug && j == 6 ? 2 :
+                       i == Xboom_bug && j == 7 ? 0 :
+                       i == Xboom_bomb && j == 1 ? 2 :
+                       i == Xboom_bomb && j == 2 ? 2 :
+                       i == Xboom_bomb && j == 3 ? 4 :
+                       i == Xboom_bomb && j == 4 ? 4 :
+                       i == Xboom_bomb && j == 5 ? 2 :
+                       i == Xboom_bomb && j == 6 ? 2 :
+                       i == Xboom_bomb && j == 7 ? 0 :
+                       i == Xboom_android && j == 7 ? 6 :
+                       i == Xboom_1 && j == 1 ? 2 :
+                       i == Xboom_1 && j == 2 ? 2 :
+                       i == Xboom_1 && j == 3 ? 4 :
+                       i == Xboom_1 && j == 4 ? 4 :
+                       i == Xboom_1 && j == 5 ? 6 :
+                       i == Xboom_1 && j == 6 ? 6 :
+                       i == Xboom_1 && j == 7 ? 8 :
+                       i == Xboom_2 && j == 0 ? 8 :
+                       i == Xboom_2 && j == 1 ? 8 :
+                       i == Xboom_2 && j == 2 ? 10 :
+                       i == Xboom_2 && j == 3 ? 10 :
+                       i == Xboom_2 && j == 4 ? 10 :
+                       i == Xboom_2 && j == 5 ? 12 :
+                       i == Xboom_2 && j == 6 ? 12 :
+                       i == Xboom_2 && j == 7 ? 12 :
+                       special_animation && j == 4 ? 3 :
+                       effective_action != action ? 0 :
+                       j);
+
+      xxx_effective_action = effective_action;
+      xxx_has_action_graphics = has_action_graphics;
+    }
+  }
+#endif
+
   int frame = getAnimationFrame(g->anim_frames,
                                g->anim_delay,
                                g->anim_mode,
                                g->anim_start_frame,
                                sync_frame);
 
+
+#if 0
+  return;
+#endif
+
+#if 0
+  if (frame_em == 7)
+    return;
+#endif
+
+#if 0
+  int old_src_x = g_em->src_x;
+  int old_src_y = g_em->src_y;
+#endif
+
+#if 1
+  getGraphicSourceExt(graphic, frame, &g_em->bitmap, &g_em->src_x, &g_em->src_y,
+                     g->double_movement && is_backside);
+#else
   getGraphicSourceExt(graphic, frame, &g_em->bitmap,
                      &g_em->src_x, &g_em->src_y, FALSE);
+#endif
+
+
+#if 0
+  return;
+#endif
+
+#if 0
+  if (frame_em == 7)
+  {
+    if (graphic == IMG_BUG_MOVING_RIGHT)
+      printf("::: %d, %d, %d: %d, %d [%d, %d -> %d, %d]\n", graphic, x, y,
+            g->double_movement, is_backside,
+            old_src_x, old_src_y, g_em->src_x, g_em->src_y);
+
+    return;
+  }
+#endif
+
+
+#if 0
+  g_em->src_offset_x = 0;
+  g_em->src_offset_y = 0;
+  g_em->dst_offset_x = 0;
+  g_em->dst_offset_y = 0;
+  g_em->width  = TILEX;
+  g_em->height = TILEY;
+
+  g_em->preserve_background = FALSE;
+#endif
 
   /* (updating the "crumbled" graphic definitions is probably not really needed,
      as animations for crumbled graphics can't be longer than one EMC cycle) */
@@ -6361,6 +6811,86 @@ void getGraphicSourceObjectExt_EM(struct GraphicInfo_EM *g_em,
     g_em->has_crumbled_graphics = TRUE;
   }
 #endif
+
+#if 0
+ {
+   int effective_action = xxx_effective_action;
+   int has_action_graphics = xxx_has_action_graphics;
+
+      if ((!g->double_movement && (effective_action == ACTION_FALLING ||
+                                  effective_action == ACTION_MOVING  ||
+                                  effective_action == ACTION_PUSHING ||
+                                  effective_action == ACTION_EATING)) ||
+         (!has_action_graphics && (effective_action == ACTION_FILLING ||
+                                   effective_action == ACTION_EMPTYING)))
+      {
+       int move_dir =
+         (effective_action == ACTION_FALLING ||
+          effective_action == ACTION_FILLING ||
+          effective_action == ACTION_EMPTYING ? MV_DOWN : direction);
+       int dx = (move_dir == MV_LEFT ? -1 : move_dir == MV_RIGHT ? 1 : 0);
+       int dy = (move_dir == MV_UP   ? -1 : move_dir == MV_DOWN  ? 1 : 0);
+       int num_steps = (i == Ydrip_s1  ? 16 :
+                        i == Ydrip_s1B ? 16 :
+                        i == Ydrip_s2  ? 16 :
+                        i == Ydrip_s2B ? 16 :
+                        i == Xsand_stonein_1 ? 32 :
+                        i == Xsand_stonein_2 ? 32 :
+                        i == Xsand_stonein_3 ? 32 :
+                        i == Xsand_stonein_4 ? 32 :
+                        i == Xsand_stoneout_1 ? 16 :
+                        i == Xsand_stoneout_2 ? 16 : 8);
+       int cx = ABS(dx) * (TILEX / num_steps);
+       int cy = ABS(dy) * (TILEY / num_steps);
+       int step_frame = (i == Ydrip_s2         ? j + 8 :
+                         i == Ydrip_s2B        ? j + 8 :
+                         i == Xsand_stonein_2  ? j + 8 :
+                         i == Xsand_stonein_3  ? j + 16 :
+                         i == Xsand_stonein_4  ? j + 24 :
+                         i == Xsand_stoneout_2 ? j + 8 : j) + 1;
+       int step = (is_backside ? step_frame : num_steps - step_frame);
+
+       if (is_backside)        /* tile where movement starts */
+       {
+         if (dx < 0 || dy < 0)
+         {
+           g_em->src_offset_x = cx * step;
+           g_em->src_offset_y = cy * step;
+         }
+         else
+         {
+           g_em->dst_offset_x = cx * step;
+           g_em->dst_offset_y = cy * step;
+         }
+       }
+       else                    /* tile where movement ends */
+       {
+         if (dx < 0 || dy < 0)
+         {
+           g_em->dst_offset_x = cx * step;
+           g_em->dst_offset_y = cy * step;
+         }
+         else
+         {
+           g_em->src_offset_x = cx * step;
+           g_em->src_offset_y = cy * step;
+         }
+       }
+
+       g_em->width  = TILEX - cx * step;
+       g_em->height = TILEY - cy * step;
+      }
+
+      /* create unique graphic identifier to decide if tile must be redrawn */
+      /* bit 31 - 16 (16 bit): EM style graphic
+        bit 15 - 12 ( 4 bit): EM style frame
+        bit 11 -  6 ( 6 bit): graphic width
+        bit  5 -  0 ( 6 bit): graphic height */
+      g_em->unique_identifier =
+       (graphic << 16) | (frame << 12) | (g_em->width << 6) | g_em->height;
+ }
+#endif
+
 }
 
 void getGraphicSourcePlayerExt_EM(struct GraphicInfo_EM *g_em,