From 446862d880380c74c53a016de68f156fb77122f7 Mon Sep 17 00:00:00 2001 From: Nawaf <30420446+xLive@users.noreply.github.com> Date: Wed, 30 Jul 2025 16:36:23 +0300 Subject: [PATCH 1/2] race: add vehicle_physics_mode and vehicle_physics_fps settings vehicle_physics_mode: "fixed" or "legacy" (restores old physics behavior). vehicle_physics_fps: sets the FPS limit when using "legacy" mode. --- [gamemodes]/[race]/race/edf/race.edf | 2 + [gamemodes]/[race]/race/meta.xml | 17 +++++++ [gamemodes]/[race]/race/race_server.lua | 62 +++++++++++++++++++++++++ [gamemodes]/[race]/race/racemap.lua | 2 +- 4 files changed, 82 insertions(+), 1 deletion(-) diff --git a/[gamemodes]/[race]/race/edf/race.edf b/[gamemodes]/[race]/race/edf/race.edf index eb9c803b5..6ff0005a9 100644 --- a/[gamemodes]/[race]/race/edf/race.edf +++ b/[gamemodes]/[race]/race/edf/race.edf @@ -7,6 +7,8 @@ + + diff --git a/[gamemodes]/[race]/race/meta.xml b/[gamemodes]/[race]/race/meta.xml index 1f582a3c3..40864b132 100644 --- a/[gamemodes]/[race]/race/meta.xml +++ b/[gamemodes]/[race]/race/meta.xml @@ -319,6 +319,20 @@ desc="Set to true to show the map author name on the travelling screen." /> + + + + @@ -329,6 +343,9 @@ + + + diff --git a/[gamemodes]/[race]/race/race_server.lua b/[gamemodes]/[race]/race/race_server.lua index d246561d9..fe3b6968a 100644 --- a/[gamemodes]/[race]/race/race_server.lua +++ b/[gamemodes]/[race]/race/race_server.lua @@ -9,6 +9,9 @@ g_VehicleClothes = { g_CurrentRaceMode = nil +g_OriginalFPSLimit = nil +g_OriginalVehiclePhysicsGlitchState = nil + g_Spawnpoints = {} -- { i = { position={x, y, z}, rotation={x, y, z}, vehicle=vehicleID, paintjob=paintjob, upgrades={...} } } g_Checkpoints = {} -- { i = { position={x, y, z}, size=size, color={r, g, b}, type=type, vehicle=vehicleID, paintjob=paintjob, upgrades={...} } } g_Objects = {} -- { i = { position={x, y, z}, rotation={x, y, z}, model=modelID } } @@ -121,6 +124,10 @@ function cacheGameOptions() g_GameOptions.vehicleweapons_warning_if_map_override = getBool('race.vehicleweapons_warning_if_map_override',true) g_GameOptions.hunterminigun_map_can_override = getBool('race.hunterminigun_map_can_override',true) g_GameOptions.endmapwhenonlyspectators = getBool('race.endmapwhenonlyspectators',true) + g_GameOptions.vehicle_physics_mode = getString('race.vehicle_physics_mode','fixed') + g_GameOptions.vehicle_physics_fps = getNumber('race.vehicle_physics_fps',-1) + g_GameOptions.vehicle_physics_mode_map_can_override = getBool('race.vehicle_physics_mode_map_can_override',true) + g_GameOptions.vehicle_physics_fps_map_can_override = getBool('race.vehicle_physics_fps_map_can_override',true) if g_GameOptions.statskey ~= 'name' and g_GameOptions.statskey ~= 'serial' then outputWarning( "statskey is not set to 'name' or 'serial'" ) g_GameOptions.statskey = 'name' @@ -149,6 +156,8 @@ function cacheMapOptions(map) g_MapOptions.firewater = map.firewater == 'true' g_MapOptions.classicchangez = map.classicchangez == 'true' g_MapOptions.hunterminigun = map.hunterminigun == 'true' + g_MapOptions.vehicle_physics_mode = map.vehicle_physics_mode or g_GameOptions.vehicle_physics_mode + g_MapOptions.vehicle_physics_fps = tonumber(map.vehicle_physics_fps) or g_GameOptions.vehicle_physics_fps outputDebug("MISC", "duration = "..g_MapOptions.duration.." respawn = "..g_MapOptions.respawn.." respawntime = "..tostring(g_MapOptions.respawntime).." time = "..g_MapOptions.time.." weather = "..g_MapOptions.weather) @@ -205,6 +214,47 @@ function cacheMapOptions(map) if not map.hunterminigun or not g_GameOptions.hunterminigun_map_can_override then g_MapOptions.hunterminigun = g_GameOptions.hunterminigun end + + -- Set vehicle_physics_mode from g_GameOptions if not defined in the map, or map override not allowed + if not map.vehicle_physics_mode or not g_GameOptions.vehicle_physics_mode_map_can_override then + g_MapOptions.vehicle_physics_mode = g_GameOptions.vehicle_physics_mode + end + + -- Set vehicle_physics_fps from g_GameOptions if not defined in the map, or map override not allowed + if not map.vehicle_physics_fps or not g_GameOptions.vehicle_physics_fps_map_can_override then + g_MapOptions.vehicle_physics_fps = g_GameOptions.vehicle_physics_fps + end + + if g_MapOptions.vehicle_physics_mode == "legacy" then + if g_OriginalVehiclePhysicsGlitchState == nil then + g_OriginalVehiclePhysicsGlitchState = isGlitchEnabled("vehicle_rapid_stop") + end + + setGlitchEnabled("vehicle_rapid_stop", true) + + if g_MapOptions.vehicle_physics_fps >= 0 then + if g_OriginalFPSLimit == nil then + g_OriginalFPSLimit = getFPSLimit() + end + setFPSLimit(g_MapOptions.vehicle_physics_fps) + else + if g_OriginalFPSLimit ~= nil then + setFPSLimit(g_OriginalFPSLimit) + g_OriginalFPSLimit = nil + end + end + else + if g_OriginalVehiclePhysicsGlitchState == nil then + g_OriginalVehiclePhysicsGlitchState = isGlitchEnabled("vehicle_rapid_stop") + end + + setGlitchEnabled("vehicle_rapid_stop", false) + + if g_OriginalFPSLimit ~= nil then + setFPSLimit(g_OriginalFPSLimit) + g_OriginalFPSLimit = nil + end + end end @@ -238,6 +288,8 @@ function loadMap(res) g_SavedMapSettings.classicchangez = map.classicchangez g_SavedMapSettings.firewater = map.firewater g_SavedMapSettings.hunterminigun = map.hunterminigun + g_SavedMapSettings.vehicle_physics_mode = map.vehicle_physics_mode + g_SavedMapSettings.vehicle_physics_fps = map.vehicle_physics_fps cacheMapOptions(g_SavedMapSettings) @@ -728,6 +780,16 @@ function unloadAll() end TimerManager.destroyTimersFor("map") + if g_OriginalFPSLimit ~= nil then + setFPSLimit(g_OriginalFPSLimit) + g_OriginalFPSLimit = nil + end + + if g_OriginalVehiclePhysicsGlitchState ~= nil then + setGlitchEnabled("vehicle_rapid_stop", g_OriginalVehiclePhysicsGlitchState) + g_OriginalVehiclePhysicsGlitchState = nil + end + Countdown.destroyAll() for i,player in pairs(g_Players) do diff --git a/[gamemodes]/[race]/race/racemap.lua b/[gamemodes]/[race]/race/racemap.lua index bdc26e621..6cfaef926 100644 --- a/[gamemodes]/[race]/race/racemap.lua +++ b/[gamemodes]/[race]/race/racemap.lua @@ -7,7 +7,7 @@ g_MapObjAttrs = { g_MapSettingNames = table.create( {'time', 'weather', 'respawn', 'respawntime', 'duration', 'skins', 'bikehats', 'bikehatchance', 'carhats', 'carhatchance', 'hairstyles', 'glasses', 'glasseschance', 'shirts', 'trousers', 'shoes', - 'ghostmode', 'vehicleweapons', 'autopimp', 'firewater', 'classicchangez', 'hunterminigun'}, + 'ghostmode', 'vehicleweapons', 'autopimp', 'firewater', 'classicchangez', 'hunterminigun', 'vehicle_physics_mode', 'vehicle_physics_fps'}, true ) From 5d6a0343bb23aee0389be363b38abd7b2c9067cf Mon Sep 17 00:00:00 2001 From: Nawaf <30420446+xLive@users.noreply.github.com> Date: Sat, 9 Aug 2025 00:38:15 +0300 Subject: [PATCH 2/2] Change default physics mode to legacy --- [gamemodes]/[race]/race/meta.xml | 2 +- [gamemodes]/[race]/race/race_server.lua | 28 ++++++++++++------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/[gamemodes]/[race]/race/meta.xml b/[gamemodes]/[race]/race/meta.xml index 40864b132..fa7b42fb5 100644 --- a/[gamemodes]/[race]/race/meta.xml +++ b/[gamemodes]/[race]/race/meta.xml @@ -319,7 +319,7 @@ desc="Set to true to show the map author name on the travelling screen." /> - = 0 then if g_OriginalFPSLimit == nil then g_OriginalFPSLimit = getFPSLimit() @@ -243,17 +254,6 @@ function cacheMapOptions(map) g_OriginalFPSLimit = nil end end - else - if g_OriginalVehiclePhysicsGlitchState == nil then - g_OriginalVehiclePhysicsGlitchState = isGlitchEnabled("vehicle_rapid_stop") - end - - setGlitchEnabled("vehicle_rapid_stop", false) - - if g_OriginalFPSLimit ~= nil then - setFPSLimit(g_OriginalFPSLimit) - g_OriginalFPSLimit = nil - end end end