Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions .github/workflows/commit-validation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
5 changes: 3 additions & 2 deletions .github/workflows/push-verification.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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 }}
Expand Down
8 changes: 7 additions & 1 deletion tools/tests/arena_campaign.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 )",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Update the duplicate helper-signature check

Changing only this expected signature leaves validate_async_module_state() in tools/tests/game_type_module_selection.py searching for the old ( void ) declaration at line 834. The commit-validation workflow runs that script, which now raises ValueError: substring not found before completing; update that duplicate contract to recognize the parameterized helper as part of this change.

Useful? React with 👍 / 👎.

)
require(
common,
Expand All @@ -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",
Comment on lines +1091 to +1094

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Verify the composed scale reaches the helper

Inspecting only the helper body does not enforce the new composed-scale contract: changing Async() to call this helper with com_timescale.GetFloat() while retaining the separate timescale assignment would satisfy both this assertion and weapon_wheel_time_scale.py, but transient weapon-wheel slowdown would take the non-smooth branch and reduce async tick cadence. Also assert within Async() that the composed timescale value is passed to the helper.

Useful? React with 👍 / 👎.

)
if (
"cvarSystem->" in smooth_slow_time
or "GetCVarString" in smooth_slow_time
Expand Down
11 changes: 9 additions & 2 deletions tools/tests/game_type_module_selection.py
Original file line number Diff line number Diff line change
Expand Up @@ -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;",
Expand Down Expand Up @@ -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]

Expand All @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion tools/tests/level_load_cache.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
)

Expand Down
2 changes: 1 addition & 1 deletion tools/tests/mvd_server_api_contract.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 )",
Expand Down
2 changes: 1 addition & 1 deletion tools/tests/network_ipv4_support.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
)

Expand Down
2 changes: 1 addition & 1 deletion tools/tests/renderer_temporal_presentation.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
)

Expand Down
2 changes: 1 addition & 1 deletion tools/tests/weapon_wheel_time_scale.py
Original file line number Diff line number Diff line change
Expand Up @@ -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")

Expand Down
Loading