Berry van Someren
Software Engineer

Bringing AbbeyCore to iOS

2014

I've had the pleasure of doing 7 months of internship at Abbey Games, a young indie game company based in Utrecht. At the time, Abbey Games was working on their second game: Renowned Explorers, released September 2nd 2015, with their first game being the well received Reus.

I did a full time summer internship and a five month part-time internship, giving me the opportunity to see a big part of their game development cycle and gain a lot of experience in game development. I like to mention that internships have never been a mandatory part of my education and that I applied for the internships purely out of my own interest and curiosity to learn more. The goal during my internships was to port Abbey Games' in-house game engine, AbbeyCore, to iOS, and adjust the development pipeline to support this.

Details

My first task was to restructure and improve the CMake scripts that were used to create builds for different platforms. In the old structure, code for different platforms had become entangled so it had to be split up properly. Other than that, the structure needed to be reimagined as some of the libraries used by AbbeyCore had to be cross-compiled for use on iOS. This was the first time I ever heard of build automation and CMake, but I found it quite a fun challenge to start with!

The second step was to make sure the engine would at least compile for iOS. Which included implementing iOS specific replacements for things that were not supported or worked differently on iOS. I also had to refactor the way in which the engine would start up, as it was designed to have complete control after main() was called, while on iOS the application has to respond to more OS events. This also involved my first experience with Objective C.

To improve my understanding of how applications on iOS work I had to create a very simple test application using OpenGL ES to render some simple graphics. After that I integrated different systems of the game engine into this application, step by step.

One of the systems that had to be changed was the way in which shaders were loaded on the iPad. Abbey Games used their own shader language, called HLGL, that could be compiled into both HLSL and OpenGL. I had to add an altered version of the HLGL to OpenGL parser / code generator to add an OpenGL ES option. I also built the GLSL optimizer by Aras P into the content pipeline to optimize the shader code.

I used ASIO to create a connection between Desktop and Handheld devices for asynchronous IO and created a file archive that could be accessed remotely to load game assets to the iPad. This way, game assets could be altered on the desktop and then send to the handheld device at run-time resulting in cross-platform remote hot-reloading. When altering game assets on the desktop, the changes would immediately be applied on the handheld device, which was an incredibly useful feature to speed up the workflow.

In the end I had to create a small demo using AbbeyCore to illustrate the new possibilities on the iPad to the rest of the team. AbbeyGames uses Lua as a scripting language for gameplay code. I had never used Lua before but I found a very clean and easy language to learn and use. Creating the demo was a lot of fun since it made the results of my efforts so clear and it felt incredibly rewarding.