From 76b3cb92402127cde194888bab57397eca735220 Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Fri, 8 Aug 2003 19:59:38 +0200 Subject: [PATCH] rnd-20030808-5-src --- CHANGES | 5 +- src/conf_chr.c | 12 - src/conf_chr.h | 12 - src/conf_cus.c | 12 - src/conf_cus.h | 12 - src/conf_e2g.c | 20 +- src/conf_e2s.c | 12 - src/conf_esg.c | 12 - src/conf_fnt.c | 12 - src/conf_gfx.c | 4 + src/conf_gfx.h | 1905 ++++++++++++++++++++++---------------------- src/conf_snd.h | 12 - src/conftime.h | 2 +- src/editor.c | 541 ++++++------- src/events.c | 11 +- src/files.c | 29 +- src/game.c | 160 ++-- src/game.h | 2 +- src/init.c | 10 +- src/libgame/text.c | 13 +- src/libgame/text.h | 2 + src/main.h | 81 +- src/screens.c | 13 +- src/tools.c | 16 +- 24 files changed, 1379 insertions(+), 1531 deletions(-) diff --git a/CHANGES b/CHANGES index abd253eb..10ebc7f0 100644 --- a/CHANGES +++ b/CHANGES @@ -1,8 +1,5 @@ -Release Version 3.0.1 [?? ??? ????] ------------------------------------ - Release Version 3.0.0 [05 AUG 2003] ------------------------------------ +------------------------------------------ - final version bumped to 3.0.0 due to the massive changes - graphics and sounds now completely and dynamically customizable - custom elements now have lots of configurable properties diff --git a/src/conf_chr.c b/src/conf_chr.c index 506c8b27..00fe6994 100644 --- a/src/conf_chr.c +++ b/src/conf_chr.c @@ -1,15 +1,3 @@ -/*********************************************************** -* Rocks'n'Diamonds -- McDuffin Strikes Back! * -*----------------------------------------------------------* -* (c) 1995-2002 Artsoft Entertainment * -* Holger Schemel * -* Detmolder Strasse 189 * -* 33604 Bielefeld * -* Germany * -* e-mail: info@artsoft.org * -*----------------------------------------------------------* -* conf_chr.c * -***********************************************************/ /* ----- this file was automatically generated -- do not edit by hand ----- */ diff --git a/src/conf_chr.h b/src/conf_chr.h index 8cee2724..373ef0de 100644 --- a/src/conf_chr.h +++ b/src/conf_chr.h @@ -1,15 +1,3 @@ -/*********************************************************** -* Rocks'n'Diamonds -- McDuffin Strikes Back! * -*----------------------------------------------------------* -* (c) 1995-2002 Artsoft Entertainment * -* Holger Schemel * -* Detmolder Strasse 189 * -* 33604 Bielefeld * -* Germany * -* e-mail: info@artsoft.org * -*----------------------------------------------------------* -* conf_chr.h * -***********************************************************/ /* ----- this file was automatically generated -- do not edit by hand ----- */ diff --git a/src/conf_cus.c b/src/conf_cus.c index 82144cd2..7c68e072 100644 --- a/src/conf_cus.c +++ b/src/conf_cus.c @@ -1,15 +1,3 @@ -/*********************************************************** -* Rocks'n'Diamonds -- McDuffin Strikes Back! * -*----------------------------------------------------------* -* (c) 1995-2002 Artsoft Entertainment * -* Holger Schemel * -* Detmolder Strasse 189 * -* 33604 Bielefeld * -* Germany * -* e-mail: info@artsoft.org * -*----------------------------------------------------------* -* conf_cus.c * -***********************************************************/ /* ----- this file was automatically generated -- do not edit by hand ----- */ diff --git a/src/conf_cus.h b/src/conf_cus.h index 425334be..3fa751d6 100644 --- a/src/conf_cus.h +++ b/src/conf_cus.h @@ -1,15 +1,3 @@ -/*********************************************************** -* Rocks'n'Diamonds -- McDuffin Strikes Back! * -*----------------------------------------------------------* -* (c) 1995-2002 Artsoft Entertainment * -* Holger Schemel * -* Detmolder Strasse 189 * -* 33604 Bielefeld * -* Germany * -* e-mail: info@artsoft.org * -*----------------------------------------------------------* -* conf_cus.h * -***********************************************************/ /* ----- this file was automatically generated -- do not edit by hand ----- */ diff --git a/src/conf_e2g.c b/src/conf_e2g.c index 2b9b2e00..32c104a0 100644 --- a/src/conf_e2g.c +++ b/src/conf_e2g.c @@ -1,15 +1,3 @@ -/*********************************************************** -* Rocks'n'Diamonds -- McDuffin Strikes Back! * -*----------------------------------------------------------* -* (c) 1995-2002 Artsoft Entertainment * -* Holger Schemel * -* Detmolder Strasse 189 * -* 33604 Bielefeld * -* Germany * -* e-mail: info@artsoft.org * -*----------------------------------------------------------* -* conf_e2g.c * -***********************************************************/ /* ----- this file was automatically generated -- do not edit by hand ----- */ @@ -341,6 +329,14 @@ element_to_graphic[] = EL_SP_DISK_RED, ACTION_COLLECTING, -1, FALSE, IMG_SP_DISK_RED_COLLECTING }, + { + EL_SP_DISK_RED_ACTIVE, -1, -1, FALSE, + IMG_SP_DISK_RED_ACTIVE + }, + { + EL_SP_DISK_RED, ACTION_ACTIVE, -1, FALSE, + IMG_SP_DISK_RED_ACTIVE + }, { EL_SP_PORT_RIGHT, -1, -1, FALSE, IMG_SP_PORT_RIGHT diff --git a/src/conf_e2s.c b/src/conf_e2s.c index 6e229df2..f17b1b3e 100644 --- a/src/conf_e2s.c +++ b/src/conf_e2s.c @@ -1,15 +1,3 @@ -/*********************************************************** -* Rocks'n'Diamonds -- McDuffin Strikes Back! * -*----------------------------------------------------------* -* (c) 1995-2002 Artsoft Entertainment * -* Holger Schemel * -* Detmolder Strasse 189 * -* 33604 Bielefeld * -* Germany * -* e-mail: info@artsoft.org * -*----------------------------------------------------------* -* conf_e2s.c * -***********************************************************/ /* ----- this file was automatically generated -- do not edit by hand ----- */ diff --git a/src/conf_esg.c b/src/conf_esg.c index b2180fb3..ed2369a3 100644 --- a/src/conf_esg.c +++ b/src/conf_esg.c @@ -1,15 +1,3 @@ -/*********************************************************** -* Rocks'n'Diamonds -- McDuffin Strikes Back! * -*----------------------------------------------------------* -* (c) 1995-2002 Artsoft Entertainment * -* Holger Schemel * -* Detmolder Strasse 189 * -* 33604 Bielefeld * -* Germany * -* e-mail: info@artsoft.org * -*----------------------------------------------------------* -* conf_esg.c * -***********************************************************/ /* ----- this file was automatically generated -- do not edit by hand ----- */ diff --git a/src/conf_fnt.c b/src/conf_fnt.c index 0a191dda..0c9256b5 100644 --- a/src/conf_fnt.c +++ b/src/conf_fnt.c @@ -1,15 +1,3 @@ -/*********************************************************** -* Rocks'n'Diamonds -- McDuffin Strikes Back! * -*----------------------------------------------------------* -* (c) 1995-2002 Artsoft Entertainment * -* Holger Schemel * -* Detmolder Strasse 189 * -* 33604 Bielefeld * -* Germany * -* e-mail: info@artsoft.org * -*----------------------------------------------------------* -* conf_fnt.c * -***********************************************************/ /* ----- this file was automatically generated -- do not edit by hand ----- */ diff --git a/src/conf_gfx.c b/src/conf_gfx.c index 7b692bfa..258b7fde 100644 --- a/src/conf_gfx.c +++ b/src/conf_gfx.c @@ -411,6 +411,10 @@ struct ConfigInfo image_config[] = { "sp_disk_red.collecting.xpos", "8" }, { "sp_disk_red.collecting.ypos", "5" }, { "sp_disk_red.collecting.frames", "8" }, + { "sp_disk_red.active", "RocksSP.pcx" }, + { "sp_disk_red.active.xpos", "4" }, + { "sp_disk_red.active.ypos", "2" }, + { "sp_disk_red.active.frames", "1" }, { "sp_port_right", "RocksSP.pcx" }, { "sp_port_right.xpos", "1" }, diff --git a/src/conf_gfx.h b/src/conf_gfx.h index 8b3f18c8..528d73d0 100644 --- a/src/conf_gfx.h +++ b/src/conf_gfx.h @@ -1,15 +1,3 @@ -/*********************************************************** -* Rocks'n'Diamonds -- McDuffin Strikes Back! * -*----------------------------------------------------------* -* (c) 1995-2002 Artsoft Entertainment * -* Holger Schemel * -* Detmolder Strasse 189 * -* 33604 Bielefeld * -* Germany * -* e-mail: info@artsoft.org * -*----------------------------------------------------------* -* conf_gfx.h * -***********************************************************/ /* ----- this file was automatically generated -- do not edit by hand ----- */ @@ -89,952 +77,953 @@ #define IMG_SP_DISK_YELLOW 68 #define IMG_SP_DISK_RED 69 #define IMG_SP_DISK_RED_COLLECTING 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_BALLOON 216 -#define IMG_BALLOON_MOVING 217 -#define IMG_BALLOON_PUSHING 218 -#define IMG_BALLOON_SWITCH_LEFT 219 -#define IMG_BALLOON_SWITCH_RIGHT 220 -#define IMG_BALLOON_SWITCH_UP 221 -#define IMG_BALLOON_SWITCH_DOWN 222 -#define IMG_BALLOON_SWITCH_ANY 223 -#define IMG_SPRING 224 -#define IMG_EMC_STEELWALL_1 225 -#define IMG_EMC_STEELWALL_2 226 -#define IMG_EMC_STEELWALL_3 227 -#define IMG_EMC_STEELWALL_4 228 -#define IMG_EMC_WALL_1 229 -#define IMG_EMC_WALL_2 230 -#define IMG_EMC_WALL_3 231 -#define IMG_EMC_WALL_4 232 -#define IMG_EMC_WALL_5 233 -#define IMG_EMC_WALL_6 234 -#define IMG_EMC_WALL_7 235 -#define IMG_EMC_WALL_8 236 -#define IMG_INVISIBLE_STEELWALL 237 -#define IMG_INVISIBLE_STEELWALL_EDITOR 238 -#define IMG_INVISIBLE_STEELWALL_ACTIVE 239 -#define IMG_INVISIBLE_WALL 240 -#define IMG_INVISIBLE_WALL_EDITOR 241 -#define IMG_INVISIBLE_WALL_ACTIVE 242 -#define IMG_INVISIBLE_SAND 243 -#define IMG_INVISIBLE_SAND_EDITOR 244 -#define IMG_INVISIBLE_SAND_ACTIVE 245 -#define IMG_CONVEYOR_BELT_1_MIDDLE 246 -#define IMG_CONVEYOR_BELT_1_MIDDLE_ACTIVE 247 -#define IMG_CONVEYOR_BELT_1_LEFT 248 -#define IMG_CONVEYOR_BELT_1_LEFT_ACTIVE 249 -#define IMG_CONVEYOR_BELT_1_RIGHT 250 -#define IMG_CONVEYOR_BELT_1_RIGHT_ACTIVE 251 -#define IMG_CONVEYOR_BELT_1_SWITCH_LEFT 252 -#define IMG_CONVEYOR_BELT_1_SWITCH_MIDDLE 253 -#define IMG_CONVEYOR_BELT_1_SWITCH_RIGHT 254 -#define IMG_CONVEYOR_BELT_2_MIDDLE 255 -#define IMG_CONVEYOR_BELT_2_MIDDLE_ACTIVE 256 -#define IMG_CONVEYOR_BELT_2_LEFT 257 -#define IMG_CONVEYOR_BELT_2_LEFT_ACTIVE 258 -#define IMG_CONVEYOR_BELT_2_RIGHT 259 -#define IMG_CONVEYOR_BELT_2_RIGHT_ACTIVE 260 -#define IMG_CONVEYOR_BELT_2_SWITCH_LEFT 261 -#define IMG_CONVEYOR_BELT_2_SWITCH_MIDDLE 262 -#define IMG_CONVEYOR_BELT_2_SWITCH_RIGHT 263 -#define IMG_CONVEYOR_BELT_3_MIDDLE 264 -#define IMG_CONVEYOR_BELT_3_MIDDLE_ACTIVE 265 -#define IMG_CONVEYOR_BELT_3_LEFT 266 -#define IMG_CONVEYOR_BELT_3_LEFT_ACTIVE 267 -#define IMG_CONVEYOR_BELT_3_RIGHT 268 -#define IMG_CONVEYOR_BELT_3_RIGHT_ACTIVE 269 -#define IMG_CONVEYOR_BELT_3_SWITCH_LEFT 270 -#define IMG_CONVEYOR_BELT_3_SWITCH_MIDDLE 271 -#define IMG_CONVEYOR_BELT_3_SWITCH_RIGHT 272 -#define IMG_CONVEYOR_BELT_4_MIDDLE 273 -#define IMG_CONVEYOR_BELT_4_MIDDLE_ACTIVE 274 -#define IMG_CONVEYOR_BELT_4_LEFT 275 -#define IMG_CONVEYOR_BELT_4_LEFT_ACTIVE 276 -#define IMG_CONVEYOR_BELT_4_RIGHT 277 -#define IMG_CONVEYOR_BELT_4_RIGHT_ACTIVE 278 -#define IMG_CONVEYOR_BELT_4_SWITCH_LEFT 279 -#define IMG_CONVEYOR_BELT_4_SWITCH_MIDDLE 280 -#define IMG_CONVEYOR_BELT_4_SWITCH_RIGHT 281 -#define IMG_SWITCHGATE_SWITCH_UP 282 -#define IMG_SWITCHGATE_SWITCH_DOWN 283 -#define IMG_LIGHT_SWITCH 284 -#define IMG_LIGHT_SWITCH_ACTIVE 285 -#define IMG_TIMEGATE_SWITCH 286 -#define IMG_TIMEGATE_SWITCH_ACTIVE 287 -#define IMG_ENVELOPE 288 -#define IMG_SIGN_EXCLAMATION 289 -#define IMG_SIGN_STOP 290 -#define IMG_LANDMINE 291 -#define IMG_STEELWALL_SLIPPERY 292 -#define IMG_EXTRA_TIME 293 -#define IMG_SHIELD_NORMAL 294 -#define IMG_SHIELD_NORMAL_ACTIVE 295 -#define IMG_SHIELD_DEADLY 296 -#define IMG_SHIELD_DEADLY_ACTIVE 297 -#define IMG_SWITCHGATE_CLOSED 298 -#define IMG_SWITCHGATE_OPENING 299 -#define IMG_SWITCHGATE_OPEN 300 -#define IMG_SWITCHGATE_CLOSING 301 -#define IMG_TIMEGATE_CLOSED 302 -#define IMG_TIMEGATE_OPENING 303 -#define IMG_TIMEGATE_OPEN 304 -#define IMG_TIMEGATE_CLOSING 305 -#define IMG_PEARL 306 -#define IMG_PEARL_BREAKING 307 -#define IMG_CRYSTAL 308 -#define IMG_WALL_PEARL 309 -#define IMG_WALL_CRYSTAL 310 -#define IMG_TUBE_RIGHT_DOWN 311 -#define IMG_TUBE_HORIZONTAL_DOWN 312 -#define IMG_TUBE_LEFT_DOWN 313 -#define IMG_TUBE_HORIZONTAL 314 -#define IMG_TUBE_VERTICAL_RIGHT 315 -#define IMG_TUBE_ANY 316 -#define IMG_TUBE_VERTICAL_LEFT 317 -#define IMG_TUBE_VERTICAL 318 -#define IMG_TUBE_RIGHT_UP 319 -#define IMG_TUBE_HORIZONTAL_UP 320 -#define IMG_TUBE_LEFT_UP 321 -#define IMG_TRAP 322 -#define IMG_TRAP_ACTIVE 323 -#define IMG_DX_SUPABOMB 324 -#define IMG_KEY_1 325 -#define IMG_KEY_1_EDITOR 326 -#define IMG_KEY_2 327 -#define IMG_KEY_2_EDITOR 328 -#define IMG_KEY_3 329 -#define IMG_KEY_3_EDITOR 330 -#define IMG_KEY_4 331 -#define IMG_KEY_4_EDITOR 332 -#define IMG_GATE_1 333 -#define IMG_GATE_2 334 -#define IMG_GATE_3 335 -#define IMG_GATE_4 336 -#define IMG_GATE_1_GRAY 337 -#define IMG_GATE_1_GRAY_EDITOR 338 -#define IMG_GATE_2_GRAY 339 -#define IMG_GATE_2_GRAY_EDITOR 340 -#define IMG_GATE_3_GRAY 341 -#define IMG_GATE_3_GRAY_EDITOR 342 -#define IMG_GATE_4_GRAY 343 -#define IMG_GATE_4_GRAY_EDITOR 344 -#define IMG_GAME_OF_LIFE 345 -#define IMG_BIOMAZE 346 -#define IMG_PACMAN 347 -#define IMG_PACMAN_RIGHT 348 -#define IMG_PACMAN_UP 349 -#define IMG_PACMAN_LEFT 350 -#define IMG_PACMAN_DOWN 351 -#define IMG_PACMAN_MOVING_RIGHT 352 -#define IMG_PACMAN_MOVING_UP 353 -#define IMG_PACMAN_MOVING_LEFT 354 -#define IMG_PACMAN_MOVING_DOWN 355 -#define IMG_LAMP 356 -#define IMG_LAMP_EDITOR 357 -#define IMG_LAMP_ACTIVE 358 -#define IMG_TIME_ORB_FULL 359 -#define IMG_TIME_ORB_EMPTY 360 -#define IMG_EMERALD_YELLOW 361 -#define IMG_EMERALD_YELLOW_MOVING 362 -#define IMG_EMERALD_YELLOW_FALLING 363 -#define IMG_EMERALD_RED 364 -#define IMG_EMERALD_RED_MOVING 365 -#define IMG_EMERALD_RED_FALLING 366 -#define IMG_EMERALD_PURPLE 367 -#define IMG_EMERALD_PURPLE_MOVING 368 -#define IMG_EMERALD_PURPLE_FALLING 369 -#define IMG_WALL_EMERALD_YELLOW 370 -#define IMG_WALL_EMERALD_RED 371 -#define IMG_WALL_EMERALD_PURPLE 372 -#define IMG_WALL_BD_DIAMOND 373 -#define IMG_EXPANDABLE_WALL 374 -#define IMG_EXPANDABLE_WALL_HORIZONTAL 375 -#define IMG_EXPANDABLE_WALL_HORIZONTAL_EDITOR 376 -#define IMG_EXPANDABLE_WALL_VERTICAL 377 -#define IMG_EXPANDABLE_WALL_VERTICAL_EDITOR 378 -#define IMG_EXPANDABLE_WALL_ANY 379 -#define IMG_EXPANDABLE_WALL_ANY_EDITOR 380 -#define IMG_EXPANDABLE_WALL_GROWING_LEFT 381 -#define IMG_EXPANDABLE_WALL_GROWING_RIGHT 382 -#define IMG_EXPANDABLE_WALL_GROWING_UP 383 -#define IMG_EXPANDABLE_WALL_GROWING_DOWN 384 -#define IMG_BLACK_ORB 385 -#define IMG_SPEED_PILL 386 -#define IMG_DARK_YAMYAM 387 -#define IMG_DYNABOMB 388 -#define IMG_DYNABOMB_ACTIVE 389 -#define IMG_DYNABOMB_PLAYER_1 390 -#define IMG_DYNABOMB_PLAYER_1_ACTIVE 391 -#define IMG_DYNABOMB_PLAYER_2 392 -#define IMG_DYNABOMB_PLAYER_2_ACTIVE 393 -#define IMG_DYNABOMB_PLAYER_3 394 -#define IMG_DYNABOMB_PLAYER_3_ACTIVE 395 -#define IMG_DYNABOMB_PLAYER_4 396 -#define IMG_DYNABOMB_PLAYER_4_ACTIVE 397 -#define IMG_DYNABOMB_INCREASE_NUMBER 398 -#define IMG_DYNABOMB_INCREASE_SIZE 399 -#define IMG_DYNABOMB_INCREASE_POWER 400 -#define IMG_PIG 401 -#define IMG_PIG_DOWN 402 -#define IMG_PIG_UP 403 -#define IMG_PIG_LEFT 404 -#define IMG_PIG_RIGHT 405 -#define IMG_PIG_MOVING_DOWN 406 -#define IMG_PIG_MOVING_UP 407 -#define IMG_PIG_MOVING_LEFT 408 -#define IMG_PIG_MOVING_RIGHT 409 -#define IMG_PIG_DIGGING_DOWN 410 -#define IMG_PIG_DIGGING_UP 411 -#define IMG_PIG_DIGGING_LEFT 412 -#define IMG_PIG_DIGGING_RIGHT 413 -#define IMG_DRAGON 414 -#define IMG_DRAGON_DOWN 415 -#define IMG_DRAGON_UP 416 -#define IMG_DRAGON_LEFT 417 -#define IMG_DRAGON_RIGHT 418 -#define IMG_DRAGON_MOVING_DOWN 419 -#define IMG_DRAGON_MOVING_UP 420 -#define IMG_DRAGON_MOVING_LEFT 421 -#define IMG_DRAGON_MOVING_RIGHT 422 -#define IMG_DRAGON_ATTACKING_DOWN 423 -#define IMG_DRAGON_ATTACKING_UP 424 -#define IMG_DRAGON_ATTACKING_LEFT 425 -#define IMG_DRAGON_ATTACKING_RIGHT 426 -#define IMG_MOLE 427 -#define IMG_MOLE_DOWN 428 -#define IMG_MOLE_UP 429 -#define IMG_MOLE_LEFT 430 -#define IMG_MOLE_RIGHT 431 -#define IMG_MOLE_MOVING_DOWN 432 -#define IMG_MOLE_MOVING_UP 433 -#define IMG_MOLE_MOVING_LEFT 434 -#define IMG_MOLE_MOVING_RIGHT 435 -#define IMG_MOLE_DIGGING_DOWN 436 -#define IMG_MOLE_DIGGING_UP 437 -#define IMG_MOLE_DIGGING_LEFT 438 -#define IMG_MOLE_DIGGING_RIGHT 439 -#define IMG_PENGUIN 440 -#define IMG_PENGUIN_EDITOR 441 -#define IMG_PENGUIN_DOWN 442 -#define IMG_PENGUIN_UP 443 -#define IMG_PENGUIN_LEFT 444 -#define IMG_PENGUIN_RIGHT 445 -#define IMG_PENGUIN_MOVING_DOWN 446 -#define IMG_PENGUIN_MOVING_UP 447 -#define IMG_PENGUIN_MOVING_LEFT 448 -#define IMG_PENGUIN_MOVING_RIGHT 449 -#define IMG_SATELLITE 450 -#define IMG_FLAMES_1_LEFT 451 -#define IMG_FLAMES_2_LEFT 452 -#define IMG_FLAMES_3_LEFT 453 -#define IMG_FLAMES_1_RIGHT 454 -#define IMG_FLAMES_2_RIGHT 455 -#define IMG_FLAMES_3_RIGHT 456 -#define IMG_FLAMES_1_UP 457 -#define IMG_FLAMES_2_UP 458 -#define IMG_FLAMES_3_UP 459 -#define IMG_FLAMES_1_DOWN 460 -#define IMG_FLAMES_2_DOWN 461 -#define IMG_FLAMES_3_DOWN 462 -#define IMG_STONEBLOCK 463 -#define IMG_PLAYER_1 464 -#define IMG_PLAYER_1_EDITOR 465 -#define IMG_PLAYER_1_DOWN 466 -#define IMG_PLAYER_1_UP 467 -#define IMG_PLAYER_1_LEFT 468 -#define IMG_PLAYER_1_RIGHT 469 -#define IMG_PLAYER_1_MOVING_DOWN 470 -#define IMG_PLAYER_1_MOVING_UP 471 -#define IMG_PLAYER_1_MOVING_LEFT 472 -#define IMG_PLAYER_1_MOVING_RIGHT 473 -#define IMG_PLAYER_1_DIGGING_DOWN 474 -#define IMG_PLAYER_1_DIGGING_UP 475 -#define IMG_PLAYER_1_DIGGING_LEFT 476 -#define IMG_PLAYER_1_DIGGING_RIGHT 477 -#define IMG_PLAYER_1_COLLECTING_DOWN 478 -#define IMG_PLAYER_1_COLLECTING_UP 479 -#define IMG_PLAYER_1_COLLECTING_LEFT 480 -#define IMG_PLAYER_1_COLLECTING_RIGHT 481 -#define IMG_PLAYER_1_PUSHING_DOWN 482 -#define IMG_PLAYER_1_PUSHING_UP 483 -#define IMG_PLAYER_1_PUSHING_LEFT 484 -#define IMG_PLAYER_1_PUSHING_RIGHT 485 -#define IMG_PLAYER_1_SNAPPING_DOWN 486 -#define IMG_PLAYER_1_SNAPPING_UP 487 -#define IMG_PLAYER_1_SNAPPING_LEFT 488 -#define IMG_PLAYER_1_SNAPPING_RIGHT 489 -#define IMG_PLAYER_2 490 -#define IMG_PLAYER_2_EDITOR 491 -#define IMG_PLAYER_2_DOWN 492 -#define IMG_PLAYER_2_UP 493 -#define IMG_PLAYER_2_LEFT 494 -#define IMG_PLAYER_2_RIGHT 495 -#define IMG_PLAYER_2_MOVING_DOWN 496 -#define IMG_PLAYER_2_MOVING_UP 497 -#define IMG_PLAYER_2_MOVING_LEFT 498 -#define IMG_PLAYER_2_MOVING_RIGHT 499 -#define IMG_PLAYER_2_DIGGING_DOWN 500 -#define IMG_PLAYER_2_DIGGING_UP 501 -#define IMG_PLAYER_2_DIGGING_LEFT 502 -#define IMG_PLAYER_2_DIGGING_RIGHT 503 -#define IMG_PLAYER_2_COLLECTING_DOWN 504 -#define IMG_PLAYER_2_COLLECTING_UP 505 -#define IMG_PLAYER_2_COLLECTING_LEFT 506 -#define IMG_PLAYER_2_COLLECTING_RIGHT 507 -#define IMG_PLAYER_2_PUSHING_DOWN 508 -#define IMG_PLAYER_2_PUSHING_UP 509 -#define IMG_PLAYER_2_PUSHING_LEFT 510 -#define IMG_PLAYER_2_PUSHING_RIGHT 511 -#define IMG_PLAYER_2_SNAPPING_DOWN 512 -#define IMG_PLAYER_2_SNAPPING_UP 513 -#define IMG_PLAYER_2_SNAPPING_LEFT 514 -#define IMG_PLAYER_2_SNAPPING_RIGHT 515 -#define IMG_PLAYER_3 516 -#define IMG_PLAYER_3_EDITOR 517 -#define IMG_PLAYER_3_DOWN 518 -#define IMG_PLAYER_3_UP 519 -#define IMG_PLAYER_3_LEFT 520 -#define IMG_PLAYER_3_RIGHT 521 -#define IMG_PLAYER_3_MOVING_DOWN 522 -#define IMG_PLAYER_3_MOVING_UP 523 -#define IMG_PLAYER_3_MOVING_LEFT 524 -#define IMG_PLAYER_3_MOVING_RIGHT 525 -#define IMG_PLAYER_3_DIGGING_DOWN 526 -#define IMG_PLAYER_3_DIGGING_UP 527 -#define IMG_PLAYER_3_DIGGING_LEFT 528 -#define IMG_PLAYER_3_DIGGING_RIGHT 529 -#define IMG_PLAYER_3_COLLECTING_DOWN 530 -#define IMG_PLAYER_3_COLLECTING_UP 531 -#define IMG_PLAYER_3_COLLECTING_LEFT 532 -#define IMG_PLAYER_3_COLLECTING_RIGHT 533 -#define IMG_PLAYER_3_PUSHING_DOWN 534 -#define IMG_PLAYER_3_PUSHING_UP 535 -#define IMG_PLAYER_3_PUSHING_LEFT 536 -#define IMG_PLAYER_3_PUSHING_RIGHT 537 -#define IMG_PLAYER_3_SNAPPING_DOWN 538 -#define IMG_PLAYER_3_SNAPPING_UP 539 -#define IMG_PLAYER_3_SNAPPING_LEFT 540 -#define IMG_PLAYER_3_SNAPPING_RIGHT 541 -#define IMG_PLAYER_4 542 -#define IMG_PLAYER_4_EDITOR 543 -#define IMG_PLAYER_4_DOWN 544 -#define IMG_PLAYER_4_UP 545 -#define IMG_PLAYER_4_LEFT 546 -#define IMG_PLAYER_4_RIGHT 547 -#define IMG_PLAYER_4_MOVING_DOWN 548 -#define IMG_PLAYER_4_MOVING_UP 549 -#define IMG_PLAYER_4_MOVING_LEFT 550 -#define IMG_PLAYER_4_MOVING_RIGHT 551 -#define IMG_PLAYER_4_DIGGING_DOWN 552 -#define IMG_PLAYER_4_DIGGING_UP 553 -#define IMG_PLAYER_4_DIGGING_LEFT 554 -#define IMG_PLAYER_4_DIGGING_RIGHT 555 -#define IMG_PLAYER_4_COLLECTING_DOWN 556 -#define IMG_PLAYER_4_COLLECTING_UP 557 -#define IMG_PLAYER_4_COLLECTING_LEFT 558 -#define IMG_PLAYER_4_COLLECTING_RIGHT 559 -#define IMG_PLAYER_4_PUSHING_DOWN 560 -#define IMG_PLAYER_4_PUSHING_UP 561 -#define IMG_PLAYER_4_PUSHING_LEFT 562 -#define IMG_PLAYER_4_PUSHING_RIGHT 563 -#define IMG_PLAYER_4_SNAPPING_DOWN 564 -#define IMG_PLAYER_4_SNAPPING_UP 565 -#define IMG_PLAYER_4_SNAPPING_LEFT 566 -#define IMG_PLAYER_4_SNAPPING_RIGHT 567 -#define IMG_DEFAULT_EXPLODING 568 -#define IMG_TWINKLE_BLUE 569 -#define IMG_TWINKLE_WHITE 570 -#define IMG_STEELWALL_TOPLEFT 571 -#define IMG_STEELWALL_TOPRIGHT 572 -#define IMG_STEELWALL_BOTTOMLEFT 573 -#define IMG_STEELWALL_BOTTOMRIGHT 574 -#define IMG_STEELWALL_HORIZONTAL 575 -#define IMG_STEELWALL_VERTICAL 576 -#define IMG_STEELWALL_TOPLEFT_EDITOR 577 -#define IMG_STEELWALL_TOPRIGHT_EDITOR 578 -#define IMG_STEELWALL_BOTTOMLEFT_EDITOR 579 -#define IMG_STEELWALL_BOTTOMRIGHT_EDITOR 580 -#define IMG_STEELWALL_HORIZONTAL_EDITOR 581 -#define IMG_STEELWALL_VERTICAL_EDITOR 582 -#define IMG_INVISIBLE_STEELWALL_TOPLEFT 583 -#define IMG_INVISIBLE_STEELWALL_TOPRIGHT 584 -#define IMG_INVISIBLE_STEELWALL_BOTTOMLEFT 585 -#define IMG_INVISIBLE_STEELWALL_BOTTOMRIGHT 586 -#define IMG_INVISIBLE_STEELWALL_HORIZONTAL 587 -#define IMG_INVISIBLE_STEELWALL_VERTICAL 588 -#define IMG_INVISIBLE_STEELWALL_TOPLEFT_EDITOR 589 -#define IMG_INVISIBLE_STEELWALL_TOPRIGHT_EDITOR 590 -#define IMG_INVISIBLE_STEELWALL_BOTTOMLEFT_EDITOR 591 -#define IMG_INVISIBLE_STEELWALL_BOTTOMRIGHT_EDITOR 592 -#define IMG_INVISIBLE_STEELWALL_HORIZONTAL_EDITOR 593 -#define IMG_INVISIBLE_STEELWALL_VERTICAL_EDITOR 594 -#define IMG_ARROW_LEFT 595 -#define IMG_ARROW_RIGHT 596 -#define IMG_ARROW_UP 597 -#define IMG_ARROW_DOWN 598 -#define IMG_CHAR_SPACE 599 -#define IMG_CHAR_EXCLAM 600 -#define IMG_CHAR_QUOTEDBL 601 -#define IMG_CHAR_NUMBERSIGN 602 -#define IMG_CHAR_DOLLAR 603 -#define IMG_CHAR_PROCENT 604 -#define IMG_CHAR_AMPERSAND 605 -#define IMG_CHAR_APOSTROPHE 606 -#define IMG_CHAR_PARENLEFT 607 -#define IMG_CHAR_PARENRIGHT 608 -#define IMG_CHAR_ASTERISK 609 -#define IMG_CHAR_PLUS 610 -#define IMG_CHAR_COMMA 611 -#define IMG_CHAR_MINUS 612 -#define IMG_CHAR_PERIOD 613 -#define IMG_CHAR_SLASH 614 -#define IMG_CHAR_0 615 -#define IMG_CHAR_1 616 -#define IMG_CHAR_2 617 -#define IMG_CHAR_3 618 -#define IMG_CHAR_4 619 -#define IMG_CHAR_5 620 -#define IMG_CHAR_6 621 -#define IMG_CHAR_7 622 -#define IMG_CHAR_8 623 -#define IMG_CHAR_9 624 -#define IMG_CHAR_COLON 625 -#define IMG_CHAR_SEMICOLON 626 -#define IMG_CHAR_LESS 627 -#define IMG_CHAR_EQUAL 628 -#define IMG_CHAR_GREATER 629 -#define IMG_CHAR_QUESTION 630 -#define IMG_CHAR_AT 631 -#define IMG_CHAR_A 632 -#define IMG_CHAR_B 633 -#define IMG_CHAR_C 634 -#define IMG_CHAR_D 635 -#define IMG_CHAR_E 636 -#define IMG_CHAR_F 637 -#define IMG_CHAR_G 638 -#define IMG_CHAR_H 639 -#define IMG_CHAR_I 640 -#define IMG_CHAR_J 641 -#define IMG_CHAR_K 642 -#define IMG_CHAR_L 643 -#define IMG_CHAR_M 644 -#define IMG_CHAR_N 645 -#define IMG_CHAR_O 646 -#define IMG_CHAR_P 647 -#define IMG_CHAR_Q 648 -#define IMG_CHAR_R 649 -#define IMG_CHAR_S 650 -#define IMG_CHAR_T 651 -#define IMG_CHAR_U 652 -#define IMG_CHAR_V 653 -#define IMG_CHAR_W 654 -#define IMG_CHAR_X 655 -#define IMG_CHAR_Y 656 -#define IMG_CHAR_Z 657 -#define IMG_CHAR_BRACKETLEFT 658 -#define IMG_CHAR_BACKSLASH 659 -#define IMG_CHAR_BRACKETRIGHT 660 -#define IMG_CHAR_ASCIICIRCUM 661 -#define IMG_CHAR_UNDERSCORE 662 -#define IMG_CHAR_COPYRIGHT 663 -#define IMG_CHAR_AUMLAUT 664 -#define IMG_CHAR_OUMLAUT 665 -#define IMG_CHAR_UUMLAUT 666 -#define IMG_CHAR_DEGREE 667 -#define IMG_CHAR_TRADEMARK 668 -#define IMG_CHAR_CURSOR 669 -#define IMG_CUSTOM_1 670 -#define IMG_CUSTOM_1_EDITOR 671 -#define IMG_CUSTOM_2 672 -#define IMG_CUSTOM_2_EDITOR 673 -#define IMG_CUSTOM_3 674 -#define IMG_CUSTOM_3_EDITOR 675 -#define IMG_CUSTOM_4 676 -#define IMG_CUSTOM_4_EDITOR 677 -#define IMG_CUSTOM_5 678 -#define IMG_CUSTOM_5_EDITOR 679 -#define IMG_CUSTOM_6 680 -#define IMG_CUSTOM_6_EDITOR 681 -#define IMG_CUSTOM_7 682 -#define IMG_CUSTOM_7_EDITOR 683 -#define IMG_CUSTOM_8 684 -#define IMG_CUSTOM_8_EDITOR 685 -#define IMG_CUSTOM_9 686 -#define IMG_CUSTOM_9_EDITOR 687 -#define IMG_CUSTOM_10 688 -#define IMG_CUSTOM_10_EDITOR 689 -#define IMG_CUSTOM_11 690 -#define IMG_CUSTOM_11_EDITOR 691 -#define IMG_CUSTOM_12 692 -#define IMG_CUSTOM_12_EDITOR 693 -#define IMG_CUSTOM_13 694 -#define IMG_CUSTOM_13_EDITOR 695 -#define IMG_CUSTOM_14 696 -#define IMG_CUSTOM_14_EDITOR 697 -#define IMG_CUSTOM_15 698 -#define IMG_CUSTOM_15_EDITOR 699 -#define IMG_CUSTOM_16 700 -#define IMG_CUSTOM_16_EDITOR 701 -#define IMG_CUSTOM_17 702 -#define IMG_CUSTOM_17_EDITOR 703 -#define IMG_CUSTOM_18 704 -#define IMG_CUSTOM_18_EDITOR 705 -#define IMG_CUSTOM_19 706 -#define IMG_CUSTOM_19_EDITOR 707 -#define IMG_CUSTOM_20 708 -#define IMG_CUSTOM_20_EDITOR 709 -#define IMG_CUSTOM_21 710 -#define IMG_CUSTOM_21_EDITOR 711 -#define IMG_CUSTOM_22 712 -#define IMG_CUSTOM_22_EDITOR 713 -#define IMG_CUSTOM_23 714 -#define IMG_CUSTOM_23_EDITOR 715 -#define IMG_CUSTOM_24 716 -#define IMG_CUSTOM_24_EDITOR 717 -#define IMG_CUSTOM_25 718 -#define IMG_CUSTOM_25_EDITOR 719 -#define IMG_CUSTOM_26 720 -#define IMG_CUSTOM_26_EDITOR 721 -#define IMG_CUSTOM_27 722 -#define IMG_CUSTOM_27_EDITOR 723 -#define IMG_CUSTOM_28 724 -#define IMG_CUSTOM_28_EDITOR 725 -#define IMG_CUSTOM_29 726 -#define IMG_CUSTOM_29_EDITOR 727 -#define IMG_CUSTOM_30 728 -#define IMG_CUSTOM_30_EDITOR 729 -#define IMG_CUSTOM_31 730 -#define IMG_CUSTOM_31_EDITOR 731 -#define IMG_CUSTOM_32 732 -#define IMG_CUSTOM_32_EDITOR 733 -#define IMG_CUSTOM_33 734 -#define IMG_CUSTOM_33_EDITOR 735 -#define IMG_CUSTOM_34 736 -#define IMG_CUSTOM_34_EDITOR 737 -#define IMG_CUSTOM_35 738 -#define IMG_CUSTOM_35_EDITOR 739 -#define IMG_CUSTOM_36 740 -#define IMG_CUSTOM_36_EDITOR 741 -#define IMG_CUSTOM_37 742 -#define IMG_CUSTOM_37_EDITOR 743 -#define IMG_CUSTOM_38 744 -#define IMG_CUSTOM_38_EDITOR 745 -#define IMG_CUSTOM_39 746 -#define IMG_CUSTOM_39_EDITOR 747 -#define IMG_CUSTOM_40 748 -#define IMG_CUSTOM_40_EDITOR 749 -#define IMG_CUSTOM_41 750 -#define IMG_CUSTOM_41_EDITOR 751 -#define IMG_CUSTOM_42 752 -#define IMG_CUSTOM_42_EDITOR 753 -#define IMG_CUSTOM_43 754 -#define IMG_CUSTOM_43_EDITOR 755 -#define IMG_CUSTOM_44 756 -#define IMG_CUSTOM_44_EDITOR 757 -#define IMG_CUSTOM_45 758 -#define IMG_CUSTOM_45_EDITOR 759 -#define IMG_CUSTOM_46 760 -#define IMG_CUSTOM_46_EDITOR 761 -#define IMG_CUSTOM_47 762 -#define IMG_CUSTOM_47_EDITOR 763 -#define IMG_CUSTOM_48 764 -#define IMG_CUSTOM_48_EDITOR 765 -#define IMG_CUSTOM_49 766 -#define IMG_CUSTOM_49_EDITOR 767 -#define IMG_CUSTOM_50 768 -#define IMG_CUSTOM_50_EDITOR 769 -#define IMG_CUSTOM_51 770 -#define IMG_CUSTOM_51_EDITOR 771 -#define IMG_CUSTOM_52 772 -#define IMG_CUSTOM_52_EDITOR 773 -#define IMG_CUSTOM_53 774 -#define IMG_CUSTOM_53_EDITOR 775 -#define IMG_CUSTOM_54 776 -#define IMG_CUSTOM_54_EDITOR 777 -#define IMG_CUSTOM_55 778 -#define IMG_CUSTOM_55_EDITOR 779 -#define IMG_CUSTOM_56 780 -#define IMG_CUSTOM_56_EDITOR 781 -#define IMG_CUSTOM_57 782 -#define IMG_CUSTOM_57_EDITOR 783 -#define IMG_CUSTOM_58 784 -#define IMG_CUSTOM_58_EDITOR 785 -#define IMG_CUSTOM_59 786 -#define IMG_CUSTOM_59_EDITOR 787 -#define IMG_CUSTOM_60 788 -#define IMG_CUSTOM_60_EDITOR 789 -#define IMG_CUSTOM_61 790 -#define IMG_CUSTOM_61_EDITOR 791 -#define IMG_CUSTOM_62 792 -#define IMG_CUSTOM_62_EDITOR 793 -#define IMG_CUSTOM_63 794 -#define IMG_CUSTOM_63_EDITOR 795 -#define IMG_CUSTOM_64 796 -#define IMG_CUSTOM_64_EDITOR 797 -#define IMG_CUSTOM_65 798 -#define IMG_CUSTOM_65_EDITOR 799 -#define IMG_CUSTOM_66 800 -#define IMG_CUSTOM_66_EDITOR 801 -#define IMG_CUSTOM_67 802 -#define IMG_CUSTOM_67_EDITOR 803 -#define IMG_CUSTOM_68 804 -#define IMG_CUSTOM_68_EDITOR 805 -#define IMG_CUSTOM_69 806 -#define IMG_CUSTOM_69_EDITOR 807 -#define IMG_CUSTOM_70 808 -#define IMG_CUSTOM_70_EDITOR 809 -#define IMG_CUSTOM_71 810 -#define IMG_CUSTOM_71_EDITOR 811 -#define IMG_CUSTOM_72 812 -#define IMG_CUSTOM_72_EDITOR 813 -#define IMG_CUSTOM_73 814 -#define IMG_CUSTOM_73_EDITOR 815 -#define IMG_CUSTOM_74 816 -#define IMG_CUSTOM_74_EDITOR 817 -#define IMG_CUSTOM_75 818 -#define IMG_CUSTOM_75_EDITOR 819 -#define IMG_CUSTOM_76 820 -#define IMG_CUSTOM_76_EDITOR 821 -#define IMG_CUSTOM_77 822 -#define IMG_CUSTOM_77_EDITOR 823 -#define IMG_CUSTOM_78 824 -#define IMG_CUSTOM_78_EDITOR 825 -#define IMG_CUSTOM_79 826 -#define IMG_CUSTOM_79_EDITOR 827 -#define IMG_CUSTOM_80 828 -#define IMG_CUSTOM_80_EDITOR 829 -#define IMG_CUSTOM_81 830 -#define IMG_CUSTOM_81_EDITOR 831 -#define IMG_CUSTOM_82 832 -#define IMG_CUSTOM_82_EDITOR 833 -#define IMG_CUSTOM_83 834 -#define IMG_CUSTOM_83_EDITOR 835 -#define IMG_CUSTOM_84 836 -#define IMG_CUSTOM_84_EDITOR 837 -#define IMG_CUSTOM_85 838 -#define IMG_CUSTOM_85_EDITOR 839 -#define IMG_CUSTOM_86 840 -#define IMG_CUSTOM_86_EDITOR 841 -#define IMG_CUSTOM_87 842 -#define IMG_CUSTOM_87_EDITOR 843 -#define IMG_CUSTOM_88 844 -#define IMG_CUSTOM_88_EDITOR 845 -#define IMG_CUSTOM_89 846 -#define IMG_CUSTOM_89_EDITOR 847 -#define IMG_CUSTOM_90 848 -#define IMG_CUSTOM_90_EDITOR 849 -#define IMG_CUSTOM_91 850 -#define IMG_CUSTOM_91_EDITOR 851 -#define IMG_CUSTOM_92 852 -#define IMG_CUSTOM_92_EDITOR 853 -#define IMG_CUSTOM_93 854 -#define IMG_CUSTOM_93_EDITOR 855 -#define IMG_CUSTOM_94 856 -#define IMG_CUSTOM_94_EDITOR 857 -#define IMG_CUSTOM_95 858 -#define IMG_CUSTOM_95_EDITOR 859 -#define IMG_CUSTOM_96 860 -#define IMG_CUSTOM_96_EDITOR 861 -#define IMG_CUSTOM_97 862 -#define IMG_CUSTOM_97_EDITOR 863 -#define IMG_CUSTOM_98 864 -#define IMG_CUSTOM_98_EDITOR 865 -#define IMG_CUSTOM_99 866 -#define IMG_CUSTOM_99_EDITOR 867 -#define IMG_CUSTOM_100 868 -#define IMG_CUSTOM_100_EDITOR 869 -#define IMG_CUSTOM_101 870 -#define IMG_CUSTOM_101_EDITOR 871 -#define IMG_CUSTOM_102 872 -#define IMG_CUSTOM_102_EDITOR 873 -#define IMG_CUSTOM_103 874 -#define IMG_CUSTOM_103_EDITOR 875 -#define IMG_CUSTOM_104 876 -#define IMG_CUSTOM_104_EDITOR 877 -#define IMG_CUSTOM_105 878 -#define IMG_CUSTOM_105_EDITOR 879 -#define IMG_CUSTOM_106 880 -#define IMG_CUSTOM_106_EDITOR 881 -#define IMG_CUSTOM_107 882 -#define IMG_CUSTOM_107_EDITOR 883 -#define IMG_CUSTOM_108 884 -#define IMG_CUSTOM_108_EDITOR 885 -#define IMG_CUSTOM_109 886 -#define IMG_CUSTOM_109_EDITOR 887 -#define IMG_CUSTOM_110 888 -#define IMG_CUSTOM_110_EDITOR 889 -#define IMG_CUSTOM_111 890 -#define IMG_CUSTOM_111_EDITOR 891 -#define IMG_CUSTOM_112 892 -#define IMG_CUSTOM_112_EDITOR 893 -#define IMG_CUSTOM_113 894 -#define IMG_CUSTOM_113_EDITOR 895 -#define IMG_CUSTOM_114 896 -#define IMG_CUSTOM_114_EDITOR 897 -#define IMG_CUSTOM_115 898 -#define IMG_CUSTOM_115_EDITOR 899 -#define IMG_CUSTOM_116 900 -#define IMG_CUSTOM_116_EDITOR 901 -#define IMG_CUSTOM_117 902 -#define IMG_CUSTOM_117_EDITOR 903 -#define IMG_CUSTOM_118 904 -#define IMG_CUSTOM_118_EDITOR 905 -#define IMG_CUSTOM_119 906 -#define IMG_CUSTOM_119_EDITOR 907 -#define IMG_CUSTOM_120 908 -#define IMG_CUSTOM_120_EDITOR 909 -#define IMG_CUSTOM_121 910 -#define IMG_CUSTOM_121_EDITOR 911 -#define IMG_CUSTOM_122 912 -#define IMG_CUSTOM_122_EDITOR 913 -#define IMG_CUSTOM_123 914 -#define IMG_CUSTOM_123_EDITOR 915 -#define IMG_CUSTOM_124 916 -#define IMG_CUSTOM_124_EDITOR 917 -#define IMG_CUSTOM_125 918 -#define IMG_CUSTOM_125_EDITOR 919 -#define IMG_CUSTOM_126 920 -#define IMG_CUSTOM_126_EDITOR 921 -#define IMG_CUSTOM_127 922 -#define IMG_CUSTOM_127_EDITOR 923 -#define IMG_CUSTOM_128 924 -#define IMG_CUSTOM_128_EDITOR 925 -#define IMG_TOON_1 926 -#define IMG_TOON_2 927 -#define IMG_TOON_3 928 -#define IMG_TOON_4 929 -#define IMG_TOON_5 930 -#define IMG_TOON_6 931 -#define IMG_TOON_7 932 -#define IMG_TOON_8 933 -#define IMG_TOON_9 934 -#define IMG_TOON_10 935 -#define IMG_TOON_11 936 -#define IMG_TOON_12 937 -#define IMG_TOON_13 938 -#define IMG_TOON_14 939 -#define IMG_TOON_15 940 -#define IMG_TOON_16 941 -#define IMG_TOON_17 942 -#define IMG_TOON_18 943 -#define IMG_TOON_19 944 -#define IMG_TOON_20 945 -#define IMG_MENU_CALIBRATE_RED 946 -#define IMG_MENU_CALIBRATE_BLUE 947 -#define IMG_MENU_CALIBRATE_YELLOW 948 -#define IMG_MENU_BUTTON 949 -#define IMG_MENU_BUTTON_ACTIVE 950 -#define IMG_MENU_BUTTON_LEFT 951 -#define IMG_MENU_BUTTON_RIGHT 952 -#define IMG_MENU_BUTTON_UP 953 -#define IMG_MENU_BUTTON_DOWN 954 -#define IMG_MENU_BUTTON_LEFT_ACTIVE 955 -#define IMG_MENU_BUTTON_RIGHT_ACTIVE 956 -#define IMG_MENU_BUTTON_UP_ACTIVE 957 -#define IMG_MENU_BUTTON_DOWN_ACTIVE 958 -#define IMG_MENU_SCROLLBAR 959 -#define IMG_MENU_SCROLLBAR_ACTIVE 960 -#define IMG_FONT_INITIAL_1 961 -#define IMG_FONT_INITIAL_2 962 -#define IMG_FONT_INITIAL_3 963 -#define IMG_FONT_INITIAL_4 964 -#define IMG_FONT_TITLE_1 965 -#define IMG_FONT_TITLE_1_LEVELS 966 -#define IMG_FONT_TITLE_2 967 -#define IMG_FONT_MENU_1 968 -#define IMG_FONT_MENU_2 969 -#define IMG_FONT_TEXT_1 970 -#define IMG_FONT_TEXT_1_LEVELS 971 -#define IMG_FONT_TEXT_1_PREVIEW 972 -#define IMG_FONT_TEXT_1_SCORES 973 -#define IMG_FONT_TEXT_1_ACTIVE_SCORES 974 -#define IMG_FONT_TEXT_2 975 -#define IMG_FONT_TEXT_2_LEVELS 976 -#define IMG_FONT_TEXT_2_PREVIEW 977 -#define IMG_FONT_TEXT_2_SCORES 978 -#define IMG_FONT_TEXT_2_ACTIVE_SCORES 979 -#define IMG_FONT_TEXT_3 980 -#define IMG_FONT_TEXT_3_LEVELS 981 -#define IMG_FONT_TEXT_3_PREVIEW 982 -#define IMG_FONT_TEXT_3_SCORES 983 -#define IMG_FONT_TEXT_3_ACTIVE_SCORES 984 -#define IMG_FONT_TEXT_4 985 -#define IMG_FONT_TEXT_4_LEVELS 986 -#define IMG_FONT_TEXT_4_SCORES 987 -#define IMG_FONT_TEXT_4_ACTIVE_SCORES 988 -#define IMG_FONT_INPUT_1 989 -#define IMG_FONT_INPUT_1_MAIN 990 -#define IMG_FONT_INPUT_1_ACTIVE 991 -#define IMG_FONT_INPUT_1_ACTIVE_MAIN 992 -#define IMG_FONT_INPUT_1_ACTIVE_SETUP 993 -#define IMG_FONT_INPUT_2 994 -#define IMG_FONT_INPUT_2_ACTIVE 995 -#define IMG_FONT_OPTION_OFF 996 -#define IMG_FONT_OPTION_ON 997 -#define IMG_FONT_VALUE_1 998 -#define IMG_FONT_VALUE_2 999 -#define IMG_FONT_VALUE_OLD 1000 -#define IMG_FONT_LEVEL_NUMBER 1001 -#define IMG_FONT_TAPE_RECORDER 1002 -#define IMG_FONT_GAME_INFO 1003 -#define IMG_GLOBAL_BORDER 1004 -#define IMG_GLOBAL_DOOR 1005 -#define IMG_EDITOR_ELEMENT_BORDER 1006 -#define IMG_EDITOR_ELEMENT_BORDER_INPUT 1007 -#define IMG_BACKGROUND 1008 -#define IMG_BACKGROUND_MAIN 1009 -#define IMG_BACKGROUND_LEVELS 1010 -#define IMG_BACKGROUND_SCORES 1011 -#define IMG_BACKGROUND_EDITOR 1012 -#define IMG_BACKGROUND_INFO 1013 -#define IMG_BACKGROUND_SETUP 1014 -#define IMG_BACKGROUND_DOOR 1015 +#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_BALLOON 217 +#define IMG_BALLOON_MOVING 218 +#define IMG_BALLOON_PUSHING 219 +#define IMG_BALLOON_SWITCH_LEFT 220 +#define IMG_BALLOON_SWITCH_RIGHT 221 +#define IMG_BALLOON_SWITCH_UP 222 +#define IMG_BALLOON_SWITCH_DOWN 223 +#define IMG_BALLOON_SWITCH_ANY 224 +#define IMG_SPRING 225 +#define IMG_EMC_STEELWALL_1 226 +#define IMG_EMC_STEELWALL_2 227 +#define IMG_EMC_STEELWALL_3 228 +#define IMG_EMC_STEELWALL_4 229 +#define IMG_EMC_WALL_1 230 +#define IMG_EMC_WALL_2 231 +#define IMG_EMC_WALL_3 232 +#define IMG_EMC_WALL_4 233 +#define IMG_EMC_WALL_5 234 +#define IMG_EMC_WALL_6 235 +#define IMG_EMC_WALL_7 236 +#define IMG_EMC_WALL_8 237 +#define IMG_INVISIBLE_STEELWALL 238 +#define IMG_INVISIBLE_STEELWALL_EDITOR 239 +#define IMG_INVISIBLE_STEELWALL_ACTIVE 240 +#define IMG_INVISIBLE_WALL 241 +#define IMG_INVISIBLE_WALL_EDITOR 242 +#define IMG_INVISIBLE_WALL_ACTIVE 243 +#define IMG_INVISIBLE_SAND 244 +#define IMG_INVISIBLE_SAND_EDITOR 245 +#define IMG_INVISIBLE_SAND_ACTIVE 246 +#define IMG_CONVEYOR_BELT_1_MIDDLE 247 +#define IMG_CONVEYOR_BELT_1_MIDDLE_ACTIVE 248 +#define IMG_CONVEYOR_BELT_1_LEFT 249 +#define IMG_CONVEYOR_BELT_1_LEFT_ACTIVE 250 +#define IMG_CONVEYOR_BELT_1_RIGHT 251 +#define IMG_CONVEYOR_BELT_1_RIGHT_ACTIVE 252 +#define IMG_CONVEYOR_BELT_1_SWITCH_LEFT 253 +#define IMG_CONVEYOR_BELT_1_SWITCH_MIDDLE 254 +#define IMG_CONVEYOR_BELT_1_SWITCH_RIGHT 255 +#define IMG_CONVEYOR_BELT_2_MIDDLE 256 +#define IMG_CONVEYOR_BELT_2_MIDDLE_ACTIVE 257 +#define IMG_CONVEYOR_BELT_2_LEFT 258 +#define IMG_CONVEYOR_BELT_2_LEFT_ACTIVE 259 +#define IMG_CONVEYOR_BELT_2_RIGHT 260 +#define IMG_CONVEYOR_BELT_2_RIGHT_ACTIVE 261 +#define IMG_CONVEYOR_BELT_2_SWITCH_LEFT 262 +#define IMG_CONVEYOR_BELT_2_SWITCH_MIDDLE 263 +#define IMG_CONVEYOR_BELT_2_SWITCH_RIGHT 264 +#define IMG_CONVEYOR_BELT_3_MIDDLE 265 +#define IMG_CONVEYOR_BELT_3_MIDDLE_ACTIVE 266 +#define IMG_CONVEYOR_BELT_3_LEFT 267 +#define IMG_CONVEYOR_BELT_3_LEFT_ACTIVE 268 +#define IMG_CONVEYOR_BELT_3_RIGHT 269 +#define IMG_CONVEYOR_BELT_3_RIGHT_ACTIVE 270 +#define IMG_CONVEYOR_BELT_3_SWITCH_LEFT 271 +#define IMG_CONVEYOR_BELT_3_SWITCH_MIDDLE 272 +#define IMG_CONVEYOR_BELT_3_SWITCH_RIGHT 273 +#define IMG_CONVEYOR_BELT_4_MIDDLE 274 +#define IMG_CONVEYOR_BELT_4_MIDDLE_ACTIVE 275 +#define IMG_CONVEYOR_BELT_4_LEFT 276 +#define IMG_CONVEYOR_BELT_4_LEFT_ACTIVE 277 +#define IMG_CONVEYOR_BELT_4_RIGHT 278 +#define IMG_CONVEYOR_BELT_4_RIGHT_ACTIVE 279 +#define IMG_CONVEYOR_BELT_4_SWITCH_LEFT 280 +#define IMG_CONVEYOR_BELT_4_SWITCH_MIDDLE 281 +#define IMG_CONVEYOR_BELT_4_SWITCH_RIGHT 282 +#define IMG_SWITCHGATE_SWITCH_UP 283 +#define IMG_SWITCHGATE_SWITCH_DOWN 284 +#define IMG_LIGHT_SWITCH 285 +#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_TOON_1 927 +#define IMG_TOON_2 928 +#define IMG_TOON_3 929 +#define IMG_TOON_4 930 +#define IMG_TOON_5 931 +#define IMG_TOON_6 932 +#define IMG_TOON_7 933 +#define IMG_TOON_8 934 +#define IMG_TOON_9 935 +#define IMG_TOON_10 936 +#define IMG_TOON_11 937 +#define IMG_TOON_12 938 +#define IMG_TOON_13 939 +#define IMG_TOON_14 940 +#define IMG_TOON_15 941 +#define IMG_TOON_16 942 +#define IMG_TOON_17 943 +#define IMG_TOON_18 944 +#define IMG_TOON_19 945 +#define IMG_TOON_20 946 +#define IMG_MENU_CALIBRATE_RED 947 +#define IMG_MENU_CALIBRATE_BLUE 948 +#define IMG_MENU_CALIBRATE_YELLOW 949 +#define IMG_MENU_BUTTON 950 +#define IMG_MENU_BUTTON_ACTIVE 951 +#define IMG_MENU_BUTTON_LEFT 952 +#define IMG_MENU_BUTTON_RIGHT 953 +#define IMG_MENU_BUTTON_UP 954 +#define IMG_MENU_BUTTON_DOWN 955 +#define IMG_MENU_BUTTON_LEFT_ACTIVE 956 +#define IMG_MENU_BUTTON_RIGHT_ACTIVE 957 +#define IMG_MENU_BUTTON_UP_ACTIVE 958 +#define IMG_MENU_BUTTON_DOWN_ACTIVE 959 +#define IMG_MENU_SCROLLBAR 960 +#define IMG_MENU_SCROLLBAR_ACTIVE 961 +#define IMG_FONT_INITIAL_1 962 +#define IMG_FONT_INITIAL_2 963 +#define IMG_FONT_INITIAL_3 964 +#define IMG_FONT_INITIAL_4 965 +#define IMG_FONT_TITLE_1 966 +#define IMG_FONT_TITLE_1_LEVELS 967 +#define IMG_FONT_TITLE_2 968 +#define IMG_FONT_MENU_1 969 +#define IMG_FONT_MENU_2 970 +#define IMG_FONT_TEXT_1 971 +#define IMG_FONT_TEXT_1_LEVELS 972 +#define IMG_FONT_TEXT_1_PREVIEW 973 +#define IMG_FONT_TEXT_1_SCORES 974 +#define IMG_FONT_TEXT_1_ACTIVE_SCORES 975 +#define IMG_FONT_TEXT_2 976 +#define IMG_FONT_TEXT_2_LEVELS 977 +#define IMG_FONT_TEXT_2_PREVIEW 978 +#define IMG_FONT_TEXT_2_SCORES 979 +#define IMG_FONT_TEXT_2_ACTIVE_SCORES 980 +#define IMG_FONT_TEXT_3 981 +#define IMG_FONT_TEXT_3_LEVELS 982 +#define IMG_FONT_TEXT_3_PREVIEW 983 +#define IMG_FONT_TEXT_3_SCORES 984 +#define IMG_FONT_TEXT_3_ACTIVE_SCORES 985 +#define IMG_FONT_TEXT_4 986 +#define IMG_FONT_TEXT_4_LEVELS 987 +#define IMG_FONT_TEXT_4_SCORES 988 +#define IMG_FONT_TEXT_4_ACTIVE_SCORES 989 +#define IMG_FONT_INPUT_1 990 +#define IMG_FONT_INPUT_1_MAIN 991 +#define IMG_FONT_INPUT_1_ACTIVE 992 +#define IMG_FONT_INPUT_1_ACTIVE_MAIN 993 +#define IMG_FONT_INPUT_1_ACTIVE_SETUP 994 +#define IMG_FONT_INPUT_2 995 +#define IMG_FONT_INPUT_2_ACTIVE 996 +#define IMG_FONT_OPTION_OFF 997 +#define IMG_FONT_OPTION_ON 998 +#define IMG_FONT_VALUE_1 999 +#define IMG_FONT_VALUE_2 1000 +#define IMG_FONT_VALUE_OLD 1001 +#define IMG_FONT_LEVEL_NUMBER 1002 +#define IMG_FONT_TAPE_RECORDER 1003 +#define IMG_FONT_GAME_INFO 1004 +#define IMG_GLOBAL_BORDER 1005 +#define IMG_GLOBAL_DOOR 1006 +#define IMG_EDITOR_ELEMENT_BORDER 1007 +#define IMG_EDITOR_ELEMENT_BORDER_INPUT 1008 +#define IMG_BACKGROUND 1009 +#define IMG_BACKGROUND_MAIN 1010 +#define IMG_BACKGROUND_LEVELS 1011 +#define IMG_BACKGROUND_SCORES 1012 +#define IMG_BACKGROUND_EDITOR 1013 +#define IMG_BACKGROUND_INFO 1014 +#define IMG_BACKGROUND_SETUP 1015 +#define IMG_BACKGROUND_DOOR 1016 -#define NUM_IMAGE_FILES 1016 +#define NUM_IMAGE_FILES 1017 #endif /* CONF_GFX_H */ diff --git a/src/conf_snd.h b/src/conf_snd.h index 94366024..bfb6db88 100644 --- a/src/conf_snd.h +++ b/src/conf_snd.h @@ -1,15 +1,3 @@ -/*********************************************************** -* Rocks'n'Diamonds -- McDuffin Strikes Back! * -*----------------------------------------------------------* -* (c) 1995-2002 Artsoft Entertainment * -* Holger Schemel * -* Detmolder Strasse 189 * -* 33604 Bielefeld * -* Germany * -* e-mail: info@artsoft.org * -*----------------------------------------------------------* -* conf_snd.h * -***********************************************************/ /* ----- this file was automatically generated -- do not edit by hand ----- */ diff --git a/src/conftime.h b/src/conftime.h index 6c63aef2..37e51f60 100644 --- a/src/conftime.h +++ b/src/conftime.h @@ -1 +1 @@ -#define COMPILE_DATE_STRING "[2003-08-07 01:24]" +#define COMPILE_DATE_STRING "[2003-08-08 19:58]" diff --git a/src/editor.c b/src/editor.c index 87184cd8..bd466026 100644 --- a/src/editor.c +++ b/src/editor.c @@ -75,6 +75,8 @@ #define ED_GADGET_DISTANCE 2 #define ED_GADGET_TEXT_DISTANCE (2 * ED_GADGET_DISTANCE) +#define ED_DRAWINGAREA_TEXT_DISTANCE (ED_GADGET_TEXT_DISTANCE + \ + MINI_TILEX / 2) /* values for the setting windows */ #define ED_SETTINGS_XSTART (3 * MINI_TILEX / 2) @@ -664,13 +666,13 @@ /* how many steps can be cancelled */ #define NUM_UNDO_STEPS (10 + 1) -/* values for elements with score */ +/* values for elements with score for certain actions */ #define MIN_SCORE 0 #define MAX_SCORE 255 -/* values for elements with gem count */ -#define MIN_GEM_COUNT 0 -#define MAX_GEM_COUNT 100 +/* values for elements with count for collecting */ +#define MIN_COLLECT_COUNT 0 +#define MAX_COLLECT_COUNT 100 /* values for random placement */ #define RANDOM_USE_PERCENTAGE 0 @@ -822,16 +824,16 @@ static struct MIN_SCORE, MAX_SCORE, GADGET_ID_CUSTOM_SCORE_DOWN, GADGET_ID_CUSTOM_SCORE_UP, GADGET_ID_CUSTOM_SCORE_TEXT, GADGET_ID_NONE, - &custom_element.score, - NULL, "collect score", NULL + &custom_element.collect_score, + NULL, "score", NULL }, { ED_SETTINGS_XPOS(13) + 10, ED_SETTINGS_YPOS(3), - MIN_GEM_COUNT, MAX_GEM_COUNT, + MIN_COLLECT_COUNT, MAX_COLLECT_COUNT, GADGET_ID_CUSTOM_GEMCOUNT_DOWN, GADGET_ID_CUSTOM_GEMCOUNT_UP, GADGET_ID_CUSTOM_GEMCOUNT_TEXT, GADGET_ID_CUSTOM_SCORE_UP, - &custom_element.gem_count, - NULL, "gems", NULL + &custom_element.collect_count, + NULL, "count", NULL }, { ED_SETTINGS_XPOS(1), ED_SETTINGS_YPOS(4), @@ -944,7 +946,8 @@ static struct ValueTextInfo options_access_layer[] = static struct ValueTextInfo options_walk_to_action[] = { { EP_DIGGABLE, "diggable" }, - { EP_COLLECTIBLE, "collectible" }, + { EP_COLLECTIBLE_ONLY, "collectible" }, + { EP_DROPPABLE, "collectible & droppable" }, { EP_PUSHABLE, "pushable" }, { -1, NULL } }; @@ -1034,6 +1037,7 @@ static struct ValueTextInfo options_change_player_action[] = { CE_TOUCHED_BY_PLAYER, "touched" }, { CE_PRESSED_BY_PLAYER, "pressed" }, { CE_PUSHED_BY_PLAYER, "pushed" }, + { CE_DROPPED_BY_PLAYER, "dropped" }, { -1, NULL } }; @@ -1047,14 +1051,15 @@ static struct ValueTextInfo options_change_collide_action[] = static struct ValueTextInfo options_change_other_action[] = { - { CE_OTHER_IS_TOUCHING, "touching" }, - { CE_OTHER_IS_CHANGING, "change of" }, - { CE_OTHER_IS_EXPLODING, "explosion of" }, - { CE_OTHER_GETS_TOUCHED, "player touches" }, - { CE_OTHER_GETS_PRESSED, "player presses" }, - { CE_OTHER_GETS_PUSHED, "player pushes" }, - { CE_OTHER_GETS_COLLECTED, "player collects" }, - { -1, NULL } + { CE_OTHER_IS_TOUCHING, "touching" }, + { CE_OTHER_IS_CHANGING, "change of" }, + { CE_OTHER_IS_EXPLODING, "explosion of" }, + { CE_OTHER_GETS_TOUCHED, "player touches" }, + { CE_OTHER_GETS_PRESSED, "player presses" }, + { CE_OTHER_GETS_PUSHED, "player pushes" }, + { CE_OTHER_GETS_COLLECTED, "player collects" }, + { CE_OTHER_GETS_DROPPED, "player drops" }, + { -1, NULL } }; static struct ValueTextInfo options_change_power[] = @@ -1156,7 +1161,7 @@ static struct -1, options_consistency, &custom_element.consistency, - NULL, "explodes to:", "consistency/destructibility" + NULL, NULL, "consistency/destructibility" }, /* ---------- element settings: advanced (custom elements) --------------- */ @@ -1363,7 +1368,7 @@ static struct { ED_SETTINGS_XPOS(0) + 340, ED_COUNTER_YPOS(6) - MINI_TILEY, GADGET_ID_GRAVITY, GADGET_ID_DOUBLE_SPEED, - &level.initial_gravity, + &level.gravity, " ", "gravity", "set level gravity" }, { @@ -1536,7 +1541,7 @@ static struct int area_xsize, area_ysize; int gadget_id; int gadget_id_align; - char *text_left, *text_right; + char *text_left, *text_right, *text_below; } drawingarea_info[ED_NUM_DRAWING_AREAS] = { /* ---------- level playfield content ------------------------------------ */ @@ -1545,7 +1550,7 @@ static struct 0, 0, MAX_ED_FIELDX, MAX_ED_FIELDY, GADGET_ID_DRAWING_LEVEL, GADGET_ID_NONE, - NULL, NULL + NULL, NULL, NULL }, /* ---------- yam yam content -------------------------------------------- */ @@ -1554,49 +1559,49 @@ static struct ED_AREA_YAMYAM_CONTENT_XPOS(0), ED_AREA_YAMYAM_CONTENT_YPOS(0), 3, 3, GADGET_ID_ELEMENT_CONTENT_0, GADGET_ID_NONE, - NULL, NULL + NULL, NULL, "1" }, { ED_AREA_YAMYAM_CONTENT_XPOS(1), ED_AREA_YAMYAM_CONTENT_YPOS(1), 3, 3, GADGET_ID_ELEMENT_CONTENT_1, GADGET_ID_NONE, - NULL, NULL + NULL, NULL, "2" }, { ED_AREA_YAMYAM_CONTENT_XPOS(2), ED_AREA_YAMYAM_CONTENT_YPOS(2), 3, 3, GADGET_ID_ELEMENT_CONTENT_2, GADGET_ID_NONE, - NULL, NULL + NULL, NULL, "3" }, { ED_AREA_YAMYAM_CONTENT_XPOS(3), ED_AREA_YAMYAM_CONTENT_YPOS(3), 3, 3, GADGET_ID_ELEMENT_CONTENT_3, GADGET_ID_NONE, - NULL, NULL + NULL, NULL, "4" }, { ED_AREA_YAMYAM_CONTENT_XPOS(4), ED_AREA_YAMYAM_CONTENT_YPOS(4), 3, 3, GADGET_ID_ELEMENT_CONTENT_4, GADGET_ID_NONE, - NULL, NULL + NULL, NULL, "5" }, { ED_AREA_YAMYAM_CONTENT_XPOS(5), ED_AREA_YAMYAM_CONTENT_YPOS(5), 3, 3, GADGET_ID_ELEMENT_CONTENT_5, GADGET_ID_NONE, - NULL, NULL + NULL, NULL, "6" }, { ED_AREA_YAMYAM_CONTENT_XPOS(6), ED_AREA_YAMYAM_CONTENT_YPOS(6), 3, 3, GADGET_ID_ELEMENT_CONTENT_6, GADGET_ID_NONE, - NULL, NULL + NULL, NULL, "7" }, { ED_AREA_YAMYAM_CONTENT_XPOS(7), ED_AREA_YAMYAM_CONTENT_YPOS(7), 3, 3, GADGET_ID_ELEMENT_CONTENT_7, GADGET_ID_NONE, - NULL, NULL + NULL, NULL, "8" }, /* ---------- amoeba content --------------------------------------------- */ @@ -1605,7 +1610,7 @@ static struct ED_AREA_ELEM_CONTENT_XPOS, ED_AREA_ELEM_CONTENT_YPOS, 1, 1, GADGET_ID_AMOEBA_CONTENT, GADGET_ID_NONE, - NULL, NULL + NULL, "content of amoeba", NULL }, /* ---------- custom graphic --------------------------------------------- */ @@ -1614,7 +1619,7 @@ static struct ED_AREA_ELEM_CONTENT3_XPOS, ED_AREA_ELEM_CONTENT3_YPOS, 1, 1, GADGET_ID_CUSTOM_GRAPHIC, GADGET_ID_CUSTOM_USE_GRAPHIC, - NULL, NULL + NULL, NULL, NULL }, /* ---------- custom content (when exploding) ---------------------------- */ @@ -1623,7 +1628,7 @@ static struct ED_AREA_ELEM_CONTENT4_XPOS, ED_AREA_ELEM_CONTENT4_YPOS, 3, 3, GADGET_ID_CUSTOM_CONTENT, GADGET_ID_NONE, /* align three rows */ - NULL, NULL + "content:", NULL, NULL }, /* ---------- custom change target --------------------------------------- */ @@ -1632,7 +1637,7 @@ static struct ED_AREA_ELEM_CONTENT2_XPOS, ED_AREA_ELEM_CONTENT2_YPOS, 1, 1, GADGET_ID_CUSTOM_CHANGE_TARGET, GADGET_ID_CUSTOM_CAN_CHANGE, - NULL, "after/when:" + NULL, "after/when:", NULL }, /* ---------- custom change content (extended change target) ------------- */ @@ -1641,7 +1646,7 @@ static struct ED_AREA_ELEM_CONTENT6_XPOS, ED_AREA_ELEM_CONTENT6_YPOS, 3, 3, GADGET_ID_CUSTOM_CHANGE_CONTENT, GADGET_ID_NONE, /* align three rows */ - NULL, NULL + NULL, NULL, NULL }, /* ---------- custom change trigger (element causing change) ------------- */ @@ -1650,7 +1655,7 @@ static struct ED_AREA_ELEM_CONTENT5_XPOS, ED_AREA_ELEM_CONTENT5_YPOS, 1, 1, GADGET_ID_CUSTOM_CHANGE_TRIGGER, GADGET_ID_CHANGE_OTHER_ACTION, - NULL, NULL + NULL, NULL, NULL }, /* ---------- random background (for random painting) -------------------- */ @@ -1659,7 +1664,7 @@ static struct ED_AREA_RANDOM_BACKGROUND_XPOS, ED_AREA_RANDOM_BACKGROUND_YPOS, 1, 1, GADGET_ID_RANDOM_BACKGROUND, GADGET_ID_RANDOM_RESTRICTED, - NULL, NULL + NULL, NULL, NULL }, }; @@ -2568,17 +2573,25 @@ static int getMaxInfoTextLength() return (SXSIZE / getFontWidth(FONT_TEXT_2)); } -static int getFullTextWidth(char *text) +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 (strlen(text) * getFontWidth(FONT_TEXT_1) + ED_GADGET_TEXT_DISTANCE); + return (getTextWidth(text, FONT_TEXT_1) + ED_DRAWINGAREA_TEXT_DISTANCE); } static int getRightGadgetBorder(struct GadgetInfo *gi, char *text) { - return (gi->x + gi->width + getFullTextWidth(text)); + return (gi->x + gi->width + getTextWidthForGadget(text)); } static char *getElementInfoText(int element) @@ -2605,6 +2618,72 @@ static char *getElementInfoText(int element) return info_text; } +static void DrawElementBorder(int dest_x, int dest_y, int width, int height, + boolean input) +{ + int border_graphic = + (input ? IMG_EDITOR_ELEMENT_BORDER_INPUT : IMG_EDITOR_ELEMENT_BORDER); + Bitmap *src_bitmap; + int src_x, src_y; + int num_mini_tilex = width / MINI_TILEX + 1; + int num_mini_tiley = width / MINI_TILEY + 1; + int x, y; + + getMiniGraphicSource(border_graphic, &src_bitmap, &src_x, &src_y); + + for (y=0; y < num_mini_tiley; y++) + for (x=0; x < num_mini_tilex; x++) + BlitBitmap(src_bitmap, drawto, src_x, src_y, MINI_TILEX, MINI_TILEY, + dest_x - MINI_TILEX / 2 + x * MINI_TILEX, + dest_y - MINI_TILEY / 2 + y * MINI_TILEY); + + ClearRectangle(drawto, dest_x - 1, dest_y - 1, width + 2, height + 2); +} + +static void DrawDrawingArea(int id) +{ + struct GadgetInfo *gi = level_editor_gadget[drawingarea_info[id].gadget_id]; + int x, y; + + if (id == ED_DRAWING_ID_RANDOM_BACKGROUND) + DrawMiniGraphicExt(drawto, gi->x, gi->y, + el2edimg(random_placement_background_element)); + else if (id == ED_DRAWING_ID_AMOEBA_CONTENT) + DrawMiniGraphicExt(drawto, gi->x, gi->y, el2edimg(level.amoeba_content)); + else if (id == ED_DRAWING_ID_CUSTOM_GRAPHIC) + DrawMiniGraphicExt(drawto, gi->x, gi->y, + el2edimg(custom_element.gfx_element)); + else if (id == ED_DRAWING_ID_CUSTOM_CONTENT) + for (y=0; y<3; y++) + for (x=0; x<3; x++) + DrawMiniGraphicExt(drawto, + gi->x + x * MINI_TILEX, gi->y + y * MINI_TILEY, + el2edimg(custom_element.content[x][y])); + else if (id == ED_DRAWING_ID_CUSTOM_CHANGE_TARGET) + DrawMiniGraphicExt(drawto, gi->x, gi->y, + el2edimg(custom_element.change.target_element)); + else if (id == ED_DRAWING_ID_CUSTOM_CHANGE_CONTENT) + for (y=0; y < 3; y++) + for (x=0; x < 3; x++) + DrawMiniGraphicExt(drawto, + gi->x + x * MINI_TILEX, gi->y + y * MINI_TILEY, + el2edimg(custom_element.change.content[x][y])); + else if (id == ED_DRAWING_ID_CUSTOM_CHANGE_TRIGGER) + DrawMiniGraphicExt(drawto, gi->x, gi->y, + el2edimg(custom_element.change.trigger_element)); + else if (id >= ED_DRAWING_ID_ELEMENT_CONTENT_0 && + id <= ED_DRAWING_ID_ELEMENT_CONTENT_7) + { + int nr = id - ED_DRAWING_ID_ELEMENT_CONTENT_0; + + for (y=0; y < 3; y++) + for (x=0; x < 3; x++) + DrawMiniGraphicExt(drawto, + gi->x + x * MINI_TILEX, gi->y + y * MINI_TILEY, + el2edimg(level.yamyam_content[nr][x][y])); + } +} + static void ScrollMiniLevel(int from_x, int from_y, int scroll) { int x,y; @@ -2864,8 +2943,7 @@ static void CreateCounterButtons() /* determine horizontal offset for leading text */ if (counterbutton_info[i].text_left != NULL) - x += (getFontWidth(FONT_TEXT_1) * strlen(counterbutton_info[i].text_left) - + ED_GADGET_TEXT_DISTANCE); + x += getTextWidthForGadget(counterbutton_info[i].text_left); for (j=0; j<2; j++) { @@ -3020,12 +3098,11 @@ static void CreateDrawingAreas() /* determine horizontal position to the right of specified gadget */ if (drawingarea_info[i].gadget_id_align != GADGET_ID_NONE) x = (right_gadget_border[drawingarea_info[i].gadget_id_align] + - ED_GADGET_TEXT_DISTANCE + MINI_TILEX / 2); + ED_DRAWINGAREA_TEXT_DISTANCE); /* determine horizontal offset for leading text */ if (drawingarea_info[i].text_left != NULL) - x += (getFontWidth(FONT_TEXT_1) * strlen(drawingarea_info[i].text_left) + - ED_GADGET_TEXT_DISTANCE + MINI_TILEX / 2); + x += getTextWidthForDrawingArea(drawingarea_info[i].text_left); gi = CreateGadget(GDI_CUSTOM_ID, id, GDI_CUSTOM_TYPE_ID, i, @@ -3139,8 +3216,7 @@ static void CreateSelectboxGadgets() /* determine horizontal offset for leading text */ if (selectbox_info[i].text_left != NULL) - x += (getFontWidth(FONT_TEXT_1) * strlen(selectbox_info[i].text_left) + - ED_GADGET_TEXT_DISTANCE); + x += getTextWidthForGadget(selectbox_info[i].text_left); sprintf(infotext, "Select %s", selectbox_info[i].infotext); infotext[max_infotext_len] = '\0'; @@ -3350,8 +3426,7 @@ static void CreateCheckbuttonGadgets() /* determine horizontal offset for leading text */ if (checkbutton_info[i].text_left != NULL) - x += (getFontWidth(FONT_TEXT_1) * strlen(checkbutton_info[i].text_left) + - ED_GADGET_TEXT_DISTANCE); + x += getTextWidthForGadget(checkbutton_info[i].text_left); gi = CreateGadget(GDI_CUSTOM_ID, id, GDI_CUSTOM_TYPE_ID, i, @@ -3412,8 +3487,7 @@ static void CreateRadiobuttonGadgets() /* determine horizontal offset for leading text */ if (radiobutton_info[i].text_left != NULL) - x += (getFontWidth(FONT_TEXT_1) * strlen(radiobutton_info[i].text_left) + - ED_GADGET_TEXT_DISTANCE); + x += getTextWidthForGadget(radiobutton_info[i].text_left); gi = CreateGadget(GDI_CUSTOM_ID, id, GDI_CUSTOM_TYPE_ID, i, @@ -3489,7 +3563,7 @@ static void MapCounterButtons(int id) int xoffset_right = getCounterGadgetWidth(); int yoffset_right = ED_BORDER_SIZE; #else - int xoffset_left = getFullTextWidth(counterbutton_info[id].text_left); + int xoffset_left = getTextWidthForGadget(counterbutton_info[id].text_left); int xoffset_right = ED_GADGET_TEXT_DISTANCE; int yoffset_above = MINI_TILEX + ED_GADGET_DISTANCE; int yoffset = ED_BORDER_SIZE; @@ -3542,11 +3616,40 @@ static void MapControlButtons() static void MapDrawingArea(int id) { - MapGadget(level_editor_gadget[drawingarea_info[id].gadget_id]); + struct GadgetInfo *gi = level_editor_gadget[drawingarea_info[id].gadget_id]; + int area_xsize = gi->drawing.area_xsize; + int area_ysize = gi->drawing.area_ysize; + int xoffset_left= getTextWidthForDrawingArea(drawingarea_info[id].text_left); + int xoffset_below= getTextWidth(drawingarea_info[id].text_below,FONT_TEXT_1); + int x_left = gi->x - xoffset_left; + int x_right = gi->x + gi->width + ED_DRAWINGAREA_TEXT_DISTANCE; + int x_below = gi->x + (gi->width - xoffset_below) / 2; + int y_side = gi->y + (gi->height - getFontHeight(FONT_TEXT_1)) / 2; + int y_below = gi->y + gi->height + ED_DRAWINGAREA_TEXT_DISTANCE; + + if (drawingarea_info[id].text_left) + DrawText(x_left, y_side, drawingarea_info[id].text_left, FONT_TEXT_1); + + if (drawingarea_info[id].text_right) + DrawText(x_right, y_side, drawingarea_info[id].text_right, FONT_TEXT_1); + + if (drawingarea_info[id].text_below) + DrawText(x_below, y_below, drawingarea_info[id].text_below, FONT_TEXT_1); + + if (id != ED_DRAWING_ID_DRAWING_LEVEL) + { + DrawElementBorder(gi->x, gi->y, + area_xsize * MINI_TILEX, area_ysize * MINI_TILEY, TRUE); + + DrawDrawingArea(id); + } + + MapGadget(gi); } static void MapTextInputGadget(int id) { + struct GadgetInfo *gi = level_editor_gadget[textinput_info[id].gadget_id]; char infotext[MAX_OUTPUT_LINESIZE + 1]; int max_infotext_len = getMaxInfoTextLength(); int xoffset_above = 0; @@ -3561,30 +3664,20 @@ static void MapTextInputGadget(int id) DrawTextF(x, y, FONT_TEXT_1, infotext); } - ModifyGadget(level_editor_gadget[textinput_info[id].gadget_id], - GDI_TEXT_VALUE, textinput_info[id].value, GDI_END); + ModifyGadget(gi, GDI_TEXT_VALUE, textinput_info[id].value, GDI_END); - MapGadget(level_editor_gadget[textinput_info[id].gadget_id]); + MapGadget(gi); } static void MapSelectboxGadget(int id) { struct GadgetInfo *gi = level_editor_gadget[selectbox_info[id].gadget_id]; -#if 0 - int xoffset_left = 0; - int yoffset_left = ED_BORDER_SIZE; - int xoffset_right = ED_GADGET_TEXT_DISTANCE; - int yoffset_right = ED_BORDER_SIZE; - int x = selectbox_info[id].x + xoffset_left; - int y = selectbox_info[id].y + yoffset_left; -#else - int xoffset_left = getFullTextWidth(selectbox_info[id].text_left); + int xoffset_left = getTextWidthForGadget(selectbox_info[id].text_left); int xoffset_right = ED_GADGET_TEXT_DISTANCE; int yoffset = ED_BORDER_SIZE; int x_left = gi->x - xoffset_left; int x_right = gi->x + gi->width + xoffset_right; int y = gi->y + yoffset; -#endif if (selectbox_info[id].text_left) DrawText(x_left, y, selectbox_info[id].text_left, FONT_TEXT_1); @@ -3594,12 +3687,14 @@ static void MapSelectboxGadget(int id) ModifyEditorSelectbox(id, *selectbox_info[id].value); - MapGadget(level_editor_gadget[selectbox_info[id].gadget_id]); + MapGadget(gi); } static void MapTextbuttonGadget(int id) { - MapGadget(level_editor_gadget[textbutton_info[id].gadget_id]); + struct GadgetInfo *gi = level_editor_gadget[textbutton_info[id].gadget_id]; + + MapGadget(gi); } static void MapRadiobuttonGadget(int id) @@ -3611,7 +3706,7 @@ static void MapRadiobuttonGadget(int id) int x = radiobutton_info[id].x + xoffset_right; int y = radiobutton_info[id].y + yoffset_right; #else - int xoffset_left = getFullTextWidth(checkbutton_info[id].text_left); + int xoffset_left = getTextWidthForGadget(checkbutton_info[id].text_left); int xoffset_right = ED_GADGET_TEXT_DISTANCE; int yoffset = ED_BORDER_SIZE; int x_left = gi->x - xoffset_left; @@ -3627,10 +3722,9 @@ static void MapRadiobuttonGadget(int id) if (radiobutton_info[id].text_right) DrawText(x_right, y, radiobutton_info[id].text_right, FONT_TEXT_1); - ModifyGadget(level_editor_gadget[radiobutton_info[id].gadget_id], - GDI_CHECKED, checked, GDI_END); + ModifyGadget(gi, GDI_CHECKED, checked, GDI_END); - MapGadget(level_editor_gadget[radiobutton_info[id].gadget_id]); + MapGadget(gi); } static void MapCheckbuttonGadget(int id) @@ -3642,7 +3736,7 @@ static void MapCheckbuttonGadget(int id) int x = checkbutton_info[id].x + xoffset_right; int y = checkbutton_info[id].y + yoffset_right; #else - int xoffset_left = getFullTextWidth(checkbutton_info[id].text_left); + int xoffset_left = getTextWidthForGadget(checkbutton_info[id].text_left); int xoffset_right = ED_GADGET_TEXT_DISTANCE; int yoffset = ED_BORDER_SIZE; int x_left = gi->x - xoffset_left; @@ -3651,8 +3745,7 @@ static void MapCheckbuttonGadget(int id) #endif /* special case needed for "sticky" gadget */ - ModifyGadget(level_editor_gadget[checkbutton_info[id].gadget_id], - GDI_CHECKED, *checkbutton_info[id].value, + ModifyGadget(gi, GDI_CHECKED, *checkbutton_info[id].value, GDI_Y, SY + checkbutton_info[id].y, GDI_END); y = gi->y + yoffset; @@ -3662,7 +3755,7 @@ static void MapCheckbuttonGadget(int id) if (checkbutton_info[id].text_right) DrawText(x_right, y, checkbutton_info[id].text_right, FONT_TEXT_1); - MapGadget(level_editor_gadget[checkbutton_info[id].gadget_id]); + MapGadget(gi); } static void MapMainDrawingArea() @@ -3810,12 +3903,14 @@ static void CopyCustomElementPropertiesToEditor(int element) /* set walk-to-object action selectbox help value */ custom_element.walk_to_action = (IS_DIGGABLE(element) ? EP_DIGGABLE : - IS_COLLECTIBLE(element) ? EP_COLLECTIBLE : + IS_COLLECTIBLE_ONLY(element) ? EP_COLLECTIBLE_ONLY : + IS_DROPPABLE(element) ? EP_DROPPABLE : IS_PUSHABLE(element) ? EP_PUSHABLE : custom_element.walk_to_action); custom_element_properties[EP_WALK_TO_OBJECT] = (IS_DIGGABLE(element) || - IS_COLLECTIBLE(element) || + IS_COLLECTIBLE_ONLY(element) || + IS_DROPPABLE(element) || IS_PUSHABLE(element)); /* set smash targets selectbox help value */ @@ -3861,7 +3956,8 @@ static void CopyCustomElementPropertiesToEditor(int element) /* set change by player selectbox help value */ custom_element.change_player_action = - (HAS_CHANGE_EVENT(element, CE_PUSHED_BY_PLAYER) ? CE_PUSHED_BY_PLAYER : + (HAS_CHANGE_EVENT(element, CE_DROPPED_BY_PLAYER) ? CE_DROPPED_BY_PLAYER : + HAS_CHANGE_EVENT(element, CE_PUSHED_BY_PLAYER) ? CE_PUSHED_BY_PLAYER : HAS_CHANGE_EVENT(element, CE_PRESSED_BY_PLAYER) ? CE_PRESSED_BY_PLAYER : HAS_CHANGE_EVENT(element, CE_TOUCHED_BY_PLAYER) ? CE_TOUCHED_BY_PLAYER : custom_element.change_player_action); @@ -3875,7 +3971,8 @@ static void CopyCustomElementPropertiesToEditor(int element) /* set change by other element action selectbox help value */ custom_element.change_other_action = - (HAS_CHANGE_EVENT(element, CE_OTHER_GETS_COLLECTED) ? CE_OTHER_GETS_COLLECTED : + (HAS_CHANGE_EVENT(element, CE_OTHER_GETS_DROPPED) ? CE_OTHER_GETS_DROPPED : + HAS_CHANGE_EVENT(element, CE_OTHER_GETS_COLLECTED) ? CE_OTHER_GETS_COLLECTED : HAS_CHANGE_EVENT(element, CE_OTHER_GETS_PUSHED) ? CE_OTHER_GETS_PUSHED : HAS_CHANGE_EVENT(element, CE_OTHER_GETS_PRESSED) ? CE_OTHER_GETS_PRESSED : HAS_CHANGE_EVENT(element, CE_OTHER_GETS_TOUCHED) ? CE_OTHER_GETS_TOUCHED : @@ -3890,6 +3987,9 @@ static void CopyCustomElementPropertiesToGame(int element) int i; int access_type_and_layer; + /* mark that this custom element has been modified */ + custom_element.modified_settings = TRUE; + if (level.use_custom_template) { if (Request("Copy and modify level tem- plate ?", REQ_ASK)) @@ -3900,9 +4000,9 @@ static void CopyCustomElementPropertiesToGame(int element) } else { - LoadLevelTemplate(-1); + LoadLevelTemplate(-1); /* this resets all element modifications ... */ - DrawEditModeWindow(); + DrawEditModeWindow(); /* ... and copies them to 'custom_element' */ } } @@ -3925,7 +4025,8 @@ static void CopyCustomElementPropertiesToGame(int element) /* set walk-to-object property from checkbox and selectbox */ custom_element_properties[EP_DIGGABLE] = FALSE; - custom_element_properties[EP_COLLECTIBLE] = FALSE; + custom_element_properties[EP_COLLECTIBLE_ONLY] = FALSE; + custom_element_properties[EP_DROPPABLE] = FALSE; custom_element_properties[EP_PUSHABLE] = FALSE; custom_element_properties[custom_element.walk_to_action] = custom_element_properties[EP_WALK_TO_OBJECT]; @@ -3970,6 +4071,7 @@ static void CopyCustomElementPropertiesToGame(int element) custom_element_change_events[CE_TOUCHED_BY_PLAYER] = FALSE; custom_element_change_events[CE_PRESSED_BY_PLAYER] = FALSE; custom_element_change_events[CE_PUSHED_BY_PLAYER] = FALSE; + custom_element_change_events[CE_DROPPED_BY_PLAYER] = FALSE; custom_element_change_events[custom_element.change_player_action] = custom_element_change_events[CE_BY_PLAYER]; @@ -3988,6 +4090,7 @@ static void CopyCustomElementPropertiesToGame(int element) 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_COLLECTED] = FALSE; + custom_element_change_events[CE_OTHER_GETS_DROPPED] = FALSE; custom_element_change_events[custom_element.change_other_action] = custom_element_change_events[CE_BY_OTHER]; @@ -4272,44 +4375,6 @@ static void DrawDrawingWindow() MapMainDrawingArea(); } -static void DrawElementBorder(int dest_x, int dest_y, int width, int height, - boolean input) -{ - int border_graphic = - (input ? IMG_EDITOR_ELEMENT_BORDER_INPUT : IMG_EDITOR_ELEMENT_BORDER); - Bitmap *src_bitmap; - int src_x, src_y; - int num_mini_tilex = width / MINI_TILEX + 1; - int num_mini_tiley = width / MINI_TILEY + 1; - int x, y; - - getMiniGraphicSource(border_graphic, &src_bitmap, &src_x, &src_y); - - for (y=0; y < num_mini_tiley; y++) - for (x=0; x < num_mini_tilex; x++) - BlitBitmap(src_bitmap, drawto, src_x, src_y, MINI_TILEX, MINI_TILEY, - dest_x - MINI_TILEX / 2 + x * MINI_TILEX, - dest_y - MINI_TILEY / 2 + y * MINI_TILEY); - - ClearRectangle(drawto, dest_x - 1, dest_y - 1, width + 2, height + 2); -} - -static void DrawRandomPlacementBackgroundArea() -{ - struct GadgetInfo *gi = level_editor_gadget[GADGET_ID_RANDOM_BACKGROUND]; -#if 0 - int area_x = ED_AREA_RANDOM_BACKGROUND_XPOS / MINI_TILEX; - int area_y = ED_AREA_RANDOM_BACKGROUND_YPOS / MINI_TILEY; - int area_sx = SX + ED_AREA_RANDOM_BACKGROUND_XPOS; - int area_sy = SY + ED_AREA_RANDOM_BACKGROUND_YPOS; -#endif - - DrawElementBorder(gi->x, gi->y, MINI_TILEX, MINI_TILEY, TRUE); - DrawMiniElement(gi->x, gi->y, random_placement_background_element); - - MapDrawingArea(ED_DRAWING_ID_RANDOM_BACKGROUND); -} - static void DrawLevelInfoWindow() { int i; @@ -4342,227 +4407,71 @@ static void DrawLevelInfoWindow() MapTextInputGadget(i); /* draw drawing area */ - DrawRandomPlacementBackgroundArea(); -} - -static void DrawAmoebaContentArea() -{ - int area_x = ED_AREA_ELEM_CONTENT_XPOS / MINI_TILEX; - int area_y = ED_AREA_ELEM_CONTENT_YPOS / MINI_TILEY; - int area_sx = SX + ED_AREA_ELEM_CONTENT_XPOS; - int area_sy = SY + ED_AREA_ELEM_CONTENT_YPOS; - - DrawElementBorder(area_sx, area_sy, MINI_TILEX, MINI_TILEY, TRUE); - DrawMiniElement(area_x, area_y, level.amoeba_content); - - DrawText(area_sx + TILEX, area_sy + 1, "Content of amoeba", FONT_TEXT_1); - - MapDrawingArea(ED_DRAWING_ID_AMOEBA_CONTENT); -} - -static void DrawCustomGraphicElementArea() -{ - struct GadgetInfo *gi = level_editor_gadget[GADGET_ID_CUSTOM_GRAPHIC]; -#if 0 - int xpos = ED_AREA_ELEM_CONTENT3_XPOS; - int ypos = ED_AREA_ELEM_CONTENT3_YPOS; - int area_sx = SX + xpos; - int area_sy = SY + ypos; -#endif - - if (!IS_CUSTOM_ELEMENT(properties_element)) - { - /* this should never happen */ - Error(ERR_WARN, "element %d is no custom element", properties_element); - - return; - } - - DrawElementBorder(gi->x, gi->y, MINI_TILEX, MINI_TILEY, TRUE); - DrawMiniGraphicExt(drawto, gi->x, gi->y, - el2edimg(custom_element.gfx_element)); - - MapDrawingArea(ED_DRAWING_ID_CUSTOM_GRAPHIC); + MapDrawingArea(ED_DRAWING_ID_RANDOM_BACKGROUND); } static void DrawCustomContentArea() { - struct GadgetInfo *gi = level_editor_gadget[GADGET_ID_CUSTOM_CONTENT]; -#if 0 - int area_sx = SX + ED_AREA_ELEM_CONTENT4_XPOS; - int area_sy = SY + ED_AREA_ELEM_CONTENT4_YPOS; -#endif + int id = ED_DRAWING_ID_CUSTOM_CONTENT; + struct GadgetInfo *gi = level_editor_gadget[drawingarea_info[id].gadget_id]; int x1 = right_gadget_border[GADGET_ID_CUSTOM_DEADLINESS]; int x2 = right_gadget_border[GADGET_ID_CUSTOM_CONSISTENCY]; int x3 = right_gadget_border[GADGET_ID_CUSTOM_EXPLODE_IMPACT]; - int xoffset = ED_GADGET_TEXT_DISTANCE + MINI_TILEX / 2; - int x, y; - - if (!IS_CUSTOM_ELEMENT(properties_element)) - { - /* this should never happen */ - Error(ERR_WARN, "element %d is no custom element", properties_element); + int xoffset = ED_DRAWINGAREA_TEXT_DISTANCE; - return; - } + /* add distance for potential left text (without drawing area border) */ + x2 += getTextWidthForGadget(drawingarea_info[id].text_left); ModifyGadget(gi, GDI_X, MAX(x1, MAX(x2, x3)) + xoffset, GDI_END); - DrawElementBorder(gi->x, gi->y, 3 * MINI_TILEX, 3 * MINI_TILEY, TRUE); - - for (y=0; y<3; y++) - for (x=0; x<3; x++) - DrawMiniGraphicExt(drawto, gi->x + x * MINI_TILEX,gi->y + y * MINI_TILEY, - el2edimg(custom_element.content[x][y])); - MapDrawingArea(ED_DRAWING_ID_CUSTOM_CONTENT); } -static void DrawCustomChangeTargetArea() -{ - int id = ED_DRAWING_ID_CUSTOM_CHANGE_TARGET; - int gadget_id = drawingarea_info[id].gadget_id; - struct GadgetInfo *gi = level_editor_gadget[gadget_id]; -#if 0 - int xpos = ED_AREA_ELEM_CONTENT2_XPOS; - int ypos = ED_AREA_ELEM_CONTENT2_YPOS; - int area_sx = SX + xpos; - int area_sy = SY + ypos; -#endif - int xoffset_left = 0; - int yoffset_left = ED_BORDER_AREA_YSIZE; - int xoffset_right = ED_GADGET_TEXT_DISTANCE + MINI_TILEX / 2; - int yoffset_right = ED_BORDER_AREA_YSIZE; - int x = drawingarea_info[id].x + xoffset_left; - int y = drawingarea_info[id].y + yoffset_left; - - if (!IS_CUSTOM_ELEMENT(properties_element)) - { - /* this should never happen */ - Error(ERR_WARN, "element %d is no custom element", properties_element); - - return; - } - - DrawElementBorder(gi->x, gi->y, MINI_TILEX, MINI_TILEY, TRUE); - DrawMiniGraphicExt(drawto, gi->x, gi->y, - el2edimg(custom_element.change.target_element)); - - MapDrawingArea(ED_DRAWING_ID_CUSTOM_CHANGE_TARGET); - - if (drawingarea_info[id].text_left) - DrawTextF(x, y, FONT_TEXT_1, drawingarea_info[id].text_left); - - if (drawingarea_info[id].text_right) - { - x = gi->x + gi->width + xoffset_right; - y = SY + drawingarea_info[id].y + yoffset_right; - - DrawText(x, y, drawingarea_info[id].text_right, FONT_TEXT_1); - } -} - static void DrawCustomChangeContentArea() { - struct GadgetInfo *gi = level_editor_gadget[GADGET_ID_CUSTOM_CHANGE_CONTENT]; -#if 0 - int area_sx = SX + ED_AREA_ELEM_CONTENT6_XPOS; - int area_sy = SY + ED_AREA_ELEM_CONTENT6_YPOS; -#endif + int id = ED_DRAWING_ID_CUSTOM_CHANGE_CONTENT; + struct GadgetInfo *gi = level_editor_gadget[drawingarea_info[id].gadget_id]; int x1 = right_gadget_border[GADGET_ID_CHANGE_USE_CONTENT]; int x2 = right_gadget_border[GADGET_ID_CHANGE_POWER]; int x3 = right_gadget_border[GADGET_ID_CHANGE_ONLY_COMPLETE]; - int xoffset = ED_GADGET_TEXT_DISTANCE + MINI_TILEX / 2; - int x, y; - - if (!IS_CUSTOM_ELEMENT(properties_element)) - { - /* this should never happen */ - Error(ERR_WARN, "element %d is no custom element", properties_element); - - return; - } + int xoffset = ED_DRAWINGAREA_TEXT_DISTANCE; ModifyGadget(gi, GDI_X, MAX(x1, MAX(x2, x3)) + xoffset, GDI_END); - DrawElementBorder(gi->x, gi->y, 3 * MINI_TILEX, 3 * MINI_TILEY, TRUE); - - for (y=0; y<3; y++) - for (x=0; x<3; x++) - DrawMiniGraphicExt(drawto, gi->x + x * MINI_TILEX,gi->y + y * MINI_TILEY, - el2edimg(custom_element.change.content[x][y])); - - MapDrawingArea(ED_DRAWING_ID_CUSTOM_CHANGE_CONTENT); -} - -static void DrawCustomChangeTriggerArea() -{ - struct GadgetInfo *gi = level_editor_gadget[GADGET_ID_CUSTOM_CHANGE_TRIGGER]; -#if 0 - int xpos = ED_AREA_ELEM_CONTENT5_XPOS; - int ypos = ED_AREA_ELEM_CONTENT5_YPOS; - int area_sx = SX + xpos; - int area_sy = SY + ypos; -#endif - - if (!IS_CUSTOM_ELEMENT(properties_element)) - { - /* this should never happen */ - Error(ERR_WARN, "element %d is no custom element", properties_element); - - return; - } - - DrawElementBorder(gi->x, gi->y, MINI_TILEX, MINI_TILEY, TRUE); - DrawMiniGraphicExt(drawto, gi->x, gi->y, - el2edimg(custom_element.change.trigger_element)); - - MapDrawingArea(ED_DRAWING_ID_CUSTOM_CHANGE_TRIGGER); + MapDrawingArea(id); } static void DrawElementContentAreas() { - int area_x = ED_AREA_ELEM_CONTENT_XPOS / MINI_TILEX; - int area_y = ED_AREA_ELEM_CONTENT_YPOS / MINI_TILEY; - int area_sx = SX + ED_AREA_ELEM_CONTENT_XPOS; - int area_sy = SY + ED_AREA_ELEM_CONTENT_YPOS; - int i, x, y; - - for (i=0; idynamite = 1000; - break; + { + int i; + for (i=0; i < MAX_INVENTORY_SIZE; i++) + if (local_player->inventory_size < MAX_INVENTORY_SIZE) + local_player->inventory_element[local_player->inventory_size++] = + EL_DYNAMITE; + } + + break; #if 0 diff --git a/src/files.c b/src/files.c index 4f24ebbe..67eee3a7 100644 --- a/src/files.c +++ b/src/files.c @@ -74,7 +74,7 @@ static void setLevelInfoToDefaults(struct LevelInfo *level) level->time_timegate = 10; level->amoeba_content = EL_DIAMOND; level->double_speed = FALSE; - level->initial_gravity = FALSE; + level->gravity = FALSE; level->em_slippery_gems = FALSE; level->use_custom_template = FALSE; @@ -116,8 +116,8 @@ static void setLevelInfoToDefaults(struct LevelInfo *level) element_info[element].use_gfx_element = FALSE; element_info[element].gfx_element = EL_EMPTY_SPACE; - element_info[element].score = 0; - element_info[element].gem_count = 0; + element_info[element].collect_score = 10; /* special default */ + element_info[element].collect_count = 1; /* special default */ element_info[element].push_delay_fixed = 2; /* special default */ element_info[element].push_delay_random = 8; /* special default */ @@ -171,6 +171,8 @@ static void setLevelInfoToDefaults(struct LevelInfo *level) /* start with no properties at all */ for (j=0; j < NUM_EP_BITFIELDS; j++) Properties[element][j] = EP_BITMASK_DEFAULT; + + element_info[element].modified_settings = FALSE; } BorderElement = EL_STEELWALL; @@ -276,7 +278,7 @@ static int LoadLevel_HEAD(FILE *file, int chunk_size, struct LevelInfo *level) level->time_wheel = getFile8Bit(file); level->amoeba_content = checkLevelElement(getFile8Bit(file)); level->double_speed = (getFile8Bit(file) == 1 ? TRUE : FALSE); - level->initial_gravity = (getFile8Bit(file) == 1 ? TRUE : FALSE); + level->gravity = (getFile8Bit(file) == 1 ? TRUE : FALSE); level->encoding_16bit_field = (getFile8Bit(file) == 1 ? TRUE : FALSE); level->em_slippery_gems = (getFile8Bit(file) == 1 ? TRUE : FALSE); @@ -496,8 +498,8 @@ static int LoadLevel_CUS3(FILE *file, int chunk_size, struct LevelInfo *level) element_info[element].gfx_element = checkLevelElement(getFile16BitBE(file)); - element_info[element].score = getFile8Bit(file); - element_info[element].gem_count = getFile8Bit(file); + element_info[element].collect_score = getFile8Bit(file); + element_info[element].collect_count = getFile8Bit(file); element_info[element].push_delay_fixed = getFile16BitBE(file); element_info[element].push_delay_random = getFile16BitBE(file); @@ -542,6 +544,9 @@ static int LoadLevel_CUS3(FILE *file, int chunk_size, struct LevelInfo *level) /* some free bytes for future properties and padding */ ReadUnusedBytesFromFile(file, LEVEL_CPART_CUS3_UNUSED); + + /* mark that this custom element has been modified */ + element_info[element].modified_settings = TRUE; } return chunk_size; @@ -838,7 +843,7 @@ static void SaveLevel_HEAD(FILE *file, struct LevelInfo *level) putFile8Bit(file, (level->encoding_16bit_amoeba ? EL_EMPTY : level->amoeba_content)); putFile8Bit(file, (level->double_speed ? 1 : 0)); - putFile8Bit(file, (level->initial_gravity ? 1 : 0)); + putFile8Bit(file, (level->gravity ? 1 : 0)); putFile8Bit(file, (level->encoding_16bit_field ? 1 : 0)); putFile8Bit(file, (level->em_slippery_gems ? 1 : 0)); @@ -1007,7 +1012,7 @@ static void SaveLevel_CUS3(FILE *file, struct LevelInfo *level, { int element = EL_CUSTOM_START + i; - if (Properties[element][EP_BITFIELD_BASE] != EP_BITMASK_DEFAULT) + if (element_info[element].modified_settings) { if (check < num_changed_custom_elements) { @@ -1024,8 +1029,8 @@ static void SaveLevel_CUS3(FILE *file, struct LevelInfo *level, putFile8Bit(file, element_info[element].use_gfx_element); putFile16BitBE(file, element_info[element].gfx_element); - putFile8Bit(file, element_info[element].score); - putFile8Bit(file, element_info[element].gem_count); + putFile8Bit(file, element_info[element].collect_score); + putFile8Bit(file, element_info[element].collect_count); putFile16BitBE(file, element_info[element].push_delay_fixed); putFile16BitBE(file, element_info[element].push_delay_random); @@ -1119,7 +1124,7 @@ static void SaveLevelFromFilename(struct LevelInfo *level, char *filename) /* check for non-standard custom elements and calculate "CUS3" chunk size */ for (i=0; i < NUM_CUSTOM_ELEMENTS; i++) - if (Properties[EL_CUSTOM_START +i][EP_BITFIELD_BASE] != EP_BITMASK_DEFAULT) + if (element_info[EL_CUSTOM_START + i].modified_settings) num_changed_custom_elements++; level_chunk_CUS3_size = LEVEL_CHUNK_CUS3_SIZE(num_changed_custom_elements); @@ -1198,7 +1203,7 @@ void DumpLevel(struct LevelInfo *level) printf("\n"); printf("Amoeba Speed: %d\n", level->amoeba_speed); printf("\n"); - printf("Gravity: %s\n", (level->initial_gravity ?"yes":"no")); + printf("Gravity: %s\n", (level->gravity ? "yes" : "no")); printf("Double Speed Movement: %s\n", (level->double_speed ? "yes" : "no")); printf("EM style slippery gems: %s\n", (level->em_slippery_gems ? "yes" : "no")); diff --git a/src/game.c b/src/game.c index f5b3ab7b..32311aa5 100644 --- a/src/game.c +++ b/src/game.c @@ -398,9 +398,9 @@ move_stepsize_list[] = struct { int element; - int gem_count; + int count; } -gem_count_list[] = +collect_count_list[] = { { EL_EMERALD, 1 }, { EL_BD_DIAMOND, 1 }, @@ -715,7 +715,7 @@ void DrawGameDoorValues() DrawText(DX + XX_EMERALDS, DY + YY_EMERALDS, int2str(local_player->gems_still_needed, 3), FONT_TEXT_2); DrawText(DX + XX_DYNAMITE, DY + YY_DYNAMITE, - int2str(local_player->dynamite, 3), FONT_TEXT_2); + int2str(local_player->inventory_size, 3), FONT_TEXT_2); DrawText(DX + XX_SCORE, DY + YY_SCORE, int2str(local_player->score, 5), FONT_TEXT_2); DrawText(DX + XX_TIME, DY + YY_TIME, @@ -890,12 +890,12 @@ static void InitGameEngine() /* initialize gem count values for each element */ for (i=0; ikey[j] = FALSE; - player->dynamite = 0; player->dynabomb_count = 0; player->dynabomb_size = 1; player->dynabombs_left = 0; @@ -994,6 +993,8 @@ void InitGame() player->shield_normal_time_left = 0; player->shield_deadly_time_left = 0; + player->inventory_size = 0; + DigField(player, 0, 0, 0, 0, DF_NO_PUSH); SnapField(player, 0, 0); @@ -1032,7 +1033,6 @@ void InitGame() game.switchgate_pos = 0; game.balloon_dir = MV_NO_MOVING; game.explosions_delayed = TRUE; - game.current_gravity = level.initial_gravity; for (i=0; i<4; i++) { @@ -2039,7 +2039,7 @@ void Explode(int ex, int ey, int phase, int mode) Store[x][y] = EL_PEARL; else if (element == EL_WALL_CRYSTAL) Store[x][y] = EL_CRYSTAL; - else if (IS_CUSTOM_ELEMENT(element)) + else if (IS_CUSTOM_ELEMENT(element) && !CAN_EXPLODE(element)) Store[x][y] = element_info[element].content[1][1]; else Store[x][y] = EL_EMPTY; @@ -2684,7 +2684,9 @@ void Impact(int x, int y) return; } - if (impact) + /* only reset graphic animation if graphic really changes after impact */ + if (impact && + el_act_dir2img(element, GfxAction[x][y], MV_DOWN) != el2img(element)) { ResetGfxAnimation(x, y); DrawLevelField(x, y); @@ -5146,11 +5148,13 @@ static void ChangeActiveTrap(int x, int y) static void ChangeElementNowExt(int x, int y, int target_element) { +#if 0 /* !!! let the player exacpe from a suddenly unaccessible element */ if (IS_PLAYER(x, y) && !IS_ACCESSIBLE(target_element)) { Bang(x, y); return; } +#endif RemoveField(x, y); Feld[x][y] = target_element; @@ -5415,7 +5419,7 @@ static void PlayerActions(struct PlayerInfo *player, byte player_action) { static byte stored_player_action[MAX_PLAYERS]; static int num_stored_actions = 0; - boolean moved = FALSE, snapped = FALSE, bombed = FALSE; + boolean moved = FALSE, snapped = FALSE, dropped = FALSE; int left = player_action & JOY_LEFT; int right = player_action & JOY_RIGHT; int up = player_action & JOY_UP; @@ -5438,13 +5442,14 @@ static void PlayerActions(struct PlayerInfo *player, byte player_action) else { if (button2) - bombed = PlaceBomb(player); + dropped = DropElement(player); + moved = MoveFigure(player, dx, dy); } if (tape.single_step && tape.recording && !tape.pausing) { - if (button1 || (bombed && !moved)) + if (button1 || (dropped && !moved)) { TapeTogglePause(TAPE_TOGGLE_AUTOMATIC); SnapField(player, 0, 0); /* stop snapping */ @@ -6088,7 +6093,7 @@ void ScrollLevel(int dx, int dy) static void CheckGravityMovement(struct PlayerInfo *player) { - if (game.current_gravity && !player->programmed_action) + if (level.gravity && !player->programmed_action) { int move_dir_vertical = player->action & (MV_UP | MV_DOWN); int move_dir_horizontal = player->action & (MV_LEFT | MV_RIGHT); @@ -6467,11 +6472,9 @@ void TestIfPlayerTouchesCustomElement(int x, int y) { +1, 0 }, { 0, +1 } }; - boolean center_is_player = (IS_PLAYER(x, y)); int i; - /* prevent TestIfPlayerTouchesCustomElement() from looping */ - if (check_changing) + if (check_changing) /* prevent this function from running into a loop */ return; check_changing = TRUE; @@ -6484,7 +6487,7 @@ void TestIfPlayerTouchesCustomElement(int x, int y) if (!IN_LEV_FIELD(xx, yy)) continue; - if (center_is_player) + if (IS_PLAYER(x, y)) { CheckTriggeredElementChange(xx, yy, Feld[xx][yy], CE_OTHER_GETS_TOUCHED); CheckElementChange(xx, yy, Feld[xx][yy], CE_TOUCHED_BY_PLAYER); @@ -6511,11 +6514,11 @@ void TestIfElementTouchesCustomElement(int x, int y) { +1, 0 }, { 0, +1 } }; - boolean center_is_custom = (IS_CUSTOM_ELEMENT(Feld[x][y])); + boolean change_center_element = FALSE; + int center_element = Feld[x][y]; int i; - /* prevent TestIfElementTouchesCustomElement() from looping */ - if (check_changing) + if (check_changing) /* prevent this function from running into a loop */ return; check_changing = TRUE; @@ -6524,23 +6527,27 @@ void TestIfElementTouchesCustomElement(int x, int y) { int xx = x + xy[i][0]; int yy = y + xy[i][1]; + int border_element; if (!IN_LEV_FIELD(xx, yy)) continue; - if (center_is_custom && - Feld[xx][yy] == element_info[Feld[x][y]].change.trigger_element) - { - CheckElementChange(x, y, Feld[x][y], CE_OTHER_IS_TOUCHING); - } + border_element = Feld[xx][yy]; - if (IS_CUSTOM_ELEMENT(Feld[xx][yy]) && - Feld[x][y] == element_info[Feld[xx][yy]].change.trigger_element) - { - CheckElementChange(xx, yy, Feld[xx][yy], CE_OTHER_IS_TOUCHING); - } + /* check for change of center element (but change it only once) */ + if (IS_CUSTOM_ELEMENT(center_element) && + border_element == element_info[center_element].change.trigger_element) + change_center_element = TRUE; + + /* check for change of border element */ + if (IS_CUSTOM_ELEMENT(border_element) && + center_element == element_info[border_element].change.trigger_element) + CheckElementChange(xx, yy, border_element, CE_OTHER_IS_TOUCHING); } + if (change_center_element) + CheckElementChange(x, y, center_element, CE_OTHER_IS_TOUCHING); + check_changing = FALSE; } @@ -7086,7 +7093,7 @@ int DigField(struct PlayerInfo *player, element == EL_SP_GRAVITY_PORT_RIGHT || element == EL_SP_GRAVITY_PORT_UP || element == EL_SP_GRAVITY_PORT_DOWN) - game.current_gravity = !game.current_gravity; + level.gravity = !level.gravity; /* automatically move to the next field with double speed */ player->programmed_action = move_direction; @@ -7256,11 +7263,13 @@ int DigField(struct PlayerInfo *player, } else if (element == EL_DYNAMITE || element == EL_SP_DISK_RED) { - player->dynamite++; + if (player->inventory_size < MAX_INVENTORY_SIZE) + player->inventory_element[player->inventory_size++] = element; + player->use_disk_red_graphic = (element == EL_SP_DISK_RED); DrawText(DX_DYNAMITE, DY_DYNAMITE, - int2str(local_player->dynamite, 3), FONT_TEXT_2); + int2str(local_player->inventory_size, 3), FONT_TEXT_2); } else if (element == EL_DYNABOMB_INCREASE_NUMBER) { @@ -7287,10 +7296,21 @@ int DigField(struct PlayerInfo *player, el2edimg(EL_KEY_1 + key_nr)); redraw_mask |= REDRAW_DOOR_1; } - else if (element_info[element].gem_count > 0) + else if (IS_DROPPABLE(element)) /* can be collected and dropped */ + { + int i; + + for (i=0; i < element_info[element].collect_count; i++) + if (player->inventory_size < MAX_INVENTORY_SIZE) + player->inventory_element[player->inventory_size++] = element; + + DrawText(DX_DYNAMITE, DY_DYNAMITE, + int2str(local_player->inventory_size, 3), FONT_TEXT_2); + } + else if (element_info[element].collect_count > 0) { local_player->gems_still_needed -= - element_info[element].gem_count; + element_info[element].collect_count; if (local_player->gems_still_needed < 0) local_player->gems_still_needed = 0; @@ -7466,66 +7486,68 @@ boolean SnapField(struct PlayerInfo *player, int dx, int dy) return TRUE; } -boolean PlaceBomb(struct PlayerInfo *player) +boolean DropElement(struct PlayerInfo *player) { int jx = player->jx, jy = player->jy; - int element; + int old_element; if (!player->active || player->MovPos) return FALSE; - element = Feld[jx][jy]; + old_element = Feld[jx][jy]; - if ((player->dynamite == 0 && player->dynabombs_left == 0) || - IS_ACTIVE_BOMB(element) || element == EL_EXPLOSION) + /* check if player has anything that can be dropped */ + if (player->inventory_size == 0 && player->dynabombs_left == 0) return FALSE; -#if 0 - if (element != EL_EMPTY) + /* check if anything can be dropped at the current position */ + if (IS_ACTIVE_BOMB(old_element) || old_element == EL_EXPLOSION) return FALSE; -#endif - if (element != EL_EMPTY) - { -#if 0 - Store[jx][jy] = element; -#else - Back[jx][jy] = element; -#endif - } + /* collected custom elements can only be dropped on empty fields */ + if (player->inventory_size > 0 && + IS_CUSTOM_ELEMENT(player->inventory_element[player->inventory_size - 1]) + && old_element != EL_EMPTY) + return FALSE; + + if (old_element != EL_EMPTY) + Back[jx][jy] = old_element; /* store old element on this field */ MovDelay[jx][jy] = 96; ResetGfxAnimation(jx, jy); ResetRandomAnimationValue(jx, jy); - if (player->dynamite) + if (player->inventory_size > 0) { + int new_element = player->inventory_element[--player->inventory_size]; + +#if 1 + Feld[jx][jy] = (new_element == EL_DYNAMITE ? EL_DYNAMITE_ACTIVE : + new_element == EL_SP_DISK_RED ? EL_SP_DISK_RED_ACTIVE : + new_element); +#else Feld[jx][jy] = (player->use_disk_red_graphic ? EL_SP_DISK_RED_ACTIVE : EL_DYNAMITE_ACTIVE); - player->dynamite--; +#endif + + DrawText(DX_DYNAMITE, DY_DYNAMITE, + int2str(local_player->inventory_size, 3), FONT_TEXT_2); - DrawText(DX_DYNAMITE, DY_DYNAMITE, int2str(local_player->dynamite, 3), - FONT_TEXT_2); if (IN_SCR_FIELD(SCREENX(jx), SCREENY(jy))) - { -#if 1 DrawGraphicThruMask(SCREENX(jx), SCREENY(jy), el2img(Feld[jx][jy]), 0); -#else - if (game.emulation == EMU_SUPAPLEX) - DrawGraphic(SCREENX(jx), SCREENY(jy), IMG_SP_DISK_RED, 0); - else - DrawGraphicThruMask(SCREENX(jx), SCREENY(jy), IMG_DYNAMITE_ACTIVE, 0); -#endif - } PlaySoundLevelAction(jx, jy, ACTION_DROPPING); + + CheckTriggeredElementChange(jx, jy, new_element, CE_OTHER_GETS_DROPPED); + CheckElementChange(jx, jy, new_element, CE_DROPPED_BY_PLAYER); } - else + else /* player is dropping a dyna bomb */ { + player->dynabombs_left--; + Feld[jx][jy] = EL_DYNABOMB_PLAYER_1_ACTIVE + (player->element_nr - EL_PLAYER_1); - player->dynabombs_left--; if (IN_SCR_FIELD(SCREENX(jx), SCREENY(jy))) DrawGraphicThruMask(SCREENX(jx), SCREENY(jy), el2img(Feld[jx][jy]), 0); @@ -7711,7 +7733,7 @@ void RaiseScoreElement(int element) RaiseScore(level.score[SC_KEY]); break; default: - RaiseScore(element_info[element].score); + RaiseScore(element_info[element].collect_score); break; } } diff --git a/src/game.h b/src/game.h index 01209d95..6c6ea57b 100644 --- a/src/game.h +++ b/src/game.h @@ -95,7 +95,7 @@ void BuryHero(struct PlayerInfo *); void RemoveHero(struct PlayerInfo *); int DigField(struct PlayerInfo *, int, int, int, int, int); boolean SnapField(struct PlayerInfo *, int, int); -boolean PlaceBomb(struct PlayerInfo *); +boolean DropElement(struct PlayerInfo *); void InitPlaySoundLevel(); diff --git a/src/init.c b/src/init.c index 79a67d1e..7132ab78 100644 --- a/src/init.c +++ b/src/init.c @@ -1284,7 +1284,7 @@ void InitElementPropertiesStatic() -1 }; - static int ep_collectible[] = + static int ep_collectible_only[] = { EL_BD_DIAMOND, EL_EMERALD, @@ -2495,7 +2495,7 @@ void InitElementPropertiesStatic() } element_properties[] = { { ep_diggable, EP_DIGGABLE }, - { ep_collectible, EP_COLLECTIBLE }, + { ep_collectible_only, EP_COLLECTIBLE_ONLY }, { ep_dont_run_into, EP_DONT_RUN_INTO }, { ep_dont_collide_with, EP_DONT_COLLIDE_WITH }, { ep_dont_touch, EP_DONT_TOUCH }, @@ -2639,7 +2639,7 @@ void InitElementPropertiesEngine(int engine_version) static int no_wall_properties[] = { EP_DIGGABLE, - EP_COLLECTIBLE, + EP_COLLECTIBLE_ONLY, EP_DONT_RUN_INTO, EP_DONT_COLLIDE_WITH, EP_CAN_MOVE, @@ -2705,6 +2705,10 @@ void InitElementPropertiesEngine(int engine_version) SET_PROPERTY(i, EP_ACCESSIBLE, (IS_WALKABLE(i) || IS_PASSABLE(i))); + /* ---------- COLLECTIBLE ---------------------------------------------- */ + SET_PROPERTY(i, EP_COLLECTIBLE, (IS_COLLECTIBLE_ONLY(i) || + IS_DROPPABLE(i))); + /* ---------- SNAPPABLE ------------------------------------------------ */ SET_PROPERTY(i, EP_SNAPPABLE, (IS_DIGGABLE(i) || IS_COLLECTIBLE(i) || diff --git a/src/libgame/text.c b/src/libgame/text.c index 5558fc1c..a4b60302 100644 --- a/src/libgame/text.c +++ b/src/libgame/text.c @@ -144,6 +144,11 @@ int getFontHeight(int font_nr) return gfx.font_bitmap_info[font_bitmap_id].height; } +int getTextWidth(char *text, int font_nr) +{ + return (text != NULL ? strlen(text) * getFontWidth(font_nr) : 0); +} + static char getFontCharPosition(int font_nr, char c) { int font_bitmap_id = gfx.select_font_function(font_nr); @@ -179,11 +184,9 @@ void DrawInitText(char *text, int ypos, int font_nr) gfx.num_fonts > 0 && gfx.font_bitmap_info[font_nr].bitmap != NULL) { - int text_width = strlen(text) * getFontWidth(font_nr); - ClearRectangle(window, 0, ypos, video.width, getFontHeight(font_nr)); - DrawTextExt(window, (video.width - text_width) / 2, ypos, text, font_nr, - BLIT_OPAQUE); + DrawTextExt(window, (video.width - getTextWidth(text, font_nr)) / 2, ypos, + text, font_nr, BLIT_OPAQUE); FlushDisplay(); } } @@ -200,7 +203,7 @@ void DrawTextFCentered(int y, int font_nr, char *format, ...) if (strlen(buffer) > MAX_OUTPUT_LINESIZE) Error(ERR_EXIT, "string too long in DrawTextFCentered() -- aborting"); - DrawText(gfx.sx + (gfx.sxsize - strlen(buffer) * getFontWidth(font_nr)) / 2, + DrawText(gfx.sx + (gfx.sxsize - getTextWidth(buffer, font_nr)) / 2, gfx.sy + y, buffer, font_nr); } diff --git a/src/libgame/text.h b/src/libgame/text.h index 5d701fa7..fd1e8c57 100644 --- a/src/libgame/text.h +++ b/src/libgame/text.h @@ -57,6 +57,8 @@ void FreeFontInfo(struct FontBitmapInfo *); int getFontWidth(int); int getFontHeight(int); +int getTextWidth(char *, int); + void getFontCharSource(int, char, Bitmap **, int *, int *); void DrawInitText(char *, int, int); diff --git a/src/main.h b/src/main.h index 24ecedf4..601b0a71 100644 --- a/src/main.h +++ b/src/main.h @@ -63,7 +63,7 @@ /* values for configurable properties (custom elem's only, else pre-defined) */ #define EP_DIGGABLE 0 -#define EP_COLLECTIBLE 1 +#define EP_COLLECTIBLE_ONLY 1 #define EP_DONT_RUN_INTO 2 #define EP_DONT_COLLIDE_WITH 3 #define EP_DONT_TOUCH 4 @@ -84,7 +84,7 @@ #define EP_PASSABLE_OVER 19 #define EP_PASSABLE_INSIDE 20 #define EP_PASSABLE_UNDER 21 -#define EP_UNUSED_22 22 +#define EP_DROPPABLE 22 #define EP_UNUSED_23 23 #define EP_PUSHABLE 24 @@ -126,20 +126,21 @@ #define EP_WALKABLE 60 #define EP_PASSABLE 61 #define EP_ACCESSIBLE 62 -#define EP_SNAPPABLE 63 -#define EP_WALL 64 -#define EP_SOLID_FOR_PUSHING 65 -#define EP_DRAGONFIRE_PROOF 66 -#define EP_EXPLOSION_PROOF 67 -#define EP_CAN_SMASH 68 -#define EP_CAN_EXPLODE 69 +#define EP_COLLECTIBLE 63 +#define EP_SNAPPABLE 64 +#define EP_WALL 65 +#define EP_SOLID_FOR_PUSHING 66 +#define EP_DRAGONFIRE_PROOF 67 +#define EP_EXPLOSION_PROOF 68 +#define EP_CAN_SMASH 69 +#define EP_CAN_EXPLODE 70 /* values for internal purpose only (level editor) */ -#define EP_EXPLODE_RESULT 70 -#define EP_WALK_TO_OBJECT 71 -#define EP_DEADLY 72 +#define EP_EXPLODE_RESULT 71 +#define EP_WALK_TO_OBJECT 72 +#define EP_DEADLY 73 -#define NUM_ELEMENT_PROPERTIES 73 +#define NUM_ELEMENT_PROPERTIES 74 #define NUM_EP_BITFIELDS ((NUM_ELEMENT_PROPERTIES + 31) / 32) #define EP_BITFIELD_BASE 0 @@ -159,23 +160,25 @@ #define CE_TOUCHED_BY_PLAYER 1 #define CE_PRESSED_BY_PLAYER 2 #define CE_PUSHED_BY_PLAYER 3 -#define CE_COLLISION 4 -#define CE_IMPACT 5 -#define CE_SMASHED 6 -#define CE_OTHER_IS_TOUCHING 7 -#define CE_OTHER_IS_CHANGING 8 -#define CE_OTHER_IS_EXPLODING 9 -#define CE_OTHER_GETS_TOUCHED 10 -#define CE_OTHER_GETS_PRESSED 11 -#define CE_OTHER_GETS_PUSHED 12 -#define CE_OTHER_GETS_COLLECTED 13 +#define CE_DROPPED_BY_PLAYER 4 +#define CE_COLLISION 5 +#define CE_IMPACT 6 +#define CE_SMASHED 7 +#define CE_OTHER_IS_TOUCHING 8 +#define CE_OTHER_IS_CHANGING 9 +#define CE_OTHER_IS_EXPLODING 10 +#define CE_OTHER_GETS_TOUCHED 11 +#define CE_OTHER_GETS_PRESSED 12 +#define CE_OTHER_GETS_PUSHED 13 +#define CE_OTHER_GETS_COLLECTED 14 +#define CE_OTHER_GETS_DROPPED 15 /* values for internal purpose only (level editor) */ -#define CE_BY_PLAYER 14 -#define CE_BY_COLLISION 15 -#define CE_BY_OTHER 16 +#define CE_BY_PLAYER 16 +#define CE_BY_COLLISION 17 +#define CE_BY_OTHER 18 -#define NUM_CHANGE_EVENTS 17 +#define NUM_CHANGE_EVENTS 19 #define CE_BITMASK_DEFAULT 0 @@ -223,7 +226,7 @@ /* macros for configurable properties */ #define IS_DIGGABLE(e) HAS_PROPERTY(e, EP_DIGGABLE) -#define IS_COLLECTIBLE(e) HAS_PROPERTY(e, EP_COLLECTIBLE) +#define IS_COLLECTIBLE_ONLY(e) HAS_PROPERTY(e, EP_COLLECTIBLE_ONLY) #define DONT_RUN_INTO(e) HAS_PROPERTY(e, EP_DONT_RUN_INTO) #define DONT_COLLIDE_WITH(e) HAS_PROPERTY(e, EP_DONT_COLLIDE_WITH) #define DONT_TOUCH(e) HAS_PROPERTY(e, EP_DONT_TOUCH) @@ -244,6 +247,7 @@ #define IS_PASSABLE_OVER(e) HAS_PROPERTY(e, EP_PASSABLE_OVER) #define IS_PASSABLE_INSIDE(e) HAS_PROPERTY(e, EP_PASSABLE_INSIDE) #define IS_PASSABLE_UNDER(e) HAS_PROPERTY(e, EP_PASSABLE_UNDER) +#define IS_DROPPABLE(e) HAS_PROPERTY(e, EP_DROPPABLE) #define IS_PUSHABLE(e) HAS_PROPERTY(e, EP_PUSHABLE) /* macros for special configurable properties */ @@ -281,10 +285,11 @@ #define IS_ACCESSIBLE_OVER(e) HAS_PROPERTY(e, EP_ACCESSIBLE_OVER) #define IS_ACCESSIBLE_INSIDE(e) HAS_PROPERTY(e, EP_ACCESSIBLE_INSIDE) #define IS_ACCESSIBLE_UNDER(e) HAS_PROPERTY(e, EP_ACCESSIBLE_UNDER) -#define IS_SNAPPABLE(e) HAS_PROPERTY(e, EP_SNAPPABLE) #define IS_WALKABLE(e) HAS_PROPERTY(e, EP_WALKABLE) #define IS_PASSABLE(e) HAS_PROPERTY(e, EP_PASSABLE) #define IS_ACCESSIBLE(e) HAS_PROPERTY(e, EP_ACCESSIBLE) +#define IS_COLLECTIBLE(e) HAS_PROPERTY(e, EP_COLLECTIBLE) +#define IS_SNAPPABLE(e) HAS_PROPERTY(e, EP_SNAPPABLE) #define IS_WALL(e) HAS_PROPERTY(e, EP_WALL) #define IS_SOLID_FOR_PUSHING(e) HAS_PROPERTY(e, EP_SOLID_FOR_PUSHING) #define IS_DRAGONFIRE_PROOF(e) HAS_PROPERTY(e, EP_DRAGONFIRE_PROOF) @@ -351,6 +356,7 @@ #define MAX_TAPELEN (1000 * 50) /* max. time * framerate */ #define MAX_SCORE_ENTRIES 100 #define MAX_NUM_AMOEBA 100 +#define MAX_INVENTORY_SIZE 1000 /* values for elements with content */ #define MIN_ELEMENT_CONTENTS 1 @@ -971,9 +977,9 @@ #define PROGRAM_VERSION_MAJOR 3 #define PROGRAM_VERSION_MINOR 0 -#define PROGRAM_VERSION_PATCH 1 +#define PROGRAM_VERSION_PATCH 0 #define PROGRAM_VERSION_RELEASE 0 -#define PROGRAM_VERSION_STRING "3.0.1" +#define PROGRAM_VERSION_STRING "3.0.0" #define PROGRAM_TITLE_STRING "Rocks'n'Diamonds" #define PROGRAM_AUTHOR_STRING "Holger Schemel" @@ -1086,10 +1092,12 @@ struct PlayerInfo int lights_still_needed; int friends_still_needed; int key[4]; - int dynamite; int dynabomb_count, dynabomb_size, dynabombs_left, dynabomb_xl; int shield_normal_time_left; int shield_deadly_time_left; + + int inventory_element[MAX_INVENTORY_SIZE]; + int inventory_size; }; struct LevelInfo @@ -1117,7 +1125,7 @@ struct LevelInfo int time_light; int time_timegate; boolean double_speed; - boolean initial_gravity; + boolean gravity; boolean em_slippery_gems; /* EM style "gems slip from wall" behaviour */ short field[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; @@ -1179,7 +1187,6 @@ struct GameInfo int switchgate_pos; int balloon_dir; boolean explosions_delayed; - boolean current_gravity; }; struct GlobalInfo @@ -1271,8 +1278,8 @@ struct ElementInfo boolean use_gfx_element; /* use custom graphic element */ short gfx_element; /* optional custom graphic element */ - int score; /* score value for collecting */ - int gem_count; /* gem count value for collecting */ + int collect_score; /* score value for collecting */ + int collect_count; /* count value for collecting */ int push_delay_fixed; /* constant frame delay for pushing */ int push_delay_random; /* additional random frame delay for pushing */ @@ -1304,6 +1311,8 @@ struct ElementInfo boolean can_explode_by_fire; /* element explodes by fire */ boolean can_explode_smashed; /* element explodes when smashed */ boolean can_explode_impact; /* element explodes on impact */ + + boolean modified_settings; /* set for all modified custom elements */ }; struct FontInfo diff --git a/src/screens.c b/src/screens.c index d0b5313d..c3b75a31 100644 --- a/src/screens.c +++ b/src/screens.c @@ -155,10 +155,10 @@ static void PlaySound_Menu_Continue(int sound) void DrawHeadline() { - int font1_width = getFontWidth(FONT_TITLE_1); - int font2_width = getFontWidth(FONT_TITLE_2); - int x1 = SX + (SXSIZE - strlen(PROGRAM_TITLE_STRING) * font1_width) / 2; - int x2 = SX + (SXSIZE - strlen(WINDOW_SUBTITLE_STRING) * font2_width) / 2; + int text1_width = getTextWidth(PROGRAM_TITLE_STRING, FONT_TITLE_1); + int text2_width = getTextWidth(WINDOW_SUBTITLE_STRING, FONT_TITLE_2); + int x1 = SX + (SXSIZE - text1_width) / 2; + int x2 = SX + (SXSIZE - text2_width) / 2; DrawText(x1, SY + 8, PROGRAM_TITLE_STRING, FONT_TITLE_1); DrawText(x2, SY + 46, WINDOW_SUBTITLE_STRING, FONT_TITLE_2); @@ -192,9 +192,8 @@ void DrawMainMenu() { static LevelDirTree *leveldir_last_valid = NULL; char *name_text = (!options.network && setup.team_mode ? "Team:" : "Name:"); - int font_width = getFontWidth(FONT_MENU_1); - int name_width = font_width * strlen("Name:"); - int level_width = font_width * strlen("Level:"); + int name_width = getTextWidth("Name:", FONT_MENU_1); + int level_width = getTextWidth("Level:", FONT_MENU_1); int i; UnmapAllGadgets(); diff --git a/src/tools.c b/src/tools.c index d37a7b0e..9b5873b5 100644 --- a/src/tools.c +++ b/src/tools.c @@ -666,14 +666,13 @@ void DrawPlayer(struct PlayerInfo *player) if (player_is_moving && GfxElement[jx][jy] != EL_UNDEFINED) { #if 1 - /* !!! insert DrawLevelFieldCrumbledSandDigging code here !!! */ - if (player->is_digging && CAN_BE_CRUMBLED(GfxElement[jx][jy])) + if (CAN_BE_CRUMBLED(GfxElement[jx][jy])) DrawLevelFieldCrumbledSandDigging(jx, jy, move_dir, player->StepFrame); #else if (GfxElement[jx][jy] == EL_SAND) DrawLevelFieldCrumbledSandDigging(jx, jy, move_dir, player->StepFrame); #endif - else /* player->is_collecting */ + else { int old_element = GfxElement[jx][jy]; int old_graphic = el_act_dir2img(old_element, action, move_dir); @@ -1323,9 +1322,7 @@ void DrawLevelFieldCrumbledSandDigging(int x, int y, int direction, int sx = SCREENX(x), sy = SCREENY(y); DrawGraphic(sx, sy, graphic1, frame1); - - if (graphic1 != IMG_EMPTY_SPACE) - DrawLevelFieldCrumbledSandExt(x, y, graphic2, frame2); + DrawLevelFieldCrumbledSandExt(x, y, graphic2, frame2); } void DrawLevelFieldCrumbledSandNeighbours(int x, int y) @@ -1637,8 +1634,7 @@ static void DrawMicroLevelLabelExt(int mode) if (strlen(label_text) > 0) { - int text_width = strlen(label_text) * getFontWidth(font_nr); - int lxpos = SX + (SXSIZE - text_width) / 2; + int lxpos = SX + (SXSIZE - getTextWidth(label_text, font_nr)) / 2; int lypos = MICROLABEL_YPOS; DrawText(lxpos, lypos, label_text, font_nr); @@ -1674,8 +1670,8 @@ void DrawMicroLevel(int xpos, int ypos, boolean restart) if (leveldir_current->name) { - int len = strlen(leveldir_current->name); - int lxpos = SX + (SXSIZE - len * getFontWidth(FONT_TEXT_1)) / 2; + int text_width = getTextWidth(leveldir_current->name, FONT_TEXT_1); + int lxpos = SX + (SXSIZE - text_width) / 2; int lypos = SY + 352; DrawText(lxpos, lypos, leveldir_current->name, FONT_TEXT_1); -- 2.34.1