How do I fix this "Sloppy looking" code?

The code itself works, but it looks sloppy and primitive, but I don’t know how condense it. How do I fix this? (Go to line 275 to see slop)


–Made by Its4Realzies
return function()
–Shortcuts
local sP = script.Parent
local pLR = game.Players.LocalPlayer
local cPLR = pLR.Character

local outer = sP.Outer 
local center = sP.Center

local partGoal = {}
local partColors = {Color3.fromRGB(190, 0, 0), Color3.fromRGB(227, 163, 33), Color3.fromRGB(0, 166, 33), Color3.fromRGB(0, 133, 200)}
--Very handy tween function
local function doTween(tweenedPart, goal, tweenDuration, easingStyle, easingDirection, tweenDelay)
	local tweenService = game:GetService("TweenService")
	local tweeningInformation = TweenInfo.new(
		tweenDuration,		--Length
		easingStyle,	 	--Easing style
		easingDirection, 	--Direction
		0,					--Number of times tween will repeat
		false,				--Should tween repeat
		tweenDelay			--Delay between tweens
	)
	local tween = tweenService:Create(tweenedPart, tweeningInformation, goal)
	tween:Play()
end

--Adds 0.5 and then cuts off the decimal 
local function round(num, mult)
	return math.floor(num / mult + 0.5) * mult
end

--Gravitys
local gravity = Vector3.new(0, -game.Workspace.Gravity, 0)
local xGravityP = Vector3.new(game.Workspace.Gravity, 0, 0)
local xGravityN = Vector3.new(-game.Workspace.Gravity, 0, 0)
local zGravityP = Vector3.new(0, 0, game.Workspace.Gravity)
local ZGravityN = Vector3.new(0, 0, -game.Workspace.Gravity)
local gravitys = {xGravityP, xGravityN, zGravityP, ZGravityN}

--Calculates projectiles trajectory
local function doHop(targetPosition, part, partGravity)
	local startPosition = part.Position
	local Velocity = (targetPosition - startPosition - 0.5 * partGravity) 

	part.Velocity = Velocity
end

--Creates bullet for shooting attacks
local function createBullet(bulletDamage, deletionDelay)
	--Creates bullet
	local bullet = Instance.new('Part', sP.BulletStorage)
	bullet.Material = 'Neon'
	bullet.Transparency = 0
	bullet.Name = "Bullet"
	bullet.CanCollide = false
	bullet.Shape = "Ball"
	bullet.Size = Vector3.new(outer.Size.X/2, outer.Size.Y/2, outer.Size.Z/2)
	bullet.Color = outer.Color
	bullet.CFrame = outer.CFrame
	
	game.Debris:AddItem(bullet, deletionDelay)

	bullet.Touched:Connect(function(t)
		if t.CanCollide and t ~= sP and t.Parent ~= sP then
			bullet:Destroy()
			local h = t.Parent:FindFirstChild'Humanoid'
			if h and t:IsDescendantOf(pLR.Character) then
				game.ReplicatedStorage.DamageEvent:FireServer(bulletDamage)
			end
		end
	end)


	return bullet
end

--Basicly sidways gravity  mortar turrets 
local function doGravityScatter(bulletDamage)

	for i = 1, 4, 1 do
		local currentBullet = createBullet()

		local currentGravity = gravitys[i]
		--Adds bodyForce
		local bodyForce = Instance.new("BodyForce", currentBullet)
		bodyForce.Force = Vector3.new(currentBullet:GetMass() * currentGravity.X, currentBullet:GetMass() * game.Workspace.Gravity, currentBullet:GetMass() * currentGravity.Z)

		--Adds velocity
		doHop(Vector3.new(cPLR.Torso.Position.X, center.Position.Y, cPLR.Torso.Position.Z), currentBullet, currentGravity)
	end 

end


--Infinitely scalable scatter function 
local function doScatter(bulletCount, bulletSpeed, bulletDamage, deletionDelay)
	for i = 1, bulletCount, 1 do
		local currentBullet = createBullet(bulletDamage, deletionDelay) 
		local newBodyVelocity = Instance.new('BodyVelocity', currentBullet)
		newBodyVelocity.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
		newBodyVelocity.P = 1250
		newBodyVelocity.Velocity = Vector3.new(bulletSpeed*(math.sin(2*math.pi*i/bulletCount)), 0, bulletSpeed*(math.cos(2*math.pi*i/bulletCount)))
	end
end

local function doWebDance(bulletCount, bulletDamage)
	
	function getRandomPosition()
		local randomPosition = nil
		repeat
			randomPosition = Vector3.new(outer.Position.X + math.random(-50, 50), outer.Position.Y, outer.Position.Z + math.random(-50, 50))
		until (randomPosition - outer.Position).Magnitude > 5 and math.abs(randomPosition.X) + math.abs(randomPosition.Z) < 70
		return randomPosition
	end
	
	for i = 1, bulletCount, 1 do
		local currentBullet = createBullet(bulletDamage, 100) 
	
		--Creates bodyPosition
		local bodyPosition = Instance.new('BodyPosition', currentBullet)
		bodyPosition.Position = getRandomPosition()
		bodyPosition.D = 300
		bodyPosition.MaxForce = Vector3.new(math.huge, math.huge, math.huge)--Vector3.new(math.huge, math.huge, math.huge)
		bodyPosition.P = 500
	end
	
	--Moves bullets
	local bulletsMoved = 0
	repeat
		wait(2)
		for i, child in ipairs(sP.BulletStorage:GetChildren()) do
			if child.ClassName == 'Part' then
				if bulletsMoved == 0 and child:FindFirstChild('BodyPosition') then
					child.BodyPosition:Destroy()			
				
					local newAttachment0 = Instance.new("Attachment", child)
					newAttachment0.WorldCFrame = CFrame.new(child.Position, sP.Spinner.Position)*CFrame.Angles(0,math.rad(90),0)
				
					local newAttachment1 = Instance.new("Attachment", sP.BulletSpinner)
					newAttachment1.WorldCFrame = CFrame.new(sP.Spinner.Position, child.Position)*CFrame.Angles(0,math.rad(90),0)
				
					local newPrismatic = Instance.new('PrismaticConstraint', child)
					newPrismatic.Attachment0 = newAttachment1
					newPrismatic.Attachment1 = newAttachment0
					newPrismatic.LimitsEnabled = true
					newPrismatic.UpperLimit = 50
				
					newPrismatic.ActuatorType = 'Servo'
					newPrismatic.ServoMaxForce = 10000
					newPrismatic.Speed = 5
				end
				
				if bulletsMoved >= 4 then
					child:FindFirstChild('PrismaticConstraint').Speed = 100
					child:FindFirstChild('PrismaticConstraint').TargetPosition = 10
				else
					child:FindFirstChild('PrismaticConstraint').TargetPosition = (sP.BulletSpinner.Position - child.Position).Magnitude + math.random(-20,20)
				end

			end
		end
		
		print("bulletsMoved")
		bulletsMoved = bulletsMoved + 1
	until bulletsMoved >= 5	
	
end

--Its something... 
local function doMermog(bulletDamage)
	
	function shootMermogBullet(bullet)
		bullet.Anchored = true
		local t = 0 --The percentage of the arch 0=0% 1=100%
		
		local bP = bullet.Position --Start/Beginning position
		local tP = Vector3.new(cPLR.Torso.Position.X, outer.Position.Y, cPLR.Torso.Position.Z) --Target position
		

		local mP = Vector3.new((bP.X + tP.X) / 2, outer.Position.Y, (bP.Z + tP.Z) / 2)	--Midpoint to help find control position
		
		local controlDistance = (tP - bP).Magnitude --change to distance formula later
		print("Control distance is " .. controlDistance)

		
		local x1 = bP.X
		local z1 = bP.Z
		
		local x2 = tP.X
		local z2 = tP.Z
		print("x1 is " .. x1)
		print("z1 is " .. z1)

		
		print("x2 is " .. x2)
		print("z2 is " .. z2)
		
		--local pathSlope = z2 - z1 / x2 - x1
		local pathSlope = (x2 - x1) / (z2 - z1)
		
		local perpSlope = -1 / pathSlope
		
		print("pathSlope is " .. pathSlope)
		print("perpSlope is " .. perpSlope)
		
		
		
		--local newX = mP.X + (controlDistance / 2) / math.sqrt(1 + perpSlope * perpSlope)
		--local newZ = mP.Z + (controlDistance / 2) / math.sqrt(1 + perpSlope * perpSlope)
		--local newX = perpSlope * controlDistance / 4 + mP.X
		--local newZ = (1/perpSlope) * controlDistance / 4 + mP.Z
		local newX = (perpSlope / (perpSlope + 1/perpSlope)) * controlDistance/2 + mP.X
		local newZ = ((1/perpSlope) / (perpSlope + 1/perpSlope)) * controlDistance/2 + mP.Z
		
		print("newX is " .. newX)
		print("newZ is " .. newZ)
		
		print("mPX is " .. mP.X)
		print("mPZ is " .. mP.Z)
		
		local cP = Vector3.new(newX, outer.Position.Y, newZ)
		--[[
		local visual = Instance.new("Part", workspace)
		visual.Anchored = true
		visual.Size = Vector3.new(2, 2, 2)
		visual.Shape = 'Ball'
		visual.BrickColor = BrickColor.new("Black")
		visual.Position = cP
			
		local visual2 = Instance.new("Part", workspace)
		visual2.Anchored = true
		visual2.Size = Vector3.new(2,2,2)
		visual2.Shape = 'Ball'
		visual2.BrickColor = BrickColor.new("Burlap")
		visual2.Position = mP
		]]--	
			
		local stepped 
		stepped = game:service'RunService'.Stepped:connect(function()
			if bullet ~= nil then--and t < 10 then

				local pFinalX = math.pow(1 - t, 2) * bP.X + (1 - t) * 2 * t * cP.X + t*t * tP.X;
				local pFinalZ = math.pow(1 - t, 2) * bP.Z + (1 - t) * 2 * t * cP.Z + t*t * tP.Z;
				t = t + 0.025
				bullet.CFrame=CFrame.new(pFinalX, bP.Y, pFinalZ)

			else 
				print("End reached")
				bullet:Destroy()
				stepped:Disconnect()
			end
		end)
	end
	
	local mBulletsShot = 0
	for i, child in ipairs(sP.BulletStorage:GetChildren()) do
		if child.ClassName == 'Part' then
			if mBulletsShot%4==0 then
				wait(0.5)
			end
	
			--Create reference to a BindableEvent
			local triggerBullet = Instance.new("BindableEvent")
			triggerBullet.Event:Connect(shootMermogBullet(child))
			triggerBullet:Fire()
			
			mBulletsShot = mBulletsShot +1
		end
	end
	
end


--This is the fun part
local function attackSequence()
	
	--Activation
	wait(1)
	partGoal.Size = Vector3.new(6, 6, 6)
	partGoal.Color = partColors[1]
	doTween(outer, partGoal, 1, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out, 1)
	wait(1)
	doScatter(50, 30, 5, 2)
	
	
	--Hop attack 1
	wait(1)
	doScatter(25, 15, 10, 9)
	doHop(Vector3.new(cPLR.Torso.Position.X, center.Position.Y, cPLR.Torso.Position.Z), outer, gravity)
	wait(1)
	doScatter(25, 15, 10, 7)
	doHop(Vector3.new(cPLR.Torso.Position.X, center.Position.Y, cPLR.Torso.Position.Z), outer, gravity)
	wait(1)
	doScatter(25, 15, 10, 5)
	doHop(Vector3.new(cPLR.Torso.Position.X, center.Position.Y, cPLR.Torso.Position.Z), outer, gravity)
	wait(1)
	doScatter(25, 15, 10, 3)
	doHop(center.Position, outer, gravity)

	wait(1.5)
	outer.Color = partColors[4]
	
	--Bullet reverse
	for i, child in ipairs(sP.BulletStorage:GetChildren()) do
		if child.ClassName == 'Part' and child:FindFirstChild('BodyVelocity') then
			child:FindFirstChild('BodyVelocity').Velocity = child:FindFirstChild('BodyVelocity').Velocity * -1
			child.Color = partColors[4]
		end
	end	
	
	--Gravity attack 1
	wait(2.5)
	doGravityScatter(outer, 30)
	wait(1)
	doGravityScatter(outer, 30)
	wait(0.5)
	doGravityScatter(outer, 30)
	wait(0.5)
	doGravityScatter(outer, 30)
	wait(0.25)
	doGravityScatter(outer, 30)
	wait(0.25)
	doGravityScatter(outer, 30)
	wait(0.125)
	doGravityScatter(outer, 30)
	wait(0.125)
	doGravityScatter(outer, 30)
	

	--Hop attack 2
	wait(1)
	outer.Color = partColors[1]
	doScatter(25, 15, 10, 9)
	doHop(Vector3.new(cPLR.Torso.Position.X, center.Position.Y, cPLR.Torso.Position.Z), outer, gravity)
	wait(1)
	doScatter(25, 15, 10, 7)
	doHop(Vector3.new(cPLR.Torso.Position.X, center.Position.Y, cPLR.Torso.Position.Z), outer, gravity)
	wait(1)
	doScatter(25, 15, 10, 5)
	doHop(Vector3.new(cPLR.Torso.Position.X, center.Position.Y, cPLR.Torso.Position.Z), outer, gravity)
	wait(1)
	doScatter(25, 15, 10, 3)
	doHop(center.Position, outer, gravity)

	wait(1.5)
	outer.Color = partColors[4]

	--Bullet reverse
	for i, child in ipairs(sP.BulletStorage:GetChildren()) do
		if child.ClassName == 'Part' and child:FindFirstChild('BodyVelocity') then
			child:FindFirstChild('BodyVelocity').Velocity = child:FindFirstChild('BodyVelocity').Velocity * -1
			child.Color = partColors[4]
		end
	end	

	--Gravity attack 2
	wait(2.5)
	doGravityScatter(outer, 30)
	wait(1)
	doGravityScatter(outer, 30)
	wait(0.5)
	doGravityScatter(outer, 30)
	wait(0.5)
	doGravityScatter(outer, 30)
	wait(0.25)
	doGravityScatter(outer, 30)
	wait(0.25)
	doGravityScatter(outer, 30)
	wait(0.125)
	doGravityScatter(outer, 30)
	wait(0.125)
	doGravityScatter(outer, 30)
	
	--Hop attack 3
	wait(2)
	outer.Color = partColors[1]
	doScatter(25, 15, 10, 15)
	doHop(Vector3.new(cPLR.Torso.Position.X, center.Position.Y, cPLR.Torso.Position.Z), outer, gravity)
	wait(1)
	doScatter(25, 15, 10, 13)
	doHop(Vector3.new(cPLR.Torso.Position.X, center.Position.Y, cPLR.Torso.Position.Z), outer, gravity)
	wait(1)
	doScatter(25, 15, 10, 11)
	doHop(Vector3.new(cPLR.Torso.Position.X, center.Position.Y, cPLR.Torso.Position.Z), outer, gravity)
	wait(1)
	doScatter(25, 15, 10, 9)
	doHop(Vector3.new(cPLR.Torso.Position.X, center.Position.Y + 3.25, cPLR.Torso.Position.Z), outer, gravity)
	wait(1)
	doScatter(25, 15, 10, 7)
	doHop(Vector3.new(cPLR.Torso.Position.X, center.Position.Y + 3.25, cPLR.Torso.Position.Z), outer, gravity)
	wait(1)
	doScatter(25, 15, 10, 5)
	doHop(Vector3.new(cPLR.Torso.Position.X, center.Position.Y + 3.25, cPLR.Torso.Position.Z), outer, gravity)
	wait(1)
	doScatter(25, 15, 10, 3)
	doHop(center.Position, outer, gravity)
	
	wait(1.5)
	outer.Color = partColors[4]

	--Bullet reverse
	for i, child in ipairs(sP.BulletStorage:GetChildren()) do
		if child.ClassName == 'Part' and child:FindFirstChild('BodyVelocity') then
			child:FindFirstChild('BodyVelocity').Velocity = child:FindFirstChild('BodyVelocity').Velocity * -1
			child.Color = partColors[4]
		end
	end	
	
	--Hop attack 4
	wait(2)
	outer.Color = partColors[1]
	doScatter(25, 15, 10, 9)
	doScatter(24, 30, 10, 9)
	doHop(Vector3.new(cPLR.Torso.Position.X, center.Position.Y, cPLR.Torso.Position.Z), outer, gravity)
	wait(1)
	doScatter(25, 15, 10, 8)
	doScatter(24, 30, 10, 8)
	doHop(Vector3.new(cPLR.Torso.Position.X, center.Position.Y, cPLR.Torso.Position.Z), outer, gravity)
	wait(1)
	doScatter(25, 15, 10, 7)
	doScatter(24, 30, 10, 7)
	doHop(Vector3.new(cPLR.Torso.Position.X, center.Position.Y, cPLR.Torso.Position.Z), outer, gravity)
	doScatter(25, 15, 10, 6)
	doScatter(24, 30, 10, 6)
	doHop(Vector3.new(cPLR.Torso.Position.X, center.Position.Y, cPLR.Torso.Position.Z), outer, gravity)
	wait(1)
	doScatter(25, 15, 10, 5)
	doScatter(24, 30, 10, 5)
	doHop(Vector3.new(cPLR.Torso.Position.X, center.Position.Y, cPLR.Torso.Position.Z), outer, gravity)
	wait(1)
	doScatter(25, 15, 10, 4)
	doScatter(24, 30, 10, 4)
	doHop(Vector3.new(cPLR.Torso.Position.X, center.Position.Y, cPLR.Torso.Position.Z), outer, gravity)
	wait(1)
	doScatter(25, 15, 10, 3)
	doHop(center.Position, outer, gravity)
	
	wait(2)
	--Bullet hop
	for i, child in ipairs(sP.BulletStorage:GetChildren()) do
		if child.ClassName == 'Part' and child:FindFirstChild('BodyVelocity') then
			child:FindFirstChild('BodyVelocity'):Destroy()
			child.Color = partColors[3]
			doHop(outer.Position, child, gravity)
		end
	end	
	
	
	wait(1)
	outer.Color = partColors[3]
	wait(0.5)
	doWebDance(100, 10)
	
	wait(2)
	outer.Color = partColors[2]
	--Bullet color
	for i, child in ipairs(sP.BulletStorage:GetChildren()) do
		if child.ClassName == 'Part' then
			child.Anchored = true
			child.Color = partColors[2]
		end
	end	
	
	doMermog(10)	
	
end

wait(1)
attackSequence()

end


Please move this to #help-and-feedback:code-review and you might get a faster response.

1 Like

I think that a lot of what seems sloppy can be fixed with a for loop that decreases the final argument in the doScatter function by 2 each time and runs its accompanying doHop function.

1 Like

There are websites that make your code beautified. Consider this one: Lua Beautifier - Best Lua Beautifier | GoOnlineTools

Also, for future reference, you might want to post this in #help-and-feedback:code-review like @Grayseon said

1 Like