Skip to main content

The Tools Programmer

·816 words·4 mins
Engineering Roles in Game Dev - This article is part of a series.
Part 9: This Article

Overview
#

The Tools Programmer builds the tools that the artists, writers, and designers use to build the game.

Wait, doesn’t the game engine already do that for you? Well, yes and no. A Game Engine is a suite of tools that covers the basics of what you should need when building a game, but its impossible to make a set of tools that are tailored to suit every game being developed, and that’s where the tools programmer comes in.

As a Tools Programmer, your role is to enable the rest of the team to have a greater impact.

I had a chat with Chris Gregan, Lead Developer at Celbridge.org and previously Lead Tools Programmer at Romero Games, for his advice on getting into tools programming.

Making Effective Tools
#

The Most impactful tools are ones that empower teams. For example, giving the level designers a button that gives them a capability that they didn’t have before. Whether it automates work for them that they previously had to do by hand, or gives them a new way of designing a level.

It’s often easy to think of tools as user tools with buttons, gizmos..etc but they are often are automated scripts that run behind the scenes when files are downloaded, saved,..etc. For example, in my last project we made a tool that generated the telemetry events for the game. Events were written as JSON, but a python tool would take those events and implement them into the game (C++ code with validation logic) based on the JSON file.

The Design of a good tool will save people a ton of time.

Pros
#

Why might a student want to pursue this role?

  • Fun to work on. Rewarding seeing the impact of your work.
  • If you’re more into the engine side of things than gameplay, tools might be the perfect fit for you.
  • Opposite of UI Programming in terms of churn. Tools don’t get thrown out and replaced, but get built on and adapted and expanded as requirements change.
  • If you have an interest in UX. You like the refinement of user experience and you like talking to those users a lot.
  • Impact: You’re a multiplier on other people’s effectiveness by making a tool for them.
  • If you want to advance in your career, adding value (which tools development leans toward) is easy to demonstrate in tools programming.
    • i.e. I saved the entire level design team hours of work because I added this new tool.
  • If you can empower a lot of people you’ll make a lot of friends. You become a lot of people’s favourite person.

Cons
#

Why might a student want to avoid this role?

You’re in a supporting role. If you prefer to work directly on the game, this might not be the role for you.

Some organizations don’t put a lot of value on tools development and see it as a bit of a help desk/call centre instead of giving it the time and space it needs to build a solid foundation. Similar to engine programming.

This leads to:

  • Being seen as an obstacle (i.e. why won’t they let me have X feature)
  • Constant pressure, drowning in tasks
  • People trying to cut your budget
  • Put out fires, hit the next deadline, struggle to keep up

In the wrong environment, this role can be a struggle.

Example
#

Something you did in this role as an example of the kind of work you get to do?

A recent example would be a narrative tool for an Unreal Engine game. The Initial implementation was clunky, using Unreal’s data assets. This eventually evolved into a combination of an external tool and custom editor. The end result was a streamlined process for the writers writing game scripts.

Another example was the city designer tools I built for Empire of Sin. Placing road junctions would generate networks. These integrated with traffic and pedestrian systems as well as helped determine boundaries for neighbourhoods.

Student Projects
#

What kind of student projects would you recommend doing to prepare for this role?

  • A Custom UI inside a game engine editor

  • A custom debug visualization

  • Something utilizing Python - A lot of tools integrate python

    • In the last project, Editor utility widgets were a thin visual layer that called into a python tool
    • The entire Unreal Editor API is mapped to python commands
    • Great thing to see on a CV: writing pipeline tools in python (i.e. modifying or validating assets)

Resources
#

I would recommend any general purpose UX books. A lot of tools programming is figuring out the UX. Tools is all about enabling other people to do their work, and finding ways to make that experience as smooth as possible will make those tools more effective.

Dave Ryley
Author
Dave Ryley
Game Developer
 Author
Author
Chris Gregan
Lead Developer at Celbridge.org
Engineering Roles in Game Dev - This article is part of a series.
Part 9: This Article

Related

The Animation Programmer

·856 words·5 mins
The following is primarily input and advice from John O’Kane, a principal software engineer with years of animation programming experience, with my contributions sprinkled throughout. Enjoy. Overview # An animation programmer’s primary role is to take a character (or object) design and provide the code and systems that will bring it to life. This means a lot of talking with everyone involved:

The Multiplayer Programmer

·553 words·3 mins
Overview # The Multiplayer Programmer’s job is to make sure the game works reliably across a network. From setting up lobbies and matchmaking, to supporting the shared experience of all players over the course of a match. I’ve asked Peter Romanovsky, who was the Principal Multiplayer Programmer at Romero Games, to provide his insight into the role. Pros # Why might a student want to pursue this role?

The Graphics Programmer

·629 words·3 mins
Overview # The Graphics Programmer/Rendering Programmer is responsible for making the game look as good as it possibly can, while also making sure its within the performance budget for the target hardware. This involves working closely with artists to understand the target look and quality of the game, and working to find computationally cheaper solutions that still maintain that level of quality.