Blog
There’s no fire without Smoke Tests
It’s a familiar tale: you’ve set up an expensive and time-consuming playtest, and just wanted to squeeze in one more feature. You cook the build, give it a quick sanity check, and send it off. The playtest starts well, but as players start to hit level 4, they encounter bugs, error spam and fatal crashes....
This Graph Doesn’t Exist: The Ghost of The Delayed Issue Effect
So this graph is pretty famous, especially in quality circles. It’s meant to convey that fixing things earlier is better – by orders of magnitude. It’s a pretty stark visual of something we feel is intrinsically true. Only problem is, it’s bullshit. This specific visual is from The Journal Of Information Systems Technology And Planning...
Exploding barrels, and why your first test should be an Asset Test
Learn about asset tests: an accessible approach to writing tests for game projects, and a great starting point for people new to testing
The Topography of Unreal Test Automation in 2025
I’ve been exploring automated testing more in Unreal recently, and one thing that won’t surprise Unreal users is there’s a million different ways to do it, each with their pros and cons, and half of them are undocumented. I thought I could do a useful overview of the different automated testing tools at your disposal...
Setting up a Windows cloud machine to run unity with graphics, so Jenkins can run automated tests
The latest in a series of posts on getting Unity Test Framework tests running in jenkins in the cloud, because this seems entirely undocumented. To recap, we had got as far as running our playmode tests on the cloud machine, but we had to use the -batchmode -nographics command line parameters. If we don’t, we...
Building Unity using Jenkins Pipelines
This is the third of a series of posts on Jenkins and Unity. In this post I’ll outline how I set up Jenkins to make reliable repeatable Unity builds, using a pipelines script (also called a jenkinsfile) that’s stored inside source control. I’ll outline the plugins I used and the reasons behind some of my...
Running unity tests on a build server
(Read part 1, about creating parametric level smoke tests, here) Now we have some useful tests, we want our Jenkins install to run them frequently. That way, we really quick feedback on failures. Here’s how we do this at Roll7. Running tests from the command line Let’s assume you already have a server to build
Smoke-testing scenes, using Jenkins and Unity Test Framework
You may be familiar with Unity’s Test Runner window, where you can execute tests and see results. This is the user-facing part of the Unity Test Framework, which is a very extensible system for running tests of any kind. At Roll7 I recently set up the test runner to automatically run simple smoketests on every...
Adding a custom movement mode to Unreal’s CharacterMovementComponent via blueprints
This isn’t a full tutorial, and I’m not an expert, but I noticed this knowledge wasn’t really collected together anywhere, so I’m putting something together here. Please shout if there’s any holes or mistakes. The CharacterMovementComponent that comes with the third-person starter kit has several movement modes you can switch between using the Set Movement Mode...
Game AI Pro chapter on Context Steering
I think every few years I’ll be destined to make a blog post that starts “oh I have a blog don’t I.” You can now get the chapter I wrote about context steering in Game AI Pro Volume 2 for free on their website: Click to access GameAIPro2_Chapter18_Context_Steering_Behavior-Driven_Steering_at_the_Macro_Scale.pdf
How did I get into AI gamedev?
A computer science graduate got in touch with me via an academic friend, interested to know how they could become a games industry AI programmer. They seemed interested in what kind of masters course would help their career. Although that’s definitely possible, it’s not the route I took. My full answer follows: … I’m not...
How to symbolicate iOS crash dumps from Unity Cloud Build games
Disclaimer: this advice is provided without warranty, works on my machine, etc. Use it at your own risk. We’ve been using Unity Cloud Build at Spry Fox for a soon-to-be-announced project. Since we’re a remote company, it’s great to be able to push and know that both Android and iOS builds will be soon available to everyone...
DecisionFlex
DecisionFlex is a new Utility-based AI tool for Unity3D
Innovating In Your Pants
The company I work for, Spry Fox, is known for its innovative games like Triple Town, Steambirds and Leap Day. In fact, it’s one of the reasons I was attracted to work there in the first place! We do this by prototyping a lot of ideas, iterating quickly, and (ideally) killing readily. All as fully...
Your Favourite Free To Play Game Hasn’t Been Made Yet
There’s been a lot of criticism over the last few days of the new Dungeon Keeper free-to-play mobile game from EA. By all reports, it features some egregious and long countdown locks, that can be opened early with in-game currency, which can of course be topped up with real money in-app purchases. These types of IAPs are...
How to build Unity3D scripts from the command line
I use emacs for day-to-day programming, including writing unity scripts. For a while I made changes then tabbed over to the unity editor to watch them compile and check for errors. This was, imaginably, tedious. Anyone not coding in MonoDevelop has the same issue, and even the MonoDevelop folks (god have mercy upon their souls)...
Anatomy of a unit test
In my spare time I maintain a unit testing library built for Unity3D. It’s called UnTest, it’s open-sourced under the MIT license, and you can download it here. In the Unity3D community forums announcing UnTest, _Shockwave asked for an example of some real-life unit tests written with this framework. UnTest is very xUnit-flavoured, so they...
DAMN Behaviours and Context Steering
After my GDC talk, Treff on twitter sent me a link to a paper from the late 90s by a researcher called Julio K. Rosenblatt. It had some similar ideas to my context steering technique. I thought I’d discuss the differences and similarities here. The system asks modules (behaviours) to vote for how much it prefers...
Context Behaviours Know How To Share
Last time we saw how steering behaviour systems are very useful when either behaviour integrity isn’t important, or if there are a large number of entities to help hide any irregularities. We saw this is actually an unavoidable feature of steering behaviours. The heart of steering behaviour systems, the merging of decisions of several behaviours,...
Steering behaviours are doing it wrong
Update: you can now read part two of this series. Steering behaviours have for a long time been a gateway drug of game AI. People like this (annoyingly pluralised) technique because its components are fun and easy to write, the framework code is very simple, requiring only some vector maths knowledge, and the end result...
Reducing Memory Usage in Unity, C# and .NET/Mono
Unity on iOS uses an early version of Mono’s heap manager. This manager doesn’t do packing, so if you fragment your heap, it’ll just grab a new one for you. I am under the impression the Unity boffins are working on a new heap manager to get around this problem, but for now a game...