Category Archives: Projects

GMSteam

GMSteam provides multiplayer matchmaking capability via the Steamworks API for games created in GameMaker. This is not a capability that is currently publicly available.

There are three components to GMSteam:

  • A DLL that provides a GameMaker-compatible interface to the Steamworks API, along with some additional helper functions. This is required due to GameMaker’s strict requirements on external functions.
  • GameMaker scripts corresponding to each Steamworks API function.
  • A GameMaker object that handles the low-level details of interacting with the Steamworks API, specifically initialisation, receiving callback results, and shutdown.

While the focus is currently on matchmaking, there are other Steamworks APIs that are not currently available within GameMaker and these are being considered for inclusion.

pyneovi

pyneovi is a wrapper around the API provided by Intrepid Control Systems for communicating with their NeoVI range of devices. In the course of my research work with Cogent I had to use the NeoVI Fire to interface to an ECU in a vehicle. While the Vehicle Spy 3 software provided by Intrepid offers an impressive range of features, including several methods of scripting, our requirements called for a much more lightweight option that could be integrated directly with our existing code. I had already been writing this wrapper library in my spare time, so all that was needed at that point was to create the vehicle-specific configuration (proprietary to the vehicle manufacturer we were working with) and speed up the implementation of some additional features that were pending.

The focus of the library is on communicating with the ECU in the context of a diagnostic session. Currently, authentication via Security Access commands (usually required for setting output values) is not handled and must be performed by a separate tool.

You can find pyneovi on BitBucket under the GPL license and the documentation is hosted on Read the Docs.

Usage example

Example script to print the ambient temperature obtained from the HVAC ECU:

import neovi.neodevice as neodevice
import neovi.ecu as ecu
import neovi.spec as spec
import json

neodevice.init_api()
dev = neodevice.find_devices(neodevice.NEODEVICE_FIRE)[0]
dev.open()

input_file = open('vehicle.spec', 'r')
data = json.load(input_file, object_hook = spec.from_json)

hvac = ecu.ECU(data['ECUs']['HVAC'], dev)

result = hvac.read_data_by_id('External Ambient Temperature')['value']
print "Value = %.1f %s" % (value_name, result[0], result[1])

dev.close()

Example output:

$ python example_value_read.py
Value = 34.5 Deg C

Dependencies

The Python module dependencies are minimal and will usually be satisfied by the modules provided with your Python distribution: ctypes, platform, json, and threading.

Additionally, the library requires icsneo40.dll (supplied with the Vehicle Spy 3 software) to be present, as this handles the low-level details of communicating with the hardware.

GSB hull editor

The GSB hull editor is a graphical tool for creating hull graphics and related configuration information for Gratuitous Space Battles (by Positech Games). The goal was to simplify the creation of new hulls compared to the manual editing of text files previously required, as well as allowing the design of new hulls using libraries of parts.

This tool is currently not available for download, though a preview video can be found on YouTube, embedded below:

 

Tools/software/libraries used

  • Programming: Python, wxPython, pubsub

 

Lessons learned / techniques used

This project allowed me to work with a new type of user interaction—allowing the user to place and move sprites on a canvas, including highlighting the “active” sprite and handling z-ordering. The canvas itself can also be dragged to allow the user to work on a larger area than would otherwise fit into the window. Additionally, there are several types of special sprite to indicate things such as target locations and engine glows that will be used by the game engine at runtime. Display of these can be toggled by the user.

The project also served as an introduction to the use of pubsub for passing messages between logically separated parts of the code. For example, the sprite information bar at the bottom of the window listens for messages regarding updated coordinates, allowing the canvas manager to provide these updates without explicitly requiring knowledge of the information bar. This means that multiple objects can provide updates and multiple objects can also listen for those updates, while still maintaining a modular, self-contained, and reusable design for each object.

GSBEdit

GSBEdit is a tool for modding game data for Gratuitous Space Battles (by Positech Games). It is inspired by tools such as the Tiberian Sun editor SunEdit 2K by Childs Play Software, which a much younger Kemp made extensive use of. The goal was to dramatically simplify the creation of new game content compared to the manual editing of text files previously required.

The source code can be found at Bitbucket.

If you arrived here with the intention of downloading and using GSBEdit then please refer to my modding subdomain.


Screenshot of GSBEdit during development.

Tools/software/libraries used

  • Programming: Python, wxPython
  • Testing: pylint, clonedigger, nose, coverage

Lessons learned / techniques used

The GUI tabs for the module editor (seen in the screenshot above) are generated based on a simple GUI description structure I developed. The object responsible for creating and hosting the generated GUI elements is self-contained and requires no oversight by the parent window object. This architecture and the description structure used allow for a number of features such as:

  • Automatic alignment of fields.
  • Multiple columns.
  • Highlighting of required fields.
  • Dynamically hiding/showing fields, groups of fields, or entire tabs based on values of other fields.
  • Dynamic calculation of statistics such as DPS values.
  • Notification of changed field values to the parent window.

This provided a significant boost in development speed when extending the module editor beyond the basic options initially implemented and eliminated much of the tedium that can be encountered when implementing a GUI of this type manually.

GSBEdit also provided me with my first chance to apply testing, code analysis, and automated documentation generation techniques to a non-trivial project.

As my first program that was distributed to an audience with a range of computer specifications and varying technical skill levels, GSBEdit taught me valuable lessons in terms of testing and packaging programs. Particularly, even given the constraints on possible configurations dictated by the Gratuitous Space Battles game itself, people had created situations that never occurred on my own PC.

 

Personal and freelance projects

This section of the site lists some of the projects that I have worked on either in my own time or on contract.

As project lead

Libraries

pyneovi GMSteam
A wrapper around the API provided by Intrepid Control Systems for communicating with their NeoVI range of devices. Beyond my own work, this has been used by researchers at two major organisations. A package to allow matchmaking in GameMaker via the Steamworks API. Planned to encompass additional Steamworks APIs in the future.

Modding

GSBEdit GSB hull editor
A tool for modding game data for Gratuitous Space Battles by Positech Games. A graphical tool for creating hull graphics and related configuration information for Gratuitous Space Battles by Positech Games.

Other

Game text editing

v_and_n
Satellite Sweethearts demo (Vysoko Anime Production) Void & Nothingness (Vysoko Anime Production)
A visual novel demo for which I edited the English translation. A visual novel style game for which I edited the English translation.
angels_and_demigods
Angels & Demigods (7 Keys Studios)
A visual novel style VR game for which I edited the English translation.