SIX STAR
What Rockstar actually changed
Eight hands-off previews, breakdowns and post-reveal Q&As on the November 2026 build, sourced below — including IGN's live session with the editor who watched thirty minutes of unscripted open-world play at Rockstar North. Strip away Vice City, the licensed music and the acting, and one design decision runs through every system they demonstrated:
Every binary verb became a legible state — and every piece of that state got its own counterplay. Press-triangle-to-steal became a security tier, a scanner, a toolset, a tracker and a fence. A wanted meter became an information model the police hold about you, where each fact is separately acquirable and separately defeatable. A health bar became a body that records what you ate and whether you slept. One protagonist became two, with a variable between them.
That sentence is the whole design brief, and it is the part that ports. Roblox cannot out-render Rockstar and should not try. But a state machine with counterplay is cheap to build and expensive to invent — Rockstar spent twelve years and a doubled studio inventing these; they are now public, and they are describable in a few hundred lines of Luau each.
The detail that only surfaced in the post-reveal Q&A: there are two reputation systems and they are deliberately not wired together. The wanted system is what law enforcement knows about you. A second, separate criminal profile — internally called the temperament system — is what the world thinks of you, and it scores restraint, not legality. You can be a wanted felon with a clean profile. Almost every game that ships a "karma" bar fuses these two and then cannot make either of them mean anything. See System 08.
Note the last number. Rockstar told previewers they want something players run for "the next decade or more." That is a live-service statement made by a studio that ships a world once every twelve years. It is also the exact seam where a platform that ships weekly gets to compete — see 03.
Decomposed, and rebuilt in Luau
Each card: what Rockstar shipped, the abstraction underneath, how you build it on Roblox, the platform capability that would make it cheap, and the specific move that makes your version better rather than merely cheaper.
The information model of heat
What they shipped
Under the six stars sits a row of small red icons, each a separate fact the police hold: a silhouette (physical description), a clothes hanger (your outfit), a camera (CCTV footage), plus your vehicle and who you are with. A hollow star means a crime is known but the perpetrator is not. Buying a baseball cap in a convenience store removed the description icon and left the clothing icon standing. Burning the getaway car removed the vehicle icon and the pursuit dropped it. Heat is regional and persists — the map shows where you are hot, and cops linger at the scene.
The abstraction
Two orthogonal axes that games have historically collapsed into one bar. Severity (how bad was it) drives how hard they hunt. Identification (what do they know) drives whether they can find you. Every fact has an independent acquisition path, an independent decay clock, and an independent counter-move. That is what turns a chase from a speed test into a puzzle.
The Roblox build
Server-authoritative, one record per (userId, region). Never let the client assert what it
looks like or what it is wearing — that is the exploit surface.
-- ServerScriptService/Heat/Record.luau
-- Severity and identification are separate axes. Most games fuse them; don't.
export type Fact = "Face" | "Outfit" | "Vehicle" | "Camera" | "Partner"
export type Record = {
region : string, -- "boardwalk" | "docks" | ...
severity: number, -- 0..6 how hard they hunt
facts : { [Fact]: number }, -- fact -> unix time it goes stale
}
-- Each fact rots on its own clock. Witnesses forget faces; CCTV doesn't.
local TTL = { Face = 900, Outfit = 600, Vehicle = 1800, Camera = 5400, Partner = 1200 }
-- Hollow star: they are responding, they have nothing. The whole stealth game
-- is "keep the fact table empty", not "outrun the car".
function Record.isHollow(r: Record): boolean
for _, expiry in r.facts do
if expiry > os.time() then return false end
end
return r.severity > 0
end
The disguise half is a server-side appearance signature. Split it so a hat defeats one key and a full change of clothes defeats the other — that asymmetry is the mechanic:
-- Two independent keys => two independently defeatable facts.
local function signature(d: HumanoidDescription): (number, number)
local outfit = 0
for _, slot in { "Shirt", "Pants", "GraphicTShirt" } do
outfit = bit32.bxor(outfit * 31, d[slot])
end
local face = 0
for _, slot in { "HatAccessory", "FaceAccessory", "HairAccessory" } do
for id in (d[slot] or ""):gmatch("%d+") do
face = bit32.bxor(face * 31, tonumber(id))
end
end
return face, outfit
end
Tiered larceny
What they shipped
Vehicles are stratified by security. Old vans yield to a slim jim; high-end cars need a digital key cloner that must be acquired, and some tools only unlock later in the story. A handheld scanner shows a car's security tier, its resale value, and what it costs to register as your own. Stolen cars can carry trackers — some of which ping law enforcement if you drive below a certain speed. You can sell to a fence, or pay to keep it, subject to garage space.
The abstraction
A single verb re-expressed as a four-term expression: information (scan) → capability (do I own the tool) → risk (tracker, time-to-crack, noise) → disposition (fence for cash or register for utility). Note what this buys them for free: a progression curve, an economy sink, a reason to explore, and emergent difficulty during a chase — when the cops are behind you, you take the unlocked sedan, not the perfect one.
The Roblox build
This one is nearly free on Roblox and is the highest ROI port in this document. It needs no new animation, no new art, and no physics work — it is a table and a timer.
-- Attributes on the vehicle model; no bespoke code per car.
-- tier 0 unlocked · 1 slim-jim · 2 hotwire · 3 key-clone · 4 fleet/immobiliser
local TOOLS = {
SlimJim = { maxTier = 1, secs = 3.0, noise = 0.1 },
Hotwire = { maxTier = 2, secs = 6.5, noise = 0.4 },
KeyCloner = { maxTier = 3, secs = 9.0, noise = 0.0 },
}
local function attempt(plr, car, toolName)
local tool = TOOLS[toolName]
local tier = car:GetAttribute("SecurityTier")
if not tool or tier > tool.maxTier then return false, "NEEDS_BETTER_TOOL" end
-- Time is the cost. A chase makes 9 seconds unaffordable, which is
-- the entire point: scarcity of time re-prices every car on the street.
if not Progress.hold(plr, tool.secs, car) then return false, "INTERRUPTED" end
Witnesses.broadcast(car.Position, tool.noise) -- feeds System 01
if car:GetAttribute("Tracker") then Tracker.arm(plr, car) end
return true
end
The scanner is a client-side UI over server-truth attributes — value, tier, tracker-present, registration cost. Ship it as an equippable so the tool itself is a progression gate. Rockstar confirmed on the record that it unlocks through the story and reports both the fence price and the registration price side by side — i.e. the tool's job is to make the disposition choice legible at the moment of theft, not afterwards. Carjacking an occupied moving car still exists and skips the lock tier entirely; the tracker and the heat still apply. Keep that lane open — it is the panic option, and a chase needs one.
The body as a ledger
What they shipped
Previewers photographed a stat page tracking exactly those nine values for both leads. Eating gives a substantial health buff; overeating puts weight on. Gyms accept both characters at once for a "two-for-one" on stat management. Running occasionally surfaces a cardio prompt marked with the same heart and lightning icons Red Dead Redemption 2 used for health and stamina cores. Multi-day benders, oversleeping and being on the run all show up on the character's face and body. This is San Andreas' 2004 attribute bars, rebuilt with twenty years of simulation craft behind them.
The abstraction
A slow-clock state that (a) records past behaviour, (b) is visible on the avatar without any UI, and (c) feeds back into the fast-clock systems — sprint duration, melee damage, recovery rate. The genius is (b): it is a progress bar that other players can read across the room. Every hour invested is legible to strangers, permanently, without a leaderboard.
The Roblox build
Tick on a slow loop, persist to DataStore, project onto the rig. Two integrator variables
(muscle, fat) driven by inputs, then mapped to body scale:
-- 60s tick. Slow clock: this is a diary, not a resource meter.
local function step(s, dt)
local surplus = s.calories - s.burn -- eating vs. moving
s.fat = math.clamp(s.fat + surplus * 2.1e-5 * dt, 0, 1)
local trained = s.gymMinutes > 0 and s.protein > 0.4
s.muscle = math.clamp(s.muscle + (trained and 1.4e-4 or -2e-5) * dt, 0, 1)
s.rested = math.clamp(s.sleepDebt > 0 and s.rested - 3e-5*dt or 1, 0, 1)
end
-- Legible without UI: strangers read your history off your silhouette.
local function project(hum: Humanoid, s)
hum.BodyDepthScale.Value = 1 + s.fat * 0.28 + s.muscle * 0.10
hum.BodyWidthScale.Value = 1 + s.fat * 0.22 + s.muscle * 0.18
hum.WalkSpeed = 16 * (1 - s.fat*0.18) * (0.85 + s.rested*0.15)
end
BodyWidthScale / BodyDepthScale are blunt instruments and layered clothing does not
always fit gracefully across their range. What this needs is body-composition morph weights on the
avatar rig that UGC clothing is authored against — a muscle axis and a mass axis that a creator's
cage deformer respects. Without it, every experience doing body sim either looks wrong or bans
layered clothing, and banning layered clothing means banning the marketplace.The two-body problem
What they shipped
Jason and Lucia are a playable pair with different, equal skill sets — he is ex-military, she is a fighter. You can hot-swap at any moment, in a mission or in the open world, whether they are in the same car or on opposite sides of the map. Time spent together in any shared activity — pool, mini golf, kayaking, shopping, or robbing a bank — feeds the relationship positively. When you play as one, the other lives on and texts you; ignoring the texts degrades the bond slightly. The entire romance layer is explicitly opt-out.
The abstraction
A second body under the player's control creates a tactical resource (split the pursuit, cover fire, one drives while the other shoots) and an emotional resource (a variable that only rises with time spent, and gently falls with neglect). And critically: the design is opt-out, so the players who find it embarrassing never touch it and never resent it.
The Roblox build
Here you do not need to solve the problem — the platform already did. GTA VI is simulating a second player because it has to. You have a second player. Port the bond variable, not the character-switching:
-- Bond is earned by co-presence in ANY activity, not by a dedicated verb.
-- Rockstar's list: pool, mini golf, kayaking, shopping, robbing a bank.
local RATE = { idle = 0.0, travel = 0.6, activity = 1.0, job = 1.6 }
local function tickBond(a: Player, b: Player, dt: number)
local hrp = b.Character and b.Character.PrimaryPart
if not hrp or a:DistanceFromCharacter(hrp.Position) > 60 then return end
local pair = Pair.key(a.UserId, b.UserId) -- ordered, stable
Bond[pair] = math.min(Bond[pair] + RATE[Context.of(a,b)] * dt, CAP)
end
-- The async half: when one is offline, the other can still reach them.
-- Answering costs nothing; ignoring costs a little. That asymmetry is the design.
function Bond.offlinePing(from: Player, toUserId: number, text: string)
Outbox:enqueue(toUserId, { from = from.UserId, text = text, at = os.time() })
Decay:schedule(Pair.key(from.UserId, toUserId), UNANSWERED_PENALTY, 24*3600)
end
The correction the Q&A forced, and it matters: the relationship value is narrative only. "There won't be any gameplay benefits — you're not going to get a buff because you're the sweetest couple in the world, and equally you won't be penalised for not doing that stuff. It'll show up more in the story." And there is a floor: you cannot break them up. Partners in crime, whatever happens.
So the bond is a content selector, not a stat — it chooses which lines, scenes and reactions you get, and it never gates power. That is the correct call and most teams get it backwards. The instant a relationship meter grants a damage bonus, it stops being a relationship and becomes a chore with a face on it, and every player who found it embarrassing now has to grind it anyway. Note also that shared activities still have ordinary mechanical outputs — the gym raises strength whether you go together or alone. It is only the bond value itself that buys nothing.
Coercion without kills
What they shipped
In the demo, Jason aimed a gun at a group of aggressors and did not fire. They reassessed and ran. The crime was still reported and police still responded — but they were responding to a non-violent incident, so the wanted level stayed low. Separately, walking down the street with a rifle out changes how the whole world behaves around you. Threat is modelled as its own input with its own outputs, not as a failed attack.
The Q&A added the rung below that one. Walk past a pedestrian, have them turn and say something, and the contextual prompt offers diffuse or provoke. And the focus trigger is explicitly no longer an aim button: "hitting that left trigger doesn't automatically mean you pull out a gun and shoot someone, or pull out a gun and aim — it means there is a bigger range of options." The ladder now runs diffuse → ignore → provoke → brandish → aim → fire, and only the last rung is the one Roblox cannot ship.
The abstraction
A middle rung on the escalation ladder that most games skip entirely. It converts the question from "can I win this fight" to "what is the cheapest way through this room" — and cheapness is measured in the currency of System 01. This is, quietly, the best mechanic in the whole preview cycle.
The Roblox build
Give NPCs a two-term appraisal — can I get hurt and do I have an out — and let the outcome write a differently-weighted entry to the heat ledger.
-- The escalation ladder, priced. Each rung writes a different heat row.
local RUNG = {
Diffuse = { severity = 0, facts = {}, temperament = 1 },
Presence = { severity = 0, facts = { "Face" } },
Brandish = { severity = 1, facts = { "Face", "Outfit" } },
Aim = { severity = 2, facts = { "Face", "Outfit" } },
Discharge = { severity = 4, facts = { "Face", "Outfit", "Camera" } },
}
local function appraise(npc, threat)
local exposure = threat.aimedAtMe and 1 or 0.3
local out = Nav.hasEscape(npc, threat.from) and 1 or 0.2
local nerve = npc:GetAttribute("Nerve") -- 0..1, per-archetype
if exposure * out > nerve then return "Comply" end
return Nav.hasCover(npc) and "Cover" or "Fight"
end
The reactive crowd
What they shipped
An entire development team in Los Angeles dedicated solely to pedestrian behaviour. Over a decade of field research in Miami. Fifty commissioned artists so no two pieces of street art repeat. Crowds that react to a drawn weapon, comment on your appearance, and phone in crimes police did not witness. And a focus interaction — hold to target a person or a dog, get a contextual menu (scold, pet, study) — which is the mechanism that turns a crowd from scenery into surface area.
The Q&A sharpened this. Rockstar staffs a team whose entire job is writing NPC dialogue, and the reported effect is the absence of the thing every open world does — you never hear the same conversation twice walking down one street. NPCs react differently to Jason than to Lucia. And eavesdropping is a verb: stop and listen to a conversation and the participants have something to say about that.
The abstraction
Two separable things, and only one of them is expensive. Density and variety cost money and memory. Perception, opinion and a reporting channel cost almost nothing — and they are what actually produces the feeling of a world that notices you. Most Roblox experiences spend their budget on the first and ship none of the second.
The Roblox build
Do not run a per-NPC brain. Run a coarse "who can see what" pass in parallel Luau, and let everything else be an animation on top of that signal.
-- Witnesses/Perception.luau — inside an Actor, task.desynchronize()'d.
-- Budget: one cone test per witness per 250ms, sliced across frames.
local function canSee(eye: CFrame, at: Vector3, cosFov: number, range: number)
local to = at - eye.Position
local d = to.Magnitude
if d > range then return false end
if eye.LookVector:Dot(to / d) < cosFov then return false end
return workspace:Raycast(eye.Position, to, OCCLUDERS) == nil
end
-- A witness does not chase. It writes one row and forgets you.
-- Cheap, and it is the only thing the player can feel.
local function onIncident(w, subject, kind)
if not canSee(w.eye, subject.pos, w.cosFov, w.range) then return end
local delay = w.timid and 8 or 2 -- time to get the phone out
Heat.report(subject.userId, kind, Facts.forDistance(w, subject), delay)
end
Density is a separate, purely budgetary problem: instanced meshes, aggressive LOD, a shared
animation clock per archetype, and StreamingEnabled tuned so the crowd radius is smaller than
the visual radius. Distant "pedestrians" do not need to be Humanoids and should not be.
The same argument applies to the barks. Rockstar pays a standing team to write them; you can run a moderated community line pool — players submit, a filter and a human queue clear them, accepted lines credit their author in the subtitle. Rockstar's dialogue budget is a cost line. Yours is a content loop with attribution as the currency.
The legible HUD
What they shipped
A minimal HUD: six stars, a row of small icons for what the police know, a weapon wheel, an item wheel, and separate bank and wallet balances. Previewers singled it out unprompted — when the pair burned their car, the car icon vanished from the HUD and the pursuit visibly dropped it. Cause and effect, communicated in one icon, at 90 mph, with no text.
The abstraction
The counterplay in System 01 only exists if the player can see which fact they just defeated. An invisible state machine is not a mechanic; it is a bug report. This is the step teams skip, and skipping it is what makes deep systems feel like randomness.
The Roblox build
- One icon per fact, and it disappears the instant the fact does. The disappearance is the reward. Animate it — a 200ms flash and fade is worth more than the underlying feature.
- Hollow vs. filled is the most important distinction on the screen. Hollow means "they're coming but they don't know it's you," which is a completely different emotional state from being hunted, and it needs a completely different silhouette.
- Mobile first. The icon row must read on a 6" screen held in landscape with two thumbs covering the bottom corners. Test at 360×640 before you test at 1080p.
- No numbers. GTA VI shows no percentages anywhere in this system. Neither should you.
The temperament ledger
What they shipped
A system Rockstar first showed as "temperament" and now calls the criminal profile. It is an evolution of Red Dead Redemption 2's honor meter, and it is explicitly not connected to the wanted system — a bad criminal profile does not put police on you. What it scores is how you behave inside a situation, not whether the situation was legal.
The stated test is avoidability: acting in self-defence is one thing; escalating a situation you could have walked away from is another. Inputs run all the way down to the trivial — putting litter in a bin rather than on the pavement, feeding an animal. A small positive icon acknowledges a gain. And Rockstar has explicitly closed the RDR2 exploit where you could greet and pet your way back to sainthood after a massacre.
The abstraction
Two independent reputations. One models what an institution knows (System 01: acquirable, defeatable, expiring). The other models what a population believes — slow, ambient, hard to launder, changing the tone of the world rather than its threat level. Fusing them is the classic mistake: a single karma bar that both summons guards and changes dialogue ends up doing neither convincingly, because the counterplay for one ruins the other.
The Roblox build
Score the gap between the force available and the force used, gated on whether an exit existed. That one expression is most of the system.
-- Temperament.luau — slow, ambient, laundering-resistant.
-- Never touches pursuit. It changes what the world SAYS, not what it DOES.
local function score(ev): number
if ev.threatenedFirst then return 0 end -- self-defence is free
if not ev.hadAnExit then return -0.2 * ev.force end -- cornered, discounted
return -1.0 * (ev.force - ev.forceNeeded) -- avoidable escalation
end
-- Anti-cheese: RDR2 let you pet a dog back to sainthood.
-- Rate-cap the trivia, and never let it fully repair harm.
local TRIVIA_CAP_PER_HOUR = 0.05
function Temperament.apply(plr, ev)
local d = score(ev)
if d > 0 then d = math.min(d, Budget.remaining(plr, TRIVIA_CAP_PER_HOUR)) end
local t = math.clamp(Profile[plr].temperament + d, Harm.floor(plr), 1)
Profile[plr].temperament = t
Dialogue.setRegister(plr, t) -- the ONLY consumer, by design
end
The getaway goes multi-modal
What they shipped
Streets are deliberately narrower than in any previous GTA and traffic is far denser. Nelson's stated consequence is that the series' reflex answer to a chase no longer reliably works.
Nelson himself got side-swiped while demoing it. Rockstar expects an adaptation period for returning players — which is a remarkable thing for a studio to say out loud about its own core verb.
The abstraction
Congestion as a design tool. Density is not set dressing — it is a debuff on the dominant strategy, applied environmentally rather than by nerfing anything. Remove the reliable escape and the pursuit becomes a routing problem across movement modes with different profiles: the car is fast but legible and blockable; the scooter threads traffic but leaves you exposed; on foot you are slow, but you go where no vehicle follows and you are much harder to describe.
The Roblox build
Read this one twice — it is the best news in these transcripts for a Roblox team. The pursuit game just moved off the axis Roblox is worst at (vehicle handling feel, where Rockstar hired race drivers) and onto axes Roblox is genuinely fine at: foot navigation, verticality, alley networks, small scooters with trivial physics, and crowds to disappear into.
- Author the alley graph deliberately. The back-alley escape only exists if somebody drew it. Treat pedestrian-only connectivity as a first-class map layer with its own review pass — it is the layer that makes the whole system work and it is invisible in screenshots.
- Traffic density as a per-region tunable, not a global. Congestion is how you author difficulty per district without placing a single enemy.
- Scooters are the sweet spot. Simple physics, low mass, no handling model to lose at, and they thread gridlock that stops a car — the highest fun-per-engineering-hour vehicle you can ship, and the one Rockstar just endorsed.
- Tie movement mode to the fact table. On foot in a crowd, the Face fact should decay faster; in a car the Vehicle fact dominates. Movement mode is an identity strategy, and that link is what fuses Systems 01 and 09 into a single decision.
Dress code as access
What they shipped
Three things that only connect once you see them together. Clothing stores are distributed across the map with region-exclusive stock, explicitly to push exploration. Interiors are broadly enterable and, per the Q&A, "more than ever before you can rob any business you want." And access to premium venues is gated on presentation — the analogy offered for how a locked venue would read in-world was turning up to an exclusive club in sweatpants and being refused at the door.
Meanwhile that same wardrobe is the counterplay to the Outfit fact in System 01, and a convenience-store baseball cap is the counterplay to the Face fact. One slot, three jobs.
The abstraction
Identity (what witnesses can describe), access (which doors open), and expression (what you chose to look like). Games normally give clothing only the third job, which is exactly why cosmetics feel weightless — and why players who buy them stop caring about them.
The Roblox build
-- One wardrobe, three consumers, one signature.
Access.check(door, plr) -- access: does this venue admit this outfit?
Heat.signature(plr) -- identity: what can a witness describe?
Dialogue.register(plr) -- expression: how does the street greet you?
-- Dress code as a TAG test, never an allowlist of asset ids —
-- so a UGC item uploaded tomorrow works at the door with no patch.
local function admits(venue, desc): boolean
local tags = Catalog.tagsOf(desc) -- "formal" | "beachwear" | "obscures-face"
return tags[venue.requires] == true and not tags[venue.forbids]
end
Where you win, where you lose, where competing is a trap
Porting the systems is table stakes. The reason to do it on Roblox is that four of Roblox's structural properties make these specific systems better — and one of them is worth more than everything else on this page.
The marquee move: functional clothing
GTA VI's heat system consumes outfits. Change your clothes, defeat a fact. The supply of outfits is bounded by Rockstar's art team — a few hundred SKUs, authored once, priced in fictional dollars.
On Roblox, the supply of outfits is the entire UGC catalog, authored by millions of people, priced in real money, restocked hourly.
Wire the disguise system to marketplace items and Roblox's clothing catalog stops being cosmetic and becomes consumable gameplay equipment with a demonstrable in-game function. A hat is no longer a hat; it is a partial identity reset. Nobody has to invent the content pipeline, the creator incentives, the payment rails or the moderation — all four already exist and none of them exist for Rockstar. This is the one idea on this page that is not a port. It is only available here.
And the later previews widened it. Rockstar also gates premium venues on what you are wearing, and stocks region-exclusive clothing to push exploration. So one wardrobe slot does three jobs at once — identity, access and expression (System 10). Every one of those three is a functional reason to buy a catalog item, and the catalog restocks itself hourly without you commissioning anything.
Structurally in your favour
- UGC supply. Infinite disguise SKUs with real economics behind them (above).
- Real multiplayer. The heat information model wants human witnesses, human fences, human snitches. Rockstar simulates all three.
- Persistence. Heat, bond and body carry across sessions and servers. GTA's carry across a save file.
- Cadence. You retune the fact-decay table on Tuesday. They retune it in a title update, quarterly, if at all.
- Distribution. Free, mobile, no console, no age gate at 70 dollars. The addressable audience for "GTA-shaped" is enormously larger than the audience that can buy GTA.
- Portable identity. The avatar the body sim shapes is the same one they wear everywhere else on the platform.
- The escape moved off-road. Dense traffic and narrow streets mean the getaway is now feet, alleys and scooters as often as it is a fast car (System 09) — which pulls Roblox's single worst gap off the critical path.
Structurally against you
- Fidelity. Lighting, materials, density at that draw distance — not close, and the gap is not closing.
- Animation budget. Rockstar's transitions, hand-holding, door-holding, cover blends are thousands of authored clips.
- Writing and performance. Cast, capture, direction. Do not attempt.
- Licensed audio. Depeche Mode is not in your budget and is a real part of why their montage lands.
- Vehicle feel. They hired race drivers for the handling model. You have
BasePartphysics and network ownership. - Memory ceiling. Their target is a base PS5. Yours is a five-year-old Android.
Three traps
The architecture underneath all seven
Six systems out of seven reduce to the same shape: a server-authoritative record, a slow reconciliation loop, a cheap perception pass, and a projection onto the client. Build that spine once.
| Concern | Where it lives | Why there |
|---|---|---|
| Heat record (severity + facts) | Server memory, authoritative | Client never asserts identity or wanted state. This is the primary exploit surface — a client-trusted heat value means every chase is skippable. |
| Cross-server heat | MemoryStoreService sorted map, keyed userId:region, TTL'd |
Heat should follow you into the next server for its natural lifetime, then expire on its own. TTL semantics mean you never write an expiry job. |
| Durable ledger (body, bond, garage) | DataStoreService, versioned schema, write-behind |
Slow clock, low write rate. Batch on a 60–120s cadence plus BindToClose; never write per tick. |
| Manhunt broadcast | MessagingService topic per region |
Lets other servers surface "someone is hot in the docks" without polling a store. |
| Perception (cones, occlusion) | Actor + task.desynchronize(), sliced |
Embarrassingly parallel, and the single biggest CPU line item. Slice it across frames with a fixed budget rather than a fixed rate. |
| Vehicle motion | Client network ownership + server plausibility check | Ownership for feel, a coarse server-side speed/teleport sanity check for integrity. Do not attempt full server authority on physics. |
| Appearance signature | Server, from HumanoidDescription |
Recompute on every appearance change; cache the two hashes. Cheap, and it must be untouchable. |
| Temperament (criminal profile) | Server, durable, write-behind — separate store from heat | Different clock, different consumers, different lifetime. Sharing a table with heat is how the two systems end up accidentally coupled and both become meaningless. |
| Dress-code checks | Server, tag test against catalog metadata | Tags, never asset-id allowlists — an allowlist stops working the week after launch as the catalog moves under it. |
| Movement mode | Server-observed, feeds fact decay rates | On foot in a crowd the Face fact should rot faster than in a car. This one link fuses Systems 01 and 09 into a single player decision. |
| HUD | Client, driven by one replicated state table | Replicate the whole small record on change rather than eight remotes. Fewer events, no ordering bugs. |
Four rules that will save the project
- Separate severity from identification on day one. Every game that fuses them ends up with a wanted bar and then cannot add disguises later without rewriting the pursuit AI.
- Every fact needs an acquisition path, a decay clock and a counter-move. If you cannot name all three, the fact is decoration. Cut it.
- Slow clocks and fast clocks never share a loop. Body sim ticks at 60s, perception at 4Hz, HUD at frame rate. Fusing them is how you get a 60s stutter.
- Two reputations, two stores, no shared code path. The police ledger expires and is defeatable; the world ledger is slow and laundering-resistant. The moment one reads the other you have a karma bar, and karma bars do not survive contact with players.
- Budget the crowd in agents, not in NPCs. A "pedestrian" 80 studs away is a mesh and an animation clock, not a Humanoid with a brain. Promote to full agent inside the perception radius, demote outside it.
For Roblox platform engineers
The gaps flagged in section 02, collected and ordered. The test for each: does it turn a multi-week studio-specific effort into a call every experience on the platform can make? Ordered by that ratio, not by difficulty.
P0 · Batched perception service
- Vision-cone queries with occlusion, resolved natively against the existing spatial index: "which of these 400 observers can see this point, given FOV and range." Today every studio writes this loop in Luau and then caps crowd size to afford it. Impact: crowd density stops being a CPU decision and becomes an art decision
- Batch API, not per-agent — one call, N observers, M subjects, results as a buffer. The per-call overhead is what actually kills the Luau version, not the raycasts.
- Deterministic and server-side so perception results can safely drive authoritative state.
P0 · Avatar Signature API
- Stable, server-side, tamper-proof hashes of visible appearance, decomposed by region (head/face, torso, legs, accessories) so "a hat defeats one fact, a full change defeats another" is expressible without every studio inventing its own scheme. Two lines instead of two weeks, and consistent across experiences
- Versioned across catalog changes so a signature computed today still compares correctly after an item is re-uploaded or a bundle changes.
- Semantic tags alongside the hashes — formal, uniform, beachwear, obscures-face. This is what lets an experience gate a venue on dress code, or decide that a balaclava defeats the Face fact, against the live catalog rather than a hard-coded list that rots within a month. Small metadata project, outsized payoff — the highest-leverage follow-on to the hashes
- This is the hook that makes clothing functional — and functional clothing is the strongest argument the platform has for why a creator should keep making UGC items. Treat it as an economy feature, not a gameplay one.
P1 · Crowd runtime
- Instanced agents with shared animation clocks and automatic LOD, targeting 300+ visible on a mid-tier Android at 30fps. Not Humanoids; a lighter agent type that can be promoted to a full character on demand.
- Non-allocating navmesh queries — pathfinding that a 300-agent crowd can call every frame without producing garbage.
- Appearance pooling from the catalog, so crowd variety is sourced from live UGC rather than from a studio's authored set. Solves variety and creator demand with one mechanism.
P1 · Body-composition axes on the avatar rig
- A muscle axis and a mass axis as first-class rig parameters that UGC clothing cages
are authored against and deform correctly across, rather than
BodyWidthScalestretching a shirt until it breaks. - Creator-facing preview across the full range in the item pipeline, so fit problems are caught at upload rather than at runtime.
P1 · First-party vehicle controller
- A tuned, predictable handling model with a documented parameter set — the single largest quality gap between a Roblox driving experience and a AAA one, and one every studio currently re-solves badly.
- Server-reconciled network ownership with built-in plausibility checks, so client-side feel does not have to be bought with a speed-hack surface.
P2 · Async player-to-player channel
- An experience-scoped, moderated message queue between players who are not online together — safe by construction, with a re-engagement notification surface. Unlocks every "your partner did something while you were away" mechanic on the platform
- Delivery receipts so an experience can distinguish "unseen" from "ignored" — the asymmetry the bond mechanic in System 04 depends on.
P2 · Dialogue register
- One tone parameter that bark pools, shop greetings and NPC reaction sets all read from, so a temperament or reputation value has somewhere to land without every interaction author wiring it by hand. Cheap to build; it is the difference between a reputation system players can feel and one they never notice.
- A moderated community line pool with author attribution, so ambient dialogue becomes a creator surface rather than a permanent writing cost. Rockstar staffs a standing team for this. The platform's answer should be that it does not have to.
P2 · Spatial cross-server world state
- A TTL'd, region-keyed, conflict-free store — MemoryStore is a KV store that studios are currently bending into a world-state service, one bespoke key-encoding scheme at a time.
- Region subscription so a server learns about heat in its area without polling.
Order of operations for a small team
Sequenced so that each phase is independently shippable and each one produces a measurable signal before the next starts. Assumes 3–5 people and an existing map.
Days 1–20 · The fact table
- Server heat record, severity separated from identification, with per-fact TTLs in a tuning table you can edit without a code deploy.
- Appearance signature, split into face and outfit keys. One hat in the shop. One full outfit. Nothing else.
- The icon row, animated on fact-loss. This is the deliverable — not the heat system. If players do not visibly react to the icon disappearing, the phase failed.
- Hollow state. Commit a distinct silhouette and a distinct music cue to it.
- The alley graph, drawn by hand, in week one. Pedestrian-only connectivity and one district of dense traffic. Escapes on foot have to be viable before any of the rest means anything — this is the map layer that makes the chase a routing problem instead of a speed test (System 09). Signal: share of pursuits that end in a disguise change, not a corner-outrun
Days 21–40 · Witnesses
- Parallel perception pass with a fixed CPU budget, sliced across frames. Instrument it before you tune it.
- Witnesses write facts; they never chase. Resist every temptation to give them a brain.
- The escalation ladder (System 05) — diffuse / presence / threat / escape, with differently priced heat outcomes. No lethal rung. Diffuse must be on the wheel from day one; it is the rung that makes the ladder a choice rather than a delay.
- The temperament ledger (System 08), scoring restraint. One consumer only — the greeting line NPCs use. Ship it with no UI and no number. If players notice the street getting warmer to them without being told why, it works. Signal: share of encounters resolved without the top rung
Days 41–60 · The heist loop and the economy
- Security tiers as attributes, tools as equippables, time-to-crack as the only real cost. The whole system is a table.
- The scanner as an unlockable — information is the first thing the player should have to earn, because it makes the world legible and legibility is retention.
- Trackers. The below-a-certain-speed variant is the best single idea in the vehicle system and costs about forty lines.
- One NPC fence, priced to be obviously worse than the player-run version arriving in phase 4. Signal: sessions containing at least one scan-then-reject decision
Days 61–80 · Two players, one problem
- Bond earned by co-presence in any activity, at different rates. Do not build a dedicated "bond activity" — Rockstar's insight is that kayaking and bank robbery both count.
- The Partner fact. Police who know you work together, and the splitting-up counter-move. This is where the duo stops being a buff and becomes a decision.
- Player fences and player witnesses — turn on the social half of the heat model. Signal: % of sessions with a returning partner from a prior session
Days 81–90 · The body, and the storefront
- Body ledger on the 60s tick, projected to scale and walk speed. Ship it quiet — no stat page in v1, let players discover it.
- Wire the disguise system to real catalog items. The store page for a hat should say what it does. This is the commercial thesis of the whole project; give it a week and a designer.
- One dress-coded venue, gated on catalog tags (System 10). One door, one requirement. It proves the third job of the wardrobe slot and it is the cheapest possible test of whether players will buy an item for a reason other than looking at it. Signal: clothing spend attributable to a heat reset within 10 minutes of purchase
Shipping this to a 13+ audience
Every system in section 02 survives the translation. None of them depend on the crime fantasy — that is the surface Rockstar chose, not the mechanism they invented. Keep the state machines; change the fiction.
| GTA VI surface | The mechanism | Ships as |
|---|---|---|
| Six-star manhunt | Information asymmetry under time pressure | Any pursuit fiction: security in a mall, park rangers, a scavenger hunt with referees, a spy game. The fact table is identical. |
| Grand theft auto | Tiered access + tool progression + disposition choice | Recovering, salvaging, repossessing, restoring. The scanner, the tiers and the trackers all survive verbatim. |
| Brandishing a weapon | Coercion as a rung below violence | Presence, bluff, a tagger, a net, a whistle. Rockstar's own demo beat is the non-lethal one; you are keeping the better half. |
| Romance | A bond variable that rises with co-presence and falls with neglect | Partnership. Crews. Rivals-turned-partners. The mechanic is time-together, and it needs no romantic framing to work — Rockstar made theirs opt-out for the same reason. |
| Fencing stolen goods | A player-run secondary market with risk transfer | Salvage brokers, restoration shops, auction houses. Identical economics. |
| Criminal profile | A restraint score: force used vs. force needed, given an available exit | Ships as-is, and it is a gift. A system that rewards de-escalation, tidiness and kindness to animals is one you would have had to invent for this audience anyway — Rockstar just did the design work and published it. |
| Body simulation | A slow ledger of past behaviour, visible on the avatar | Training, conditioning, fitness. Handle carefully: reward capability, not thinness, and never show a weight number. Ship the strength axis before the mass axis. |
Three things to get right
- Consequence without gore. The tension in the demo comes from the icon row, not from the blood. Losing your car, your outfit and your route is the punishment. It is enough.
- The body ledger is the one with real duty of care. Frame it as capability (endurance, strength, recovery), never as appearance-as-score. No numbers, no comparison, no leaderboard on it. If in doubt, ship the muscle axis and leave the mass axis out.
- The temperament ledger is the compliance argument, not a concession to it. An experience whose scoreboard rewards restraint is easier to defend and better designed than one that merely omits violence. Lead with it.
- Player-as-witness is a social system. The moment a player can report another player for reward, you have built a griefing surface. Cap it, make false reports cost something, and never let a report reveal a target's live position to a stranger.
What tells you it worked
Session length and D1 will move for a dozen reasons. These five are specific enough to falsify the thesis.
- Disguise share. If players still escape by outdriving, System 01 is decoration and the fact row is not legible. This is the primary metric and it is a HUD problem far more often than a systems problem.
- Hollow rate. The share of incidents where the player was never identified. Measures whether a stealth strategy actually exists or whether you shipped one viable line of play.
- Repeat partner rate. The bond variable is worthless if it resets with the session. This is the retention mechanism, not a flavour feature.
- Scan-then-reject. Proof that the scanner made a decision meaningful rather than adding a button press to a thing players already did.
- Attributable clothing spend. The commercial thesis, stated as a number: catalog items purchased for function, within ten minutes of a chase. If this is near zero, functional clothing did not land, and it is the most valuable thing on this page.
- Non-vehicle escape share. Whether the alley graph and the scooters are real or decorative. If everyone still drives away, the traffic is not dense enough and the alleys are not connected enough — both are map problems, not code problems.
- Diffuse uptake. The rung below threat, taken. Low uptake almost always means the prompt is too slow to appear, not that players want the fight.