local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local PhysicsService = game:GetService("PhysicsService")
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoidRootPart = character:WaitForChild("HumanoidRootPart")
local humanoid = character:WaitForChild("Humanoid")
-- Configuration
local FLICK_KEY = Enum.KeyCode.RightBracket
local FLICK_ANGLE = -30 -- Turns RIGHT
local TIME_HELD = 0.15
-- Setup Collision Groups once so they don't lag
pcall(function()
PhysicsService:RegisterCollisionGroup("FlickPlayer")
PhysicsService:RegisterCollisionGroup("FlickWalls")
PhysicsService:CollisionGroupSetCollidable("FlickPlayer", "FlickWalls", false)
end)
-- Track character respawns
player.CharacterAdded:Connect(function(newCharacter)
character = newCharacter
humanoidRootPart = character:WaitForChild("HumanoidRootPart")
humanoid = character:WaitForChild("Humanoid")
end)
local function performFlick()
-- Prevent errors if flicking exactly while dying
if not humanoid or humanoid.Health <= 0 or not humanoidRootPart then return end
-- 1. Kill Shift Lock's force rotation temporarily
humanoid.AutoRotate = false
-- 2. Dynamically tag your character and any nearby parts named "Wall"
for _, part in ipairs(character:GetChildren()) do
if part:IsA("BasePart") then
part.CollisionGroup = "FlickPlayer"
end
end
for _, part in ipairs(workspace:GetPartBoundsInRadius(humanoidRootPart.Position, 4)) do
if part.Name == "Wall" or part.Name == "Part" then
part.CollisionGroup = "FlickWalls"
end
end
-- 3. Save original rotation and calculate the 90-degree RIGHT turn
local originalRotation = humanoidRootPart.CFrame
local flickRotation = originalRotation * CFrame.Angles(0, math.rad(FLICK_ANGLE), 0)
-- 4. Physically rotate the entire hitbox 90 degrees right
humanoidRootPart.CFrame = flickRotation
-- 5. Hold the position for your manual jump timing
task.wait(TIME_HELD)
-- Safety check in case you died during the wait
if not humanoidRootPart or humanoid.Health <= 0 then return end
-- 6. Snap the physical body back to the original facing direction
local currentPos = humanoidRootPart.Position
local originalRotationOnly = originalRotation - originalRotation.Position
humanoidRootPart.CFrame = CFrame.new(currentPos) * originalRotationOnly
-- 7. Instantly restore original default collision groups
for _, part in ipairs(character:GetChildren()) do
if part:IsA("BasePart") then
part.CollisionGroup = "Default"
end
end
-- 8. Give control back to Shift Lock instantly
humanoid.AutoRotate = true
end
UserInputService.InputBegan:Connect(function(input, gameProcessed)
if gameProcessed then return end
if input.KeyCode == FLICK_KEY then
task.spawn(performFlick)
end
end)
Comments
No comments yet
Be the first to share your thoughts!