As we prepare for the upcoming Kickstarter, I wanted to get back into the habit of typing into programs other than Visual Studio. So, I’m going to give a quick rundown of how we’re capturing gameplay footage for the Kickstarter video.
Of course, it’s important to show your game in the best light possible without being dishonest. Battle Chef Brigade’s Arena can be difficult to film for this reason, since the monsters are much more interested in stealing your ingredients or attacking than acting cool for the camera. To encourage them to behave nicely, we disable or encourage certain monster actions for each shot. This way, we can trigger behaviors that happen naturally in gameplay without having to do a few dozen takes due to randomness. In other words, instead of hoping for three different monsters to choose and synchronize a set of behaviors, we can force them to!
In our Entity system, this is fairly easy to do. A Monster’s AI (or Locomotion, Physics, Combat, Sensors, etc) can be disabled easily (they’re all Components), but that would require clicking a bunch of check boxes. We can also spawn a Monster anywhere by dragging their prefab into the scene, but that’s slow and has to be done over and over and over. Our big goal for this system is to have it be as reproducible as possible, which is very important since it’s super easy to forget to hit record once everything is set up :) Also, some of Mina’s animations are still being colored, so we won’t capture the final footage for another week or two. If the staging system is easy to trigger and reset, though, we know we’ll be able to capture that perfect shot again with the final animations!
To make a simple staging system, Ben added support for a few concepts: Matinee Collections and Matinee Objects. The Matinee Objects all share a simple interface: they can be Started and Stopped. This provides a clean interface for triggering and resetting a scene. Some types that derive from Matinee Object are MatineeEntity and MatineeIngredient. Both of these Monobehaviours are used in a prefab, after being given a little data about what they’ll do. MatineeEntity is given an Entity (like a Stealbird) and some options, like whether to disable the Entity’s AI or where to set a Move Target. Of course, the Matinee Object will spawn the Entity when the Matinee Starts and destroy the Entity when the Matinee Stops! On top of that, a delay can be specified so that events occur precisely when we’d like.
Of course, just spawning and destroying a Monster isn’t going to make things much easier. That’s where Matinee Collections step up to the plate. Given a bunch of Matinee Objects, the collection can trigger or stop them all at once. This is a straightforward way to set up complicated situations.
The final step is preparing an easy way to trigger a collection. We set one Matinee Collection as the “active” one, which can then be triggered or reset using a keyboard button. Another great trigger option is “On Camera”, where the Matinee starts when the game camera reveals a certain area of the map.
For Color Sheep and Orion’s Forge, we used Fraps to capture footage, but for Battle Chef Brigade we’ve started using OBS (Open Broadcaster Software). OBS is surprisingly good, fueled by the success of Twitch and Youtube livestreaming. It can also record footage, which it does very well. Here’s a list of good settings for recording instead of streaming: https://obsproject.com/forum/resources/how-to-make-high-quality-local-recordings.16/
OBS has options to capture a game window or a region within a window. We’ve Game for Builds and Window Region for the Unity Editor.
In-game debug menus are one of the most valuable tools in our toolbox but are often overlooked by small indies. At their simplest, debug menus are just editor tools that are accessible while playing the game, often replacements for editor functions.
In our experience, even straightforward editor functionality can be much more accessible as a debug menu option. For instance, turning off the Forest’s foliage in the editor is pretty easy since it just requires deactivating a few parent Game Objects. However, pressing F4 is a lot easier and doesn’t require hunting for objects in the editor (or the editor at all!). Our debug menu is just a grid of grids, constructed at runtime by adding button requests using a category string, name, anonymous function, and a hotkey.
Cheers! If you’d like me to elaborate on any of these topics, hit me up here or @TrinketTom :)