I see in the projectile part creation code that you’re not changing its position from its default (0,0,0) until after the explosion’s been created. Because the part has not yet been positioned properly, the explosion uses the part’s default position and goes off at 0,0,0. Also, you shouldn’t use the second argument of Instance.new() to parent created instances. Parenting new instances should always come last (explanation here).
local Projectile = Instance.new("Part")
Projectile.Anchored = true
Projectile.CanCollide = false
Projectile.Size = vector3.new(5,5,5)
Projectile.BrickColor = BrickColor.new("Really Black")
Projectile.Shape = Enum.PartType.Ball
Projectile.Transparency = 0.8
Projectile.CFrame = CFrame.new(value + Vector3.new(0,0,0)) --// idk what's going on here but ok then
Projectile.Parent = workspace
local Explosion = Instance.new("Explosion")
Explosion.Position = Projectile.Position
Explosion.Parent = workspace
debris:AddItem(Projectile,1)
return Projectile