Files
wnsrc/lua/simfphys/base_functions.lua
lifestorm 9c918c46e5 Upload
2024-08-04 23:12:27 +03:00

662 lines
22 KiB
Lua

--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
CreateConVar( "sv_simfphys_enabledamage", "1", {FCVAR_REPLICATED , FCVAR_ARCHIVE},"1 = enabled, 0 = disabled" )
CreateConVar( "sv_simfphys_gib_lifetime", "30", {FCVAR_REPLICATED , FCVAR_ARCHIVE},"How many seconds before removing the gibs (0 = never remove)" )
CreateConVar( "sv_simfphys_playerdamage", "1", {FCVAR_REPLICATED , FCVAR_ARCHIVE},"should players take damage from collisions in vehicles?" )
CreateConVar( "sv_simfphys_damagemultiplicator", "1", {FCVAR_REPLICATED , FCVAR_ARCHIVE},"vehicle damage multiplicator" )
CreateConVar( "sv_simfphys_fuel", "1", {FCVAR_REPLICATED , FCVAR_ARCHIVE},"enable fuel? 1 = enabled, 0 = disabled" )
CreateConVar( "sv_simfphys_fuelscale", "0.1", {FCVAR_REPLICATED , FCVAR_ARCHIVE},"fuel tank size multiplier. 1 = Realistic fuel tank size (about 2-3 hours of fullthrottle driving, Lol, have fun)" )
simfphys.DamageEnabled = false
simfphys.DamageMul = 1
simfphys.pDamageEnabled = false
simfphys.Fuel = true
simfphys.FuelMul = 0.1
cvars.AddChangeCallback( "sv_simfphys_enabledamage", function( convar, oldValue, newValue ) simfphys.DamageEnabled = ( tonumber( newValue )~=0 ) end)
cvars.AddChangeCallback( "sv_simfphys_damagemultiplicator", function( convar, oldValue, newValue ) simfphys.DamageMul = tonumber( newValue ) end)
cvars.AddChangeCallback( "sv_simfphys_playerdamage", function( convar, oldValue, newValue ) simfphys.pDamageEnabled = ( tonumber( newValue )~=0 ) end)
cvars.AddChangeCallback( "sv_simfphys_fuel", function( convar, oldValue, newValue ) simfphys.Fuel = ( tonumber( newValue )~=0 ) end)
cvars.AddChangeCallback( "sv_simfphys_fuelscale", function( convar, oldValue, newValue ) simfphys.FuelMul = tonumber( newValue ) end)
simfphys.DamageEnabled = GetConVar( "sv_simfphys_enabledamage" ):GetBool()
simfphys.DamageMul = GetConVar( "sv_simfphys_damagemultiplicator" ):GetFloat()
simfphys.pDamageEnabled = GetConVar( "sv_simfphys_playerdamage" ):GetBool()
simfphys.Fuel = GetConVar( "sv_simfphys_fuel" ):GetBool()
simfphys.FuelMul = GetConVar( "sv_simfphys_fuelscale" ):GetFloat()
simfphys.ice = CreateConVar( "sv_simfphys_traction_ice", "0.35", {FCVAR_REPLICATED , FCVAR_ARCHIVE})
simfphys.gmod_ice = CreateConVar( "sv_simfphys_traction_gmod_ice", "0.1", {FCVAR_REPLICATED , FCVAR_ARCHIVE})
simfphys.snow = CreateConVar( "sv_simfphys_traction_snow", "0.7", {FCVAR_REPLICATED , FCVAR_ARCHIVE})
simfphys.slipperyslime = CreateConVar( "sv_simfphys_traction_slipperyslime", "0.2", {FCVAR_REPLICATED , FCVAR_ARCHIVE})
simfphys.grass = CreateConVar( "sv_simfphys_traction_grass", "1", {FCVAR_REPLICATED , FCVAR_ARCHIVE})
simfphys.sand = CreateConVar( "sv_simfphys_traction_sand", "1", {FCVAR_REPLICATED , FCVAR_ARCHIVE})
simfphys.dirt = CreateConVar( "sv_simfphys_traction_dirt", "1", {FCVAR_REPLICATED , FCVAR_ARCHIVE})
simfphys.concrete = CreateConVar( "sv_simfphys_traction_concrete", "1", {FCVAR_REPLICATED , FCVAR_ARCHIVE})
simfphys.metal = CreateConVar( "sv_simfphys_traction_metal", "1", {FCVAR_REPLICATED , FCVAR_ARCHIVE})
simfphys.glass = CreateConVar( "sv_simfphys_traction_glass", "1", {FCVAR_REPLICATED , FCVAR_ARCHIVE})
simfphys.gravel = CreateConVar( "sv_simfphys_traction_gravel", "1", {FCVAR_REPLICATED , FCVAR_ARCHIVE})
simfphys.rock = CreateConVar( "sv_simfphys_traction_rock", "1", {FCVAR_REPLICATED , FCVAR_ARCHIVE})
simfphys.wood = CreateConVar( "sv_simfphys_traction_wood", "1", {FCVAR_REPLICATED , FCVAR_ARCHIVE})
function simfphys.IsCar( ent )
if not IsValid( ent ) then return false end
return ent.LVSsimfphys == true
end
local meta = FindMetaTable( "Player" )
function meta:IsDrivingSimfphys()
local Car = self:GetSimfphys()
local Pod = self:GetVehicle()
if not IsValid( Car ) then return false end
return Pod == Car:GetDriverSeat()
end
function meta:GetSimfphys()
local Pod = self:GetVehicle()
if not IsValid( Pod ) then return NULL end
if Pod.SPHYSchecked == true then
return Pod.SPHYSBaseEnt
else
local Parent = Pod:GetParent()
if not IsValid( Parent ) then return NULL end
if not Parent.LVSsimfphys then
Pod.SPHYSchecked = LVS.MapDoneLoading
Pod.SPHYSBaseEnt = NULL
Pod.vehiclebase = NULL
return NULL
end
Pod.SPHYSchecked = true
Pod.SPHYSBaseEnt = Parent
Pod.vehiclebase = Parent -- compatibility for old addons
return Parent
end
end
if SERVER then
util.AddNetworkString( "simfphys_settings" )
util.AddNetworkString( "simfphys_turnsignal" )
util.AddNetworkString( "simfphys_spritedamage" )
util.AddNetworkString( "simfphys_lightsfixall" )
util.AddNetworkString( "simfphys_backfire" )
util.AddNetworkString( "simfphys_plyrequestinfo" )
net.Receive( "simfphys_plyrequestinfo", function( length, ply )
if not IsValid( ply ) then return end
ply.simeditor_nextrequest = isnumber( ply.simeditor_nextrequest ) and ply.simeditor_nextrequest or 0
if ply.simeditor_nextrequest > CurTime() then return end
ply.simeditor_nextrequest = CurTime() + 0.5
local ent = ply:GetEyeTrace().Entity
if not simfphys.IsCar( ent ) then return end
local ent = net.ReadEntity()
local data = simfphys.BuildVehicleInfo( ent )
if not data then return end
net.Start( "simfphys_plyrequestinfo" )
net.WriteEntity( ent )
net.WriteFloat( data["torque"] )
net.WriteFloat( data["horsepower"] )
net.WriteFloat( data["maxspeed"] )
net.WriteFloat( data["weight"] )
net.Send( ply )
end )
net.Receive( "simfphys_turnsignal", function( length, ply )
if not ply:IsDrivingSimfphys() then return end
local ent = net.ReadEntity()
local mode = net.ReadInt( 32 )
if not IsValid( ent ) or ply:GetSimfphys() ~= ent then return end
ent:SetTSInternal( mode )
net.Start( "simfphys_turnsignal" )
net.WriteEntity( ent )
net.WriteInt( mode, 32 )
net.Broadcast()
end )
net.Receive( "simfphys_settings", function( length, ply )
if not IsValid( ply ) or not ply:IsSuperAdmin() then return end
local dmgEnabled = tostring(net.ReadBool() and 1 or 0)
local giblifetime = tostring(net.ReadFloat())
local dmgMul = tostring(net.ReadFloat())
local pdmgEnabled = tostring(net.ReadBool() and 1 or 0)
local fuel = tostring(net.ReadBool() and 1 or 0)
local fuelscale = tostring(net.ReadFloat())
local newtraction = net.ReadTable()
RunConsoleCommand("sv_simfphys_enabledamage", dmgEnabled )
RunConsoleCommand("sv_simfphys_gib_lifetime", giblifetime )
RunConsoleCommand("sv_simfphys_damagemultiplicator", dmgMul )
RunConsoleCommand("sv_simfphys_playerdamage", pdmgEnabled )
RunConsoleCommand("sv_simfphys_fuel", fuel )
RunConsoleCommand("sv_simfphys_fuelscale", fuelscale )
for k, v in pairs( newtraction ) do
RunConsoleCommand("sv_simfphys_traction_"..k, v)
end
simfphys.UpdateFrictionData()
end)
function simfphys.BuildVehicleInfo( ent )
if not simfphys.IsCar( ent ) then return false end
local WheelRad = ent.RearWheelRadius
if ent.FrontWheelPowered and ent.RearWheelRadius then
WheelRad = math.max( ent.FrontWheelRadius, ent.RearWheelRadius )
elseif ent.FrontWheelPowered then
WheelRad = ent.FrontWheelRadius
end
local Mass = 0
for _, Entity in pairs( constraint.GetAllConstrainedEntities( ent ) ) do
local EPOBJ = Entity:GetPhysicsObject()
if IsValid( EPOBJ ) then
Mass = Mass + EPOBJ:GetMass()
end
end
local data = {}
data["torque"] = ent:GetMaxTorque() * (WheelRad / 10) * ent:GetEfficiency() * (1 + (ent:GetTurboCharged() and 0.3 or 0) + (ent:GetSuperCharged() and 0.48 or 0))
data["horsepower"] = (data["torque"] * ent:GetLimitRPM() / 9548.8) * 1.34
data["maxspeed"] = ((ent:GetLimitRPM() * ent.Gears[ table.Count( ent.Gears ) ] * ent:GetDifferentialGear()) * 3.14 * WheelRad * 2) / 52
data["weight"] = Mass
return data
end
function simfphys.SpawnVehicleSimple( spawnname, pos, ang )
if not isstring( spawnname ) then print("invalid spawnname") return NULL end
if not isvector( pos ) then print("invalid spawn position") return NULL end
if not isangle( ang ) then print("invalid spawn angle") return NULL end
local vehicle = list.Get( "simfphys_vehicles" )[ spawnname ]
if not vehicle then print("vehicle \""..spawnname.."\" does not exist!") return NULL end
local Ent = simfphys.SpawnVehicle( nil, pos, ang, vehicle.Model, vehicle.Class, spawnname, vehicle, true )
return Ent
end
function simfphys.SpawnVehicle( Player, Pos, Ang, Model, Class, VName, VTable, bNoOwner )
if not bNoOwner then
if not gamemode.Call( "PlayerSpawnVehicle", Player, Model, VName, VTable ) then return end
end
if not file.Exists( Model, "GAME" ) then
Player:PrintMessage( HUD_PRINTTALK, "ERROR: \""..Model.."\" does not exist! (Class: "..VName..")")
return
end
local Ent = ents.Create( "gmod_sent_vehicle_fphysics_base" )
if not Ent then return NULL end
Ent:SetModel( Model )
Ent:SetAngles( Ang )
Ent:SetPos( Pos )
Ent:Spawn()
Ent:Activate()
Ent.VehicleName = VName
Ent.VehicleTable = VTable
Ent.EntityOwner = Player
Ent:SetSpawn_List( VName )
if VTable.Members then
table.Merge( Ent, VTable.Members )
if Ent.ModelInfo then
if Ent.ModelInfo.Bodygroups then
for i = 1, table.Count( Ent.ModelInfo.Bodygroups ) do
Ent:SetBodygroup(i, Ent.ModelInfo.Bodygroups[i] )
end
end
if Ent.ModelInfo.Skin then
Ent:SetSkin( Ent.ModelInfo.Skin )
end
if Ent.ModelInfo.Color then
Ent:SetColor( Ent.ModelInfo.Color )
local Color = Ent.ModelInfo.Color
local dot = Color.r * Color.g * Color.b * Color.a
Ent.OldColor = dot
local data = {
Color = Color,
RenderMode = 0,
RenderFX = 0
}
duplicator.StoreEntityModifier( Ent, "colour", data )
end
end
Ent:SetTireSmokeColor(Vector(180,180,180) / 255)
Ent.Turbocharged = Ent.Turbocharged or false
Ent.Supercharged = Ent.Supercharged or false
Ent:SetEngineSoundPreset( Ent.EngineSoundPreset )
Ent:SetMaxTorque( Ent.PeakTorque )
Ent:SetDifferentialGear( Ent.DifferentialGear )
Ent:SetSteerSpeed( Ent.TurnSpeed )
Ent:SetFastSteerConeFadeSpeed( Ent.SteeringFadeFastSpeed )
Ent:SetFastSteerAngle( Ent.FastSteeringAngle )
Ent:SetEfficiency( Ent.Efficiency )
Ent:SetMaxTraction( Ent.MaxGrip )
Ent:SetTractionBias( Ent.GripOffset / Ent.MaxGrip )
Ent:SetPowerDistribution( Ent.PowerBias )
Ent:SetBackFire( Ent.Backfire or false )
Ent:SetDoNotStall( Ent.DoNotStall or false )
Ent:SetIdleRPM( Ent.IdleRPM )
Ent:SetLimitRPM( Ent.LimitRPM )
Ent:SetRevlimiter( Ent.Revlimiter or false )
Ent:SetPowerBandEnd( Ent.PowerbandEnd )
Ent:SetPowerBandStart( Ent.PowerbandStart )
Ent:SetTurboCharged( Ent.Turbocharged )
Ent:SetSuperCharged( Ent.Supercharged )
Ent:SetBrakePower( Ent.BrakePower )
Ent:SetLights_List( Ent.LightsTable or "no_lights" )
Ent:SetBulletProofTires( Ent.BulletProofTires or false )
Ent:SetBackfireSound( Ent.snd_backfire or "" )
if not simfphys.WeaponSystemRegister then
if simfphys.ManagedVehicles then
print("[SIMFPHYS ARMED] IS OUT OF DATE")
end
else
timer.Simple( 0.2, function()
simfphys.WeaponSystemRegister( Ent )
end )
if (simfphys.armedAutoRegister and not simfphys.armedAutoRegister()) or simfphys.RegisterEquipment then
print("[SIMFPHYS ARMED]: ONE OF YOUR ADDITIONAL SIMFPHYS-ARMED PACKS IS CAUSING CONFLICTS!!!")
print("[SIMFPHYS ARMED]: PRECAUTIONARY RESTORING FUNCTION:")
print("[SIMFPHYS ARMED]: simfphys.FireHitScan")
print("[SIMFPHYS ARMED]: simfphys.FirePhysProjectile")
print("[SIMFPHYS ARMED]: simfphys.RegisterCrosshair")
print("[SIMFPHYS ARMED]: simfphys.RegisterCamera")
print("[SIMFPHYS ARMED]: simfphys.armedAutoRegister")
print("[SIMFPHYS ARMED]: REMOVING FUNCTION:")
print("[SIMFPHYS ARMED]: simfphys.RegisterEquipment")
print("[SIMFPHYS ARMED]: CLEARING OUTDATED ''RegisterEquipment'' HOOK")
print("[SIMFPHYS ARMED]: !!!FUNCTIONALITY IS NOT GUARANTEED!!!")
simfphys.FireHitScan = function( data ) simfphys.FireBullet( data ) end
simfphys.FirePhysProjectile = function( data ) simfphys.FirePhysBullet( data ) end
simfphys.RegisterCrosshair = function( ent, data ) simfphys.xhairRegister( ent, data ) end
simfphys.RegisterCamera =
function( ent, offset_firstperson, offset_thirdperson, bLocalAng, attachment )
simfphys.CameraRegister( ent, offset_firstperson, offset_thirdperson, bLocalAng, attachment )
end
hook.Remove( "PlayerSpawnedVehicle","simfphys_armedvehicles" )
simfphys.RegisterEquipment = nil
simfphys.armedAutoRegister = function( vehicle ) simfphys.WeaponSystemRegister( vehicle ) return true end
end
end
duplicator.StoreEntityModifier( Ent, "VehicleMemDupe", VTable.Members )
end
if IsValid( Player ) then
gamemode.Call( "PlayerSpawnedVehicle", Player, Ent )
return Ent
end
return Ent
end
function simfphys.SetOwner( ply, entity )
if not IsValid( entity ) or not IsValid( ply ) then return end
if CPPI then
if not IsEntity( ply ) then return end
if IsValid( ply ) then
entity:CPPISetOwner( ply )
end
end
end
end
if CLIENT then
net.Receive( "simfphys_plyrequestinfo", function( length )
local ent = net.ReadEntity()
if not simfphys.IsCar( ent ) then return end
ent.VehicleInfo = {}
ent.VehicleInfo["torque"] = net.ReadFloat()
ent.VehicleInfo["horsepower"] = net.ReadFloat()
ent.VehicleInfo["maxspeed"] = net.ReadFloat()
ent.VehicleInfo["weight"] = net.ReadFloat()
end )
end
function simfphys.UpdateFrictionData()
simfphys.TractionData = {}
timer.Simple( 0.1,function()
simfphys.TractionData["ice"] = simfphys.ice:GetFloat()
simfphys.TractionData["gmod_ice"] = simfphys.gmod_ice:GetFloat()
simfphys.TractionData["snow"] = simfphys.snow:GetFloat()
simfphys.TractionData["slipperyslime"] = simfphys.slipperyslime:GetFloat()
simfphys.TractionData["grass"] = simfphys.grass:GetFloat()
simfphys.TractionData["sand"] = simfphys.sand:GetFloat()
simfphys.TractionData["dirt"] = simfphys.dirt:GetFloat()
simfphys.TractionData["concrete"] = simfphys.concrete:GetFloat()
simfphys.TractionData["metal"] = simfphys.metal:GetFloat()
simfphys.TractionData["glass"] = simfphys.glass:GetFloat()
simfphys.TractionData["gravel"] = simfphys.gravel:GetFloat()
simfphys.TractionData["rock"] = simfphys.rock:GetFloat()
simfphys.TractionData["wood"] = simfphys.wood:GetFloat()
end)
end
simfphys.UpdateFrictionData()
simfphys.SoundPresets = {
{
"simulated_vehicles/gta5_dukes/dukes_idle.wav",
"simulated_vehicles/gta5_dukes/dukes_low.wav",
"simulated_vehicles/gta5_dukes/dukes_mid.wav",
"simulated_vehicles/gta5_dukes/dukes_revdown.wav",
"simulated_vehicles/gta5_dukes/dukes_second.wav",
"simulated_vehicles/gta5_dukes/dukes_second.wav",
0.8,
1,
0.8
},
{
"simulated_vehicles/master_chris_charger69/charger_idle.wav",
"simulated_vehicles/master_chris_charger69/charger_low.wav",
"simulated_vehicles/master_chris_charger69/charger_mid.wav",
"simulated_vehicles/master_chris_charger69/charger_revdown.wav",
"simulated_vehicles/master_chris_charger69/charger_second.wav",
"simulated_vehicles/master_chris_charger69/charger_shiftdown.wav",
0.75,
0.9,
0.95
},
{
"simulated_vehicles/shelby/shelby_idle.wav",
"simulated_vehicles/shelby/shelby_low.wav",
"simulated_vehicles/shelby/shelby_mid.wav",
"simulated_vehicles/shelby/shelby_revdown.wav",
"simulated_vehicles/shelby/shelby_second.wav",
"simulated_vehicles/shelby/shelby_shiftdown.wav",
0.8,
1,
0.85
},
{
"simulated_vehicles/jeep/jeep_idle.wav",
"simulated_vehicles/jeep/jeep_low.wav",
"simulated_vehicles/jeep/jeep_mid.wav",
"simulated_vehicles/jeep/jeep_revdown.wav",
"simulated_vehicles/jeep/jeep_second.wav",
"simulated_vehicles/jeep/jeep_second.wav",
0.9,
1,
1
},
{
"simulated_vehicles/v8elite/v8elite_idle.wav",
"simulated_vehicles/v8elite/v8elite_low.wav",
"simulated_vehicles/v8elite/v8elite_mid.wav",
"simulated_vehicles/v8elite/v8elite_revdown.wav",
"simulated_vehicles/v8elite/v8elite_second.wav",
"simulated_vehicles/v8elite/v8elite_second.wav",
0.8,
1,
1
},
{
"simulated_vehicles/4banger/4banger_idle.wav",
"simulated_vehicles/4banger/4banger_low.wav",
"simulated_vehicles/4banger/4banger_mid.wav",
"simulated_vehicles/4banger/4banger_low.wav",
"simulated_vehicles/4banger/4banger_second.wav",
"simulated_vehicles/4banger/4banger_second.wav",
0.8,
0.9,
1
},
{
"simulated_vehicles/jalopy/jalopy_idle.wav",
"simulated_vehicles/jalopy/jalopy_low.wav",
"simulated_vehicles/jalopy/jalopy_mid.wav",
"simulated_vehicles/jalopy/jalopy_revdown.wav",
"simulated_vehicles/jalopy/jalopy_second.wav",
"simulated_vehicles/jalopy/jalopy_shiftdown.wav",
0.95,
1.1,
0.9
},
{
"simulated_vehicles/alfaromeo/alfaromeo_idle.wav",
"simulated_vehicles/alfaromeo/alfaromeo_low.wav",
"simulated_vehicles/alfaromeo/alfaromeo_mid.wav",
"simulated_vehicles/alfaromeo/alfaromeo_low.wav",
"simulated_vehicles/alfaromeo/alfaromeo_second.wav",
"simulated_vehicles/alfaromeo/alfaromeo_second.wav",
0.65,
0.8,
1
},
{
"simulated_vehicles/generic1/generic1_idle.wav",
"simulated_vehicles/generic1/generic1_low.wav",
"simulated_vehicles/generic1/generic1_mid.wav",
"simulated_vehicles/generic1/generic1_revdown.wav",
"simulated_vehicles/generic1/generic1_second.wav",
"simulated_vehicles/generic1/generic1_second.wav",
0.8,
1.1,
1
},
{
"simulated_vehicles/generic2/generic2_idle.wav",
"simulated_vehicles/generic2/generic2_low.wav",
"simulated_vehicles/generic2/generic2_mid.wav",
"simulated_vehicles/generic2/generic2_revdown.wav",
"simulated_vehicles/generic2/generic2_second.wav",
"simulated_vehicles/generic2/generic2_second.wav",
1,
1.1,
1
},
{
"simulated_vehicles/generic3/generic3_idle.wav",
"simulated_vehicles/generic3/generic3_low.wav",
"simulated_vehicles/generic3/generic3_mid.wav",
"simulated_vehicles/generic3/generic3_revdown.wav",
"simulated_vehicles/generic3/generic3_second.wav",
"simulated_vehicles/generic3/generic3_second.wav",
0.9,
0.9,
1
},
{
"simulated_vehicles/generic4/generic4_idle.wav",
"simulated_vehicles/generic4/generic4_low.wav",
"simulated_vehicles/generic4/generic4_mid.wav",
"simulated_vehicles/generic4/generic4_revdown.wav",
"simulated_vehicles/generic4/generic4_gear.wav",
"simulated_vehicles/generic4/generic4_shiftdown.wav",
1,
1.1,
1
},
{
"simulated_vehicles/generic5/generic5_idle.wav",
"simulated_vehicles/generic5/generic5_low.wav",
"simulated_vehicles/generic5/generic5_mid.wav",
"simulated_vehicles/generic5/generic5_revdown.wav",
"simulated_vehicles/generic5/generic5_gear.wav",
"simulated_vehicles/generic5/generic5_gear.wav",
0.7,
0.7,
1
},
{
"simulated_vehicles/gta5_gauntlet/gauntlet_idle.wav",
"simulated_vehicles/gta5_gauntlet/gauntlet_low.wav",
"simulated_vehicles/gta5_gauntlet/gauntlet_mid.wav",
"simulated_vehicles/gta5_gauntlet/gauntlet_revdown.wav",
"simulated_vehicles/gta5_gauntlet/gauntlet_gear.wav",
"simulated_vehicles/gta5_gauntlet/gauntlet_gear.wav",
0.95,
1.1,
1
},
{
"vehicles/tdmcars/mitsuevox/mitsuevox_idle.wav",
"vehicles/tdmcars/mitsuevox/mitsuevox_low.wav",
"vehicles/tdmcars/mitsuevox/mitsuevox_mid.wav",
"vehicles/tdmcars/mitsuevox/mitsuevox_revdown.wav",
"vehicles/tdmcars/mitsuevox/mitsuevox_gear.wav",
"vehicles/tdmcars/mitsuevox/mitsuevox_gear.wav",
0.9,
0.95,
1,
},
{
"vehicles/tdmcars/for_taurus_13/for_taurus_13_idle.wav",
"vehicles/tdmcars/for_taurus_13/for_taurus_13_low.wav",
"vehicles/tdmcars/for_taurus_13/for_taurus_13_mid.wav",
"vehicles/tdmcars/for_taurus_13/for_taurus_13_revdown.wav",
"vehicles/tdmcars/for_taurus_13/for_taurus_13_gear.wav",
"vehicles/tdmcars/for_taurus_13/for_taurus_13_gear.wav",
1,
0.9,
1,
},
{
"vehicles/tdmcars/focussvt/focussvt_idle.wav",
"vehicles/tdmcars/focussvt/focussvt_low.wav",
"vehicles/tdmcars/focussvt/focussvt_mid.wav",
"vehicles/tdmcars/focussvt/focussvt_revdown.wav",
"vehicles/tdmcars/focussvt/focussvt_gear.wav",
"vehicles/tdmcars/focussvt/focussvt_gear.wav",
0.95,
1.05,
1,
},
{
"vehicles/tdmcars/mere63/mere63_idle.wav",
"vehicles/tdmcars/mere63/mere63_low.wav",
"vehicles/tdmcars/mere63/mere63_mid.wav",
"vehicles/tdmcars/mere63/mere63_revdown.wav",
"vehicles/tdmcars/mere63/mere63_gear.wav",
"vehicles/tdmcars/mere63/mere63_gear.wav",
1.2,
1.1,
1,
},
{
"vehicles/tdmcars/supra/supra_idle.wav",
"vehicles/tdmcars/supra/supra_low.wav",
"vehicles/tdmcars/supra/supra_mid.wav",
"vehicles/tdmcars/supra/supra_revdown.wav",
"vehicles/tdmcars/supra/supra_gear.wav",
"vehicles/tdmcars/supra/supra_gear.wav",
1,
1.2,
0.85,
},
{
"vehicles/tdmcars/f350/f350_idle.wav",
"vehicles/tdmcars/f350/f350_low.wav",
"vehicles/tdmcars/f350/f350_mid.wav",
"vehicles/tdmcars/f350/f350_revdown.wav",
"vehicles/tdmcars/f350/f350_gear.wav",
"vehicles/tdmcars/f350/f350_gear.wav",
1,
1.2,
1,
},
{
"vehicles/tdmcars/mr2gt/mr2gt_idle.wav",
"vehicles/tdmcars/mr2gt/mr2gt_low.wav",
"vehicles/tdmcars/mr2gt/mr2gt_mid.wav",
"vehicles/tdmcars/mr2gt/mr2gt_revdown.wav",
"vehicles/tdmcars/mr2gt/mr2gt_gear.wav",
"vehicles/tdmcars/mr2gt/mr2gt_gear.wav",
0.9,
1,
1,
},
{
"vehicles/tdmcars/rav4/rav4_idle.wav",
"vehicles/tdmcars/rav4/rav4_low.wav",
"vehicles/tdmcars/rav4/rav4_mid.wav",
"vehicles/tdmcars/rav4/rav4_revdown.wav",
"vehicles/tdmcars/rav4/rav4_gear.wav",
"vehicles/tdmcars/rav4/rav4_gear.wav",
1.1,
1.1,
1,
},
{
"vehicles/tdmcars/toyfj/toyfj_idle.wav",
"vehicles/tdmcars/toyfj/toyfj_low.wav",
"vehicles/tdmcars/toyfj/toyfj_mid.wav",
"vehicles/tdmcars/toyfj/toyfj_revdown.wav",
"vehicles/tdmcars/toyfj/toyfj_gear.wav",
"vehicles/tdmcars/toyfj/toyfj_shiftdown.wav",
0.85,
1.15,
1,
},
}