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)
{
DrawLevelElementExt(x, y, 0, 0, Feld[x][y], NO_CUTTING, USE_MASKING);
}
-#define TILE_GFX_ELEMENT(x, y) \
- (GfxElement[x][y] != EL_UNDEFINED && Feld[x][y] != EL_EXPLOSION ? \
- GfxElement[x][y] : Feld[x][y])
-
static void DrawLevelFieldCrumbledSandExt(int x, int y, int graphic, int frame)
{
Bitmap *src_bitmap;
return;
#if 1
+ /*
+ if (Feld[x][y] == EL_ELEMENT_SNAPPING &&
+ GFX_CRUMBLED(GfxElement[x][y]))
+ */
+
if (Feld[x][y] == EL_ELEMENT_SNAPPING &&
+ GfxElement[x][y] != EL_UNDEFINED &&
GFX_CRUMBLED(GfxElement[x][y]))
{
DrawLevelFieldCrumbledSandDigging(x, y, GfxDir[x][y], GfxFrame[x][y]);
+
return;
}
#endif
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;
if (player_is_moving && last_element == EL_EXPLOSION)
{
- int graphic = el_act2img(GfxElement[last_jx][last_jy], ACTION_EXPLODING);
+ int element = (GfxElement[last_jx][last_jy] != EL_UNDEFINED ?
+ GfxElement[last_jx][last_jy] : EL_EMPTY);
+ int graphic = el_act2img(element, ACTION_EXPLODING);
int delay = (game.emulation == EMU_SUPAPLEX ? 3 : 2);
int phase = ExplodePhase[last_jx][last_jy] - 1;
int frame = getGraphicAnimationFrame(graphic, phase - delay);
return font_info[font_nr].special_graphic[GFX_SPECIAL_ARG_DEFAULT];
}
+void setCenteredPlayerNr_EM(int centered_player_nr)
+{
+ game.centered_player_nr = game.centered_player_nr_next = centered_player_nr;
+}
+
+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;
+}
+
int getGameFrameDelay_EM(int native_em_game_frame_delay)
{
int game_frame_delay_value;