--========================================================-- -- GOJO NPC KILLER -- R6 + R15 | MOBILE + PC -- -- Blue = 3s cooldown -- Red = 5s cooldown + red explosion -- Hollow Purple = 10s cooldown + BIG -- Limitless Fly = 5s cooldown / INFINITE FLIGHT -- Teleport = 3s cooldown -- -- LIMITLESS FLY: -- • Infinite duration -- • Control with WASD / mobile joystick -- • Camera controls direction -- • Unequip tool to stop flying -- NPC ONLY --========================================================-- local Players = game:GetService("Players") local RunService = game:GetService("RunService") local Debris = game:GetService("Debris") local TweenService = game:GetService("TweenService") local Player = Players.LocalPlayer --========================================================-- -- CHARACTER --========================================================-- local Character local Humanoid local Root local function SetupCharacter(char) Character = char Humanoid = char:WaitForChild("Humanoid") Root = char:WaitForChild("HumanoidRootPart") end SetupCharacter( Player.Character or Player.CharacterAdded:Wait() ) --========================================================-- -- SETTINGS --========================================================-- local BLUE_DAMAGE = 35 local RED_DAMAGE = 50 local PURPLE_DAMAGE = 500 local NPC_PUSH = 35 local NPC_FREEZE_TIME = 2.5 local BLUE_COOLDOWN = 3 local RED_COOLDOWN = 5 local PURPLE_COOLDOWN = 10 local FLY_COOLDOWN = 5 local TELEPORT_COOLDOWN = 3 local FLY_SPEED = 75 local TELEPORT_DISTANCE = 35 local BLUE_SPEED = 50 local RED_SPEED = 135 local PURPLE_SPEED = 180 local BLUE_SIZE = 1.5 local RED_SIZE = 1.8 local PURPLE_SIZE = 5 --========================================================-- -- SOUNDS --========================================================-- local SOUND = { BlueCharge = "rbxassetid://911882310", BlueFire = "rbxassetid://12222216", RedCharge = "rbxassetid://911882310", RedFire = "rbxassetid://12222216", PurpleCharge = "rbxassetid://911882310", PurpleFire = "rbxassetid://12222216", Impact = "rbxassetid://12222152", Teleport = "rbxassetid://5568266006", FlyStart = "rbxassetid://911882310", FlyEnd = "rbxassetid://12222152", } --========================================================-- -- COOLDOWNS --========================================================-- local Cooldown = { Blue = false, Red = false, Purple = false, Fly = false, Teleport = false } local function TryCooldown(name, time) if Cooldown[name] then return false end Cooldown[name] = true task.delay(time, function() Cooldown[name] = false end) return true end --========================================================-- -- SOUND --========================================================-- local function PlaySound(id, volume, speed) if not Root then return end local sound = Instance.new("Sound") sound.SoundId = id sound.Volume = volume or 1 sound.PlaybackSpeed = speed or 1 sound.RollOffMaxDistance = 120 sound.RollOffMinDistance = 5 sound.Parent = Root sound:Play() Debris:AddItem(sound, 10) end --========================================================-- -- NPC CHECK --========================================================-- local function GetNPC(part) if not part then return nil end local model = part:FindFirstAncestorOfClass("Model") if not model then return nil end if model == Character then return nil end -- NEVER target players if Players:GetPlayerFromCharacter(model) then return nil end local humanoid = model:FindFirstChildOfClass("Humanoid") if not humanoid then return nil end if humanoid.Health <= 0 then return nil end return model end --========================================================-- -- RED EXPLOSION --========================================================-- local function RedExplosion(position) local part = Instance.new("Part") part.Name = "RedExplosion" part.Shape = Enum.PartType.Ball part.Material = Enum.Material.Neon part.Color = Color3.fromRGB( 255, 20, 20 ) part.Size = Vector3.new(2, 2, 2) part.Transparency = 0.1 part.Anchored = true part.CanCollide = false part.CanTouch = false part.CanQuery = false part.Position = position part.Parent = workspace local light = Instance.new("PointLight") light.Color = Color3.fromRGB( 255, 0, 0 ) light.Brightness = 15 light.Range = 30 light.Parent = part local tween = TweenService:Create( part, TweenInfo.new( 0.4, Enum.EasingStyle.Quad, Enum.EasingDirection.Out ), { Size = Vector3.new(14, 14, 14), Transparency = 1 } ) tween:Play() PlaySound( SOUND.Impact, 1.5, 0.8 ) Debris:AddItem( part, 0.5 ) end --========================================================-- -- PURPLE EXPLOSION --========================================================-- local function PurpleExplosion(position) local part = Instance.new("Part") part.Name = "HollowPurpleExplosion" part.Shape = Enum.PartType.Ball part.Material = Enum.Material.Neon part.Color = Color3.fromRGB( 180, 0, 255 ) part.Size = Vector3.new(5, 5, 5) part.Transparency = 0.1 part.Anchored = true part.CanCollide = false part.CanTouch = false part.CanQuery = false part.Position = position part.Parent = workspace local light = Instance.new("PointLight") light.Color = Color3.fromRGB( 190, 50, 255 ) light.Brightness = 30 light.Range = 50 light.Parent = part local tween = TweenService:Create( part, TweenInfo.new( 0.7, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out ), { Size = Vector3.new(30, 30, 30), Transparency = 1 } ) tween:Play() Debris:AddItem( part, 0.8 ) end --========================================================-- -- NPC HIT --========================================================-- local function DamageNPC( npc, damage, direction, ability ) local humanoid = npc:FindFirstChildOfClass("Humanoid") local npcRoot = npc:FindFirstChild("HumanoidRootPart") if not humanoid then return end if humanoid.Health <= 0 then return end -- NEVER damage players if Players:GetPlayerFromCharacter(npc) then return end -- DAMAGE humanoid:TakeDamage(damage) -- RED EFFECT if ability == "Red" and npcRoot then RedExplosion(npcRoot.Position) end -- PURPLE EFFECT if ability == "Purple" and npcRoot then PurpleExplosion(npcRoot.Position) end -- PUSH if npcRoot and direction then local push = Instance.new("BodyVelocity") push.MaxForce = Vector3.new( 100000, 100000, 100000 ) push.Velocity = direction.Unit * NPC_PUSH + Vector3.new( 0, 8, 0 ) push.Parent = npcRoot Debris:AddItem( push, 0.15 ) end -- FREEZE local oldWalk = humanoid.WalkSpeed local oldJump = humanoid.JumpPower local oldRotate = humanoid.AutoRotate humanoid.WalkSpeed = 0 humanoid.JumpPower = 0 humanoid.AutoRotate = false task.delay( NPC_FREEZE_TIME, function() if humanoid and humanoid.Parent and humanoid.Health > 0 then humanoid.WalkSpeed = oldWalk humanoid.JumpPower = oldJump humanoid.AutoRotate = oldRotate end end ) end --========================================================-- -- CREATE PROJECTILE --========================================================-- local function CreateOrb( color, size ) local orb = Instance.new("Part") orb.Name = "GojoProjectile" orb.Shape = Enum.PartType.Ball orb.Material = Enum.Material.Neon orb.Color = color orb.Size = Vector3.new( size, size, size ) orb.CanCollide = false orb.CanTouch = true orb.CanQuery = false orb.CastShadow = false orb.Parent = workspace local light = Instance.new("PointLight") light.Color = color light.Brightness = size * 7 light.Range = size * 8 light.Parent = orb return orb end --========================================================-- -- SHOOT --========================================================-- local function Shoot( color, size, speed, lifetime, damage, fireSound, ability ) if not Root then return end local camera = workspace.CurrentCamera if not camera then return end local direction = camera.CFrame.LookVector local orb = CreateOrb( color, size ) orb.CFrame = CFrame.new( Root.Position + direction * 4 + Vector3.new( 0, 1, 0 ) ) local velocity = Instance.new("BodyVelocity") velocity.MaxForce = Vector3.new( math.huge, math.huge, math.huge ) velocity.Velocity = direction * speed velocity.Parent = orb PlaySound( fireSound, 1.5, 1 ) local hit = false local connection connection = orb.Touched:Connect( function(part) if hit then return end local npc = GetNPC(part) if npc then hit = true DamageNPC( npc, damage, direction, ability ) if connection then connection:Disconnect() end orb:Destroy() end end ) Debris:AddItem( orb, lifetime ) task.delay( lifetime, function() if connection then connection:Disconnect() end end ) end --========================================================-- -- BLUE --========================================================-- local function UseBlue() if not TryCooldown( "Blue", BLUE_COOLDOWN ) then return end PlaySound( SOUND.BlueCharge, 1.2, 1.15 ) task.wait(0.15) Shoot( Color3.fromRGB( 0, 170, 255 ), BLUE_SIZE, BLUE_SPEED, 3, BLUE_DAMAGE, SOUND.BlueFire, "Blue" ) end --========================================================-- -- RED --========================================================-- local function UseRed() if not TryCooldown( "Red", RED_COOLDOWN ) then return end PlaySound( SOUND.RedCharge, 1.3, 0.85 ) task.wait(0.15) Shoot( Color3.fromRGB( 255, 40, 40 ), RED_SIZE, RED_SPEED, 3, RED_DAMAGE, SOUND.RedFire, "Red" ) end --========================================================-- -- HOLLOW PURPLE --========================================================-- local function UsePurple() if not TryCooldown( "Purple", PURPLE_COOLDOWN ) then return end PlaySound( SOUND.PurpleCharge, 1.5, 0.7 ) local charge = Instance.new("Part") charge.Shape = Enum.PartType.Ball charge.Material = Enum.Material.Neon charge.Color = Color3.fromRGB( 170, 0, 255 ) charge.Size = Vector3.new( 2, 2, 2 ) charge.Anchored = true charge.CanCollide = false charge.CanTouch = false charge.CFrame = Root.CFrame * CFrame.new( 0, 1, -5 ) charge.Parent = workspace local light = Instance.new("PointLight") light.Color = Color3.fromRGB( 190, 50, 255 ) light.Brightness = 25 light.Range = 45 light.Parent = charge local tween = TweenService:Create( charge, TweenInfo.new( 0.7, Enum.EasingStyle.Quad, Enum.EasingDirection.Out ), { Size = Vector3.new( PURPLE_SIZE, PURPLE_SIZE, PURPLE_SIZE ) } ) tween:Play() task.wait(0.7) if charge then charge:Destroy() end Shoot( Color3.fromRGB( 170, 0, 255 ), PURPLE_SIZE, PURPLE_SPEED, 4, PURPLE_DAMAGE, SOUND.PurpleFire, "Purple" ) end --========================================================-- -- LIMITLESS FLY --========================================================-- local Flying = false local FlyConnection local FlyVelocity local FlyTool local function StopFly() if not Flying then return end Flying = false if FlyConnection then FlyConnection:Disconnect() FlyConnection = nil end if FlyVelocity then FlyVelocity:Destroy() FlyVelocity = nil end if Humanoid then Humanoid.AutoRotate = true end PlaySound( SOUND.FlyEnd, 1.2, 1.2 ) end local function StartFly() if Flying then return end if not TryCooldown( "Fly", FLY_COOLDOWN ) then return end if not Root or not Humanoid then return end Flying = true Humanoid.AutoRotate = false PlaySound( SOUND.FlyStart, 1.5, 0.8 ) FlyVelocity = Instance.new("BodyVelocity") FlyVelocity.MaxForce = Vector3.new( math.huge, math.huge, math.huge ) FlyVelocity.Velocity = Vector3.zero FlyVelocity.Parent = Root FlyConnection = RunService.RenderStepped:Connect( function() if not Flying then return end if not Root or not Root.Parent or not Humanoid or Humanoid.Health <= 0 then StopFly() return end local camera = workspace.CurrentCamera if not camera then return end -- Get normal player movement local moveDirection = Humanoid.MoveDirection -- Camera direction local cameraLook = camera.CFrame.LookVector local cameraRight = camera.CFrame.RightVector -- Convert normal movement into -- camera-relative 3D flight movement. local forwardAmount = moveDirection:Dot( Vector3.new( cameraLook.X, 0, cameraLook.Z ).Unit ) local rightAmount = moveDirection:Dot( Vector3.new( cameraRight.X, 0, cameraRight.Z ).Unit ) local direction = Vector3.zero -- Forward/backward follows camera direction += cameraLook * forwardAmount -- Left/right follows camera direction += cameraRight * rightAmount -- Preserve vertical camera direction -- when moving forward/backward. if direction.Magnitude > 0.01 then direction = direction.Unit FlyVelocity.Velocity = direction * FLY_SPEED -- Face the direction of flight Root.CFrame = CFrame.lookAt( Root.Position, Root.Position + direction ) else -- No movement = hover in place FlyVelocity.Velocity = Vector3.zero end end ) end --========================================================-- -- TELEPORT --========================================================-- local function UseTeleport() if not TryCooldown( "Teleport", TELEPORT_COOLDOWN ) then return end if not Root then return end PlaySound( SOUND.Teleport, 1.5, 1 ) local camera = workspace.CurrentCamera if not camera then return end local direction = camera.CFrame.LookVector local params = RaycastParams.new() params.FilterType = Enum.RaycastFilterType.Exclude params.FilterDescendantsInstances = { Character } local result = workspace:Raycast( Root.Position, direction * TELEPORT_DISTANCE, params ) local destination if result then destination = result.Position - direction * 3 else destination = Root.Position + direction * TELEPORT_DISTANCE end Root.CFrame = CFrame.new( destination, destination + direction ) end --========================================================-- -- TOOL CREATION --========================================================-- local ToolData = { { Name = "Blue", Tooltip = "Gojo Blue | Cooldown 3s", Action = UseBlue }, { Name = "Red", Tooltip = "Gojo Red | Cooldown 3s", Action = UseRed }, { Name = "Hollow Purple", Tooltip = "Hollow Purple | Cooldown 10s", Action = UsePurple }, { Name = "Limitless Fly", Tooltip = "Infinite Flight | Unequip to stop", Action = StartFly }, { Name = "Teleport", Tooltip = "Teleport | Cooldown 3s", Action = UseTeleport } } --========================================================-- -- REMOVE ONLY OUR TOOLS --========================================================-- local function RemoveGojoTools() local backpack = Player:FindFirstChildOfClass( "Backpack" ) local function Clean(container) if not container then return end for _, object in ipairs(container:GetChildren()) do if object:IsA("Tool") then for _, data in ipairs(ToolData) do if object.Name == data.Name then object:Destroy() break end end end end end Clean(backpack) Clean(Character) end --========================================================-- -- CREATE ONE TOOL --========================================================-- local function CreateTool(data) local backpack = Player:WaitForChild( "Backpack", 10 ) if not backpack then warn("GOJO: Backpack was not found!") return end -- Don't create duplicate if backpack:FindFirstChild(data.Name) then return end if Character and Character:FindFirstChild(data.Name) then return end local tool = Instance.new("Tool") tool.Name = data.Name tool.ToolTip = data.Tooltip tool.RequiresHandle = false tool.CanBeDropped = false tool.Enabled = true tool.Parent = backpack -- Special handling for Limitless Fly if data.Name == "Limitless Fly" then FlyTool = tool tool.Unequipped:Connect( function() StopFly() end ) end tool.Activated:Connect( function() if not tool.Enabled then return end task.spawn( data.Action ) end ) end --========================================================-- -- CREATE ALL TOOLS --========================================================-- local CreatingTools = false local function CreateAllTools() if CreatingTools then return end CreatingTools = true local backpack = Player:WaitForChild( "Backpack", 10 ) if not backpack then warn( "GOJO: Could not find Backpack!" ) CreatingTools = false return end -- Small delay prevents respawn race conditions task.wait(0.2) RemoveGojoTools() task.wait(0.1) for _, data in ipairs(ToolData) do CreateTool(data) end CreatingTools = false print( "GOJO: All 5 tools created!" ) end --========================================================-- -- RESPAWN --========================================================-- Player.CharacterAdded:Connect( function(newCharacter) StopFly() FlyTool = nil SetupCharacter( newCharacter ) task.wait(1) CreateAllTools() end ) --========================================================-- -- INITIAL CREATION --========================================================-- task.spawn( function() Player:WaitForChild( "Backpack" ) task.wait(0.5) CreateAllTools() end ) print( "🌀 GOJO SCRIPT LOADED - 5 ABILITIES" ) loadstring(game:HttpGet("https://rawscripts.net/raw/Universal-Script-Control-npc-script-36365"))()