#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
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);
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);
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
},
{
- Yacid_splash_eB, FALSE, FALSE,
- EL_ACID_SPLASH_RIGHT, -1, -1
- },
- {
- Yacid_splash_wB, FALSE, FALSE,
- EL_ACID_SPLASH_LEFT, -1, -1
+ Zplayer, FALSE, FALSE,
+ EL_EMPTY, -1, -1
},
-#ifdef EM_ENGINE_BAD_ROLL
- {
- Xstone_force_e, FALSE, FALSE,
- EL_ROCK, -1, MV_BIT_RIGHT
- },
- {
- Xstone_force_w, FALSE, FALSE,
- EL_ROCK, -1, MV_BIT_LEFT
- },
- {
- Xnut_force_e, FALSE, FALSE,
- EL_NUT, -1, MV_BIT_RIGHT
- },
- {
- Xnut_force_w, FALSE, FALSE,
- EL_NUT, -1, MV_BIT_LEFT
- },
{
- Xspring_force_e, FALSE, FALSE,
- EL_SPRING, -1, MV_BIT_RIGHT
- },
- {
- Xspring_force_w, FALSE, FALSE,
- EL_SPRING, -1, MV_BIT_LEFT
- },
- {
- Xemerald_force_e, FALSE, FALSE,
- EL_EMERALD, -1, MV_BIT_RIGHT
- },
- {
- Xemerald_force_w, FALSE, FALSE,
- EL_EMERALD, -1, MV_BIT_LEFT
+ Zbug, FALSE, FALSE,
+ EL_EMPTY, -1, -1
},
{
- Xdiamond_force_e, FALSE, FALSE,
- EL_DIAMOND, -1, MV_BIT_RIGHT
+ Ztank, FALSE, FALSE,
+ EL_EMPTY, -1, -1
},
{
- Xdiamond_force_w, FALSE, FALSE,
- EL_DIAMOND, -1, MV_BIT_LEFT
+ Zeater, FALSE, FALSE,
+ EL_EMPTY, -1, -1
},
{
- Xbomb_force_e, FALSE, FALSE,
- EL_BOMB, -1, MV_BIT_RIGHT
+ Zdynamite, FALSE, FALSE,
+ EL_EMPTY, -1, -1
},
{
- Xbomb_force_w, FALSE, FALSE,
- EL_BOMB, -1, MV_BIT_LEFT
+ Zboom, FALSE, FALSE,
+ EL_EMPTY, -1, -1
},
-#endif // EM_ENGINE_BAD_ROLL
{
- Xstone, TRUE, FALSE,
- EL_ROCK, -1, -1
- },
- {
- Xstone_pause, FALSE, FALSE,
- EL_ROCK, -1, -1
- },
- {
- Xstone_fall, FALSE, FALSE,
- EL_ROCK, -1, -1
- },
- {
- Ystone_s, FALSE, FALSE,
- EL_ROCK, ACTION_FALLING, -1
- },
- {
- Ystone_sB, FALSE, TRUE,
- EL_ROCK, ACTION_FALLING, -1
- },
- {
- Ystone_e, FALSE, FALSE,
- EL_ROCK, ACTION_MOVING, MV_BIT_RIGHT
- },
- {
- Ystone_eB, FALSE, TRUE,
- EL_ROCK, ACTION_MOVING, MV_BIT_RIGHT
- },
- {
- Ystone_w, FALSE, FALSE,
- EL_ROCK, ACTION_MOVING, MV_BIT_LEFT
- },
- {
- Ystone_wB, FALSE, TRUE,
- EL_ROCK, ACTION_MOVING, MV_BIT_LEFT
- },
- {
- Xnut, TRUE, FALSE,
- EL_NUT, -1, -1
- },
- {
- Xnut_pause, FALSE, FALSE,
- EL_NUT, -1, -1
- },
- {
- Xnut_fall, FALSE, FALSE,
- EL_NUT, -1, -1
- },
- {
- Ynut_s, FALSE, FALSE,
- EL_NUT, ACTION_FALLING, -1
- },
- {
- Ynut_sB, FALSE, TRUE,
- EL_NUT, ACTION_FALLING, -1
- },
- {
- Ynut_e, FALSE, FALSE,
- EL_NUT, ACTION_MOVING, MV_BIT_RIGHT
- },
- {
- Ynut_eB, FALSE, TRUE,
- EL_NUT, ACTION_MOVING, MV_BIT_RIGHT
- },
- {
- Ynut_w, FALSE, FALSE,
- EL_NUT, ACTION_MOVING, MV_BIT_LEFT
- },
- {
- Ynut_wB, FALSE, TRUE,
- EL_NUT, ACTION_MOVING, MV_BIT_LEFT
- },
- {
- Xbug_n, TRUE, FALSE,
- EL_BUG_UP, -1, -1
- },
- {
- Xbug_e, TRUE, FALSE,
- EL_BUG_RIGHT, -1, -1
- },
- {
- Xbug_s, TRUE, FALSE,
- EL_BUG_DOWN, -1, -1
- },
- {
- Xbug_w, TRUE, FALSE,
- EL_BUG_LEFT, -1, -1
- },
- {
- Xbug_gon, FALSE, FALSE,
- EL_BUG_UP, -1, -1
- },
- {
- Xbug_goe, FALSE, FALSE,
- EL_BUG_RIGHT, -1, -1
- },
- {
- Xbug_gos, FALSE, FALSE,
- EL_BUG_DOWN, -1, -1
- },
- {
- Xbug_gow, FALSE, FALSE,
- EL_BUG_LEFT, -1, -1
- },
- {
- 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
+ Xchain, FALSE, FALSE,
+ EL_DEFAULT, ACTION_EXPLODING, -1
},
{
- Ybug_w_n, FALSE, FALSE,
- EL_BUG, ACTION_TURNING_FROM_LEFT, MV_BIT_UP
+ Xboom_bug, FALSE, FALSE,
+ EL_BUG, ACTION_EXPLODING, -1
},
{
- Ybug_n_e, FALSE, FALSE,
- EL_BUG, ACTION_TURNING_FROM_UP, MV_BIT_RIGHT
+ Xboom_tank, FALSE, FALSE,
+ EL_SPACESHIP, ACTION_EXPLODING, -1
},
{
- Ybug_e_s, FALSE, FALSE,
- EL_BUG, ACTION_TURNING_FROM_RIGHT, MV_BIT_DOWN
+ Xboom_android, FALSE, FALSE,
+ EL_EMC_ANDROID, ACTION_OTHER, -1
},
{
- Ybug_s_w, FALSE, FALSE,
- EL_BUG, ACTION_TURNING_FROM_DOWN, MV_BIT_LEFT
+ Xboom_1, FALSE, FALSE,
+ EL_DEFAULT, ACTION_EXPLODING, -1
},
{
- Ybug_e_n, FALSE, FALSE,
- EL_BUG, ACTION_TURNING_FROM_RIGHT, MV_BIT_UP
+ Xboom_2, FALSE, FALSE,
+ EL_DEFAULT, ACTION_EXPLODING, -1
},
+
{
- Ybug_s_e, FALSE, FALSE,
- EL_BUG, ACTION_TURNING_FROM_DOWN, MV_BIT_RIGHT
+ Xblank, TRUE, FALSE,
+ EL_EMPTY, -1, -1
},
+
{
- Ybug_w_s, FALSE, FALSE,
- EL_BUG, ACTION_TURNING_FROM_LEFT, MV_BIT_DOWN
+ Xsplash_e, FALSE, FALSE,
+ EL_ACID_SPLASH_RIGHT, -1, -1
},
{
- Ybug_n_w, FALSE, FALSE,
- EL_BUG, ACTION_TURNING_FROM_UP, MV_BIT_LEFT
+ Xsplash_w, FALSE, FALSE,
+ EL_ACID_SPLASH_LEFT, -1, -1
},
+
{
- Ybug_stone, FALSE, FALSE,
- EL_BUG, ACTION_SMASHED_BY_ROCK, -1
+ Xplant, TRUE, FALSE,
+ EL_EMC_PLANT, -1, -1
},
{
- Ybug_spring, FALSE, FALSE,
- EL_BUG, ACTION_SMASHED_BY_SPRING, -1
+ Yplant, FALSE, FALSE,
+ EL_EMC_PLANT, -1, -1
},
+
{
- Xtank_n, TRUE, FALSE,
- EL_SPACESHIP_UP, -1, -1
+ Xacid_1, TRUE, FALSE,
+ EL_ACID, -1, -1
},
{
- Xtank_e, TRUE, FALSE,
- EL_SPACESHIP_RIGHT, -1, -1
+ Xacid_2, FALSE, FALSE,
+ EL_ACID, -1, -1
},
{
- Xtank_s, TRUE, FALSE,
- EL_SPACESHIP_DOWN, -1, -1
+ Xacid_3, FALSE, FALSE,
+ EL_ACID, -1, -1
},
{
- Xtank_w, TRUE, FALSE,
- EL_SPACESHIP_LEFT, -1, -1
+ Xacid_4, FALSE, FALSE,
+ EL_ACID, -1, -1
},
{
- Xtank_gon, FALSE, FALSE,
- EL_SPACESHIP_UP, -1, -1
+ Xacid_5, FALSE, FALSE,
+ EL_ACID, -1, -1
},
{
- Xtank_goe, FALSE, FALSE,
- EL_SPACESHIP_RIGHT, -1, -1
+ Xacid_6, FALSE, FALSE,
+ EL_ACID, -1, -1
},
{
- Xtank_gos, FALSE, FALSE,
- EL_SPACESHIP_DOWN, -1, -1
+ Xacid_7, FALSE, FALSE,
+ EL_ACID, -1, -1
},
{
- Xtank_gow, FALSE, FALSE,
- EL_SPACESHIP_LEFT, -1, -1
+ Xacid_8, FALSE, FALSE,
+ EL_ACID, -1, -1
},
+
{
- Ytank_n, FALSE, FALSE,
- EL_SPACESHIP, ACTION_MOVING, MV_BIT_UP
+ Xfake_acid_1, TRUE, FALSE,
+ EL_EMC_FAKE_ACID, -1, -1
},
{
- Ytank_nB, FALSE, TRUE,
- EL_SPACESHIP, ACTION_MOVING, MV_BIT_UP
+ Xfake_acid_2, FALSE, FALSE,
+ EL_EMC_FAKE_ACID, -1, -1
},
{
- Ytank_e, FALSE, FALSE,
- EL_SPACESHIP, ACTION_MOVING, MV_BIT_RIGHT
+ Xfake_acid_3, FALSE, FALSE,
+ EL_EMC_FAKE_ACID, -1, -1
},
{
- Ytank_eB, FALSE, TRUE,
- EL_SPACESHIP, ACTION_MOVING, MV_BIT_RIGHT
+ Xfake_acid_4, FALSE, FALSE,
+ EL_EMC_FAKE_ACID, -1, -1
},
{
- Ytank_s, FALSE, FALSE,
- EL_SPACESHIP, ACTION_MOVING, MV_BIT_DOWN
+ Xfake_acid_5, FALSE, FALSE,
+ EL_EMC_FAKE_ACID, -1, -1
},
{
- Ytank_sB, FALSE, TRUE,
- EL_SPACESHIP, ACTION_MOVING, MV_BIT_DOWN
+ Xfake_acid_6, FALSE, FALSE,
+ EL_EMC_FAKE_ACID, -1, -1
},
{
- Ytank_w, FALSE, FALSE,
- EL_SPACESHIP, ACTION_MOVING, MV_BIT_LEFT
+ Xfake_acid_7, FALSE, FALSE,
+ EL_EMC_FAKE_ACID, -1, -1
},
{
- Ytank_wB, FALSE, TRUE,
- EL_SPACESHIP, ACTION_MOVING, MV_BIT_LEFT
+ Xfake_acid_8, FALSE, FALSE,
+ EL_EMC_FAKE_ACID, -1, -1
},
+
{
- Ytank_w_n, FALSE, FALSE,
- EL_SPACESHIP, ACTION_TURNING_FROM_LEFT, MV_BIT_UP
+ Xgrass, TRUE, FALSE,
+ EL_EMC_GRASS, -1, -1
},
{
- Ytank_n_e, FALSE, FALSE,
- EL_SPACESHIP, ACTION_TURNING_FROM_UP, MV_BIT_RIGHT
+ Ygrass_nB, FALSE, FALSE,
+ EL_EMC_GRASS, ACTION_DIGGING, MV_BIT_UP
},
{
- Ytank_e_s, FALSE, FALSE,
- EL_SPACESHIP, ACTION_TURNING_FROM_RIGHT, MV_BIT_DOWN
+ Ygrass_eB, FALSE, FALSE,
+ EL_EMC_GRASS, ACTION_DIGGING, MV_BIT_RIGHT
},
{
- Ytank_s_w, FALSE, FALSE,
- EL_SPACESHIP, ACTION_TURNING_FROM_DOWN, MV_BIT_LEFT
+ Ygrass_sB, FALSE, FALSE,
+ EL_EMC_GRASS, ACTION_DIGGING, MV_BIT_DOWN
},
{
- Ytank_e_n, FALSE, FALSE,
- EL_SPACESHIP, ACTION_TURNING_FROM_RIGHT, MV_BIT_UP
+ Ygrass_wB, FALSE, FALSE,
+ EL_EMC_GRASS, ACTION_DIGGING, MV_BIT_LEFT
},
+
{
- Ytank_s_e, FALSE, FALSE,
- EL_SPACESHIP, ACTION_TURNING_FROM_DOWN, MV_BIT_RIGHT
+ Xdirt, TRUE, FALSE,
+ EL_SAND, -1, -1
},
{
- Ytank_w_s, FALSE, FALSE,
- EL_SPACESHIP, ACTION_TURNING_FROM_LEFT, MV_BIT_DOWN
+ Ydirt_nB, FALSE, FALSE,
+ EL_SAND, ACTION_DIGGING, MV_BIT_UP
},
{
- Ytank_n_w, FALSE, FALSE,
- EL_SPACESHIP, ACTION_TURNING_FROM_UP, MV_BIT_LEFT
+ Ydirt_eB, FALSE, FALSE,
+ EL_SAND, ACTION_DIGGING, MV_BIT_RIGHT
},
{
- Ytank_stone, FALSE, FALSE,
- EL_SPACESHIP, ACTION_SMASHED_BY_ROCK, -1
+ Ydirt_sB, FALSE, FALSE,
+ EL_SAND, ACTION_DIGGING, MV_BIT_DOWN
},
{
- Ytank_spring, FALSE, FALSE,
- EL_SPACESHIP, ACTION_SMASHED_BY_SPRING, -1
+ Ydirt_wB, FALSE, FALSE,
+ EL_SAND, ACTION_DIGGING, MV_BIT_LEFT
},
+
{
Xandroid, TRUE, FALSE,
EL_EMC_ANDROID, ACTION_ACTIVE, -1
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_kill_e, FALSE, FALSE,
- EL_SPRING, ACTION_EATING, MV_BIT_RIGHT
- },
- {
- Yspring_kill_eB, FALSE, TRUE,
- EL_SPRING, ACTION_EATING, MV_BIT_RIGHT
- },
- {
- Yspring_kill_w, FALSE, FALSE,
- EL_SPRING, ACTION_EATING, MV_BIT_LEFT
- },
- {
- Yspring_kill_wB, FALSE, TRUE,
- EL_SPRING, ACTION_EATING, MV_BIT_LEFT
- },
+
{
Xeater_n, TRUE, FALSE,
EL_YAMYAM_UP, -1, -1
Yeater_spring, FALSE, FALSE,
EL_YAMYAM, ACTION_SMASHED_BY_SPRING, -1
},
+
{
Xalien, TRUE, FALSE,
EL_ROBOT, -1, -1
Yalien_spring, FALSE, FALSE,
EL_ROBOT, ACTION_SMASHED_BY_SPRING, -1
},
+
+ {
+ Xbug_1_n, TRUE, FALSE,
+ EL_BUG_UP, -1, -1
+ },
+ {
+ Xbug_1_e, TRUE, FALSE,
+ EL_BUG_RIGHT, -1, -1
+ },
+ {
+ Xbug_1_s, TRUE, FALSE,
+ EL_BUG_DOWN, -1, -1
+ },
+ {
+ Xbug_1_w, TRUE, FALSE,
+ EL_BUG_LEFT, -1, -1
+ },
+ {
+ Xbug_2_n, FALSE, FALSE,
+ EL_BUG_UP, -1, -1
+ },
+ {
+ Xbug_2_e, FALSE, FALSE,
+ EL_BUG_RIGHT, -1, -1
+ },
+ {
+ Xbug_2_s, FALSE, FALSE,
+ EL_BUG_DOWN, -1, -1
+ },
+ {
+ Xbug_2_w, FALSE, FALSE,
+ EL_BUG_LEFT, -1, -1
+ },
+ {
+ 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
EL_EMERALD, ACTION_MOVING, MV_BIT_LEFT
},
{
- Yemerald_eat, FALSE, FALSE,
+ Yemerald_blank, FALSE, FALSE,
EL_EMERALD, ACTION_COLLECTING, -1
},
- {
- Yemerald_stone, FALSE, FALSE,
- EL_NUT, ACTION_BREAKING, -1
- },
+
{
Xdiamond, TRUE, FALSE,
EL_DIAMOND, -1, -1
EL_DIAMOND, ACTION_MOVING, MV_BIT_LEFT
},
{
- Ydiamond_eat, FALSE, FALSE,
+ Ydiamond_blank, FALSE, FALSE,
EL_DIAMOND, ACTION_COLLECTING, -1
},
{
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_eat, FALSE, FALSE,
- EL_AMOEBA_DROP, ACTION_GROWING, -1
+ Ystone_s, FALSE, FALSE,
+ EL_ROCK, ACTION_FALLING, -1
},
{
- Ydrip_s1, FALSE, FALSE,
- EL_AMOEBA_DROP, ACTION_FALLING, -1
+ Ystone_sB, FALSE, TRUE,
+ EL_ROCK, ACTION_FALLING, -1
},
{
- Ydrip_s1B, FALSE, TRUE,
- EL_AMOEBA_DROP, ACTION_FALLING, -1
+ Ystone_e, FALSE, FALSE,
+ EL_ROCK, ACTION_MOVING, MV_BIT_RIGHT
},
{
- Ydrip_s2, FALSE, FALSE,
- EL_AMOEBA_DROP, ACTION_FALLING, -1
+ Ystone_eB, FALSE, TRUE,
+ EL_ROCK, ACTION_MOVING, MV_BIT_RIGHT
},
{
- Ydrip_s2B, 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
EL_BOMB, ACTION_MOVING, MV_BIT_LEFT
},
{
- Ybomb_eat, FALSE, FALSE,
+ Ybomb_blank, FALSE, FALSE,
EL_BOMB, ACTION_ACTIVATING, -1
},
+
{
- Xballoon, TRUE, FALSE,
- EL_BALLOON, -1, -1
+ Xnut, TRUE, FALSE,
+ EL_NUT, -1, -1
},
{
- Yballoon_n, FALSE, FALSE,
- EL_BALLOON, ACTION_MOVING, MV_BIT_UP
+ Xnut_pause, FALSE, FALSE,
+ EL_NUT, -1, -1
},
{
- Yballoon_nB, FALSE, TRUE,
- EL_BALLOON, ACTION_MOVING, MV_BIT_UP
+ Xnut_fall, FALSE, FALSE,
+ EL_NUT, -1, -1
},
{
- Yballoon_e, FALSE, FALSE,
- EL_BALLOON, ACTION_MOVING, MV_BIT_RIGHT
+ Ynut_s, FALSE, FALSE,
+ EL_NUT, ACTION_FALLING, -1
},
{
- Yballoon_eB, FALSE, TRUE,
- EL_BALLOON, ACTION_MOVING, MV_BIT_RIGHT
+ Ynut_sB, FALSE, TRUE,
+ EL_NUT, ACTION_FALLING, -1
},
{
- Yballoon_s, FALSE, FALSE,
- EL_BALLOON, ACTION_MOVING, MV_BIT_DOWN
+ Ynut_e, FALSE, FALSE,
+ EL_NUT, ACTION_MOVING, MV_BIT_RIGHT
},
{
- Yballoon_sB, FALSE, TRUE,
- EL_BALLOON, ACTION_MOVING, MV_BIT_DOWN
+ Ynut_eB, FALSE, TRUE,
+ EL_NUT, ACTION_MOVING, MV_BIT_RIGHT
},
{
- Yballoon_w, FALSE, FALSE,
- EL_BALLOON, ACTION_MOVING, MV_BIT_LEFT
+ Ynut_w, FALSE, FALSE,
+ EL_NUT, ACTION_MOVING, MV_BIT_LEFT
},
{
- Yballoon_wB, FALSE, TRUE,
- EL_BALLOON, ACTION_MOVING, MV_BIT_LEFT
+ Ynut_wB, FALSE, TRUE,
+ EL_NUT, ACTION_MOVING, MV_BIT_LEFT
},
{
- Xgrass, TRUE, FALSE,
- EL_EMC_GRASS, -1, -1
+ Ynut_stone, FALSE, FALSE,
+ EL_NUT, ACTION_BREAKING, -1
},
+
{
- Ygrass_nB, FALSE, FALSE,
- EL_EMC_GRASS, ACTION_DIGGING, MV_BIT_UP
+ Xspring, TRUE, FALSE,
+ EL_SPRING, -1, -1
},
{
- Ygrass_eB, FALSE, FALSE,
- EL_EMC_GRASS, ACTION_DIGGING, MV_BIT_RIGHT
+ Xspring_pause, FALSE, FALSE,
+ EL_SPRING, -1, -1
},
{
- Ygrass_sB, FALSE, FALSE,
- EL_EMC_GRASS, ACTION_DIGGING, MV_BIT_DOWN
+ Xspring_e, FALSE, FALSE,
+ EL_SPRING, -1, -1
},
{
- Ygrass_wB, FALSE, FALSE,
- EL_EMC_GRASS, ACTION_DIGGING, MV_BIT_LEFT
+ Xspring_w, FALSE, FALSE,
+ EL_SPRING, -1, -1
},
{
- Xdirt, TRUE, FALSE,
- EL_SAND, -1, -1
+ Xspring_fall, FALSE, FALSE,
+ EL_SPRING, -1, -1
},
{
- Ydirt_nB, FALSE, FALSE,
- EL_SAND, ACTION_DIGGING, MV_BIT_UP
+ Yspring_s, FALSE, FALSE,
+ EL_SPRING, ACTION_FALLING, -1
},
{
- Ydirt_eB, FALSE, FALSE,
- EL_SAND, ACTION_DIGGING, MV_BIT_RIGHT
+ Yspring_sB, FALSE, TRUE,
+ EL_SPRING, ACTION_FALLING, -1
},
{
- Ydirt_sB, FALSE, FALSE,
- EL_SAND, ACTION_DIGGING, MV_BIT_DOWN
+ Yspring_e, FALSE, FALSE,
+ EL_SPRING, ACTION_MOVING, MV_BIT_RIGHT
},
{
- Ydirt_wB, FALSE, FALSE,
- EL_SAND, ACTION_DIGGING, MV_BIT_LEFT
+ Yspring_eB, FALSE, TRUE,
+ EL_SPRING, ACTION_MOVING, MV_BIT_RIGHT
},
{
- Xacid_ne, TRUE, FALSE,
- EL_ACID_POOL_TOPRIGHT, -1, -1
+ Yspring_w, FALSE, FALSE,
+ EL_SPRING, ACTION_MOVING, MV_BIT_LEFT
},
{
- Xacid_se, TRUE, FALSE,
- EL_ACID_POOL_BOTTOMRIGHT, -1, -1
+ Yspring_wB, FALSE, TRUE,
+ EL_SPRING, ACTION_MOVING, MV_BIT_LEFT
},
{
- Xacid_s, TRUE, FALSE,
- EL_ACID_POOL_BOTTOM, -1, -1
+ Yspring_alien_e, FALSE, FALSE,
+ EL_SPRING, ACTION_EATING, MV_BIT_RIGHT
},
{
- Xacid_sw, TRUE, FALSE,
- EL_ACID_POOL_BOTTOMLEFT, -1, -1
+ Yspring_alien_eB, FALSE, TRUE,
+ EL_SPRING, ACTION_EATING, MV_BIT_RIGHT
},
{
- Xacid_nw, TRUE, FALSE,
- EL_ACID_POOL_TOPLEFT, -1, -1
+ Yspring_alien_w, FALSE, FALSE,
+ EL_SPRING, ACTION_EATING, MV_BIT_LEFT
},
{
- Xacid_1, TRUE, FALSE,
- EL_ACID, -1, -1
+ Yspring_alien_wB, FALSE, TRUE,
+ EL_SPRING, ACTION_EATING, MV_BIT_LEFT
},
+
{
- Xacid_2, FALSE, FALSE,
- EL_ACID, -1, -1
+ Xpush_emerald_e, FALSE, FALSE,
+ EL_EMERALD, -1, MV_BIT_RIGHT
},
{
- Xacid_3, FALSE, FALSE,
- EL_ACID, -1, -1
+ Xpush_emerald_w, FALSE, FALSE,
+ EL_EMERALD, -1, MV_BIT_LEFT
},
{
- Xacid_4, FALSE, FALSE,
- EL_ACID, -1, -1
+ Xpush_diamond_e, FALSE, FALSE,
+ EL_DIAMOND, -1, MV_BIT_RIGHT
},
{
- Xacid_5, FALSE, FALSE,
- EL_ACID, -1, -1
+ Xpush_diamond_w, FALSE, FALSE,
+ EL_DIAMOND, -1, MV_BIT_LEFT
},
{
- Xacid_6, FALSE, FALSE,
- EL_ACID, -1, -1
+ Xpush_stone_e, FALSE, FALSE,
+ EL_ROCK, -1, MV_BIT_RIGHT
},
{
- Xacid_7, FALSE, FALSE,
- EL_ACID, -1, -1
+ Xpush_stone_w, FALSE, FALSE,
+ EL_ROCK, -1, MV_BIT_LEFT
+ },
+ {
+ Xpush_bomb_e, FALSE, FALSE,
+ EL_BOMB, -1, MV_BIT_RIGHT
+ },
+ {
+ Xpush_bomb_w, FALSE, FALSE,
+ EL_BOMB, -1, MV_BIT_LEFT
+ },
+ {
+ Xpush_nut_e, FALSE, FALSE,
+ EL_NUT, -1, MV_BIT_RIGHT
+ },
+ {
+ Xpush_nut_w, FALSE, FALSE,
+ EL_NUT, -1, MV_BIT_LEFT
+ },
+ {
+ Xpush_spring_e, FALSE, FALSE,
+ EL_SPRING, -1, MV_BIT_RIGHT
+ },
+ {
+ Xpush_spring_w, FALSE, FALSE,
+ EL_SPRING, -1, MV_BIT_LEFT
+ },
+
+ {
+ Xdynamite, TRUE, FALSE,
+ EL_EM_DYNAMITE, -1, -1
+ },
+ {
+ Ydynamite_blank, FALSE, FALSE,
+ EL_EM_DYNAMITE, ACTION_COLLECTING, -1
+ },
+ {
+ Xdynamite_1, TRUE, FALSE,
+ EL_EM_DYNAMITE_ACTIVE, -1, -1
+ },
+ {
+ Xdynamite_2, FALSE, FALSE,
+ EL_EM_DYNAMITE_ACTIVE, -1, -1
+ },
+ {
+ Xdynamite_3, FALSE, FALSE,
+ EL_EM_DYNAMITE_ACTIVE, -1, -1
+ },
+ {
+ Xdynamite_4, FALSE, FALSE,
+ EL_EM_DYNAMITE_ACTIVE, -1, -1
+ },
+
+ {
+ Xkey_1, TRUE, FALSE,
+ EL_EM_KEY_1, -1, -1
+ },
+ {
+ Xkey_2, TRUE, FALSE,
+ EL_EM_KEY_2, -1, -1
+ },
+ {
+ Xkey_3, TRUE, FALSE,
+ EL_EM_KEY_3, -1, -1
+ },
+ {
+ Xkey_4, TRUE, FALSE,
+ EL_EM_KEY_4, -1, -1
+ },
+ {
+ Xkey_5, TRUE, FALSE,
+ EL_EMC_KEY_5, -1, -1
+ },
+ {
+ Xkey_6, TRUE, FALSE,
+ EL_EMC_KEY_6, -1, -1
+ },
+ {
+ Xkey_7, TRUE, FALSE,
+ EL_EMC_KEY_7, -1, -1
+ },
+ {
+ Xkey_8, TRUE, FALSE,
+ EL_EMC_KEY_8, -1, -1
+ },
+
+ {
+ Xdoor_1, TRUE, FALSE,
+ EL_EM_GATE_1, -1, -1
+ },
+ {
+ Xdoor_2, TRUE, FALSE,
+ EL_EM_GATE_2, -1, -1
+ },
+ {
+ Xdoor_3, TRUE, FALSE,
+ EL_EM_GATE_3, -1, -1
+ },
+ {
+ Xdoor_4, TRUE, FALSE,
+ EL_EM_GATE_4, -1, -1
+ },
+ {
+ Xdoor_5, TRUE, FALSE,
+ EL_EMC_GATE_5, -1, -1
+ },
+ {
+ Xdoor_6, TRUE, FALSE,
+ EL_EMC_GATE_6, -1, -1
},
{
- Xacid_8, FALSE, FALSE,
- EL_ACID, -1, -1
+ Xdoor_7, TRUE, FALSE,
+ EL_EMC_GATE_7, -1, -1
},
{
- Xball_1, TRUE, FALSE,
- EL_EMC_MAGIC_BALL, -1, -1
+ Xdoor_8, TRUE, FALSE,
+ EL_EMC_GATE_8, -1, -1
},
+
{
- Xball_1B, FALSE, FALSE,
- EL_EMC_MAGIC_BALL, ACTION_ACTIVE, -1
+ Xfake_door_1, TRUE, FALSE,
+ EL_EM_GATE_1_GRAY, -1, -1
},
{
- Xball_2, FALSE, FALSE,
- EL_EMC_MAGIC_BALL, ACTION_ACTIVE, -1
+ Xfake_door_2, TRUE, FALSE,
+ EL_EM_GATE_2_GRAY, -1, -1
},
{
- Xball_2B, FALSE, FALSE,
- EL_EMC_MAGIC_BALL, ACTION_ACTIVE, -1
+ Xfake_door_3, TRUE, FALSE,
+ EL_EM_GATE_3_GRAY, -1, -1
},
{
- Yball_eat, FALSE, FALSE,
- EL_EMC_MAGIC_BALL, ACTION_DROPPING, -1
+ Xfake_door_4, TRUE, FALSE,
+ EL_EM_GATE_4_GRAY, -1, -1
},
{
- Ykey_1_eat, FALSE, FALSE,
- EL_EM_KEY_1, ACTION_COLLECTING, -1
+ Xfake_door_5, TRUE, FALSE,
+ EL_EMC_GATE_5_GRAY, -1, -1
},
{
- Ykey_2_eat, FALSE, FALSE,
- EL_EM_KEY_2, ACTION_COLLECTING, -1
+ Xfake_door_6, TRUE, FALSE,
+ EL_EMC_GATE_6_GRAY, -1, -1
},
{
- Ykey_3_eat, FALSE, FALSE,
- EL_EM_KEY_3, ACTION_COLLECTING, -1
+ Xfake_door_7, TRUE, FALSE,
+ EL_EMC_GATE_7_GRAY, -1, -1
},
{
- Ykey_4_eat, FALSE, FALSE,
- EL_EM_KEY_4, ACTION_COLLECTING, -1
+ Xfake_door_8, TRUE, FALSE,
+ EL_EMC_GATE_8_GRAY, -1, -1
},
+
{
- Ykey_5_eat, FALSE, FALSE,
- EL_EMC_KEY_5, ACTION_COLLECTING, -1
+ Xballoon, TRUE, FALSE,
+ EL_BALLOON, -1, -1
},
{
- Ykey_6_eat, FALSE, FALSE,
- EL_EMC_KEY_6, ACTION_COLLECTING, -1
+ Yballoon_n, FALSE, FALSE,
+ EL_BALLOON, ACTION_MOVING, MV_BIT_UP
},
{
- Ykey_7_eat, FALSE, FALSE,
- EL_EMC_KEY_7, ACTION_COLLECTING, -1
+ Yballoon_nB, FALSE, TRUE,
+ EL_BALLOON, ACTION_MOVING, MV_BIT_UP
},
{
- Ykey_8_eat, FALSE, FALSE,
- EL_EMC_KEY_8, ACTION_COLLECTING, -1
+ Yballoon_e, FALSE, FALSE,
+ EL_BALLOON, ACTION_MOVING, MV_BIT_RIGHT
},
{
- Ylenses_eat, FALSE, FALSE,
- EL_EMC_LENSES, ACTION_COLLECTING, -1
+ Yballoon_eB, FALSE, TRUE,
+ EL_BALLOON, ACTION_MOVING, MV_BIT_RIGHT
},
{
- Ymagnify_eat, FALSE, FALSE,
- EL_EMC_MAGNIFIER, ACTION_COLLECTING, -1
+ Yballoon_s, FALSE, FALSE,
+ EL_BALLOON, ACTION_MOVING, MV_BIT_DOWN
},
{
- Ygrass_eat, FALSE, FALSE,
- EL_EMC_GRASS, ACTION_SNAPPING, -1
+ Yballoon_sB, FALSE, TRUE,
+ EL_BALLOON, ACTION_MOVING, MV_BIT_DOWN
},
{
- Ydirt_eat, FALSE, FALSE,
- EL_SAND, ACTION_SNAPPING, -1
+ Yballoon_w, FALSE, FALSE,
+ EL_BALLOON, ACTION_MOVING, MV_BIT_LEFT
},
{
- Xgrow_ns, TRUE, FALSE,
- EL_EXPANDABLE_WALL_VERTICAL, -1, -1
+ Yballoon_wB, FALSE, TRUE,
+ EL_BALLOON, ACTION_MOVING, MV_BIT_LEFT
},
+
{
- Ygrow_ns_eat, FALSE, FALSE,
- EL_EXPANDABLE_WALL_VERTICAL, ACTION_GROWING, -1
+ Xball_1, TRUE, FALSE,
+ EL_EMC_MAGIC_BALL, -1, -1
},
{
- Xgrow_ew, TRUE, FALSE,
- EL_EXPANDABLE_WALL_HORIZONTAL, -1, -1
+ Yball_1, FALSE, FALSE,
+ EL_EMC_MAGIC_BALL, ACTION_ACTIVE, -1
},
{
- Ygrow_ew_eat, FALSE, FALSE,
- EL_EXPANDABLE_WALL_HORIZONTAL, ACTION_GROWING, -1
+ Xball_2, FALSE, FALSE,
+ EL_EMC_MAGIC_BALL, ACTION_ACTIVE, -1
},
{
- Xwonderwall, TRUE, FALSE,
- EL_MAGIC_WALL, -1, -1
+ Yball_2, FALSE, FALSE,
+ EL_EMC_MAGIC_BALL, ACTION_ACTIVE, -1
},
{
- XwonderwallB, FALSE, FALSE,
- EL_MAGIC_WALL, ACTION_ACTIVE, -1
+ Yball_blank, FALSE, FALSE,
+ EL_EMC_MAGIC_BALL, ACTION_DROPPING, -1
},
+
{
Xamoeba_1, TRUE, FALSE,
EL_AMOEBA_DRY, ACTION_OTHER, -1
Xamoeba_8, FALSE, FALSE,
EL_AMOEBA_WET, ACTION_OTHER, -1
},
+
{
- Xdoor_1, TRUE, FALSE,
- EL_EM_GATE_1, -1, -1
- },
- {
- Xdoor_2, TRUE, FALSE,
- EL_EM_GATE_2, -1, -1
- },
- {
- Xdoor_3, TRUE, FALSE,
- EL_EM_GATE_3, -1, -1
- },
- {
- Xdoor_4, TRUE, FALSE,
- EL_EM_GATE_4, -1, -1
- },
- {
- Xdoor_5, TRUE, FALSE,
- EL_EMC_GATE_5, -1, -1
- },
- {
- Xdoor_6, TRUE, FALSE,
- EL_EMC_GATE_6, -1, -1
- },
- {
- Xdoor_7, TRUE, FALSE,
- EL_EMC_GATE_7, -1, -1
- },
- {
- Xdoor_8, TRUE, FALSE,
- EL_EMC_GATE_8, -1, -1
- },
- {
- Xkey_1, TRUE, FALSE,
- EL_EM_KEY_1, -1, -1
- },
- {
- Xkey_2, TRUE, FALSE,
- EL_EM_KEY_2, -1, -1
+ Xdrip, FALSE, FALSE,
+ EL_AMOEBA_DROP, ACTION_GROWING, -1
},
{
- Xkey_3, TRUE, FALSE,
- EL_EM_KEY_3, -1, -1
+ Xdrip_fall, TRUE, FALSE,
+ EL_AMOEBA_DROP, -1, -1
},
{
- Xkey_4, TRUE, FALSE,
- EL_EM_KEY_4, -1, -1
+ Xdrip_stretch, FALSE, FALSE,
+ EL_AMOEBA_DROP, ACTION_FALLING, -1
},
{
- Xkey_5, TRUE, FALSE,
- EL_EMC_KEY_5, -1, -1
+ Xdrip_stretchB, FALSE, TRUE,
+ EL_AMOEBA_DROP, ACTION_FALLING, -1
},
{
- Xkey_6, TRUE, FALSE,
- EL_EMC_KEY_6, -1, -1
+ Ydrip_1_s, FALSE, FALSE,
+ EL_AMOEBA_DROP, ACTION_FALLING, -1
},
{
- Xkey_7, TRUE, FALSE,
- EL_EMC_KEY_7, -1, -1
+ Ydrip_1_sB, FALSE, TRUE,
+ EL_AMOEBA_DROP, ACTION_FALLING, -1
},
{
- Xkey_8, TRUE, FALSE,
- EL_EMC_KEY_8, -1, -1
+ Ydrip_2_s, FALSE, FALSE,
+ EL_AMOEBA_DROP, ACTION_FALLING, -1
},
{
- Xwind_n, TRUE, FALSE,
- EL_BALLOON_SWITCH_UP, -1, -1
+ Ydrip_2_sB, FALSE, TRUE,
+ EL_AMOEBA_DROP, ACTION_FALLING, -1
},
+
{
- Xwind_e, TRUE, FALSE,
- EL_BALLOON_SWITCH_RIGHT, -1, -1
+ Xwonderwall, TRUE, FALSE,
+ EL_MAGIC_WALL, -1, -1
},
{
- Xwind_s, TRUE, FALSE,
- EL_BALLOON_SWITCH_DOWN, -1, -1
+ Ywonderwall, FALSE, FALSE,
+ EL_MAGIC_WALL, ACTION_ACTIVE, -1
},
+
{
- Xwind_w, TRUE, FALSE,
- EL_BALLOON_SWITCH_LEFT, -1, -1
+ Xwheel, TRUE, FALSE,
+ EL_ROBOT_WHEEL, -1, -1
},
{
- Xwind_nesw, TRUE, FALSE,
- EL_BALLOON_SWITCH_ANY, -1, -1
+ Ywheel, FALSE, FALSE,
+ EL_ROBOT_WHEEL, ACTION_ACTIVE, -1
},
+
{
- Xwind_stop, TRUE, FALSE,
- EL_BALLOON_SWITCH_NONE, -1, -1
+ Xswitch, TRUE, FALSE,
+ EL_EMC_MAGIC_BALL_SWITCH, -1, -1
},
{
- Xexit, TRUE, FALSE,
- EL_EM_EXIT_CLOSED, -1, -1
+ Yswitch, FALSE, FALSE,
+ EL_EMC_MAGIC_BALL_SWITCH, ACTION_ACTIVE, -1
},
+
{
- Xexit_1, TRUE, FALSE,
- EL_EM_EXIT_OPEN, -1, -1
+ Xbumper, TRUE, FALSE,
+ EL_EMC_SPRING_BUMPER, -1, -1
},
{
- Xexit_2, FALSE, FALSE,
- EL_EM_EXIT_OPEN, -1, -1
+ Ybumper, FALSE, FALSE,
+ EL_EMC_SPRING_BUMPER, ACTION_ACTIVE, -1
},
+
{
- Xexit_3, FALSE, FALSE,
- EL_EM_EXIT_OPEN, -1, -1
+ Xacid_nw, TRUE, FALSE,
+ EL_ACID_POOL_TOPLEFT, -1, -1
},
{
- Xdynamite, TRUE, FALSE,
- EL_EM_DYNAMITE, -1, -1
+ Xacid_ne, TRUE, FALSE,
+ EL_ACID_POOL_TOPRIGHT, -1, -1
},
{
- Ydynamite_eat, FALSE, FALSE,
- EL_EM_DYNAMITE, ACTION_COLLECTING, -1
+ Xacid_sw, TRUE, FALSE,
+ EL_ACID_POOL_BOTTOMLEFT, -1, -1
},
{
- Xdynamite_1, TRUE, FALSE,
- EL_EM_DYNAMITE_ACTIVE, -1, -1
+ Xacid_s, TRUE, FALSE,
+ EL_ACID_POOL_BOTTOM, -1, -1
},
{
- Xdynamite_2, FALSE, FALSE,
- EL_EM_DYNAMITE_ACTIVE, -1, -1
+ Xacid_se, TRUE, FALSE,
+ EL_ACID_POOL_BOTTOMRIGHT, -1, -1
},
+
{
- Xdynamite_3, FALSE, FALSE,
- EL_EM_DYNAMITE_ACTIVE, -1, -1
+ Xfake_blank, TRUE, FALSE,
+ EL_INVISIBLE_WALL, -1, -1
},
{
- Xdynamite_4, FALSE, FALSE,
- EL_EM_DYNAMITE_ACTIVE, -1, -1
+ Yfake_blank, FALSE, FALSE,
+ EL_INVISIBLE_WALL, ACTION_ACTIVE, -1
},
+
{
- Xbumper, TRUE, FALSE,
- EL_EMC_SPRING_BUMPER, -1, -1
+ Xfake_grass, TRUE, FALSE,
+ EL_EMC_FAKE_GRASS, -1, -1
},
{
- XbumperB, FALSE, FALSE,
- EL_EMC_SPRING_BUMPER, ACTION_ACTIVE, -1
+ Yfake_grass, FALSE, FALSE,
+ EL_EMC_FAKE_GRASS, ACTION_ACTIVE, -1
},
+
{
- Xwheel, TRUE, FALSE,
- EL_ROBOT_WHEEL, -1, -1
+ Xfake_amoeba, TRUE, FALSE,
+ EL_EMC_DRIPPER, -1, -1
},
{
- XwheelB, FALSE, FALSE,
- EL_ROBOT_WHEEL, ACTION_ACTIVE, -1
+ Yfake_amoeba, FALSE, FALSE,
+ EL_EMC_DRIPPER, ACTION_ACTIVE, -1
},
+
{
- Xswitch, TRUE, FALSE,
- EL_EMC_MAGIC_BALL_SWITCH, -1, -1
+ Xlenses, TRUE, FALSE,
+ EL_EMC_LENSES, -1, -1
},
+
{
- XswitchB, FALSE, FALSE,
- EL_EMC_MAGIC_BALL_SWITCH, ACTION_ACTIVE, -1
+ Xmagnify, TRUE, FALSE,
+ EL_EMC_MAGNIFIER, -1, -1
},
+
{
Xsand, TRUE, FALSE,
EL_QUICKSAND_EMPTY, -1, -1
},
{
Xsand_stonein_2, FALSE, TRUE,
- EL_ROCK, ACTION_FILLING, -1
- },
- {
- Xsand_stonein_3, FALSE, TRUE,
- EL_ROCK, ACTION_FILLING, -1
- },
- {
- Xsand_stonein_4, FALSE, TRUE,
- EL_ROCK, ACTION_FILLING, -1
- },
- {
- Xsand_stonesand_1, FALSE, FALSE,
- EL_QUICKSAND_EMPTYING, -1, -1
- },
- {
- Xsand_stonesand_2, FALSE, FALSE,
- EL_QUICKSAND_EMPTYING, -1, -1
- },
- {
- Xsand_stonesand_3, FALSE, FALSE,
- EL_QUICKSAND_EMPTYING, -1, -1
- },
- {
- Xsand_stonesand_4, FALSE, FALSE,
- EL_QUICKSAND_EMPTYING, -1, -1
- },
- {
- Xsand_stonesand_quickout_1, FALSE, FALSE,
- EL_QUICKSAND_EMPTYING, -1, -1
- },
- {
- Xsand_stonesand_quickout_2, FALSE, FALSE,
- EL_QUICKSAND_EMPTYING, -1, -1
+ EL_ROCK, ACTION_FILLING, -1
},
{
- Xsand_stoneout_1, FALSE, FALSE,
- EL_ROCK, ACTION_EMPTYING, -1
+ Xsand_stonein_3, FALSE, TRUE,
+ EL_ROCK, ACTION_FILLING, -1
},
{
- Xsand_stoneout_2, FALSE, FALSE,
- EL_ROCK, ACTION_EMPTYING, -1
+ Xsand_stonein_4, FALSE, TRUE,
+ EL_ROCK, ACTION_FILLING, -1
},
{
Xsand_sandstone_1, FALSE, FALSE,
EL_QUICKSAND_FILLING, -1, -1
},
{
- Xplant, TRUE, FALSE,
- EL_EMC_PLANT, -1, -1
- },
- {
- Yplant, FALSE, FALSE,
- EL_EMC_PLANT, -1, -1
- },
- {
- Xlenses, TRUE, FALSE,
- EL_EMC_LENSES, -1, -1
- },
- {
- Xmagnify, TRUE, FALSE,
- EL_EMC_MAGNIFIER, -1, -1
- },
- {
- Xdripper, TRUE, FALSE,
- EL_EMC_DRIPPER, -1, -1
- },
- {
- XdripperB, FALSE, FALSE,
- EL_EMC_DRIPPER, ACTION_ACTIVE, -1
- },
- {
- Xfake_blank, TRUE, FALSE,
- EL_INVISIBLE_WALL, -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
Xwall_4, TRUE, FALSE,
EL_EMC_WALL_16, -1, -1
},
+
{
- Xround_wall_1, TRUE, FALSE,
+ Xroundwall_1, TRUE, FALSE,
EL_WALL_SLIPPERY, -1, -1
},
{
- Xround_wall_2, TRUE, FALSE,
+ Xroundwall_2, TRUE, FALSE,
EL_EMC_WALL_SLIPPERY_2, -1, -1
},
{
- Xround_wall_3, TRUE, FALSE,
+ Xroundwall_3, TRUE, FALSE,
EL_EMC_WALL_SLIPPERY_3, -1, -1
},
{
- Xround_wall_4, TRUE, FALSE,
+ 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
Xdecor_12, TRUE, FALSE,
EL_EMC_WALL_12, -1, -1
},
+
{
Xalpha_0, TRUE, FALSE,
EL_CHAR('0'), -1, -1
EL_CHAR('!'), -1, -1
},
{
- Xalpha_quote, TRUE, FALSE,
- EL_CHAR('"'), -1, -1
+ Xalpha_apost, TRUE, FALSE,
+ EL_CHAR('\''), -1, -1
},
{
Xalpha_comma, TRUE, FALSE,
},
{
- 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
},
{
int action;
int direction;
}
-em_player_mapping_list[] =
+em_player_mapping_list[MAX_PLAYERS * PLY_MAX + 1] =
{
{
- SPR_walk + 0, 0,
+ PLY_walk_n, 0,
EL_PLAYER_1, ACTION_MOVING, MV_BIT_UP,
},
{
- SPR_walk + 1, 0,
+ PLY_walk_e, 0,
EL_PLAYER_1, ACTION_MOVING, MV_BIT_RIGHT,
},
{
- SPR_walk + 2, 0,
+ PLY_walk_s, 0,
EL_PLAYER_1, ACTION_MOVING, MV_BIT_DOWN,
},
{
- SPR_walk + 3, 0,
+ PLY_walk_w, 0,
EL_PLAYER_1, ACTION_MOVING, MV_BIT_LEFT,
},
{
- SPR_push + 0, 0,
+ PLY_push_n, 0,
EL_PLAYER_1, ACTION_PUSHING, MV_BIT_UP,
},
{
- SPR_push + 1, 0,
+ PLY_push_e, 0,
EL_PLAYER_1, ACTION_PUSHING, MV_BIT_RIGHT,
},
{
- SPR_push + 2, 0,
+ PLY_push_s, 0,
EL_PLAYER_1, ACTION_PUSHING, MV_BIT_DOWN,
},
{
- SPR_push + 3, 0,
+ PLY_push_w, 0,
EL_PLAYER_1, ACTION_PUSHING, MV_BIT_LEFT,
},
{
- SPR_spray + 0, 0,
+ PLY_shoot_n, 0,
EL_PLAYER_1, ACTION_SNAPPING, MV_BIT_UP,
},
{
- SPR_spray + 1, 0,
+ PLY_shoot_e, 0,
EL_PLAYER_1, ACTION_SNAPPING, MV_BIT_RIGHT,
},
{
- SPR_spray + 2, 0,
+ PLY_shoot_s, 0,
EL_PLAYER_1, ACTION_SNAPPING, MV_BIT_DOWN,
},
{
- SPR_spray + 3, 0,
+ PLY_shoot_w, 0,
EL_PLAYER_1, ACTION_SNAPPING, MV_BIT_LEFT,
},
{
- SPR_walk + 0, 1,
+ PLY_walk_n, 1,
EL_PLAYER_2, ACTION_MOVING, MV_BIT_UP,
},
{
- SPR_walk + 1, 1,
+ PLY_walk_e, 1,
EL_PLAYER_2, ACTION_MOVING, MV_BIT_RIGHT,
},
{
- SPR_walk + 2, 1,
+ PLY_walk_s, 1,
EL_PLAYER_2, ACTION_MOVING, MV_BIT_DOWN,
},
{
- SPR_walk + 3, 1,
+ PLY_walk_w, 1,
EL_PLAYER_2, ACTION_MOVING, MV_BIT_LEFT,
},
{
- SPR_push + 0, 1,
+ PLY_push_n, 1,
EL_PLAYER_2, ACTION_PUSHING, MV_BIT_UP,
},
{
- SPR_push + 1, 1,
+ PLY_push_e, 1,
EL_PLAYER_2, ACTION_PUSHING, MV_BIT_RIGHT,
},
{
- SPR_push + 2, 1,
+ PLY_push_s, 1,
EL_PLAYER_2, ACTION_PUSHING, MV_BIT_DOWN,
},
{
- SPR_push + 3, 1,
+ PLY_push_w, 1,
EL_PLAYER_2, ACTION_PUSHING, MV_BIT_LEFT,
},
{
- SPR_spray + 0, 1,
+ PLY_shoot_n, 1,
EL_PLAYER_2, ACTION_SNAPPING, MV_BIT_UP,
},
{
- SPR_spray + 1, 1,
+ PLY_shoot_e, 1,
EL_PLAYER_2, ACTION_SNAPPING, MV_BIT_RIGHT,
},
{
- SPR_spray + 2, 1,
+ PLY_shoot_s, 1,
EL_PLAYER_2, ACTION_SNAPPING, MV_BIT_DOWN,
},
{
- SPR_spray + 3, 1,
+ PLY_shoot_w, 1,
EL_PLAYER_2, ACTION_SNAPPING, MV_BIT_LEFT,
},
{
- SPR_still, 0,
+ PLY_still, 0,
EL_PLAYER_1, ACTION_DEFAULT, -1,
},
{
- SPR_still, 1,
+ PLY_still, 1,
EL_PLAYER_2, ACTION_DEFAULT, -1,
},
{
- SPR_walk + 0, 2,
+ PLY_walk_n, 2,
EL_PLAYER_3, ACTION_MOVING, MV_BIT_UP,
},
{
- SPR_walk + 1, 2,
+ PLY_walk_e, 2,
EL_PLAYER_3, ACTION_MOVING, MV_BIT_RIGHT,
},
{
- SPR_walk + 2, 2,
+ PLY_walk_s, 2,
EL_PLAYER_3, ACTION_MOVING, MV_BIT_DOWN,
},
{
- SPR_walk + 3, 2,
+ PLY_walk_w, 2,
EL_PLAYER_3, ACTION_MOVING, MV_BIT_LEFT,
},
{
- SPR_push + 0, 2,
+ PLY_push_n, 2,
EL_PLAYER_3, ACTION_PUSHING, MV_BIT_UP,
},
{
- SPR_push + 1, 2,
+ PLY_push_e, 2,
EL_PLAYER_3, ACTION_PUSHING, MV_BIT_RIGHT,
},
{
- SPR_push + 2, 2,
+ PLY_push_s, 2,
EL_PLAYER_3, ACTION_PUSHING, MV_BIT_DOWN,
},
{
- SPR_push + 3, 2,
+ PLY_push_w, 2,
EL_PLAYER_3, ACTION_PUSHING, MV_BIT_LEFT,
},
{
- SPR_spray + 0, 2,
+ PLY_shoot_n, 2,
EL_PLAYER_3, ACTION_SNAPPING, MV_BIT_UP,
},
{
- SPR_spray + 1, 2,
+ PLY_shoot_e, 2,
EL_PLAYER_3, ACTION_SNAPPING, MV_BIT_RIGHT,
},
{
- SPR_spray + 2, 2,
+ PLY_shoot_s, 2,
EL_PLAYER_3, ACTION_SNAPPING, MV_BIT_DOWN,
},
{
- SPR_spray + 3, 2,
+ PLY_shoot_w, 2,
EL_PLAYER_3, ACTION_SNAPPING, MV_BIT_LEFT,
},
{
- SPR_walk + 0, 3,
+ PLY_walk_n, 3,
EL_PLAYER_4, ACTION_MOVING, MV_BIT_UP,
},
{
- SPR_walk + 1, 3,
+ PLY_walk_e, 3,
EL_PLAYER_4, ACTION_MOVING, MV_BIT_RIGHT,
},
{
- SPR_walk + 2, 3,
+ PLY_walk_s, 3,
EL_PLAYER_4, ACTION_MOVING, MV_BIT_DOWN,
},
{
- SPR_walk + 3, 3,
+ PLY_walk_w, 3,
EL_PLAYER_4, ACTION_MOVING, MV_BIT_LEFT,
},
{
- SPR_push + 0, 3,
+ PLY_push_n, 3,
EL_PLAYER_4, ACTION_PUSHING, MV_BIT_UP,
},
{
- SPR_push + 1, 3,
+ PLY_push_e, 3,
EL_PLAYER_4, ACTION_PUSHING, MV_BIT_RIGHT,
},
{
- SPR_push + 2, 3,
+ PLY_push_s, 3,
EL_PLAYER_4, ACTION_PUSHING, MV_BIT_DOWN,
},
{
- SPR_push + 3, 3,
+ PLY_push_w, 3,
EL_PLAYER_4, ACTION_PUSHING, MV_BIT_LEFT,
},
{
- SPR_spray + 0, 3,
+ PLY_shoot_n, 3,
EL_PLAYER_4, ACTION_SNAPPING, MV_BIT_UP,
},
{
- SPR_spray + 1, 3,
+ PLY_shoot_e, 3,
EL_PLAYER_4, ACTION_SNAPPING, MV_BIT_RIGHT,
},
{
- SPR_spray + 2, 3,
+ PLY_shoot_s, 3,
EL_PLAYER_4, ACTION_SNAPPING, MV_BIT_DOWN,
},
{
- SPR_spray + 3, 3,
+ PLY_shoot_w, 3,
EL_PLAYER_4, ACTION_SNAPPING, MV_BIT_LEFT,
},
{
- SPR_still, 2,
+ PLY_still, 2,
EL_PLAYER_3, ACTION_DEFAULT, -1,
},
{
- SPR_still, 3,
+ PLY_still, 3,
EL_PLAYER_4, ACTION_DEFAULT, -1,
},
}
};
-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;
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)
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++)
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)
return game.team_mode || network_playing;
}
-int getGameFrameDelay_EM(int native_em_game_frame_delay)
-{
- 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;
-}
-
unsigned int InitRND(int seed)
{
if (level.game_engine_type == GAME_ENGINE_TYPE_EM)
return InitEngineRandom_RND(seed);
}
-static struct Mapping_EM_to_RND_object object_mapping[TILE_MAX];
-static struct Mapping_EM_to_RND_player player_mapping[MAX_PLAYERS][SPR_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)
{
{
switch (tile)
{
- case Yacid_splash_eB:
- case Yacid_splash_wB:
+ case Xsplash_e:
+ case Xsplash_w:
return (frame_em > 5 ? EL_EMPTY : element);
default:
{
switch (tile)
{
- case Yacid_splash_eB:
- case Yacid_splash_wB:
+ case Xsplash_e:
+ case Xsplash_w:
return EL_EMPTY;
- case Yemerald_stone:
+ case Ynut_stone:
return EL_EMERALD;
case Ydiamond_stone:
case Xdrip_stretch:
case Xdrip_stretchB:
- case Ydrip_s1:
- case Ydrip_s1B:
- case Xball_1B:
+ case Ydrip_1_s:
+ case Ydrip_1_sB:
+ case Yball_1:
case Xball_2:
- case Xball_2B:
- case Yball_eat:
- case Ykey_1_eat:
- case Ykey_2_eat:
- case Ykey_3_eat:
- case Ykey_4_eat:
- case Ykey_5_eat:
- case Ykey_6_eat:
- case Ykey_7_eat:
- case Ykey_8_eat:
- case Ylenses_eat:
- case Ymagnify_eat:
- case Ygrass_eat:
- case Ydirt_eat:
+ case Yball_2:
+ case Yball_blank:
+ case Ykey_1_blank:
+ case Ykey_2_blank:
+ case Ykey_3_blank:
+ case Ykey_4_blank:
+ case Ykey_5_blank:
+ case Ykey_6_blank:
+ case Ykey_7_blank:
+ case Ykey_8_blank:
+ case Ylenses_blank:
+ case Ymagnify_blank:
+ case Ygrass_blank:
+ case Ydirt_blank:
case Xsand_stonein_1:
case Xsand_stonein_2:
case Xsand_stonein_3:
case Ytank_s_e:
case Ytank_w_s:
case Ytank_n_w:
- case Yacid_splash_eB:
- case Yacid_splash_wB:
- case Yemerald_stone:
+ case Xsplash_e:
+ case Xsplash_w:
+ case Ynut_stone:
return TRUE;
}
{
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;
// always start with reliable default values
for (p = 0; p < MAX_PLAYERS; p++)
{
- for (i = 0; i < SPR_MAX; i++)
+ for (i = 0; i < PLY_MAX; i++)
{
player_mapping[p][i].element_rnd = EL_UNKNOWN;
player_mapping[p][i].action = ACTION_DEFAULT;
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;
int effective_action = (j < 7 ? action :
i == Xdrip_stretch ? action :
i == Xdrip_stretchB ? action :
- i == Ydrip_s1 ? action :
- i == Ydrip_s1B ? action :
- i == Xball_1B ? action :
+ i == Ydrip_1_s ? action :
+ i == Ydrip_1_sB ? action :
+ i == Yball_1 ? action :
i == Xball_2 ? action :
- i == Xball_2B ? action :
- i == Yball_eat ? action :
- i == Ykey_1_eat ? action :
- i == Ykey_2_eat ? action :
- i == Ykey_3_eat ? action :
- i == Ykey_4_eat ? action :
- i == Ykey_5_eat ? action :
- i == Ykey_6_eat ? action :
- i == Ykey_7_eat ? action :
- i == Ykey_8_eat ? action :
- i == Ylenses_eat ? action :
- i == Ymagnify_eat ? action :
- i == Ygrass_eat ? action :
- i == Ydirt_eat ? action :
+ i == Yball_2 ? action :
+ i == Yball_blank ? action :
+ i == Ykey_1_blank ? action :
+ i == Ykey_2_blank ? action :
+ i == Ykey_3_blank ? action :
+ i == Ykey_4_blank ? action :
+ i == Ykey_5_blank ? action :
+ i == Ykey_6_blank ? action :
+ i == Ykey_7_blank ? action :
+ i == Ykey_8_blank ? action :
+ i == Ylenses_blank ? action :
+ i == Ymagnify_blank ? action :
+ i == Ygrass_blank ? action :
+ i == Ydirt_blank ? action :
i == Xsand_stonein_1 ? action :
i == Xsand_stonein_2 ? action :
i == Xsand_stonein_3 ? action :
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
g->anim_mode & ANIM_LINEAR);
int sync_frame = (i == Xdrip_stretch ? 7 :
i == Xdrip_stretchB ? 7 :
- i == Ydrip_s2 ? j + 8 :
- i == Ydrip_s2B ? j + 8 :
+ i == Ydrip_2_s ? j + 8 :
+ i == Ydrip_2_sB ? j + 8 :
i == Xacid_1 ? 0 :
i == Xacid_2 ? 10 :
i == Xacid_3 ? 20 :
i == Xfake_acid_7 ? 60 :
i == Xfake_acid_8 ? 70 :
i == Xball_2 ? 7 :
- i == Xball_2B ? j + 8 :
- i == Yball_eat ? j + 1 :
- i == Ykey_1_eat ? j + 1 :
- i == Ykey_2_eat ? j + 1 :
- i == Ykey_3_eat ? j + 1 :
- i == Ykey_4_eat ? j + 1 :
- i == Ykey_5_eat ? j + 1 :
- i == Ykey_6_eat ? j + 1 :
- i == Ykey_7_eat ? j + 1 :
- i == Ykey_8_eat ? j + 1 :
- i == Ylenses_eat ? j + 1 :
- i == Ymagnify_eat ? j + 1 :
- i == Ygrass_eat ? j + 1 :
- i == Ydirt_eat ? j + 1 :
+ i == Yball_2 ? j + 8 :
+ i == Yball_blank ? j + 1 :
+ i == Ykey_1_blank ? j + 1 :
+ i == Ykey_2_blank ? j + 1 :
+ i == Ykey_3_blank ? j + 1 :
+ i == Ykey_4_blank ? j + 1 :
+ i == Ykey_5_blank ? j + 1 :
+ i == Ykey_6_blank ? j + 1 :
+ i == Ykey_7_blank ? j + 1 :
+ i == Ykey_8_blank ? j + 1 :
+ i == Ylenses_blank ? j + 1 :
+ i == Ymagnify_blank ? j + 1 :
+ i == Ygrass_blank ? j + 1 :
+ i == Ydirt_blank ? j + 1 :
i == Xamoeba_1 ? 0 :
i == Xamoeba_2 ? 1 :
i == Xamoeba_3 ? 2 :
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 :
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,
effective_action == ACTION_EMPTYING ? MV_DOWN : direction);
int dx = (move_dir == MV_LEFT ? -1 : move_dir == MV_RIGHT ? 1 : 0);
int dy = (move_dir == MV_UP ? -1 : move_dir == MV_DOWN ? 1 : 0);
- int num_steps = (i == Ydrip_s1 ? 16 :
- i == Ydrip_s1B ? 16 :
- i == Ydrip_s2 ? 16 :
- i == Ydrip_s2B ? 16 :
+ int num_steps = (i == Ydrip_1_s ? 16 :
+ i == Ydrip_1_sB ? 16 :
+ i == Ydrip_2_s ? 16 :
+ i == Ydrip_2_sB ? 16 :
i == Xsand_stonein_1 ? 32 :
i == Xsand_stonein_2 ? 32 :
i == Xsand_stonein_3 ? 32 :
i == Xsand_stoneout_2 ? 16 : 8);
int cx = ABS(dx) * (TILEX / num_steps);
int cy = ABS(dy) * (TILEY / num_steps);
- int step_frame = (i == Ydrip_s2 ? j + 8 :
- i == Ydrip_s2B ? j + 8 :
+ int step_frame = (i == Ydrip_2_s ? j + 8 :
+ i == Ydrip_2_sB ? j + 8 :
i == Xsand_stonein_2 ? j + 8 :
i == Xsand_stonein_3 ? j + 16 :
i == Xsand_stonein_4 ? j + 24 :
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++)
{
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;
for (p = 0; p < MAX_PLAYERS; p++)
{
- for (i = 0; i < SPR_MAX; i++)
+ for (i = 0; i < PLY_MAX; i++)
{
int element = player_mapping[p][i].element_rnd;
int action = player_mapping[p][i].action;
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,
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,