ROBLOX Virtual Store

The ROBLOX Virtual Store was a mini project (done in 9 hours actually) to recreate the shirts in the store onto ROBLOX, and a small place to sell them in. Also made them R15-proof in terms of outlines on the bevels, which is currently an issue with the existing R15 models.
Displays have the shirt, a R6 model, an R15 model, and a buy button. Not much else to say.

Place: Roblox Virtual Store - Roblox


Didn’t expect them to be alive, it sure gave me a spooky.

Love the place, very nice.


Wow that’s great.
I have a few questions:
1)How did you get the characters to move like that?
2)How do you make the sound fade as you walk away. That’s a great touch and I’ve been looking into how I could do it myself.

I have the rigs existent on the server, and I load the animations on the client.

I actually didn’t upload them myself. @berezaa uploaded the songs (all 4 are by Tobu), and he uploaded them with faded audio. He probably used Audacity or a program like that, as I would also.

Ok thanks. How does it as you walk further away from the store make the sound go away though?

Oh. Thank.
That is a fancy bit of logic I figured out.
If the user in in a set of bounds that is the store: Full volume.
If not, fade out the volume based on the distance from the door.

Sounds tricky. But nifty.

It actually isn’t. If you want to repurpose the code, here it is:

local Corner1,Corner2 =,6.3,-32.2),,23,18.2)
local Enterance =,9.5,-7)
local Camera = game.Workspace.CurrentCamera
local MaxVolume = 0.1

local Songs = {

local X1,Y1,Z1,X2,Y2,Z2 = Corner1.X,Corner1.Y,Corner1.Z,Corner2.X,Corner2.Y,Corner2.Z

local function PosInBound(Pos)
return (Pos.X > X1 and Pos.Y > Y1 and Pos.Z > Z1 and Pos.X < X2 and Pos.Y < Y2 and Pos.Z < Z2)

local function Lerp(S,E,A)
if A < 0 then return S end
return S + (E-S)*A

local Music =“Sound”)
Music.Parent = game.Workspace
Music.Volume = 0
Music.Parent = game.Workspace

local SongId = math.random(1,#Songs)
local function PlayNextSong()
Music.SoundId = Songs[SongId]
SongId = SongId + 1
if SongId > #Songs then SongId = 1 end

while true do
local CamPos = Camera.CFrame.p
if PosInBound(CamPos) then
Music.Volume = MaxVolume
local Mag = (CamPos - Enterance).magnitude
Music.Volume = Lerp(0,MaxVolume,1 - (Mag/50))

1 Like