創刊号Vol.01 · 2026 · Luau

FSTR

Roblox Worksロブロックス作品集

I script Roblox games: movement, systems, UI and full game loops. Five projects, client work, and one AI.

  1. 01Tag!巻頭カラー
  2. 02Draw & Guess Anime!新連載
  3. 03MM2, server rewritten特別編
  4. 04Splitgate demo読切
  5. 05Break Piñatas for Brainrotsギャグ
  6. 06Client work特集
  7. +Eris, AI VTuberおまけ
ドン
Scroll to read
01
第1話巻頭カラーPrivate project · Roblox

TAG!

鬼ごっこ

It's basically tag, but 1v1.

High-speed movement paired with abilities you use to win: speed boosts, invincibility, freeze rays, teleportation and more, for short, intense matches. The movement is Source-style. Bhop, air strafing, surf, ladders, edgebugs: the golden era of CS, inside Roblox.

Movement 01
ギュン
Velocity 0000 u/s Scroll faster. Top 0000
Movement 02
Movement 03
MoveMath.luathe air-strafe math
function movemath.airaccelerate(velocity, wishdir, wishspeed, accel, dt, aircap)
	local capped = wishspeed
	if capped > aircap then
		capped = aircap
	end
	local currentspeed = velocity:Dot(wishdir)
	local addspeed = capped - currentspeed
	if addspeed <= 0 then
		return velocity
	end
	local accelspeed = accel * wishspeed * dt
	if accelspeed > addspeed then
		accelspeed = addspeed
	end
	return velocity + wishdir * accelspeed
end

function movemath.clipvelocity(velocity, normal, overbounce)
	local backoff = velocity:Dot(normal) * overbounce
	return velocity - normal * backoff
end
Match · old footage
Abilities
UI and lobby

The game isn't out yet. The public demo is the movement alone, in a practice arena. The movement controller is 3,254 lines. Click any panel to watch its clip in full.

02
第2話新連載Live on Roblox

Draw &
Guess
Anime!

お絵描き頭脳戦〜 the artists want to be guessed 〜

A live Roblox party game built around 1v1 drawing duels. Each player gets an anime character to draw before the timer runs out, then guesses who the opponent drew. 100+ characters, instant matches, and a full progression loop with chairs, daily rewards and leaderboards.

You draw
They guess
VS
カキカキ
You will draw..
Reveal
本日の勝敗 BOTの勝利 Today's result: the bot wins. It draws too.
Draw…
15.0
BOT Doodleswaking up

Your turn.

Draw the word. Fifteen seconds from your first stroke. A small neural net I trained guesses while you draw. It runs in your browser; nothing is sent anywhere.

  • This page's guesser is a small neural net trained for this site.
  • In the game the canvas runs on EditableImage and strokes replicate as packed buffers.
  • An effort check stops players winning by scribbling.
StrokeCodec.luaa drawing, packed into a buffer
function StrokeCodec.encode(ops: { Op }): buffer
	local total = 0
	for _, op in ops do
		total += opSize(op)
	end
	local b = buffer.create(total)
	local o = 0
	for _, op in ops do
		buffer.writeu8(b, o, op.kind)
		o += 1
		if op.kind == Kind.Brush or op.kind == Kind.Eraser then
			buffer.writeu8(b, o, op.size)
			o += 1
			if op.kind == Kind.Brush then
				o = writeColor(b, o, op.color)
			end
			local count = #op.points // 2
			buffer.writeu16(b, o, count)
			o += 2
			for i = 1, count * 2 do
				buffer.writeu16(b, o, op.points[i])
				o += 2
			end
		elseif op.kind == Kind.Fill then
			o = writeColor(b, o, op.color)
			buffer.writeu16(b, o, op.points[1])
			buffer.writeu16(b, o + 2, op.points[2])
			o += 4
		end
	end
	return b
end
Lobby
Shop

79 modules, about 16,500 lines. Server services, client controllers, shared rules, and tests for the rules.

03
EPISODE:03第参話特別編Commission

再構築、
サーバーサイド

Murder Mystery 2. Entire server side, rewritten from scratch.

You can (not) decompile

I was asked to re-create the whole server side from a decompiled copy of MM2 that only had its client code exposed. I had to wire all of the UI, the game loop and everything in between back to a server that I wrote from nothing. Here is the result.

Clientgiven
  • Decompiled LocalScripts
  • Shop, inventory, trading, emotes UI
  • Item database
Status exposed
0 lines of server code to start from
Serverrebuilt · MM2Server/Modules
  1. MapService603
  2. RoundService598
  3. WeaponService509
  4. EconomyService416
  5. DataService337
  6. PerkService299
  7. CosmeticService274
  8. EliteService244
  9. VoteService228
  10. CoinService196
  11. PlayerService182
  12. MusicService179
24 modules 5,680 lines
Client A
Client B
Round

Two clients, one server. Roles, kills, coins and the victory screen all come from the rewrite.

Shop · all UI wired
Crates
Victory
04
第4話読切Tech demo · Roblox

Splitgatedemo

ポータル

A recreation of Splitgate's portal system. Fully see-through portals, seamless traversal that preserves your momentum, and guns that shoot through them.

Weapons, map and viewmodels are placeholders. The portal system is the part that matters.

In
Out
シュン

Look through one, see out of the other. Walk in at speed, leave at speed.

Any surface
Shots pass through
See-through
PortalShared.luacrossing a portal, and coming out the other side
function portalshared.crossing(portal, p0, p1, offset)
	local plane = portalshared.planeof(portal, offset)
	local l0 = plane:PointToObjectSpace(p0)
	local l1 = plane:PointToObjectSpace(p1)
	if l0.Z >= 0 or l1.Z < 0 then
		return nil
	end
	local span = l0.Z - l1.Z
	if math.abs(span) < 1e-6 then
		return nil
	end
	local u = l0.Z / span
	local hit = l0:Lerp(l1, u)
	if not portalshared.insideoval(portal, hit) then
		return nil
	end
	return u, plane * hit
end

function portalshared.mapcframe(entry, exit, cf)
	return exit:GetPivot() * flip * entry:GetPivot():Inverse() * cf
end

function portalshared.mapvector(entry, exit, v)
	return (exit:GetPivot() * flip):VectorToWorldSpace(entry:GetPivot():VectorToObjectSpace(v))
end
Portal systemlines per script
  1. PortalView1,560
  2. PortalLightmap535
  3. PortalClient400
  4. PortalTraversal396
  5. PortalShared342
  6. PortalServer341
  7. PortalBody321
  8. ViewportWindow282
05
第5話ギャグ4コマLive on Roblox

Break Piñatas
for Brainrots

A full brainrot simulator loop, built solo. Weather and brainrot mutations, a daily wheel, rebirths and a fully working UI.

not the kind of game I'd put in a portfolio normally. but it shipped and it works LMAO
1Hit the piñata.
2A brainrot falls out.
3The weather mutates it.
4Rebirth. Do it all again.
パカーン
Daily wheel
Shop and bank
WeatherService.luarolling the next weather
local function rollWeatherId()
	local roll = math.random() * 100
	local cumulative = 0
	for _, weather in ipairs(Config.Weathers) do
		cumulative += weather.rollWeight
		if roll <= cumulative then
			return weather.id
		end
	end
	return nil
end
Plots
06
特集依頼完了Paid commissions · 2026

Client
Work

Paid commissions for other people's games. This is some of my client work: the clips are the builds I handed over, and the reviews are real messages, screenshotted as sent.

01ShaXD.S.T. · two commissions★★★★★
Duels
Cinematic mode
Grab, throw, ragdoll
Vampire bite
Carry

Two commissions for a group hangout game. The first: grab-and-throw ragdolls, PvP duels, a cinematic camera with black bars, and admin commands tied to group ranks. ShaX came back for a second round: sprint and slide, carrying, vampire bites, a leaderboard, and an existing gun system wired into the new movement.

Review, unedited
I really recommend anyone who has low budget and fstr. Can exactly script for you in an amazing way!!! 5 stars!!!ShaX
02tTelevict! · full-game commission

A four-player TV-crew game, commissioned as twelve priced tasks. Task one, delivered first as a demo: the title screen, settings, and a party lobby where every player is a TV channel, with crew codes, invites and role select.

Review, unedited
Party lobby
Settings
Invites
放送中
THAT IS SO GOOD DUDE. LAWD SEND OVER THAT GAMEPASSt, on seeing the lobby
03humbePapers, Please! · Skorpy Studios
Passport checks
Lobby
Paint your animal

Developer on Papers, Please!, a passport-inspection game published by Skorpy Studios, a community of 50,000+ members where I hold the developer role. Together with one other developer I scripted the whole game: the gameplay loop, round systems, progression, shops and the launch. Everything except the UI design, maps and models.

Review, unedited
You are a great dev, very passionate and motivated, lovely working with you!humbe
04RamzSurvive Buddy in Area 51 · Scary Area 51 Studio

A wave-survival shooter. The job: swap the template monsters for Buddy, the studio's own character, and clean up the code underneath: session-locked saves, a gun bug that drained ammo twice, and hardcoded admin IDs removed. Delivered in a day and a half, paid in full.

After payment
Two players vs Buddy
The hunt
Crates & shop
got the money by the way, it was very nice working with you. if you ever need something else hit me up :)fstr Awesome, will doRamz
おまけ番外編Not Roblox. Mostly.
eris.exe配信中
osu!

Eris

AI VTuber

Heavily inspired by Neuro-sama. Not a chatbot: she has memory, sees the screen, talks, and plays osu! at a high level.

status.txt
  • long-term memory
  • sees the screen
  • real-time lip sync
  • osu! automation

She plays Roblox too.

RoBeats is a rhythm game on Roblox.
This is Eris playing it.

robeats.exeRoblox
RoBeats

つづく

To be continued.

More work is on the way. If you need movement, systems, UI or a whole game loop scripted, reach me by email or Discord.

Back to the cover

奥付 Footage, code and avatar are my own. Built with three.js. The drawing guesser was trained on Google's Quick, Draw! dataset (CC BY 4.0).

FSTR.ONE Cover