Intensity Engine Architecture Overview
Goals
A platform for shared 3D environments, with the following features:
-
Allows all kinds of activities/games/worlds
-
Allows easy modding/editing/scripting and sharing/collaboration
-
Can run new content in a secure sandboxed manner (like a web browser)
-
Reasonable resource requirements
-
Open source
-
Cross platform
Approach
-
Start with Cube 2/Sauerbraten
-
Mod it (C++) to remove limitations on types of games/activities it can run, e.g.,
-
Generic entity system, not hardcoded sauer ents
-
Load the map on the server for optional server-side physics
-
etc.
-
Add various features, e.g.
-
Smoother camera movement
-
Optional editing in thirdperson
-
etc.
-
Extend with Python
-
New high-level logic, e.g.,
-
Asset system
-
Master server communication
-
etc.
-
Suitable for non-sandboxable tasks
-
Extend with JavaScript (Google V8)
-
'Game logic':
-
Define entity classes and behavior
-
Simple way to determine what information is automatically synchronized by the engine (state variables)
-
Actions, events, etc.
-
Suitable for sandboxable tasks
-
Add a new master server (Python/Django)
-
Manage asset and user account metadata
-
Plugin components handle storing of assets, etc.
Usage Patterns
-
Play games/participate in activities
-
Download the client
-
Run it
-
Client automatically downloads assets (maps, scripts, textures, meshes, etc.)
-
Create games/activities
-
Write JavaScript code
-
Game/map specific code, e.g.,
-
Game rules (points/scoring, etc.)
-
Entity classes
-
etc.
-
Extend existing code using modular plugins, e.g.,
-
Show a visual effect when health is low
-
New weapons and actions
-
Let server test for 'cheating' by the clients (walking through walls, moving too fast, etc.)
-
etc.
-
No necessary distinction between game/map specific code and modular plugins, if developing the game/activity in a clean, modular way (recommended)
-
Create world geometry using in-game editor
-
Import meshes from external 3D design tools
-
Upload to master server as an asset/assets
-
Extend the client and/or server
-
Write plugin components in Python or scripts in cubescript
-
Distribute them manually
-
Examples:
-
UI modifications in cubescript
-
Server plugin to check memory usage
-
etc.
-
Extend the master server
-
Write plugin components in Python
-
Distribute them manually
-
Examples:
-
Component to store assets in Amazon S3
-
Component to let people rate assets
-
etc.