← All side projects
Game2026 · Live

Flood

A Roblox battle royale where the water rises and the last structure standing wins.

Flood: project cover image
TypeGame
StatusLive
Year2026
Stackluau, roblox, rojo
made at Estúdio Crivy

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

  1. Build the place with Rojo:
    rojo build -o "flood_roblox.rbxlx"
  2. Open flood_roblox.rbxlx in Roblox Studio.
  3. Start the Rojo server (rojo.exe is already at the repo root):
    rojo serve
  4. 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 by src/server/systems/BootBeacon.luau to 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