A room should be able to be anything — a full survival world, a plain deathmatch, or a blank void with no items, no weapons, nothing but bodies and ground. The engine stays; every rule above it is a plugin you can turn off. The hard part isn't the freedom — it's making that much choice feel effortless. Here are ways to compose plugins into game styles without the clutter.
Today "core" plugins (items, inventory, the meme arsenal) always load. The end state you want is that none of them are special: the create flow spans a spectrum, and where a room lands on it is just a set of enabled plugins. The engine primitives — bodies, terrain, movement, the network — are the only floor.
plugins: [] — no items, no weapons. Just physics and a place to stand.
A named bundle: Deathmatch, Survival, Build.
A bundle you've customised — swapped a plugin, changed an option.
Sandbox: every plugin on the shelf, yours to toggle.
The wizard already walks the right edge. The question is how to make the middle — "give me a good game without reading a plugin list" — the easy default, while the void and the everything stay one step away.
These aren't exclusive — they layer. Each is shown with what it would actually look like.
A "base" is itself a plugin that composes others — it declares the plugins a style needs and the config it wants, and rides the exact dependency machinery the wizard already closes over. A style becomes a first-class, shippable, moddable thing.
needs + plugin.config — no new system.Create doesn't open on a checklist — it opens on a wall of styles. Pick one and the wizard is pre-filled; from there you play, or step in to customise. "Start from scratch" and "Everything on" are just two more cards.
When every mechanic is an optional plugin the list gets long. Group it — World, Survival, Combat, Cosmetic — so the custom path stays scannable no matter how many plugins exist. A plugin declares its own category.
The plugins step shows a short, sensible set by default with an Advanced / show everything reveal. The foundational plugins (items, inventory) sit in an always-on strip you can expand to turn off — the void is possible, never in your face.
It declares no systems of its own — only what it composes. The host already dependency-closes
needs and resolves plugin.config; a base leans entirely on both.
-- content/bases/survival/main.lua — a BASE composes other plugins. -- It runs no tick; it only declares a style, and rides the same dep + -- config machinery every other plugin uses. plugin.base({ label = "Survival", blurb = "Scrounge to eat, dread the dark, don't starve.", emoji = "🏕️", -- the plugins this style turns on (dep-closed like any needs) needs = { "items", "hunger", "rations", "daynight", "night-spawn" }, -- the options it prefers — the player can still override in the wizard config = { daynight = { length = "long" }, hunger = { rate = "fast" }, }, })Selecting it fills the wizard — the player still owns every box
The first thing you see is a gallery of bases (each just a plugin from Approach A). One is selected; "Custom" drops you into the full wizard; "Void" ships nothing but the engine.
Each card is a base plugin; the grid is generated from whatever bases are installed, so a modded style shows up here with no UI change — the same way a new plugin already lights up the toggle list.
Behind the templates, the full wizard groups plugins by a category each one declares, and hides the always-on foundation behind a reveal — so "turn off items and give me a void" is possible, but never the first thing you trip over.
-- a plugin self-describes where it belongs; the wizard groups by this. plugin.meta({ category = "survival", foundational = false }) -- items/inventory would set foundational = true → the "always on" strip, -- collapsed by default, expandable to actually switch them off.
The nice thing is that these don't compete — each sits on the one below, and the whole tower stands on machinery that already exists.
The face of Create. Cards, generated from installed bases. "Custom" and "Void" are cards too. (B)
The customise path. Groups by category, hides the foundation behind a reveal. (C, D)
A base is a plugin that composes a set of plugins + config. Selecting one pre-fills the wizard. (A)
Everything — even items, inventory — is an optional plugin with needs, config, and a category.
Bodies, terrain, movement, network. The floor. A void room is this and nothing else.
Build it bottom-up, and each layer is useful on its own the day it lands:
needs, so a truly empty plugins: [] room is legal. This
alone unlocks the void.category + a foundational flag (C/D) — the cheapest fix for today's
clutter, and it makes a long list survivable.plugin.base (A) — bases as composing plugins, reusing deps + config.
Ship two or three (Survival, Deathmatch, Void) as content.Every step reuses the dependency + config system the wizard already runs on. Nothing here is a new engine; it's the same idea — a plugin — pointed at itself.