diff --git a/.github/workflows/commit-validation.yml b/.github/workflows/commit-validation.yml index e830e5a9..98fe751a 100644 --- a/.github/workflows/commit-validation.yml +++ b/.github/workflows/commit-validation.yml @@ -13,8 +13,9 @@ permissions: env: # Keep the engine's shared File/FileSystem ABI locked to the companion - # revision that implements GAME_API 45 and generated-animation cache v3. - OPENQ4_GAMELIBS_SHA: 09fa7e175efa5a5d819569ba577fd0e11c38a891 + # revision that implements GAME_API 46, generated-animation cache v3, and + # the game-owned transient time-scale interface. + OPENQ4_GAMELIBS_SHA: 9215976fa43353e4c22b617a175ad06b7547ddae jobs: script-smoke: diff --git a/.github/workflows/push-verification.yml b/.github/workflows/push-verification.yml index ca04127c..5f5645dd 100644 --- a/.github/workflows/push-verification.yml +++ b/.github/workflows/push-verification.yml @@ -9,8 +9,9 @@ permissions: env: # Keep the engine's shared File/FileSystem ABI locked to the companion - # revision that implements GAME_API 45 and generated-animation cache v3. - OPENQ4_GAMELIBS_SHA: 09fa7e175efa5a5d819569ba577fd0e11c38a891 + # revision that implements GAME_API 46, generated-animation cache v3, and + # the game-owned transient time-scale interface. + OPENQ4_GAMELIBS_SHA: 9215976fa43353e4c22b617a175ad06b7547ddae concurrency: group: openq4-push-verification-${{ github.ref }} diff --git a/tools/tests/arena_campaign.py b/tools/tests/arena_campaign.py index 2dea7c74..12400f3f 100644 --- a/tools/tests/arena_campaign.py +++ b/tools/tests/arena_campaign.py @@ -1075,7 +1075,8 @@ def validate_engine_hooks() -> None: ) smooth_slow_time = function_body( - common, "static bool openQ4_ShouldUseSmoothSingleplayerSlowTime( void )" + common, + "static bool openQ4_ShouldUseSmoothSingleplayerSlowTime( float effectiveTimeScale )", ) require( common, @@ -1087,6 +1088,11 @@ def validate_engine_hooks() -> None: "openQ4_singleplayerGameModuleReady.load( std::memory_order_acquire )", "Arena-safe async module transition", ) + require( + smooth_slow_time, + "return effectiveTimeScale < 0.999f;", + "Composed single-player slow-time detection", + ) if ( "cvarSystem->" in smooth_slow_time or "GetCVarString" in smooth_slow_time diff --git a/tools/tests/game_type_module_selection.py b/tools/tests/game_type_module_selection.py index 1f01a7af..aee7454f 100644 --- a/tools/tests/game_type_module_selection.py +++ b/tools/tests/game_type_module_selection.py @@ -664,7 +664,7 @@ def validate_two_phase_game_api_contract() -> None: return game_api = read(game_api_path) - require(game_api, "const int GAME_API_VERSION\t\t= 45;", "current game API version") + require(game_api, "const int GAME_API_VERSION\t\t= 46;", "current game API version") require( game_api, "virtual void\t\t\t\tShutdownAfterDecls( void ) = 0;", @@ -831,7 +831,9 @@ def validate_swap_guard() -> None: def validate_async_module_state() -> None: common = read(ROOT / "src" / "framework" / "Common.cpp") validate_shutdown_lifecycle_contract(common) - helper_start = common.index("static bool openQ4_ShouldUseSmoothSingleplayerSlowTime( void ) {") + helper_start = common.index( + "static bool openQ4_ShouldUseSmoothSingleplayerSlowTime( float effectiveTimeScale ) {" + ) helper_end = common.index("\n}\n", helper_start) helper = common[helper_start:helper_end] @@ -850,6 +852,11 @@ def validate_async_module_state() -> None: "openQ4_singleplayerGameModuleReady.load( std::memory_order_acquire )", "async-safe game module state", ) + require( + helper, + "return effectiveTimeScale < 0.999f;", + "composed single-player slow-time detection", + ) load_start = common.index("void idCommonLocal::LoadGameDLL( void ) {") unload_start = common.index("void idCommonLocal::UnloadGameDLL( void ) {", load_start) diff --git a/tools/tests/level_load_cache.py b/tools/tests/level_load_cache.py index 0887391b..5bda15b9 100644 --- a/tools/tests/level_load_cache.py +++ b/tools/tests/level_load_cache.py @@ -53,7 +53,7 @@ def validate_abi_contract() -> None: ) require( read(GAME_ROOT, "src/game/Game.h"), - "GAME_API_VERSION\t\t= 45", + "GAME_API_VERSION\t\t= 46", "game module ABI", ) diff --git a/tools/tests/mvd_server_api_contract.py b/tools/tests/mvd_server_api_contract.py index 36795881..4d365c39 100644 --- a/tools/tests/mvd_server_api_contract.py +++ b/tools/tests/mvd_server_api_contract.py @@ -93,7 +93,7 @@ def main() -> None: "// 42: durable server MVD publication results for competitive match evidence", "append-only MVD result ABI history", ) - require(game_api_h, "GAME_API_VERSION\t\t= 45", "current game-module ABI version") + require(game_api_h, "GAME_API_VERSION\t\t= 46", "current game-module ABI version") forwarding = ( "multiViewDemo.StartNamedRecording( name )", diff --git a/tools/tests/network_ipv4_support.py b/tools/tests/network_ipv4_support.py index 05ad99bc..5a3d699a 100644 --- a/tools/tests/network_ipv4_support.py +++ b/tools/tests/network_ipv4_support.py @@ -311,7 +311,7 @@ def validate_idport_platform_data_mirror() -> None: if game_api.is_file(): require( game_api.read_text(encoding="utf-8", errors="strict"), - "const int GAME_API_VERSION\t\t= 45;", + "const int GAME_API_VERSION\t\t= 46;", "idPort-layout game API revision", ) diff --git a/tools/tests/renderer_temporal_presentation.py b/tools/tests/renderer_temporal_presentation.py index 94a410f0..abd2093e 100644 --- a/tools/tests/renderer_temporal_presentation.py +++ b/tools/tests/renderer_temporal_presentation.py @@ -65,7 +65,7 @@ def main() -> int: ) require( read(GAME_ROOT / "src" / "game" / "Game.h"), - "const int GAME_API_VERSION\t\t= 45;", + "const int GAME_API_VERSION\t\t= 46;", "game ABI v45", ) diff --git a/tools/tests/weapon_wheel_time_scale.py b/tools/tests/weapon_wheel_time_scale.py index ff25f14e..d1ffb4b2 100644 --- a/tools/tests/weapon_wheel_time_scale.py +++ b/tools/tests/weapon_wheel_time_scale.py @@ -88,7 +88,7 @@ def main() -> None: require(run_frame, "cvarSystem->GetCVarFloat( \"timescale\" ) * common->GetGameTimeScale()", "SP simulation scale") game_api = read(GAME_ROOT / "src/game/Game.h") - require(game_api, "const int GAME_API_VERSION\t\t= 44;", "updated engine/GameLib ABI") + require(game_api, "const int GAME_API_VERSION\t\t= 46;", "updated engine/GameLib ABI") print("single-player time-scale and walking CVar checks passed")