Loading Documentation

Installation Guide

Get OverlyMassive up and running on your development machine

Prerequisites

Before installing OverlyMassive, ensure your system meets the current requirements:

Required
  • • Windows 10/11 (64-bit)
  • • Visual Studio 2022+ (MSVC)
  • • CMake 3.28+
  • • C++20 standard support
  • • Ninja build system (recommended)
Optional SDKs (vendor/)
  • • NoesisGUI — XAML-based game UI
  • • Wwise 2025.1 — Spatial audio engine
  • • NVIDIA VXGI / WaveWorks / ShadowLib
  • • NVIDIA ACE (requires CUDA 12.8+)
  • • Node.js 18+ (for Dashboard)

1. Download Engine

Choose your installation method:

Licensed Software (Recommended)

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 from Licensed Source

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 Release

2. Environment Setup

Configure your development environment:

# Add engine to PATH (Windows)
set OVERLYMASSIVE_ROOT=C:\Projects\GameEngine\OverlyMassive
set PATH=%OVERLYMASSIVE_ROOT%\bin;%PATH%
⚠️ Important Notes
  • • Ensure graphics drivers are up to date
  • • Install Visual C++ Redistributables (Windows)
  • • Configure firewall for network multiplayer testing
  • • Allocate sufficient disk space (minimum 10GB for development)

3. Verify Installation

Test that everything is working correctly:

# Check engine version
overlymassive --version

# Run sample project
cd samples/HelloWorld
overlymassive --project=HelloWorld.omproj

If the sample runs successfully and displays a rotating cube, your installation is complete!

Quick Start Tutorial

Create your first game in 5 minutes with OverlyMassive

1. Create New Project
# Create a new game project
overlymassive create-project --name="MyGame" --template="3D Game"
cd MyGame
2. Write a Game Script

Create 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);
3. Build and Run
# Configure with Ninja (recommended)
cmake -B out -G Ninja

# Build the project
cmake --build out --config Debug

# Run your game
./out/MyGame
4. Start the Dashboard
# 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 8080

Scripting API Overview

Core Duktape JavaScript bindings exposed by the engine

Entity & Transform

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/false
Game State, Input & World

State 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);