void RedrawPlayfield(boolean force_redraw, int x, int y, int width, int height)
{
+ if (game_status == GAME_MODE_PLAYING &&
+ level.game_engine_type == GAME_ENGINE_TYPE_EM)
+ {
+ RedrawPlayfield_EM();
+
+ return;
+ }
+
if (game_status == GAME_MODE_PLAYING && !game.envelope_active)
{
if (force_redraw)
}
}
+#if 1
+ if (game_status == GAME_MODE_PLAYING &&
+ level.game_engine_type == GAME_ENGINE_TYPE_EM)
+ BlitScreenToBitmap_EM(backbuffer);
+#endif
+
#if 1
/* disable deactivated drawing when quick-loading level tape recording */
if (tape.playing && tape.deactivate_display)
int getGameFrameDelay_EM(int native_em_game_frame_delay)
{
- return (GameFrameDelay == GAME_FRAME_DELAY ? native_em_game_frame_delay :
- GameFrameDelay);
+ 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(long seed)
int effective_element = (j > 5 && i == Yacid_splash_eB ? EL_EMPTY :
j > 5 && i == Yacid_splash_wB ? EL_EMPTY :
j < 7 ? element :
- i == Ynut_sB ? element :
i == Xdrip_stretch ? element :
i == Xdrip_stretchB ? element :
i == Ydrip_s1 ? element :
i == Yspring_kill_w ? EL_SPRING :
i == Yemerald_stone ? EL_EMERALD :
i == Ydiamond_stone ? EL_ROCK :
+ i == Xsand_stonein_4 ? EL_EMPTY :
+ i == Xsand_stoneout_2 ? EL_ROCK :
is_backside ? EL_EMPTY :
action_removing ? EL_EMPTY :
element);
int effective_action = (j < 7 ? action :
- i == Ynut_sB ? action :
i == Xdrip_stretch ? action :
i == Xdrip_stretchB ? action :
i == Ydrip_s1 ? action :
i == Xsand_stonein_2 ? j + 9 :
i == Xsand_stonein_3 ? j + 17 :
i == Xsand_stonein_4 ? j + 25 :
- i == Xsand_stoneout_1 && j == 0 ? 1 :
- i == Xsand_stoneout_1 && j == 1 ? 1 :
- i == Xsand_stoneout_1 && j == 2 ? 2 :
- i == Xsand_stoneout_1 && j == 3 ? 4 :
- i == Xsand_stoneout_1 && j == 4 ? 4 :
- i == Xsand_stoneout_1 && j == 5 ? 6 :
- i == Xsand_stoneout_1 && j == 6 ? 8 :
- i == Xsand_stoneout_1 && j == 7 ? 8 :
- i == Xsand_stoneout_2 && j == 0 ? 10 :
- i == Xsand_stoneout_2 && j == 1 ? 12 :
- i == Xsand_stoneout_2 && j == 2 ? 14 :
- i == Xsand_stoneout_2 && j == 3 ? 16 :
- i == Xsand_stoneout_2 && j == 4 ? 18 :
- i == Xsand_stoneout_2 && j == 5 ? 22 :
- i == Xsand_stoneout_2 && j == 6 ? 26 :
- i == Xsand_stoneout_2 && j == 7 ? 30 :
+ i == Xsand_stoneout_1 && j == 0 ? 0 :
+ i == Xsand_stoneout_1 && j == 1 ? 0 :
+ i == Xsand_stoneout_1 && j == 2 ? 1 :
+ i == Xsand_stoneout_1 && j == 3 ? 2 :
+ i == Xsand_stoneout_1 && j == 4 ? 2 :
+ i == Xsand_stoneout_1 && j == 5 ? 3 :
+ i == Xsand_stoneout_1 && j == 6 ? 4 :
+ i == Xsand_stoneout_1 && j == 7 ? 4 :
+ i == Xsand_stoneout_2 && j == 0 ? 5 :
+ i == Xsand_stoneout_2 && j == 1 ? 6 :
+ i == Xsand_stoneout_2 && j == 2 ? 7 :
+ i == Xsand_stoneout_2 && j == 3 ? 8 :
+ i == Xsand_stoneout_2 && j == 4 ? 9 :
+ i == Xsand_stoneout_2 && j == 5 ? 11 :
+ i == Xsand_stoneout_2 && j == 6 ? 13 :
+ i == Xsand_stoneout_2 && j == 7 ? 15 :
i == Xboom_bug && j == 1 ? 2 :
i == Xboom_bug && j == 2 ? 2 :
i == Xboom_bug && j == 3 ? 4 :
#endif
/* create unique graphic identifier to decide if tile must be redrawn */
+ /* bit 31 - 16 (16 bit): EM style element
+ bit 15 - 12 ( 4 bit): EM style frame
+ bit 11 - 6 ( 6 bit): graphic width
+ bit 5 - 0 ( 6 bit): graphic height */
g_em->unique_identifier =
- (i << 16) | (frame << 8) | g_em->width | g_em->height;
+ (i << 16) | (j << 12) | (g_em->width << 6) | g_em->height;
#if DEBUG_EM_GFX
if (g_em->bitmap != debug_bitmap ||
last_i = i;
}
- printf("::: EMC GFX ERROR for element %d -> %d ('%s') [%d, %d]",
+ printf("::: EMC GFX ERROR for element %d -> %d ('%s', '%s', %d)",
i, element, element_info[element].token_name,
- effective_action, direction);
+ element_action_info[effective_action].suffix, direction);
if (element != effective_element)
printf(" [%d ('%s')]",