+ scroll_x -= dx;
+ scroll_y -= dy;
+
+ fx += dx * TILEX / 2;
+ fy += dy * TILEY / 2;
+
+ ScrollLevel(dx, dy);
+ DrawAllPlayers();
+
+ /* scroll in two steps of half tile size to make things smoother */
+ BlitBitmap(drawto_field, window, fx, fy, SXSIZE, SYSIZE, SX, SY);
+ FlushDisplay();
+ Delay(wait_delay_value);
+
+ /* scroll second step to align at full tile size */
+ BackToFront();
+ Delay(wait_delay_value);
+ }
+
+ DrawPlayer(player);
+ BackToFront();
+ Delay(wait_delay_value);
+ }
+}
+#endif
+
+void RedrawPlayfield_EM(boolean force_redraw)
+{
+#if 1
+ int player_nr = getCenteredPlayer_EM();
+ boolean draw_new_player_location = FALSE;
+ boolean quick_relocation = setup.quick_switch;
+#else
+ int player_nr = 0; /* !!! FIX THIS (CENTERED TO PLAYER 1) !!! */
+#endif
+ int sx = PLAYER_SCREEN_X(player_nr);
+ int sy = PLAYER_SCREEN_Y(player_nr);
+ int i, x, y;
+
+#if 1
+ boolean scrolling = (screen_x % TILEX != 0 || screen_y % TILEY != 0);
+
+ if (!scrolling) /* screen currently aligned at tile position */
+ {
+ if (player_nr != centered_to_player)
+ {
+ centered_to_player = player_nr;
+
+ draw_new_player_location = TRUE;
+ force_redraw = TRUE;
+ }
+ }
+#endif
+
+ if (draw_new_player_location && !quick_relocation)
+ {
+#if 1
+ unsigned long game_frame_delay_value = getGameFrameDelay_EM(20);