How to make cool rocks stuff like gpo

Gpo is a abbreviation of a games name which is Grand Piece Online

2 Likes

And what is that “cool rocks” effect? How does it relate with “gpo”?

2 Likes

When someone uses an ability like in this gif: https://gyazo.com/acea92aa20437d1404c7ccf41c3d21df.
It just represents an impact on the ground, like a crater of some sort

2 Likes

this is very confusing there are multiple scripts I’m confused about where they each go?

4 Likes

I’m pretty sure your supposed to put this script in a part so like if your game has a ground smash then if there was a hitbox maybe with this script it could make a cool rock effect

1 Like

To clear up some confusion, this is the script you copy and paste into a local script,

local ReplicatedStorage = game:GetService("ReplicatedStorage")

local TweenService = game:GetService("TweenService")

local RunService = game:GetService("RunService")

local Debris = game:GetService("Debris")

local Tween1 = TweenInfo.new(.2,Enum.EasingStyle.Linear,Enum.EasingDirection.Out,0,false,0)

local raycastParams = RaycastParams.new()
raycastParams.FilterDescendantsInstances = {workspace}
raycastParams.FilterType = Enum.RaycastFilterType.Whitelist

local Amount,Max = 20, 2.5  ---Amount of rocks and max length upwards
local FirstDuration, RocksLength = .5, 3--- How long it takes to tween and when it goes away
local Cframe,Iteration = workspace.Part.CFrame, 20 --- Where the part spawns and how much it expands outwards

local Angeled360 = 360 / Amount

local RockModel = Instance.new("Model", workspace.World.Visuals)
Debris:AddItem(RockModel, RocksLength + .25)
for Index = 1, Amount do
		--// Calculations
	local SizeCalc = math.sin(math.pi / Amount) * Iteration * 2 * 1.01
	local PositionCalc = Cframe * CFrame.Angles(0, math.rad(Index * Angeled360), 0) * CFrame.new(0, 0, Iteration) * CFrame.Angles(math.rad(45), 0, 0)
	local YAndZ = Max * math.random(50, 120) / 100
	local RandomizedForCalc = 5 + Max * 2
	local RaycastToSet = CFrame.new(PositionCalc.Position) * CFrame.new(0, RandomizedForCalc, 0)
	local Target, Position, Surface = workspace:FindPartOnRayWithWhitelist(Ray.new(RaycastToSet.p, RaycastToSet.upVector * (-RandomizedForCalc * 2)), { workspace.World.Map,})

	local InstancedPart = script.Part:Clone()
	InstancedPart.CanCollide = false
	InstancedPart.Size = Vector3.new(SizeCalc, YAndZ, YAndZ)

	if Target then
		InstancedPart.Color = Target.Color
		InstancedPart.Material = Target.Material
		local Mult = 1
		if Position.Y < PositionCalc.Position.Y then
			Mult = -1
		end
		local MagZX = PositionCalc * CFrame.new(0, (PositionCalc.Position - Position).Magnitude * Mult, 0)
		local ToReturn = CFrame.new(Position, Position + Surface) * CFrame.Angles(math.rad(90), 0, 0)

		InstancedPart.CFrame = Cframe * CFrame.Angles(0, math.rad(Index * Angeled360), 0) * CFrame.new(0, 0, Iteration / 2)
		InstancedPart.Parent = RockModel
		local X, Y, Z = Cframe:components()

		local Ax, Ay, Az, A1, A2, A3, A4, A5, A6, A7, A8, A9 = ToReturn:components()

		local Tween = TweenService:Create(InstancedPart,TweenInfo.new(FirstDuration, Enum.EasingStyle.Quad, Enum.EasingDirection.Out,0,false,0), {CFrame = CFrame.new(ToReturn.Position, CFrame.new(X, Y, Z, A1, A2, A3, A4, A5, A6, A7, A8, A9).Position) * CFrame.Angles(math.rad(math.random(20, 50)), 0, 0)})
		Tween:Play()
		Tween:Destroy()

		coroutine.resume(coroutine.create(function()
			wait(RocksLength)
			if InstancedPart then
				local Tween = TweenService:Create(InstancedPart.Mesh,TweenInfo.new(.5, Enum.EasingStyle.Quad, Enum.EasingDirection.Out,0,false,0), {["Scale"] = Vector3.new(1, 0, 0)})
				Tween:Play()
				Tween:Destroy()

				local Tween = TweenService:Create(InstancedPart,TweenInfo.new(.25, Enum.EasingStyle.Quad, Enum.EasingDirection.Out,0,false,0), {CFrame = InstancedPart.CFrame * CFrame.new(0, -Max * 1.25, 0)})
				Tween:Play()
				Tween:Destroy()
			end
		end))
	else
		InstancedPart:Destroy()
	end
end

then put the local script in startergui/

3 Likes

Can u tell us , What we need to put in workspace for things like workspace.World.Visuals and workspace.World.Map
Are those folders or models ?

1 Like

folders, World is a folder in workspace, map is a folder inside world, visuals is also a folder inside world

2 Likes

Can you explain add a mesh inside of what? since I’m having a trouble understanding them.
also can you make a place and just make it uncopylocked.

2 Likes

great tutorial, however if a dev wants everyone to see the effect, then wouldn’t it only work if its placed in a ServerScript!?

1 Like

Yoo this is nice but there was few problems but I changed it and decided to make it into a module script because I was bored, I also gave you credits I just need your permission to make it public :smiley:
https://www.roblox.com/library/9180223679/RocksModule

3 Likes

I don’t even know what kind of “rock effect” you mean. It just looks like some colored bricks in the image. I wish you’d give some context as to what you’re referring to. Are they animated? If so, please attach a video.

1 Like

Now after adding some people, I think you mean after a jump or something the rocks move outward.

1 Like

by the way how do i put the rocks into the mesh / part i wanted like explosion

1 Like

It’s a crater. New anime games have these when there are explosions and stuff like that

1 Like

i used your script yet it doesnt make any parts into the rock model, do you know why?

1 Like

i figured out the problem well not really after it creates the rockmodel the script breaks i have no idea
why.

1 Like

What is “Cool rocks stuff like gpo?” can you please provide an exampel?

1 Like

it appears the ray cast doesnt detect any part

How could I make this align to surfaces like a wall

1 Like