I'm trying to make a homing attack and it works fun but I want help to make edits that have been troubling me.... I wish to make the ball/particles in the homing attack center at the torso throughout the whole sequence rather than trail behind the torso like a tail
local player = game:GetService("Players").LocalPlayer
mouse = player:GetMouse()
local jump = false
local charging = false
local homing = false
local speed = 100
local direction = Vector3.new(0, 0, 1)
local lastPosition = Vector3.new(0, 0, 0)
local originPosition = Vector3.new(0, 0, 0)
local lastTarget = nil
local velocity = Instance.new("BodyVelocity")
local spin = game.Workspace.Rushman:Clone()
spin.Name = "Spin"
spin.Anchored = true
spin.CanCollide = false
spin.BackSurface = 0
spin.BottomSurface = 0
spin.FrontSurface = 0
spin.LeftSurface = 0
spin.RightSurface = 0
spin.TopSurface = 0
spin.Transparency = 0
spin.Size = Vector3.new(3.57, 3.57, 3.57)
local hint = Instance.new("Hint")
hint.Text = "Spin Dash: Click and release | Homing attack: Double press spacebar"
function checkSit()
if player.Character == nil then return true end
if player.Character:FindFirstChild("Humanoid") == nil then return true end
if player.Character.Humanoid.Sit == true then return true end
return false
end
function transparent(value, object)
if object == nil then return end
object = object:children()
if #object < 1 then return end
for i = 1, #object do
if object[i].className == "Part" and object[i].Name ~= "Spin" then object[i].Transparency = value else transparent(value, object[i]) end
end
end
function onButton1Down()
local torso = player.Character:FindFirstChild("Torso")
if charging == true or torso == nil or homing == true or checkSit() == true then return end
charging = true
speed = 50
spin.BrickColor = torso.BrickColor
spin.Parent = player.Character
for i = 1, 50 do
if charging == false then return end
if jump == true then break end
speed = speed + 2
spin.CFrame = CFrame.new(Vector3.new(0, 0, 0), direction) + torso.Position - Vector3.new(0, 1.01, 0)
spin.CFrame = spin.CFrame * CFrame.fromEulerAnglesXYZ(-1 * i, 0, 0)
if spin.Parent == nil then spin.Parent = player.Character end
wait()
if i == 1 then transparent(1, player.Character) end
end
if jump == true then transparent(1, player.Character) end
onButton1Up()
end
function onButton1Up()
local torso = player.Character:FindFirstChild("Torso")
if torso == nil or jump == true or charging == false or checkSit() == true then return end
charging = false
lastPosition = torso.Position
velocity.maxForce = Vector3.new(1e+005, 0, 1e+005)
velocity.Parent = player.Character:FindFirstChild("Torso")
for i = 1, speed do
if jump == true or charging == true then break end
if checkSit() == true then break end
speed = speed - 1
local trail = spin:clone()
trail.Transparency = .8
trail.TopSurface = 0
trail.BottomSurface = 0
trail.CFrame = torso.CFrame
trail.Parent = player.Character
game:service("Debris"):addItem(trail, 1)
spin.CFrame = CFrame.new(Vector3.new(0, 0, 0), direction) + torso.Position - Vector3.new(0, 1.01, 0)
spin.CFrame = spin.CFrame * CFrame.fromEulerAnglesXYZ(-1 * i, 0, 0)
if spin.Parent == nil then spin.Parent = player.Character end
velocity.velocity = direction * speed
lastPosition = torso.Position
if i == 1 then transparent(1, player.Character) end
wait()
end
if jump == false or charging == false then
velocity.Parent = nil
spin.Parent = nil
transparent(0, player.Character)
end
end
function onKeyDown(key)
key = key:lower()
local torso = player.Character:FindFirstChild("Torso")
if (key == " ") and jump == false and torso ~= nil then
jump = true
spin.BrickColor = BrickColor.new("Navy Blue")
for i = 1, 15 do
if homing == true or jump == false then break end
spin.CFrame = torso.CFrame * CFrame.fromEulerAnglesXYZ(-.5 * i, 0, 0)
if spin.Parent == nil then spin.Parent = torso end
wait()
if i == 1 then transparent(1, player.Character) end
end
if homing == false then spin.Parent = nil transparent(1, player.Character) end
jump = false
elseif (key == " ") and homing == false and torso ~= nil then
homing = true
jump = false
transparent(1, player.Character)
local target = nil
local distance = 10
local list = game.Workspace:children()
for i = 1, #list do
if list[i].className == "Part" and list[i].Size.magnitude < 6 and list[i] ~= lastTarget and (list[i].Position - torso.Position).magnitude < distance and list[i].Position.y < torso.Position.y then
target = list[i]
distance = (list[i].Position - torso.Position).magnitude
end
end
if target ~= nil then
lastTarget = target
velocity.maxForce = Vector3.new(1e+005, 1e+005, 1e+005)
velocity.Parent = torso
transparent(1, player.Character)
for i = 1, 10 do
if jump == true or (torso.Position - target.Position).magnitude < 4 then break end
spin.CFrame = torso.CFrame * CFrame.fromEulerAnglesXYZ(-.5 * i, 0, 0)
if spin.Parent == nil then spin.Parent = torso end
velocity.velocity = torso.CFrame.lookVector * 100
wait(0)
end
spin.Parent = nil
transparent(1, player.Character)
homing = false
velocity.maxForce = Vector3.new(1e+005, 1e+005, 1e+005)
velocity.velocity = Vector3.new(0, 10, 0)
wait(0)
velocity.Parent = nil
else
originPosition = torso.Position
lastTarget = nil
velocity.maxForce = Vector3.new(1e+005, 1e+005, 1e+005)
velocity.Parent = torso
for i = 1, 10 do
if (torso.Position - originPosition).magnitude > 30 or checkSit() == true then break end
spin.CFrame = torso.CFrame * CFrame.fromEulerAnglesXYZ(-.5 * i, 0, 0)
if spin.Parent == nil then spin.Parent = torso end
velocity.velocity = torso.CFrame.lookVector * 100
wait(0)
end
velocity.Parent = nil
transparent(1, player.Character)
wait(0)
homing = false
spin.Parent = nil
end
end
end
if mouse == nil then return end
if player:FindFirstChild("Message") ~= nil then player.Message.Parent = nil end
hint.Parent = player
mouse.KeyDown:connect(onKeyDown)
mouse.Move:connect(function()
if player.Character:FindFirstChild("Torso") ~= nil then
direction = (mouse.Hit.p - player.Character:FindFirstChild("Torso").Position).unit
direction = Vector3.new(direction.x, 0, direction.z)
end
end)

4 comments
Format your code correctly, that is completely unreadable.
My bad, now its readable
what the heck is all that code O_O
Ever played sonic? It's that homing ball thing he does when he double jumps. I just want to know how to make the ball center around his torso rather than trail behind his torso throughout the whole sequence.