An experimental voxel game engine.
Some projects using noa
:
- Minecraft Classic - from Mojang (I'm as surprised as you are)
- VoxelSrv - a voxel game inspired by Minecraft, by patbox
- CityCraft.io - multiplayer voxel cities, by raoneel
- noa-examples - starter repo with minimal hello-world and testbed games
The easiest way to start building a game with noa
is to clone the
examples repo and start hacking
on the code there. The comments in the hello-world
example source walk
through how to instantiate the engine, define world geometry, and so forth.
The example repo also shows the intended way to import noa's
peer dependencies, test a world, build for production, etc.
See the API reference for engine classes and methods. But virtually all the docs exist as JSDOC-style source comments, so if you're getting code completion and type hints from a modern editor, that's the easiest way to browse the docs.
Documentation PRs are welcome! See the source for details, API docs
are generated automatically via npm run docs
.
This engine is under active development and contributions are welcome.
Please open a discussion issue before submitting large changes.
PRs should be sent against the develop
branch!
Code style/formatting are set up with config files and dev dependencies, if you use VSCode most of it should work automatically. If you send PRs, please try to be sorta-kinda consistent with what's already there.
See history.md for full changes and migration for each version.
Recent changes:
-
v0.33
:- Much improved API docs
- Terrain now supports texture atlases! See
registry.registerMaterial
. - Added a fast way to specify that a worldgen chunk is entirely air/dirt/etc.
- Modernized keybinds to use KeyboardEvent.code strings, and changed several binding state properties
- Bunch of internal improvements to support shadows - see examples
-
v0.32
: Fixes npm versioning issue - no code changes. -
v0.31
:- Change the speed of the world! See
noa.timeScale
- Now possible to control chunk processing order:
noa.world.chunkSortingDistFn
- Much improved type exports and API docs
- Change the speed of the world! See
-
v0.30
:- Engine now a named export, use
import {Engine} from 'noa-engine'
- many performance and size optimizations
- now generates proper type declarations and API references!
- can now configure separate vert/horiz values for chunk load distance
- core option
tickRate
is now in ticks per second, not ms per tick - adds several init options, e.g.
maxRenderRate
,stickyFullscreen
- Engine now a named export, use
-
v0.29
:- maximum voxel ID is now
65535
- adds option
worldGenWhilePaused
- adds option
manuallyControlChunkLoading
and related APIs - performance and bug fixes
- maximum voxel ID is now
Made with 🍺 by @fenomas, license is MIT.
Uses Babylon.js for 3D rendering.