Taking commissions--:-- in England

Adi. I script Roblox games & build their UI.

Six years of Luau. Gameplay, interfaces and the systems underneath them. I like the hard stuff: physics, networking, and anything that has to stay smooth with a full server.

Play the demos
LIVE IN ROBLOX 00:00:00 Watch it properly ↗

showreel · TITANrecorded in-game, nothing pre-rendered

the orange thing chasing your mouse is the same leg solver my mech walks on

01

TITAN

My biggest piece so far. It's a short film that plays itself inside Roblox. A giant mech walks through a city in a storm and wrecks it, and it all happens live while you watch. No animation files, nothing pre-rendered. Click a moment to jump to it.

jump to

16scripts working together
~6klines of Luau
0animation files. Every step is worked out live
1clock for everything, so slow-mo slows the rain and rubble too
02

Demos

Six smaller things, each one built to show off a different skill. They're all playable, so if a clip looks fake you can go and check.

01IK · gait · swarm

Procedural Mech

Six legs and not one animation. Every step is worked out on the fly, so it walks over stairs, ramps and whatever else is in the way. Press T and a swarm of spider bots comes pouring out.

How it works

Each leg is an IK chain with a pole so the knees always bend the right way. Feet get planted where the body is about to be rather than where it is, so it never looks like it's sliding. The body tilts to match the ground under its feet.

V wanderT swarmF shootG follow me
02fracture · support

Structural Destruction

Buildings break where you hit them. Knock out enough of the bottom and the rest comes down by itself. Rockets, bombs, a wrecking ball and a meteor storm all run through the same system.

How it works

Parts only get split where the blast actually reaches, with random cut sizes so it looks smashed rather than sliced. Every piece knows what it's resting on, and after each hit I check what's still connected to the ground. Anything that isn't falls.

Click rocketShift+Click bombB wrecking ballM meteors
03verlet · wind · tearing

Tearable Cloth

A curtain and a flag out in a storm. You can grab them, drag them about, slice them up with your mouse, or just walk straight through.

How it works

It's a grid of points held together by constraints, stepped 60 times a second. Wind pushes harder on whatever side is facing it. Stretch it too far and it rips.

Drag grabHold X cut1 2 3 windP drop it
04procedural · biomes

Infinite Worlds

A world that builds itself in front of you as you fly. Lakes, snow, forests, sharp mountains and deserts. Press N and you get a completely new one.

How it works

Height comes from a few layers of noise, then temperature and moisture decide the biome. It's built in small chunks with a strict time limit each frame, nearest to where you're heading first, so it never stutters.

F fly yourselfT time-lapseN new world
05weather · lightning

Living Storm

Sunny to thunderstorm in about ten seconds. The clouds roll in, the street lamps and windows light up, and you can click to drop lightning on the trees.

How it works

One storm value drives the sky, fog, wind, rain and lightning together, so it all changes at once. Every bolt is generated fresh with its own branches, and the thunder arrives late depending on how far away it hit.

1 2 3 weatherClick lightningT day/night
06movement · physics

Momentum Parkour

Grapple, wall-run, dash and slide your way round a timed course. The whole point is keeping your speed up. My best run so far is 15.97 seconds, have a go at beating it.

How it works

The grapple is a real rope, so the swing is proper physics, and I add air control on top. Wall-runs follow the wall with raycasts and tilt the camera with you. The dash leaves afterimages and has two charges.

Hold E grappleShift sprintQ dashC slideEnter restart
03

Try it
yourself.

Everything on this page is in one Roblox game. TITAN, all six demos, the lot. Jump in and break some stuff.

Play on Roblox
[ ]Switch between demos
HHide the menus so you can just watch
TITANSpace to start. X for X-ray, P to pause, F to fly the camera
KSlow cinematic camera on the other demos
04

Under the hood

The stuff players never see but a game can't run without. Less flashy than a giant robot, but it's most of what I actually get hired for.

01Saving that can't be dupedPlayer data that survives crashes and can't be rolled back.DataStore · MemoryStore

Each player's data is locked to one server at a time, so two servers can never load the same profile, which is what most dupe glitches rely on. Every save checks it still owns the lock. Changes are backed up every few seconds, so if a server dies before saving, the next one picks the progress back up.

02Movement anti-cheatSpeed, teleport, fly and noclip checks on the server.ping-aware

Players are checked against their last trusted position with extra slack for their real ping, so laggy players don't get flagged by mistake. Noclip gets caught by casting both ways between positions. Flags build up a score that fades over time, and only a sustained score pulls the player back.

03Combat that feels instantHits show up straight away but the server still has the final say.lag compensation

Effects and hit markers play on your screen the moment you click. The server then rewinds everyone to where you saw them, based on your ping, and checks range, cooldowns and line of sight before the hit counts. The client only ever says what it tried to do.

04Thousands of bulletsA projectile system with a hard limit on frame time.1.5 ms budget

Bullets get processed until the budget for that frame runs out, and anything left over catches up next frame, so nothing gets dropped. Each step casts along the exact path travelled, so fast bullets can't skip through walls.

05CrowdsHundreds of NPCs walking around without bumping into each other.Parallel Luau

The steering runs across several CPU cores at once, with a spatial hash so finding neighbours stays fast however many there are. On the server they're just data, and clients only get tiny updates for the NPCs near them.

06Lean networkingEntity updates packed into raw bytes instead of tables.~23 bytes / update

Positions and rotations get squashed into a few bytes with the buffer API, and only what changed is sent. The client keeps a short history and smooths between updates so movement looks fine even on a bad connection.

07UI built in codeWhole HUDs with springy animations, no plugins.springs

Health bars with a damage trail, ammo counters that pop, menus that slide in, notifications. Everything moves on proper spring physics, so it feels the same at any frame rate, and button sounds pitch up when you click fast.

08Fast lookups"What's near this?" answered on several threads at once.octree

An octree split across worker threads, each with its own copy so they never fight over memory. Big batches of queries get shared out and come back together.

09Clean-up toolsEvents and cleanup so nothing leaks when a player leaves.signals · components

A signal library that doesn't create garbage when it fires, plus a component setup where tagging a part in Studio gives it behaviour, and removing the tag cleans up everything it made.

05

A bit of code

This is the leg solver from TITAN. It's the same idea as the orange chain on this page. Stretch the leg to the target, pull it back to the hip, and repeat until it fits. Then each knee gets turned towards a pole so it bends the right way.

It runs for every leg on every walker, every frame.

Titan/Walker.luau
function Walker.SolveFabrik(joints: { Vector3 }, lengths: { number }, root: Vector3, target: Vector3, poles: { Vector3 })
	local n = #joints
	local total = 0
	for _, length in lengths do
		total += length
	end
	local toTarget = target - root
	if toTarget.Magnitude >= total * 0.999 then
		local dir = safeUnit(toTarget, Vector3.yAxis)
		joints[1] = root
		for i = 2, n do
			joints[i] = joints[i - 1] + dir * lengths[i - 1]
		end
		return
	end
	for _ = 1, 10 do
		joints[n] = target
		for i = n - 1, 1, -1 do
			joints[i] = joints[i + 1] + safeUnit(joints[i] - joints[i + 1], Vector3.yAxis) * lengths[i]
		end
		joints[1] = root
		for i = 2, n do
			joints[i] = joints[i - 1] + safeUnit(joints[i] - joints[i - 1], Vector3.yAxis) * lengths[i - 1]
		end
		if (joints[n] - target).Magnitude < 0.02 then
			break
		end
	end
	for i = 2, n - 1 do
		local a, b = joints[i - 1], joints[i + 1]
		local axisVector = b - a
		local axisLength = axisVector.Magnitude
		local pole = poles[i - 1]
		if axisLength > 1e-4 and pole then
			local axis = axisVector / axisLength
			local vj = joints[i] - a
			local vp = pole - a
			local pj = vj - axis * vj:Dot(axis)
			local pp = vp - axis * vp:Dot(axis)
			if pj.Magnitude > 1e-4 and pp.Magnitude > 1e-4 then
				local angle = math.atan2(axis:Dot(pj:Cross(pp)), pj:Dot(pp))
				joints[i] = a + CFrame.fromAxisAngle(axis, angle):VectorToWorldSpace(vj)
			end
		end
	end
end
06

About me

I'm Adi. I'm 24, I live in England, and I've been writing Luau since I was 18.

I do scripting and UI, on my own. The bits I enjoy most are the ones people tend to avoid: physics, networking, saving, and anything that needs to keep running smoothly when the server's full.

What you get back is typed, organised code that cleans up after itself, so nothing leaks when a player leaves and whoever works on it next can actually read it.

based in
England
my time
--:--
experience
6 years
age
24

what I work with

  • Luau, strict types
  • Parallel Luau and Actors
  • DataStores and MemoryStores
  • Networking and buffers
  • Physics, IK and vector maths
  • Procedural generation
  • UI built in code
  • Anti-exploit
  • Optimising and profiling
07

Got a game?
DM me.

  1. Message me on DiscordTell me what you're making, what you need doing and when you need it by.
  2. We sort out a priceScope and quote are agreed before I start.
  3. I build itYou get clips as I go, so you can see where it's at.
  4. You get the filesOrganised and ready to drop into your game.

Adi

stickman2883

Scripter For Hire

DM for a quote · --:-- in England

Then on Discord: Add Friend, paste it in, send.