diff --git a/[gamemodes]/[race]/race/edf/race.edf b/[gamemodes]/[race]/race/edf/race.edf
index 6ff0005a9..765530ba9 100644
--- a/[gamemodes]/[race]/race/edf/race.edf
+++ b/[gamemodes]/[race]/race/edf/race.edf
@@ -9,6 +9,7 @@
+
diff --git a/[gamemodes]/[race]/race/meta.xml b/[gamemodes]/[race]/race/meta.xml
index 4cae792b3..5b7b4e577 100644
--- a/[gamemodes]/[race]/race/meta.xml
+++ b/[gamemodes]/[race]/race/meta.xml
@@ -331,6 +331,13 @@
desc="FPS limit to use when vehicle physics mode is set to legacy. This setting changes the limit: -1 = leave unchanged, 0 = unlimited, 25+ = specific limit."
/>
+
+
@@ -344,6 +351,7 @@
+
diff --git a/[gamemodes]/[race]/race/override_client.lua b/[gamemodes]/[race]/race/override_client.lua
index a5311e14f..e4b0bc762 100644
--- a/[gamemodes]/[race]/race/override_client.lua
+++ b/[gamemodes]/[race]/race/override_client.lua
@@ -67,7 +67,11 @@ function OverrideClient.updateVars( element )
end
function isCollideOthers ( element )
- return ( getElementData ( element, 'race.collideothers' ) or 0 ) ~= 0
+ local collideothers = getElementData ( element, "race.collideothers" )
+ if not collideothers and getElementType( element ) == "vehicle" then
+ collideothers = g_MapOptions and g_MapOptions.non_race_vehicle_collisions and not g_MapOptions.ghostmode
+ end
+ return ( collideothers or 0 ) ~= 0
end
function isCollideWorld ( element )
@@ -120,7 +124,7 @@ if OverrideClient.debug then
end
local player = getVehicleController(vehicle)
local collisions = not isVehicleCollisionsEnabled and "n/a" or isVehicleCollisionsEnabled(vehicle)
- local collideothers = getElementData ( vehicle, "race.collideothers" )
+ local collideothers = isCollideOthers ( vehicle )
local collideworld = getElementData ( vehicle, "race.collideworld" )
dxDrawText ( getElementDesc(vehicle), sx[1], sy )
dxDrawText ( tostring(collisions), sx[2], sy )
diff --git a/[gamemodes]/[race]/race/race_client.lua b/[gamemodes]/[race]/race/race_client.lua
index af4ec3f1b..cd758ecbb 100644
--- a/[gamemodes]/[race]/race/race_client.lua
+++ b/[gamemodes]/[race]/race/race_client.lua
@@ -291,6 +291,12 @@ function updateOptions ( gameoptions, mapoptions )
-- Apply
updateVehicleWeapons()
+
+ -- Update vehicle collision settings
+ for _, vehicle in ipairs(getElementsByType("vehicle")) do
+ OverrideClient.updateVars(vehicle)
+ end
+
setCloudsEnabled(g_GameOptions.cloudsenable)
setBlurLevel(g_GameOptions.blurlevel)
g_dxGUI.mapdisplay:visible(g_GameOptions.showmapname)
diff --git a/[gamemodes]/[race]/race/race_server.lua b/[gamemodes]/[race]/race/race_server.lua
index 875c08695..8cb62990d 100644
--- a/[gamemodes]/[race]/race/race_server.lua
+++ b/[gamemodes]/[race]/race/race_server.lua
@@ -128,6 +128,8 @@ function cacheGameOptions()
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)
+ g_GameOptions.non_race_vehicle_collisions = getBool("race.non_race_vehicle_collisions",false)
+ g_GameOptions.non_race_vehicle_collisions_map_can_override = getBool("race.non_race_vehicle_collisions_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'
@@ -158,6 +160,7 @@ function cacheMapOptions(map)
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
+ g_MapOptions.non_race_vehicle_collisions = map.non_race_vehicle_collisions == 'true'
outputDebug("MISC", "duration = "..g_MapOptions.duration.." respawn = "..g_MapOptions.respawn.." respawntime = "..tostring(g_MapOptions.respawntime).." time = "..g_MapOptions.time.." weather = "..g_MapOptions.weather)
@@ -225,6 +228,11 @@ function cacheMapOptions(map)
g_MapOptions.vehicle_physics_fps = g_GameOptions.vehicle_physics_fps
end
+ -- Set non_race_vehicle_collisions from g_GameOptions if not defined in the map, or map override not allowed
+ if not map.non_race_vehicle_collisions or not g_GameOptions.non_race_vehicle_collisions_map_can_override then
+ g_MapOptions.non_race_vehicle_collisions = g_GameOptions.non_race_vehicle_collisions
+ end
+
if g_MapOptions.vehicle_physics_mode == "fixed" then
if g_OriginalVehiclePhysicsGlitchState == nil then
g_OriginalVehiclePhysicsGlitchState = isGlitchEnabled("vehicle_rapid_stop")
@@ -290,6 +298,7 @@ function loadMap(res)
g_SavedMapSettings.hunterminigun = map.hunterminigun
g_SavedMapSettings.vehicle_physics_mode = map.vehicle_physics_mode
g_SavedMapSettings.vehicle_physics_fps = map.vehicle_physics_fps
+ g_SavedMapSettings.non_race_vehicle_collisions = map.non_race_vehicle_collisions
cacheMapOptions(g_SavedMapSettings)
diff --git a/[gamemodes]/[race]/race/racemap.lua b/[gamemodes]/[race]/race/racemap.lua
index 6cfaef926..7ba3cfd91 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', 'vehicle_physics_mode', 'vehicle_physics_fps'},
+ 'ghostmode', 'vehicleweapons', 'autopimp', 'firewater', 'classicchangez', 'hunterminigun', 'vehicle_physics_mode', 'vehicle_physics_fps', 'non_race_vehicle_collisions'},
true
)