script.Parent:WaitForChild("\067\097\114")script.Parent:WaitForChild("\073\115\079\110")script.Parent:WaitForChild("\067\111\110\116\114\111\108\115\079\112\101\110")script.Parent:WaitForChild("\086\097\108\117\101\115")local l=game.Players.LocalPlayer local g=l:GetMouse()local c=game:GetService("\085\115\101\114\073\110\112\117\116\083\101\114\118\105\099\101")local N=script.Parent.Car.Value local I=require(N["\065-\067\104\097\115\115\105\115 \084\117\110\101"])local Y=I.BrakeForce*I.BrakeBias local o=I.BrakeForce*(1-I.BrakeBias)local h=I.PBrakeForce*I.PBrakeBias local m=I.PBrakeForce*(1-I.PBrakeBias)local K=I.EBrakeForce local U=I.SteerOuter local r=I.SteerInner local M=I.RSteerOuter local R=I.RSteerInner if not workspace:PGSIsEnabled()then error("\080\071\083 \105\115 \110\111\116 \101\110\097\098\108\101\100\058 \065-\067\104\097\115\115\105\115 \119\105\108\108 \110\111\116 \119\111\114\107\046")end local z=I.AutoStart if I.AutoStart and(I.Engine or I.Electric)then script.Parent.IsOn.Value=true end local G=0 local Q=0 local f=0 local e=0 local P=I.IdleThrottle/100 local X=0 local W=0 local H=0 local k=false local B=false local O=0 local j=0 local b=0 local q=0 local p=0 local D=0 local i=0 local d=i local S=false local E=false local V=false local a=0 local w=0 local L=0 local v=0 local n=0 local Z=0 local x=0 local u=0 local F=0 local C=0 local T=0 local A=0 local t=0 local s=0 local J=0 local y=0 local l6=0 local g6=0 local c6=I.TransModes[1]local N6=false local I6=false local Y6=false local o6=false local h6=I.TCSEnabled local m6=false local K6=0 local U6=I.ABSEnabled local r6=false local M6=tick()local R6=false local z6=false N.DriveSeat.ChildRemoved:connect(function(l)if l.Name=="\083\101\097\116\087\101\108\100"and l:IsA("\087\101\108\100")then script.Parent:Destroy()end end)local G6=I.Controls local Q6=Instance.new("\070\111\108\100\101\114",script.Parent)Q6.Name="\067\111\110\116\114\111\108\115"for l,g in pairs(G6)do local c=Instance.new("\083\116\114\105\110\103\086\097\108\117\101",Q6)c.Name=l c.Value=g.Name c.Changed:connect(function()if l=="\077\111\117\115\101\084\104\114\111\116\116\108\101"or l=="\077\111\117\115\101\066\114\097\107\101"then if c.Value=="\077\111\117\115\101\066\117\116\116\111\110\049"or c.Value=="\077\111\117\115\101\066\117\116\116\111\110\050"then G6[l]=Enum.UserInputType[c.Value]else G6[l]=Enum.KeyCode[c.Value]end else G6[l]=Enum.KeyCode[c.Value]end end)end local f6=I.Peripherals for l,g in pairs(f6)do local c=Instance.new("\073\110\116\086\097\108\117\101",Q6)c.Name=l c.Value=g c.Changed:connect(function()c.Value=math.min(100,math.max(0,c.Value))f6[l]=c.Value end)end function DealWithInput(l,g)if c:GetFocusedTextBox()==nil and not z6 then if(l.KeyCode==G6.ContlrShiftDown or N6 and l.KeyCode==G6.MouseShiftDown or not N6 and l.KeyCode==G6.ShiftDown)and((z and((c6=="\065\117\116\111"and i<=1)and I.AutoShiftVers=="\078\101\119")or c6=="\083\101\109\105"or c6=="\077\097\110\117\097\108")and l.UserInputState==Enum.UserInputState.Begin)then if not E then E=true end elseif(l.KeyCode==G6.ContlrShiftUp or N6 and l.KeyCode==G6.MouseShiftUp or not N6 and l.KeyCode==G6.ShiftUp)and((z and((c6=="\065\117\116\111"and i<1)and I.AutoShiftVers=="\078\101\119")or c6=="\083\101\109\105"or c6=="\077\097\110\117\097\108")and l.UserInputState==Enum.UserInputState.Begin)then if not S then S=true end elseif(l.KeyCode==G6.ContlrClutch or N6 and l.KeyCode==G6.MouseClutch or not N6 and l.KeyCode==G6.Clutch)and c6=="\077\097\110\117\097\108"then if l.UserInputState==Enum.UserInputState.Begin then k=true B=true elseif l.UserInputState==Enum.UserInputState.End then k=false B=false end elseif l.KeyCode==G6.ContlrPBrake or N6 and l.KeyCode==G6.MousePBrake or not N6 and l.KeyCode==G6.PBrake then if l.UserInputState==Enum.UserInputState.Begin then o6=not o6 elseif l.UserInputState==Enum.UserInputState.End then if N.DriveSeat.Velocity.Magnitude>5 then o6=false end end elseif(l.KeyCode==G6.ContlrToggleTMode or l.KeyCode==G6.ToggleTransMode)and l.UserInputState==Enum.UserInputState.Begin then local l=1 for g,c in pairs(I.TransModes)do if c==c6 then l=g break end end l=l+1 if l>#I.TransModes then l=1 end c6=I.TransModes[l]elseif not N6 and(l.KeyCode==G6.Throttle or l.KeyCode==G6.Throttle2)or((G6.MouseThrottle==Enum.UserInputType.MouseButton1 or G6.MouseThrottle==Enum.UserInputType.MouseButton2)and l.UserInputType==G6.MouseThrottle or l.KeyCode==G6.MouseThrottle)and N6 then if l.UserInputState==Enum.UserInputState.Begin and z then P=1 else P=I.IdleThrottle/100 end elseif not N6 and(l.KeyCode==G6.Brake or l.KeyCode==G6.Brake2)or((G6.MouseBrake==Enum.UserInputType.MouseButton1 or G6.MouseBrake==Enum.UserInputType.MouseButton2)and l.UserInputType==G6.MouseBrake or l.KeyCode==G6.MouseBrake)and N6 then if l.UserInputState==Enum.UserInputState.Begin then H=1 else H=0 end elseif not N6 and(l.KeyCode==G6.SteerLeft or l.KeyCode==G6.SteerLeft2)then if l.UserInputState==Enum.UserInputState.Begin then G=-1 I6=true else if Y6 then G=1 else G=0 end I6=false end elseif not N6 and(l.KeyCode==G6.SteerRight or l.KeyCode==G6.SteerRight2)then if l.UserInputState==Enum.UserInputState.Begin then G=1 Y6=true else if I6 then G=-1 else G=0 end Y6=false end elseif l.KeyCode==G6.ToggleMouseDrive then if l.UserInputState==Enum.UserInputState.End then N6=not N6 P=I.IdleThrottle/100 H=0 G=0 end elseif I.TCSEnabled and(z and l.KeyCode==G6.ToggleTCS)or l.KeyCode==G6.ContlrToggleTCS then if l.UserInputState==Enum.UserInputState.End then h6=not h6 end elseif I.ABSEnabled and(z and l.KeyCode==G6.ToggleABS)or l.KeyCode==G6.ContlrToggleABS then if l.UserInputState==Enum.UserInputState.End then U6=not U6 end end if l.UserInputType.Name:find("\071\097\109\101\112\097\100")then if l.KeyCode==G6.ContlrSteer then if l.Position.X>=0 then local g=math.min(.99,I.Peripherals.ControlRDZone/100)if math.abs(l.Position.X)>g then G=(l.Position.X-g)/(1-g)else G=0 end else local g=math.min(.99,I.Peripherals.ControlLDZone/100)if math.abs(l.Position.X)>g then G=(l.Position.X+g)/(1-g)else G=0 end end elseif l.KeyCode==G6.ContlrThrottle then if z then P=math.max(I.IdleThrottle/100,l.Position.Z)else P=I.IdleThrottle/100 end elseif l.KeyCode==G6.ContlrBrake then H=l.Position.Z end end else P=I.IdleThrottle/100 G=0 H=0 end end c.InputBegan:connect(DealWithInput)c.InputChanged:connect(DealWithInput)c.InputEnded:connect(DealWithInput)local e6={}if I.Config=="\070\087\068"or I.Config=="\065\087\068"then for l,g in pairs(N.Wheels:GetChildren())do if g.Name=="\070\076"or g.Name=="\070\082"or g.Name=="\070"then table.insert(e6,g)end end end if I.Config=="\082\087\068"or I.Config=="\065\087\068"then for l,g in pairs(N.Wheels:GetChildren())do if g.Name=="\082\076"or g.Name=="\082\082"or g.Name=="\082"then table.insert(e6,g)end end end local P6=0 for l,g in pairs(e6)do if g.Size.x>P6 then P6=g.Size.x end end for l,g in pairs(N.Wheels:GetChildren())do if math.abs(g["\035\066\086"].MotorMaxTorque-h)<1 or math.abs(g["\035\066\086"].MotorMaxTorque-m)<1 then o6=true end end function Inputs(l)local g=60/(1/l)if e<=P then e=math.min(P,e+I.ThrotAccel*g)else e=math.max(P,e-I.ThrotDecel*g)end if W<=H then W=math.min(H,W+I.BrakeAccel*g)else W=math.max(H,W-I.BrakeDecel*g)end end if I.SteeringType=="\078\101\119"then U=(I.LockToLock*180)/I.SteerRatio r=math.min(U-U*(1-I.Ackerman),U*1.2)end function Steering(l)local c=60/(1/l)if N6 then local l=math.max(1,(g.ViewSizeX*I.Peripherals.MSteerWidth)/200)local c=I.Peripherals.MSteerDZone/100 local N=(g.X-g.ViewSizeX/2)/l if math.abs(N)<=c then G=0 else G=(math.max(math.min(math.abs(N)-c,1-c),0)/(1-c))^I.MSteerExp*(N/math.abs(N))end end if Q<G then if Q<0 then Q=math.min(G,Q+I.ReturnSpeed*c)else Q=math.min(G,Q+I.SteerSpeed*c)end else if Q>0 then Q=math.max(G,Q-I.ReturnSpeed*c)else Q=math.max(G,Q-I.SteerSpeed*c)end end local Y=1-math.min(N.DriveSeat.Velocity.Magnitude/I.SteerDecay,1-I.MinSteer/100)local o=1-math.min(N.DriveSeat.Velocity.Magnitude/I.RSteerDecay,1-I.MinSteer/100)for l,g in pairs(N.Wheels:GetChildren())do if g.Name=="\070"then g.Arm.Steer.CFrame=N.Wheels.F.Base.CFrame*CFrame.Angles(0,-math.rad((Q*I.SteerInner)*Y),0)elseif g.Name=="\070\076"then if Q>=0 then g.Arm.Steer.CFrame=N.Wheels.FL.Base.CFrame*CFrame.Angles(0,-math.rad((Q*U)*Y),0)else g.Arm.Steer.CFrame=N.Wheels.FL.Base.CFrame*CFrame.Angles(0,-math.rad((Q*r)*Y),0)end elseif g.Name=="\070\082"then if Q>=0 then g.Arm.Steer.CFrame=N.Wheels.FR.Base.CFrame*CFrame.Angles(0,-math.rad((Q*r)*Y),0)else g.Arm.Steer.CFrame=N.Wheels.FR.Base.CFrame*CFrame.Angles(0,-math.rad((Q*U)*Y),0)end elseif g.Name=="\082"then if I.FWSteer=="\078\111\110\101"then elseif I.FWSteer=="\083\116\097\116\105\099"then g.Arm.Steer.CFrame=N.Wheels.R.Base.CFrame*CFrame.Angles(0,math.rad(((Q*R)*o)*math.max(0,1-N.DriveSeat.Velocity.Magnitude/I.RSteerSpeed)),0)elseif I.FWSteer=="\083\112\101\101\100"then g.Arm.Steer.CFrame=N.Wheels.R.Base.CFrame*CFrame.Angles(0,-math.rad(((Q*R)*o)*math.min(1,N.DriveSeat.Velocity.Magnitude/I.RSteerSpeed)),0)elseif I.FWSteer=="\066\111\116\104"then g.Arm.Steer.CFrame=N.Wheels.R.Base.CFrame*CFrame.Angles(0,math.rad(((Q*R)*o)*math.max(-1,1-N.DriveSeat.Velocity.Magnitude/I.RSteerSpeed)),0)end elseif g.Name=="\082\076"then if I.FWSteer=="\078\111\110\101"then elseif I.FWSteer=="\083\116\097\116\105\099"then if Q>=0 then g.Arm.Steer.CFrame=N.Wheels.RL.Base.CFrame*CFrame.Angles(0,math.rad(((Q*M)*o)*math.max(0,1-N.DriveSeat.Velocity.Magnitude/I.RSteerSpeed)),0)else g.Arm.Steer.CFrame=N.Wheels.RL.Base.CFrame*CFrame.Angles(0,math.rad(((Q*R)*o)*math.max(0,1-N.DriveSeat.Velocity.Magnitude/I.RSteerSpeed)),0)end elseif I.FWSteer=="\083\112\101\101\100"then if Q>=0 then g.Arm.Steer.CFrame=N.Wheels.RL.Base.CFrame*CFrame.Angles(0,-math.rad(((Q*M)*o)*math.min(1,N.DriveSeat.Velocity.Magnitude/I.RSteerSpeed)),0)else g.Arm.Steer.CFrame=N.Wheels.RL.Base.CFrame*CFrame.Angles(0,-math.rad(((Q*R)*o)*math.min(1,N.DriveSeat.Velocity.Magnitude/I.RSteerSpeed)),0)end elseif I.FWSteer=="\066\111\116\104"then if Q>=0 then g.Arm.Steer.CFrame=N.Wheels.RL.Base.CFrame*CFrame.Angles(0,math.rad(((Q*M)*o)*math.max(-1,1-N.DriveSeat.Velocity.Magnitude/I.RSteerSpeed)),0)else g.Arm.Steer.CFrame=N.Wheels.RL.Base.CFrame*CFrame.Angles(0,math.rad(((Q*R)*o)*math.max(-1,1-N.DriveSeat.Velocity.Magnitude/I.RSteerSpeed)),0)end end elseif g.Name=="\082\082"then if I.FWSteer=="\078\111\110\101"then elseif I.FWSteer=="\083\116\097\116\105\099"then if Q>=0 then g.Arm.Steer.CFrame=N.Wheels.RR.Base.CFrame*CFrame.Angles(0,math.rad(((Q*R)*o)*math.max(0,1-N.DriveSeat.Velocity.Magnitude/I.RSteerSpeed)),0)else g.Arm.Steer.CFrame=N.Wheels.RR.Base.CFrame*CFrame.Angles(0,math.rad(((Q*M)*o)*math.max(0,1-N.DriveSeat.Velocity.Magnitude/I.RSteerSpeed)),0)end elseif I.FWSteer=="\083\112\101\101\100"then if Q>=0 then g.Arm.Steer.CFrame=N.Wheels.RR.Base.CFrame*CFrame.Angles(0,-math.rad(((Q*R)*o)*math.min(1,N.DriveSeat.Velocity.Magnitude/I.RSteerSpeed)),0)else g.Arm.Steer.CFrame=N.Wheels.RR.Base.CFrame*CFrame.Angles(0,-math.rad(((Q*M)*o)*math.min(1,N.DriveSeat.Velocity.Magnitude/I.RSteerSpeed)),0)end elseif I.FWSteer=="\066\111\116\104"then if Q>=0 then g.Arm.Steer.CFrame=N.Wheels.RR.Base.CFrame*CFrame.Angles(0,math.rad(((Q*R)*o)*math.max(-1,1-N.DriveSeat.Velocity.Magnitude/I.RSteerSpeed)),0)else g.Arm.Steer.CFrame=N.Wheels.RR.Base.CFrame*CFrame.Angles(0,math.rad(((Q*M)*o)*math.max(-1,1-N.DriveSeat.Velocity.Magnitude/I.RSteerSpeed)),0)end end end end end local X6=I.FinalDrive*I.FDMult local W6=(X6*30)/math.pi local H6=(workspace.Gravity*I.InclineComp)/32.2 local k6=(P6*math.pi)/60 local B6=CFrame.Angles(math.pi/2,-math.pi/2,0)local O6=CFrame.Angles(0,math.pi,0)if not I.Engine and I.Electric then I.Redline=I.E_Redline I.PeakRPM=I.E_Trans2 I.Turbochargers=0 I.Superchargers=0 I.Clutch=false I.IdleRPM=0 I.ClutchType="\067\108\117\116\099\104"I.AutoShiftType="\068\067\084"I.ShiftUpTime=.1 I.ShiftDnTime=.1 end L=I.Turbochargers v=I.T_Boost*I.Turbochargers Z=I.Superchargers x=I.S_Boost*I.Superchargers local j6=I.Horsepower/100 local b6=(((I.Horsepower*(v*(I.CompressionRatio/10)))/7.5)/2)/100 local q6=(((I.Horsepower*(x*(I.CompressionRatio/10)))/7.5)/2)/100 local p6=I.PeakRPM/1000 local D6=I.PeakSharpness local i6=I.CurveMult local d6=I.EqPoint/1000 function CurveN(l)l=l/1000 return(-(l-p6)^2*math.min(j6/p6^2,i6^(p6/j6))+j6)*(l-l^D6/(D6*p6^(D6-1)))end local S6=CurveN(I.PeakRPM)function CurveT(l)l=l/1000 return(-(l-p6)^2*math.min(b6/p6^2,i6^(p6/b6))+b6)*(l-l^D6/(D6*p6^(D6-1)))end local E6=CurveT(I.PeakRPM)function CurveS(l)l=l/1000 return(-(l-p6)^2*math.min(q6/p6^2,i6^(p6/q6))+q6)*(l-l^D6/(D6*p6^(D6-1)))end local V6=CurveS(I.PeakRPM)local a6=I.E_Horsepower/100 local w6=I.E_Torque/100 local L6=I.E_Trans1/1000 local v6=I.E_Trans2/1000 local n6=I.E_Redline/1000 function elecHP(l)l=l/1000 local g=1e-09 if l<=L6 then g=((l/L6)^I.EH_FrontMult/(1/a6))*(l/L6)+((l/L6)^(1/I.EH_FrontMult)/(1/a6))*(1-l/L6)elseif L6<l and l<v6 then g=a6 elseif v6<=l then g=a6-((l-v6)/(n6-v6))^I.EH_EndMult/(1/(a6*(I.EH_EndPercent/100)))else error("\n\t \091\065\067\054\067\093\058 \068\114\105\118\101 \105\110\105\116\105\097\108\105\122\097\116\105\111\110 \102\097\105\108\101\100\033"..("\n\t    \065\110 \117\110\107\110\111\119\110 \101\114\114\111\114 \111\099\099\117\114\101\100 \119\104\101\110 \105\110\105\116\105\097\108\105\122\105\110\103 \101\108\101\099\116\114\105\099 \104\111\114\115\101\112\111\119\101\114\046"..("\n\t    \080\108\101\097\115\101 \115\101\110\100 \097 \115\099\114\101\101\110\115\104\111\116 \111\102 \116\104\105\115 \109\101\115\115\097\103\101 \116\111 \065\118\120\110\116\117\114\097\100\111\114\046"..("\n\t    \082\058 "..(l..("\044 \084\049\058 "..(L6("\044 \084\050\058 ")..(v6("\044 \076\058 ")..n6("\046")))))))))end return g end function elecTQ(l)l=l/1000 local g=1e-09 if l<L6 then g=w6 elseif L6<=l then g=w6-((l-L6)/(n6-L6))^I.ET_EndMult/(1/(w6*(I.ET_EndPercent/100)))else error("\n\t \091\065\067\054\067\093\058 \068\114\105\118\101 \105\110\105\116\105\097\108\105\122\097\116\105\111\110 \102\097\105\108\101\100\033"..("\n\t    \065\110 \117\110\107\110\111\119\110 \101\114\114\111\114 \111\099\099\117\114\101\100 \119\104\101\110 \105\110\105\116\105\097\108\105\122\105\110\103 \101\108\101\099\116\114\105\099 \116\111\114\113\117\101\046"..("\n\t    \080\108\101\097\115\101 \115\101\110\100 \097 \115\099\114\101\101\110\115\104\111\116 \111\102 \116\104\105\115 \109\101\115\115\097\103\101 \116\111 \065\118\120\110\116\117\114\097\100\111\114\046"..("\n\t    \082\058 "..(l..("\044 \084\049\058 "..(L6("\044 \084\050\058 ")..(v6("\044 \076\058 ")..n6("\046")))))))))end return g end function GetNCurve(l,g)local c=math.max(CurveN(l)/(S6/j6),0)*100 return c,(((c*(d6/l))*I.Ratios[g+2])*X6)*1000 end function GetECurve(l,g)local c=math.max(elecHP(l),0)*100 local N=math.max(elecTQ(l),0)*100 if g~=0 then return c,math.max((N*I.Ratios[g+2])*X6,0)else return 0,0 end end function GetTCurve(l,g)local c=math.max(CurveT(l)/(E6/b6),0)*100 return c,(((c*(d6/l))*I.Ratios[g+2])*X6)*1000 end function GetSCurve(l,g)local c=math.max(CurveS(l)/(V6/q6),0)*100 return c,(((c*(d6/l))*I.Ratios[g+2])*X6)*1000 end local Z6={}local x6={}local u6={}local F6={}for l,g in pairs(I.Ratios)do local c={}local N={}local Y={}local o={}for g=0,math.ceil((I.Redline+100)/100),1 do local h={}local m={}local K={}local U={}if g~=0 then if I.Engine then h.Horsepower,h.Torque=GetNCurve(g*100,l-2)if L~=0 then K.Horsepower,K.Torque=GetTCurve(g*100,l-2)else K.Horsepower,K.Torque=0,0 end if Z~=0 then U.Horsepower,U.Torque=GetSCurve(g*100,l-2)else U.Horsepower,U.Torque=0,0 end else h.Horsepower,h.Torque=0,0 K.Horsepower,K.Torque=0,0 U.Horsepower,U.Torque=0,0 end if I.Electric then m.Horsepower,m.Torque=GetECurve(g*100,l-2)else m.Horsepower,m.Torque=0,0 end else h.Horsepower,h.Torque=0,0 m.Horsepower,m.Torque=0,0 K.Horsepower,K.Torque=0,0 U.Horsepower,U.Torque=0,0 end if I.Engine then nhp,ntq=GetNCurve((g+1)*100,l-2)if L~=0 then thp,ttq=GetTCurve((g+1)*100,l-2)else thp,ttq=0,0 end if Z~=0 then shp,stq=GetSCurve((g+1)*100,l-2)else shp,stq=0,0 end else nhp,ntq=0,0 thp,ttq=0,0 shp,stq=0,0 end if I.Electric then ehp,etq=GetECurve((g+1)*100,l-2)else ehp,etq=0,0 end h.HpSlope,h.TqSlope=nhp-h.Horsepower,ntq-h.Torque m.HpSlope,m.TqSlope=ehp-m.Horsepower,etq-m.Torque K.HpSlope,K.TqSlope=thp-K.Horsepower,ttq-K.Torque U.HpSlope,U.TqSlope=shp-U.Horsepower,stq-U.Torque c[g]=h N[g]=m Y[g]=K o[g]=U end table.insert(Z6,c)table.insert(x6,N)table.insert(u6,Y)table.insert(F6,o)end wait()function Auto()local l=0 for g,c in pairs(e6)do if c.RotVelocity.Magnitude>l then l=c.RotVelocity.Magnitude end end if z then if I.AutoShiftVers=="\079\108\100"and i==0 then i=1 k=false end if i>=1 then if(i==1 and(W>0 and N.DriveSeat.Velocity.Magnitude<5))and I.AutoShiftVers=="\079\108\100"then i=-1 k=false elseif N.DriveSeat.Velocity.Magnitude>5 then if I.AutoShiftMode=="\082\080\077"then if q>I.PeakRPM+I.AutoUpThresh then if not S and not V then S=true end elseif math.max(math.min((l*I.Ratios[i+1])*W6,I.Redline+100),I.IdleRPM)<I.PeakRPM-I.AutoDownThresh and i>1 then if not E and not V then E=true end end else if N.DriveSeat.Velocity.Magnitude>math.ceil(((k6*(I.PeakRPM+I.AutoUpThresh))/I.Ratios[i+2])/X6)then if not S and not V then S=true end elseif N.DriveSeat.Velocity.Magnitude<math.ceil(((k6*(I.PeakRPM-I.AutoDownThresh))/I.Ratios[i+1])/X6)and i>1 then if not E and not V then E=true end end end end else if(e-I.IdleThrottle/100>0 and N.DriveSeat.Velocity.Magnitude<5)and I.AutoShiftVers=="\079\108\100"then i=1 k=false end end end end function Gear()local l=0 for g,c in pairs(e6)do if c.RotVelocity.Magnitude>l then l=c.RotVelocity.Magnitude end end if S and not V then if c6=="\077\097\110\117\097\108"and not k or c6=="\077\097\110\117\097\108"and(I.ClutchRel and e-I.IdleThrottle/100>0)or i==#I.Ratios-2 or c6~="\077\097\110\117\097\108"and not z then S=false return end local g=math.min(i+3,#I.Ratios)if c6~="\077\097\110\117\097\108"then V=true if i>0 then if I.AutoShiftType=="\068\067\084"then wait(I.ShiftUpTime)elseif I.AutoShiftType=="\082\101\118"then repeat wait()until q<=math.max(math.min((l*I.Ratios[g])*W6,I.Redline-I.RevBounce),I.IdleRPM)or not z or E end end end S=false V=false if c6~="\077\097\110\117\097\108"and not z then return end i=math.min(i+1,#I.Ratios-2)if c6~="\077\097\110\117\097\108"or(c6=="\077\097\110\117\097\108"and i==1)and z then k=false end end if E and not V then if c6=="\077\097\110\117\097\108"and not k or i==-1 or c6~="\077\097\110\117\097\108"and not z then E=false return end local g=math.min(i+1,#I.Ratios)if c6~="\077\097\110\117\097\108"then V=true if i>1 then if I.AutoShiftType=="\068\067\084"then wait(I.ShiftDnTime)elseif I.AutoShiftType=="\082\101\118"then repeat wait()until q>=math.max(math.min((l*I.Ratios[g])*W6,I.Redline-I.RevBounce),I.IdleRPM)or not z or S end end end E=false V=false if c6~="\077\097\110\117\097\108"and not z then return end i=math.max(i-1,-1)if c6~="\077\097\110\117\097\108"or(c6=="\077\097\110\117\097\108"and i==-1)and z then k=false end end end local C6=0 local T6=1 local A6=0 local t6=false local s6=tick()function Engine(l)local g=60/(1/l)if(i==0 or V)and z then k=true O=1 t6=false end local c=I.IdleRPM local U=I.IdleRPM local r=I.Redline if I.Stall and I.Clutch then c=0 end if V and S then f=0 elseif V and E then f=I.ShiftThrot/100 else if I.AutoShiftVers=="\079\108\100"and(i==-1 and c6=="\065\117\116\111")then f=W else f=e end end if I.AutoShiftVers=="\079\108\100"and(i==-1 and c6=="\065\117\116\111")then X=e-I.IdleThrottle/100 else X=W end if not z then s6=tick()c=0 U=0 f=I.IdleThrottle/100 if c6~="\077\097\110\117\097\108"then i=0 k=true O=1 end end if(k and i==0 or B and i~=0)and I.NeutralLimit then if i==0 and not I.LimitClutch or I.LimitClutch then r=I.NeutralRevRPM end end local M=0 local R=0 local G=f for l,g in pairs(e6)do M=M+g.RotVelocity.Magnitude R=R+1 end M=M/R if C6>r+100 then G=I.IdleThrottle/100 end if I.Engine or I.Electric then C6=math.clamp((q-I.RevDecay*g)+((I.RevDecay+I.RevAccel)*G)*g,U,I.Redline+100)end if C6>I.Redline then if i<#I.Ratios-2 then C6=C6-I.RevBounce else C6=C6-I.RevBounce*.5 end end local Q=(M*I.Ratios[i+2])*W6 if I.Clutch then if script.Parent.Values.AutoClutch.Value and z then if I.ClutchType=="\067\108\117\116\099\104"then if k then j=1 end j=j*(I.ClutchEngage/100)local l=math.max(((q-I.IdleRPM)*I.ClutchRPMMult)/(I.Redline-I.IdleRPM),0)if I.ClutchMode=="\078\101\119"then l=0 end b=math.min(((script.Parent.Values.Velocity.Value.Magnitude/I.SpeedEngage)/math.abs(i)+l)-j,1)elseif I.ClutchType=="\067\086\084"or I.ClutchType=="\084\111\114\113\117\101\067\111\110\118\101\114\116\101\114"and I.TQLock then if f-I.IdleThrottle/100==0 and script.Parent.Values.Velocity.Value.Magnitude<I.SpeedEngage or f-I.IdleThrottle/100~=0 and(q<I.RPMEngage and Q<I.RPMEngage)then b=math.min(b*(I.ClutchEngage/100),1)else b=math.min(b*(I.ClutchEngage/100)+(1-I.ClutchEngage/100),1)end elseif I.ClutchType=="\084\111\114\113\117\101\067\111\110\118\101\114\116\101\114"and not I.TQLock then b=math.min((q/I.Redline)*.7,1)end if not k then O=math.min(1-b,1)else O=1 end t6=O<=.01 or t6 else t6=I.Stall O=script.Parent.Values.Clutch.Value end else t6=false if not k and not V then O=0 else O=1 end end local P=math.max(math.min(C6*O+Q*(1-O),I.Redline+100),c)local H=math.min(math.abs(P-q)/(I.Flywheel*g),.9)if k then H=0 end q=q*H+P*(1-H)if q<=I.IdleRPM/4 and(t6 and tick()-s6>=.2)then script.Parent.IsOn.Value=not I.Stall end a=(I.Redline+100)/(W6*I.Ratios[i+2])if q>I.Redline then if i<#I.Ratios-2 then q=q-I.RevBounce else q=q-I.RevBounce*.5 end end local d=v/L local w=f if I.Engine then if L~=0 and L~=2 then n=n+(((((p*(w*1.2))/I.Horsepower)/8-(n/d)*(d/15))*((8/(I.T_BoostLag/g))*2))/d)*15 if n<.05 then n=.05 elseif n>2 then n=2 end elseif L==2 then if n<1 then n=n+(((((p*(w*1.2))/I.Horsepower)/8-(n/d)*(d/15))*((8/(I.T_BoostLag/g))*2))/d)*15 elseif n>=1 then n=n+(((((p*(w*1.2))/I.Horsepower)/8-(n/d)*(d/15))*((8/(I.T2_BoostLag/g))*2))/d)*15 end if n<.05 then n=.05 elseif n>2 then n=2 end else n=0 end if Z~=0 then if w>A6 then A6=math.min(w,A6+I.S_Sensitivity*g)elseif w<A6 then A6=math.max(w,A6-I.S_Sensitivity*g)end u=(q/I.Redline)*(.5+1.5*A6)else u=0 end else n=0 u=0 end if I.Engine then local l=Z6[i+2][math.floor(math.min(I.Redline,math.max(0,q))/100)]F=l.Horsepower+l.HpSlope*(((q-math.floor(q/100))/100)%1)C=l.Torque+l.TqSlope*(((q-math.floor(q/100))/100)%1)if L~=0 then local l=u6[i+2][math.floor(math.min(I.Redline,math.max(0,q))/100)]t=(l.Horsepower+l.HpSlope*(((q-math.floor(q/100))/100)%1))*(n/2)s=(l.Torque+l.TqSlope*(((q-math.floor(q/100))/100)%1))*(n/2)else t,s=0,0 end if Z~=0 then local l=F6[i+2][math.floor(math.min(I.Redline,math.max(0,q))/100)]J=(l.Horsepower+l.HpSlope*(((q-math.floor(q/100))/100)%1))*(u/2)y=(l.Torque+l.TqSlope*(((q-math.floor(q/100))/100)%1))*(u/2)else J,y=0,0 end l6=t+J g6=s+y else F,C=0,0 t,s=0,0 J,y=0,0 l6,g6=0,0 end if I.Electric and i~=0 then local l=x6[i+2][math.floor(math.min(I.Redline,math.max(100,q))/100)]T=l.Horsepower+l.HpSlope*(((q-math.floor(q/100))/100)%1)A=l.Torque+l.TqSlope*(((q-math.floor(q/100))/100)%1)else T,A=0,0 end p=(F+l6)+T D=(C+g6)+A local x=N.DriveSeat.CFrame.lookVector.y*H6 if i==-1 then x=-x end D=D*math.max(1,1+x)local N6=0 local I6=0 local Y6=0 local M6=0 for l,g in pairs(N.Wheels:GetChildren())do if g.Name=="\070\076"or g.Name=="\070\082"or g.Name=="\070"then N6=N6+g.RotVelocity.Magnitude I6=I6+1 elseif g.Name=="\082\076"or g.Name=="\082\082"or g.Name=="\082"then Y6=Y6+g.RotVelocity.Magnitude M6=M6+1 end end N6=N6/I6 Y6=Y6/M6 local R6=(N6+Y6)/2 for l,g in pairs(N.Wheels:GetChildren())do local c=(CFrame.new(g.Position-(g.Arm.CFrame*B6).lookVector,g.Position)*O6).lookVector local U=1 local r=1 local M=1 local R=1 local z=1 local G=1 if g.Name=="\070\076"or g.Name=="\082\076"then U=-1 end if I.DifferentialType=="\079\108\100"then if g.Name=="\070\076"or g.Name=="\070\082"then r=math.max(0,math.min(1,1+(((g.RotVelocity.Magnitude-N6)/N6)/(math.max(I.FDiffSlipThres,1)/100))*((I.FDiffLockThres-50)/50)))if I.Config=="\065\087\068"then r=math.max(0,math.min(1,r*(1+(((N6-R6)/R6)/(math.max(I.CDiffSlipThres,1)/100))*((I.CDiffLockThres-50)/50))))end elseif g.Name=="\082\076"or g.Name=="\082\082"then r=math.max(0,math.min(1,1+(((g.RotVelocity.Magnitude-Y6)/Y6)/(math.max(I.RDiffSlipThres,1)/100))*((I.RDiffLockThres-50)/50)))if I.Config=="\065\087\068"then r=math.max(0,math.min(1,r*(1+(((Y6-R6)/R6)/(math.max(I.CDiffSlipThres,1)/100))*((I.CDiffLockThres-50)/50))))end end else if g.Name=="\070\082"then local l=(g.RotVelocity.Magnitude/N.Wheels.FL.RotVelocity.Magnitude-1)*(I.FDiffPreload/10)z=math.ceil(math.max(0,math.min(2,1-(((I.FDiffPower/100)*l)*f+((I.FDiffCoast/100)*l)*(1-f))))*100)/100 G=2-z elseif g.Name=="\070\076"then local l=(g.RotVelocity.Magnitude/N.Wheels.FR.RotVelocity.Magnitude-1)*(I.FDiffPreload/10)G=math.ceil(math.max(0,math.min(2,1-(((I.FDiffPower/100)*l)*f+((I.FDiffCoast/100)*l)*(1-f))))*100)/100 z=2-G elseif g.Name=="\082\082"then local l=(g.RotVelocity.Magnitude/N.Wheels.RL.RotVelocity.Magnitude-1)*(I.RDiffPreload/10)M=math.ceil(math.max(0,math.min(2,1-(((I.RDiffPower/100)*l)*f+((I.RDiffCoast/100)*l)*(1-f))))*100)/100 R=2-M elseif g.Name=="\082\076"then local l=(g.RotVelocity.Magnitude/N.Wheels.RR.RotVelocity.Magnitude-1)*(I.RDiffPreload/10)R=math.ceil(math.max(0,math.min(2,1-(((I.RDiffPower/100)*l)*f+((I.RDiffCoast/100)*l)*(1-f))))*100)/100 M=2-R end end m6=false r6=false local Q=1 if not script.Parent.IsOn.Value then Q=0 end local e=f local P=X local W=1 if k then W=0 end local H=D local B=1 if U6 and(P>0 and math.abs(g.RotVelocity.Magnitude*(g.Size.x/2)-g.Velocity.Magnitude)-I.ABSThreshold>0)then B=0 end r6=B<1 local O=0 if o6==true then O=1 else O=0 end local j=false for l,c in pairs(e6)do if c==g then j=true end end if j then if I.Config=="\065\087\068"then local l=(I.TorqueVector+1)/2 if string.find(g.Name,"\070")then H=H*(1-l)elseif string.find(g.Name,"\082")then H=H*l end end T6=1 if h6 and e>0 then T6=1-math.min(math.max(0,math.abs(g.RotVelocity.Magnitude*(g.Size.x/2)-g.Velocity.Magnitude)-I.TCSThreshold)/I.TCSGradient,1)*(1-I.TCSLimit/100)end if T6<1 then K6=T6 m6=true end local l=1 if i==-1 then l=-1 end if I.ClutchKick and(N.DriveSeat.Velocity.Magnitude<I.KickSpeedThreshold and(q>I.Redline-I.KickRPMThreshold and g["\035\066\086"].MotorMaxTorque<1))then H=H*I.KickMult end local c=(((((H/1.5)*(60/workspace:GetRealPhysicsFPS()))*e)*T6)*Q)*W if g.Name=="\082\082"then g["\035\065\086"].MotorMaxTorque=(c*M)*r elseif g.Name=="\082\076"then g["\035\065\086"].MotorMaxTorque=(c*R)*r elseif g.Name=="\070\082"then g["\035\065\086"].MotorMaxTorque=(c*z)*r elseif g.Name=="\070\076"then g["\035\065\086"].MotorMaxTorque=(c*G)*r else g["\035\065\086"].MotorMaxTorque=c*r end g["\035\065\086"].AngularVelocity=a*l if string.find(g.Name,"\070")then g["\035\066\086"].MotorMaxTorque=(((Y*(60/workspace:GetRealPhysicsFPS()))*P)*B+K*((1-e)*(q/I.Redline)))+h*O else g["\035\066\086"].MotorMaxTorque=(((o*(60/workspace:GetRealPhysicsFPS()))*P)*B+K*((1-e)*(q/I.Redline)))+m*O end else g["\035\065\086"].MotorMaxTorque=0 g["\035\065\086"].AngularVelocity=0 if string.find(g.Name,"\070")then g["\035\066\086"].MotorMaxTorque=((Y*(60/workspace:GetRealPhysicsFPS()))*P)*B+h*O else g["\035\066\086"].MotorMaxTorque=((o*(60/workspace:GetRealPhysicsFPS()))*P)*B+m*O end end end end function Flip()if(N.DriveSeat.CFrame*CFrame.Angles(math.pi/2,0,0)).lookVector.y>.1 or R6 then M6=tick()else if tick()-M6>=3 then R6=true local l=N.DriveSeat.Flip l.maxTorque=Vector3.new(10000,0,10000)l.P=3000 l.D=500 wait(1)l.maxTorque=Vector3.new(0,0,0)l.P=0 l.D=0 R6=false end end end local J6=require(N["\065-\067\104\097\115\115\105\115 \084\117\110\101"].README)print("\078\111\118\101\110\097\058 \065\067\054\067 \076\111\097\100\101\100 - \086\101\114\115\105\111\110 "..(J6 ..("\044 \085\112\100\097\116\101 "..script.Parent.Version.Value)))game["\082\117\110 \083\101\114\118\105\099\101"].Heartbeat:connect(function(l)z=script.Parent.IsOn.Value z6=script.Parent.ControlsOpen.Value Inputs(l)Steering(l)Gear()Engine(l)script.Parent.Values.Gear.Value=i script.Parent.Values.RPM.Value=q script.Parent.Values.Boost.Value=(n/2)*v+(u/2)*x script.Parent.Values.BoostTurbo.Value=(n/2)*v script.Parent.Values.BoostSuper.Value=(u/2)*x script.Parent.Values.HpNatural.Value=F script.Parent.Values.HpElectric.Value=T script.Parent.Values.HpTurbo.Value=t script.Parent.Values.HpSuper.Value=J script.Parent.Values.HpBoosted.Value=l6 script.Parent.Values.Horsepower.Value=p script.Parent.Values.TqNatural.Value=(C/I.Ratios[i+2])/X6 script.Parent.Values.TqElectric.Value=(A/I.Ratios[i+2])/X6 script.Parent.Values.TqTurbo.Value=(s/I.Ratios[i+2])/X6 script.Parent.Values.TqSuper.Value=(y/I.Ratios[i+2])/X6 script.Parent.Values.TqBoosted.Value=script.Parent.Values.TqTurbo.Value+script.Parent.Values.TqSuper.Value script.Parent.Values.Torque.Value=(script.Parent.Values.TqNatural.Value+script.Parent.Values.TqElectric.Value)+script.Parent.Values.TqBoosted.Value script.Parent.Values.TransmissionMode.Value=c6 script.Parent.Values.Throttle.Value=f script.Parent.Values.Brake.Value=X if script.Parent.Values.AutoClutch.Value then script.Parent.Values.Clutch.Value=O end script.Parent.Values.SteerC.Value=Q script.Parent.Values.SteerT.Value=G script.Parent.Values.PBrake.Value=o6 script.Parent.Values.TCS.Value=h6 script.Parent.Values.TCSActive.Value=m6 script.Parent.Values.TCSAmt.Value=1-K6 script.Parent.Values.ABS.Value=U6 script.Parent.Values.ABSActive.Value=r6 script.Parent.Values.MouseSteerOn.Value=N6 script.Parent.Values.Velocity.Value=N.DriveSeat.Velocity end)while wait(.0667)do if c6=="\065\117\116\111"then Auto()end if I.AutoFlip then Flip()end end
--
	
	--[[START]]
	
	script.Parent:WaitForChild("Car")
	script.Parent:WaitForChild("IsOn")
	script.Parent:WaitForChild("ControlsOpen")
	script.Parent:WaitForChild("Values")
	
	--[[Dependencies]]
	
	local player = game.Players.LocalPlayer
	local mouse = player:GetMouse()
	local UserInputService = game:GetService("UserInputService")
	local car = script.Parent.Car.Value
	local _Tune = require(car["A-Chassis Tune"])
	
	--[[Output Scaling Factor]]
	
	local FBrakeForce = _Tune.BrakeForce*_Tune.BrakeBias--luaint edit
	local RBrakeForce = _Tune.BrakeForce*(1-_Tune.BrakeBias)--luaint edit
	local PBrakeForceF = _Tune.PBrakeForce*_Tune.PBrakeBias
	local PBrakeForceR = _Tune.PBrakeForce*(1-_Tune.PBrakeBias)
	local EBrakeForce = _Tune.EBrakeForce
	local SteerOuter  = _Tune.SteerOuter--luaint edit
	local SteerInner  = _Tune.SteerInner--luaint edit
	local RSteerOuter = _Tune.RSteerOuter
	local RSteerInner = _Tune.RSteerInner
	
	if not workspace:PGSIsEnabled() then
		error("PGS is not enabled: A-Chassis will not work.")
	end
	
	--[[Status Vars]]
	
	local _IsOn = _Tune.AutoStart
	if _Tune.AutoStart and (_Tune.Engine or _Tune.Electric) then script.Parent.IsOn.Value=true end
	
	local _GSteerT=0
	local _GSteerC=0
	local _GThrot=0
	local _InThrot=0
	local _IThrot=_Tune.IdleThrottle/100
	local _GBrake=0
	local _InBrake=0
	local _IBrake=0
	
	local _ClPressing = false
	local _PlayerClutch = false
	local _Clutch = 0
	local _ClutchKick = 0
	local _ClutchModulate = 0
	local _RPM = 0
	local _HP = 0
	local _OutTorque = 0
	local _CGear = 0
	local _PGear = _CGear
	local _ShiftUp = false
	local _ShiftDn = false
	local _Shifting = false
	local _spLimit = 0
	
	local _Boost = 0
	local _TCount = 0
	local _TPsi = 0
	local _TBoost = 0
	local _SCount = 0
	local _SPsi = 0
	local _SBoost = 0
	local _NH = 0
	local _NT = 0
	local _EH = 0
	local _ET = 0
	local _TH = 0
	local _TT = 0
	local _SH = 0
	local _ST = 0
	local _BH = 0
	local _BT = 0
	
	local _TMode = _Tune.TransModes[1]
	
	local _MSteer = false
	local _SteerL = false
	local _SteerR = false
	local _PBrake = false
	local _TCS = _Tune.TCSEnabled
	local _TCSActive = false
	local _TCSAmt = 0
	local _ABS = _Tune.ABSEnabled
	local _ABSActive = false
	
	local FlipWait=tick()
	local FlipDB=false
	
	local _InControls = false
	
	
	--[[Shutdown]]
	
	car.DriveSeat.ChildRemoved:connect(function(child) if child.Name=="SeatWeld" and child:IsA("Weld") then script.Parent:Destroy() end end)
	
	--[[Controls]]
	
	local _CTRL = _Tune.Controls
	local Controls = Instance.new("Folder",script.Parent)
	Controls.Name = "Controls"
	for i,v in pairs(_CTRL) do
		local a=Instance.new("StringValue",Controls)
		a.Name=i
		a.Value=v.Name
		a.Changed:connect(function()
			if i=="MouseThrottle" or i=="MouseBrake" then
				if a.Value == "MouseButton1" or a.Value == "MouseButton2" then
					_CTRL[i]=Enum.UserInputType[a.Value]
				else
					_CTRL[i]=Enum.KeyCode[a.Value]
				end
			else
				_CTRL[i]=Enum.KeyCode[a.Value]
			end
		end)
	end
	
	--Deadzone Adjust
	local _PPH = _Tune.Peripherals
		for i,v in pairs(_PPH) do
		local a = Instance.new("IntValue",Controls)
		a.Name = i
		a.Value = v
		a.Changed:connect(function() 
			a.Value=math.min(100,math.max(0,a.Value))
			_PPH[i] = a.Value
		end)
	end
	
	--Input Handler
	function DealWithInput(input,IsRobloxFunction)
		if (UserInputService:GetFocusedTextBox()==nil) and not _InControls then --Ignore when UI Focus
			--Shift Down [Manual Transmission]
			if (input.KeyCode ==_CTRL["ContlrShiftDown"] or (_MSteer and input.KeyCode==_CTRL["MouseShiftDown"]) or ((not _MSteer) and input.KeyCode==_CTRL["ShiftDown"])) and ((_IsOn and ((_TMode=="Auto" and _CGear<=1) and _Tune.AutoShiftVers == "New") or _TMode=="Semi") or _TMode=="Manual") and input.UserInputState == Enum.UserInputState.Begin then
				if not _ShiftDn then _ShiftDn = true end
				
			--Shift Up [Manual Transmission]
			elseif (input.KeyCode ==_CTRL["ContlrShiftUp"] or (_MSteer and input.KeyCode==_CTRL["MouseShiftUp"]) or ((not _MSteer) and input.KeyCode==_CTRL["ShiftUp"])) and ((_IsOn and ((_TMode=="Auto" and _CGear<1) and _Tune.AutoShiftVers == "New") or _TMode=="Semi") or _TMode=="Manual") and input.UserInputState == Enum.UserInputState.Begin then
				if not _ShiftUp then _ShiftUp = true end
				
			--Toggle Clutch
			elseif (input.KeyCode ==_CTRL["ContlrClutch"] or (_MSteer and input.KeyCode==_CTRL["MouseClutch"]) or ((not _MSteer) and input.KeyCode==_CTRL["Clutch"])) and _TMode=="Manual" then
				if input.UserInputState == Enum.UserInputState.Begin then
					_ClPressing = true
					_PlayerClutch = true
				elseif input.UserInputState == Enum.UserInputState.End then
					_ClPressing = false
					_PlayerClutch = false
				end
				
			--Toggle PBrake
			elseif input.KeyCode ==_CTRL["ContlrPBrake"] or (_MSteer and input.KeyCode==_CTRL["MousePBrake"]) or ((not _MSteer) and input.KeyCode==_CTRL["PBrake"]) then
				if input.UserInputState == Enum.UserInputState.Begin then
					_PBrake = not _PBrake
				elseif input.UserInputState == Enum.UserInputState.End then
					if car.DriveSeat.Velocity.Magnitude>5 then _PBrake = false end
				end
				
			--Toggle Transmission Mode
			elseif (input.KeyCode == _CTRL["ContlrToggleTMode"] or input.KeyCode==_CTRL["ToggleTransMode"]) and input.UserInputState == Enum.UserInputState.Begin then
				local n=1
				for i,v in pairs(_Tune.TransModes) do
					if v==_TMode then n=i break end
				end
				n=n+1
				if n>#_Tune.TransModes then n=1 end
				_TMode = _Tune.TransModes[n]
				
			--Throttle
			elseif ((not _MSteer) and (input.KeyCode==_CTRL["Throttle"] or input.KeyCode == _CTRL["Throttle2"])) or ((((_CTRL["MouseThrottle"]==Enum.UserInputType.MouseButton1 or _CTRL["MouseThrottle"]==Enum.UserInputType.MouseButton2) and input.UserInputType == _CTRL["MouseThrottle"]) or input.KeyCode == _CTRL["MouseThrottle"])and _MSteer) then
				if input.UserInputState == Enum.UserInputState.Begin and _IsOn then
					_IThrot = 1
				else
					_IThrot = _Tune.IdleThrottle/100
				end
				
			--Brake
			elseif ((not _MSteer) and (input.KeyCode==_CTRL["Brake"] or input.KeyCode == _CTRL["Brake2"])) or ((((_CTRL["MouseBrake"]==Enum.UserInputType.MouseButton1 or _CTRL["MouseBrake"]==Enum.UserInputType.MouseButton2) and input.UserInputType == _CTRL["MouseBrake"]) or input.KeyCode == _CTRL["MouseBrake"])and _MSteer) then
				if input.UserInputState == Enum.UserInputState.Begin then
					_IBrake = 1
				else
					_IBrake = 0
				end
				
			--Steer Left
			elseif (not _MSteer) and (input.KeyCode==_CTRL["SteerLeft"] or input.KeyCode == _CTRL["SteerLeft2"]) then
				if input.UserInputState == Enum.UserInputState.Begin then
					_GSteerT = -1
					_SteerL = true
				else
					if _SteerR then
						_GSteerT = 1
					else
						_GSteerT = 0
					end
					_SteerL = false
				end
				
			--Steer Right
			elseif (not _MSteer) and (input.KeyCode==_CTRL["SteerRight"] or input.KeyCode == _CTRL["SteerRight2"]) then
				if input.UserInputState == Enum.UserInputState.Begin then
					_GSteerT = 1
					_SteerR = true
				else
					if _SteerL then
						_GSteerT = -1
					else
						_GSteerT = 0
					end
					_SteerR = false
				end
				
			--Toggle Mouse Controls
			elseif input.KeyCode ==_CTRL["ToggleMouseDrive"] then
				if input.UserInputState == Enum.UserInputState.End then
					_MSteer = not _MSteer
					_IThrot = _Tune.IdleThrottle/100
					_IBrake = 0
					_GSteerT = 0
				end
				
			--Toggle TCS
			elseif _Tune.TCSEnabled and _IsOn and input.KeyCode == _CTRL["ToggleTCS"] or input.KeyCode == _CTRL["ContlrToggleTCS"] then
				if input.UserInputState == Enum.UserInputState.End then _TCS = not _TCS end
			
			--Toggle ABS
			elseif _Tune.ABSEnabled and _IsOn and input.KeyCode == _CTRL["ToggleABS"] or input.KeyCode == _CTRL["ContlrToggleABS"] then
				if input.UserInputState == Enum.UserInputState.End then _ABS = not _ABS end
				
			end
			
			--Variable Controls
			if input.UserInputType.Name:find("Gamepad") then
				--Gamepad Steering
				if input.KeyCode == _CTRL["ContlrSteer"] then
					if input.Position.X>= 0 then
						local cDZone = math.min(.99,_Tune.Peripherals.ControlRDZone/100)
						if math.abs(input.Position.X)>cDZone then
							_GSteerT = (input.Position.X-cDZone)/(1-cDZone)
						else
							_GSteerT = 0
						end
					else
						local cDZone = math.min(.99,_Tune.Peripherals.ControlLDZone/100)
						if math.abs(input.Position.X)>cDZone then
							_GSteerT = (input.Position.X+cDZone)/(1-cDZone)
						else
							_GSteerT = 0
						end
					end
					
				--Gamepad Throttle
				elseif input.KeyCode == _CTRL["ContlrThrottle"] then
					if _IsOn then
						_IThrot = math.max(_Tune.IdleThrottle/100,input.Position.Z)
					else
						_IThrot = _Tune.IdleThrottle/100
					end
					
				--Gamepad Brake
				elseif input.KeyCode == _CTRL["ContlrBrake"] then
					_IBrake = input.Position.Z
				end
			end
		else
			_IThrot = _Tune.IdleThrottle/100
			_GSteerT = 0
			_IBrake = 0
		end
	end
	UserInputService.InputBegan:connect(DealWithInput)
	UserInputService.InputChanged:connect(DealWithInput)
	UserInputService.InputEnded:connect(DealWithInput)
	
	
	
	--[[Drivetrain Initialize]]
	
	local Drive={}
	
	--Power Front Wheels
		if _Tune.Config == "FWD" or _Tune.Config == "AWD" then for i,v in pairs(car.Wheels:GetChildren()) do if v.Name=="FL" or v.Name=="FR" or v.Name=="F" then table.insert(Drive,v) end end end
	
	--Power Rear Wheels
		if _Tune.Config == "RWD" or _Tune.Config == "AWD" then for i,v in pairs(car.Wheels:GetChildren()) do if v.Name=="RL" or v.Name=="RR" or v.Name=="R" then table.insert(Drive,v) end end end
	
	--Determine Wheel Size
	local wDia = 0 for i,v in pairs(Drive) do if v.Size.x>wDia then wDia = v.Size.x end end
	
	--Pre-Toggled PBrake
	for i,v in pairs(car.Wheels:GetChildren()) do if (math.abs(v["#BV"].MotorMaxTorque-PBrakeForceF)<1) or (math.abs(v["#BV"].MotorMaxTorque-PBrakeForceR)<1) then _PBrake=true end end
	
	--[[Throttle and Brake Input Smoothening]]
	
	function Inputs(dt)
		local deltaTime = (60/(1/dt))
		if _InThrot <= _IThrot then
			_InThrot = math.min(_IThrot,_InThrot+(_Tune.ThrotAccel*deltaTime))
		else
			_InThrot = math.max(_IThrot,_InThrot-(_Tune.ThrotDecel*deltaTime))
		end
		if _InBrake <= _IBrake then
			_InBrake = math.min(_IBrake,_InBrake+(_Tune.BrakeAccel*deltaTime))
		else
			_InBrake = math.max(_IBrake,_InBrake-(_Tune.BrakeDecel*deltaTime))
		end
	end
	
	--[[Steering]]
	
	if _Tune.SteeringType == 'New' then--luaint edit
		SteerOuter = (_Tune.LockToLock*180)/_Tune.SteerRatio
		SteerInner = math.min(SteerOuter-(SteerOuter*(1-_Tune.Ackerman)),SteerOuter*1.2)
	end
	
	function Steering(dt)
		local deltaTime = (60/(1/dt))
		--Mouse Steer
		if _MSteer then
			local msWidth = math.max(1,mouse.ViewSizeX*_Tune.Peripherals.MSteerWidth/200)
			local mdZone = _Tune.Peripherals.MSteerDZone/100
			local mST = ((mouse.X-mouse.ViewSizeX/2)/msWidth)
			if math.abs(mST)<=mdZone then
				_GSteerT = 0
			else
				_GSteerT = (math.max(math.min((math.abs(mST)-mdZone),(1-mdZone)),0)/(1-mdZone))^_Tune.MSteerExp * (mST / math.abs(mST))
			end
		end
		
		--Interpolate Steering
		if _GSteerC < _GSteerT then
			if _GSteerC<0 then
				_GSteerC = math.min(_GSteerT,_GSteerC+(_Tune.ReturnSpeed*deltaTime))
			else
				_GSteerC = math.min(_GSteerT,_GSteerC+(_Tune.SteerSpeed*deltaTime))
			end
		else
			if _GSteerC>0 then
				_GSteerC = math.max(_GSteerT,_GSteerC-(_Tune.ReturnSpeed*deltaTime))
			else
				_GSteerC = math.max(_GSteerT,_GSteerC-(_Tune.SteerSpeed*deltaTime))
			end
		end
		
		--Steer Decay Multiplier
		local sDecay = (1-math.min(car.DriveSeat.Velocity.Magnitude/_Tune.SteerDecay,1-(_Tune.MinSteer/100)))
		local rsDecay = (1-math.min(car.DriveSeat.Velocity.Magnitude/_Tune.RSteerDecay,1-(_Tune.MinSteer/100)))
		
		--Apply Steering
		for i,v in pairs(car.Wheels:GetChildren()) do
			if v.Name=="F" then
				v.Arm.Steer.CFrame=car.Wheels.F.Base.CFrame*CFrame.Angles(0,-math.rad(_GSteerC*_Tune.SteerInner*sDecay),0)
			elseif v.Name=="FL" then
				if _GSteerC>= 0 then
					v.Arm.Steer.CFrame=car.Wheels.FL.Base.CFrame*CFrame.Angles(0,-math.rad(_GSteerC*SteerOuter*sDecay),0)--luaint edit
				else
					v.Arm.Steer.CFrame=car.Wheels.FL.Base.CFrame*CFrame.Angles(0,-math.rad(_GSteerC*SteerInner*sDecay),0)--luaint edit
				end	
			elseif v.Name=="FR" then
				if _GSteerC>= 0 then
					v.Arm.Steer.CFrame=car.Wheels.FR.Base.CFrame*CFrame.Angles(0,-math.rad(_GSteerC*SteerInner*sDecay),0)--luaint edit
				else
					v.Arm.Steer.CFrame=car.Wheels.FR.Base.CFrame*CFrame.Angles(0,-math.rad(_GSteerC*SteerOuter*sDecay),0)--luaint edit
			end
			elseif v.Name=='R' then
				if _Tune.FWSteer=='None' then
				elseif _Tune.FWSteer=='Static' then
					v.Arm.Steer.CFrame=car.Wheels.R.Base.CFrame*CFrame.Angles(0,math.rad(_GSteerC*RSteerInner*rsDecay*math.max(0,1-(car.DriveSeat.Velocity.Magnitude/_Tune.RSteerSpeed))),0)--luaint edit
				elseif _Tune.FWSteer=='Speed' then
					v.Arm.Steer.CFrame=car.Wheels.R.Base.CFrame*CFrame.Angles(0,-math.rad(_GSteerC*RSteerInner*rsDecay*math.min(1,(car.DriveSeat.Velocity.Magnitude/_Tune.RSteerSpeed))),0)--luaint edit
				elseif _Tune.FWSteer=='Both' then
					v.Arm.Steer.CFrame=car.Wheels.R.Base.CFrame*CFrame.Angles(0,math.rad(_GSteerC*RSteerInner*rsDecay*math.max(-1,1-(car.DriveSeat.Velocity.Magnitude/_Tune.RSteerSpeed))),0)--luaint edit
				end
			elseif v.Name=='RL' then
				if _Tune.FWSteer=='None' then
				elseif _Tune.FWSteer=='Static' then
					if _GSteerC>= 0 then
						v.Arm.Steer.CFrame=car.Wheels.RL.Base.CFrame*CFrame.Angles(0,math.rad(_GSteerC*RSteerOuter*rsDecay*math.max(0,1-(car.DriveSeat.Velocity.Magnitude/_Tune.RSteerSpeed))),0)--luaint edit
					else
						v.Arm.Steer.CFrame=car.Wheels.RL.Base.CFrame*CFrame.Angles(0,math.rad(_GSteerC*RSteerInner*rsDecay*math.max(0,1-(car.DriveSeat.Velocity.Magnitude/_Tune.RSteerSpeed))),0)--luaint edit
					end
				elseif _Tune.FWSteer=='Speed' then
					if _GSteerC>= 0 then
						v.Arm.Steer.CFrame=car.Wheels.RL.Base.CFrame*CFrame.Angles(0,-math.rad(_GSteerC*RSteerOuter*rsDecay*math.min(1,(car.DriveSeat.Velocity.Magnitude/_Tune.RSteerSpeed))),0)--luaint edit
					else
						v.Arm.Steer.CFrame=car.Wheels.RL.Base.CFrame*CFrame.Angles(0,-math.rad(_GSteerC*RSteerInner*rsDecay*math.min(1,(car.DriveSeat.Velocity.Magnitude/_Tune.RSteerSpeed))),0)--luaint edit
					end
				elseif _Tune.FWSteer=='Both' then
					if _GSteerC>= 0 then
						v.Arm.Steer.CFrame=car.Wheels.RL.Base.CFrame*CFrame.Angles(0,math.rad(_GSteerC*RSteerOuter*rsDecay*math.max(-1,1-(car.DriveSeat.Velocity.Magnitude/_Tune.RSteerSpeed))),0)--luaint edit
					else
						v.Arm.Steer.CFrame=car.Wheels.RL.Base.CFrame*CFrame.Angles(0,math.rad(_GSteerC*RSteerInner*rsDecay*math.max(-1,1-(car.DriveSeat.Velocity.Magnitude/_Tune.RSteerSpeed))),0)--luaint edit
					end
				end
			elseif v.Name=='RR' then
				if _Tune.FWSteer=='None' then
				elseif _Tune.FWSteer=='Static' then
					if _GSteerC>= 0 then
						v.Arm.Steer.CFrame=car.Wheels.RR.Base.CFrame*CFrame.Angles(0,math.rad(_GSteerC*RSteerInner*rsDecay*math.max(0,1-(car.DriveSeat.Velocity.Magnitude/_Tune.RSteerSpeed))),0)--luaint edit
					else
						v.Arm.Steer.CFrame=car.Wheels.RR.Base.CFrame*CFrame.Angles(0,math.rad(_GSteerC*RSteerOuter*rsDecay*math.max(0,1-(car.DriveSeat.Velocity.Magnitude/_Tune.RSteerSpeed))),0)--luaint edit
					end
				elseif _Tune.FWSteer=='Speed' then
					if _GSteerC>= 0 then
						v.Arm.Steer.CFrame=car.Wheels.RR.Base.CFrame*CFrame.Angles(0,-math.rad(_GSteerC*RSteerInner*rsDecay*math.min(1,(car.DriveSeat.Velocity.Magnitude/_Tune.RSteerSpeed))),0)--luaint edit
					else
						v.Arm.Steer.CFrame=car.Wheels.RR.Base.CFrame*CFrame.Angles(0,-math.rad(_GSteerC*RSteerOuter*rsDecay*math.min(1,(car.DriveSeat.Velocity.Magnitude/_Tune.RSteerSpeed))),0)--luaint edit
					end
				elseif _Tune.FWSteer=='Both' then
					if _GSteerC>= 0 then
						v.Arm.Steer.CFrame=car.Wheels.RR.Base.CFrame*CFrame.Angles(0,math.rad(_GSteerC*RSteerInner*rsDecay*math.max(-1,1-(car.DriveSeat.Velocity.Magnitude/_Tune.RSteerSpeed))),0)--luaint edit
					else
						v.Arm.Steer.CFrame=car.Wheels.RR.Base.CFrame*CFrame.Angles(0,math.rad(_GSteerC*RSteerOuter*rsDecay*math.max(-1,1-(car.DriveSeat.Velocity.Magnitude/_Tune.RSteerSpeed))),0)--luaint edit
					end
				end
			end
		end
	end
	
	
	
	--[[Engine]]
	
	local fFD = _Tune.FinalDrive*_Tune.FDMult
	local fFDr = fFD*30/math.pi
	local cGrav = workspace.Gravity*_Tune.InclineComp/32.2
	local wDRatio = wDia*math.pi/60
	local cfWRot = CFrame.Angles(math.pi/2,-math.pi/2,0)
	local cfYRot = CFrame.Angles(0,math.pi,0)
	
	--Electric Only Setup
	
	if not _Tune.Engine and _Tune.Electric then 
		_Tune.Redline = _Tune.E_Redline 
		_Tune.PeakRPM = _Tune.E_Trans2 
		_Tune.Turbochargers = 0
		_Tune.Superchargers = 0
		_Tune.Clutch = false 
		_Tune.IdleRPM = 0 
		_Tune.ClutchType = "Clutch" 
		_Tune.AutoShiftType = "DCT" 
		_Tune.ShiftUpTime = 0.1 
		_Tune.ShiftDnTime = 0.1 
	end
	
	--Aspiration Setup
	
	_TCount = _Tune.Turbochargers
	_TPsi = _Tune.T_Boost*_Tune.Turbochargers
	
	_SCount = _Tune.Superchargers
	_SPsi = _Tune.S_Boost*_Tune.Superchargers
	
	--Engine Curve
	
	local HP=_Tune.Horsepower/100
	local HP_T=((_Tune.Horsepower*((_TPsi)*(_Tune.CompressionRatio/10))/7.5)/2)/100
	local HP_S=((_Tune.Horsepower*((_SPsi)*(_Tune.CompressionRatio/10))/7.5)/2)/100
	
	local Peak=_Tune.PeakRPM/1000
	local Sharpness=_Tune.PeakSharpness
	local CurveMult=_Tune.CurveMult
	local EQ=_Tune.EqPoint/1000
	
	function CurveN(RPM)
		RPM=RPM/1000
		return ((-(RPM-Peak)^2)*math.min(HP/(Peak^2),CurveMult^(Peak/HP))+HP)*(RPM-((RPM^Sharpness)/(Sharpness*Peak^(Sharpness-1))))
	end
	local PeakCurveN = CurveN(_Tune.PeakRPM)
	
	function CurveT(RPM)
		RPM=RPM/1000
		return ((-(RPM-Peak)^2)*math.min(HP_T/(Peak^2),CurveMult^(Peak/HP_T))+HP_T)*(RPM-((RPM^Sharpness)/(Sharpness*Peak^(Sharpness-1))))
	end
	local PeakCurveT = CurveT(_Tune.PeakRPM)
	
	function CurveS(RPM)
		RPM=RPM/1000
		return ((-(RPM-Peak)^2)*math.min(HP_S/(Peak^2),CurveMult^(Peak/HP_S))+HP_S)*(RPM-((RPM^Sharpness)/(Sharpness*Peak^(Sharpness-1))))
	end
	local PeakCurveS = CurveS(_Tune.PeakRPM)
	
	--Electric Curve
	
	local EHP=_Tune.E_Horsepower/100
	local ETQ=_Tune.E_Torque/100
	local ETrans1=_Tune.E_Trans1/1000
	local ETrans2=_Tune.E_Trans2/1000
	local ELimit=_Tune.E_Redline/1000 
	
	function elecHP(RPM)
		RPM=RPM/1000
		local retVal=1e-9
		if RPM<=ETrans1 then
			retVal=((((RPM/ETrans1)^_Tune.EH_FrontMult)/(1/EHP))*(RPM/ETrans1))+((((RPM/ETrans1)^(1/_Tune.EH_FrontMult))/(1/EHP))*(1-(RPM/ETrans1)))
		elseif ETrans1<RPM and RPM<ETrans2 then
			retVal=EHP
		elseif ETrans2<=RPM then
			retVal=EHP-(((RPM-ETrans2)/(ELimit-ETrans2))^_Tune.EH_EndMult)/(1/(EHP*(_Tune.EH_EndPercent/100)))
		else
			error( "\n\t [AC6C]: Drive initialization failed!"
			.."\n\t    An unknown error occured when initializing electric horsepower."
			.."\n\t    Please send a screenshot of this message to Avxnturador."
			.."\n\t    R: "..RPM..", T1: "..ETrans1", T2: "..ETrans2", L: "..ELimit".")
		end
		return retVal
	end
	
	function elecTQ(RPM)
		RPM=RPM/1000
		local retVal=1e-9
		if RPM<ETrans1 then
			retVal=ETQ
		elseif ETrans1<=RPM then
			retVal=ETQ-(((RPM-ETrans1)/(ELimit-ETrans1))^_Tune.ET_EndMult)/(1/(ETQ*(_Tune.ET_EndPercent/100)))
		else
			error( "\n\t [AC6C]: Drive initialization failed!"
			.."\n\t    An unknown error occured when initializing electric torque."
			.."\n\t    Please send a screenshot of this message to Avxnturador."
			.."\n\t    R: "..RPM..", T1: "..ETrans1", T2: "..ETrans2", L: "..ELimit".")
		end
		return retVal
	end
	
	--Plot Current Naturally Aspirated Engine Horsepower
	function GetNCurve(x,gear)
		local hp=(math.max(CurveN(x)/(PeakCurveN/HP),0))*100
		return hp,((hp*(EQ/x))*_Tune.Ratios[gear+2]*fFD)*1000
	end
	
	--Plot Current Electric Horsepower
	function GetECurve(x,gear)
		local hp=(math.max(elecHP(x),0))*100
		local tq=(math.max(elecTQ(x),0))*100
		if gear~=0 then
			return hp,math.max(tq*_Tune.Ratios[gear+2]*fFD,0)
		else
			return 0,0
		end
	end
	
	--Plot Current Turbocharger Horsepower 
	function GetTCurve(x,gear)
		local hp=(math.max(CurveT(x)/(PeakCurveT/HP_T),0))*100
		return hp,((hp*(EQ/x))*_Tune.Ratios[gear+2]*fFD)*1000
	end	
	
	--Plot Current Supercharger Horsepower 
	function GetSCurve(x,gear)
		local hp=(math.max(CurveS(x)/(PeakCurveS/HP_S),0))*100
		return hp,((hp*(EQ/x))*_Tune.Ratios[gear+2]*fFD)*1000
	end	
	
	
	--Output Cache	
	local NCache = {}
	local ECache = {}
	local TCache = {}
	local SCache = {}
	
	for gear,ratio in pairs(_Tune.Ratios) do
		local nhpPlot = {}
		local ehpPlot = {}
		local thpPlot = {}
		local shpPlot = {}
		for rpm = 0, math.ceil((_Tune.Redline+100)/100) do
			local ntqPlot = {}
			local etqPlot = {}
			local ttqPlot = {}
			local stqPlot = {}
			if rpm~=0 then
				if _Tune.Engine then
					ntqPlot.Horsepower,ntqPlot.Torque = GetNCurve(rpm*100,gear-2)
					if _TCount~=0 then
						ttqPlot.Horsepower,ttqPlot.Torque = GetTCurve(rpm*100,gear-2)
					else
						ttqPlot.Horsepower,ttqPlot.Torque = 0,0
					end
					if _SCount~=0 then
						stqPlot.Horsepower,stqPlot.Torque = GetSCurve(rpm*100,gear-2)
					else
						stqPlot.Horsepower,stqPlot.Torque = 0,0
					end
				else
					ntqPlot.Horsepower,ntqPlot.Torque = 0,0
					ttqPlot.Horsepower,ttqPlot.Torque = 0,0
					stqPlot.Horsepower,stqPlot.Torque = 0,0
				end
				if _Tune.Electric then
					etqPlot.Horsepower,etqPlot.Torque = GetECurve(rpm*100,gear-2)
				else
					etqPlot.Horsepower,etqPlot.Torque = 0,0
				end
			else
				ntqPlot.Horsepower,ntqPlot.Torque = 0,0
				etqPlot.Horsepower,etqPlot.Torque = 0,0
				ttqPlot.Horsepower,ttqPlot.Torque = 0,0
				stqPlot.Horsepower,stqPlot.Torque = 0,0
			end
			if _Tune.Engine then
				nhp,ntq = GetNCurve((rpm+1)*100,gear-2)
				if _TCount~=0 then
					thp,ttq = GetTCurve((rpm+1)*100,gear-2)
				else
					thp,ttq = 0,0
				end
				if _SCount~=0 then
					shp,stq = GetSCurve((rpm+1)*100,gear-2)
				else
					shp,stq = 0,0
				end
			else
				nhp,ntq = 0,0
				thp,ttq = 0,0
				shp,stq = 0,0
			end
			if _Tune.Electric then
				ehp,etq = GetECurve((rpm+1)*100,gear-2)
			else
				ehp,etq = 0,0
			end
			ntqPlot.HpSlope,ntqPlot.TqSlope = (nhp-ntqPlot.Horsepower),(ntq-ntqPlot.Torque)
			etqPlot.HpSlope,etqPlot.TqSlope = (ehp-etqPlot.Horsepower),(etq-etqPlot.Torque)
			ttqPlot.HpSlope,ttqPlot.TqSlope = (thp-ttqPlot.Horsepower),(ttq-ttqPlot.Torque)
			stqPlot.HpSlope,stqPlot.TqSlope = (shp-stqPlot.Horsepower),(stq-stqPlot.Torque)
			nhpPlot[rpm] = ntqPlot
			ehpPlot[rpm] = etqPlot
			thpPlot[rpm] = ttqPlot
			shpPlot[rpm] = stqPlot
		end
		table.insert(NCache,nhpPlot)
		table.insert(ECache,ehpPlot)
		table.insert(TCache,thpPlot)
		table.insert(SCache,shpPlot)
	end
	
	--Powertrain
	wait()
	
	--Automatic Transmission
	function Auto()
		local maxSpin=0
		for i,v in pairs(Drive) do if v.RotVelocity.Magnitude>maxSpin then maxSpin = v.RotVelocity.Magnitude end end
		if _IsOn then
			if _Tune.AutoShiftVers == "Old" and _CGear == 0 then _CGear = 1 _ClPressing = false end
			if _CGear >= 1 then
				if (_CGear==1 and _InBrake > 0 and car.DriveSeat.Velocity.Magnitude < 5) and _Tune.AutoShiftVers == "Old" then
					_CGear = -1 _ClPressing = false
				elseif car.DriveSeat.Velocity.Magnitude > 5 then
					if _Tune.AutoShiftMode == "RPM" then
						if _RPM>(_Tune.PeakRPM+_Tune.AutoUpThresh) then
							if not _ShiftUp and not _Shifting then _ShiftUp = true end
						elseif math.max(math.min(maxSpin*_Tune.Ratios[_CGear+1]*fFDr,_Tune.Redline+100),_Tune.IdleRPM)<(_Tune.PeakRPM-_Tune.AutoDownThresh) and _CGear>1 then
							if not _ShiftDn and not _Shifting then _ShiftDn = true end 
						end
					else
						if car.DriveSeat.Velocity.Magnitude > math.ceil(wDRatio*(_Tune.PeakRPM+_Tune.AutoUpThresh)/_Tune.Ratios[_CGear+2]/fFD) then
							if not _ShiftUp and not _Shifting then _ShiftUp = true end
						elseif car.DriveSeat.Velocity.Magnitude < math.ceil(wDRatio*(_Tune.PeakRPM-_Tune.AutoDownThresh)/_Tune.Ratios[_CGear+1]/fFD) and _CGear>1 then
							if not _ShiftDn and not _Shifting then _ShiftDn = true end
						end
					end
				end
			else
				if (_InThrot-(_Tune.IdleThrottle/100) > 0 and car.DriveSeat.Velocity.Magnitude < 5) and _Tune.AutoShiftVers == "Old" then
					_CGear = 1 _ClPressing = false
				end
			end
		end 
	end
	
	function Gear()
		local maxSpin=0
		for i,v in pairs(Drive) do if v.RotVelocity.Magnitude>maxSpin then maxSpin = v.RotVelocity.Magnitude end end
		if _ShiftUp and not _Shifting then
			if (_TMode == "Manual" and not _ClPressing) or (_TMode == "Manual" and _Tune.ClutchRel and (_InThrot-(_Tune.IdleThrottle/100)>0)) or _CGear == #_Tune.Ratios-2 or (_TMode ~= "Manual" and not _IsOn) then _ShiftUp = false return end
			local NextGear = math.min(_CGear+3,#_Tune.Ratios)
			if _TMode~="Manual" then
				_Shifting = true
				if _CGear>0 then 
					if _Tune.AutoShiftType=="DCT" then 
						wait(_Tune.ShiftUpTime)
					elseif _Tune.AutoShiftType=="Rev" then
						repeat wait() until _RPM<=math.max(math.min(maxSpin*_Tune.Ratios[NextGear]*fFDr,_Tune.Redline-_Tune.RevBounce),_Tune.IdleRPM) or not _IsOn or _ShiftDn 
					end
				end
			end
			_ShiftUp = false
			_Shifting = false
			if _TMode ~= "Manual" and not _IsOn then return end
			_CGear = math.min(_CGear+1,#_Tune.Ratios-2)
			if _TMode ~= "Manual" or (_TMode == "Manual" and _CGear == 1) and _IsOn then _ClPressing = false end
		end
		if _ShiftDn and not _Shifting then
			if (_TMode == "Manual" and not _ClPressing) or _CGear == -1 or (_TMode ~= "Manual" and not _IsOn) then _ShiftDn = false return end
			local PrevGear = math.min(_CGear+1,#_Tune.Ratios)
			if _TMode~="Manual" then
				_Shifting = true
				if _CGear>1 then 
					if _Tune.AutoShiftType=="DCT" then 
						wait(_Tune.ShiftDnTime)
					elseif _Tune.AutoShiftType=="Rev" then
						repeat wait() until _RPM>=math.max(math.min(maxSpin*_Tune.Ratios[PrevGear]*fFDr,_Tune.Redline-_Tune.RevBounce),_Tune.IdleRPM) or not _IsOn or _ShiftUp
					end
				end
			end
			_ShiftDn = false
			_Shifting = false
			if _TMode ~= "Manual" and not _IsOn then return end
			_CGear = math.max(_CGear-1,-1)
			if _TMode ~= "Manual" or (_TMode == "Manual" and _CGear == -1) and _IsOn then _ClPressing = false end
		end
	end
	
	local _GoalRPM=0
	local tqTCS = 1
	local sthrot = 0
	local _StallOK = false
	local ticc = tick()
	--Apply Power
	function Engine(dt)
		local deltaTime = (60/(1/dt))
		--Neutral Gear
		if ((_CGear == 0 or _Shifting) and _IsOn) then 
			_ClPressing = true
			_Clutch = 1
			_StallOK = false
		end
		
		local revMin = _Tune.IdleRPM 
		local goalMin = _Tune.IdleRPM 
		local goalMax = _Tune.Redline
		if _Tune.Stall and _Tune.Clutch then revMin = 0 end
		
		if _Shifting and _ShiftUp then 
			_GThrot = 0
		elseif _Shifting and _ShiftDn then
			_GThrot = (_Tune.ShiftThrot/100)
		else
			if (_Tune.AutoShiftVers == "Old" and _CGear==-1 and _TMode=="Auto") then
				_GThrot = _InBrake
			else
				_GThrot = _InThrot
			end
		end
		
		if (_Tune.AutoShiftVers == "Old" and _CGear==-1 and _TMode=="Auto") then
			_GBrake = _InThrot-(_Tune.IdleThrottle/100)
		else
			_GBrake = _InBrake
		end
		
		if not _IsOn then 
			ticc = tick()
			revMin = 0 
			goalMin = 0
			_GThrot = _Tune.IdleThrottle/100
			if _TMode~="Manual" then 
				_CGear = 0 
				_ClPressing = true 
				_Clutch = 1 
			end
		end
		
		if ((_ClPressing and _CGear == 0) or (_PlayerClutch and _CGear ~= 0)) and _Tune.NeutralLimit then
			if (_CGear == 0 and not _Tune.LimitClutch) or _Tune.LimitClutch then
				goalMax = _Tune.NeutralRevRPM
			end
		end
		
		--Determine RPM
		local maxSpin=0
		local maxCount=0
		local revThrot=_GThrot
		for i,v in pairs(Drive) do maxSpin = maxSpin + v.RotVelocity.Magnitude maxCount = maxCount + 1 end
		maxSpin=maxSpin/maxCount
		
		if _GoalRPM>goalMax+100 then 
			revThrot = _Tune.IdleThrottle/100
		end
		
		if _Tune.Engine or _Tune.Electric then
			_GoalRPM = math.clamp((_RPM-_Tune.RevDecay*deltaTime)+((_Tune.RevDecay+_Tune.RevAccel)*revThrot*deltaTime),goalMin,_Tune.Redline+100)
		end
		
		if _GoalRPM>_Tune.Redline then 
			if _CGear<#_Tune.Ratios-2 then
				_GoalRPM = _GoalRPM-_Tune.RevBounce
			else
				_GoalRPM = _GoalRPM-_Tune.RevBounce*.5
			end
		end
		
		local _WheelRPM = maxSpin*_Tune.Ratios[_CGear+2]*fFDr
		
		if _Tune.Clutch then
			if script.Parent.Values.AutoClutch.Value and _IsOn then
				if _Tune.ClutchType == "Clutch" then
					if _ClPressing then _ClutchKick = 1 end
					_ClutchKick = _ClutchKick*(_Tune.ClutchEngage/100)		
					local ClRPMInfluence = math.max((_RPM-_Tune.IdleRPM)*_Tune.ClutchRPMMult/(_Tune.Redline-_Tune.IdleRPM),0)
					if _Tune.ClutchMode == "New" then ClRPMInfluence = 0 end
					_ClutchModulate = math.min(((((script.Parent.Values.Velocity.Value.Magnitude/_Tune.SpeedEngage)/math.abs(_CGear)) + ClRPMInfluence) - _ClutchKick), 1)
				elseif _Tune.ClutchType == "CVT" or (_Tune.ClutchType == "TorqueConverter" and _Tune.TQLock) then
					if (_GThrot-(_Tune.IdleThrottle/100)==0 and script.Parent.Values.Velocity.Value.Magnitude<_Tune.SpeedEngage) or (_GThrot-(_Tune.IdleThrottle/100)~=0 and (_RPM < _Tune.RPMEngage and _WheelRPM < _Tune.RPMEngage)) then
						_ClutchModulate = math.min(_ClutchModulate*(_Tune.ClutchEngage/100), 1)
					else
						_ClutchModulate = math.min(_ClutchModulate*(_Tune.ClutchEngage/100)+(1-(_Tune.ClutchEngage/100)), 1)
					end
				elseif _Tune.ClutchType == "TorqueConverter" and not _Tune.TQLock then
					_ClutchModulate = math.min((_RPM/_Tune.Redline)*0.7, 1)
				end
				if not _ClPressing then _Clutch = math.min(1-_ClutchModulate,1) else _Clutch = 1 end
				_StallOK = (_Clutch<=0.01) or _StallOK
			else
				_StallOK = _Tune.Stall
				_Clutch = script.Parent.Values.Clutch.Value
			end
		else
			_StallOK = false
			if not _ClPressing and not _Shifting then _Clutch = 0 else _Clutch = 1 end
		end
		
		local aRPM = math.max(math.min((_GoalRPM*_Clutch) + (_WheelRPM*(1-_Clutch)),_Tune.Redline+100),revMin)
		local clutchP = math.min(math.abs(aRPM-_RPM)/(_Tune.Flywheel*deltaTime),.9)
		if _ClPressing then clutchP = 0 end
		_RPM = _RPM*clutchP  +  aRPM*(1-clutchP)
		
		if _RPM<=(_Tune.IdleRPM/4) and _StallOK and (tick()-ticc>=0.2) then script.Parent.IsOn.Value = not _Tune.Stall end
		
		--Rev Limiter
		_spLimit = (_Tune.Redline+100)/(fFDr*_Tune.Ratios[_CGear+2])
		if _RPM>_Tune.Redline then 
			if _CGear<#_Tune.Ratios-2 then
				_RPM = _RPM-_Tune.RevBounce
			else
				_RPM = _RPM-_Tune.RevBounce*.5
			end
		end
		
		--Aspiration
		local TPsi = _TPsi/_TCount
		
		local _BThrot = _GThrot
		
		if _Tune.Engine then
			if _TCount~=0 and _TCount~=2 then
				_TBoost = _TBoost + ((((((_HP*(_BThrot*1.2)/_Tune.Horsepower)/8)-(((_TBoost/TPsi*(TPsi/15)))))*((8/(_Tune.T_BoostLag/(deltaTime)))*2))/TPsi)*15)
				if _TBoost < 0.05 then _TBoost = 0.05 elseif _TBoost > 2 then _TBoost = 2 end
			elseif _TCount==2 then
				if _TBoost<1 then
					_TBoost = _TBoost + ((((((_HP*(_BThrot*1.2)/_Tune.Horsepower)/8)-(((_TBoost/TPsi*(TPsi/15)))))*((8/(_Tune.T_BoostLag/(deltaTime)))*2))/TPsi)*15)
				elseif _TBoost>=1 then
					_TBoost = _TBoost + ((((((_HP*(_BThrot*1.2)/_Tune.Horsepower)/8)-(((_TBoost/TPsi*(TPsi/15)))))*((8/(_Tune.T2_BoostLag/(deltaTime)))*2))/TPsi)*15)
				end
				if _TBoost < 0.05 then _TBoost = 0.05 elseif _TBoost > 2 then _TBoost = 2 end
			else
				_TBoost = 0
			end
			if _SCount~=0 then
				if _BThrot>sthrot then
					sthrot=math.min(_BThrot,sthrot+_Tune.S_Sensitivity*deltaTime)
				elseif _BThrot<sthrot then
					sthrot=math.max(_BThrot,sthrot-_Tune.S_Sensitivity*deltaTime)
				end
				_SBoost = (_RPM/_Tune.Redline)*(.5+(1.5*sthrot))
			else
				_SBoost = 0
			end
		else
			_TBoost = 0
			_SBoost = 0
		end
		
		--Torque calculations
		if _Tune.Engine then
			local cTq = NCache[_CGear+2][math.floor(math.min(_Tune.Redline,math.max(0,_RPM))/100)]
			_NH = cTq.Horsepower+(cTq.HpSlope*(((_RPM-math.floor(_RPM/100))/100)%1))
			_NT = cTq.Torque+(cTq.TqSlope*(((_RPM-math.floor(_RPM/100))/100)%1))
			if _TCount~=0 then
				local tTq = TCache[_CGear+2][math.floor(math.min(_Tune.Redline,math.max(0,_RPM))/100)]
				_TH = (tTq.Horsepower+(tTq.HpSlope*(((_RPM-math.floor(_RPM/100))/100)%1)))*(_TBoost/2)
				_TT = (tTq.Torque+(tTq.TqSlope*(((_RPM-math.floor(_RPM/100))/100)%1)))*(_TBoost/2)
			else
				_TH,_TT = 0,0
			end
			if _SCount~=0 then
				local sTq = SCache[_CGear+2][math.floor(math.min(_Tune.Redline,math.max(0,_RPM))/100)]
				_SH = (sTq.Horsepower+(sTq.HpSlope*(((_RPM-math.floor(_RPM/100))/100)%1)))*(_SBoost/2)
				_ST = (sTq.Torque+(sTq.TqSlope*(((_RPM-math.floor(_RPM/100))/100)%1)))*(_SBoost/2)
			else
				_SH,_ST = 0,0
			end
			_BH = _TH+_SH
			_BT = _TT+_ST
		else
			_NH,_NT = 0,0
			_TH,_TT = 0,0
			_SH,_ST = 0,0
			_BH,_BT = 0,0
		end
		
		if _Tune.Electric and _CGear~=0 then
			local eTq = ECache[_CGear+2][math.floor(math.min(_Tune.Redline,math.max(100,_RPM))/100)]
			_EH = eTq.Horsepower+(eTq.HpSlope*(((_RPM-math.floor(_RPM/100))/100)%1))
			_ET = eTq.Torque+(eTq.TqSlope*(((_RPM-math.floor(_RPM/100))/100)%1))
		else
			_EH,_ET = 0,0
		end
		
		_HP = _NH + _BH + _EH
		_OutTorque = _NT + _BT + _ET
		
		local iComp =(car.DriveSeat.CFrame.lookVector.y)*cGrav
		if _CGear==-1 then iComp=-iComp end
		_OutTorque = _OutTorque*math.max(1,(1+iComp))
		
		--Average Rotational Speed Calculation
		local fwspeed=0
		local fwcount=0
		local rwspeed=0
		local rwcount=0
		
		for i,v in pairs(car.Wheels:GetChildren()) do
			if v.Name=="FL" or v.Name=="FR" or v.Name == "F" then
				fwspeed=fwspeed+v.RotVelocity.Magnitude
				fwcount=fwcount+1
			elseif v.Name=="RL" or v.Name=="RR" or v.Name == "R" then
				rwspeed=rwspeed+v.RotVelocity.Magnitude
				rwcount=rwcount+1
			end
		end
		fwspeed=fwspeed/fwcount
		rwspeed=rwspeed/rwcount	
		local cwspeed=(fwspeed+rwspeed)/2
		
		--Update Wheels
		for i,v in pairs(car.Wheels:GetChildren()) do
			--Reference Wheel Orientation
			local Ref=(CFrame.new(v.Position-((v.Arm.CFrame*cfWRot).lookVector),v.Position)*cfYRot).lookVector
			local aRef=1
			local diffMult=1
			local RRdiffMult=1
			local RLdiffMult=1
			local FRdiffMult=1
			local FLdiffMult=1
			if v.Name=="FL" or v.Name=="RL" then aRef=-1 end
			
			--Differential/Torque-Vectoring
			if _Tune.DifferentialType=='Old' then
				if v.Name=="FL" or v.Name=="FR" then
					diffMult=math.max(0,math.min(1,1+((((v.RotVelocity.Magnitude-fwspeed)/fwspeed)/(math.max(_Tune.FDiffSlipThres,1)/100))*((_Tune.FDiffLockThres-50)/50))))
					if _Tune.Config == "AWD" then
						diffMult=math.max(0,math.min(1,diffMult*(1+((((fwspeed-cwspeed)/cwspeed)/(math.max(_Tune.CDiffSlipThres,1)/100))*((_Tune.CDiffLockThres-50)/50)))))
					end
				elseif v.Name=="RL" or v.Name=="RR" then
					diffMult=math.max(0,math.min(1,1+((((v.RotVelocity.Magnitude-rwspeed)/rwspeed)/(math.max(_Tune.RDiffSlipThres,1)/100))*((_Tune.RDiffLockThres-50)/50))))
					if _Tune.Config == "AWD" then
						diffMult=math.max(0,math.min(1,diffMult*(1+((((rwspeed-cwspeed)/cwspeed)/(math.max(_Tune.CDiffSlipThres,1)/100))*((_Tune.CDiffLockThres-50)/50)))))
					end
				end
			else
				if v.Name=="FR" then
					local avg=((v.RotVelocity.Magnitude/car.Wheels.FL.RotVelocity.Magnitude)-1)*(_Tune.FDiffPreload/10)
					FRdiffMult=math.ceil(math.max(0,math.min(2,1-( ((_Tune.FDiffPower/100)*avg*_GThrot) + ((_Tune.FDiffCoast/100)*avg*(1-_GThrot)))))*100)/100
					FLdiffMult=2-FRdiffMult
				elseif v.Name=="FL" then
					local avg=((v.RotVelocity.Magnitude/car.Wheels.FR.RotVelocity.Magnitude)-1)*(_Tune.FDiffPreload/10)
					FLdiffMult=math.ceil(math.max(0,math.min(2,1-( ((_Tune.FDiffPower/100)*avg*_GThrot) + ((_Tune.FDiffCoast/100)*avg*(1-_GThrot)))))*100)/100
					FRdiffMult=2-FLdiffMult
				elseif v.Name=="RR" then
					local avg=((v.RotVelocity.Magnitude/car.Wheels.RL.RotVelocity.Magnitude)-1)*(_Tune.RDiffPreload/10)
					RRdiffMult=math.ceil(math.max(0,math.min(2,1-( ((_Tune.RDiffPower/100)*avg*_GThrot) + ((_Tune.RDiffCoast/100)*avg*(1-_GThrot)))))*100)/100
					RLdiffMult=2-RRdiffMult
				elseif v.Name=="RL" then
					local avg=((v.RotVelocity.Magnitude/car.Wheels.RR.RotVelocity.Magnitude)-1)*(_Tune.RDiffPreload/10)
					RLdiffMult=math.ceil(math.max(0,math.min(2,1-( ((_Tune.RDiffPower/100)*avg*_GThrot) + ((_Tune.RDiffCoast/100)*avg*(1-_GThrot)))))*100)/100
					RRdiffMult=2-RLdiffMult
				end
			end
			
			_TCSActive = false
			_ABSActive = false
			--Output
		
			--Apply Power
			local on=1
			if not script.Parent.IsOn.Value then on=0 end
			local throt = _GThrot
			local brake = _GBrake
			local clutch=1
			if _ClPressing then clutch=0 end
			local tq = _OutTorque
			
			--Apply ABS
			local tqABS = 1
			if _ABS and brake>0 and math.abs(v.RotVelocity.Magnitude*(v.Size.x/2) - v.Velocity.Magnitude)-_Tune.ABSThreshold>0 then
				tqABS = 0
			end
			_ABSActive = (tqABS<1)
		
			local PBrakeV=0
			if _PBrake==true then PBrakeV=1 else PBrakeV=0 end
			
			local driven = false
			for _,a in pairs(Drive) do if a==v then driven = true end end
			if driven then
				--Apply AWD Vectoring
				if _Tune.Config == "AWD" then
					local bias = (_Tune.TorqueVector+1)/2
					if string.find(v.Name,"F") then
						tq = tq*(1-bias)
					elseif string.find(v.Name,"R") then
						tq = tq*bias
					end
				end
				
				--Apply TCS
				tqTCS = 1
				if _TCS and throt>0 then
					tqTCS = 1-(math.min(math.max(0,math.abs(v.RotVelocity.Magnitude*(v.Size.x/2) - v.Velocity.Magnitude)-_Tune.TCSThreshold)/_Tune.TCSGradient,1)*(1-(_Tune.TCSLimit/100)))
				end
				if tqTCS < 1 then
					_TCSAmt = tqTCS
					_TCSActive = true
				end
				
				--Update Forces
				local dir=1
				if _CGear==-1 then dir = -1 end--luaint edit
				
				if _Tune.ClutchKick and car.DriveSeat.Velocity.Magnitude<_Tune.KickSpeedThreshold and _RPM>_Tune.Redline-_Tune.KickRPMThreshold and v["#BV"].MotorMaxTorque<1 then 
					tq = (tq*_Tune.KickMult)
				end
			
				local tqOUT = (tq/1.5)*(60/workspace:GetRealPhysicsFPS())*throt*tqTCS*on*clutch
				
				if v.Name=='RR' then
					v["#AV"].MotorMaxTorque=tqOUT*RRdiffMult*diffMult
				elseif v.Name=='RL' then
					v["#AV"].MotorMaxTorque=tqOUT*RLdiffMult*diffMult
				elseif v.Name=='FR' then
					v["#AV"].MotorMaxTorque=tqOUT*FRdiffMult*diffMult
				elseif v.Name=='FL' then
					v["#AV"].MotorMaxTorque=tqOUT*FLdiffMult*diffMult
				else
					v["#AV"].MotorMaxTorque=tqOUT*diffMult
				end
				v["#AV"].AngularVelocity=_spLimit*dir
			
				if string.find(v.Name,"F") then
					v["#BV"].MotorMaxTorque=(FBrakeForce*(60/workspace:GetRealPhysicsFPS())*brake*tqABS)+(EBrakeForce*((1-throt)*(_RPM/_Tune.Redline)))+(PBrakeForceF*PBrakeV)
				else
					v["#BV"].MotorMaxTorque=(RBrakeForce*(60/workspace:GetRealPhysicsFPS())*brake*tqABS)+(EBrakeForce*((1-throt)*(_RPM/_Tune.Redline)))+(PBrakeForceR*PBrakeV)
				end
			else--luaint edit
				v["#AV"].MotorMaxTorque=0
				v["#AV"].AngularVelocity=0
				if string.find(v.Name,"F") then
					v["#BV"].MotorMaxTorque=(FBrakeForce*(60/workspace:GetRealPhysicsFPS())*brake*tqABS)+(PBrakeForceF*PBrakeV)
				else
					v["#BV"].MotorMaxTorque=(RBrakeForce*(60/workspace:GetRealPhysicsFPS())*brake*tqABS)+(PBrakeForceR*PBrakeV)
				end
			end
		end
	end
	
	
	
	--[[Flip]]
	
	function Flip()
		--Detect Orientation
		if (car.DriveSeat.CFrame*CFrame.Angles(math.pi/2,0,0)).lookVector.y > .1 or FlipDB then
			FlipWait=tick()
			
		--Apply Flip
		else
			if tick()-FlipWait>=3 then
				FlipDB=true
				local gyro = car.DriveSeat.Flip
				gyro.maxTorque = Vector3.new(10000,0,10000)
				gyro.P=3000
				gyro.D=500
				wait(1)
				gyro.maxTorque = Vector3.new(0,0,0)
				gyro.P=0
				gyro.D=0
				FlipDB=false
			end
		end
	end
	
	
	--[[Run]]
	
	--Print Version
	local ver=require(car["A-Chassis Tune"].README)
	print("Novena: AC6C Loaded - Version "..ver..", Update "..script.Parent.Version.Value)
	
	--Runtime Loops
	
	-- ~60 c/s
	game["Run Service"].Heartbeat:connect(function(dt)
		--Update Internal Values
		_IsOn = script.Parent.IsOn.Value
		_InControls = script.Parent.ControlsOpen.Value
		
		--Inputs
		Inputs(dt)
		
		--Steering
		Steering(dt)
		
		--Gear
		Gear()
		
		--Power
		Engine(dt)
		
		--Update External Values
		script.Parent.Values.Gear.Value = _CGear
		script.Parent.Values.RPM.Value = _RPM
		script.Parent.Values.Boost.Value = ((_TBoost/2)*_TPsi)+((_SBoost/2)*_SPsi)
		script.Parent.Values.BoostTurbo.Value = (_TBoost/2)*_TPsi
		script.Parent.Values.BoostSuper.Value = (_SBoost/2)*_SPsi
		script.Parent.Values.HpNatural.Value = _NH
		script.Parent.Values.HpElectric.Value = _EH
		script.Parent.Values.HpTurbo.Value = _TH
		script.Parent.Values.HpSuper.Value = _SH
		script.Parent.Values.HpBoosted.Value = _BH
		script.Parent.Values.Horsepower.Value = _HP
		script.Parent.Values.TqNatural.Value = _NT/_Tune.Ratios[_CGear+2]/fFD
		script.Parent.Values.TqElectric.Value = _ET/_Tune.Ratios[_CGear+2]/fFD
		script.Parent.Values.TqTurbo.Value = _TT/_Tune.Ratios[_CGear+2]/fFD
		script.Parent.Values.TqSuper.Value = _ST/_Tune.Ratios[_CGear+2]/fFD
		script.Parent.Values.TqBoosted.Value = script.Parent.Values.TqTurbo.Value+script.Parent.Values.TqSuper.Value
		script.Parent.Values.Torque.Value = script.Parent.Values.TqNatural.Value+script.Parent.Values.TqElectric.Value+script.Parent.Values.TqBoosted.Value
		script.Parent.Values.TransmissionMode.Value = _TMode
		script.Parent.Values.Throttle.Value = _GThrot
		script.Parent.Values.Brake.Value = _GBrake
		if script.Parent.Values.AutoClutch.Value then
			script.Parent.Values.Clutch.Value = _Clutch
		end
		script.Parent.Values.SteerC.Value = _GSteerC
		script.Parent.Values.SteerT.Value = _GSteerT
		script.Parent.Values.PBrake.Value = _PBrake
		script.Parent.Values.TCS.Value = _TCS
		script.Parent.Values.TCSActive.Value = _TCSActive
		script.Parent.Values.TCSAmt.Value = 1-_TCSAmt
		script.Parent.Values.ABS.Value = _ABS
		script.Parent.Values.ABSActive.Value = _ABSActive
		script.Parent.Values.MouseSteerOn.Value = _MSteer
		script.Parent.Values.Velocity.Value = car.DriveSeat.Velocity
	end)
	
	--15 c/s
	while wait(.0667) do
		--Automatic Transmission
		if _TMode == "Auto" then Auto() end
		
		--Flip
		if _Tune.AutoFlip then Flip() end
	end
