From 4be46f1030df4cb7db0ce7c46d2518334861731a Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Sat, 11 Jan 2003 20:16:21 +0100 Subject: [PATCH] rnd-20030111-2-src --- Makefile | 3 + src/conf_e2g.c | 4 + src/conf_gfx.c | 6 + src/conf_gfx.h | 1329 ++++++++++++++++++++++--------------------- src/conftime.h | 2 +- src/game.c | 248 ++++---- src/init.c | 3 + src/libgame/toons.c | 14 +- src/libgame/toons.h | 1 + src/main.c | 43 +- src/main.h | 98 ++-- src/tape.c | 37 +- src/tools.c | 112 ++-- src/tools.h | 19 +- 14 files changed, 1012 insertions(+), 907 deletions(-) diff --git a/Makefile b/Makefile index cb3e37f4..a04c870b 100644 --- a/Makefile +++ b/Makefile @@ -100,6 +100,9 @@ run: gdb: @$(MAKE_CMD) TARGET=$(DEFAULT_TARGET) && gdb ./rocksndiamonds +enginetest: + ./Scripts/make_enginetest.sh + backup: ./Scripts/make_backup.sh src diff --git a/src/conf_e2g.c b/src/conf_e2g.c index 49948d34..af01c278 100644 --- a/src/conf_e2g.c +++ b/src/conf_e2g.c @@ -436,6 +436,10 @@ element_to_graphic[] = EL_SP_BUGGY_BASE, -1, -1, IMG_SP_BUGGY_BASE }, + { + EL_SP_BUGGY_BASE_ACTIVATING, -1, -1, + IMG_SP_BUGGY_BASE_ACTIVATING + }, { EL_SP_BUGGY_BASE_ACTIVE, -1, -1, IMG_SP_BUGGY_BASE_ACTIVE diff --git a/src/conf_gfx.c b/src/conf_gfx.c index d6aff231..e4a742d1 100644 --- a/src/conf_gfx.c +++ b/src/conf_gfx.c @@ -34,6 +34,7 @@ struct ConfigInfo image_config_suffix[] = { ".mode_linear", "false", TYPE_BOOLEAN }, { ".mode_pingpong", "false", TYPE_BOOLEAN }, { ".mode_pingpong2", "false", TYPE_BOOLEAN }, + { ".mode_random", "false", TYPE_BOOLEAN }, { ".mode_reverse", "false", TYPE_BOOLEAN }, { ".global_sync", GFX_ARG_UNDEFINED, TYPE_BOOLEAN }, @@ -491,10 +492,15 @@ struct ConfigInfo image_config[] = { "sp_buggy_base.xpos", "1" }, { "sp_buggy_base.ypos", "3" }, { "sp_buggy_base.frames", "1" }, + { "sp_buggy_base.activating", "RocksSP.pcx" }, + { "sp_buggy_base.activating.xpos", "15" }, + { "sp_buggy_base.activating.ypos", "2" }, + { "sp_buggy_base.activating.frames", "1" }, { "sp_buggy_base.active", "RocksSP.pcx" }, { "sp_buggy_base.active.xpos", "8" }, { "sp_buggy_base.active.ypos", "6" }, { "sp_buggy_base.active.frames", "4" }, + { "sp_buggy_base.active.mode_random", "true" }, { "sp_hard_base1", "RocksSP.pcx" }, { "sp_hard_base1.xpos", "4" }, diff --git a/src/conf_gfx.h b/src/conf_gfx.h index bc7e6c19..00a72a38 100644 --- a/src/conf_gfx.h +++ b/src/conf_gfx.h @@ -112,670 +112,671 @@ #define IMG_SP_TERMINAL 91 #define IMG_SP_TERMINAL_ACTIVE 92 #define IMG_SP_BUGGY_BASE 93 -#define IMG_SP_BUGGY_BASE_ACTIVE 94 -#define IMG_SP_HARD_BASE1 95 -#define IMG_SP_HARD_BASE2 96 -#define IMG_SP_HARD_BASE3 97 -#define IMG_SP_HARD_BASE4 98 -#define IMG_SP_HARD_BASE5 99 -#define IMG_SP_HARD_BASE6 100 -#define IMG_SP_EXPLOSION 101 -#define IMG_SP_EXPLOSION_INFOTRON 102 -#define IMG_SOKOBAN_OBJECT 103 -#define IMG_SOKOBAN_FIELD_EMPTY 104 -#define IMG_SOKOBAN_FIELD_FULL 105 -#define IMG_EMPTY_SPACE 106 -#define IMG_SAND 107 -#define IMG_SAND_CRUMBLED 108 -#define IMG_WALL 109 -#define IMG_WALL_CRUMBLED 110 -#define IMG_STEELWALL 111 -#define IMG_ROCK 112 -#define IMG_ROCK_FALLING 113 -#define IMG_ROCK_MOVING_LEFT 114 -#define IMG_ROCK_MOVING_RIGHT 115 -#define IMG_EMERALD 116 -#define IMG_EMERALD_MOVING 117 -#define IMG_EMERALD_FALLING 118 -#define IMG_DIAMOND 119 -#define IMG_DIAMOND_MOVING 120 -#define IMG_DIAMOND_FALLING 121 -#define IMG_BOMB 122 -#define IMG_NUT 123 -#define IMG_NUT_FALLING 124 -#define IMG_NUT_MOVING_LEFT 125 -#define IMG_NUT_MOVING_RIGHT 126 -#define IMG_NUT_CRACKING 127 -#define IMG_DYNAMITE 128 -#define IMG_DYNAMITE_ACTIVE 129 -#define IMG_WALL_EMERALD 130 -#define IMG_WALL_DIAMOND 131 -#define IMG_BUG_RIGHT 132 -#define IMG_BUG_UP 133 -#define IMG_BUG_LEFT 134 -#define IMG_BUG_DOWN 135 -#define IMG_SPACESHIP_RIGHT 136 -#define IMG_SPACESHIP_UP 137 -#define IMG_SPACESHIP_LEFT 138 -#define IMG_SPACESHIP_DOWN 139 -#define IMG_YAMYAM 140 -#define IMG_YAMYAM_MOVING 141 -#define IMG_ROBOT 142 -#define IMG_ROBOT_MOVING 143 -#define IMG_ROBOT_WHEEL 144 -#define IMG_ROBOT_WHEEL_ACTIVE 145 -#define IMG_MAGIC_WALL 146 -#define IMG_MAGIC_WALL_ACTIVE 147 -#define IMG_MAGIC_WALL_FILLING 148 -#define IMG_MAGIC_WALL_FULL 149 -#define IMG_MAGIC_WALL_EMPTYING 150 -#define IMG_MAGIC_WALL_DEAD 151 -#define IMG_QUICKSAND_EMPTY 152 -#define IMG_QUICKSAND_FILLING 153 -#define IMG_QUICKSAND_FULL 154 -#define IMG_QUICKSAND_EMPTYING 155 -#define IMG_ACIDPOOL_TOPLEFT 156 -#define IMG_ACIDPOOL_TOPRIGHT 157 -#define IMG_ACIDPOOL_BOTTOMLEFT 158 -#define IMG_ACIDPOOL_BOTTOM 159 -#define IMG_ACIDPOOL_BOTTOMRIGHT 160 -#define IMG_ACID 161 -#define IMG_ACID_SPLASH_LEFT 162 -#define IMG_ACID_SPLASH_RIGHT 163 -#define IMG_AMOEBA_DROP 164 -#define IMG_AMOEBA_CREATING 165 -#define IMG_AMOEBA_SHRINKING 166 -#define IMG_AMOEBA_WET 167 -#define IMG_AMOEBA_WET_PART1 168 -#define IMG_AMOEBA_WET_PART2 169 -#define IMG_AMOEBA_WET_PART3 170 -#define IMG_AMOEBA_WET_PART4 171 -#define IMG_AMOEBA_DRY 172 -#define IMG_AMOEBA_DRY_PART1 173 -#define IMG_AMOEBA_DRY_PART2 174 -#define IMG_AMOEBA_DRY_PART3 175 -#define IMG_AMOEBA_DRY_PART4 176 -#define IMG_AMOEBA_FULL 177 -#define IMG_AMOEBA_FULL_PART1 178 -#define IMG_AMOEBA_FULL_PART2 179 -#define IMG_AMOEBA_FULL_PART3 180 -#define IMG_AMOEBA_FULL_PART4 181 -#define IMG_AMOEBA_DEAD 182 -#define IMG_AMOEBA_DEAD_PART1 183 -#define IMG_AMOEBA_DEAD_PART2 184 -#define IMG_AMOEBA_DEAD_PART3 185 -#define IMG_AMOEBA_DEAD_PART4 186 -#define IMG_EM_KEY1 187 -#define IMG_EM_KEY2 188 -#define IMG_EM_KEY3 189 -#define IMG_EM_KEY4 190 -#define IMG_EM_GATE1 191 -#define IMG_EM_GATE2 192 -#define IMG_EM_GATE3 193 -#define IMG_EM_GATE4 194 -#define IMG_EM_GATE1_GRAY 195 -#define IMG_EM_GATE2_GRAY 196 -#define IMG_EM_GATE3_GRAY 197 -#define IMG_EM_GATE4_GRAY 198 -#define IMG_EXIT_CLOSED 199 -#define IMG_EXIT_OPENING 200 -#define IMG_EXIT_OPEN 201 -#define IMG_BALLOON 202 -#define IMG_BALLOON_MOVING 203 -#define IMG_BALLOON_SEND_LEFT 204 -#define IMG_BALLOON_SEND_RIGHT 205 -#define IMG_BALLOON_SEND_UP 206 -#define IMG_BALLOON_SEND_DOWN 207 -#define IMG_BALLOON_SEND_ANY_DIRECTION 208 -#define IMG_SPRING 209 -#define IMG_SPRING_MOVING 210 -#define IMG_EMC_STEELWALL1 211 -#define IMG_EMC_STEELWALL2 212 -#define IMG_EMC_STEELWALL3 213 -#define IMG_EMC_STEELWALL4 214 -#define IMG_EMC_WALL_PILLAR_UPPER 215 -#define IMG_EMC_WALL_PILLAR_MIDDLE 216 -#define IMG_EMC_WALL_PILLAR_LOWER 217 -#define IMG_EMC_WALL4 218 -#define IMG_EMC_WALL5 219 -#define IMG_EMC_WALL6 220 -#define IMG_EMC_WALL7 221 -#define IMG_EMC_WALL8 222 -#define IMG_INVISIBLE_STEELWALL 223 -#define IMG_INVISIBLE_STEELWALL_ACTIVE 224 -#define IMG_INVISIBLE_WALL 225 -#define IMG_INVISIBLE_WALL_ACTIVE 226 -#define IMG_INVISIBLE_SAND 227 -#define IMG_INVISIBLE_SAND_ACTIVE 228 -#define IMG_CONVEYOR_BELT1_MIDDLE 229 -#define IMG_CONVEYOR_BELT1_MIDDLE_ACTIVE 230 -#define IMG_CONVEYOR_BELT1_LEFT 231 -#define IMG_CONVEYOR_BELT1_LEFT_ACTIVE 232 -#define IMG_CONVEYOR_BELT1_RIGHT 233 -#define IMG_CONVEYOR_BELT1_RIGHT_ACTIVE 234 -#define IMG_CONVEYOR_BELT1_SWITCH_LEFT 235 -#define IMG_CONVEYOR_BELT1_SWITCH_MIDDLE 236 -#define IMG_CONVEYOR_BELT1_SWITCH_RIGHT 237 -#define IMG_CONVEYOR_BELT2_MIDDLE 238 -#define IMG_CONVEYOR_BELT2_MIDDLE_ACTIVE 239 -#define IMG_CONVEYOR_BELT2_LEFT 240 -#define IMG_CONVEYOR_BELT2_LEFT_ACTIVE 241 -#define IMG_CONVEYOR_BELT2_RIGHT 242 -#define IMG_CONVEYOR_BELT2_RIGHT_ACTIVE 243 -#define IMG_CONVEYOR_BELT2_SWITCH_LEFT 244 -#define IMG_CONVEYOR_BELT2_SWITCH_MIDDLE 245 -#define IMG_CONVEYOR_BELT2_SWITCH_RIGHT 246 -#define IMG_CONVEYOR_BELT3_MIDDLE 247 -#define IMG_CONVEYOR_BELT3_MIDDLE_ACTIVE 248 -#define IMG_CONVEYOR_BELT3_LEFT 249 -#define IMG_CONVEYOR_BELT3_LEFT_ACTIVE 250 -#define IMG_CONVEYOR_BELT3_RIGHT 251 -#define IMG_CONVEYOR_BELT3_RIGHT_ACTIVE 252 -#define IMG_CONVEYOR_BELT3_SWITCH_LEFT 253 -#define IMG_CONVEYOR_BELT3_SWITCH_MIDDLE 254 -#define IMG_CONVEYOR_BELT3_SWITCH_RIGHT 255 -#define IMG_CONVEYOR_BELT4_MIDDLE 256 -#define IMG_CONVEYOR_BELT4_MIDDLE_ACTIVE 257 -#define IMG_CONVEYOR_BELT4_LEFT 258 -#define IMG_CONVEYOR_BELT4_LEFT_ACTIVE 259 -#define IMG_CONVEYOR_BELT4_RIGHT 260 -#define IMG_CONVEYOR_BELT4_RIGHT_ACTIVE 261 -#define IMG_CONVEYOR_BELT4_SWITCH_LEFT 262 -#define IMG_CONVEYOR_BELT4_SWITCH_MIDDLE 263 -#define IMG_CONVEYOR_BELT4_SWITCH_RIGHT 264 -#define IMG_SWITCHGATE_SWITCH_UP 265 -#define IMG_SWITCHGATE_SWITCH_DOWN 266 -#define IMG_LIGHT_SWITCH 267 -#define IMG_LIGHT_SWITCH_ACTIVE 268 -#define IMG_TIMEGATE_SWITCH 269 -#define IMG_TIMEGATE_SWITCH_ACTIVE 270 -#define IMG_ENVELOPE 271 -#define IMG_SIGN_EXCLAMATION 272 -#define IMG_SIGN_STOP 273 -#define IMG_LANDMINE 274 -#define IMG_STEELWALL_SLANTED 275 -#define IMG_EXTRA_TIME 276 -#define IMG_SHIELD_NORMAL 277 -#define IMG_SHIELD_DEADLY 278 -#define IMG_SHIELD_NORMAL_ACTIVE 279 -#define IMG_SHIELD_DEADLY_ACTIVE 280 -#define IMG_SWITCHGATE_CLOSED 281 -#define IMG_SWITCHGATE_OPENING 282 -#define IMG_SWITCHGATE_OPEN 283 -#define IMG_SWITCHGATE_CLOSING 284 -#define IMG_TIMEGATE_CLOSED 285 -#define IMG_TIMEGATE_OPENING 286 -#define IMG_TIMEGATE_OPEN 287 -#define IMG_TIMEGATE_CLOSING 288 -#define IMG_PEARL 289 -#define IMG_PEARL_BREAKING 290 -#define IMG_CRYSTAL 291 -#define IMG_WALL_PEARL 292 -#define IMG_WALL_CRYSTAL 293 -#define IMG_TUBE_RIGHT_DOWN 294 -#define IMG_TUBE_HORIZONTAL_DOWN 295 -#define IMG_TUBE_LEFT_DOWN 296 -#define IMG_TUBE_HORIZONTAL 297 -#define IMG_TUBE_VERTICAL_RIGHT 298 -#define IMG_TUBE_ALL 299 -#define IMG_TUBE_VERTICAL_LEFT 300 -#define IMG_TUBE_VERTICAL 301 -#define IMG_TUBE_RIGHT_UP 302 -#define IMG_TUBE_HORIZONTAL_UP 303 -#define IMG_TUBE_LEFT_UP 304 -#define IMG_TRAP 305 -#define IMG_TRAP_ACTIVE 306 -#define IMG_DX_SUPABOMB 307 -#define IMG_KEY1 308 -#define IMG_KEY2 309 -#define IMG_KEY3 310 -#define IMG_KEY4 311 -#define IMG_GATE1 312 -#define IMG_GATE2 313 -#define IMG_GATE3 314 -#define IMG_GATE4 315 -#define IMG_GATE1_GRAY 316 -#define IMG_GATE2_GRAY 317 -#define IMG_GATE3_GRAY 318 -#define IMG_GATE4_GRAY 319 -#define IMG_GAMEOFLIFE 320 -#define IMG_BIOMAZE 321 -#define IMG_PACMAN_RIGHT 322 -#define IMG_PACMAN_UP 323 -#define IMG_PACMAN_LEFT 324 -#define IMG_PACMAN_DOWN 325 -#define IMG_LAMP 326 -#define IMG_LAMP_ACTIVE 327 -#define IMG_TIME_ORB_FULL 328 -#define IMG_TIME_ORB_EMPTY 329 -#define IMG_EMERALD_YELLOW 330 -#define IMG_EMERALD_YELLOW_MOVING 331 -#define IMG_EMERALD_YELLOW_FALLING 332 -#define IMG_EMERALD_RED 333 -#define IMG_EMERALD_RED_MOVING 334 -#define IMG_EMERALD_RED_FALLING 335 -#define IMG_EMERALD_PURPLE 336 -#define IMG_EMERALD_PURPLE_MOVING 337 -#define IMG_EMERALD_PURPLE_FALLING 338 -#define IMG_WALL_EMERALD_YELLOW 339 -#define IMG_WALL_EMERALD_RED 340 -#define IMG_WALL_EMERALD_PURPLE 341 -#define IMG_WALL_BD_DIAMOND 342 -#define IMG_WALL_GROWING 343 -#define IMG_WALL_GROWING_XY 344 -#define IMG_WALL_GROWING_X 345 -#define IMG_WALL_GROWING_Y 346 -#define IMG_WALL_GROWING_ACTIVE_LEFT 347 -#define IMG_WALL_GROWING_ACTIVE_RIGHT 348 -#define IMG_WALL_GROWING_ACTIVE_UP 349 -#define IMG_WALL_GROWING_ACTIVE_DOWN 350 -#define IMG_BLACK_ORB 351 -#define IMG_SPEED_PILL 352 -#define IMG_DARK_YAMYAM 353 -#define IMG_DYNABOMB_ACTIVE 354 -#define IMG_DYNABOMB_PLAYER1_ACTIVE 355 -#define IMG_DYNABOMB_PLAYER2_ACTIVE 356 -#define IMG_DYNABOMB_PLAYER3_ACTIVE 357 -#define IMG_DYNABOMB_PLAYER4_ACTIVE 358 -#define IMG_DYNABOMB_NR 359 -#define IMG_DYNABOMB_SZ 360 -#define IMG_DYNABOMB_XL 361 -#define IMG_PIG 362 -#define IMG_PIG_DOWN 363 -#define IMG_PIG_DOWN_MOVING 364 -#define IMG_PIG_DOWN_EATING 365 -#define IMG_PIG_UP 366 -#define IMG_PIG_UP_MOVING 367 -#define IMG_PIG_UP_EATING 368 -#define IMG_PIG_LEFT 369 -#define IMG_PIG_LEFT_MOVING 370 -#define IMG_PIG_LEFT_EATING 371 -#define IMG_PIG_RIGHT 372 -#define IMG_PIG_RIGHT_MOVING 373 -#define IMG_PIG_RIGHT_EATING 374 -#define IMG_DRAGON 375 -#define IMG_DRAGON_DOWN 376 -#define IMG_DRAGON_DOWN_MOVING 377 -#define IMG_DRAGON_DOWN_ATTACKING 378 -#define IMG_DRAGON_UP 379 -#define IMG_DRAGON_UP_MOVING 380 -#define IMG_DRAGON_UP_ATTACKING 381 -#define IMG_DRAGON_LEFT 382 -#define IMG_DRAGON_LEFT_MOVING 383 -#define IMG_DRAGON_LEFT_ATTACKING 384 -#define IMG_DRAGON_RIGHT 385 -#define IMG_DRAGON_RIGHT_MOVING 386 -#define IMG_DRAGON_RIGHT_ATTACKING 387 -#define IMG_MOLE 388 -#define IMG_MOLE_DOWN 389 -#define IMG_MOLE_DOWN_MOVING 390 -#define IMG_MOLE_DOWN_DIGGING 391 -#define IMG_MOLE_UP 392 -#define IMG_MOLE_UP_MOVING 393 -#define IMG_MOLE_UP_DIGGING 394 -#define IMG_MOLE_LEFT 395 -#define IMG_MOLE_LEFT_MOVING 396 -#define IMG_MOLE_LEFT_DIGGING 397 -#define IMG_MOLE_RIGHT 398 -#define IMG_MOLE_RIGHT_MOVING 399 -#define IMG_MOLE_RIGHT_DIGGING 400 -#define IMG_PENGUIN 401 -#define IMG_PENGUIN_DOWN 402 -#define IMG_PENGUIN_DOWN_MOVING 403 -#define IMG_PENGUIN_UP 404 -#define IMG_PENGUIN_UP_MOVING 405 -#define IMG_PENGUIN_LEFT 406 -#define IMG_PENGUIN_LEFT_MOVING 407 -#define IMG_PENGUIN_RIGHT 408 -#define IMG_PENGUIN_RIGHT_MOVING 409 -#define IMG_SATELLITE 410 -#define IMG_SATELLITE_MOVING 411 -#define IMG_FLAMES_LEFT1 412 -#define IMG_FLAMES_LEFT2 413 -#define IMG_FLAMES_LEFT3 414 -#define IMG_FLAMES_RIGHT1 415 -#define IMG_FLAMES_RIGHT2 416 -#define IMG_FLAMES_RIGHT3 417 -#define IMG_FLAMES_UP1 418 -#define IMG_FLAMES_UP2 419 -#define IMG_FLAMES_UP3 420 -#define IMG_FLAMES_DOWN1 421 -#define IMG_FLAMES_DOWN2 422 -#define IMG_FLAMES_DOWN3 423 -#define IMG_STONEBLOCK 424 -#define IMG_PLAYER1 425 -#define IMG_PLAYER1_DOWN 426 -#define IMG_PLAYER1_DOWN_MOVING 427 -#define IMG_PLAYER1_DOWN_DIGGING 428 -#define IMG_PLAYER1_DOWN_PUSHING 429 -#define IMG_PLAYER1_DOWN_SNAPPING 430 -#define IMG_PLAYER1_UP 431 -#define IMG_PLAYER1_UP_MOVING 432 -#define IMG_PLAYER1_UP_DIGGING 433 -#define IMG_PLAYER1_UP_PUSHING 434 -#define IMG_PLAYER1_UP_SNAPPING 435 -#define IMG_PLAYER1_LEFT 436 -#define IMG_PLAYER1_LEFT_MOVING 437 -#define IMG_PLAYER1_LEFT_DIGGING 438 -#define IMG_PLAYER1_LEFT_PUSHING 439 -#define IMG_PLAYER1_LEFT_SNAPPING 440 -#define IMG_PLAYER1_RIGHT 441 -#define IMG_PLAYER1_RIGHT_MOVING 442 -#define IMG_PLAYER1_RIGHT_DIGGING 443 -#define IMG_PLAYER1_RIGHT_PUSHING 444 -#define IMG_PLAYER1_RIGHT_SNAPPING 445 -#define IMG_PLAYER2 446 -#define IMG_PLAYER2_DOWN 447 -#define IMG_PLAYER2_DOWN_MOVING 448 -#define IMG_PLAYER2_DOWN_DIGGING 449 -#define IMG_PLAYER2_DOWN_PUSHING 450 -#define IMG_PLAYER2_DOWN_SNAPPING 451 -#define IMG_PLAYER2_UP 452 -#define IMG_PLAYER2_UP_MOVING 453 -#define IMG_PLAYER2_UP_DIGGING 454 -#define IMG_PLAYER2_UP_PUSHING 455 -#define IMG_PLAYER2_UP_SNAPPING 456 -#define IMG_PLAYER2_LEFT 457 -#define IMG_PLAYER2_LEFT_MOVING 458 -#define IMG_PLAYER2_LEFT_DIGGING 459 -#define IMG_PLAYER2_LEFT_PUSHING 460 -#define IMG_PLAYER2_LEFT_SNAPPING 461 -#define IMG_PLAYER2_RIGHT 462 -#define IMG_PLAYER2_RIGHT_MOVING 463 -#define IMG_PLAYER2_RIGHT_DIGGING 464 -#define IMG_PLAYER2_RIGHT_PUSHING 465 -#define IMG_PLAYER2_RIGHT_SNAPPING 466 -#define IMG_PLAYER3 467 -#define IMG_PLAYER3_DOWN 468 -#define IMG_PLAYER3_DOWN_MOVING 469 -#define IMG_PLAYER3_DOWN_DIGGING 470 -#define IMG_PLAYER3_DOWN_PUSHING 471 -#define IMG_PLAYER3_DOWN_SNAPPING 472 -#define IMG_PLAYER3_UP 473 -#define IMG_PLAYER3_UP_MOVING 474 -#define IMG_PLAYER3_UP_DIGGING 475 -#define IMG_PLAYER3_UP_PUSHING 476 -#define IMG_PLAYER3_UP_SNAPPING 477 -#define IMG_PLAYER3_LEFT 478 -#define IMG_PLAYER3_LEFT_MOVING 479 -#define IMG_PLAYER3_LEFT_DIGGING 480 -#define IMG_PLAYER3_LEFT_PUSHING 481 -#define IMG_PLAYER3_LEFT_SNAPPING 482 -#define IMG_PLAYER3_RIGHT 483 -#define IMG_PLAYER3_RIGHT_MOVING 484 -#define IMG_PLAYER3_RIGHT_DIGGING 485 -#define IMG_PLAYER3_RIGHT_PUSHING 486 -#define IMG_PLAYER3_RIGHT_SNAPPING 487 -#define IMG_PLAYER4 488 -#define IMG_PLAYER4_DOWN 489 -#define IMG_PLAYER4_DOWN_MOVING 490 -#define IMG_PLAYER4_DOWN_DIGGING 491 -#define IMG_PLAYER4_DOWN_PUSHING 492 -#define IMG_PLAYER4_DOWN_SNAPPING 493 -#define IMG_PLAYER4_UP 494 -#define IMG_PLAYER4_UP_MOVING 495 -#define IMG_PLAYER4_UP_DIGGING 496 -#define IMG_PLAYER4_UP_PUSHING 497 -#define IMG_PLAYER4_UP_SNAPPING 498 -#define IMG_PLAYER4_LEFT 499 -#define IMG_PLAYER4_LEFT_MOVING 500 -#define IMG_PLAYER4_LEFT_DIGGING 501 -#define IMG_PLAYER4_LEFT_PUSHING 502 -#define IMG_PLAYER4_LEFT_SNAPPING 503 -#define IMG_PLAYER4_RIGHT 504 -#define IMG_PLAYER4_RIGHT_MOVING 505 -#define IMG_PLAYER4_RIGHT_DIGGING 506 -#define IMG_PLAYER4_RIGHT_PUSHING 507 -#define IMG_PLAYER4_RIGHT_SNAPPING 508 -#define IMG_EXPLOSION 509 -#define IMG_TWINKLE_BLUE 510 -#define IMG_TWINKLE_WHITE 511 -#define IMG_STEELWALL_TOPLEFT 512 -#define IMG_STEELWALL_TOPRIGHT 513 -#define IMG_STEELWALL_BOTTOMLEFT 514 -#define IMG_STEELWALL_BOTTOMRIGHT 515 -#define IMG_STEELWALL_HORIZONTAL 516 -#define IMG_STEELWALL_VERTICAL 517 -#define IMG_INVISIBLE_STEELWALL_TOPLEFT 518 -#define IMG_INVISIBLE_STEELWALL_TOPRIGHT 519 -#define IMG_INVISIBLE_STEELWALL_BOTTOMLEFT 520 -#define IMG_INVISIBLE_STEELWALL_BOTTOMRIGHT 521 -#define IMG_INVISIBLE_STEELWALL_HORIZONTAL 522 -#define IMG_INVISIBLE_STEELWALL_VERTICAL 523 -#define IMG_ARROW_BLUE_LEFT 524 -#define IMG_ARROW_BLUE_RIGHT 525 -#define IMG_ARROW_BLUE_UP 526 -#define IMG_ARROW_BLUE_DOWN 527 -#define IMG_ARROW_RED_LEFT 528 -#define IMG_ARROW_RED_RIGHT 529 -#define IMG_ARROW_RED_UP 530 -#define IMG_ARROW_RED_DOWN 531 -#define IMG_BALL_RED 532 -#define IMG_BALL_BLUE 533 -#define IMG_BALL_YELLOW 534 -#define IMG_BALL_GRAY 535 -#define IMG_SCROLLBAR_BLUE 536 -#define IMG_SCROLLBAR_RED 537 -#define IMG_SCROLLBAR_GREEN 538 -#define IMG_SCROLLBAR_YELLOW 539 -#define IMG_CHAR_SPACE 540 -#define IMG_CHAR_EXCLAM 541 -#define IMG_CHAR_QUOTEDBL 542 -#define IMG_CHAR_NUMBERSIGN 543 -#define IMG_CHAR_DOLLAR 544 -#define IMG_CHAR_PROCENT 545 -#define IMG_CHAR_AMPERSAND 546 -#define IMG_CHAR_APOSTROPHE 547 -#define IMG_CHAR_PARENLEFT 548 -#define IMG_CHAR_PARENRIGHT 549 -#define IMG_CHAR_ASTERISK 550 -#define IMG_CHAR_PLUS 551 -#define IMG_CHAR_COMMA 552 -#define IMG_CHAR_MINUS 553 -#define IMG_CHAR_PERIOD 554 -#define IMG_CHAR_SLASH 555 -#define IMG_CHAR_0 556 -#define IMG_CHAR_1 557 -#define IMG_CHAR_2 558 -#define IMG_CHAR_3 559 -#define IMG_CHAR_4 560 -#define IMG_CHAR_5 561 -#define IMG_CHAR_6 562 -#define IMG_CHAR_7 563 -#define IMG_CHAR_8 564 -#define IMG_CHAR_9 565 -#define IMG_CHAR_COLON 566 -#define IMG_CHAR_SEMICOLON 567 -#define IMG_CHAR_LESS 568 -#define IMG_CHAR_EQUAL 569 -#define IMG_CHAR_GREATER 570 -#define IMG_CHAR_QUESTION 571 -#define IMG_CHAR_AT 572 -#define IMG_CHAR_A 573 -#define IMG_CHAR_B 574 -#define IMG_CHAR_C 575 -#define IMG_CHAR_D 576 -#define IMG_CHAR_E 577 -#define IMG_CHAR_F 578 -#define IMG_CHAR_G 579 -#define IMG_CHAR_H 580 -#define IMG_CHAR_I 581 -#define IMG_CHAR_J 582 -#define IMG_CHAR_K 583 -#define IMG_CHAR_L 584 -#define IMG_CHAR_M 585 -#define IMG_CHAR_N 586 -#define IMG_CHAR_O 587 -#define IMG_CHAR_P 588 -#define IMG_CHAR_Q 589 -#define IMG_CHAR_R 590 -#define IMG_CHAR_S 591 -#define IMG_CHAR_T 592 -#define IMG_CHAR_U 593 -#define IMG_CHAR_V 594 -#define IMG_CHAR_W 595 -#define IMG_CHAR_X 596 -#define IMG_CHAR_Y 597 -#define IMG_CHAR_Z 598 -#define IMG_CHAR_AE 599 -#define IMG_CHAR_OE 600 -#define IMG_CHAR_UE 601 -#define IMG_CHAR_COPYRIGHT 602 -#define IMG_CHAR_UNDERSCORE 603 -#define IMG_CHAR_EMPTY 604 -#define IMG_CHAR_DEGREE 605 -#define IMG_CHAR_TM 606 -#define IMG_CHAR_CURSOR 607 -#define IMG_CUSTOM_1 608 -#define IMG_CUSTOM_2 609 -#define IMG_CUSTOM_3 610 -#define IMG_CUSTOM_4 611 -#define IMG_CUSTOM_5 612 -#define IMG_CUSTOM_6 613 -#define IMG_CUSTOM_7 614 -#define IMG_CUSTOM_8 615 -#define IMG_CUSTOM_9 616 -#define IMG_CUSTOM_10 617 -#define IMG_CUSTOM_11 618 -#define IMG_CUSTOM_12 619 -#define IMG_CUSTOM_13 620 -#define IMG_CUSTOM_14 621 -#define IMG_CUSTOM_15 622 -#define IMG_CUSTOM_16 623 -#define IMG_CUSTOM_17 624 -#define IMG_CUSTOM_18 625 -#define IMG_CUSTOM_19 626 -#define IMG_CUSTOM_20 627 -#define IMG_CUSTOM_21 628 -#define IMG_CUSTOM_22 629 -#define IMG_CUSTOM_23 630 -#define IMG_CUSTOM_24 631 -#define IMG_CUSTOM_25 632 -#define IMG_CUSTOM_26 633 -#define IMG_CUSTOM_27 634 -#define IMG_CUSTOM_28 635 -#define IMG_CUSTOM_29 636 -#define IMG_CUSTOM_30 637 -#define IMG_CUSTOM_31 638 -#define IMG_CUSTOM_32 639 -#define IMG_CUSTOM_33 640 -#define IMG_CUSTOM_34 641 -#define IMG_CUSTOM_35 642 -#define IMG_CUSTOM_36 643 -#define IMG_CUSTOM_37 644 -#define IMG_CUSTOM_38 645 -#define IMG_CUSTOM_39 646 -#define IMG_CUSTOM_40 647 -#define IMG_CUSTOM_41 648 -#define IMG_CUSTOM_42 649 -#define IMG_CUSTOM_43 650 -#define IMG_CUSTOM_44 651 -#define IMG_CUSTOM_45 652 -#define IMG_CUSTOM_46 653 -#define IMG_CUSTOM_47 654 -#define IMG_CUSTOM_48 655 -#define IMG_CUSTOM_49 656 -#define IMG_CUSTOM_50 657 -#define IMG_CUSTOM_51 658 -#define IMG_CUSTOM_52 659 -#define IMG_CUSTOM_53 660 -#define IMG_CUSTOM_54 661 -#define IMG_CUSTOM_55 662 -#define IMG_CUSTOM_56 663 -#define IMG_CUSTOM_57 664 -#define IMG_CUSTOM_58 665 -#define IMG_CUSTOM_59 666 -#define IMG_CUSTOM_60 667 -#define IMG_CUSTOM_61 668 -#define IMG_CUSTOM_62 669 -#define IMG_CUSTOM_63 670 -#define IMG_CUSTOM_64 671 -#define IMG_CUSTOM_65 672 -#define IMG_CUSTOM_66 673 -#define IMG_CUSTOM_67 674 -#define IMG_CUSTOM_68 675 -#define IMG_CUSTOM_69 676 -#define IMG_CUSTOM_70 677 -#define IMG_CUSTOM_71 678 -#define IMG_CUSTOM_72 679 -#define IMG_CUSTOM_73 680 -#define IMG_CUSTOM_74 681 -#define IMG_CUSTOM_75 682 -#define IMG_CUSTOM_76 683 -#define IMG_CUSTOM_77 684 -#define IMG_CUSTOM_78 685 -#define IMG_CUSTOM_79 686 -#define IMG_CUSTOM_80 687 -#define IMG_CUSTOM_81 688 -#define IMG_CUSTOM_82 689 -#define IMG_CUSTOM_83 690 -#define IMG_CUSTOM_84 691 -#define IMG_CUSTOM_85 692 -#define IMG_CUSTOM_86 693 -#define IMG_CUSTOM_87 694 -#define IMG_CUSTOM_88 695 -#define IMG_CUSTOM_89 696 -#define IMG_CUSTOM_90 697 -#define IMG_CUSTOM_91 698 -#define IMG_CUSTOM_92 699 -#define IMG_CUSTOM_93 700 -#define IMG_CUSTOM_94 701 -#define IMG_CUSTOM_95 702 -#define IMG_CUSTOM_96 703 -#define IMG_CUSTOM_97 704 -#define IMG_CUSTOM_98 705 -#define IMG_CUSTOM_99 706 -#define IMG_CUSTOM_100 707 -#define IMG_CUSTOM_101 708 -#define IMG_CUSTOM_102 709 -#define IMG_CUSTOM_103 710 -#define IMG_CUSTOM_104 711 -#define IMG_CUSTOM_105 712 -#define IMG_CUSTOM_106 713 -#define IMG_CUSTOM_107 714 -#define IMG_CUSTOM_108 715 -#define IMG_CUSTOM_109 716 -#define IMG_CUSTOM_110 717 -#define IMG_CUSTOM_111 718 -#define IMG_CUSTOM_112 719 -#define IMG_CUSTOM_113 720 -#define IMG_CUSTOM_114 721 -#define IMG_CUSTOM_115 722 -#define IMG_CUSTOM_116 723 -#define IMG_CUSTOM_117 724 -#define IMG_CUSTOM_118 725 -#define IMG_CUSTOM_119 726 -#define IMG_CUSTOM_120 727 -#define IMG_CUSTOM_121 728 -#define IMG_CUSTOM_122 729 -#define IMG_CUSTOM_123 730 -#define IMG_CUSTOM_124 731 -#define IMG_CUSTOM_125 732 -#define IMG_CUSTOM_126 733 -#define IMG_CUSTOM_127 734 -#define IMG_CUSTOM_128 735 -#define IMG_GLOBAL_BORDER 736 -#define IMG_GLOBAL_DOOR 737 -#define IMG_GLOBAL_TOONS 738 -#define IMG_FONT_BIG 739 -#define IMG_FONT_MEDIUM 740 -#define IMG_FONT_SMALL 741 -#define IMG_FONT_EM 742 -#define IMG_BACKGROUND_DEFAULT 743 -#define IMG_BACKGROUND_DOOR 744 -#define IMG_BACKGROUND_MAIN 745 -#define IMG_BACKGROUND_LEVEL_SERIES 746 -#define IMG_BACKGROUND_HALL_OF_FAME 747 -#define IMG_BACKGROUND_EDITOR_SETTINGS_LEVEL 748 -#define IMG_BACKGROUND_EDITOR_SETTINGS_ELEMENT 749 -#define IMG_BACKGROUND_INFO 750 -#define IMG_BACKGROUND_SETUP 751 -#define IMG_INFO_FONT_EM_1 752 -#define IMG_INFO_FONT_EM_2 753 -#define IMG_INFO_FONT_EM_3 754 -#define IMG_INFO_FONT_EM_4 755 -#define IMG_INFO_FONT_EM_5 756 +#define IMG_SP_BUGGY_BASE_ACTIVATING 94 +#define IMG_SP_BUGGY_BASE_ACTIVE 95 +#define IMG_SP_HARD_BASE1 96 +#define IMG_SP_HARD_BASE2 97 +#define IMG_SP_HARD_BASE3 98 +#define IMG_SP_HARD_BASE4 99 +#define IMG_SP_HARD_BASE5 100 +#define IMG_SP_HARD_BASE6 101 +#define IMG_SP_EXPLOSION 102 +#define IMG_SP_EXPLOSION_INFOTRON 103 +#define IMG_SOKOBAN_OBJECT 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_WALL 110 +#define IMG_WALL_CRUMBLED 111 +#define IMG_STEELWALL 112 +#define IMG_ROCK 113 +#define IMG_ROCK_FALLING 114 +#define IMG_ROCK_MOVING_LEFT 115 +#define IMG_ROCK_MOVING_RIGHT 116 +#define IMG_EMERALD 117 +#define IMG_EMERALD_MOVING 118 +#define IMG_EMERALD_FALLING 119 +#define IMG_DIAMOND 120 +#define IMG_DIAMOND_MOVING 121 +#define IMG_DIAMOND_FALLING 122 +#define IMG_BOMB 123 +#define IMG_NUT 124 +#define IMG_NUT_FALLING 125 +#define IMG_NUT_MOVING_LEFT 126 +#define IMG_NUT_MOVING_RIGHT 127 +#define IMG_NUT_CRACKING 128 +#define IMG_DYNAMITE 129 +#define IMG_DYNAMITE_ACTIVE 130 +#define IMG_WALL_EMERALD 131 +#define IMG_WALL_DIAMOND 132 +#define IMG_BUG_RIGHT 133 +#define IMG_BUG_UP 134 +#define IMG_BUG_LEFT 135 +#define IMG_BUG_DOWN 136 +#define IMG_SPACESHIP_RIGHT 137 +#define IMG_SPACESHIP_UP 138 +#define IMG_SPACESHIP_LEFT 139 +#define IMG_SPACESHIP_DOWN 140 +#define IMG_YAMYAM 141 +#define IMG_YAMYAM_MOVING 142 +#define IMG_ROBOT 143 +#define IMG_ROBOT_MOVING 144 +#define IMG_ROBOT_WHEEL 145 +#define IMG_ROBOT_WHEEL_ACTIVE 146 +#define IMG_MAGIC_WALL 147 +#define IMG_MAGIC_WALL_ACTIVE 148 +#define IMG_MAGIC_WALL_FILLING 149 +#define IMG_MAGIC_WALL_FULL 150 +#define IMG_MAGIC_WALL_EMPTYING 151 +#define IMG_MAGIC_WALL_DEAD 152 +#define IMG_QUICKSAND_EMPTY 153 +#define IMG_QUICKSAND_FILLING 154 +#define IMG_QUICKSAND_FULL 155 +#define IMG_QUICKSAND_EMPTYING 156 +#define IMG_ACIDPOOL_TOPLEFT 157 +#define IMG_ACIDPOOL_TOPRIGHT 158 +#define IMG_ACIDPOOL_BOTTOMLEFT 159 +#define IMG_ACIDPOOL_BOTTOM 160 +#define IMG_ACIDPOOL_BOTTOMRIGHT 161 +#define IMG_ACID 162 +#define IMG_ACID_SPLASH_LEFT 163 +#define IMG_ACID_SPLASH_RIGHT 164 +#define IMG_AMOEBA_DROP 165 +#define IMG_AMOEBA_CREATING 166 +#define IMG_AMOEBA_SHRINKING 167 +#define IMG_AMOEBA_WET 168 +#define IMG_AMOEBA_WET_PART1 169 +#define IMG_AMOEBA_WET_PART2 170 +#define IMG_AMOEBA_WET_PART3 171 +#define IMG_AMOEBA_WET_PART4 172 +#define IMG_AMOEBA_DRY 173 +#define IMG_AMOEBA_DRY_PART1 174 +#define IMG_AMOEBA_DRY_PART2 175 +#define IMG_AMOEBA_DRY_PART3 176 +#define IMG_AMOEBA_DRY_PART4 177 +#define IMG_AMOEBA_FULL 178 +#define IMG_AMOEBA_FULL_PART1 179 +#define IMG_AMOEBA_FULL_PART2 180 +#define IMG_AMOEBA_FULL_PART3 181 +#define IMG_AMOEBA_FULL_PART4 182 +#define IMG_AMOEBA_DEAD 183 +#define IMG_AMOEBA_DEAD_PART1 184 +#define IMG_AMOEBA_DEAD_PART2 185 +#define IMG_AMOEBA_DEAD_PART3 186 +#define IMG_AMOEBA_DEAD_PART4 187 +#define IMG_EM_KEY1 188 +#define IMG_EM_KEY2 189 +#define IMG_EM_KEY3 190 +#define IMG_EM_KEY4 191 +#define IMG_EM_GATE1 192 +#define IMG_EM_GATE2 193 +#define IMG_EM_GATE3 194 +#define IMG_EM_GATE4 195 +#define IMG_EM_GATE1_GRAY 196 +#define IMG_EM_GATE2_GRAY 197 +#define IMG_EM_GATE3_GRAY 198 +#define IMG_EM_GATE4_GRAY 199 +#define IMG_EXIT_CLOSED 200 +#define IMG_EXIT_OPENING 201 +#define IMG_EXIT_OPEN 202 +#define IMG_BALLOON 203 +#define IMG_BALLOON_MOVING 204 +#define IMG_BALLOON_SEND_LEFT 205 +#define IMG_BALLOON_SEND_RIGHT 206 +#define IMG_BALLOON_SEND_UP 207 +#define IMG_BALLOON_SEND_DOWN 208 +#define IMG_BALLOON_SEND_ANY_DIRECTION 209 +#define IMG_SPRING 210 +#define IMG_SPRING_MOVING 211 +#define IMG_EMC_STEELWALL1 212 +#define IMG_EMC_STEELWALL2 213 +#define IMG_EMC_STEELWALL3 214 +#define IMG_EMC_STEELWALL4 215 +#define IMG_EMC_WALL_PILLAR_UPPER 216 +#define IMG_EMC_WALL_PILLAR_MIDDLE 217 +#define IMG_EMC_WALL_PILLAR_LOWER 218 +#define IMG_EMC_WALL4 219 +#define IMG_EMC_WALL5 220 +#define IMG_EMC_WALL6 221 +#define IMG_EMC_WALL7 222 +#define IMG_EMC_WALL8 223 +#define IMG_INVISIBLE_STEELWALL 224 +#define IMG_INVISIBLE_STEELWALL_ACTIVE 225 +#define IMG_INVISIBLE_WALL 226 +#define IMG_INVISIBLE_WALL_ACTIVE 227 +#define IMG_INVISIBLE_SAND 228 +#define IMG_INVISIBLE_SAND_ACTIVE 229 +#define IMG_CONVEYOR_BELT1_MIDDLE 230 +#define IMG_CONVEYOR_BELT1_MIDDLE_ACTIVE 231 +#define IMG_CONVEYOR_BELT1_LEFT 232 +#define IMG_CONVEYOR_BELT1_LEFT_ACTIVE 233 +#define IMG_CONVEYOR_BELT1_RIGHT 234 +#define IMG_CONVEYOR_BELT1_RIGHT_ACTIVE 235 +#define IMG_CONVEYOR_BELT1_SWITCH_LEFT 236 +#define IMG_CONVEYOR_BELT1_SWITCH_MIDDLE 237 +#define IMG_CONVEYOR_BELT1_SWITCH_RIGHT 238 +#define IMG_CONVEYOR_BELT2_MIDDLE 239 +#define IMG_CONVEYOR_BELT2_MIDDLE_ACTIVE 240 +#define IMG_CONVEYOR_BELT2_LEFT 241 +#define IMG_CONVEYOR_BELT2_LEFT_ACTIVE 242 +#define IMG_CONVEYOR_BELT2_RIGHT 243 +#define IMG_CONVEYOR_BELT2_RIGHT_ACTIVE 244 +#define IMG_CONVEYOR_BELT2_SWITCH_LEFT 245 +#define IMG_CONVEYOR_BELT2_SWITCH_MIDDLE 246 +#define IMG_CONVEYOR_BELT2_SWITCH_RIGHT 247 +#define IMG_CONVEYOR_BELT3_MIDDLE 248 +#define IMG_CONVEYOR_BELT3_MIDDLE_ACTIVE 249 +#define IMG_CONVEYOR_BELT3_LEFT 250 +#define IMG_CONVEYOR_BELT3_LEFT_ACTIVE 251 +#define IMG_CONVEYOR_BELT3_RIGHT 252 +#define IMG_CONVEYOR_BELT3_RIGHT_ACTIVE 253 +#define IMG_CONVEYOR_BELT3_SWITCH_LEFT 254 +#define IMG_CONVEYOR_BELT3_SWITCH_MIDDLE 255 +#define IMG_CONVEYOR_BELT3_SWITCH_RIGHT 256 +#define IMG_CONVEYOR_BELT4_MIDDLE 257 +#define IMG_CONVEYOR_BELT4_MIDDLE_ACTIVE 258 +#define IMG_CONVEYOR_BELT4_LEFT 259 +#define IMG_CONVEYOR_BELT4_LEFT_ACTIVE 260 +#define IMG_CONVEYOR_BELT4_RIGHT 261 +#define IMG_CONVEYOR_BELT4_RIGHT_ACTIVE 262 +#define IMG_CONVEYOR_BELT4_SWITCH_LEFT 263 +#define IMG_CONVEYOR_BELT4_SWITCH_MIDDLE 264 +#define IMG_CONVEYOR_BELT4_SWITCH_RIGHT 265 +#define IMG_SWITCHGATE_SWITCH_UP 266 +#define IMG_SWITCHGATE_SWITCH_DOWN 267 +#define IMG_LIGHT_SWITCH 268 +#define IMG_LIGHT_SWITCH_ACTIVE 269 +#define IMG_TIMEGATE_SWITCH 270 +#define IMG_TIMEGATE_SWITCH_ACTIVE 271 +#define IMG_ENVELOPE 272 +#define IMG_SIGN_EXCLAMATION 273 +#define IMG_SIGN_STOP 274 +#define IMG_LANDMINE 275 +#define IMG_STEELWALL_SLANTED 276 +#define IMG_EXTRA_TIME 277 +#define IMG_SHIELD_NORMAL 278 +#define IMG_SHIELD_DEADLY 279 +#define IMG_SHIELD_NORMAL_ACTIVE 280 +#define IMG_SHIELD_DEADLY_ACTIVE 281 +#define IMG_SWITCHGATE_CLOSED 282 +#define IMG_SWITCHGATE_OPENING 283 +#define IMG_SWITCHGATE_OPEN 284 +#define IMG_SWITCHGATE_CLOSING 285 +#define IMG_TIMEGATE_CLOSED 286 +#define IMG_TIMEGATE_OPENING 287 +#define IMG_TIMEGATE_OPEN 288 +#define IMG_TIMEGATE_CLOSING 289 +#define IMG_PEARL 290 +#define IMG_PEARL_BREAKING 291 +#define IMG_CRYSTAL 292 +#define IMG_WALL_PEARL 293 +#define IMG_WALL_CRYSTAL 294 +#define IMG_TUBE_RIGHT_DOWN 295 +#define IMG_TUBE_HORIZONTAL_DOWN 296 +#define IMG_TUBE_LEFT_DOWN 297 +#define IMG_TUBE_HORIZONTAL 298 +#define IMG_TUBE_VERTICAL_RIGHT 299 +#define IMG_TUBE_ALL 300 +#define IMG_TUBE_VERTICAL_LEFT 301 +#define IMG_TUBE_VERTICAL 302 +#define IMG_TUBE_RIGHT_UP 303 +#define IMG_TUBE_HORIZONTAL_UP 304 +#define IMG_TUBE_LEFT_UP 305 +#define IMG_TRAP 306 +#define IMG_TRAP_ACTIVE 307 +#define IMG_DX_SUPABOMB 308 +#define IMG_KEY1 309 +#define IMG_KEY2 310 +#define IMG_KEY3 311 +#define IMG_KEY4 312 +#define IMG_GATE1 313 +#define IMG_GATE2 314 +#define IMG_GATE3 315 +#define IMG_GATE4 316 +#define IMG_GATE1_GRAY 317 +#define IMG_GATE2_GRAY 318 +#define IMG_GATE3_GRAY 319 +#define IMG_GATE4_GRAY 320 +#define IMG_GAMEOFLIFE 321 +#define IMG_BIOMAZE 322 +#define IMG_PACMAN_RIGHT 323 +#define IMG_PACMAN_UP 324 +#define IMG_PACMAN_LEFT 325 +#define IMG_PACMAN_DOWN 326 +#define IMG_LAMP 327 +#define IMG_LAMP_ACTIVE 328 +#define IMG_TIME_ORB_FULL 329 +#define IMG_TIME_ORB_EMPTY 330 +#define IMG_EMERALD_YELLOW 331 +#define IMG_EMERALD_YELLOW_MOVING 332 +#define IMG_EMERALD_YELLOW_FALLING 333 +#define IMG_EMERALD_RED 334 +#define IMG_EMERALD_RED_MOVING 335 +#define IMG_EMERALD_RED_FALLING 336 +#define IMG_EMERALD_PURPLE 337 +#define IMG_EMERALD_PURPLE_MOVING 338 +#define IMG_EMERALD_PURPLE_FALLING 339 +#define IMG_WALL_EMERALD_YELLOW 340 +#define IMG_WALL_EMERALD_RED 341 +#define IMG_WALL_EMERALD_PURPLE 342 +#define IMG_WALL_BD_DIAMOND 343 +#define IMG_WALL_GROWING 344 +#define IMG_WALL_GROWING_XY 345 +#define IMG_WALL_GROWING_X 346 +#define IMG_WALL_GROWING_Y 347 +#define IMG_WALL_GROWING_ACTIVE_LEFT 348 +#define IMG_WALL_GROWING_ACTIVE_RIGHT 349 +#define IMG_WALL_GROWING_ACTIVE_UP 350 +#define IMG_WALL_GROWING_ACTIVE_DOWN 351 +#define IMG_BLACK_ORB 352 +#define IMG_SPEED_PILL 353 +#define IMG_DARK_YAMYAM 354 +#define IMG_DYNABOMB_ACTIVE 355 +#define IMG_DYNABOMB_PLAYER1_ACTIVE 356 +#define IMG_DYNABOMB_PLAYER2_ACTIVE 357 +#define IMG_DYNABOMB_PLAYER3_ACTIVE 358 +#define IMG_DYNABOMB_PLAYER4_ACTIVE 359 +#define IMG_DYNABOMB_NR 360 +#define IMG_DYNABOMB_SZ 361 +#define IMG_DYNABOMB_XL 362 +#define IMG_PIG 363 +#define IMG_PIG_DOWN 364 +#define IMG_PIG_DOWN_MOVING 365 +#define IMG_PIG_DOWN_EATING 366 +#define IMG_PIG_UP 367 +#define IMG_PIG_UP_MOVING 368 +#define IMG_PIG_UP_EATING 369 +#define IMG_PIG_LEFT 370 +#define IMG_PIG_LEFT_MOVING 371 +#define IMG_PIG_LEFT_EATING 372 +#define IMG_PIG_RIGHT 373 +#define IMG_PIG_RIGHT_MOVING 374 +#define IMG_PIG_RIGHT_EATING 375 +#define IMG_DRAGON 376 +#define IMG_DRAGON_DOWN 377 +#define IMG_DRAGON_DOWN_MOVING 378 +#define IMG_DRAGON_DOWN_ATTACKING 379 +#define IMG_DRAGON_UP 380 +#define IMG_DRAGON_UP_MOVING 381 +#define IMG_DRAGON_UP_ATTACKING 382 +#define IMG_DRAGON_LEFT 383 +#define IMG_DRAGON_LEFT_MOVING 384 +#define IMG_DRAGON_LEFT_ATTACKING 385 +#define IMG_DRAGON_RIGHT 386 +#define IMG_DRAGON_RIGHT_MOVING 387 +#define IMG_DRAGON_RIGHT_ATTACKING 388 +#define IMG_MOLE 389 +#define IMG_MOLE_DOWN 390 +#define IMG_MOLE_DOWN_MOVING 391 +#define IMG_MOLE_DOWN_DIGGING 392 +#define IMG_MOLE_UP 393 +#define IMG_MOLE_UP_MOVING 394 +#define IMG_MOLE_UP_DIGGING 395 +#define IMG_MOLE_LEFT 396 +#define IMG_MOLE_LEFT_MOVING 397 +#define IMG_MOLE_LEFT_DIGGING 398 +#define IMG_MOLE_RIGHT 399 +#define IMG_MOLE_RIGHT_MOVING 400 +#define IMG_MOLE_RIGHT_DIGGING 401 +#define IMG_PENGUIN 402 +#define IMG_PENGUIN_DOWN 403 +#define IMG_PENGUIN_DOWN_MOVING 404 +#define IMG_PENGUIN_UP 405 +#define IMG_PENGUIN_UP_MOVING 406 +#define IMG_PENGUIN_LEFT 407 +#define IMG_PENGUIN_LEFT_MOVING 408 +#define IMG_PENGUIN_RIGHT 409 +#define IMG_PENGUIN_RIGHT_MOVING 410 +#define IMG_SATELLITE 411 +#define IMG_SATELLITE_MOVING 412 +#define IMG_FLAMES_LEFT1 413 +#define IMG_FLAMES_LEFT2 414 +#define IMG_FLAMES_LEFT3 415 +#define IMG_FLAMES_RIGHT1 416 +#define IMG_FLAMES_RIGHT2 417 +#define IMG_FLAMES_RIGHT3 418 +#define IMG_FLAMES_UP1 419 +#define IMG_FLAMES_UP2 420 +#define IMG_FLAMES_UP3 421 +#define IMG_FLAMES_DOWN1 422 +#define IMG_FLAMES_DOWN2 423 +#define IMG_FLAMES_DOWN3 424 +#define IMG_STONEBLOCK 425 +#define IMG_PLAYER1 426 +#define IMG_PLAYER1_DOWN 427 +#define IMG_PLAYER1_DOWN_MOVING 428 +#define IMG_PLAYER1_DOWN_DIGGING 429 +#define IMG_PLAYER1_DOWN_PUSHING 430 +#define IMG_PLAYER1_DOWN_SNAPPING 431 +#define IMG_PLAYER1_UP 432 +#define IMG_PLAYER1_UP_MOVING 433 +#define IMG_PLAYER1_UP_DIGGING 434 +#define IMG_PLAYER1_UP_PUSHING 435 +#define IMG_PLAYER1_UP_SNAPPING 436 +#define IMG_PLAYER1_LEFT 437 +#define IMG_PLAYER1_LEFT_MOVING 438 +#define IMG_PLAYER1_LEFT_DIGGING 439 +#define IMG_PLAYER1_LEFT_PUSHING 440 +#define IMG_PLAYER1_LEFT_SNAPPING 441 +#define IMG_PLAYER1_RIGHT 442 +#define IMG_PLAYER1_RIGHT_MOVING 443 +#define IMG_PLAYER1_RIGHT_DIGGING 444 +#define IMG_PLAYER1_RIGHT_PUSHING 445 +#define IMG_PLAYER1_RIGHT_SNAPPING 446 +#define IMG_PLAYER2 447 +#define IMG_PLAYER2_DOWN 448 +#define IMG_PLAYER2_DOWN_MOVING 449 +#define IMG_PLAYER2_DOWN_DIGGING 450 +#define IMG_PLAYER2_DOWN_PUSHING 451 +#define IMG_PLAYER2_DOWN_SNAPPING 452 +#define IMG_PLAYER2_UP 453 +#define IMG_PLAYER2_UP_MOVING 454 +#define IMG_PLAYER2_UP_DIGGING 455 +#define IMG_PLAYER2_UP_PUSHING 456 +#define IMG_PLAYER2_UP_SNAPPING 457 +#define IMG_PLAYER2_LEFT 458 +#define IMG_PLAYER2_LEFT_MOVING 459 +#define IMG_PLAYER2_LEFT_DIGGING 460 +#define IMG_PLAYER2_LEFT_PUSHING 461 +#define IMG_PLAYER2_LEFT_SNAPPING 462 +#define IMG_PLAYER2_RIGHT 463 +#define IMG_PLAYER2_RIGHT_MOVING 464 +#define IMG_PLAYER2_RIGHT_DIGGING 465 +#define IMG_PLAYER2_RIGHT_PUSHING 466 +#define IMG_PLAYER2_RIGHT_SNAPPING 467 +#define IMG_PLAYER3 468 +#define IMG_PLAYER3_DOWN 469 +#define IMG_PLAYER3_DOWN_MOVING 470 +#define IMG_PLAYER3_DOWN_DIGGING 471 +#define IMG_PLAYER3_DOWN_PUSHING 472 +#define IMG_PLAYER3_DOWN_SNAPPING 473 +#define IMG_PLAYER3_UP 474 +#define IMG_PLAYER3_UP_MOVING 475 +#define IMG_PLAYER3_UP_DIGGING 476 +#define IMG_PLAYER3_UP_PUSHING 477 +#define IMG_PLAYER3_UP_SNAPPING 478 +#define IMG_PLAYER3_LEFT 479 +#define IMG_PLAYER3_LEFT_MOVING 480 +#define IMG_PLAYER3_LEFT_DIGGING 481 +#define IMG_PLAYER3_LEFT_PUSHING 482 +#define IMG_PLAYER3_LEFT_SNAPPING 483 +#define IMG_PLAYER3_RIGHT 484 +#define IMG_PLAYER3_RIGHT_MOVING 485 +#define IMG_PLAYER3_RIGHT_DIGGING 486 +#define IMG_PLAYER3_RIGHT_PUSHING 487 +#define IMG_PLAYER3_RIGHT_SNAPPING 488 +#define IMG_PLAYER4 489 +#define IMG_PLAYER4_DOWN 490 +#define IMG_PLAYER4_DOWN_MOVING 491 +#define IMG_PLAYER4_DOWN_DIGGING 492 +#define IMG_PLAYER4_DOWN_PUSHING 493 +#define IMG_PLAYER4_DOWN_SNAPPING 494 +#define IMG_PLAYER4_UP 495 +#define IMG_PLAYER4_UP_MOVING 496 +#define IMG_PLAYER4_UP_DIGGING 497 +#define IMG_PLAYER4_UP_PUSHING 498 +#define IMG_PLAYER4_UP_SNAPPING 499 +#define IMG_PLAYER4_LEFT 500 +#define IMG_PLAYER4_LEFT_MOVING 501 +#define IMG_PLAYER4_LEFT_DIGGING 502 +#define IMG_PLAYER4_LEFT_PUSHING 503 +#define IMG_PLAYER4_LEFT_SNAPPING 504 +#define IMG_PLAYER4_RIGHT 505 +#define IMG_PLAYER4_RIGHT_MOVING 506 +#define IMG_PLAYER4_RIGHT_DIGGING 507 +#define IMG_PLAYER4_RIGHT_PUSHING 508 +#define IMG_PLAYER4_RIGHT_SNAPPING 509 +#define IMG_EXPLOSION 510 +#define IMG_TWINKLE_BLUE 511 +#define IMG_TWINKLE_WHITE 512 +#define IMG_STEELWALL_TOPLEFT 513 +#define IMG_STEELWALL_TOPRIGHT 514 +#define IMG_STEELWALL_BOTTOMLEFT 515 +#define IMG_STEELWALL_BOTTOMRIGHT 516 +#define IMG_STEELWALL_HORIZONTAL 517 +#define IMG_STEELWALL_VERTICAL 518 +#define IMG_INVISIBLE_STEELWALL_TOPLEFT 519 +#define IMG_INVISIBLE_STEELWALL_TOPRIGHT 520 +#define IMG_INVISIBLE_STEELWALL_BOTTOMLEFT 521 +#define IMG_INVISIBLE_STEELWALL_BOTTOMRIGHT 522 +#define IMG_INVISIBLE_STEELWALL_HORIZONTAL 523 +#define IMG_INVISIBLE_STEELWALL_VERTICAL 524 +#define IMG_ARROW_BLUE_LEFT 525 +#define IMG_ARROW_BLUE_RIGHT 526 +#define IMG_ARROW_BLUE_UP 527 +#define IMG_ARROW_BLUE_DOWN 528 +#define IMG_ARROW_RED_LEFT 529 +#define IMG_ARROW_RED_RIGHT 530 +#define IMG_ARROW_RED_UP 531 +#define IMG_ARROW_RED_DOWN 532 +#define IMG_BALL_RED 533 +#define IMG_BALL_BLUE 534 +#define IMG_BALL_YELLOW 535 +#define IMG_BALL_GRAY 536 +#define IMG_SCROLLBAR_BLUE 537 +#define IMG_SCROLLBAR_RED 538 +#define IMG_SCROLLBAR_GREEN 539 +#define IMG_SCROLLBAR_YELLOW 540 +#define IMG_CHAR_SPACE 541 +#define IMG_CHAR_EXCLAM 542 +#define IMG_CHAR_QUOTEDBL 543 +#define IMG_CHAR_NUMBERSIGN 544 +#define IMG_CHAR_DOLLAR 545 +#define IMG_CHAR_PROCENT 546 +#define IMG_CHAR_AMPERSAND 547 +#define IMG_CHAR_APOSTROPHE 548 +#define IMG_CHAR_PARENLEFT 549 +#define IMG_CHAR_PARENRIGHT 550 +#define IMG_CHAR_ASTERISK 551 +#define IMG_CHAR_PLUS 552 +#define IMG_CHAR_COMMA 553 +#define IMG_CHAR_MINUS 554 +#define IMG_CHAR_PERIOD 555 +#define IMG_CHAR_SLASH 556 +#define IMG_CHAR_0 557 +#define IMG_CHAR_1 558 +#define IMG_CHAR_2 559 +#define IMG_CHAR_3 560 +#define IMG_CHAR_4 561 +#define IMG_CHAR_5 562 +#define IMG_CHAR_6 563 +#define IMG_CHAR_7 564 +#define IMG_CHAR_8 565 +#define IMG_CHAR_9 566 +#define IMG_CHAR_COLON 567 +#define IMG_CHAR_SEMICOLON 568 +#define IMG_CHAR_LESS 569 +#define IMG_CHAR_EQUAL 570 +#define IMG_CHAR_GREATER 571 +#define IMG_CHAR_QUESTION 572 +#define IMG_CHAR_AT 573 +#define IMG_CHAR_A 574 +#define IMG_CHAR_B 575 +#define IMG_CHAR_C 576 +#define IMG_CHAR_D 577 +#define IMG_CHAR_E 578 +#define IMG_CHAR_F 579 +#define IMG_CHAR_G 580 +#define IMG_CHAR_H 581 +#define IMG_CHAR_I 582 +#define IMG_CHAR_J 583 +#define IMG_CHAR_K 584 +#define IMG_CHAR_L 585 +#define IMG_CHAR_M 586 +#define IMG_CHAR_N 587 +#define IMG_CHAR_O 588 +#define IMG_CHAR_P 589 +#define IMG_CHAR_Q 590 +#define IMG_CHAR_R 591 +#define IMG_CHAR_S 592 +#define IMG_CHAR_T 593 +#define IMG_CHAR_U 594 +#define IMG_CHAR_V 595 +#define IMG_CHAR_W 596 +#define IMG_CHAR_X 597 +#define IMG_CHAR_Y 598 +#define IMG_CHAR_Z 599 +#define IMG_CHAR_AE 600 +#define IMG_CHAR_OE 601 +#define IMG_CHAR_UE 602 +#define IMG_CHAR_COPYRIGHT 603 +#define IMG_CHAR_UNDERSCORE 604 +#define IMG_CHAR_EMPTY 605 +#define IMG_CHAR_DEGREE 606 +#define IMG_CHAR_TM 607 +#define IMG_CHAR_CURSOR 608 +#define IMG_CUSTOM_1 609 +#define IMG_CUSTOM_2 610 +#define IMG_CUSTOM_3 611 +#define IMG_CUSTOM_4 612 +#define IMG_CUSTOM_5 613 +#define IMG_CUSTOM_6 614 +#define IMG_CUSTOM_7 615 +#define IMG_CUSTOM_8 616 +#define IMG_CUSTOM_9 617 +#define IMG_CUSTOM_10 618 +#define IMG_CUSTOM_11 619 +#define IMG_CUSTOM_12 620 +#define IMG_CUSTOM_13 621 +#define IMG_CUSTOM_14 622 +#define IMG_CUSTOM_15 623 +#define IMG_CUSTOM_16 624 +#define IMG_CUSTOM_17 625 +#define IMG_CUSTOM_18 626 +#define IMG_CUSTOM_19 627 +#define IMG_CUSTOM_20 628 +#define IMG_CUSTOM_21 629 +#define IMG_CUSTOM_22 630 +#define IMG_CUSTOM_23 631 +#define IMG_CUSTOM_24 632 +#define IMG_CUSTOM_25 633 +#define IMG_CUSTOM_26 634 +#define IMG_CUSTOM_27 635 +#define IMG_CUSTOM_28 636 +#define IMG_CUSTOM_29 637 +#define IMG_CUSTOM_30 638 +#define IMG_CUSTOM_31 639 +#define IMG_CUSTOM_32 640 +#define IMG_CUSTOM_33 641 +#define IMG_CUSTOM_34 642 +#define IMG_CUSTOM_35 643 +#define IMG_CUSTOM_36 644 +#define IMG_CUSTOM_37 645 +#define IMG_CUSTOM_38 646 +#define IMG_CUSTOM_39 647 +#define IMG_CUSTOM_40 648 +#define IMG_CUSTOM_41 649 +#define IMG_CUSTOM_42 650 +#define IMG_CUSTOM_43 651 +#define IMG_CUSTOM_44 652 +#define IMG_CUSTOM_45 653 +#define IMG_CUSTOM_46 654 +#define IMG_CUSTOM_47 655 +#define IMG_CUSTOM_48 656 +#define IMG_CUSTOM_49 657 +#define IMG_CUSTOM_50 658 +#define IMG_CUSTOM_51 659 +#define IMG_CUSTOM_52 660 +#define IMG_CUSTOM_53 661 +#define IMG_CUSTOM_54 662 +#define IMG_CUSTOM_55 663 +#define IMG_CUSTOM_56 664 +#define IMG_CUSTOM_57 665 +#define IMG_CUSTOM_58 666 +#define IMG_CUSTOM_59 667 +#define IMG_CUSTOM_60 668 +#define IMG_CUSTOM_61 669 +#define IMG_CUSTOM_62 670 +#define IMG_CUSTOM_63 671 +#define IMG_CUSTOM_64 672 +#define IMG_CUSTOM_65 673 +#define IMG_CUSTOM_66 674 +#define IMG_CUSTOM_67 675 +#define IMG_CUSTOM_68 676 +#define IMG_CUSTOM_69 677 +#define IMG_CUSTOM_70 678 +#define IMG_CUSTOM_71 679 +#define IMG_CUSTOM_72 680 +#define IMG_CUSTOM_73 681 +#define IMG_CUSTOM_74 682 +#define IMG_CUSTOM_75 683 +#define IMG_CUSTOM_76 684 +#define IMG_CUSTOM_77 685 +#define IMG_CUSTOM_78 686 +#define IMG_CUSTOM_79 687 +#define IMG_CUSTOM_80 688 +#define IMG_CUSTOM_81 689 +#define IMG_CUSTOM_82 690 +#define IMG_CUSTOM_83 691 +#define IMG_CUSTOM_84 692 +#define IMG_CUSTOM_85 693 +#define IMG_CUSTOM_86 694 +#define IMG_CUSTOM_87 695 +#define IMG_CUSTOM_88 696 +#define IMG_CUSTOM_89 697 +#define IMG_CUSTOM_90 698 +#define IMG_CUSTOM_91 699 +#define IMG_CUSTOM_92 700 +#define IMG_CUSTOM_93 701 +#define IMG_CUSTOM_94 702 +#define IMG_CUSTOM_95 703 +#define IMG_CUSTOM_96 704 +#define IMG_CUSTOM_97 705 +#define IMG_CUSTOM_98 706 +#define IMG_CUSTOM_99 707 +#define IMG_CUSTOM_100 708 +#define IMG_CUSTOM_101 709 +#define IMG_CUSTOM_102 710 +#define IMG_CUSTOM_103 711 +#define IMG_CUSTOM_104 712 +#define IMG_CUSTOM_105 713 +#define IMG_CUSTOM_106 714 +#define IMG_CUSTOM_107 715 +#define IMG_CUSTOM_108 716 +#define IMG_CUSTOM_109 717 +#define IMG_CUSTOM_110 718 +#define IMG_CUSTOM_111 719 +#define IMG_CUSTOM_112 720 +#define IMG_CUSTOM_113 721 +#define IMG_CUSTOM_114 722 +#define IMG_CUSTOM_115 723 +#define IMG_CUSTOM_116 724 +#define IMG_CUSTOM_117 725 +#define IMG_CUSTOM_118 726 +#define IMG_CUSTOM_119 727 +#define IMG_CUSTOM_120 728 +#define IMG_CUSTOM_121 729 +#define IMG_CUSTOM_122 730 +#define IMG_CUSTOM_123 731 +#define IMG_CUSTOM_124 732 +#define IMG_CUSTOM_125 733 +#define IMG_CUSTOM_126 734 +#define IMG_CUSTOM_127 735 +#define IMG_CUSTOM_128 736 +#define IMG_GLOBAL_BORDER 737 +#define IMG_GLOBAL_DOOR 738 +#define IMG_GLOBAL_TOONS 739 +#define IMG_FONT_BIG 740 +#define IMG_FONT_MEDIUM 741 +#define IMG_FONT_SMALL 742 +#define IMG_FONT_EM 743 +#define IMG_BACKGROUND_DEFAULT 744 +#define IMG_BACKGROUND_DOOR 745 +#define IMG_BACKGROUND_MAIN 746 +#define IMG_BACKGROUND_LEVEL_SERIES 747 +#define IMG_BACKGROUND_HALL_OF_FAME 748 +#define IMG_BACKGROUND_EDITOR_SETTINGS_LEVEL 749 +#define IMG_BACKGROUND_EDITOR_SETTINGS_ELEMENT 750 +#define IMG_BACKGROUND_INFO 751 +#define IMG_BACKGROUND_SETUP 752 +#define IMG_INFO_FONT_EM_1 753 +#define IMG_INFO_FONT_EM_2 754 +#define IMG_INFO_FONT_EM_3 755 +#define IMG_INFO_FONT_EM_4 756 +#define IMG_INFO_FONT_EM_5 757 -#define NUM_IMAGE_FILES 757 +#define NUM_IMAGE_FILES 758 #endif /* CONF_GFX_H */ diff --git a/src/conftime.h b/src/conftime.h index 5d6ab7f2..ae866ea6 100644 --- a/src/conftime.h +++ b/src/conftime.h @@ -1 +1 @@ -#define COMPILE_DATE_STRING "[2003-01-11 14:56]" +#define COMPILE_DATE_STRING "[2003-01-11 20:15]" diff --git a/src/game.c b/src/game.c index 095f635e..ea346bfd 100644 --- a/src/game.c +++ b/src/game.c @@ -172,14 +172,22 @@ struct ChangingElementInfo int base_element; int next_element; int change_delay; - void (*changer_function)(int x, int y); + void (*pre_change_function)(int x, int y); + void (*change_function)(int x, int y); + void (*post_change_function)(int x, int y); }; static struct ChangingElementInfo changing_element_list[] = { - { EL_NUT_CRACKING, EL_EMERALD, 6, NULL }, - { EL_PEARL_BREAKING, EL_EMPTY, 8, NULL }, - { EL_UNDEFINED, EL_UNDEFINED, -1, NULL } + { EL_NUT_CRACKING, EL_EMERALD, 6, NULL, NULL, NULL }, + { EL_PEARL_BREAKING, EL_EMPTY, 8, NULL, NULL, NULL }, + { EL_EXIT_OPENING, EL_EXIT_OPEN, 29, NULL, NULL, NULL }, + { EL_SWITCHGATE_OPENING, EL_SWITCHGATE_OPEN, 29, NULL, NULL, NULL }, + { EL_SWITCHGATE_CLOSING, EL_SWITCHGATE_CLOSED, 29, NULL, NULL, NULL }, + { EL_TIMEGATE_OPENING, EL_TIMEGATE_OPEN, 29, NULL, NULL, NULL }, + { EL_TIMEGATE_CLOSING, EL_TIMEGATE_CLOSED, 29, NULL, NULL, NULL }, + + { EL_UNDEFINED, EL_UNDEFINED, -1, NULL } }; static struct ChangingElementInfo changing_element[MAX_NUM_ELEMENTS]; @@ -691,7 +699,9 @@ static void InitGameEngine() changing_element[i].base_element = EL_UNDEFINED; changing_element[i].next_element = EL_UNDEFINED; changing_element[i].change_delay = -1; - changing_element[i].changer_function = NULL; + changing_element[i].pre_change_function = NULL; + changing_element[i].change_function = NULL; + changing_element[i].post_change_function = NULL; } i = 0; @@ -700,10 +710,12 @@ static void InitGameEngine() struct ChangingElementInfo *ce = &changing_element_list[i]; int element = ce->base_element; - changing_element[element].base_element = ce->base_element; - changing_element[element].next_element = ce->next_element; - changing_element[element].change_delay = ce->change_delay; - changing_element[element].changer_function = ce->changer_function; + changing_element[element].base_element = ce->base_element; + changing_element[element].next_element = ce->next_element; + changing_element[element].change_delay = ce->change_delay; + changing_element[element].pre_change_function = ce->pre_change_function; + changing_element[element].change_function = ce->change_function; + changing_element[element].post_change_function = ce->post_change_function; i++; } @@ -4639,67 +4651,109 @@ void CheckForDragon(int x, int y) } } +static void InitBuggyBase(int x, int y) +{ + int element = Feld[x][y]; + int activating_delay = FRAMES_PER_SECOND / 4; + + MovDelay[x][y] = + (element == EL_SP_BUGGY_BASE ? + 2 * FRAMES_PER_SECOND + RND(5 * FRAMES_PER_SECOND) - activating_delay : + element == EL_SP_BUGGY_BASE_ACTIVATING ? + activating_delay : + element == EL_SP_BUGGY_BASE_ACTIVE ? + 1 * FRAMES_PER_SECOND + RND(1 * FRAMES_PER_SECOND) : 1); +} + +static void WarnBuggyBase(int x, int y) +{ + int i; + static int xy[4][2] = + { + { 0, -1 }, + { -1, 0 }, + { +1, 0 }, + { 0, +1 } + }; + + for (i=0; i<4; i++) + { + int xx = x + xy[i][0], yy = y + xy[i][1]; + + if (IS_PLAYER(xx, yy)) + { + PlaySoundLevel(x, y, SND_SP_BUGGY_BASE_ACTIVE); + + break; + } + } +} + static void CheckBuggyBase(int x, int y) { int element = Feld[x][y]; if (element == EL_SP_BUGGY_BASE) { - if (!MovDelay[x][y]) /* wait some time before activating base */ - MovDelay[x][y] = 2 * FRAMES_PER_SECOND + RND(5 * FRAMES_PER_SECOND); + if (MovDelay[x][y] == 0) /* wait some time before activating base */ + { + GfxFrame[x][y] = 0; - if (MovDelay[x][y]) + InitBuggyBase(x, y); + } + + MovDelay[x][y]--; + + if (MovDelay[x][y] != 0) { - MovDelay[x][y]--; - if (MovDelay[x][y] < 5 && IN_SCR_FIELD(SCREENX(x), SCREENY(y))) - DrawGraphic(SCREENX(x), SCREENY(y), IMG_SP_BUGGY_BASE, 0); - if (MovDelay[x][y]) - return; + DrawLevelElementAnimation(x, y, element); + } + else + { + Feld[x][y] = EL_SP_BUGGY_BASE_ACTIVATING; + DrawLevelField(x, y); + } + } + else if (element == EL_SP_BUGGY_BASE_ACTIVATING) + { + if (MovDelay[x][y] == 0) /* display activation warning of buggy base */ + { + GfxFrame[x][y] = 0; + + InitBuggyBase(x, y); + } + + MovDelay[x][y]--; + if (MovDelay[x][y] != 0) + { + DrawLevelElementAnimation(x, y, element); + } + else + { Feld[x][y] = EL_SP_BUGGY_BASE_ACTIVE; + DrawLevelField(x, y); } } else if (element == EL_SP_BUGGY_BASE_ACTIVE) { - if (!MovDelay[x][y]) /* start activating buggy base */ - MovDelay[x][y] = 1 * FRAMES_PER_SECOND + RND(1 * FRAMES_PER_SECOND); - - if (MovDelay[x][y]) + if (MovDelay[x][y] == 0) /* start activating buggy base */ { - MovDelay[x][y]--; - if (MovDelay[x][y]) - { - int i; - static int xy[4][2] = - { - { 0, -1 }, - { -1, 0 }, - { +1, 0 }, - { 0, +1 } - }; - - if (IN_SCR_FIELD(SCREENX(x), SCREENY(y))) - { - int graphic = IMG_SP_BUGGY_BASE_ACTIVE; - int frame = getGraphicAnimationFrame(graphic, SimpleRND(100)); - - DrawGraphic(SCREENX(x), SCREENY(y), graphic, frame); - } + GfxFrame[x][y] = 0; - for (i=0; i<4; i++) - { - int xx = x + xy[i][0], yy = y + xy[i][1]; + InitBuggyBase(x, y); + } - if (IS_PLAYER(xx, yy)) - { - PlaySoundLevel(x, y, SND_SP_BUGGY_BASE_ACTIVE); - break; - } - } + MovDelay[x][y]--; - return; - } + if (MovDelay[x][y] != 0) + { + DrawLevelElementAnimation(x, y, element); + WarnBuggyBase(x, y); + } + else + { Feld[x][y] = EL_SP_BUGGY_BASE; DrawLevelField(x, y); } @@ -4712,15 +4766,17 @@ static void CheckTrap(int x, int y) if (element == EL_TRAP) { - if (!MovDelay[x][y]) /* wait some time before activating trap */ + if (MovDelay[x][y] == 0) /* wait some time before activating trap */ MovDelay[x][y] = 2 * FRAMES_PER_SECOND + RND(5 * FRAMES_PER_SECOND); - if (MovDelay[x][y]) - { - MovDelay[x][y]--; - if (MovDelay[x][y]) - return; + MovDelay[x][y]--; + if (MovDelay[x][y] != 0) + { + /* do nothing while waiting */ + } + else + { Feld[x][y] = EL_TRAP_ACTIVE; PlaySoundLevel(x, y, SND_TRAP_ACTIVATING); } @@ -4730,36 +4786,28 @@ static void CheckTrap(int x, int y) int delay = 4; int num_frames = 8; - if (!MovDelay[x][y]) /* start activating trap */ - MovDelay[x][y] = num_frames * delay; - - if (MovDelay[x][y]) + if (MovDelay[x][y] == 0) /* start activating trap */ { - MovDelay[x][y]--; - - if (MovDelay[x][y]) - { - if (!(MovDelay[x][y] % delay)) - { - if (IN_SCR_FIELD(SCREENX(x), SCREENY(y))) - { - int graphic = IMG_TRAP_ACTIVE; - int frame = getGraphicAnimationFrame(graphic, 31 - MovDelay[x][y]); - - DrawGraphic(SCREENX(x),SCREENY(y), graphic, frame); - DrawCrumbledSand(SCREENX(x), SCREENY(y)); - } - } + MovDelay[x][y] = num_frames * delay; + GfxFrame[x][y] = 0; + } - return; - } + MovDelay[x][y]--; + if (MovDelay[x][y] != 0) + { + if (DrawLevelElementAnimation(x, y, element)) + DrawCrumbledSand(SCREENX(x), SCREENY(y)); + } + else + { Feld[x][y] = EL_TRAP; DrawLevelField(x, y); } } } +#if 0 static void DrawBeltAnimation(int x, int y, int element) { int belt_nr = getBeltNrFromBeltActiveElement(element); @@ -4773,35 +4821,38 @@ static void DrawBeltAnimation(int x, int y, int element) PlaySoundLevelAction(x, y, SND_ACTION_ACTIVE); } } +#endif static void ChangeElement(int x, int y) { int element = Feld[x][y]; - int change_delay = changing_element[element].change_delay; - if (!MovDelay[x][y]) /* next animation frame */ + if (MovDelay[x][y] == 0) /* initialize element change */ { - MovDelay[x][y] = change_delay + 1; + MovDelay[x][y] = changing_element[element].change_delay + 1; GfxFrame[x][y] = 0; + + if (changing_element[element].pre_change_function) + changing_element[element].pre_change_function(x, y); } - if (MovDelay[x][y]) /* wait some time before next frame */ - { - MovDelay[x][y]--; + MovDelay[x][y]--; - if (MovDelay[x][y]) - { - DrawLevelElementAnimation(x, y, element); + if (MovDelay[x][y] != 0) /* continue element change */ + { + DrawLevelElementAnimation(x, y, element); - return; - } + if (changing_element[element].change_function) + changing_element[element].change_function(x, y); } + else /* finish element change */ + { + Feld[x][y] = changing_element[element].next_element; + DrawLevelField(x, y); - Feld[x][y] = changing_element[element].next_element; - DrawLevelField(x, y); - - if (changing_element[element].changer_function) - changing_element[element].changer_function(x, y); + if (changing_element[element].post_change_function) + changing_element[element].post_change_function(x, y); + } } static void PlayerActions(struct PlayerInfo *player, byte player_action) @@ -5163,8 +5214,10 @@ void GameActions() AusgangstuerPruefen(x, y); else if (element == EL_SP_EXIT_CLOSED) AusgangstuerPruefen_SP(x, y); +#if 0 else if (element == EL_EXIT_OPENING) AusgangstuerOeffnen(x, y); +#endif else if (element == EL_WALL_GROWING_ACTIVE) MauerWaechst(x, y); else if (element == EL_WALL_GROWING || @@ -5174,14 +5227,15 @@ void GameActions() MauerAbleger(x, y); else if (element == EL_FLAMES) CheckForDragon(x, y); - else if (element == EL_SP_BUGGY_BASE || element == EL_SP_BUGGY_BASE_ACTIVE) + else if (element == EL_SP_BUGGY_BASE || + element == EL_SP_BUGGY_BASE_ACTIVATING || + element == EL_SP_BUGGY_BASE_ACTIVE) CheckBuggyBase(x, y); else if (element == EL_TRAP || element == EL_TRAP_ACTIVE) CheckTrap(x, y); #if 0 else if (IS_BELT_ACTIVE(element)) DrawBeltAnimation(x, y, element); -#endif else if (element == EL_SWITCHGATE_OPENING) OpenSwitchgate(x, y); else if (element == EL_SWITCHGATE_CLOSING) @@ -5190,6 +5244,7 @@ void GameActions() OpenTimegate(x, y); else if (element == EL_TIMEGATE_CLOSING) CloseTimegate(x, y); +#endif else if (IS_AUTO_CHANGING(element)) ChangeElement(x, y); @@ -6199,6 +6254,7 @@ int DigField(struct PlayerInfo *player, case EL_TRAP: case EL_SP_BASE: case EL_SP_BUGGY_BASE: + case EL_SP_BUGGY_BASE_ACTIVATING: RemoveField(x, y); PlaySoundLevelElementAction(x, y, element, SND_ACTION_DIGGING); break; diff --git a/src/init.c b/src/init.c index 6a2777fd..c25ded77 100644 --- a/src/init.c +++ b/src/init.c @@ -878,6 +878,8 @@ static void InitGraphicInfo() new_graphic_info[i].anim_mode = ANIM_PINGPONG; else if (parameter[GFX_ARG_MODE_PINGPONG2]) new_graphic_info[i].anim_mode = ANIM_PINGPONG2; + else if (parameter[GFX_ARG_MODE_RANDOM]) + new_graphic_info[i].anim_mode = ANIM_RANDOM; else if (new_graphic_info[i].anim_frames > 1) new_graphic_info[i].anim_mode = ANIM_LOOP; else @@ -1878,6 +1880,7 @@ void InitElementProperties() EL_SAND, EL_SP_BASE, EL_SP_BUGGY_BASE, + EL_SP_BUGGY_BASE_ACTIVATING, EL_TRAP, EL_INVISIBLE_SAND, EL_INVISIBLE_SAND_ACTIVE diff --git a/src/libgame/toons.c b/src/libgame/toons.c index c067d2d4..5dc74a99 100644 --- a/src/libgame/toons.c +++ b/src/libgame/toons.c @@ -35,31 +35,37 @@ int getAnimationFrame(int num_frames, int delay, int mode, int start_frame, sync_frame += start_frame * delay; - if (mode & ANIM_LOOP) /* normal, looping animation */ + if (mode & ANIM_LOOP) /* looping animation */ { frame = (sync_frame % (delay * num_frames)) / delay; } - else if (mode & ANIM_LINEAR) /* normal, non-looping animation */ + else if (mode & ANIM_LINEAR) /* linear (non-looping) animation */ { frame = sync_frame / delay; if (frame > num_frames - 1) frame = num_frames - 1; } - else if (mode & ANIM_PINGPONG) /* use border frames once */ + else if (mode & ANIM_PINGPONG) /* oscillate (border frames once) */ { int max_anim_frames = 2 * num_frames - 2; frame = (sync_frame % (delay * max_anim_frames)) / delay; frame = (frame < num_frames ? frame : max_anim_frames - frame); } - else if (mode & ANIM_PINGPONG2) /* use border frames twice */ + else if (mode & ANIM_PINGPONG2) /* oscillate (border frames twice) */ { int max_anim_frames = 2 * num_frames; frame = (sync_frame % (delay * max_anim_frames)) / delay; frame = (frame < num_frames ? frame : max_anim_frames - frame - 1); } + else if (mode & ANIM_RANDOM) /* play frames in random order */ + { + /* note: expect different frames for the same delay cycle! */ + + frame = SimpleRND(num_frames); + } if (mode & ANIM_REVERSE) /* use reverse animation direction */ frame = num_frames - frame - 1; diff --git a/src/libgame/toons.h b/src/libgame/toons.h index 3588d7da..4ed43abe 100644 --- a/src/libgame/toons.h +++ b/src/libgame/toons.h @@ -24,6 +24,7 @@ #define ANIM_PINGPONG (1 << 2) #define ANIM_PINGPONG2 (1 << 3) #define ANIM_REVERSE (1 << 4) +#define ANIM_RANDOM (1 << 5) /* values for toon animation direction */ #define ANIMDIR_LEFT 1 diff --git a/src/main.c b/src/main.c index fc8cd040..86c98a98 100644 --- a/src/main.c +++ b/src/main.c @@ -679,19 +679,10 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = /* "real" (and therefore drawable) runtime elements */ - { "magic_wall", "-" }, - { "magic_wall", "-" }, - { "magic_wall", "-" }, /* 490 */ - { "magic_wall", "-" }, - { "wall", "-" }, - { "wall", "-" }, - { "exit", "-" }, - { "sp_terminal", "-" }, - { "sp_buggy_base", "-" }, { "key", "-" }, { "key", "-" }, + { "key", "-" }, /* 490 */ { "key", "-" }, - { "key", "-" }, /* 500 */ { "dynabomb", "-" }, { "dynabomb", "-" }, { "dynabomb", "-" }, @@ -700,29 +691,39 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = { "switchgate", "-" }, { "timegate", "-" }, { "timegate", "-" }, - { "pearl", "-" }, - { "trap", "-" }, /* 510 */ - { "murphy_clone", "-" }, - { "quicksand", "-" }, - { "magic_wall", "-" }, - { "magic_wall", "-" }, - { "amoeba", "-" }, - { "sp_exit", "-" }, + { "pearl", "-" }, /* 500 */ + { "trap", "-" }, { "wall", "-" }, - { "sand", "-" }, { "wall", "-" }, - { "conveyor_belt", "-" }, /* 520 */ + { "sand", "-" }, { "conveyor_belt", "-" }, { "conveyor_belt", "-" }, { "conveyor_belt", "-" }, { "conveyor_belt", "-" }, { "conveyor_belt", "-" }, + { "conveyor_belt", "-" }, /* 510 */ { "conveyor_belt", "-" }, { "conveyor_belt", "-" }, { "conveyor_belt", "-" }, { "conveyor_belt", "-" }, - { "conveyor_belt", "-" }, /* 530 */ { "conveyor_belt", "-" }, + { "conveyor_belt", "-" }, + { "exit", "-" }, + { "sp_exit", "-" }, + { "sp_terminal", "-" }, + { "sp_buggy_base", "-" }, /* 520 */ + { "sp_buggy_base", "-" }, + { "murphy_clone", "-" }, + { "amoeba", "-" }, + { "quicksand", "-" }, + { "magic_wall", "-" }, + { "magic_wall", "-" }, + { "magic_wall", "-" }, + { "magic_wall", "-" }, + { "magic_wall", "-" }, + { "magic_wall", "-" }, /* 530 */ + { "magic_wall", "-" }, + { "magic_wall", "-" }, { NULL, "-" } }; diff --git a/src/main.h b/src/main.h index 204f7c41..3679d550 100644 --- a/src/main.h +++ b/src/main.h @@ -693,53 +693,54 @@ /* "real" (and therefore drawable) runtime elements */ #define EL_FIRST_RUNTIME_REAL NUM_FILE_ELEMENTS -#define EL_MAGIC_WALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 0) -#define EL_BD_MAGIC_WALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 1) -#define EL_MAGIC_WALL_FULL (EL_FIRST_RUNTIME_REAL + 2) -#define EL_BD_MAGIC_WALL_FULL (EL_FIRST_RUNTIME_REAL + 3) -#define EL_MAGIC_WALL_DEAD (EL_FIRST_RUNTIME_REAL + 4) -#define EL_BD_MAGIC_WALL_DEAD (EL_FIRST_RUNTIME_REAL + 5) -#define EL_EXIT_OPENING (EL_FIRST_RUNTIME_REAL + 6) -#define EL_SP_TERMINAL_ACTIVE (EL_FIRST_RUNTIME_REAL + 7) -#define EL_SP_BUGGY_BASE_ACTIVE (EL_FIRST_RUNTIME_REAL + 8) -#define EL_EM_KEY1 (EL_FIRST_RUNTIME_REAL + 9) -#define EL_EM_KEY2 (EL_FIRST_RUNTIME_REAL + 10) -#define EL_EM_KEY3 (EL_FIRST_RUNTIME_REAL + 11) -#define EL_EM_KEY4 (EL_FIRST_RUNTIME_REAL + 12) -#define EL_DYNABOMB_PLAYER1_ACTIVE (EL_FIRST_RUNTIME_REAL + 13) -#define EL_DYNABOMB_PLAYER2_ACTIVE (EL_FIRST_RUNTIME_REAL + 14) -#define EL_DYNABOMB_PLAYER3_ACTIVE (EL_FIRST_RUNTIME_REAL + 15) -#define EL_DYNABOMB_PLAYER4_ACTIVE (EL_FIRST_RUNTIME_REAL + 16) -#define EL_SWITCHGATE_OPENING (EL_FIRST_RUNTIME_REAL + 17) -#define EL_SWITCHGATE_CLOSING (EL_FIRST_RUNTIME_REAL + 18) -#define EL_TIMEGATE_OPENING (EL_FIRST_RUNTIME_REAL + 19) -#define EL_TIMEGATE_CLOSING (EL_FIRST_RUNTIME_REAL + 20) -#define EL_PEARL_BREAKING (EL_FIRST_RUNTIME_REAL + 21) -#define EL_TRAP_ACTIVE (EL_FIRST_RUNTIME_REAL + 22) -#define EL_SP_MURPHY_CLONE (EL_FIRST_RUNTIME_REAL + 23) -#define EL_QUICKSAND_EMPTYING (EL_FIRST_RUNTIME_REAL + 24) -#define EL_MAGIC_WALL_EMPTYING (EL_FIRST_RUNTIME_REAL + 25) -#define EL_BD_MAGIC_WALL_EMPTYING (EL_FIRST_RUNTIME_REAL + 26) -#define EL_AMOEBA_DRIPPING (EL_FIRST_RUNTIME_REAL + 27) -#define EL_SP_EXIT_OPEN (EL_FIRST_RUNTIME_REAL + 28) -#define EL_INVISIBLE_STEELWALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 29) -#define EL_INVISIBLE_SAND_ACTIVE (EL_FIRST_RUNTIME_REAL + 30) -#define EL_INVISIBLE_WALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 31) -#define EL_CONVEYOR_BELT1_LEFT_ACTIVE (EL_FIRST_RUNTIME_REAL + 32) -#define EL_CONVEYOR_BELT1_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 33) -#define EL_CONVEYOR_BELT1_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 34) -#define EL_CONVEYOR_BELT2_LEFT_ACTIVE (EL_FIRST_RUNTIME_REAL + 35) -#define EL_CONVEYOR_BELT2_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 36) -#define EL_CONVEYOR_BELT2_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 37) -#define EL_CONVEYOR_BELT3_LEFT_ACTIVE (EL_FIRST_RUNTIME_REAL + 38) -#define EL_CONVEYOR_BELT3_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 39) -#define EL_CONVEYOR_BELT3_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 40) -#define EL_CONVEYOR_BELT4_LEFT_ACTIVE (EL_FIRST_RUNTIME_REAL + 41) -#define EL_CONVEYOR_BELT4_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 42) -#define EL_CONVEYOR_BELT4_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 43) +#define EL_EM_KEY1 (EL_FIRST_RUNTIME_REAL + 0) +#define EL_EM_KEY2 (EL_FIRST_RUNTIME_REAL + 1) +#define EL_EM_KEY3 (EL_FIRST_RUNTIME_REAL + 2) +#define EL_EM_KEY4 (EL_FIRST_RUNTIME_REAL + 3) +#define EL_DYNABOMB_PLAYER1_ACTIVE (EL_FIRST_RUNTIME_REAL + 4) +#define EL_DYNABOMB_PLAYER2_ACTIVE (EL_FIRST_RUNTIME_REAL + 5) +#define EL_DYNABOMB_PLAYER3_ACTIVE (EL_FIRST_RUNTIME_REAL + 6) +#define EL_DYNABOMB_PLAYER4_ACTIVE (EL_FIRST_RUNTIME_REAL + 7) +#define EL_SWITCHGATE_OPENING (EL_FIRST_RUNTIME_REAL + 8) +#define EL_SWITCHGATE_CLOSING (EL_FIRST_RUNTIME_REAL + 9) +#define EL_TIMEGATE_OPENING (EL_FIRST_RUNTIME_REAL + 10) +#define EL_TIMEGATE_CLOSING (EL_FIRST_RUNTIME_REAL + 11) +#define EL_PEARL_BREAKING (EL_FIRST_RUNTIME_REAL + 12) +#define EL_TRAP_ACTIVE (EL_FIRST_RUNTIME_REAL + 13) +#define EL_INVISIBLE_STEELWALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 14) +#define EL_INVISIBLE_WALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 15) +#define EL_INVISIBLE_SAND_ACTIVE (EL_FIRST_RUNTIME_REAL + 16) +#define EL_CONVEYOR_BELT1_LEFT_ACTIVE (EL_FIRST_RUNTIME_REAL + 17) +#define EL_CONVEYOR_BELT1_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 18) +#define EL_CONVEYOR_BELT1_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 19) +#define EL_CONVEYOR_BELT2_LEFT_ACTIVE (EL_FIRST_RUNTIME_REAL + 20) +#define EL_CONVEYOR_BELT2_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 21) +#define EL_CONVEYOR_BELT2_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 22) +#define EL_CONVEYOR_BELT3_LEFT_ACTIVE (EL_FIRST_RUNTIME_REAL + 23) +#define EL_CONVEYOR_BELT3_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 24) +#define EL_CONVEYOR_BELT3_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 25) +#define EL_CONVEYOR_BELT4_LEFT_ACTIVE (EL_FIRST_RUNTIME_REAL + 26) +#define EL_CONVEYOR_BELT4_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 27) +#define EL_CONVEYOR_BELT4_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 28) +#define EL_EXIT_OPENING (EL_FIRST_RUNTIME_REAL + 29) +#define EL_SP_EXIT_OPEN (EL_FIRST_RUNTIME_REAL + 30) +#define EL_SP_TERMINAL_ACTIVE (EL_FIRST_RUNTIME_REAL + 31) +#define EL_SP_BUGGY_BASE_ACTIVATING (EL_FIRST_RUNTIME_REAL + 32) +#define EL_SP_BUGGY_BASE_ACTIVE (EL_FIRST_RUNTIME_REAL + 33) +#define EL_SP_MURPHY_CLONE (EL_FIRST_RUNTIME_REAL + 34) +#define EL_AMOEBA_DRIPPING (EL_FIRST_RUNTIME_REAL + 35) +#define EL_QUICKSAND_EMPTYING (EL_FIRST_RUNTIME_REAL + 36) +#define EL_MAGIC_WALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 37) +#define EL_BD_MAGIC_WALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 38) +#define EL_MAGIC_WALL_FULL (EL_FIRST_RUNTIME_REAL + 39) +#define EL_BD_MAGIC_WALL_FULL (EL_FIRST_RUNTIME_REAL + 40) +#define EL_MAGIC_WALL_EMPTYING (EL_FIRST_RUNTIME_REAL + 41) +#define EL_BD_MAGIC_WALL_EMPTYING (EL_FIRST_RUNTIME_REAL + 42) +#define EL_MAGIC_WALL_DEAD (EL_FIRST_RUNTIME_REAL + 43) +#define EL_BD_MAGIC_WALL_DEAD (EL_FIRST_RUNTIME_REAL + 44) /* "unreal" (and therefore not drawable) runtime elements */ -#define EL_FIRST_RUNTIME_UNREAL (EL_FIRST_RUNTIME_REAL + 44) +#define EL_FIRST_RUNTIME_UNREAL (EL_FIRST_RUNTIME_REAL + 45) #define EL_BLOCKED (EL_FIRST_RUNTIME_UNREAL + 0) #define EL_EXPLOSION (EL_FIRST_RUNTIME_UNREAL + 1) @@ -1407,10 +1408,11 @@ #define GFX_ARG_MODE_LINEAR 10 #define GFX_ARG_MODE_PINGPONG 11 #define GFX_ARG_MODE_PINGPONG2 12 -#define GFX_ARG_MODE_REVERSE 13 -#define GFX_ARG_GLOBAL_SYNC 14 +#define GFX_ARG_MODE_RANDOM 13 +#define GFX_ARG_MODE_REVERSE 14 +#define GFX_ARG_GLOBAL_SYNC 15 -#define NUM_GFX_ARGS 15 +#define NUM_GFX_ARGS 16 #define GFX_ARG_UNDEFINED "-1000000" #define GFX_ARG_UNDEFINED_VALUE (atoi(GFX_ARG_UNDEFINED)) diff --git a/src/tape.c b/src/tape.c index 3a96d183..7543d425 100644 --- a/src/tape.c +++ b/src/tape.c @@ -682,22 +682,28 @@ void TapeQuickLoad() * tape autoplay functions * ------------------------------------------------------------------------- */ +#define MAX_NUM_AUTOPLAY_LEVELS 1000 + void AutoPlayTape() { static LevelDirTree *autoplay_leveldir = NULL; static boolean autoplay_initialized = FALSE; static int autoplay_level_nr = -1; - static int levels_played = 0; - static int levels_solved = 0; + static int num_levels_played = 0; + static int num_levels_solved = 0; + static boolean levels_failed[MAX_NUM_AUTOPLAY_LEVELS]; + int i; if (autoplay_initialized) { /* just finished auto-playing tape */ printf("%s.\n", tape.auto_play_level_solved ? "solved" : "NOT SOLVED"); - levels_played++; + num_levels_played++; if (tape.auto_play_level_solved) - levels_solved++; + num_levels_solved++; + else if (level_nr >= 0 && level_nr < MAX_NUM_AUTOPLAY_LEVELS) + levels_failed[level_nr] = TRUE; } else { @@ -731,6 +737,9 @@ void AutoPlayTape() printf_line('=', 79); printf("\n"); + for (i=0; iidentifier, levels_solved, levels_played, - levels_solved * 100 / levels_played); + printf("LEVELDIR '%s', SOLVED %d/%d (%d%%)", + autoplay_leveldir->identifier, num_levels_solved, num_levels_played, + num_levels_solved * 100 / num_levels_played); + if (num_levels_played != num_levels_solved) + { + printf(", FAILED:"); + for (i=0; i