Collaboration on large teams with GAMECURE
Tags: unrealengine, plasticscm, workflow, jira
Published: 2022-03-31 08:09:44

Introducing **GAMECURE**! An open source Unreal Editor build distribution system for Windows, Linux and Mac, utilizing Dan Engelbrechts eminent longtail delta patching and with a bunch of other nifty features to get going quickly with your source built Unreal Engine in Plastic SCM.

![GAMECURE main window](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z2bt00bne1cl7xnwjpny.png)

Yes, that introduction is a mouth full so let me break it down for you.

Most of my career I've spent developing games at EA DICE. This is what would be considered a large studio (not the largest by any means) but we had projects with hundreds and sometimes thousands of individuals contributing to game code and content. All these individuals can contribute up to thousands of changes to the repository every day. The trick to being this fast is putting a wall between the content creators (artists, game designers, 3d-modelers, animators, etc.) that produce content and coders that improve, fix and many times break the game.

The coders will have a source version of the game engine on their computers. To play the game or use the game editor the coders need to build (compile, link, etc.) the whole engine locally on their computers. The custom computers used by GOALS coders spend 12-13 minutes on this but a regular gaming computer will spend hours on it! This does not only take a lot of time but it distracts you, is error prone and complicated. As a content creator you just want to create amazing content, no hassle!

What we need is some kind of tool that can act as the central tool for all GOALS development if you are not a coder, managing the other tools you need and allows you to easily feedback to engineers what is working and not working as well as quickly stepping back and forth between Unreal Editor versions.

Another big studio/project is Epic Games who produce the game Fortnite. They also happen to be the owners and maintainers of Unreal Engine. There is a great article explaining their workflow and reasons behind it called: [Workflow on Fortnite - Collaboration on large teams with UnrealGameSync](https://cdn2.unrealengine.com/workflow-on-fortnite-whitepaper-final-181633758.pdf). And this takes us to an application called "UnrealGameSync" which is essentially what we want! A separation of coder and content creator workflow and concerns. Perfect! But... UnrealGameSync only works with Perforce version tracker (which is not really intended to be replaced) and its downloading full binaries each time (no delta patching) and it only works on Windows *sigh*

For a studio, like ours, that is cloud native and allow their developers to work on Windows, Linux or Mac and uses Plastic SCM for version control, that is three deal breakers right away. It was deemed to much for us to work around so we decided to create our own tool - GAMECURE!

One of the core development philosophies at GOALS is simplicity. And for us that usually means as few dependencies and as few hoops to jump through as possible. The maximum amount of complexity for a content creator at GOALS setting up their environment, we decided should be: Get the simplified version of Plastic SCM (called [Gluon](https://www.plasticscm.com/gluon)) and get GAMECURE from a permanent link. The rest would be automagic. Hence the GAMECURE application could not have a bunch of external dependencies and a stack made up .NET 6 and [AvaloniaUI](https://avaloniaui.net/) that we compile to standalone binaries turned out to be a good combo.

![Plastic Gluon. Simplified version tracking client](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k0fnglemuxhlgr4pby9i.png)

Another important requirement for a cloud native company as GOALS is that we don't have to download a bunch of unnecessary stuff. Cloud native meaning that essentially all our infrastructure is in the cloud. All downloads we do internally and that other people do externally from our CDN's incurs costs. Minimizing the amount downloaded is paramount and if you ask me, is just plain better engineering. For this we turned to a library called [longtail](https://github.com/DanEngelbrecht/golongtail) by Dan Engelbrechts. This allows us to only distribute what has actually changed to the content creators. 

## What GAMECURE will do for you
- Set up your Plastic SCM workspace with a predefined configuration so it only downloads what is needed to work with the pre-built editor.
- Setup and download Unreal dependencies.
- Single sign on to our cloud so you don't have to authenticate each time you want to update.
- Delta-downloads of the editor to decrease the time it takes to update your editor.
- Notifications when there's a new version available on the main branch.
- Single click to create a bug report for the editor in Jira.
- Cross platform packages, .app bundle for Mac, MSI installer for windows and a zip for Linux with a bundled config that is put together at build time.


![Create workspace dialog in GAMECURE](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zuyd3pmlata1r1sjmkw4.png)

## A typical workflow
1. A content creator may need new editor functionality or a new C++ blueprint class for instance.
2. The coder takes the specifications and writes the feature in code. Once tested and reviewed, she pushes the changes to Plastic SCM and kicks of the CI.
3. The coder can now ping the content creator and say "i pushed the changes you need in changeset xxx"
4. The content creator will get a notification in GAMECURE saying there is a new version available and can verify that the particular changeset is in there.
5. The content creator now hit download on the new editor and usually in just a few seconds (due to the delta patching) the new version is on disk.
6. The new editor can now be launched with a button press from GAMECURE.

## Some technical details
- .NET 6 and AvaloniaUI for cross platform GUI application
- WIX installer for an easy to use MSI on Windows
- Custom BuildTool built in .NET 6 to remove the need for multiple scripts for different platforms. This tool is used to generate a config and build the different packages.
- GUI is separated from the core functionality so that a CLI(or any other UI) can easily be added.

Future work:
- Auto-updating when there's a new version of GAMECURE
- Better Jira integration, instead of opening a browser it should have a dialog inside GAMECURE and attach any log files or screenshots
- Track the current changeset, so that the user doesn't download an editor that is very different from the changeset they are on (this is currently a bit hard and undefined in plastic)
- PKCE implementation for authentication/authorization with GCloud to remove the need for a Client Secret.
- Progress bars where it's possible, for example download the editor, copy the editor etc.
- Add support for other version trackers than Plastic SCM.
- Add support for other clouds than Google.

We welcome contributions and we are curious to know how you solved your workflow challenges!

Head over to our [GitHub](https://github.com/goalsgame/gamecure) to get started with your GAMECURE - workflow!