--------------------- -- Your Name is Benny --------------------- local cam_f = CreateConVar( "b-cam_f", -75 ) local cam_r = CreateConVar( "b-cam_r", 12 ) local cam_u = CreateConVar( "b-cam_u", 0 ) local cam_fov = CreateConVar( "b-cam_fov", 75 ) local m = 3 local m2 = Vector( m, m, m ) local m1 = m2:GetNegated() TPSOverride = TPSOverride or Angle( 0, 0, 0 ) function CamSpot( ang, pos ) if !ang then ang = TPSOverride end if !pos then pos = LocalPlayer():EyePos() end local f, r, u = TPSOverride:Forward(), TPSOverride:Right(), TPSOverride:Up() local tr = { start = pos, endpos = pos + (f*cam_f:GetFloat()) + (r*cam_r:GetFloat()) + (u*cam_u:GetFloat()), filter = LocalPlayer(), -- ply, mins = m1, maxs = m2, } tr = util.TraceHull(tr) return tr.HitPos end function GM:CalcView( ply, pos, ang, fov ) local view = { origin = CamSpot(TPSOverride), -- pos includes the smoothstair offset which looks stupid here angles = TPSOverride, fov = cam_fov:GetFloat(), drawviewer = true } return view end hook.Add( "InputMouseApply", "Benny_InputMouseApply", function( cmd, x, y, ang ) local p = LocalPlayer() local w = p:HandlerCheck() if w then--and (y!=0 or x!=0) then if x != 0 then TPSOverride.y = TPSOverride.y + (-x*0.022) end if y != 0 then TPSOverride.p = math.Clamp( TPSOverride.p + (y*0.022), -80, 80 ) end return true end end) hook.Add("CreateMove", "Benny_CreateMove_Camera", function( cmd ) local p = LocalPlayer() if p:GetMoveType() == MOVETYPE_NOCLIP then cmd:SetViewAngles( TPSOverride ) else local tr_forward = util.TraceLine( { start = CamSpot(TPSOverride), endpos = CamSpot(TPSOverride)+(TPSOverride:Forward()*(2^16)), filter = p, mask = MASK_SHOT, } ) local planner = (tr_forward.HitPos-p:EyePos()):Angle() planner:Normalize() cmd:SetViewAngles( planner ) local moveintent = Vector( cmd:GetForwardMove(), cmd:GetSideMove(), 0 ) local fixang = Angle() fixang.y = cmd:GetViewAngles().y - TPSOverride.y moveintent:Rotate( fixang ) cmd:SetForwardMove( moveintent.x ) cmd:SetSideMove( moveintent.y ) end end)