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