Engine Overview

       The Cyclone Game Engine is an in-house cross-platform 2D/ 3D game engine built from the ground up in C#. It comes compatible with the XNA and MonoGame Frameworks to help make it easier and save time creating games for developers utilizing these libraries. MonoGame is used as the back end allowing it to be multi-platform across PC, MacOS, Linux, iOS, and Android. The engine is built with a large degree of flexibility in mind. Due to its highly extensible and adaptable comprehensive code, it can easily be customized to suit the creation of any type of game. The game engine is not perfect by any means. The game engine is still in its infancy stages of development which is why I haven't made it available yet to the community. Its primarily built to serve the needs of Steel Cyclone Studio's game projects. Once it is further developed, I will release it. I am curious to see how others will use this tool one day; possibly in ways I never thought or imagined. This is the studio's first attempt at creating a first-person shooter from the ground up. The Engine Facts Sheet will be updated over time so stay tuned.

            Below is a brief description of some base aspects/elements of the engine, alongside with my thoughts on development, and the source-code used. Some of the codebase for many core elements is taken from various sources which have been modified, optimized, and extended to fit my needs. I hope this will be of any help to all the struggling XNA and MonoGame indies out there, and give you some basic ideas and guidelines. This is not a tutorial, and I cannot go into technical details of implementation. However, if you are looking into building your own games and or game engines in XNA, MonoGame and or MXA, I highly recommend checking out the Developer's Survival Kit


RENDERING & GRAPHICS





Effects, Lighting & Shaders
Shaders

  • Radial Blur Effect (WIP): this effect will be used to visually show speed when flying or driving at extremely high speeds 
  • Real-Time Fur Shader
  • Real-Time Reflection Shader
  • Bokeh Depth-of-Field (WIP) 

  • Shadows

Lighting
  • Bloom (got working recently)
  • Per-Pixel Lighting
  • Vertex Lighting
  • Point Lights (work-in-progress)
  • Spot Lights (work-in-progress)
  • Directional Lights (work-in-progress)
  • Light Types: Diffuse, Specular and Color
  • Deferred Rendering
Shadows 
  • Shadow Mapping with screen space blurring (soft shadows)
Water 


Particles & Weather

  • Cutomizable 2D/ 3D GPU Particle System 
  • Blood Splatter
  • Rain & Snow
  • Wind 




Plants & Vegetation
  • Grass billboards 
  • Procedural L Trees Lib (WIP)
  • Trees Animation



ANIMATION & MODELS


  • Giff Animation Library
  • Xbox Avatar Support
  • XNAnimation 4.0 Library (Modified) - One thing that is really frustrating at first glance when making a 3D game in XNA 4.0/ MonoGame is the fact that you can only load a single animation with your model by default. The content pipeline simply won't import more. This was probably the biggest weakness of 3D in XNA. The Cyclone Game Engine fixes this with a modified version of the XNAnimation library. The importer supports more than one animation take within a single .fbx file. If you want an unlimited number of animations, you can export a bunch of models, each file containing one animation, and the content processor takes them all and combines them into one asset.
  • Robot Animation Processor
  • 3D Model Types: DirectX, FBX and Obj (Collada file support is in the works)

PHYSICS
        The reason why some physics engines do not work in XNA is that most physics libraries are coded in C++. Examples are Havok, Ageia, as well as Newton; although I think their might be a conversion of Havok's library for C# but I could be wrong. Even if you have a C# wrapper, it can be very difficult to deploy these C++ libraries through XNA. Popular C# physics libraries you can use for your XNA and or MonoGame projects are JigLibX (Jiggle Library X), BEPU, BulletX, Digital Rune, Henge3D and Farseer.

     Check out the XNA Developer's Survival Kit for more information. You can also check out more physics libraries here. To handle the 3D physics, the Cyclone Game Engine uses JigLibX which I am extending and further modifying. JigLibX is a C# port of the C++ JigLib physics engine which was originally developed by Thorben Linneweber. JigLib is essentially a well matured C++ library for doing Rigid Body Dynamics. To learn more about JigLibX, click here.


  • JigLibX (handles the 3D collision): I have highly modified the Jiggle Physics Library to run on XNA 4.0 and MonoGame. I am extending and improving it in many ways. To help with JigLibX's physics performance on Xbox 360 as well as other less advanced hardware, I am changing its foreach statements to for and I will be adding separate loading threads to help improve the low frame-rate issues. JigLibX also makes extensive use of the "float" object. I mention this because the Xbox 360 has some issues processing floating points. So I am changing out all the floats to avoid major physics performance issues on the Xbox 360.

    JigLibX XNA 4.0

Character Physics
  • The character physics object for now is essentially a capsule with the animated character model inside. The capsule object is controlled and moved by player input. Later I plan to use Ragdoll physics for more realistic character collisions. 

Ragdoll Physics
  • I am working on attaching bounding spheres to the bones of the character models. I plan to use them for collision detection when interacting with the game world and hit detection for when the player and enemies takes damage.  

Vehicle Physics



  • Vehicle Physics: The car object class for the JigLibX physics engine has also been extended to support better handling. Click here for more information. To achieve some basic drifting physics for your car and get better triangle mesh collision detection, check out my blog post here

  • Vehicle Class Modifications


       
  • Water Physics (WIP)

  • Farseer (handles the 2D collision)


AUDIO
  • 3D Sound Positioning
  • Microsoft XACT is a great tool to implement sound into the game but I am also exploring new techniques with sound


GRAPHICAL USER-INTERFACE (GUI)/ LEVEL EDITOR



Because XNA and MonoGame exists less as an engine and more as an extremely robust, superbly usable library system, there is no "XNA look" or "MonoGame look", as there are with other game engines. To save time, the engine for now can essentially use a modeling program as its level editor. The engine tracks where the models are located and positioned in Model Space in an object editor like Autodesk Maya or 3D Studio Max, and displays them in-game exactly how you had them placed in Maya or 3D Studio Max. In general a Level Editor is a piece of software, we can use to create or design levels, games, maps etc..

  • Neoforce by Tom Shane: This will be used as the GUI (Graphics User-Interface) for the editor

  • Object Scene Management: Rotate, Scale or Translate objects along any of the three axes either individually or by a group (Work-In-Progress)

  • Terrain Engine & Editor (Work-In-Progress): As of right now, the game engine can render a simple terrain that can be scaled at any size. A height-field bitmap is used to describe the terrain. The height-map processor which is the custom content pipeline for the terrain converts that bitmap image into geometry. The engine extracts the triangles from the terrain and creates collision for it. 


GAMEPLAY

Cameras
  • First-Person Camera: this camera is a simple FPS camera with spring physics that is attached near the player's head level. The camera is a perspective camera used to see the game in 3D. The first-person camera also includes shaking functionality. This is a great effect to used to increase immersion when sprinting, shooting in this perspective and to simulate an earthquake effect.

  • Chase Camera: this is a third-person camera is used to follow vehicles as the player controls them. The chase camera has spring like physics as well.

Heads-Up-Display (HUD)
  • Ammo Count
  • Weapon Selection Menu
  • Radar
  • Timer (for online play)

Inventory System 


Split-Screen Support 



ARTIFICIAL INTELLIGENCE (AI)
  • Obstacle Avoidance using Steering Behaviors 
  • Path-Finding Navigation using A-Star
  • Chase & Evade Functionality with Turn-2-Face Algorithm

           I made a sample program that will be placed in the engine soon. It utilizes both steering behaviors to avoid obstacles that are enclosed in bounding spheres and path navigation through a graph to avoid obstacles that are enclosed in bounding squares. 


INPUT & STORAGE

  • Mouse & Keyboard 
  • Xbox 360 Controller
  • EasyStorage



PLATFORMS

MonoGame allows the engine to support multiple platforms
  • Android
  • Linux
  • Mac
  • OUYA
  • PS4 (Have to be registered through Sony to obtain their dev kit)
  • PSVita
  • Windows XP, Windows 7, 8, 8.1
  • Windows Phone 7, 7.5, 8.0
  • Windows 10
  • Xbox 360 
  • Xbox One (Have to be registered through Microsoft in the ID program and obtain their dev kit)
    With MonoGame 3.4 (which is the continuation of XNA 4.0) for Visual Studio 2015, it is now possible to create a game for Universal Windows Platform (UWP). This also makes it possible to get your XNA project to run on Windows 10 with UWP. Since the Xbox One dev kit supports UWP, you can get a MonoGame project running on it.
  • Zune (XNA 3.1 version of the game engine)


PROGRAMMING & 
NETWORKING


  • C#
  • XML (Used to define particles and quite possibly levels in the future)

Visual Studio 2010
  • C# Express
  • Professional
  • Premium
  • Ultimate

Visual Studio 2012
  • Express for Windows Desktop
  • Professional
  • Premium
  • Ultimate

Visual Studio 2013 
  • Express for Windows Desktop
  • Professional
  • Premium
  • Ultimate

Visual Studio 2015

Visual Studio 2017



PERFORMANCE & OPTIMIZATION
  • Multi-threading (WIP)


GAME STATE MANAGEMENT



  • The engine comes built-in with a 2D/ 3D Menu System with transition effects, splash screens, loading screens and a pause screen. Networking functionality for online play is still currently in the works. The menu system displays an animated busy indicator whenever a network operation is in progress. In multiplayer, once in the lobby, a list of gamers is displayed along with icons indicating who is currently talking and who has marked themselves as ready. When all the gamers are ready, the game will load the map.