Google Summer of Code 2016 Final Report

Organization: MovingBlocks

Project: Standalone NUI extraction and visual NUI editor

Product: Terasology

Terasology's Gooey mascot

Gooey - Terasology's cute slimy mascot!

Terasology is an open-source sandbox videogame, originally created as a Minecraft-inspired tech demo, later growing into a stable engine for voxel-based gameplay. The project’s focused on architecture and extensibility, but as of early 2016 has released a first Alpha version to be a baseline engine for creating content and building gameplay on.

Terasology uses its’ own NUI (New UI) framework for constructing and rendering user interfaces. The framework, while being a stable library with a significant selection of widgets and APIs, has relied on editing text files and (repeatedly) re-running the game to see how the edits turn out. Therefore, a standalone editor with a preview option has been proposed as a GSoC project. Having written a proposal for the project - the only one I prepared for Google Summer of Code 2016 - I got selected to participate in this year’s program.

Throughout the summer I’ve created an in-game visual editor for NUI elements (individual UI windows) as well as skins (collections of styles similar to CSS), allowing developers and modders to edit existing interface elements or create new ones with instant feedback being displayed in the editor as well as in-game. A short summary of the finished product can be found here, and a more detailed feature set - here.

In addition to this, after some investigation I’ve created a checklist of dependencies that need to be resolved in order to extract NUI into a separate library: while throughout the coding period I’ve mainly focused on the NUI editor, I’m planning to return to this checklist after this year’s GSoC.

Contribution Summary

A complete list of my commits to the project can be found here, though it includes unrelated contributions before GSoC (and will likely include numerous future contributions!).

GitHub LOC stats

Git commit statistics for fun! (Disclaimer: may or may not be inflated by Apache headers)

The pull requests relevant to the NUI editor (and related APIs) are:

Pull Request IDSummary
2338An initial implementation for UITreeView - a core component of the editor
2348Followup PR to fix a silent null pointer exception
2349A UITreeView↔JSON serializer/deserializer; buttons to expand/contract tree view nodes
2355Improvements to the tree view APIs based on mentor feedback
2360Initial implementation for the NUI editor
2375A hotkey setup to run the editor
2391Context menu interface - needed for the editor but designed for general use
2408Icons for the editor tree view based on node types
2409Removes an obsolete testing screen - at this point the editor is the main testing environment
2415Smart “Add…” options based on node types
2428Minor tweaks based on mentor feedback
2432Skin editor based on the main screen editor
2438Documentation and implementations for the remaining feature set from the proposal
2448Backup & autosave functionality for the screen and skin editors

Future Plans and Ideas

Some of the areas I’ll be working on in the future are:

  • Adding additional visual feedback to the editor - for instance, clicking a widget in the editor area should select it in the preview widget and vice versa.
  • Extracting the NUI framework into a standalone repository.
  • Documenting the NUI framework from scratch, including Javadocs and wiki tutorials.
  • Continuing my work on integrating the gestalt family of libraries into the open-source game Destination Sol.

Apart from that, I’ll be on the lookout for other opportunities, major or minor, to contribute to MovingBlocks and FOSS in general!


I’m very thankful to my mentors, Florian Köberle and Rasmus Praestholm. Their continuous support and guidance throughout the summer has been truly invaluable! I’d also like to thank Google for the wonderful opportunity to work on FOSS.

Thank you all!



Leave a Comment