if (game_status == GAME_MODE_PLAYING &&
level.game_engine_type == GAME_ENGINE_TYPE_EM)
{
+#if 1
+ RedrawPlayfield_EM(force_redraw);
+#else
BlitScreenToBitmap_EM(backbuffer);
+#endif
}
else if (game_status == GAME_MODE_PLAYING && !game.envelope_active)
{
int last_player_frame = player->Frame;
int frame = 0;
+#if 1
+ /* GfxElement[][] is set to the element the player is digging or collecting;
+ remove also for off-screen player if the player is not moving anymore */
+ if (IN_LEV_FIELD(jx, jy) && !player_is_moving)
+ GfxElement[jx][jy] = EL_UNDEFINED;
+#endif
+
if (!player->active || !IN_SCR_FIELD(SCREENX(last_jx), SCREENY(last_jy)))
return;
DrawLevelElement(last_jx, last_jy, Back[last_jx][last_jy]);
if (last_element == EL_DYNAMITE_ACTIVE ||
+ last_element == EL_EM_DYNAMITE_ACTIVE ||
last_element == EL_SP_DISK_RED_ACTIVE)
DrawDynamite(last_jx, last_jy);
else
DrawLevelFieldThruMask(last_jx, last_jy);
}
else if (last_element == EL_DYNAMITE_ACTIVE ||
+ last_element == EL_EM_DYNAMITE_ACTIVE ||
last_element == EL_SP_DISK_RED_ACTIVE)
DrawDynamite(last_jx, last_jy);
else
},
{
Yspring_kill_e, FALSE, FALSE,
- EL_SPRING, ACTION_SLURPING, MV_BIT_RIGHT
+ EL_SPRING, ACTION_EATING, MV_BIT_RIGHT
},
{
Yspring_kill_eB, FALSE, TRUE,
- EL_SPRING, ACTION_SLURPING, MV_BIT_RIGHT
+ EL_SPRING, ACTION_EATING, MV_BIT_RIGHT
},
{
Yspring_kill_w, FALSE, FALSE,
- EL_SPRING, ACTION_SLURPING, MV_BIT_LEFT
+ EL_SPRING, ACTION_EATING, MV_BIT_LEFT
},
{
Yspring_kill_wB, FALSE, TRUE,
- EL_SPRING, ACTION_SLURPING, MV_BIT_LEFT
+ EL_SPRING, ACTION_EATING, MV_BIT_LEFT
},
{
Xeater_n, TRUE, FALSE,
},
{
Xdynamite, TRUE, FALSE,
- EL_DYNAMITE, -1, -1
+ EL_EM_DYNAMITE, -1, -1
},
{
Ydynamite_eat, FALSE, FALSE,
- EL_DYNAMITE, ACTION_COLLECTING, -1
+ EL_EM_DYNAMITE, ACTION_COLLECTING, -1
},
{
Xdynamite_1, TRUE, FALSE,
- EL_DYNAMITE_ACTIVE, -1, -1
+ EL_EM_DYNAMITE_ACTIVE, -1, -1
},
{
Xdynamite_2, FALSE, FALSE,
- EL_DYNAMITE_ACTIVE, -1, -1
+ EL_EM_DYNAMITE_ACTIVE, -1, -1
},
{
Xdynamite_3, FALSE, FALSE,
- EL_DYNAMITE_ACTIVE, -1, -1
+ EL_EM_DYNAMITE_ACTIVE, -1, -1
},
{
Xdynamite_4, FALSE, FALSE,
- EL_DYNAMITE_ACTIVE, -1, -1
+ EL_EM_DYNAMITE_ACTIVE, -1, -1
},
{
Xbumper, TRUE, FALSE,
return game_frame_delay_value;
}
+int getCenteredPlayerNr_EM()
+{
+ if (game.centered_player_nr_next >= 0 &&
+ !native_em_level.ply[game.centered_player_nr_next]->alive)
+ game.centered_player_nr_next = game.centered_player_nr;
+
+ if (game.centered_player_nr != game.centered_player_nr_next)
+ game.centered_player_nr = game.centered_player_nr_next;
+
+ return game.centered_player_nr;
+}
+
+int getActivePlayers_EM()
+{
+ int num_players = 0;
+ int i;
+
+ if (!tape.playing)
+ return -1;
+
+ for (i = 0; i < MAX_PLAYERS; i++)
+ if (tape.player_participates[i])
+ num_players++;
+
+ return num_players;
+}
+
unsigned int InitRND(long seed)
{
if (level.game_engine_type == GAME_ENGINE_TYPE_EM)
i == Xexit_2 ? j + 8 :
i == Xexit_3 ? j + 16 :
i == Xdynamite_1 ? 0 :
- i == Xdynamite_2 ? 20 :
- i == Xdynamite_3 ? 40 :
- i == Xdynamite_4 ? 60 :
+ i == Xdynamite_2 ? 8 :
+ i == Xdynamite_3 ? 16 :
+ i == Xdynamite_4 ? 24 :
i == Xsand_stonein_1 ? j + 1 :
i == Xsand_stonein_2 ? j + 9 :
i == Xsand_stonein_3 ? j + 17 :
if (!g->double_movement && (effective_action == ACTION_FALLING ||
effective_action == ACTION_MOVING ||
effective_action == ACTION_PUSHING ||
- effective_action == ACTION_SLURPING))
+ effective_action == ACTION_EATING))
{
int move_dir =
(effective_action == ACTION_FALLING ? MV_DOWN : direction);
if ((action == ACTION_SMASHED_BY_ROCK ||
action == ACTION_SMASHED_BY_SPRING ||
- action == ACTION_SLURPING) &&
+ action == ACTION_EATING) &&
graphic_action == graphic_default)
{
int e = (action == ACTION_SMASHED_BY_ROCK ? Ystone_s :