Fe sanic script
Key RequiredUniversal

Fe sanic script

Universal ScriptKinitopet890bloxHackKinitopet890bloxHack 3K views 2.4K executesUpdated May 9, 2026
Unrated
00
Lua Script•184 lines (7530 chars)
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local TextChatService = game:GetService("TextChatService")
local GuiService = game:GetService("GuiService")
local Debris = game:GetService("Debris")
local Player = Players.LocalPlayer
local PlayerNameFromId = Players:GetNameFromUserIdAsync(Player.UserId)

-- // CONFIGURATION //
local IMAGE_ID = "rbxassetid://126338282700056"
local THEME_ID = "rbxassetid://82675021472003"
local KILL_SOUND_ID = "rbxassetid://135557803"
local RING_SOUND_ID = "rbxassetid://138688779679100"
local DROWN_SOUND_ID = "rbxassetid://99211443575584"
local SKID_1 = "rbxassetid://137066334962228"
local SKID_2 = "rbxassetid://82308852446079"

-- // AUDIO & PHYSICS SETTINGS //
local CURRENT_SPEED = 150
local THEME_PITCH = 0.29
local THEME_VOLUME = 7
local DROWN_PITCH = 0.09
local FALL_LIMIT = -50

-- // TABLES //
local KILL_LINES = {"YOU'RE TOO SLOW!", "COME ON STEP IT UP!", "TOOOO EZ, PEACE OF 🍰", "SORRY, BUT I GOTTA GO FAST! 🌀"}
local greetedSonics = {}

-- // CHAT FUNCTION //
local function SayInChat(msg)
    if TextChatService.ChatVersion == Enum.ChatVersion.TextChatService then
        local channel = TextChatService.TextChannels.RBXGeneral
        if channel then channel:SendAsync(msg) end
    else
        local event = game:GetService("ReplicatedStorage"):FindFirstChild("DefaultChatSystemChatEvents")
        if event then event.SayMessageRequest:FireServer(msg, "All") end
    end
end

-- // INITIAL CHAT CREDIT //
SayInChat("FE Sanic Script By: dariushstefan! (please use touch fling)")

-- // KEYWORD & SONIC CHAT DETECTION //
TextChatService.MessageReceived:Connect(function(msg)
    if not msg.TextSource then return end
    local sender = Players:GetPlayerByUserId(msg.TextSource.UserId)
    if not sender or sender == Player then return end
    local content = msg.Text:lower()
    
    if content:find("sonic") and not greetedSonics[sender.UserId] then
        greetedSonics[sender.UserId] = true
        if Player.Character and sender.Character then
            Player.Character:MoveTo(sender.Character.HumanoidRootPart.Position + Vector3.new(0, 3, 0))
            SayInChat("YUR NAME IZ SANIC?! DUDE! I'M DA REAL SANIC!")
        end
    elseif content:find("report") then
        SayInChat("Report? 😂✌️")
    elseif content:find("bot") then
        SayInChat("Me? A bot? Maybe you might be the bot 🔥")
    elseif content:find("hacker") then
        SayInChat("Hacker? Nah, I'm just the fastest thing alive! 🌀💨")
    end
end)

-- // MAIN LOGIC //
local function ApplySanic(Character)
    local Humanoid = Character:WaitForChild("Humanoid")
    local RootPart = Character:WaitForChild("HumanoidRootPart")
    local isDrowning = false
    local isRepelling = false
    local processed = {}

    for _, v in pairs(Character:GetDescendants()) do
        if v:IsA("BasePart") or v:IsA("Decal") then v.Transparency = 1 end
    end

    -- Billboard Setup
    local Billboard = Instance.new("BillboardGui", RootPart)
    Billboard.Size = UDim2.new(7, 0, 7, 0)
    Billboard.AlwaysOnTop = true
    local ImageLabel = Instance.new("ImageLabel", Billboard)
    ImageLabel.Size = UDim2.new(1, 0, 1, 0)
    ImageLabel.BackgroundTransparency = 1
    ImageLabel.Image = IMAGE_ID

    -- Audio Setup
    local Music = Instance.new("Sound", RootPart)
    Music.SoundId = THEME_ID; Music.PlaybackSpeed = THEME_PITCH; Music.Looped = true; Music.Volume = THEME_VOLUME; Music:Play()
    local DrownMusic = Instance.new("Sound", RootPart)
    DrownMusic.SoundId = DROWN_SOUND_ID; DrownMusic.PlaybackSpeed = DROWN_PITCH; DrownMusic.Volume = 8
    local S1 = Instance.new("Sound", RootPart); S1.SoundId = SKID_1; S1.Volume = 3
    local S2 = Instance.new("Sound", RootPart); S2.SoundId = SKID_2; S2.Volume = 3

    -- WATER REPELLENT & DROWNING SYSTEM
    task.spawn(function()
        while Character.Parent do
            local inWater = (Humanoid:GetState() == Enum.HumanoidStateType.Swimming)
            if not inWater and not isRepelling then
                local foundWater = false
                local params = OverlapParams.new()
                params.FilterDescendantsInstances = {Character}
                local parts = workspace:GetPartBoundsInRadius(RootPart.Position, 18, params)
                for _, p in pairs(parts) do
                    if p.Material == Enum.Material.Water or p.Name:lower():find("water") then
                        foundWater = true
                        break
                    end
                end
                if foundWater then
                    isRepelling = true
                    SayInChat("WHOA!")
                    S1:Play(); S2:Play()
                    local BV = Instance.new("BodyVelocity")
                    BV.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
                    BV.Velocity = (RootPart.CFrame.LookVector * -130) + Vector3.new(0, 45, 0)
                    BV.Parent = RootPart
                    Debris:AddItem(BV, 0.5)
                    task.wait(1)
                    isRepelling = false
                end
            end

            if inWater then
                if not isDrowning then
                    isDrowning = true
                    Music:Pause(); DrownMusic:Play()
                    SayInChat("*gurgles* HEEEELP! I CAHN'T SWEM!!! TUAIS!!!")
                    task.spawn(function()
                        while isDrowning do
                            Billboard.StudsOffset = Vector3.new(math.random(-20,20)/10, math.random(-20,20)/10, 0)
                            task.wait(0.05)
                        end
                        Billboard.StudsOffset = Vector3.new(0,0,0)
                    end)
                    DrownMusic.Ended:Connect(function()
                        if isDrowning then Humanoid.Health = 0 end
                    end)
                end
            elseif isDrowning then
                isDrowning = false
                DrownMusic:Stop(); Music:Resume()
                SayInChat("Holy #### that was close, right? RIGHT?!")
            end
            task.wait(0.1)
        end
    end)

    -- SPEED & FALL PROTECTION
    RunService.Heartbeat:Connect(function()
        if not Character.Parent then return end
        Humanoid.WalkSpeed = (isRepelling or isDrowning) and 0 or CURRENT_SPEED
        if RootPart.Position.Y < FALL_LIMIT then
            RootPart.CFrame = CFrame.new(0, 50, 0)
        end
    end)

    -- DAMAGE Logic (Rings Only)
    local lastH = Humanoid.Health
    Humanoid.HealthChanged:Connect(function(h)
        if h < lastH then
            ImageLabel.ImageColor3 = Color3.new(1, 0, 0)
            task.delay(0.2, function() ImageLabel.ImageColor3 = Color3.new(1, 1, 1) end)
            local r = Instance.new("Sound", RootPart); r.SoundId = RING_SOUND_ID; r:Play(); Debris:AddItem(r, 2)
        end
        lastH = h
    end)

    -- COLLISION CHAT (Only KILL_LINES)
    RootPart.Touched:Connect(function(hit)
        local m = hit.Parent
        local h = m:FindFirstChildOfClass("Humanoid")
        if h and m ~= Character and not processed[m] then
            processed[m] = true
            local s = Instance.new("Sound", RootPart); s.SoundId = KILL_SOUND_ID; s:Play(); Debris:AddItem(s, 2)
            SayInChat(KILL_LINES[math.random(1, #KILL_LINES)])
            task.wait(3) 
            processed[m] = nil
        end
    end)
end

-- Initialize
if Player.Character then ApplySanic(Player.Character) end
Player.CharacterAdded:Connect(ApplySanic)

Features & Information

Pls use touch fling so it works

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts