You can write your topic however you want, but you need to answer these questions:
- What do you want to achieve? Keep it simple and clear!
The tornado doing more damage
The tornado only sucks up a few parts, and I need it to be a lot more destructive
I didn’t change the script between now and when I attached a billboard gui tornado to my script. I’m not sure what changed, but I looked around to see if I accidentally changed anything, and it all looked normal.
After that, you should include more details if you have any. Try to make your topic as descriptive as possible, so that it’s easier for people to help you!
-- This is an example Lua code block
![]()
Hazard script:
local tor = script.Parent
local debounce = true
local attackrange = 100
local near = coroutine.resume(coroutine.create(function()
while wait() do
local region = Region3.new(
Vector3.new(tor.Position.X - tor.Size.X/2 - attackrange, tor.Position.Y - tor.Size.Y/2 - attackrange, tor.Position.Z - tor.Size.Z/2 - attackrange),
Vector3.new(tor.Position.X + tor.Size.X/2 + attackrange, tor.Position.Y + tor.Size.Y/2 + attackrange, tor.Position.Z + tor.Size.Z/2 + attackrange)
)
local parts = workspace:FindPartsInRegion3(region)
for i,p in pairs(parts) do
if p:IsA("BasePart") and p.CanCollide == true and p:GetMass() < 1000000 then
if not p:FindFirstChild("TornadoSuckingForce") then
-- enssential stuff
local bp = Instance.new("BodyPosition")
bp.Name = "TornadoSuckingForce"
bp.MaxForce = Vector3.new(2000 * p:GetMass(), 2000 * p:GetMass(), 2000 * p:GetMass())
bp.Parent = p
-- this will let the parts handle itself, instead of a whole script handling everything to reduce lag
local torvalue = Instance.new("ObjectValue")
torvalue.Name = "WhichTornado"
torvalue.Value = tor
torvalue.Parent = p
local scr = script.SuckingScript:Clone()
scr.Parent = p
scr.Disabled = false
-- extra stuff
local bav = Instance.new("BodyAngularVelocity")
bav.Name = "SuckingRotation"
bav.MaxTorque = Vector3.new(4000 * p:GetMass(), 4000 * p:GetMass(), 4000 * p:GetMass())
bav.AngularVelocity = Vector3.new(math.random(1,25), math.random(1,25), math.random(1,25))
bav.Parent = p
end
end
end
end
end))
Sucking script:
local sp = script.Parent
repeat
wait()
until sp:FindFirstChild("WhichTornado")
local tor = sp:FindFirstChild("WhichTornado").Value
local bp = sp:FindFirstChild("TornadoSuckingForce")
local bav = sp:FindFirstChild("SuckingRotation") -- Assuming you want to keep rotation
sp.Anchored = false
sp:BreakJoints()
game.Debris:AddItem(sp,9999) -- Lifetime of the debris
-- Create BodyForce for upward and outward push
local bf = Instance.new("BodyForce")
bf.Name = "TornadoLaunchForce"
bf.Parent = sp
local height = 0
local maxSuckHeight = 1
repeat
-- Calculate the relative position to the tornado's center (on the Y axis)
local relativeY = sp.Position.Y - (tor.Position.Y - tor.Size.Y / 2)
-- Calculate outward force based on height (further up, more outward)
local outwardStrength = relativeY / maxSuckHeight * 5 * sp:GetMass() -- Adjust multiplier as needed
local outwardDirection = (sp.Position - tor.Position) * Vector3.new(1, 0, 1) -- Project onto XZ plane
if outwardDirection.Magnitude > 0 then
outwardDirection = outwardDirection.Unit * outwardStrength
end
-- Apply upward force (constant or increasing with height)
local upwardStrength = 200 * sp:GetMass() + (relativeY / maxSuckHeight * 25 * sp:GetMass()) -- Adjust multipliers
local upwardForce = Vector3.new(0, upwardStrength, 0)
bf.Force = upwardForce + outwardDirection
-- Update BodyPosition to guide towards the center with a radial offset
local radialOffset = tor.Size.X/0.75 + height/75
local targetPosition = (CFrame.new(tor.Position - Vector3.new(0, tor.Size.Y/2, 0)) * CFrame.Angles(0,math.pi*2*((tick()/5)%1),0) * CFrame.new(radialOffset, height, 0)).Position
bp.Position = targetPosition
height = height + (tor.Size.Y/25*0.5) -- aka 2% of it's Y size
wait()
until height >= maxSuckHeight -- Use >= to ensure it finishes even if height slightly exceeds
bf:Destroy()
bav:Destroy()
bp:Destroy()
If I need to include more, such as how the bbguis are attached, I can.
the locator gui is just a bbgui attached to the part without any scripts, so I can see the tornado if the bbguis glitch out.

