-- Superman Fly Script (R6) -- Author: Lennioda -- Controls: -- [F] = Toggle Fly -- [W/A/S/D] = Move -- [Space] = Ascend -- [Shift] = Descend local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local player = Players.LocalPlayer local character = player.Character or player.CharacterAdded:Wait() local humanoid = character:WaitForChild("Humanoid") local root = character:WaitForChild("HumanoidRootPart") -- === CONFIGURATION === local TOGGLE_KEY = Enum.KeyCode.F local FLY_SPEED = 100 local TURN_SPEED = 8 local HORIZONTAL_TILT = 90 -- how much the character tilts forward while flying -- === INTERNAL VARIABLES === local flying = false local bv, bg local torso, rightArm, leftArm -- === Create Superman Pose (arms forward) === local function setSupermanPose() torso = character:FindFirstChild("Torso") rightArm = character:FindFirstChild("Right Arm") leftArm = character:FindFirstChild("Left Arm") if not (torso and rightArm and leftArm) then return end -- Right Arm (hand facing down, arm extended forward) local weldR = Instance.new("Weld", torso) weldR.Name = "SupermanR" weldR.Part0 = torso weldR.Part1 = rightArm weldR.C0 = CFrame.new(1.5, 0.5, -1.2) * CFrame.Angles(math.rad(-100), 0, math.rad(10)) -- Left Arm (mirrored) local weldL = Instance.new("Weld", torso) weldL.Name = "SupermanL" weldL.Part0 = torso weldL.Part1 = leftArm weldL.C0 = CFrame.new(-1.5, 0.5, -1.2) * CFrame.Angles(math.rad(-100), 0, math.rad(-10)) end -- === Reset Arms Back to Normal === local function resetPose() if not torso then return end for _, weld in ipairs(torso:GetChildren()) do if weld:IsA("Weld") and (weld.Name == "SupermanR" or weld.Name == "SupermanL") then weld:Destroy() end end end -- === Start Flying === local function startFlying() if flying then return end flying = true humanoid.PlatformStand = true bv = Instance.new("BodyVelocity") bv.MaxForce = Vector3.new(1e5, 1e5, 1e5) bv.P = 1e4 bv.Velocity = Vector3.zero bv.Parent = root bg = Instance.new("BodyGyro") bg.MaxTorque = Vector3.new(1e5, 1e5, 1e5) bg.P = 1e4 bg.CFrame = root.CFrame bg.Parent = root setSupermanPose() print("🦸 Superman flight enabled!") end -- === Stop Flying === local function stopFlying() if not flying then return end flying = false humanoid.PlatformStand = false if bv then bv:Destroy() end if bg then bg:Destroy() end resetPose() print("🛬 Superman flight disabled.") end -- === Toggle Flight with F Key === UserInputService.InputBegan:Connect(function(input, processed) if processed then return end if input.KeyCode == TOGGLE_KEY then if flying then stopFlying() else startFlying() end end end) -- === Flight Movement Logic === RunService.RenderStepped:Connect(function(dt) if not flying or not root or not bv or not bg then return end local cam = workspace.CurrentCamera local moveDir = Vector3.zero if UserInputService:IsKeyDown(Enum.KeyCode.W) then moveDir += cam.CFrame.LookVector end if UserInputService:IsKeyDown(Enum.KeyCode.S) then moveDir -= cam.CFrame.LookVector end if UserInputService:IsKeyDown(Enum.KeyCode.A) then moveDir -= cam.CFrame.RightVector end if UserInputService:IsKeyDown(Enum.KeyCode.D) then moveDir += cam.CFrame.RightVector end if UserInputService:IsKeyDown(Enum.KeyCode.Space) then moveDir += Vector3.yAxis end if UserInputService:IsKeyDown(Enum.KeyCode.LeftShift) then moveDir -= Vector3.yAxis end if moveDir.Magnitude > 0 then moveDir = moveDir.Unit end bv.Velocity = moveDir * FLY_SPEED -- Orient body to face camera direction, tilted horizontally local target = cam.CFrame * CFrame.Angles(math.rad(-HORIZONTAL_TILT), 0, 0) bg.CFrame = bg.CFrame:Lerp(target, TURN_SPEED * dt) end) -- === Handle Character Respawn === player.CharacterAdded:Connect(function(newChar) character = newChar humanoid = newChar:WaitForChild("Humanoid") root = newChar:WaitForChild("HumanoidRootPart") flying = false end)