OverlyMassive
Loading Documentation
Get OverlyMassive up and running on your development machine
Before installing OverlyMassive, ensure your system meets the current requirements:
Choose your installation method:
Download the licensed engine package after purchase:
# Download latest release (requires license)
curl -L https://secure.overlymassive.com/releases/latest/OverlyMassive-Windows.zip -o engine.zip
# Extract to your projects directory
unzip engine.zip -d C:\Projects\GameEngine\Build the engine from purchased source code:
# Access the licensed repository
git clone https://secure.overlymassive.com/engine.git OverlyMassive
cd OverlyMassive
# Initialize submodules
git submodule update --init --recursive
# Configure (Ninja generator, recommended)
cmake -B out -G Ninja -DCMAKE_BUILD_TYPE=Release
# Build the engine
cmake --build out --config Release
# Build PakCompiler tool
cmake --build out --target PakCompiler --config ReleaseConfigure your development environment:
# Add engine to PATH (Windows)
set OVERLYMASSIVE_ROOT=C:\Projects\GameEngine\OverlyMassive
set PATH=%OVERLYMASSIVE_ROOT%\bin;%PATH%Test that everything is working correctly:
# Check engine version
overlymassive --version
# Run sample project
cd samples/HelloWorld
overlymassive --project=HelloWorld.omprojIf the sample runs successfully and displays a rotating cube, your installation is complete!
Create your first game in 5 minutes with OverlyMassive
# Create a new game project
overlymassive create-project --name="MyGame" --template="3D Game"
cd MyGameCreate scripts/game.js (Duktape):
// scripts/game.js — Duktape game script
// Scripts are hot-reloaded automatically when saved
// Transition to the Playing state
setGameState(GameState.PLAYING);
// Spawn a player at position (0, 10, 0)
var player = spawnPlayer("Hero", 0, 10, 0);
log("Player spawned: " + getEntityName(player));
// Create an entity and set its transform
var cube = createEntity("MyCube");
setPosition(cube, 5, 0, 3);
setRotation(cube, 0, 45, 0);
setScale(cube, 2, 2, 2);
// Set up a camera
var cam = createCamera("MainCam", 0, 15, -10);
setCameraFov(cam, 60);
setActiveCamera(cam);
// Load a world cell
requestLoadWorld(0, 0);# Configure with Ninja (recommended)
cmake -B out -G Ninja
# Build the project
cmake --build out --config Debug
# Run your game
./out/MyGame# Install dashboard dependencies
cd Dashboard/OverlyMassiveDashboard
npm install
# Start dashboard dev server
npm run dev
# Dashboard available at http://localhost:3000
# Or run engine with embedded REST API
./out/MyGame --dashboard --dashboard-port 8080Core Duktape JavaScript bindings exposed by the engine
Create and manipulate entities from script
// Entity management
var id = createEntity("MyEntity");
destroyEntity(id);
var name = getEntityName(id);
var ids = findEntitiesByName("Enemy");
// Transform
setPosition(id, x, y, z);
var pos = getPosition(id); // {x, y, z}
setRotation(id, rx, ry, rz);
setScale(id, sx, sy, sz);
// Component queries
hasCamera(id); // true/false
hasMesh(id); // true/false
hasCloth(id); // true/false
hasPortal(id); // true/falseState machine, player input, and world queries
// Game state (MainMenu → Loading → Playing ↔ Paused)
setGameState(GameState.PLAYING);
var state = getGameState();
// Player
var player = spawnPlayer("Hero", 0, 10, 0);
var pid = getPlayerEntity();
// Input (SDL scancodes)
if (isKeyDown(Key.W)) { /* move forward */ }
if (isKeyPressed(Key.SPACE)) { /* jump */ }
if (isMouseButtonDown(Mouse.LEFT)) { /* attack */ }
var mouse = getMousePosition(); // {x, y}
// World grid & interiors
requestLoadWorld(0, 0);
requestLoadInterior("Dungeon_01");
var grid = getWorldGridSize(); // {x, z}
var cell = getWorldCellName(2, 3);