Google Summer of Code: 2014

From ENIGMA
Jump to navigation Jump to search

ENIGMA, the Extensible Non-Interpreted Game Maker Augmentation, is an open source cross-platform game development environment derived from that of the popular software Game Maker. Its intention is to provide you with a quality game creation tool and a bridge between high- and low-level programming languages. It can be used either through an IDE, namely, its sister project, LateralGM, or through a Command line interface.

Like Game Maker, ENIGMA comprises both an easy to use Drag & Drop system as well as its own programming language. This programming language, known as EDL, is essentially a mix between C++ and Game Maker's GML. Part of ENIGMA's goal is to remain backwards compatible with Game Maker, serving for some intents and purposes as a Game Maker compiler, however, EDL offers many very powerful features which simply aren't present in the alternative. Such features include the ability to compile DLLs and other C/C++ scripts right into the program and access C++ types, templates, and functions.

This article gives a general outline of several tasks that could be completed by Google Summer of Code 2014 volunteers. Most ideas were created by top ENIGMA contributors, but a few ideas were created by ENIGMA users.

Students may join the ENIGMA IRC channel, #enigma on Freenode, or post on the forums if they have any questions or concerns.

CLI for ENIGMA Compiling

ENIGMA can currently only compile through LateralGM. A Command-line interface would be a statically linked single executable that would be able to compile projects without the need for an IDE. The CLI would be required to read and parse images and sounds before passing them onto the ENIGMA compiler, which is implemented as a DLL (which is how Lateral GM uses it). It would also be required to parse project files, specifically, ENIGMA Project Files (YAML). The CLI should also implement compiling without the need for a project, eg. cli.exe -{show_message("Hello World")}.

Requires:

  • Basic knowledge on file formats and the 7zip archive.
  • At least intermediate C++ knowledge.
  • GNU make experience, ability or willingness to learn how to compile and link libraries.

Possible Mentors:

  • RobertBColton
  • JoshDreamland

Revamp Engine Build System

The current engine is built by compiling the engine from makefiles using GNU Make and then outputting the pre-processor contents of the converted game to the same folder where they are linked. There are several issues with this process, the first being GNU Make being practically impossible to work with Windows file paths and spaces. Another issue is that this relies heavily on use of the temporary file system of the operating system. The system needs revamped to allow the engine to be compiled once and then linked statically to every game in a per-project build folder.

Requires:

  • Basic knowledge on build systems.
  • At least intermediate C++ knowledge.
  • GNU make experience, ability or willingness to learn how to compile and link code.

Possible Mentors:

  • RobertBColton
  • JoshDreamland

Implementation of the ANGLE Library

ANGLE is a library that translates OpenGL calls to DirectX calls, giving Windows users a potential performance boost. Currently, ENIGMA has OpenGL 1, OpenGL 3 and DirectX 9 graphics systems. ANGLE would remove the requirement of the DirectX system in favor of a singular OpenGL 3 system.

Requires:

  • C++ and graphics API knowledge.
  • GNU make experience, ability or willingness to learn how to compile and link libraries.

Possible Mentors:

  • RobertBColton
  • JoshDreamland
  • TheExDeus

Implementation of an Asynchronous Networking System

For games with multiplayer support, asynchronous networking is useful. ENIGMA current provides a very basic, unpolished socket implementation. After a rewrite, the functions must be made to be non-blocking and must be connected with an event system. LateralGM already supports editing the event type, it simply needs to be completed with functions.

Requires:

  • At least intermediate C++ knowledge.
  • Basic knowledge on how threads/thread safety works.
  • Must be familiar with cross platform programming.
  • Ability or willingness to learn networking using Berkeley Sockets

Possible Mentors:

  • RobertBColton
  • JoshDreamland

Implementation of a VR technology

With recent technologies such as Oculus Rift, the experience of players can become more immerse. We recommend implementing the Oculus SDK, since the Oculus Rift is currently the most popular and most supported form of Virtual Reality imaging.

Requires:

  • C++ and graphics API knowledge.
  • GNU make experience, ability or willingness to learn how to compile and link libraries.

Possible Mentors:

  • RobertBColton
  • JoshDreamland

Port LateralGM to use JavaFX

LateralGM is the IDE used by the ENIGMA game engine which relies on slow and outdated swing components. We basically want to start replacing these with those from the JavaFX library which is part of the core Java API since Java 7. This will allow customization of the IDE using cascading style sheets as well as hardware accelerated rendering and 3D graphics.

Requires:

  • Java or C# experience
  • Swing or JavaFX experience, or the willingness to learn.

Possible Mentors:

  • RobertBColton
  • IsmAvatar

Optimized GUI Controls

Much of GameMakers rendering system is designed around outdated software raster techniques and require a heavy workload to batch them properly. To address this issue a proposal was made for GUI Functions that would work similar to what one would see in Unity3D, OGRE, or Irrlicht. Only basic controls and labels would need created, and the implementation would need to focus on efficiently batching them for rendering.

Requires:

  • C++ and graphics API experience.

Possible Mentors:

  • RobertBColton

HLSL Fixed Function Pipeline Removal

Our current Direct3D graphics systems will need the fixed function pipeline replaced with High Level Shader Language both versions 9 and 11. The replacement will be based heavily on the current OpenGL 3 implementation.

Requires:

  • C++ and graphics API knowledge.
  • Experience with HLSL and GLSL, or the willingness to learn.

Possible Mentors:

  • RobertBColton
  • JoshDreamland
  • TheExDeus

Integration of the Box2D Physics Engine

The current version is our own custom rolled wrapper to Box2D with documentation that simply lacks joints, the GameMaker: Studio compatible extension on the other hand lacks, well, compatibility.

Requires:

  • At least intermediate C++ knowledge.
  • At least an intermediate understanding of basic high school Physics.
  • GNU make experience, ability or willingness to learn how to compile and link libraries.

Possible Mentors:

  • RobertBColton

Bullet Physics

Our current Bullet implementation for 3D physics is much more lacking then our Box2D integration. Some of the remaining functions that are needed pertain to Soft Bodies, Rigid Bodies, and Constraints.

Requires:

  • At least intermediate C++ knowledge.
  • At least an intermediate understanding of basic high school Physics.
  • GNU make experience, ability or willingness to learn how to compile and link libraries.

Possible Mentors:

  • RobertBColton
  • JoshDreamland