Skip to content
Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


Open World

Open World is a New Internet, Spatial Server, and 3D Web Browser.
The VR internet is managed by the Open World Consortium and connects many VR experiences into one seamless universe.
The Open World has its own constitution and voting rights.

64 Bit Engine (both in memory and Coordinates)
Spatial 3D server
Spatial Universe Browser
1:1 scale planets
Sharing content

first run

Easiest is to download the release file under Releases.
Run The MassiveServer on a Windows Machine
Run OpenWorldMinimum to show basic login flow
Run OpenWorld to get a basic 3D browser, with crafting. Use this as a starting point for new browsers.


The Massive2 dll is the engine. It handles syncing the world with the server and the front-end.
OpenWorld is a 3D universe browser and builder powered by the Massive2 dll.

Loading Terrain

Using Bing-type tiles
Each tile has a biome map (generated by the generator project, which connects to an OpenStreetMap server)
Generates Height, texture, and data files.
Data file has details of roads, buildings, water, etc. Units: Lon/Lat


Each new user is identified by a GUID generated by the server on first login
The client should store the GUID for later logins.
A client can associate a GUID with an email address to retrieve their account and data

Logging in flow

Use the OpenWorldMinimum to examine basic login flow.
When creating your own browsers use this flow. The Browser must first get the Lobby file from []
Returns a JSON file of all registered servers
The lobby Form is shown, user selects the desired server
Select a server, and call the following in order,
Each server call will have a response
call: Globals.Network.ConnectToServerRequest
returns: Globals.Network.ConnectToServer
call: Globals.Network.ConnectToMassive (connect to actual universe)
returns: Globals.Network.Connected
call: Globals.Network.Login
with a valid email and password
returns: Globals.NetworkLoggedIn
the UserID is returned in the loggedin packet.
The Globals.UserAccount is now populated with login details.

On success, the user can now GETWORLD to get a list of nearby objects. Promiximity is throttled by the server.
Set the user's position with Globals.Network.AvatarMoveRequest
As the user moves around updated JSON lists are returned by the server, allowing client app to spawn nearby objects
Destroying and disposing objects is at the discretion of the client
Use other functions like CreateObjectRequest to create objects and associate them with current user

Message Bus

All components communicate through the Message bus - MMessageBus, or Globals.Network for net comms
Call static methods to request actions.
e.g. MMessageBus.ChangeAvatarRequest(this, Globals.UserAccount.UserID, "DOG01") to change the current user's avatar
to the model loaded into template with TemplateID and name DOG01
The server will response with a Globals.Network.AvatarChange handler call


Network runs on its own threads.
Use Massive2.Network to make network requests.
Server is source of truth, so all movement, spawn, chat, gets approved by server before broadcast.
MMessageBus will intercept some server messages relating to UI, and invoke them on the UI thread.
So use MMessageBus event handlers rather than network ones.


There are several Roots that MObjects are attached to.
The SceneGraph is updated, and rendered
MScene.ModelRoot - All models to be rendered (including those who are marked as invisible or out of range)
MScene.AstroRoot - All planetary phenomena
MScene.UtilityRoot - All systems that need a pulse
MSCene.MaterialRoot - All materials, textures, and Shaders
MScene.TemplateRoot - All Templates. "Lite" versions of renderable objects used to define construction.
An object must first be a member of the template root before an instance can spawn

All Renderable objects are instances of a Template object in the MScene.TemplateRoot

Types of Objects

MObject - Base class of anything synced to the Scenegraph Update and Rendering, including Physics
MSCeneObject - Renderable
MPhysicsObject - Attached to an MSceneObject to give it physics properties


Helper static functions contain convenient functions.
MSceneObject mo = Helper.CreateCube(parent, name, position);
MassiveTools and other static Tool classes help converting coordinates


Chat is still primitive, with limited friends lists, etc