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.
A cozy 3D game about facing your fears — dogs, spiders, snakes, heights, the dark and tight spaces — one small, safe step at a time. Free, in your browser, English + فارسی.
Translation pending
GamesJavaScript · CSSGitHub @amir-saraeeOnlineOwner 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 ↗Every fear is a path you stopped walking. Light it again — one small step at a time.
(فانوسبهدست · formerly “Mira — The Courage Journey”; Mira is now the lantern-keeper who walks beside you.)
A tiny game about big fears. Free, in your browser, English + فارسی.
Play it: https://phobia-kappa.vercel.app/
A story you walk, one trial at a time — The Lanterns of the Valley. Every path nobody walks goes dark; Mira, the valley's lantern-keeper, walks beside you while you relight them. Each realm is a chapter with a resident whose fear began a different way — Aram was bitten at seven, Leyla learned it from her mother's face, Bahman from his grandmother's stories, Sahar from a body she misread, Nima from a lamp that never went off, Shirin from one stuck lift — so the causes of phobias arrive as people. Every finished trial turns a page, and every page carries one idea about how fears unwind (the ladder, the wave, testing the prediction, lowering shields, naming it, spacing, sensations, lapses…): 38 lessons across the valley, none repeated, collected in the Story Book under What you've learned. The trial before a page shows its idea as today's practice — something you do in the scene, then read about. Returning travelers get a note from Mira about last time (in their own numbers) and why coming back today is part of the method.
Six realms, five 3D trials each. Three have animals that read how you move; three are places that don't move at all — which is the point:
| Realm | Fear | The ladder |
|---|---|---|
| 🐕 The Meadow Yard | Dogs (cynophobia) | a small dog busy across the room → a big, loud, excited one that bounds over |
| 🕷 The Old Cellar | Spiders (arachnophobia) | a house spider far off → a huntsman on the wall at eye level (real sizes, 8–26 cm; hold Z to look closer) |
| 🐍 The Sunlit Clearing | Snakes (ophidiophobia) | a grass snake basking far off → close, coiled and alert on the path |
| 🏙 The Summit | Heights (acrophobia) | a knee-high ledge over a square → a glass skywalk 165 m up at dusk |
| 🌙 The House at Night | The dark (nyctophobia) | your bedroom with the lamp on → total dark, only the house's sounds (hold F for a flashlight — the coach counts what it does) |
| 🚪 The Narrow Passage | Tight spaces (claustrophobia) | a small room, door closed behind you → a phone booth → a lift → a storage closet → lying in an MRI scanner |
Every trial has three stars — its skill (let the dog come to you, stand on the glass…), reading the moment, and staying until the alarm settles — earned live in the scene and kept as your best on the map, so there's always a reason to go back (repetition is the part of exposure that does the work). Stars only ever reward approach and attention, never speed or a low rating. Face all of a dog's trials and it comes to rest by your campfire.
Your custom character walks every scene. In the place realms the coach reads your body and the room instead of an animal: name a tight breath, a creak or a gust as body, place or danger. Nothing in them ever moves toward you — the walls stay put and the door always opens (opening it counts as relief, not learning). The older prototype realms (water, flying…) are still behind LAUNCH_OPEN in src/app/realm-data.js; add ?all=1 to the URL to play them for QA.
Lanternwalk is a game shell around genuine CBT graded-exposure mechanics:
A practice game, not therapy. Real exposure work for phobias belongs with a trained clinician. Use Lanternwalk for curiosity, education, or as a conversation starter — not treatment.
Vanilla JS + Three.js (no build step), Rapier physics, procedural + recorded audio, rigged CC0 creature models (Quaternius), installable PWA, offline-capable, English/Persian with full RTL. Three.js and Rapier are self-hosted under assets/vendor/ — no runtime CDN.
Where things live:
| Path | What |
|---|---|
index.html | the page: meta, import map, and the script tags in load order |
src/styles.css | every style |
src/app/*.js | the app shell — router, views, trials, progress, audio. Classic scripts that run in index.html order and share one global scope (a file can only use what an earlier file defines while it loads) |
src/story.js | the story: its pages, Persian, the page player and the book (DOM + SVG only, no WebGL) |
src/3d/main.js | the 3D entry: menu vignettes, the creator turntable, and window.Scene3D |
src/3d/engine.js | the exposure engine (mount / unmount) plus the body, hands, controls, physics and post-fx it imports — fetched when the first trial needs it |
src/3d/realms/*.js | one module per realm's scene, fetched the first time that realm is entered (realms/index.js is the registry) |
npx serve .
Then open http://localhost:3000.
cd scripts && npm install # once
npm run smoke # ~3 min: the SW precache + modulepreload lists, then first run + dog trials + a spider, snake, heights, dark and tight-space trial, headless
The same smoke test runs as a git pre-push hook (git config core.hooksPath .githooks, already set in this clone). Skip it once with SKIP_SMOKE=1 git push. SMOKE_SHOTS=1 keeps screenshots in .smoke-shots/.
After re-baking dog coats, run npm run compress-textures — the game loads the JPEG copies.
The dogs ship as binary .glb. To swap in a re-exported .gltf (one embedded base64 buffer), node scripts/pack-glb.cjs path/to/Model.gltf writes the .glb beside it — same JSON and bytes, ~40% smaller, round trip checked.
The traveler's arms are driven by one clip from the CC0 animation library. node scripts/strip-anim.cjs [Clip_Name …] writes assets/anim/human-walk.gltf (61 KB, the clips you name) from the 4 MB source; re-run it if HUMAN_CLIPS starts using another clip.
On Linux the smoke test finds Chromium itself (Playwright's, or CHROME=/path), adds --no-sandbox when running as root, and — since software WebGL crawls at the high tier — plays on the low graphics tier (SMOKE_QUALITY=high to override).
Players can write feedback from the menu, Settings, About, and after every trial. Nothing is sent automatically. Set FEEDBACK_URL in src/app/handlers.js to a form link (Google Form, Tally…) to add an "Open the form" button; until then it's copy-only.