pCircleStrafe in Lua
Made this for Bee T. Gee because he wanted to know how proper Circle Strafe worked.
Releasing it because I don't need it as my hack is C++.
Tested and Working. Includes Movement Fix and Movement Clamp. 
To change the Bind set the Key Value for CSBOI._G.input.IsKeyDown in function CSBOI.CircleStrafe.
By default I set it to KEY_F.
Releasing it because I don't need it as my hack is C++.
Tested and Working. Includes Movement Fix and Movement Clamp. 
To change the Bind set the Key Value for CSBOI._G.input.IsKeyDown in function CSBOI.CircleStrafe.
By default I set it to KEY_F.
Code:
// pCircleStrafe BOI! GET YOU SOME!
local CSBOI = {}
CSBOI.CircleStrafeVal = 0
CSBOI._G = table.Copy(_G)
CSBOI.localply = CSBOI._G.LocalPlayer()
CSBOI.cl_forwardspeed_cvar = CSBOI._G.GetConVar("cl_forwardspeed")
CSBOI.cl_forwardspeed_value = 10000
if (CSBOI.cl_forwardspeed_cvar) then
CSBOI.cl_forwardspeed_value = CSBOI.cl_forwardspeed_cvar:GetFloat()
end
CSBOI.cl_sidespeed_cvar = CSBOI._G.GetConVar("cl_sidespeed")
CSBOI.cl_sidespeed_value = 10000
if (CSBOI.cl_sidespeed_cvar) then
CSBOI.cl_sidespeed_value = CSBOI.cl_sidespeed_cvar:GetFloat()
end
function CSBOI.ClampMove(cmd)
if (cmd:GetForwardMove() > CSBOI.cl_forwardspeed_value) then
cmd:SetForwardMove(CSBOI.cl_forwardspeed_value)
end
if (cmd:GetSideMove() > CSBOI.cl_sidespeed_value) then
cmd:SetSideMove(CSBOI.cl_sidespeed_value)
end
end
function CSBOI.FixMove(cmd, rotation)
local rot_cos = CSBOI._G.math.cos(rotation)
local rot_sin = CSBOI._G.math.sin(rotation)
local cur_forwardmove = cmd:GetForwardMove()
local cur_sidemove = cmd:GetSideMove()
cmd:SetForwardMove(((rot_cos * cur_forwardmove) - (rot_sin * cur_sidemove)))
cmd:SetSideMove(((rot_sin * cur_forwardmove) + (rot_cos * cur_sidemove)))
end
CSBOI.CircleStrafeSpeed = 3
function CSBOI.CircleStrafe(cmd)
if (CSBOI._G.input.IsKeyDown(KEY_F)) then
CSBOI.CircleStrafeVal = CSBOI.CircleStrafeVal + CSBOI.CircleStrafeSpeed
if ((CSBOI.CircleStrafeVal > 0) and ((CSBOI.CircleStrafeVal / CSBOI.CircleStrafeSpeed) > 361)) then
CSBOI.CircleStrafeVal = 0
end
CSBOI.FixMove(cmd, CSBOI._G.math.rad((CSBOI.CircleStrafeVal - CSBOI._G.engine.TickInterval())))
return false
else
CSBOI.CircleStrafeVal = 0
end
return true
end
function CSBOI.RunIt(cmd)
if (CSBOI.localply) then
if (cmd:KeyDown(IN_JUMP)) then
local local_velocity = CSBOI.localply:GetVelocity()
if (local_velocity:Length2D() < 50) then
cmd:SetForwardMove(CSBOI.cl_forwardspeed_value)
end
local shouldautostrafe = CSBOI.CircleStrafe(cmd)
if (!CSBOI.localply:OnGround()) then
if (shouldautostrafe) then
// Do your AutoStrafe Here
end
cmd:SetButtons(cmd:GetButtons() - IN_JUMP)
end
else
CSBOI.CircleStrafeVal = 0
end
end
CSBOI.ClampMove(cmd)
end
CSBOI._G.hook.Add("CreateMove", "CSBOI", CSBOI.RunIt)



