OhMyGame
OhMyGame is the open-source studio for making games with AI. Design, build, playtest, and publish games in one app, with your own model keys.
LAST LIGHT — a dark arena FPS. Hold the Crucible. Keep the flame alive.
Translation pending
GamesJavaScript · CSSGitHub @onuralptumerOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗A dark, rain-soaked arena FPS for the browser, built with Three.js. You hold the Crucible, a ruined cathedral-arena under a broken dome, against endless waves pouring from six blood-gates. Keep the last light burning.
npm install
npm run dev # http://localhost:5173
npm run build # production build in dist/
Desktop browser with mouse & keyboard. Click Begin the Vigil to lock the mouse.
| Key | Action |
|---|---|
| WASD | Move |
| Mouse / LMB | Aim / fire |
| Space | Jump |
| Shift | Dash (brief invulnerability) |
| R | Reload |
| 1–5, wheel, Q | Switch weapon / last weapon |
| F | Flashlight |
| Esc | Pause |
localStorage.It's a standard static Vite app. Import the repo in Vercel and it picks up the defaults on its own: build command npm run build, output directory dist.
| File | Purpose |
|---|---|
src/game.js | State machine, waves, combat resolution, pickups, run lifecycle |
src/world.js | Arena geometry, sky, lighting, rain, shafts, banners |
src/pbr-gen.js, src/pbr.js | Procedural PBR texture generators and the worker-based loader |
src/triplanar.js | Triplanar material patch for MeshStandardMaterial |
src/shapes.js | Rounded/detailed geometry builders |
src/enemy-models.js | Detailed enemy models (merged per bone, cloned per spawn) |
src/enemies.js | Enemy models, AI, projectiles, boss |
src/weapons.js | Weapon definitions, viewmodels, firing |
src/player.js | Input + movement controller (dash, coyote time, step-up) |
src/physics.js | Analytic collision & raycasts |
src/effects.js | Pooled particles, tracers, explosions, decals, gibs |
src/post.js | Post-processing |
src/audio.js | Procedural WebAudio SFX and music |
src/progression.js | Boons, Reliquary perks, persistence |
src/ui.js | HUD and menus |
Append ?manual to the URL to stop the render loop. Automated tests use it to step frames by hand through window.__game.frame(dt).