Engine Design: Server Map Layering
The Quest Game Server is designed to support up to 256 simultaneous players scalable from 1 x 256 Solo Party to 4 x 32 Team Party. Quests in DarkMORG are designed with a series of linked FPS Tournament Maps. Like maps traditionally found in the FPS genre, these maps place emphasis on interior design and are smaller in scale compared to large terrains found in many MMOs.
To support 256 players in Quest, Parties participate in their own Instance of a Quest using Map Layering. The idea behind Map Layering is to share geometry (static w/ sliding collision) for multiple maps between multiple Quest; and share these Quest between 256 Solo /Team Party on separate virtual `Layers`.
Map Layering is achieved by loading and aligning adjacently static level map geometry in a non-overlapping cubic partition of 3D Space. Maps are not required to be equal in dimensions. Maps are loaded into the Servers Memory during runtime and are persistent until the server reloads. Only the Maps static geometry (type: structure) at the Lowest Level of detail is used for collision.
All level maps share the same Day/Night Cycle and Season Cycle, although Weather Cycle and Environmental Conditions are independent to the map.
Dynamic Objects {Platforms, Doors, Triggers, Spawners, Props} within the Map are duplicated (Collision Geometry and Database Instance Record) and assigned to specific Layer. These objects are set by the orientation of the template map and co exist in a 3D Map with other dynamic objects assigned to other Layers. However, collisions between Dynamic objects are discriminated by Layer assignment. Object scoping is also determined by Layer Assignment.
A Layer is created when a Party (Solo or Team) accepts a Quest. Players are assigned to that layer and can Enter and Exit the Quest at will. Players may also Join Quest in progress, however there may be character level and inventory restrictions. Upon creation of a Layer the Quests Map Template is queried to generate the map’s Dynamic Objects as assign them to a layer.
To support Scalable party size, the server keeps tracks of what layers have active players.