X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Ftools.c;h=1762651003cd65ab3995e546b484237d09f5f997;hp=c3668807a3f9601fd34ed7a7b6dac3dd960392b7;hb=b641818c787e48bbf03ce2a0cd5b542c4c21e523;hpb=afeec80878187293b10f7dcdd6ff3c094cc97e5d diff --git a/src/tools.c b/src/tools.c index c3668807..17626510 100644 --- a/src/tools.c +++ b/src/tools.c @@ -4,7 +4,7 @@ // (c) 1995-2014 by Artsoft Entertainment // Holger Schemel // info@artsoft.org -// http://www.artsoft.org/ +// https://www.artsoft.org/ // ---------------------------------------------------------------------------- // tools.c // ============================================================================ @@ -23,8 +23,6 @@ #include "screens.h" -// select level set with EMC X11 graphics before activating EM GFX debugging -#define DEBUG_EM_GFX FALSE #define DEBUG_FRAME_TIME FALSE // tool button identifiers @@ -195,22 +193,6 @@ static char *print_if_not_empty(int element) return s; } -int correctLevelPosX_EM(int lx) -{ - lx -= 1; - lx -= (BorderElement != EL_EMPTY ? 1 : 0); - - return lx; -} - -int correctLevelPosY_EM(int ly) -{ - ly -= 1; - ly -= (BorderElement != EL_EMPTY ? 1 : 0); - - return ly; -} - int getFieldbufferOffsetX_RND(int dir, int pos) { int full_lev_fieldx = lev_fieldx + (BorderElement != EL_EMPTY ? 2 : 0); @@ -299,7 +281,7 @@ static int getLevelFromScreenY_RND(int sy) static int getLevelFromScreenX_EM(int sx) { - int level_xsize = level.native_em_level->lev->width; + int level_xsize = level.native_em_level->cav->width; int full_xsize = level_xsize * TILESIZE_VAR; sx -= (full_xsize < SXSIZE ? (SXSIZE - full_xsize) / 2 : 0); @@ -309,14 +291,12 @@ static int getLevelFromScreenX_EM(int sx) int px = sx - SX; int lx = LEVELX((px + dx) / TILESIZE_VAR); - lx = correctLevelPosX_EM(lx); - return lx; } static int getLevelFromScreenY_EM(int sy) { - int level_ysize = level.native_em_level->lev->height; + int level_ysize = level.native_em_level->cav->height; int full_ysize = level_ysize * TILESIZE_VAR; sy -= (full_ysize < SYSIZE ? (SYSIZE - full_ysize) / 2 : 0); @@ -326,8 +306,6 @@ static int getLevelFromScreenY_EM(int sy) int py = sy - SY; int ly = LEVELY((py + dy) / TILESIZE_VAR); - ly = correctLevelPosY_EM(ly); - return ly; } @@ -973,19 +951,13 @@ static void FadeExt(int fade_mask, int fade_mode, int fade_type) height = WIN_YSIZE; } - if (!setup.fade_screens || - fade_delay == 0 || - fading.fade_mode == FADE_MODE_NONE) - { - if (fade_mode == FADE_MODE_FADE_OUT) - return; - - BlitBitmap(backbuffer, window, x, y, width, height, x, y); - - redraw_mask &= ~fade_mask; + // when switching screens without fading, set fade delay to zero + if (!setup.fade_screens || fading.fade_mode == FADE_MODE_NONE) + fade_delay = 0; + // do not display black frame when fading out without fade delay + if (fade_mode == FADE_MODE_FADE_OUT && fade_delay == 0) return; - } FadeRectangle(x, y, width, height, fade_mode, fade_delay, post_delay, draw_border_function); @@ -1001,8 +973,7 @@ static void SetScreenStates_BeforeFadingIn(void) global.anim_status = global.anim_status_next; // store backbuffer with all animations that will be started after fading in - if (fade_type_skip != FADE_MODE_SKIP_FADE_IN) - PrepareFadeBitmap(DRAW_TO_FADE_TARGET); + PrepareFadeBitmap(DRAW_TO_FADE_TARGET); // set screen mode for animations back to fading global.anim_status = GAME_MODE_PSEUDO_FADING; @@ -1025,8 +996,7 @@ static void SetScreenStates_BeforeFadingOut(void) global.anim_status = GAME_MODE_PSEUDO_FADING; // store backbuffer with all animations that will be stopped for fading out - if (fade_type_skip != FADE_MODE_SKIP_FADE_OUT) - PrepareFadeBitmap(DRAW_TO_FADE_SOURCE); + PrepareFadeBitmap(DRAW_TO_FADE_SOURCE); } static void SetScreenStates_AfterFadingOut(void) @@ -1464,8 +1434,8 @@ void SetBorderElement(void) BorderElement = EL_EMPTY; - // the MM game engine does not use a visible border element - if (level.game_engine_type == GAME_ENGINE_TYPE_MM) + // only the R'n'D game engine may use an additional steelwall border + if (level.game_engine_type != GAME_ENGINE_TYPE_RND) return; for (y = 0; y < lev_fieldy && BorderElement == EL_EMPTY; y++) @@ -5738,415 +5708,257 @@ static struct Mapping_EM_to_RND_object int action; int direction; } -em_object_mapping_list[] = +em_object_mapping_list[GAME_TILE_MAX + 1] = { { - Xblank, TRUE, FALSE, + Zborder, FALSE, FALSE, EL_EMPTY, -1, -1 }, { - Xacid_splash_e, FALSE, FALSE, - EL_ACID_SPLASH_RIGHT, -1, -1 - }, - { - Xacid_splash_w, FALSE, FALSE, - EL_ACID_SPLASH_LEFT, -1, -1 + Zplayer, FALSE, FALSE, + EL_EMPTY, -1, -1 }, -#ifdef EM_ENGINE_BAD_ROLL { - Xpush_stone_e, FALSE, FALSE, - EL_ROCK, -1, MV_BIT_RIGHT + Zbug, FALSE, FALSE, + EL_EMPTY, -1, -1 }, { - Xpush_stone_w, FALSE, FALSE, - EL_ROCK, -1, MV_BIT_LEFT + Ztank, FALSE, FALSE, + EL_EMPTY, -1, -1 }, { - Xpush_nut_e, FALSE, FALSE, - EL_NUT, -1, MV_BIT_RIGHT + Zeater, FALSE, FALSE, + EL_EMPTY, -1, -1 }, { - Xpush_nut_w, FALSE, FALSE, - EL_NUT, -1, MV_BIT_LEFT + Zdynamite, FALSE, FALSE, + EL_EMPTY, -1, -1 }, { - Xpush_spring_e, FALSE, FALSE, - EL_SPRING, -1, MV_BIT_RIGHT + Zboom, FALSE, FALSE, + EL_EMPTY, -1, -1 }, + { - Xpush_spring_w, FALSE, FALSE, - EL_SPRING, -1, MV_BIT_LEFT + Xchain, FALSE, FALSE, + EL_DEFAULT, ACTION_EXPLODING, -1 }, { - Xpush_emerald_e, FALSE, FALSE, - EL_EMERALD, -1, MV_BIT_RIGHT + Xboom_bug, FALSE, FALSE, + EL_BUG, ACTION_EXPLODING, -1 }, { - Xpush_emerald_w, FALSE, FALSE, - EL_EMERALD, -1, MV_BIT_LEFT + Xboom_tank, FALSE, FALSE, + EL_SPACESHIP, ACTION_EXPLODING, -1 }, { - Xpush_diamond_e, FALSE, FALSE, - EL_DIAMOND, -1, MV_BIT_RIGHT + Xboom_android, FALSE, FALSE, + EL_EMC_ANDROID, ACTION_OTHER, -1 }, { - Xpush_diamond_w, FALSE, FALSE, - EL_DIAMOND, -1, MV_BIT_LEFT + Xboom_1, FALSE, FALSE, + EL_DEFAULT, ACTION_EXPLODING, -1 }, { - Xpush_bomb_e, FALSE, FALSE, - EL_BOMB, -1, MV_BIT_RIGHT + Xboom_2, FALSE, FALSE, + EL_DEFAULT, ACTION_EXPLODING, -1 }, + { - Xpush_bomb_w, FALSE, FALSE, - EL_BOMB, -1, MV_BIT_LEFT + Xblank, TRUE, FALSE, + EL_EMPTY, -1, -1 }, -#endif // EM_ENGINE_BAD_ROLL { - Xstone, TRUE, FALSE, - EL_ROCK, -1, -1 + Xsplash_e, FALSE, FALSE, + EL_ACID_SPLASH_RIGHT, -1, -1 }, { - Xstone_pause, FALSE, FALSE, - EL_ROCK, -1, -1 + Xsplash_w, FALSE, FALSE, + EL_ACID_SPLASH_LEFT, -1, -1 }, + { - Xstone_fall, FALSE, FALSE, - EL_ROCK, -1, -1 + Xplant, TRUE, FALSE, + EL_EMC_PLANT, -1, -1 }, { - Ystone_s, FALSE, FALSE, - EL_ROCK, ACTION_FALLING, -1 + Yplant, FALSE, FALSE, + EL_EMC_PLANT, -1, -1 }, + { - Ystone_sB, FALSE, TRUE, - EL_ROCK, ACTION_FALLING, -1 + Xacid_1, TRUE, FALSE, + EL_ACID, -1, -1 }, { - Ystone_e, FALSE, FALSE, - EL_ROCK, ACTION_MOVING, MV_BIT_RIGHT + Xacid_2, FALSE, FALSE, + EL_ACID, -1, -1 }, { - Ystone_eB, FALSE, TRUE, - EL_ROCK, ACTION_MOVING, MV_BIT_RIGHT + Xacid_3, FALSE, FALSE, + EL_ACID, -1, -1 }, { - Ystone_w, FALSE, FALSE, - EL_ROCK, ACTION_MOVING, MV_BIT_LEFT + Xacid_4, FALSE, FALSE, + EL_ACID, -1, -1 }, { - Ystone_wB, FALSE, TRUE, - EL_ROCK, ACTION_MOVING, MV_BIT_LEFT + Xacid_5, FALSE, FALSE, + EL_ACID, -1, -1 }, { - Xnut, TRUE, FALSE, - EL_NUT, -1, -1 + Xacid_6, FALSE, FALSE, + EL_ACID, -1, -1 }, { - Xnut_pause, FALSE, FALSE, - EL_NUT, -1, -1 + Xacid_7, FALSE, FALSE, + EL_ACID, -1, -1 }, { - Xnut_fall, FALSE, FALSE, - EL_NUT, -1, -1 + Xacid_8, FALSE, FALSE, + EL_ACID, -1, -1 }, + { - Ynut_s, FALSE, FALSE, - EL_NUT, ACTION_FALLING, -1 + Xfake_acid_1, TRUE, FALSE, + EL_EMC_FAKE_ACID, -1, -1 }, { - Ynut_sB, FALSE, TRUE, - EL_NUT, ACTION_FALLING, -1 + Xfake_acid_2, FALSE, FALSE, + EL_EMC_FAKE_ACID, -1, -1 }, { - Ynut_e, FALSE, FALSE, - EL_NUT, ACTION_MOVING, MV_BIT_RIGHT + Xfake_acid_3, FALSE, FALSE, + EL_EMC_FAKE_ACID, -1, -1 }, { - Ynut_eB, FALSE, TRUE, - EL_NUT, ACTION_MOVING, MV_BIT_RIGHT + Xfake_acid_4, FALSE, FALSE, + EL_EMC_FAKE_ACID, -1, -1 }, { - Ynut_w, FALSE, FALSE, - EL_NUT, ACTION_MOVING, MV_BIT_LEFT + Xfake_acid_5, FALSE, FALSE, + EL_EMC_FAKE_ACID, -1, -1 }, { - Ynut_wB, FALSE, TRUE, - EL_NUT, ACTION_MOVING, MV_BIT_LEFT + Xfake_acid_6, FALSE, FALSE, + EL_EMC_FAKE_ACID, -1, -1 }, { - Xbug_1_n, TRUE, FALSE, - EL_BUG_UP, -1, -1 + Xfake_acid_7, FALSE, FALSE, + EL_EMC_FAKE_ACID, -1, -1 }, { - Xbug_1_e, TRUE, FALSE, - EL_BUG_RIGHT, -1, -1 + Xfake_acid_8, FALSE, FALSE, + EL_EMC_FAKE_ACID, -1, -1 }, + { - Xbug_1_s, TRUE, FALSE, - EL_BUG_DOWN, -1, -1 + Xgrass, TRUE, FALSE, + EL_EMC_GRASS, -1, -1 }, { - Xbug_1_w, TRUE, FALSE, - EL_BUG_LEFT, -1, -1 + Ygrass_nB, FALSE, FALSE, + EL_EMC_GRASS, ACTION_DIGGING, MV_BIT_UP }, { - Xbug_2_n, FALSE, FALSE, - EL_BUG_UP, -1, -1 + Ygrass_eB, FALSE, FALSE, + EL_EMC_GRASS, ACTION_DIGGING, MV_BIT_RIGHT }, { - Xbug_2_e, FALSE, FALSE, - EL_BUG_RIGHT, -1, -1 + Ygrass_sB, FALSE, FALSE, + EL_EMC_GRASS, ACTION_DIGGING, MV_BIT_DOWN }, { - Xbug_2_s, FALSE, FALSE, - EL_BUG_DOWN, -1, -1 + Ygrass_wB, FALSE, FALSE, + EL_EMC_GRASS, ACTION_DIGGING, MV_BIT_LEFT }, + { - Xbug_2_w, FALSE, FALSE, - EL_BUG_LEFT, -1, -1 + Xdirt, TRUE, FALSE, + EL_SAND, -1, -1 }, { - Ybug_n, FALSE, FALSE, - EL_BUG, ACTION_MOVING, MV_BIT_UP + Ydirt_nB, FALSE, FALSE, + EL_SAND, ACTION_DIGGING, MV_BIT_UP }, { - Ybug_nB, FALSE, TRUE, - EL_BUG, ACTION_MOVING, MV_BIT_UP + Ydirt_eB, FALSE, FALSE, + EL_SAND, ACTION_DIGGING, MV_BIT_RIGHT }, { - Ybug_e, FALSE, FALSE, - EL_BUG, ACTION_MOVING, MV_BIT_RIGHT + Ydirt_sB, FALSE, FALSE, + EL_SAND, ACTION_DIGGING, MV_BIT_DOWN }, { - Ybug_eB, FALSE, TRUE, - EL_BUG, ACTION_MOVING, MV_BIT_RIGHT + Ydirt_wB, FALSE, FALSE, + EL_SAND, ACTION_DIGGING, MV_BIT_LEFT }, + { - Ybug_s, FALSE, FALSE, - EL_BUG, ACTION_MOVING, MV_BIT_DOWN + Xandroid, TRUE, FALSE, + EL_EMC_ANDROID, ACTION_ACTIVE, -1 }, { - Ybug_sB, FALSE, TRUE, - EL_BUG, ACTION_MOVING, MV_BIT_DOWN + Xandroid_1_n, FALSE, FALSE, + EL_EMC_ANDROID, ACTION_ACTIVE, MV_BIT_UP }, { - Ybug_w, FALSE, FALSE, - EL_BUG, ACTION_MOVING, MV_BIT_LEFT + Xandroid_2_n, FALSE, FALSE, + EL_EMC_ANDROID, ACTION_ACTIVE, MV_BIT_UP }, { - Ybug_wB, FALSE, TRUE, - EL_BUG, ACTION_MOVING, MV_BIT_LEFT + Xandroid_1_e, FALSE, FALSE, + EL_EMC_ANDROID, ACTION_ACTIVE, MV_BIT_RIGHT }, { - Ybug_w_n, FALSE, FALSE, - EL_BUG, ACTION_TURNING_FROM_LEFT, MV_BIT_UP + Xandroid_2_e, FALSE, FALSE, + EL_EMC_ANDROID, ACTION_ACTIVE, MV_BIT_RIGHT }, { - Ybug_n_e, FALSE, FALSE, - EL_BUG, ACTION_TURNING_FROM_UP, MV_BIT_RIGHT + Xandroid_1_w, FALSE, FALSE, + EL_EMC_ANDROID, ACTION_ACTIVE, MV_BIT_LEFT }, { - Ybug_e_s, FALSE, FALSE, - EL_BUG, ACTION_TURNING_FROM_RIGHT, MV_BIT_DOWN + Xandroid_2_w, FALSE, FALSE, + EL_EMC_ANDROID, ACTION_ACTIVE, MV_BIT_LEFT }, { - Ybug_s_w, FALSE, FALSE, - EL_BUG, ACTION_TURNING_FROM_DOWN, MV_BIT_LEFT + Xandroid_1_s, FALSE, FALSE, + EL_EMC_ANDROID, ACTION_ACTIVE, MV_BIT_DOWN }, { - Ybug_e_n, FALSE, FALSE, - EL_BUG, ACTION_TURNING_FROM_RIGHT, MV_BIT_UP + Xandroid_2_s, FALSE, FALSE, + EL_EMC_ANDROID, ACTION_ACTIVE, MV_BIT_DOWN }, { - Ybug_s_e, FALSE, FALSE, - EL_BUG, ACTION_TURNING_FROM_DOWN, MV_BIT_RIGHT + Yandroid_n, FALSE, FALSE, + EL_EMC_ANDROID, ACTION_MOVING, MV_BIT_UP }, { - Ybug_w_s, FALSE, FALSE, - EL_BUG, ACTION_TURNING_FROM_LEFT, MV_BIT_DOWN + Yandroid_nB, FALSE, TRUE, + EL_EMC_ANDROID, ACTION_MOVING, MV_BIT_UP }, { - Ybug_n_w, FALSE, FALSE, - EL_BUG, ACTION_TURNING_FROM_UP, MV_BIT_LEFT + Yandroid_ne, FALSE, FALSE, + EL_EMC_ANDROID, ACTION_GROWING, MV_BIT_UPRIGHT }, { - Ybug_stone, FALSE, FALSE, - EL_BUG, ACTION_SMASHED_BY_ROCK, -1 + Yandroid_neB, FALSE, TRUE, + EL_EMC_ANDROID, ACTION_SHRINKING, MV_BIT_UPRIGHT }, { - Ybug_spring, FALSE, FALSE, - EL_BUG, ACTION_SMASHED_BY_SPRING, -1 + Yandroid_e, FALSE, FALSE, + EL_EMC_ANDROID, ACTION_MOVING, MV_BIT_RIGHT }, { - Xtank_1_n, TRUE, FALSE, - EL_SPACESHIP_UP, -1, -1 + Yandroid_eB, FALSE, TRUE, + EL_EMC_ANDROID, ACTION_MOVING, MV_BIT_RIGHT }, { - Xtank_1_e, TRUE, FALSE, - EL_SPACESHIP_RIGHT, -1, -1 - }, - { - Xtank_1_s, TRUE, FALSE, - EL_SPACESHIP_DOWN, -1, -1 - }, - { - Xtank_1_w, TRUE, FALSE, - EL_SPACESHIP_LEFT, -1, -1 - }, - { - Xtank_2_n, FALSE, FALSE, - EL_SPACESHIP_UP, -1, -1 - }, - { - Xtank_2_e, FALSE, FALSE, - EL_SPACESHIP_RIGHT, -1, -1 - }, - { - Xtank_2_s, FALSE, FALSE, - EL_SPACESHIP_DOWN, -1, -1 - }, - { - Xtank_2_w, FALSE, FALSE, - EL_SPACESHIP_LEFT, -1, -1 - }, - { - Ytank_n, FALSE, FALSE, - EL_SPACESHIP, ACTION_MOVING, MV_BIT_UP - }, - { - Ytank_nB, FALSE, TRUE, - EL_SPACESHIP, ACTION_MOVING, MV_BIT_UP - }, - { - Ytank_e, FALSE, FALSE, - EL_SPACESHIP, ACTION_MOVING, MV_BIT_RIGHT - }, - { - Ytank_eB, FALSE, TRUE, - EL_SPACESHIP, ACTION_MOVING, MV_BIT_RIGHT - }, - { - Ytank_s, FALSE, FALSE, - EL_SPACESHIP, ACTION_MOVING, MV_BIT_DOWN - }, - { - Ytank_sB, FALSE, TRUE, - EL_SPACESHIP, ACTION_MOVING, MV_BIT_DOWN - }, - { - Ytank_w, FALSE, FALSE, - EL_SPACESHIP, ACTION_MOVING, MV_BIT_LEFT - }, - { - Ytank_wB, FALSE, TRUE, - EL_SPACESHIP, ACTION_MOVING, MV_BIT_LEFT - }, - { - Ytank_w_n, FALSE, FALSE, - EL_SPACESHIP, ACTION_TURNING_FROM_LEFT, MV_BIT_UP - }, - { - Ytank_n_e, FALSE, FALSE, - EL_SPACESHIP, ACTION_TURNING_FROM_UP, MV_BIT_RIGHT - }, - { - Ytank_e_s, FALSE, FALSE, - EL_SPACESHIP, ACTION_TURNING_FROM_RIGHT, MV_BIT_DOWN - }, - { - Ytank_s_w, FALSE, FALSE, - EL_SPACESHIP, ACTION_TURNING_FROM_DOWN, MV_BIT_LEFT - }, - { - Ytank_e_n, FALSE, FALSE, - EL_SPACESHIP, ACTION_TURNING_FROM_RIGHT, MV_BIT_UP - }, - { - Ytank_s_e, FALSE, FALSE, - EL_SPACESHIP, ACTION_TURNING_FROM_DOWN, MV_BIT_RIGHT - }, - { - Ytank_w_s, FALSE, FALSE, - EL_SPACESHIP, ACTION_TURNING_FROM_LEFT, MV_BIT_DOWN - }, - { - Ytank_n_w, FALSE, FALSE, - EL_SPACESHIP, ACTION_TURNING_FROM_UP, MV_BIT_LEFT - }, - { - Ytank_stone, FALSE, FALSE, - EL_SPACESHIP, ACTION_SMASHED_BY_ROCK, -1 - }, - { - Ytank_spring, FALSE, FALSE, - EL_SPACESHIP, ACTION_SMASHED_BY_SPRING, -1 - }, - { - Xandroid, TRUE, FALSE, - EL_EMC_ANDROID, ACTION_ACTIVE, -1 - }, - { - Xandroid_1_n, FALSE, FALSE, - EL_EMC_ANDROID, ACTION_ACTIVE, MV_BIT_UP - }, - { - Xandroid_2_n, FALSE, FALSE, - EL_EMC_ANDROID, ACTION_ACTIVE, MV_BIT_UP - }, - { - Xandroid_1_e, FALSE, FALSE, - EL_EMC_ANDROID, ACTION_ACTIVE, MV_BIT_RIGHT - }, - { - Xandroid_2_e, FALSE, FALSE, - EL_EMC_ANDROID, ACTION_ACTIVE, MV_BIT_RIGHT - }, - { - Xandroid_1_w, FALSE, FALSE, - EL_EMC_ANDROID, ACTION_ACTIVE, MV_BIT_LEFT - }, - { - Xandroid_2_w, FALSE, FALSE, - EL_EMC_ANDROID, ACTION_ACTIVE, MV_BIT_LEFT - }, - { - Xandroid_1_s, FALSE, FALSE, - EL_EMC_ANDROID, ACTION_ACTIVE, MV_BIT_DOWN - }, - { - Xandroid_2_s, FALSE, FALSE, - EL_EMC_ANDROID, ACTION_ACTIVE, MV_BIT_DOWN - }, - { - Yandroid_n, FALSE, FALSE, - EL_EMC_ANDROID, ACTION_MOVING, MV_BIT_UP - }, - { - Yandroid_nB, FALSE, TRUE, - EL_EMC_ANDROID, ACTION_MOVING, MV_BIT_UP - }, - { - Yandroid_ne, FALSE, FALSE, - EL_EMC_ANDROID, ACTION_GROWING, MV_BIT_UPRIGHT - }, - { - Yandroid_neB, FALSE, TRUE, - EL_EMC_ANDROID, ACTION_SHRINKING, MV_BIT_UPRIGHT - }, - { - Yandroid_e, FALSE, FALSE, - EL_EMC_ANDROID, ACTION_MOVING, MV_BIT_RIGHT - }, - { - Yandroid_eB, FALSE, TRUE, - EL_EMC_ANDROID, ACTION_MOVING, MV_BIT_RIGHT - }, - { - Yandroid_se, FALSE, FALSE, - EL_EMC_ANDROID, ACTION_GROWING, MV_BIT_DOWNRIGHT + Yandroid_se, FALSE, FALSE, + EL_EMC_ANDROID, ACTION_GROWING, MV_BIT_DOWNRIGHT }, { Yandroid_seB, FALSE, TRUE, @@ -6184,66 +5996,7 @@ em_object_mapping_list[] = Yandroid_nwB, FALSE, TRUE, EL_EMC_ANDROID, ACTION_SHRINKING, MV_BIT_UPLEFT }, - { - Xspring, TRUE, FALSE, - EL_SPRING, -1, -1 - }, - { - Xspring_pause, FALSE, FALSE, - EL_SPRING, -1, -1 - }, - { - Xspring_e, FALSE, FALSE, - EL_SPRING, -1, -1 - }, - { - Xspring_w, FALSE, FALSE, - EL_SPRING, -1, -1 - }, - { - Xspring_fall, FALSE, FALSE, - EL_SPRING, -1, -1 - }, - { - Yspring_s, FALSE, FALSE, - EL_SPRING, ACTION_FALLING, -1 - }, - { - Yspring_sB, FALSE, TRUE, - EL_SPRING, ACTION_FALLING, -1 - }, - { - Yspring_e, FALSE, FALSE, - EL_SPRING, ACTION_MOVING, MV_BIT_RIGHT - }, - { - Yspring_eB, FALSE, TRUE, - EL_SPRING, ACTION_MOVING, MV_BIT_RIGHT - }, - { - Yspring_w, FALSE, FALSE, - EL_SPRING, ACTION_MOVING, MV_BIT_LEFT - }, - { - Yspring_wB, FALSE, TRUE, - EL_SPRING, ACTION_MOVING, MV_BIT_LEFT - }, - { - Yspring_alien_e, FALSE, FALSE, - EL_SPRING, ACTION_EATING, MV_BIT_RIGHT - }, - { - Yspring_alien_eB, FALSE, TRUE, - EL_SPRING, ACTION_EATING, MV_BIT_RIGHT - }, - { - Yspring_alien_w, FALSE, FALSE, - EL_SPRING, ACTION_EATING, MV_BIT_LEFT - }, - { - Yspring_alien_wB, FALSE, TRUE, - EL_SPRING, ACTION_EATING, MV_BIT_LEFT - }, + { Xeater_n, TRUE, FALSE, EL_YAMYAM_UP, -1, -1 @@ -6300,6 +6053,7 @@ em_object_mapping_list[] = Yeater_spring, FALSE, FALSE, EL_YAMYAM, ACTION_SMASHED_BY_SPRING, -1 }, + { Xalien, TRUE, FALSE, EL_ROBOT, -1, -1 @@ -6348,42 +6102,253 @@ em_object_mapping_list[] = Yalien_spring, FALSE, FALSE, EL_ROBOT, ACTION_SMASHED_BY_SPRING, -1 }, + { - Xemerald, TRUE, FALSE, - EL_EMERALD, -1, -1 + Xbug_1_n, TRUE, FALSE, + EL_BUG_UP, -1, -1 }, { - Xemerald_pause, FALSE, FALSE, - EL_EMERALD, -1, -1 + Xbug_1_e, TRUE, FALSE, + EL_BUG_RIGHT, -1, -1 }, { - Xemerald_fall, FALSE, FALSE, - EL_EMERALD, -1, -1 + Xbug_1_s, TRUE, FALSE, + EL_BUG_DOWN, -1, -1 }, { - Xemerald_shine, FALSE, FALSE, - EL_EMERALD, ACTION_TWINKLING, -1 + Xbug_1_w, TRUE, FALSE, + EL_BUG_LEFT, -1, -1 }, { - Yemerald_s, FALSE, FALSE, - EL_EMERALD, ACTION_FALLING, -1 + Xbug_2_n, FALSE, FALSE, + EL_BUG_UP, -1, -1 }, { - Yemerald_sB, FALSE, TRUE, - EL_EMERALD, ACTION_FALLING, -1 + Xbug_2_e, FALSE, FALSE, + EL_BUG_RIGHT, -1, -1 }, { - Yemerald_e, FALSE, FALSE, - EL_EMERALD, ACTION_MOVING, MV_BIT_RIGHT + Xbug_2_s, FALSE, FALSE, + EL_BUG_DOWN, -1, -1 }, { - Yemerald_eB, FALSE, TRUE, - EL_EMERALD, ACTION_MOVING, MV_BIT_RIGHT + Xbug_2_w, FALSE, FALSE, + EL_BUG_LEFT, -1, -1 }, { - Yemerald_w, FALSE, FALSE, - EL_EMERALD, ACTION_MOVING, MV_BIT_LEFT - }, + Ybug_n, FALSE, FALSE, + EL_BUG, ACTION_MOVING, MV_BIT_UP + }, + { + Ybug_nB, FALSE, TRUE, + EL_BUG, ACTION_MOVING, MV_BIT_UP + }, + { + Ybug_e, FALSE, FALSE, + EL_BUG, ACTION_MOVING, MV_BIT_RIGHT + }, + { + Ybug_eB, FALSE, TRUE, + EL_BUG, ACTION_MOVING, MV_BIT_RIGHT + }, + { + Ybug_s, FALSE, FALSE, + EL_BUG, ACTION_MOVING, MV_BIT_DOWN + }, + { + Ybug_sB, FALSE, TRUE, + EL_BUG, ACTION_MOVING, MV_BIT_DOWN + }, + { + Ybug_w, FALSE, FALSE, + EL_BUG, ACTION_MOVING, MV_BIT_LEFT + }, + { + Ybug_wB, FALSE, TRUE, + EL_BUG, ACTION_MOVING, MV_BIT_LEFT + }, + { + Ybug_w_n, FALSE, FALSE, + EL_BUG, ACTION_TURNING_FROM_LEFT, MV_BIT_UP + }, + { + Ybug_n_e, FALSE, FALSE, + EL_BUG, ACTION_TURNING_FROM_UP, MV_BIT_RIGHT + }, + { + Ybug_e_s, FALSE, FALSE, + EL_BUG, ACTION_TURNING_FROM_RIGHT, MV_BIT_DOWN + }, + { + Ybug_s_w, FALSE, FALSE, + EL_BUG, ACTION_TURNING_FROM_DOWN, MV_BIT_LEFT + }, + { + Ybug_e_n, FALSE, FALSE, + EL_BUG, ACTION_TURNING_FROM_RIGHT, MV_BIT_UP + }, + { + Ybug_s_e, FALSE, FALSE, + EL_BUG, ACTION_TURNING_FROM_DOWN, MV_BIT_RIGHT + }, + { + Ybug_w_s, FALSE, FALSE, + EL_BUG, ACTION_TURNING_FROM_LEFT, MV_BIT_DOWN + }, + { + Ybug_n_w, FALSE, FALSE, + EL_BUG, ACTION_TURNING_FROM_UP, MV_BIT_LEFT + }, + { + Ybug_stone, FALSE, FALSE, + EL_BUG, ACTION_SMASHED_BY_ROCK, -1 + }, + { + Ybug_spring, FALSE, FALSE, + EL_BUG, ACTION_SMASHED_BY_SPRING, -1 + }, + + { + Xtank_1_n, TRUE, FALSE, + EL_SPACESHIP_UP, -1, -1 + }, + { + Xtank_1_e, TRUE, FALSE, + EL_SPACESHIP_RIGHT, -1, -1 + }, + { + Xtank_1_s, TRUE, FALSE, + EL_SPACESHIP_DOWN, -1, -1 + }, + { + Xtank_1_w, TRUE, FALSE, + EL_SPACESHIP_LEFT, -1, -1 + }, + { + Xtank_2_n, FALSE, FALSE, + EL_SPACESHIP_UP, -1, -1 + }, + { + Xtank_2_e, FALSE, FALSE, + EL_SPACESHIP_RIGHT, -1, -1 + }, + { + Xtank_2_s, FALSE, FALSE, + EL_SPACESHIP_DOWN, -1, -1 + }, + { + Xtank_2_w, FALSE, FALSE, + EL_SPACESHIP_LEFT, -1, -1 + }, + { + Ytank_n, FALSE, FALSE, + EL_SPACESHIP, ACTION_MOVING, MV_BIT_UP + }, + { + Ytank_nB, FALSE, TRUE, + EL_SPACESHIP, ACTION_MOVING, MV_BIT_UP + }, + { + Ytank_e, FALSE, FALSE, + EL_SPACESHIP, ACTION_MOVING, MV_BIT_RIGHT + }, + { + Ytank_eB, FALSE, TRUE, + EL_SPACESHIP, ACTION_MOVING, MV_BIT_RIGHT + }, + { + Ytank_s, FALSE, FALSE, + EL_SPACESHIP, ACTION_MOVING, MV_BIT_DOWN + }, + { + Ytank_sB, FALSE, TRUE, + EL_SPACESHIP, ACTION_MOVING, MV_BIT_DOWN + }, + { + Ytank_w, FALSE, FALSE, + EL_SPACESHIP, ACTION_MOVING, MV_BIT_LEFT + }, + { + Ytank_wB, FALSE, TRUE, + EL_SPACESHIP, ACTION_MOVING, MV_BIT_LEFT + }, + { + Ytank_w_n, FALSE, FALSE, + EL_SPACESHIP, ACTION_TURNING_FROM_LEFT, MV_BIT_UP + }, + { + Ytank_n_e, FALSE, FALSE, + EL_SPACESHIP, ACTION_TURNING_FROM_UP, MV_BIT_RIGHT + }, + { + Ytank_e_s, FALSE, FALSE, + EL_SPACESHIP, ACTION_TURNING_FROM_RIGHT, MV_BIT_DOWN + }, + { + Ytank_s_w, FALSE, FALSE, + EL_SPACESHIP, ACTION_TURNING_FROM_DOWN, MV_BIT_LEFT + }, + { + Ytank_e_n, FALSE, FALSE, + EL_SPACESHIP, ACTION_TURNING_FROM_RIGHT, MV_BIT_UP + }, + { + Ytank_s_e, FALSE, FALSE, + EL_SPACESHIP, ACTION_TURNING_FROM_DOWN, MV_BIT_RIGHT + }, + { + Ytank_w_s, FALSE, FALSE, + EL_SPACESHIP, ACTION_TURNING_FROM_LEFT, MV_BIT_DOWN + }, + { + Ytank_n_w, FALSE, FALSE, + EL_SPACESHIP, ACTION_TURNING_FROM_UP, MV_BIT_LEFT + }, + { + Ytank_stone, FALSE, FALSE, + EL_SPACESHIP, ACTION_SMASHED_BY_ROCK, -1 + }, + { + Ytank_spring, FALSE, FALSE, + EL_SPACESHIP, ACTION_SMASHED_BY_SPRING, -1 + }, + + { + Xemerald, TRUE, FALSE, + EL_EMERALD, -1, -1 + }, + { + Xemerald_pause, FALSE, FALSE, + EL_EMERALD, -1, -1 + }, + { + Xemerald_fall, FALSE, FALSE, + EL_EMERALD, -1, -1 + }, + { + Xemerald_shine, FALSE, FALSE, + EL_EMERALD, ACTION_TWINKLING, -1 + }, + { + Yemerald_s, FALSE, FALSE, + EL_EMERALD, ACTION_FALLING, -1 + }, + { + Yemerald_sB, FALSE, TRUE, + EL_EMERALD, ACTION_FALLING, -1 + }, + { + Yemerald_e, FALSE, FALSE, + EL_EMERALD, ACTION_MOVING, MV_BIT_RIGHT + }, + { + Yemerald_eB, FALSE, TRUE, + EL_EMERALD, ACTION_MOVING, MV_BIT_RIGHT + }, + { + Yemerald_w, FALSE, FALSE, + EL_EMERALD, ACTION_MOVING, MV_BIT_LEFT + }, { Yemerald_wB, FALSE, TRUE, EL_EMERALD, ACTION_MOVING, MV_BIT_LEFT @@ -6392,10 +6357,7 @@ em_object_mapping_list[] = Yemerald_blank, FALSE, FALSE, EL_EMERALD, ACTION_COLLECTING, -1 }, - { - Ynut_stone, FALSE, FALSE, - EL_NUT, ACTION_BREAKING, -1 - }, + { Xdiamond, TRUE, FALSE, EL_DIAMOND, -1, -1 @@ -6444,38 +6406,44 @@ em_object_mapping_list[] = Ydiamond_stone, FALSE, FALSE, EL_DIAMOND, ACTION_SMASHED_BY_ROCK, -1 }, + { - Xdrip_fall, TRUE, FALSE, - EL_AMOEBA_DROP, -1, -1 + Xstone, TRUE, FALSE, + EL_ROCK, -1, -1 }, { - Xdrip_stretch, FALSE, FALSE, - EL_AMOEBA_DROP, ACTION_FALLING, -1 + Xstone_pause, FALSE, FALSE, + EL_ROCK, -1, -1 }, { - Xdrip_stretchB, FALSE, TRUE, - EL_AMOEBA_DROP, ACTION_FALLING, -1 + Xstone_fall, FALSE, FALSE, + EL_ROCK, -1, -1 }, { - Xdrip, FALSE, FALSE, - EL_AMOEBA_DROP, ACTION_GROWING, -1 + Ystone_s, FALSE, FALSE, + EL_ROCK, ACTION_FALLING, -1 }, { - Ydrip_1_s, FALSE, FALSE, - EL_AMOEBA_DROP, ACTION_FALLING, -1 + Ystone_sB, FALSE, TRUE, + EL_ROCK, ACTION_FALLING, -1 }, { - Ydrip_1_sB, FALSE, TRUE, - EL_AMOEBA_DROP, ACTION_FALLING, -1 + Ystone_e, FALSE, FALSE, + EL_ROCK, ACTION_MOVING, MV_BIT_RIGHT }, { - Ydrip_2_s, FALSE, FALSE, - EL_AMOEBA_DROP, ACTION_FALLING, -1 + Ystone_eB, FALSE, TRUE, + EL_ROCK, ACTION_MOVING, MV_BIT_RIGHT }, { - Ydrip_2_sB, FALSE, TRUE, - EL_AMOEBA_DROP, ACTION_FALLING, -1 + Ystone_w, FALSE, FALSE, + EL_ROCK, ACTION_MOVING, MV_BIT_LEFT + }, + { + Ystone_wB, FALSE, TRUE, + EL_ROCK, ACTION_MOVING, MV_BIT_LEFT }, + { Xbomb, TRUE, FALSE, EL_BOMB, -1, -1 @@ -6516,258 +6484,216 @@ em_object_mapping_list[] = Ybomb_blank, FALSE, FALSE, EL_BOMB, ACTION_ACTIVATING, -1 }, + { - Xballoon, TRUE, FALSE, - EL_BALLOON, -1, -1 - }, - { - Yballoon_n, FALSE, FALSE, - EL_BALLOON, ACTION_MOVING, MV_BIT_UP - }, - { - Yballoon_nB, FALSE, TRUE, - EL_BALLOON, ACTION_MOVING, MV_BIT_UP - }, - { - Yballoon_e, FALSE, FALSE, - EL_BALLOON, ACTION_MOVING, MV_BIT_RIGHT - }, - { - Yballoon_eB, FALSE, TRUE, - EL_BALLOON, ACTION_MOVING, MV_BIT_RIGHT - }, - { - Yballoon_s, FALSE, FALSE, - EL_BALLOON, ACTION_MOVING, MV_BIT_DOWN - }, - { - Yballoon_sB, FALSE, TRUE, - EL_BALLOON, ACTION_MOVING, MV_BIT_DOWN - }, - { - Yballoon_w, FALSE, FALSE, - EL_BALLOON, ACTION_MOVING, MV_BIT_LEFT - }, - { - Yballoon_wB, FALSE, TRUE, - EL_BALLOON, ACTION_MOVING, MV_BIT_LEFT - }, - { - Xgrass, TRUE, FALSE, - EL_EMC_GRASS, -1, -1 - }, - { - Ygrass_nB, FALSE, FALSE, - EL_EMC_GRASS, ACTION_DIGGING, MV_BIT_UP - }, - { - Ygrass_eB, FALSE, FALSE, - EL_EMC_GRASS, ACTION_DIGGING, MV_BIT_RIGHT - }, - { - Ygrass_sB, FALSE, FALSE, - EL_EMC_GRASS, ACTION_DIGGING, MV_BIT_DOWN + Xnut, TRUE, FALSE, + EL_NUT, -1, -1 }, { - Ygrass_wB, FALSE, FALSE, - EL_EMC_GRASS, ACTION_DIGGING, MV_BIT_LEFT + Xnut_pause, FALSE, FALSE, + EL_NUT, -1, -1 }, { - Xdirt, TRUE, FALSE, - EL_SAND, -1, -1 + Xnut_fall, FALSE, FALSE, + EL_NUT, -1, -1 }, { - Ydirt_nB, FALSE, FALSE, - EL_SAND, ACTION_DIGGING, MV_BIT_UP + Ynut_s, FALSE, FALSE, + EL_NUT, ACTION_FALLING, -1 }, { - Ydirt_eB, FALSE, FALSE, - EL_SAND, ACTION_DIGGING, MV_BIT_RIGHT + Ynut_sB, FALSE, TRUE, + EL_NUT, ACTION_FALLING, -1 }, { - Ydirt_sB, FALSE, FALSE, - EL_SAND, ACTION_DIGGING, MV_BIT_DOWN + Ynut_e, FALSE, FALSE, + EL_NUT, ACTION_MOVING, MV_BIT_RIGHT }, { - Ydirt_wB, FALSE, FALSE, - EL_SAND, ACTION_DIGGING, MV_BIT_LEFT + Ynut_eB, FALSE, TRUE, + EL_NUT, ACTION_MOVING, MV_BIT_RIGHT }, { - Xacid_ne, TRUE, FALSE, - EL_ACID_POOL_TOPRIGHT, -1, -1 + Ynut_w, FALSE, FALSE, + EL_NUT, ACTION_MOVING, MV_BIT_LEFT }, { - Xacid_se, TRUE, FALSE, - EL_ACID_POOL_BOTTOMRIGHT, -1, -1 + Ynut_wB, FALSE, TRUE, + EL_NUT, ACTION_MOVING, MV_BIT_LEFT }, { - Xacid_s, TRUE, FALSE, - EL_ACID_POOL_BOTTOM, -1, -1 + Ynut_stone, FALSE, FALSE, + EL_NUT, ACTION_BREAKING, -1 }, + { - Xacid_sw, TRUE, FALSE, - EL_ACID_POOL_BOTTOMLEFT, -1, -1 + Xspring, TRUE, FALSE, + EL_SPRING, -1, -1 }, { - Xacid_nw, TRUE, FALSE, - EL_ACID_POOL_TOPLEFT, -1, -1 + Xspring_pause, FALSE, FALSE, + EL_SPRING, -1, -1 }, { - Xacid_1, TRUE, FALSE, - EL_ACID, -1, -1 + Xspring_e, TRUE, FALSE, + EL_SPRING_RIGHT, -1, -1 }, { - Xacid_2, FALSE, FALSE, - EL_ACID, -1, -1 + Xspring_w, TRUE, FALSE, + EL_SPRING_LEFT, -1, -1 }, { - Xacid_3, FALSE, FALSE, - EL_ACID, -1, -1 + Xspring_fall, FALSE, FALSE, + EL_SPRING, -1, -1 }, { - Xacid_4, FALSE, FALSE, - EL_ACID, -1, -1 + Yspring_s, FALSE, FALSE, + EL_SPRING, ACTION_FALLING, -1 }, { - Xacid_5, FALSE, FALSE, - EL_ACID, -1, -1 + Yspring_sB, FALSE, TRUE, + EL_SPRING, ACTION_FALLING, -1 }, { - Xacid_6, FALSE, FALSE, - EL_ACID, -1, -1 + Yspring_e, FALSE, FALSE, + EL_SPRING, ACTION_MOVING, MV_BIT_RIGHT }, { - Xacid_7, FALSE, FALSE, - EL_ACID, -1, -1 + Yspring_eB, FALSE, TRUE, + EL_SPRING, ACTION_MOVING, MV_BIT_RIGHT }, { - Xacid_8, FALSE, FALSE, - EL_ACID, -1, -1 + Yspring_w, FALSE, FALSE, + EL_SPRING, ACTION_MOVING, MV_BIT_LEFT }, { - Xball_1, TRUE, FALSE, - EL_EMC_MAGIC_BALL, -1, -1 + Yspring_wB, FALSE, TRUE, + EL_SPRING, ACTION_MOVING, MV_BIT_LEFT }, { - Yball_1, FALSE, FALSE, - EL_EMC_MAGIC_BALL, ACTION_ACTIVE, -1 + Yspring_alien_e, FALSE, FALSE, + EL_SPRING, ACTION_EATING, MV_BIT_RIGHT }, { - Xball_2, FALSE, FALSE, - EL_EMC_MAGIC_BALL, ACTION_ACTIVE, -1 + Yspring_alien_eB, FALSE, TRUE, + EL_SPRING, ACTION_EATING, MV_BIT_RIGHT }, { - Yball_2, FALSE, FALSE, - EL_EMC_MAGIC_BALL, ACTION_ACTIVE, -1 + Yspring_alien_w, FALSE, FALSE, + EL_SPRING, ACTION_EATING, MV_BIT_LEFT }, { - Yball_blank, FALSE, FALSE, - EL_EMC_MAGIC_BALL, ACTION_DROPPING, -1 + Yspring_alien_wB, FALSE, TRUE, + EL_SPRING, ACTION_EATING, MV_BIT_LEFT }, + { - Ykey_1_blank, FALSE, FALSE, - EL_EM_KEY_1, ACTION_COLLECTING, -1 + Xpush_emerald_e, FALSE, FALSE, + EL_EMERALD, -1, MV_BIT_RIGHT }, { - Ykey_2_blank, FALSE, FALSE, - EL_EM_KEY_2, ACTION_COLLECTING, -1 + Xpush_emerald_w, FALSE, FALSE, + EL_EMERALD, -1, MV_BIT_LEFT }, { - Ykey_3_blank, FALSE, FALSE, - EL_EM_KEY_3, ACTION_COLLECTING, -1 + Xpush_diamond_e, FALSE, FALSE, + EL_DIAMOND, -1, MV_BIT_RIGHT }, { - Ykey_4_blank, FALSE, FALSE, - EL_EM_KEY_4, ACTION_COLLECTING, -1 + Xpush_diamond_w, FALSE, FALSE, + EL_DIAMOND, -1, MV_BIT_LEFT }, { - Ykey_5_blank, FALSE, FALSE, - EL_EMC_KEY_5, ACTION_COLLECTING, -1 + Xpush_stone_e, FALSE, FALSE, + EL_ROCK, -1, MV_BIT_RIGHT }, { - Ykey_6_blank, FALSE, FALSE, - EL_EMC_KEY_6, ACTION_COLLECTING, -1 + Xpush_stone_w, FALSE, FALSE, + EL_ROCK, -1, MV_BIT_LEFT }, { - Ykey_7_blank, FALSE, FALSE, - EL_EMC_KEY_7, ACTION_COLLECTING, -1 + Xpush_bomb_e, FALSE, FALSE, + EL_BOMB, -1, MV_BIT_RIGHT }, { - Ykey_8_blank, FALSE, FALSE, - EL_EMC_KEY_8, ACTION_COLLECTING, -1 + Xpush_bomb_w, FALSE, FALSE, + EL_BOMB, -1, MV_BIT_LEFT }, { - Ylenses_blank, FALSE, FALSE, - EL_EMC_LENSES, ACTION_COLLECTING, -1 + Xpush_nut_e, FALSE, FALSE, + EL_NUT, -1, MV_BIT_RIGHT }, { - Ymagnify_blank, FALSE, FALSE, - EL_EMC_MAGNIFIER, ACTION_COLLECTING, -1 + Xpush_nut_w, FALSE, FALSE, + EL_NUT, -1, MV_BIT_LEFT }, { - Ygrass_blank, FALSE, FALSE, - EL_EMC_GRASS, ACTION_SNAPPING, -1 + Xpush_spring_e, FALSE, FALSE, + EL_SPRING_RIGHT, -1, MV_BIT_RIGHT }, { - Ydirt_blank, FALSE, FALSE, - EL_SAND, ACTION_SNAPPING, -1 + Xpush_spring_w, FALSE, FALSE, + EL_SPRING_LEFT, -1, MV_BIT_LEFT }, + { - Xslidewall_ns, TRUE, FALSE, - EL_EXPANDABLE_WALL_VERTICAL, -1, -1 + Xdynamite, TRUE, FALSE, + EL_EM_DYNAMITE, -1, -1 }, { - Yslidewall_ns_blank, FALSE, FALSE, - EL_EXPANDABLE_WALL_VERTICAL, ACTION_GROWING, -1 + Ydynamite_blank, FALSE, FALSE, + EL_EM_DYNAMITE, ACTION_COLLECTING, -1 }, { - Xslidewall_ew, TRUE, FALSE, - EL_EXPANDABLE_WALL_HORIZONTAL, -1, -1 + Xdynamite_1, TRUE, FALSE, + EL_EM_DYNAMITE_ACTIVE, -1, -1 }, { - Yslidewall_ew_blank, FALSE, FALSE, - EL_EXPANDABLE_WALL_HORIZONTAL, ACTION_GROWING, -1 + Xdynamite_2, FALSE, FALSE, + EL_EM_DYNAMITE_ACTIVE, -1, -1 }, { - Xwonderwall, TRUE, FALSE, - EL_MAGIC_WALL, -1, -1 + Xdynamite_3, FALSE, FALSE, + EL_EM_DYNAMITE_ACTIVE, -1, -1 }, { - XwonderwallB, FALSE, FALSE, - EL_MAGIC_WALL, ACTION_ACTIVE, -1 + Xdynamite_4, FALSE, FALSE, + EL_EM_DYNAMITE_ACTIVE, -1, -1 }, + { - Xamoeba_1, TRUE, FALSE, - EL_AMOEBA_DRY, ACTION_OTHER, -1 + Xkey_1, TRUE, FALSE, + EL_EM_KEY_1, -1, -1 }, { - Xamoeba_2, FALSE, FALSE, - EL_AMOEBA_DRY, ACTION_OTHER, -1 + Xkey_2, TRUE, FALSE, + EL_EM_KEY_2, -1, -1 }, { - Xamoeba_3, FALSE, FALSE, - EL_AMOEBA_DRY, ACTION_OTHER, -1 + Xkey_3, TRUE, FALSE, + EL_EM_KEY_3, -1, -1 }, { - Xamoeba_4, FALSE, FALSE, - EL_AMOEBA_DRY, ACTION_OTHER, -1 + Xkey_4, TRUE, FALSE, + EL_EM_KEY_4, -1, -1 }, { - Xamoeba_5, TRUE, FALSE, - EL_AMOEBA_WET, ACTION_OTHER, -1 + Xkey_5, TRUE, FALSE, + EL_EMC_KEY_5, -1, -1 }, { - Xamoeba_6, FALSE, FALSE, - EL_AMOEBA_WET, ACTION_OTHER, -1 + Xkey_6, TRUE, FALSE, + EL_EMC_KEY_6, -1, -1 }, { - Xamoeba_7, FALSE, FALSE, - EL_AMOEBA_WET, ACTION_OTHER, -1 + Xkey_7, TRUE, FALSE, + EL_EMC_KEY_7, -1, -1 }, { - Xamoeba_8, FALSE, FALSE, - EL_AMOEBA_WET, ACTION_OTHER, -1 + Xkey_8, TRUE, FALSE, + EL_EMC_KEY_8, -1, -1 }, + { Xdoor_1, TRUE, FALSE, EL_EM_GATE_1, -1, -1 @@ -6800,318 +6726,395 @@ em_object_mapping_list[] = Xdoor_8, TRUE, FALSE, EL_EMC_GATE_8, -1, -1 }, + { - Xkey_1, TRUE, FALSE, - EL_EM_KEY_1, -1, -1 + Xfake_door_1, TRUE, FALSE, + EL_EM_GATE_1_GRAY, -1, -1 }, { - Xkey_2, TRUE, FALSE, - EL_EM_KEY_2, -1, -1 + Xfake_door_2, TRUE, FALSE, + EL_EM_GATE_2_GRAY, -1, -1 }, { - Xkey_3, TRUE, FALSE, - EL_EM_KEY_3, -1, -1 + Xfake_door_3, TRUE, FALSE, + EL_EM_GATE_3_GRAY, -1, -1 }, { - Xkey_4, TRUE, FALSE, - EL_EM_KEY_4, -1, -1 + Xfake_door_4, TRUE, FALSE, + EL_EM_GATE_4_GRAY, -1, -1 }, { - Xkey_5, TRUE, FALSE, - EL_EMC_KEY_5, -1, -1 + Xfake_door_5, TRUE, FALSE, + EL_EMC_GATE_5_GRAY, -1, -1 }, { - Xkey_6, TRUE, FALSE, - EL_EMC_KEY_6, -1, -1 + Xfake_door_6, TRUE, FALSE, + EL_EMC_GATE_6_GRAY, -1, -1 }, { - Xkey_7, TRUE, FALSE, - EL_EMC_KEY_7, -1, -1 + Xfake_door_7, TRUE, FALSE, + EL_EMC_GATE_7_GRAY, -1, -1 }, { - Xkey_8, TRUE, FALSE, - EL_EMC_KEY_8, -1, -1 + Xfake_door_8, TRUE, FALSE, + EL_EMC_GATE_8_GRAY, -1, -1 }, + { - Xwind_n, TRUE, FALSE, - EL_BALLOON_SWITCH_UP, -1, -1 + Xballoon, TRUE, FALSE, + EL_BALLOON, -1, -1 }, { - Xwind_e, TRUE, FALSE, - EL_BALLOON_SWITCH_RIGHT, -1, -1 + Yballoon_n, FALSE, FALSE, + EL_BALLOON, ACTION_MOVING, MV_BIT_UP }, { - Xwind_s, TRUE, FALSE, - EL_BALLOON_SWITCH_DOWN, -1, -1 + Yballoon_nB, FALSE, TRUE, + EL_BALLOON, ACTION_MOVING, MV_BIT_UP }, { - Xwind_w, TRUE, FALSE, - EL_BALLOON_SWITCH_LEFT, -1, -1 + Yballoon_e, FALSE, FALSE, + EL_BALLOON, ACTION_MOVING, MV_BIT_RIGHT }, { - Xwind_any, TRUE, FALSE, - EL_BALLOON_SWITCH_ANY, -1, -1 + Yballoon_eB, FALSE, TRUE, + EL_BALLOON, ACTION_MOVING, MV_BIT_RIGHT }, { - Xwind_stop, TRUE, FALSE, - EL_BALLOON_SWITCH_NONE, -1, -1 + Yballoon_s, FALSE, FALSE, + EL_BALLOON, ACTION_MOVING, MV_BIT_DOWN }, { - Xexit, TRUE, FALSE, - EL_EM_EXIT_CLOSED, -1, -1 + Yballoon_sB, FALSE, TRUE, + EL_BALLOON, ACTION_MOVING, MV_BIT_DOWN }, { - Xexit_1, TRUE, FALSE, - EL_EM_EXIT_OPEN, -1, -1 + Yballoon_w, FALSE, FALSE, + EL_BALLOON, ACTION_MOVING, MV_BIT_LEFT }, { - Xexit_2, FALSE, FALSE, - EL_EM_EXIT_OPEN, -1, -1 + Yballoon_wB, FALSE, TRUE, + EL_BALLOON, ACTION_MOVING, MV_BIT_LEFT }, + { - Xexit_3, FALSE, FALSE, - EL_EM_EXIT_OPEN, -1, -1 + Xball_1, TRUE, FALSE, + EL_EMC_MAGIC_BALL, -1, -1 }, { - Xdynamite, TRUE, FALSE, - EL_EM_DYNAMITE, -1, -1 + Yball_1, FALSE, FALSE, + EL_EMC_MAGIC_BALL, ACTION_ACTIVE, -1 }, { - Ydynamite_blank, FALSE, FALSE, - EL_EM_DYNAMITE, ACTION_COLLECTING, -1 + Xball_2, FALSE, FALSE, + EL_EMC_MAGIC_BALL, ACTION_ACTIVE, -1 }, { - Xdynamite_1, TRUE, FALSE, - EL_EM_DYNAMITE_ACTIVE, -1, -1 + Yball_2, FALSE, FALSE, + EL_EMC_MAGIC_BALL, ACTION_ACTIVE, -1 }, { - Xdynamite_2, FALSE, FALSE, - EL_EM_DYNAMITE_ACTIVE, -1, -1 + Yball_blank, FALSE, FALSE, + EL_EMC_MAGIC_BALL, ACTION_DROPPING, -1 }, + { - Xdynamite_3, FALSE, FALSE, - EL_EM_DYNAMITE_ACTIVE, -1, -1 + Xamoeba_1, TRUE, FALSE, + EL_AMOEBA_DRY, ACTION_OTHER, -1 }, { - Xdynamite_4, FALSE, FALSE, - EL_EM_DYNAMITE_ACTIVE, -1, -1 + Xamoeba_2, FALSE, FALSE, + EL_AMOEBA_DRY, ACTION_OTHER, -1 }, { - Xbumper, TRUE, FALSE, - EL_EMC_SPRING_BUMPER, -1, -1 + Xamoeba_3, FALSE, FALSE, + EL_AMOEBA_DRY, ACTION_OTHER, -1 }, { - XbumperB, FALSE, FALSE, - EL_EMC_SPRING_BUMPER, ACTION_ACTIVE, -1 + Xamoeba_4, FALSE, FALSE, + EL_AMOEBA_DRY, ACTION_OTHER, -1 + }, + { + Xamoeba_5, TRUE, FALSE, + EL_AMOEBA_WET, ACTION_OTHER, -1 + }, + { + Xamoeba_6, FALSE, FALSE, + EL_AMOEBA_WET, ACTION_OTHER, -1 + }, + { + Xamoeba_7, FALSE, FALSE, + EL_AMOEBA_WET, ACTION_OTHER, -1 + }, + { + Xamoeba_8, FALSE, FALSE, + EL_AMOEBA_WET, ACTION_OTHER, -1 + }, + + { + Xdrip, TRUE, FALSE, + EL_AMOEBA_DROP, ACTION_GROWING, -1 + }, + { + Xdrip_fall, FALSE, FALSE, + EL_AMOEBA_DROP, -1, -1 + }, + { + Xdrip_stretch, FALSE, FALSE, + EL_AMOEBA_DROP, ACTION_FALLING, -1 + }, + { + Xdrip_stretchB, FALSE, TRUE, + EL_AMOEBA_DROP, ACTION_FALLING, -1 + }, + { + Ydrip_1_s, FALSE, FALSE, + EL_AMOEBA_DROP, ACTION_FALLING, -1 + }, + { + Ydrip_1_sB, FALSE, TRUE, + EL_AMOEBA_DROP, ACTION_FALLING, -1 + }, + { + Ydrip_2_s, FALSE, FALSE, + EL_AMOEBA_DROP, ACTION_FALLING, -1 }, + { + Ydrip_2_sB, FALSE, TRUE, + EL_AMOEBA_DROP, ACTION_FALLING, -1 + }, + + { + Xwonderwall, TRUE, FALSE, + EL_MAGIC_WALL, -1, -1 + }, + { + Ywonderwall, FALSE, FALSE, + EL_MAGIC_WALL, ACTION_ACTIVE, -1 + }, + { Xwheel, TRUE, FALSE, EL_ROBOT_WHEEL, -1, -1 }, { - XwheelB, FALSE, FALSE, + Ywheel, FALSE, FALSE, EL_ROBOT_WHEEL, ACTION_ACTIVE, -1 }, + { Xswitch, TRUE, FALSE, EL_EMC_MAGIC_BALL_SWITCH, -1, -1 }, { - XswitchB, FALSE, FALSE, + Yswitch, FALSE, FALSE, EL_EMC_MAGIC_BALL_SWITCH, ACTION_ACTIVE, -1 }, + { - Xsand, TRUE, FALSE, - EL_QUICKSAND_EMPTY, -1, -1 + Xbumper, TRUE, FALSE, + EL_EMC_SPRING_BUMPER, -1, -1 }, { - Xsand_stone, TRUE, FALSE, - EL_QUICKSAND_FULL, -1, -1 + Ybumper, FALSE, FALSE, + EL_EMC_SPRING_BUMPER, ACTION_ACTIVE, -1 }, + { - Xsand_stonein_1, FALSE, TRUE, - EL_ROCK, ACTION_FILLING, -1 + Xacid_nw, TRUE, FALSE, + EL_ACID_POOL_TOPLEFT, -1, -1 }, { - Xsand_stonein_2, FALSE, TRUE, - EL_ROCK, ACTION_FILLING, -1 + Xacid_ne, TRUE, FALSE, + EL_ACID_POOL_TOPRIGHT, -1, -1 }, { - Xsand_stonein_3, FALSE, TRUE, - EL_ROCK, ACTION_FILLING, -1 + Xacid_sw, TRUE, FALSE, + EL_ACID_POOL_BOTTOMLEFT, -1, -1 }, { - Xsand_stonein_4, FALSE, TRUE, - EL_ROCK, ACTION_FILLING, -1 + Xacid_s, TRUE, FALSE, + EL_ACID_POOL_BOTTOM, -1, -1 }, { - Xsand_stonesand_1, FALSE, FALSE, - EL_QUICKSAND_EMPTYING, -1, -1 + Xacid_se, TRUE, FALSE, + EL_ACID_POOL_BOTTOMRIGHT, -1, -1 }, + { - Xsand_stonesand_2, FALSE, FALSE, - EL_QUICKSAND_EMPTYING, -1, -1 + Xfake_blank, TRUE, FALSE, + EL_INVISIBLE_WALL, -1, -1 }, { - Xsand_stonesand_3, FALSE, FALSE, - EL_QUICKSAND_EMPTYING, -1, -1 + Yfake_blank, FALSE, FALSE, + EL_INVISIBLE_WALL, ACTION_ACTIVE, -1 }, + { - Xsand_stonesand_4, FALSE, FALSE, - EL_QUICKSAND_EMPTYING, -1, -1 + Xfake_grass, TRUE, FALSE, + EL_EMC_FAKE_GRASS, -1, -1 }, { - Xsand_stonesand_quickout_1, FALSE, FALSE, - EL_QUICKSAND_EMPTYING, -1, -1 + Yfake_grass, FALSE, FALSE, + EL_EMC_FAKE_GRASS, ACTION_ACTIVE, -1 }, + { - Xsand_stonesand_quickout_2, FALSE, FALSE, - EL_QUICKSAND_EMPTYING, -1, -1 + Xfake_amoeba, TRUE, FALSE, + EL_EMC_DRIPPER, -1, -1 }, { - Xsand_stoneout_1, FALSE, FALSE, - EL_ROCK, ACTION_EMPTYING, -1 + Yfake_amoeba, FALSE, FALSE, + EL_EMC_DRIPPER, ACTION_ACTIVE, -1 }, + { - Xsand_stoneout_2, FALSE, FALSE, - EL_ROCK, ACTION_EMPTYING, -1 + Xlenses, TRUE, FALSE, + EL_EMC_LENSES, -1, -1 }, + { - Xsand_sandstone_1, FALSE, FALSE, - EL_QUICKSAND_FILLING, -1, -1 + Xmagnify, TRUE, FALSE, + EL_EMC_MAGNIFIER, -1, -1 }, + { - Xsand_sandstone_2, FALSE, FALSE, - EL_QUICKSAND_FILLING, -1, -1 + Xsand, TRUE, FALSE, + EL_QUICKSAND_EMPTY, -1, -1 }, { - Xsand_sandstone_3, FALSE, FALSE, - EL_QUICKSAND_FILLING, -1, -1 + Xsand_stone, TRUE, FALSE, + EL_QUICKSAND_FULL, -1, -1 }, { - Xsand_sandstone_4, FALSE, FALSE, - EL_QUICKSAND_FILLING, -1, -1 + Xsand_stonein_1, FALSE, TRUE, + EL_ROCK, ACTION_FILLING, -1 }, { - Xplant, TRUE, FALSE, - EL_EMC_PLANT, -1, -1 + Xsand_stonein_2, FALSE, TRUE, + EL_ROCK, ACTION_FILLING, -1 }, { - Yplant, FALSE, FALSE, - EL_EMC_PLANT, -1, -1 + Xsand_stonein_3, FALSE, TRUE, + EL_ROCK, ACTION_FILLING, -1 }, { - Xlenses, TRUE, FALSE, - EL_EMC_LENSES, -1, -1 + Xsand_stonein_4, FALSE, TRUE, + EL_ROCK, ACTION_FILLING, -1 }, { - Xmagnify, TRUE, FALSE, - EL_EMC_MAGNIFIER, -1, -1 + Xsand_sandstone_1, FALSE, FALSE, + EL_QUICKSAND_FILLING, -1, -1 }, { - Xfake_amoeba, TRUE, FALSE, - EL_EMC_DRIPPER, -1, -1 + Xsand_sandstone_2, FALSE, FALSE, + EL_QUICKSAND_FILLING, -1, -1 }, { - Xfake_amoebaB, FALSE, FALSE, - EL_EMC_DRIPPER, ACTION_ACTIVE, -1 + Xsand_sandstone_3, FALSE, FALSE, + EL_QUICKSAND_FILLING, -1, -1 }, { - Xfake_blank, TRUE, FALSE, - EL_INVISIBLE_WALL, -1, -1 + Xsand_sandstone_4, FALSE, FALSE, + EL_QUICKSAND_FILLING, -1, -1 }, { - Xfake_blankB, FALSE, FALSE, - EL_INVISIBLE_WALL, ACTION_ACTIVE, -1 + Xsand_stonesand_1, FALSE, FALSE, + EL_QUICKSAND_EMPTYING, -1, -1 }, { - Xfake_grass, TRUE, FALSE, - EL_EMC_FAKE_GRASS, -1, -1 + Xsand_stonesand_2, FALSE, FALSE, + EL_QUICKSAND_EMPTYING, -1, -1 }, { - Xfake_grassB, FALSE, FALSE, - EL_EMC_FAKE_GRASS, ACTION_ACTIVE, -1 + Xsand_stonesand_3, FALSE, FALSE, + EL_QUICKSAND_EMPTYING, -1, -1 }, { - Xfake_door_1, TRUE, FALSE, - EL_EM_GATE_1_GRAY, -1, -1 + Xsand_stonesand_4, FALSE, FALSE, + EL_QUICKSAND_EMPTYING, -1, -1 }, { - Xfake_door_2, TRUE, FALSE, - EL_EM_GATE_2_GRAY, -1, -1 + Xsand_stoneout_1, FALSE, FALSE, + EL_ROCK, ACTION_EMPTYING, -1 }, { - Xfake_door_3, TRUE, FALSE, - EL_EM_GATE_3_GRAY, -1, -1 + Xsand_stoneout_2, FALSE, FALSE, + EL_ROCK, ACTION_EMPTYING, -1 }, { - Xfake_door_4, TRUE, FALSE, - EL_EM_GATE_4_GRAY, -1, -1 + Xsand_stonesand_quickout_1, FALSE, FALSE, + EL_QUICKSAND_EMPTYING, -1, -1 }, { - Xfake_door_5, TRUE, FALSE, - EL_EMC_GATE_5_GRAY, -1, -1 + Xsand_stonesand_quickout_2, FALSE, FALSE, + EL_QUICKSAND_EMPTYING, -1, -1 }, + { - Xfake_door_6, TRUE, FALSE, - EL_EMC_GATE_6_GRAY, -1, -1 + Xslide_ns, TRUE, FALSE, + EL_EXPANDABLE_WALL_VERTICAL, -1, -1 }, { - Xfake_door_7, TRUE, FALSE, - EL_EMC_GATE_7_GRAY, -1, -1 + Yslide_ns_blank, FALSE, FALSE, + EL_EXPANDABLE_WALL_VERTICAL, ACTION_GROWING, -1 }, { - Xfake_door_8, TRUE, FALSE, - EL_EMC_GATE_8_GRAY, -1, -1 + Xslide_ew, TRUE, FALSE, + EL_EXPANDABLE_WALL_HORIZONTAL, -1, -1 }, { - Xfake_acid_1, TRUE, FALSE, - EL_EMC_FAKE_ACID, -1, -1 + Yslide_ew_blank, FALSE, FALSE, + EL_EXPANDABLE_WALL_HORIZONTAL, ACTION_GROWING, -1 }, + { - Xfake_acid_2, FALSE, FALSE, - EL_EMC_FAKE_ACID, -1, -1 + Xwind_n, TRUE, FALSE, + EL_BALLOON_SWITCH_UP, -1, -1 }, { - Xfake_acid_3, FALSE, FALSE, - EL_EMC_FAKE_ACID, -1, -1 + Xwind_e, TRUE, FALSE, + EL_BALLOON_SWITCH_RIGHT, -1, -1 }, { - Xfake_acid_4, FALSE, FALSE, - EL_EMC_FAKE_ACID, -1, -1 + Xwind_s, TRUE, FALSE, + EL_BALLOON_SWITCH_DOWN, -1, -1 }, { - Xfake_acid_5, FALSE, FALSE, - EL_EMC_FAKE_ACID, -1, -1 + Xwind_w, TRUE, FALSE, + EL_BALLOON_SWITCH_LEFT, -1, -1 }, { - Xfake_acid_6, FALSE, FALSE, - EL_EMC_FAKE_ACID, -1, -1 + Xwind_any, TRUE, FALSE, + EL_BALLOON_SWITCH_ANY, -1, -1 }, { - Xfake_acid_7, FALSE, FALSE, - EL_EMC_FAKE_ACID, -1, -1 + Xwind_stop, TRUE, FALSE, + EL_BALLOON_SWITCH_NONE, -1, -1 }, + { - Xfake_acid_8, FALSE, FALSE, - EL_EMC_FAKE_ACID, -1, -1 + Xexit, TRUE, FALSE, + EL_EM_EXIT_CLOSED, -1, -1 }, { - Xsteel_1, TRUE, FALSE, - EL_STEELWALL, -1, -1 + Xexit_1, TRUE, FALSE, + EL_EM_EXIT_OPEN, -1, -1 }, { - Xsteel_2, TRUE, FALSE, - EL_EMC_STEELWALL_2, -1, -1 + Xexit_2, FALSE, FALSE, + EL_EM_EXIT_OPEN, -1, -1 }, { - Xsteel_3, TRUE, FALSE, - EL_EMC_STEELWALL_3, -1, -1 + Xexit_3, FALSE, FALSE, + EL_EM_EXIT_OPEN, -1, -1 }, + { - Xsteel_4, TRUE, FALSE, - EL_EMC_STEELWALL_4, -1, -1 + Xpause, FALSE, FALSE, + EL_EMPTY, -1, -1 }, + { Xwall_1, TRUE, FALSE, EL_WALL, -1, -1 @@ -7128,6 +7131,7 @@ em_object_mapping_list[] = Xwall_4, TRUE, FALSE, EL_EMC_WALL_16, -1, -1 }, + { Xroundwall_1, TRUE, FALSE, EL_WALL_SLIPPERY, -1, -1 @@ -7144,6 +7148,24 @@ em_object_mapping_list[] = Xroundwall_4, TRUE, FALSE, EL_EMC_WALL_SLIPPERY_4, -1, -1 }, + + { + Xsteel_1, TRUE, FALSE, + EL_STEELWALL, -1, -1 + }, + { + Xsteel_2, TRUE, FALSE, + EL_EMC_STEELWALL_2, -1, -1 + }, + { + Xsteel_3, TRUE, FALSE, + EL_EMC_STEELWALL_3, -1, -1 + }, + { + Xsteel_4, TRUE, FALSE, + EL_EMC_STEELWALL_4, -1, -1 + }, + { Xdecor_1, TRUE, FALSE, EL_EMC_WALL_8, -1, -1 @@ -7192,6 +7214,7 @@ em_object_mapping_list[] = Xdecor_12, TRUE, FALSE, EL_EMC_WALL_12, -1, -1 }, + { Xalpha_0, TRUE, FALSE, EL_CHAR('0'), -1, -1 @@ -7237,8 +7260,8 @@ em_object_mapping_list[] = EL_CHAR('!'), -1, -1 }, { - Xalpha_quote, TRUE, FALSE, - EL_CHAR('"'), -1, -1 + Xalpha_apost, TRUE, FALSE, + EL_CHAR('\''), -1, -1 }, { Xalpha_comma, TRUE, FALSE, @@ -7378,40 +7401,52 @@ em_object_mapping_list[] = }, { - Xboom_bug, FALSE, FALSE, - EL_BUG, ACTION_EXPLODING, -1 + Ykey_1_blank, FALSE, FALSE, + EL_EM_KEY_1, ACTION_COLLECTING, -1 }, { - Xboom_bomb, FALSE, FALSE, - EL_BOMB, ACTION_EXPLODING, -1 + Ykey_2_blank, FALSE, FALSE, + EL_EM_KEY_2, ACTION_COLLECTING, -1 }, { - Xboom_android, FALSE, FALSE, - EL_EMC_ANDROID, ACTION_OTHER, -1 + Ykey_3_blank, FALSE, FALSE, + EL_EM_KEY_3, ACTION_COLLECTING, -1 }, { - Xboom_1, FALSE, FALSE, - EL_DEFAULT, ACTION_EXPLODING, -1 + Ykey_4_blank, FALSE, FALSE, + EL_EM_KEY_4, ACTION_COLLECTING, -1 }, { - Xboom_2, FALSE, FALSE, - EL_DEFAULT, ACTION_EXPLODING, -1 + Ykey_5_blank, FALSE, FALSE, + EL_EMC_KEY_5, ACTION_COLLECTING, -1 }, { - Znormal, FALSE, FALSE, - EL_EMPTY, -1, -1 + Ykey_6_blank, FALSE, FALSE, + EL_EMC_KEY_6, ACTION_COLLECTING, -1 }, { - Zdynamite, FALSE, FALSE, - EL_EMPTY, -1, -1 + Ykey_7_blank, FALSE, FALSE, + EL_EMC_KEY_7, ACTION_COLLECTING, -1 }, { - Zplayer, FALSE, FALSE, - EL_EMPTY, -1, -1 + Ykey_8_blank, FALSE, FALSE, + EL_EMC_KEY_8, ACTION_COLLECTING, -1 }, { - Zborder, FALSE, FALSE, - EL_EMPTY, -1, -1 + Ylenses_blank, FALSE, FALSE, + EL_EMC_LENSES, ACTION_COLLECTING, -1 + }, + { + Ymagnify_blank, FALSE, FALSE, + EL_EMC_MAGNIFIER, ACTION_COLLECTING, -1 + }, + { + Ygrass_blank, FALSE, FALSE, + EL_EMC_GRASS, ACTION_SNAPPING, -1 + }, + { + Ydirt_blank, FALSE, FALSE, + EL_SAND, ACTION_SNAPPING, -1 }, { @@ -7429,7 +7464,7 @@ static struct Mapping_EM_to_RND_player int action; int direction; } -em_player_mapping_list[] = +em_player_mapping_list[MAX_PLAYERS * PLY_MAX + 1] = { { PLY_walk_n, 0, @@ -7646,7 +7681,7 @@ em_player_mapping_list[] = } }; -int map_element_RND_to_EM(int element_rnd) +int map_element_RND_to_EM_cave(int element_rnd) { static unsigned short mapping_RND_to_EM[NUM_FILE_ELEMENTS]; static boolean mapping_initialized = FALSE; @@ -7667,17 +7702,49 @@ int map_element_RND_to_EM(int element_rnd) mapping_initialized = TRUE; } - if (element_rnd >= 0 && element_rnd < NUM_FILE_ELEMENTS) - return mapping_RND_to_EM[element_rnd]; + if (element_rnd < 0 || element_rnd >= NUM_FILE_ELEMENTS) + { + Error(ERR_WARN, "invalid RND level element %d", element_rnd); + + return EL_UNKNOWN; + } + + return map_em_element_X_to_C(mapping_RND_to_EM[element_rnd]); +} + +int map_element_EM_to_RND_cave(int element_em_cave) +{ + static unsigned short mapping_EM_to_RND[GAME_TILE_MAX]; + static boolean mapping_initialized = FALSE; + + if (!mapping_initialized) + { + int i; + + // return "EL_UNKNOWN" for all undefined elements in mapping array + for (i = 0; i < GAME_TILE_MAX; i++) + mapping_EM_to_RND[i] = EL_UNKNOWN; + + for (i = 0; em_object_mapping_list[i].element_em != -1; i++) + mapping_EM_to_RND[em_object_mapping_list[i].element_em] = + em_object_mapping_list[i].element_rnd; + + mapping_initialized = TRUE; + } + + if (element_em_cave < 0 || element_em_cave >= CAVE_TILE_MAX) + { + Error(ERR_WARN, "invalid EM cave element %d", element_em_cave); - Error(ERR_WARN, "invalid RND level element %d", element_rnd); + return EL_UNKNOWN; + } - return EL_UNKNOWN; + return mapping_EM_to_RND[map_em_element_C_to_X(element_em_cave)]; } -int map_element_EM_to_RND(int element_em) +int map_element_EM_to_RND_game(int element_em_game) { - static unsigned short mapping_EM_to_RND[TILE_MAX]; + static unsigned short mapping_EM_to_RND[GAME_TILE_MAX]; static boolean mapping_initialized = FALSE; if (!mapping_initialized) @@ -7685,7 +7752,7 @@ int map_element_EM_to_RND(int element_em) int i; // return "EL_UNKNOWN" for all undefined elements in mapping array - for (i = 0; i < TILE_MAX; i++) + for (i = 0; i < GAME_TILE_MAX; i++) mapping_EM_to_RND[i] = EL_UNKNOWN; for (i = 0; em_object_mapping_list[i].element_em != -1; i++) @@ -7695,52 +7762,55 @@ int map_element_EM_to_RND(int element_em) mapping_initialized = TRUE; } - if (element_em >= 0 && element_em < TILE_MAX) - return mapping_EM_to_RND[element_em]; + if (element_em_game < 0 || element_em_game >= GAME_TILE_MAX) + { + Error(ERR_WARN, "invalid EM game element %d", element_em_game); - Error(ERR_WARN, "invalid EM level element %d", element_em); + return EL_UNKNOWN; + } - return EL_UNKNOWN; + return mapping_EM_to_RND[element_em_game]; } void map_android_clone_elements_RND_to_EM(struct LevelInfo *level) { struct LevelInfo_EM *level_em = level->native_em_level; - struct LEVEL *lev = level_em->lev; + struct CAVE *cav = level_em->cav; int i, j; - for (i = 0; i < TILE_MAX; i++) - lev->android_array[i] = Xblank; + for (i = 0; i < GAME_TILE_MAX; i++) + cav->android_array[i] = Cblank; for (i = 0; i < level->num_android_clone_elements; i++) { int element_rnd = level->android_clone_element[i]; - int element_em = map_element_RND_to_EM(element_rnd); + int element_em_cave = map_element_RND_to_EM_cave(element_rnd); for (j = 0; em_object_mapping_list[j].element_em != -1; j++) if (em_object_mapping_list[j].element_rnd == element_rnd) - lev->android_array[em_object_mapping_list[j].element_em] = element_em; + cav->android_array[em_object_mapping_list[j].element_em] = + element_em_cave; } } void map_android_clone_elements_EM_to_RND(struct LevelInfo *level) { struct LevelInfo_EM *level_em = level->native_em_level; - struct LEVEL *lev = level_em->lev; + struct CAVE *cav = level_em->cav; int i, j; level->num_android_clone_elements = 0; - for (i = 0; i < TILE_MAX; i++) + for (i = 0; i < GAME_TILE_MAX; i++) { - int element_em = lev->android_array[i]; + int element_em_cave = cav->android_array[i]; int element_rnd; boolean element_found = FALSE; - if (element_em == Xblank) + if (element_em_cave == Cblank) continue; - element_rnd = map_element_EM_to_RND(element_em); + element_rnd = map_element_EM_to_RND_cave(element_em_cave); for (j = 0; j < level->num_android_clone_elements; j++) if (level->android_clone_element[j] == element_rnd) @@ -8169,24 +8239,19 @@ int getBeltSwitchElementFromBeltNrAndBeltDir(int belt_nr, int belt_dir) return getBeltSwitchElementFromBeltNrAndBeltDirNr(belt_nr, belt_dir_nr); } +boolean swapTiles_EM(boolean is_pre_emc_cave) +{ + return is_pre_emc_cave && leveldir_current->use_emc_tiles; +} + boolean getTeamMode_EM(void) { return game.team_mode || network_playing; } -int getGameFrameDelay_EM(int native_em_game_frame_delay) +boolean isActivePlayer_EM(int player_nr) { - int game_frame_delay_value; - - game_frame_delay_value = - (tape.playing && tape.fast_forward ? FfwdFrameDelay : - GameFrameDelay == GAME_FRAME_DELAY ? native_em_game_frame_delay : - GameFrameDelay); - - if (tape.playing && tape.warp_forward && !tape.pausing) - game_frame_delay_value = 0; - - return game_frame_delay_value; + return stored_player[player_nr].active; } unsigned int InitRND(int seed) @@ -8201,7 +8266,7 @@ unsigned int InitRND(int seed) return InitEngineRandom_RND(seed); } -static struct Mapping_EM_to_RND_object object_mapping[TILE_MAX]; +static struct Mapping_EM_to_RND_object object_mapping[GAME_TILE_MAX]; static struct Mapping_EM_to_RND_player player_mapping[MAX_PLAYERS][PLY_MAX]; static int get_effective_element_EM(int tile, int frame_em) @@ -8217,8 +8282,8 @@ static int get_effective_element_EM(int tile, int frame_em) { switch (tile) { - case Xacid_splash_e: - case Xacid_splash_w: + case Xsplash_e: + case Xsplash_w: return (frame_em > 5 ? EL_EMPTY : element); default: @@ -8229,8 +8294,8 @@ static int get_effective_element_EM(int tile, int frame_em) { switch (tile) { - case Xacid_splash_e: - case Xacid_splash_w: + case Xsplash_e: + case Xsplash_w: return EL_EMPTY; case Ynut_stone: @@ -8298,8 +8363,8 @@ static boolean check_linear_animation_EM(int tile) case Ytank_s_e: case Ytank_w_s: case Ytank_n_w: - case Xacid_splash_e: - case Xacid_splash_w: + case Xsplash_e: + case Xsplash_w: case Ynut_stone: return TRUE; } @@ -8546,21 +8611,8 @@ void InitGraphicInfo_EM(void) { int i, j, p; -#if DEBUG_EM_GFX - int num_em_gfx_errors = 0; - - if (graphic_info_em_object[0][0].bitmap == NULL) - { - // EM graphics not yet initialized in em_open_all() - - return; - } - - printf("::: [4 errors can be ignored (1 x 'bomb', 3 x 'em_dynamite']\n"); -#endif - // always start with reliable default values - for (i = 0; i < TILE_MAX; i++) + for (i = 0; i < GAME_TILE_MAX; i++) { object_mapping[i].element_rnd = EL_UNKNOWN; object_mapping[i].is_backside = FALSE; @@ -8609,7 +8661,7 @@ void InitGraphicInfo_EM(void) MV_DIR_FROM_BIT(em_player_mapping_list[i].direction); } - for (i = 0; i < TILE_MAX; i++) + for (i = 0; i < GAME_TILE_MAX; i++) { int element = object_mapping[i].element_rnd; int action = object_mapping[i].action; @@ -8666,7 +8718,7 @@ void InitGraphicInfo_EM(void) boolean has_action_graphics = (graphic != base_graphic); boolean has_crumbled_graphics = (base_crumbled != base_graphic); struct GraphicInfo *g = &graphic_info[graphic]; - struct GraphicInfo_EM *g_em = &graphic_info_em_object[i][7 - j]; + struct GraphicInfo_EM *g_em = &graphic_info_em_object[i][j]; Bitmap *src_bitmap; int src_x, src_y; // ensure to get symmetric 3-frame, 2-delay animations as used in EM @@ -8750,13 +8802,13 @@ void InitGraphicInfo_EM(void) i == Xboom_bug && j == 5 ? 2 : i == Xboom_bug && j == 6 ? 2 : i == Xboom_bug && j == 7 ? 0 : - i == Xboom_bomb && j == 1 ? 2 : - i == Xboom_bomb && j == 2 ? 2 : - i == Xboom_bomb && j == 3 ? 4 : - i == Xboom_bomb && j == 4 ? 4 : - i == Xboom_bomb && j == 5 ? 2 : - i == Xboom_bomb && j == 6 ? 2 : - i == Xboom_bomb && j == 7 ? 0 : + i == Xboom_tank && j == 1 ? 2 : + i == Xboom_tank && j == 2 ? 2 : + i == Xboom_tank && j == 3 ? 4 : + i == Xboom_tank && j == 4 ? 4 : + i == Xboom_tank && j == 5 ? 2 : + i == Xboom_tank && j == 6 ? 2 : + i == Xboom_tank && j == 7 ? 0 : i == Xboom_android && j == 7 ? 6 : i == Xboom_1 && j == 1 ? 2 : i == Xboom_1 && j == 2 ? 2 : @@ -8776,13 +8828,6 @@ void InitGraphicInfo_EM(void) special_animation && j == 4 ? 3 : effective_action != action ? 0 : j); - -#if DEBUG_EM_GFX - Bitmap *debug_bitmap = g_em->bitmap; - int debug_src_x = g_em->src_x; - int debug_src_y = g_em->src_y; -#endif - int frame = getAnimationFrame(g->anim_frames, g->anim_delay, g->anim_mode, @@ -8878,78 +8923,10 @@ void InitGraphicInfo_EM(void) bit 5 - 0 ( 6 bit): graphic height */ g_em->unique_identifier = (graphic << 16) | (frame << 12) | (g_em->width << 6) | g_em->height; - -#if DEBUG_EM_GFX - - // skip check for EMC elements not contained in original EMC artwork - if (element == EL_EMC_FAKE_ACID) - continue; - - if (g_em->bitmap != debug_bitmap || - g_em->src_x != debug_src_x || - g_em->src_y != debug_src_y || - g_em->src_offset_x != 0 || - g_em->src_offset_y != 0 || - g_em->dst_offset_x != 0 || - g_em->dst_offset_y != 0 || - g_em->width != TILEX || - g_em->height != TILEY) - { - static int last_i = -1; - - if (i != last_i) - { - printf("\n"); - last_i = i; - } - - printf("::: EMC GFX ERROR for element %d -> %d ('%s', '%s', %d)", - i, element, element_info[element].token_name, - element_action_info[effective_action].suffix, direction); - - if (element != effective_element) - printf(" [%d ('%s')]", - effective_element, - element_info[effective_element].token_name); - - printf("\n"); - - if (g_em->bitmap != debug_bitmap) - printf(" %d (%d): different bitmap! (0x%08x != 0x%08x)\n", - j, is_backside, (int)(g_em->bitmap), (int)(debug_bitmap)); - - if (g_em->src_x != debug_src_x || - g_em->src_y != debug_src_y) - printf(" frame %d (%c): %d,%d (%d,%d) should be %d,%d (%d,%d)\n", - j, (is_backside ? 'B' : 'F'), - g_em->src_x, g_em->src_y, - g_em->src_x / 32, g_em->src_y / 32, - debug_src_x, debug_src_y, - debug_src_x / 32, debug_src_y / 32); - - if (g_em->src_offset_x != 0 || - g_em->src_offset_y != 0 || - g_em->dst_offset_x != 0 || - g_em->dst_offset_y != 0) - printf(" %d (%d): offsets %d,%d and %d,%d should be all 0\n", - j, is_backside, - g_em->src_offset_x, g_em->src_offset_y, - g_em->dst_offset_x, g_em->dst_offset_y); - - if (g_em->width != TILEX || - g_em->height != TILEY) - printf(" %d (%d): size %d,%d should be %d,%d\n", - j, is_backside, - g_em->width, g_em->height, TILEX, TILEY); - - num_em_gfx_errors++; - } -#endif - } } - for (i = 0; i < TILE_MAX; i++) + for (i = 0; i < GAME_TILE_MAX; i++) { for (j = 0; j < 8; j++) { @@ -8972,8 +8949,8 @@ void InitGraphicInfo_EM(void) Xspring); // no separate animation for "smashed by rock" -- use rock instead - struct GraphicInfo_EM *g_em = &graphic_info_em_object[i][7 - j]; - struct GraphicInfo_EM *g_xx = &graphic_info_em_object[e][7 - j]; + struct GraphicInfo_EM *g_em = &graphic_info_em_object[i][j]; + struct GraphicInfo_EM *g_xx = &graphic_info_em_object[e][j]; g_em->bitmap = g_xx->bitmap; g_em->src_x = g_xx->src_x; @@ -9009,17 +8986,10 @@ void InitGraphicInfo_EM(void) el_act_dir2img(effective_element, effective_action, direction)); struct GraphicInfo *g = &graphic_info[graphic]; - struct GraphicInfo_EM *g_em = &graphic_info_em_player[p][i][7 - j]; + struct GraphicInfo_EM *g_em = &graphic_info_em_player[p][i][j]; Bitmap *src_bitmap; int src_x, src_y; int sync_frame = j; - -#if DEBUG_EM_GFX - Bitmap *debug_bitmap = g_em->bitmap; - int debug_src_x = g_em->src_x; - int debug_src_y = g_em->src_y; -#endif - int frame = getAnimationFrame(g->anim_frames, g->anim_delay, g->anim_mode, @@ -9037,64 +9007,9 @@ void InitGraphicInfo_EM(void) g_em->dst_offset_y = 0; g_em->width = TILEX; g_em->height = TILEY; - -#if DEBUG_EM_GFX - - // skip check for EMC elements not contained in original EMC artwork - if (element == EL_PLAYER_3 || - element == EL_PLAYER_4) - continue; - - if (g_em->bitmap != debug_bitmap || - g_em->src_x != debug_src_x || - g_em->src_y != debug_src_y) - { - static int last_i = -1; - - if (i != last_i) - { - printf("\n"); - last_i = i; - } - - printf("::: EMC GFX ERROR for p/a %d/%d -> %d ('%s', '%s', %d)", - p, i, element, element_info[element].token_name, - element_action_info[effective_action].suffix, direction); - - if (element != effective_element) - printf(" [%d ('%s')]", - effective_element, - element_info[effective_element].token_name); - - printf("\n"); - - if (g_em->bitmap != debug_bitmap) - printf(" %d: different bitmap! (0x%08x != 0x%08x)\n", - j, (int)(g_em->bitmap), (int)(debug_bitmap)); - - if (g_em->src_x != debug_src_x || - g_em->src_y != debug_src_y) - printf(" frame %d: %d,%d (%d,%d) should be %d,%d (%d,%d)\n", - j, - g_em->src_x, g_em->src_y, - g_em->src_x / 32, g_em->src_y / 32, - debug_src_x, debug_src_y, - debug_src_x / 32, debug_src_y / 32); - - num_em_gfx_errors++; - } -#endif - } } } - -#if DEBUG_EM_GFX - printf("\n"); - printf("::: [%d errors found]\n", num_em_gfx_errors); - - exit(0); -#endif } static void CheckSaveEngineSnapshot_EM(byte action[MAX_PLAYERS], int frame, @@ -9102,7 +9017,7 @@ static void CheckSaveEngineSnapshot_EM(byte action[MAX_PLAYERS], int frame, boolean any_player_snapping, boolean any_player_dropping) { - if (frame == 0 && !any_player_dropping) + if (frame == 7 && !any_player_dropping) { if (!local_player->was_waiting) { @@ -9160,7 +9075,7 @@ void CheckSingleStepMode_EM(byte action[MAX_PLAYERS], int frame, boolean any_player_dropping) { if (tape.single_step && tape.recording && !tape.pausing) - if (frame == 0 && !any_player_dropping) + if (frame == 7 && !any_player_dropping) TapeTogglePause(TAPE_TOGGLE_AUTOMATIC); CheckSaveEngineSnapshot_EM(action, frame, any_player_moving,