Sebastian-Ahlman.fi
Basis

Basis the name of a game engine I am developing in my spare time. My main goal is to write and maintain the base technology for my personal game projects. In addition to the engine itself, I am developing a small multiplayer tank game called "Tankaroo" which is built using the Basis engine.

           

The engine should be general purpose enough to be able to run any crazy ideas I might come up with, while at the same time be powerful enough to aid in the creation of professional quality games and applications. The engine is also my playground where I can safely try out new programming techniques before using them in a mission critial environment.

Complete game framework:
  • Handles all subsystems of the game
  • Written in C++ and Lua
  • OS support - Game runtime: Win32 (Mac/Linux versions possible)
  • OS support - Lobby server: Win32/Linux
Beautiful visuals:
  • 3D graphics powered by the OGRE rendering engine
  • HTML5 overlays powered by Awesomium for menus/UI
Efficient state and action modeling:
  • Visual design of game flow and object internal state(1)
Made for multiplayer:
  • Client/server model for session based multiplayer
  • Internet play with NAT traversal support
  • LAN play by connecting to the game server directly
  • Powerful Remote Procedure Call (RPC) system(2)
  • Uses the high performance ENet UDP library
Designed with multicore CPUs in mind:
  • Job system based on worker threads
  • Scales to N cores
Real-time physics:
  • Powered by the Bullet physics engine
Scripting support:
  • Lua is deeply integrated into the engine
  • C++ classes and objects can easily be exposed to Lua
Resource loading/unloading:
  • All resources are loaded from resource packs
  • Resource packs can be normal directories or zip archives
  • Powerful property system allows easy tweaking of engine and game values
Input device support:
  • Mouse and keyboard
  • Xbox 360 controller
1) Game flow/object state information can be visually designed and imported into Basis via a converter program. Currently the engine supports importing UMLPad state diagrams. Support for other modeling programs can be added by writing converters for those programs.

2) Hosts (game clients, game servers and lobby servers) within a Basis network communicate through Remote Procedure Calls (RPCs). To the programmer, an RPC looks like a regular, void returning function which is run asynchronously in the background.

In Basis, RPCs are based on callers, targets and proxies. A caller is an instance of a class, eg. Client, which wants to execute a function on a target object, eg. Server. The server instance might be running a different computer than the client instance. The actual Server class has a public function which can be called through an RPC, eg. void setInputSnapshot(const InputSnapshot& input).

The client object has a proxy representing the server, eg. ServerRPCProxy, which also has this function. When the client calls the proxy's version of the function, the parameters are automatically serialized and sent over the network to the correct host, which calls the actual function. For the system to work, Basis needs the declarations of the RPC functions on Server. These are written in an IDL (Interface Definition Language) which is very similar to C++. The Basis RPC IDL compiler takes IDL files as input and generates the proxies and supporting code needed by the system. Priority and reliability can be specified on a per-RPC basis.



Copyright © 2008-2012 Sebastian Ahlman