Flood
A Roblox battle royale where the water rises and the last structure standing wins.
Flood (place flood_roblox, design codename “Flood Reborn”) is a survival battle royale for Roblox by Estúdio Crivy, written in strict Luau and synced to Roblox Studio with Rojo, in which players build a structure during a short prep phase, the water rises, and the last player standing wins.
Roblox game · Luau · Rojo · battle royale · flood survival · building · game design document · kid-safe
Status: rebuild in progress
The repo is being rebuilt from scratch. 22 design decisions are closed in docs/GDD.md. The code in src/ is a small, tested core. Most of the old game (weapons, building, economy, admin) exists only as legacy reference code in reference/legacy/, not as the running app.
| Area | State |
|---|---|
Two-phase boot with failure isolation (Loader) |
Working, tested |
Central, name-checked remotes (Net) |
Working, tested |
| Game-feel feedback (camera shake) end to end | Working, tested |
Gameplay constants (Config) |
Defined |
| Water / Game Director, building, weapons, boats, economy, bots | Designed in the GDD, not ported yet |
| Telemetry and admin panel (GDD Decision 019) | Existed in legacy code, not rebuilt yet |
Game design (from the GDD)
These are approved design decisions, not shipped features.
- “Last one standing.” The water is the closing circle. Building and boats are tools for a competitive edge (Decision 001).
- Build only in prep. Building happens only before the flood; during the round you can only repair and adjust (Decision 002).
- Snack-sized rounds. Ages 8-14, rounds of 4-6 minutes, 8-12 players (Decision 003).
- Core loop. Join, vote for a map, prepare (60-90 s), flood (3-4 min), last one standing, podium (15 s), repeat. Same server, no teleport (Decision 004).
- No direct PvP. Weapons damage props, structures and boats, and apply light knockback to players. Only the water kills (Decision 008).
- The build is the boat. Every prop has mass, buoyancy and HP. Hull templates (Raft, Barge, Fortress) are customized with props (Decision 009).
- Flood envelope plus Game Director. Waves have hard limits; a Director modulates speed within ±20% and every water change is telegraphed 3-5 s ahead (Decisions 007 and 011).
- Floating loot crates with position bias toward players who are behind: repair kits, prop-damage weapons, tactical consumables, bonus Scraps (Decision 010).
- Economy. Scraps (soft currency earned by playing) and direct Robux for cosmetics only. Power is never for sale (Decisions 005 and 006).
Tech stack
| Technology | Version | Use |
|---|---|---|
| Luau | --!strict |
All modules in src/ |
| Rojo | 7.7.0 (rojo.exe committed at the repo root) |
Syncs src/ into Roblox Studio |
There is no wally.toml, package.json or other dependency manifest, so there are no external libraries.
Getting started
- Build the place with Rojo:
rojo build -o "flood_roblox.rbxlx" - Open
flood_roblox.rbxlxin Roblox Studio. - Start the Rojo server (
rojo.exeis already at the repo root):rojo serve - Play test in Studio.
Code is always edited in src/. Studio (and the Roblox Studio MCP) is used only for runtime work: instances, terrain, Play Test and Output. It is never used to write logic (see CLAUDE.md).
Core checks: tools/test_core.luau (Loader, Net, Signal, Config) and tools/test_feedback.luau (Feedback). Run them through the Roblox Studio MCP (execute_luau, Edit data model) after syncing Rojo.
How it works
default.project.json maps src/shared to ReplicatedStorage.Shared, src/server to ServerScriptService.Server and src/client to StarterPlayer.StarterPlayerScripts.Client.
Boot. Server and client start the same way. They require Shared/Loader (src/shared/Loader.luau), which finds the ModuleScripts in a folder (systems/ or controllers/) and runs them in two phases: Init() on all of them, then Start() on all of them, in alphabetical order, each wrapped in pcall. A broken system becomes a named warn and does not take down the boot.
Networking. All client-server traffic goes through src/shared/Net.luau. Remote names are declared in a fixed list (EVENTS); asking for an undeclared remote is an error. Two remotes exist today:
CoreBoot, fired bysrc/server/systems/BootBeacon.luauto tell each joining player that the server boot finished.Feedback, used by the game-feel system. Semantic events on the server (src/shared/Feedback.luau) reach the client (src/client/controllers/Feedback.luau) and trigger camera shake (src/shared/Shake.luau) with the tiered intensity defined in GDD Decision 015.
Gameplay constants. src/shared/Config.luau groups balancing knobs by system: round timings (75 s prep, 210 s flood, 15 s podium, 2 players minimum), water (static Terrain water, the map sinks, Director range ±20%, 4 s telegraph) and building (10 props per player, 2-stud snap, 90° rotation).
Legacy reference. reference/legacy/ holds the previous game’s code (round system, gun/grenade/melee systems, build shop, boats, admin commands, bots). It is reference only. gamemaster/ holds internal audits of that code done through the Roblox Studio MCP; it is not part of the game runtime. docs/DOCUMENTACAO_LLM.md documents the legacy instances.
Project structure
src/
client/ init.client.luau, controllers/ (BootListener, Feedback)
server/ init.server.luau, systems/ (BootBeacon)
shared/ Loader, Net, Signal, Config, Feedback, Shake
tools/ test_core.luau, test_feedback.luau
docs/ GDD.md, core.md, feedback.md, spike-flutuacao.md, REGRA_HUD_ROBLOX.md, DOCUMENTACAO_LLM.md
reference/legacy/ previous game code (reference only)
gamemaster/ audits of the legacy code
assets/ 3D model (soldadora_meshy.glb) and preview
Open questions
- Whether
reference/legacy/will be ported or rewritten from scratch. - Which GDD system comes next.
License
All rights reserved. © Estúdio Crivy.
More side projects

Zumbi Harvest
A Roblox game in Luau with a day cycle, economy, upgrades and zombie AI.

ZumbiPizza — Slice & Survive
A co-op pizza game with zombies built in Unity, with multiplayer via FishNet.

YouTube subtitle downloader
A script with a UI to download the subtitles of an entire channel at once.
