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