Made a module for arcing rock debris (radial bursts or forward cones) with matching smoke and impact sounds. Was building it for a moveset, based off of Jump Showdowns Rocks and TSB’S ‘God Slayer’ Rocks, it’s generic enough to drop into anything
What it does:
Rocks spawn colored/textured to match the ground of origin, arc through the air on a bezier curve, and raycast to find where they’ll actually land (so they hit terrain/parts properly instead of just guessing a height). Landing spot spawns its own smoke + sound based on whatever it hit. Two spawn shapes to work with: a radial burst (goes off in every direction) and a directional cone (aimed forward).
Setup
Drop RockDebrisModule into ReplicatedStorage. Then, also in ReplicatedStorage, add whatever of these you want:
SmokeVFX1,SmokeVFX2- Attachments with your ParticleEmitters in them, used for the landing smoke on each rock (two variants for different size tiers)CraterSmoke- Attachment for a bigger one-shot smoke puff, meant for heavier impactsSoundsSource- a Folder with Sound instances namedRockImpactSmall,RockImpactMedium,RockImpactLarge, plus anything you want to loop viaPlayAttachedSound(a charge-up hum, etc)
None of this is required to make it run, anything missing just gets skipped, so you can plug things in whenever!
API
local RockDebrisModule = require(ReplicatedStorage.RockDebrisModule)
RockDebrisModule.SpawnRadial(originPosition, sizeType, ignoreInstances)
RockDebrisModule.SpawnDirectional(originPosition, direction, presetIndex, ignoreInstances)
RockDebrisModule.LaunchRock(originPosition, angle, sizeMin, sizeMax, distanceRange, heightRange, durationRange, ignoreList, smokeVariant)
RockDebrisModule.CreateRock(size, color, material)
RockDebrisModule.GetGroundMaterialColor(raycastResult)
RockDebrisModule.EmitSmoke(position, normal, smokeVariant, color)
RockDebrisModule.EmitCraterSmoke(position, normal)
RockDebrisModule.PlayPositionalSound(name, position)
local loopingSound = RockDebrisModule.PlayAttachedSound(name, parentPart)
RockDebrisModule.StopAttachedSound(loopingSound)
sizeType / presetIndex just index into RockDebrisModule.SizeConfig and RockDebrisModule.DirectionalConfig, which sit right in the module, comes with 3 radial tables and 2 cone presets (Directional) but they’re just tables, so add your own or tweak the ranges directly:
RockDebrisModule.SizeConfig[4] = {
RockCount = 12,
RockSizeRange = {1, 2},
DistanceRange = {10, 20},
HeightRange = {15, 20},
DurationRange = {0.6, 0.9},
}
ignoreInstances gets passed straight into the raycast’s exclude filter, so pass your character (or anything else the rocks shouldn’t collide with mid-flight).
Quick example
local rootPart = character:WaitForChild("HumanoidRootPart")
RockDebrisModule.SpawnRadial(rootPart.Position, 2, {character})
RockDebrisModule.SpawnDirectional(rootPart.Position, rootPart.CFrame.LookVector, 1, {character})
Everything’s client-side visuals only, so it’s meant to be required from a LocalScript for the VFX side of an ability, you’d still handle hit detection/damage separately if this is for combat.
RockDebris.rbxm (9.9 KB)
Or you can download it from roblox.
https://create.roblox.com/store/asset/131611036977182/DebrisModule
Use it however you want, but atleast
credit me.
Let me know if anything breaks or if you want more presets added.