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 WebAssembly-free 3D game engine in plain TypeScript on three.js. Live demo.
Translation pending
GamesTypeScript · HTMLGitHub @GormaxonOnlineOwner 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
No WebAssembly engine: a 3D game engine for the browser with no WebAssembly at all (no WASM, WebAssembly-free, WebAssemblyless) — a game engine without WebAssembly, in plain TypeScript on three.js. Streaming levels, BVH collision, GPU particles, FSR 1, frame generation. Runs on low-end Chromebooks.
Taken from the repository README
Loading the full README.
Read the full README ↗No WebAssembly engine — a 3D game engine for the browser with no WebAssembly in it at all (no WASM, WebAssembly-free, WebAssemblyless): plain TypeScript on three.js. Live demo
A 3D game engine for the browser, written in TypeScript on three.js — with no WebAssembly anywhere in it. It is the engine underneath SANGUINE, a fast first-person shooter built to run on low-end machines like a school Chromebook, taken out on its own: just the engine, none of the game.
Many browser engines that do real physics or heavy geometry lean on WebAssembly: a physics library compiled from C++ or Rust, a mesh optimiser, a navigation library. Arterial does all of its work in plain JavaScript (TypeScript compiled down) and on the GPU, and that buys it a lot:
.wasm file does not start there at all; Arterial only needs JavaScript and WebGL 2..wasm to fetch and compile before
the first frame, and no async instantiation step to orchestrate at start-up. The engine is part of the same
JavaScript bundle as the game and is ready the moment the page is.npm install and
Vite are the whole toolchain.engine/ — the core.
World: entities, an event bus, a level format (LevelFile, plain JSON), loading and saving.StaticChunks): the level is cut into cells, each baked into merged meshes and
collision with hidden faces culled; cells are built as the camera nears them and let go as it leaves.boss:start,
boss:phase, boss:health, boss:defeated[:<id>], boss:reset). The boss itself — model, moves, attacks — is
the game's: an entity that owns a BossEncounter and acts on its state.LevelSet of levels in order (each a file in hand, or a function that fetches or builds
one), loaded by id, and gone on from by an event from anything in a level — level:exit to the next,
level:goto:<id> to a named one — with level:loading / level:loaded / level:complete / levels:finished
announced and reached/finished progress saved as plain data.physics/ — the collision system: a BVH over the baked level, moving bodies, ray casts, capsule tests.
core/ — a fixed-step loop (120 Hz simulation, interpolated rendering), input with pointer lock, persisted settings.
render/ — procedural surface textures and materials (no image files needed), the level material, a procedural sky, an AMD FidelityFX Super Resolution 1 port (EASU + RCAS), an upscaler, frame generation (reprojection), dynamic resolution, a GPU timer, mesh decimation for level-of-detail copies.
entities/ — the engine's own entity types: brush (level geometry), spawn, trigger (event volumes),
light. A game registers its own beside them with registerEntity.
prefabs/geometry — helpers for building placeable pieces out of parts laid out in fractions of their size.
npm install
npm run dev # the example scene: http://localhost:5173
npm run build # type-check and build
The example (example/main.ts) is the smallest useful program: a level loaded from JSON, baked and streamed, a
sky, a smoke stream and bursts of sparks, a camera circling it, and the fixed-step loop driving it all.
import { World, Loop, registerCoreEntities, applySky, prepareLevelMaterial } from './src'
registerCoreEntities()
const world = new World()
prepareLevelMaterial(renderer)
applySky(world.scene)
world.load(level) // a LevelFile: { name, version: 1, entities: [...] }
world.particles.register('sparks', { layers: [{ style: 'streak', count: 24, speed: 9, spread: 0.9, life: 0.6, size: 0.05, color: 0xffc070, gravity: 14 }] })
const loop = new Loop(
(dt) => world.update(dt),
() => {
world.updateLod(camera.position)
world.particles.update(loop.stats.frameMs / 1000, camera)
renderer.render(world.scene, camera)
},
)
loop.start()
A browser with WebGL 2. Dependencies: three and three-mesh-bvh (both MIT).
src/render/fsr1.ts, with AMD's
notice kept).