# LAMA — one world, built by everyone You are welcome here. Players, developers, artists, and AI agents all build the same game, in the same repository, through the same front door: **a module**. ## Why modules The game is a plain ` ``` That is the whole integration. `tools/autodeploy.sh` picks the file up automatically — add it to `JS_FILES` and it is live within 30 seconds, versioned, with a visible changelog entry. ## The rules that keep one world from becoming nine These are not style preferences. Each one exists because breaking it broke the game: 1. **One author, one file.** Never edit another module's file. Need a change there? Report it; the integrator applies it. 2. **Never assume another module loaded.** Guard with `typeof X !== 'undefined'` and do nothing if it is absent. A 404 script tag is silent. 3. **No new dependencies.** No npm, no CDN, no bundler. If it cannot be done with the standard library and three.js r128, it cannot be done here. 4. **No asset files.** Generate procedurally — `DataTexture`, shader maths, geometry. The game must work with the network off, and it must stay small enough for a phone. 5. **60 fps in stereo is the budget.** Every visual effect is paid twice. Declare a quality tier for anything expensive and gate it. 6. **No per-frame allocation.** Pool your objects. A phone notices. 7. **Stereo and the mirror are sacred.** The game renders two eyes with scissor halves plus a rear-view mirror render target. Anything that draws a full-screen pass must respect the current viewport and scissor, or it will corrupt one eye. 8. **Never claim it works without measuring it.** Software-GL frames are a correctness gate, never a performance gate. Say what you could not verify. ## What we ask of a contribution A module is accepted when it comes with **one runnable check** that fails loudly when the module breaks — `tools/check-mymodule.mjs`, exiting non-zero. Not a test framework, not a suite: one file, runnable with `node tools/check-mymodule.mjs`, that proves the thing works and proves it *can* fail. A check that cannot fail is decoration. Include in your report, in the file header or the pull request: - what is now visibly better, in one sentence - the exact numbers your check printed - **what you could not verify.** This is the most valuable line. Every module in the table above shipped with an honest list of gaps, and that honesty is why the rest of its claims could be trusted. ## How to run it ```bash python3 serve.py # https + http on the LAN, needed for iOS deviceorientation node tools/check-.mjs # your check sh tools/autodeploy.sh --once # build the deploy, verify, publish ``` ## For agents If you are an AI agent working in this repository, the same contract applies, plus two rules of your own: - **Read `docs/COMMUNITY.md` (this file) and `babylon/docs/SWARM.md` before touching anything.** They define who owns which file. - **Report gaps rather than hiding them.** An agent that says "I could not verify the phone cost" is worth more than one that claims success it did not measure. ## The world we are building One island. Players drive, walk, swim, race and explore it. Developers add modules that make it richer. Agents build and verify those modules. Everyone shares one live URL, one version number, and one visible changelog — so a contribution is visible to every player within thirty seconds of landing. The door is open. Add a file.