diff --git a/inc/dd.h b/inc/dd.h index 485e6ce..a1778c8 100644 --- a/inc/dd.h +++ b/inc/dd.h @@ -154,6 +154,7 @@ typedef struct CNCDDRAW int guard_lines; int resolutions; int max_resolutions; + BOOL limit_bltfast; BOOL armadahack; BOOL tshack; BOOL infantryhack; diff --git a/src/config.c b/src/config.c index 0655c1e..98a027c 100644 --- a/src/config.c +++ b/src/config.c @@ -52,6 +52,7 @@ void cfg_load() g_ddraw->d3d9_adapter = cfg_get_int("d3d9_adapter", 0); g_ddraw->guard_lines = cfg_get_int("guard_lines", 200); g_ddraw->max_resolutions = cfg_get_int("max_resolutions", 0); + g_ddraw->limit_bltfast = cfg_get_bool("limit_bltfast", FALSE); g_ddraw->opengl_core = cfg_get_bool("opengl_core", FALSE); cfg_get_string("screenshotdir", ".\\Screenshots\\", g_ddraw->screenshot_dir, sizeof(g_ddraw->screenshot_dir)); @@ -358,6 +359,7 @@ static void cfg_create_ini() "d3d9on12=false\n" "guard_lines=200\n" "max_resolutions=0\n" + "limit_bltfast=false\n" "game_handles_close=false\n" "accuratetimers=false\n" "fixpitch=true\n" @@ -711,6 +713,7 @@ static void cfg_create_ini() "[AdSanguo]\n" "maxgameticks=60\n" "noactivateapp=true\n" + "limit_bltfast=true\n" "\n" "; Dark Reign: The Future of War\n" "[DKReign]\n" @@ -996,6 +999,7 @@ static void cfg_create_ini() "[sanguo]\n" "maxgameticks=60\n" "noactivateapp=true\n" + "limit_bltfast=true\n" "\n" "; Twisted Metal\n" "[TWISTED]\n" diff --git a/src/ddsurface.c b/src/ddsurface.c index 9ddbe48..46251e3 100644 --- a/src/ddsurface.c +++ b/src/ddsurface.c @@ -638,6 +638,12 @@ HRESULT dds_BltFast( (This->last_flip_tick + FLIP_REDRAW_TIMEOUT < time && This->last_blt_tick + FLIP_REDRAW_TIMEOUT < time)) { ReleaseSemaphore(g_ddraw->render.sem, 1, NULL); + + if (g_ddraw->limit_bltfast && g_ddraw->ticks_limiter.tick_length > 0) + { + g_ddraw->ticks_limiter.use_blt_or_flip = TRUE; + util_limit_game_ticks(); + } } }