We’ve teased you with supernatural stories about the radio this past month. Now it’s time to crack the veil on Oxenfree and look at exactly how its radio ticks.
We asked our lead programmer, and resident Zelda fan, Bryant Cannon to scour the source code and reveal some mysteries of what happens when Alex twists the dial.
Q: Just how important is the radio to Oxenfree? As an object or mechanic?
A: The radio opens up another dimension of exploration. (Not a literal alternate dimension, of course. Well, probably not…) I’m a huge fan of the Zelda games, which often have this kind of hidden dimension of possibility. In Majora’s Mask specifically, they have a few layers of this. There is a massive world to explore, but within that world is a layer of social interactions that can change how the world works. Then, there is an additional layer of assuming different identities (using masks) that change how each character in that world responds to your interactions. Persona 4 also does this; not only is Inaba a cool 3D world to explore, but it changes over time in ways that you can’t easily grok in a single playthrough, or just by looking at a map of the world.
In Oxenfree, the radio allows access to this new axis of exploration. You might pick up radio broadcasts from the mainland that tell you a bit more about the world, stumble upon some information relevant to the story, or maybe even learn a bit more about the supernatural goings-on on the island. I encourage everyone to take the radio out whenever and wherever possible and see what they can find!
Q: Tuning the radio seems very analog, how did you adopt that feel, that sensation, in the digital arts?
A: I really just tried to think about how a real radio worked. Unless you are using a digital radio interface, you can’t just be “on” or “off” of a radio station, you can be in between radio stations. You can also be on the outskirts of a station’s range, which results in very fuzzy, spotty reception, and sometimes on road trips you can even hear two stations at once when you’re between cities. All of that gets factored in to a fairly simple model that measures volume and distortion level of the sound you’re getting.
And since the radio control is mapped to the right analog stick, the player can feel the gradual change from static to clear audio, or even stop the needle in between stations if they want. The radio will react as a real radio would.
Q: How are players going to tune?
A: It’s all mapped to the right thumbstick, so it’s truly analog. Mouse controls are still up in the air, but I imagine we will be using mouse movement for that, since most scroll wheels are actually interpreted as digital input.
Q: Was it important to get a visceral feel?It seems like tuning the radio is less of an abstraction from real life and more of simulation?
A: Definitely! The aural and visual feedback is essential to making the player feel the change in frequency, and that feel, in turn, helps guide them to the right place on the dial. We definitely started from the idea of simulating a real radio as closely as possible. We then tweaked and abstracted a few things, and added new kinds of feedback so the player knows that the game recognizes their movements. For instance, when the player is in the vicinity of an important station, the radio UI will faintly glow. As the player tunes to the station, the UI gets brighter and a faint sine wave clip gets higher and higher in pitch until it’s inaudible. Right now that sine wave is pretty annoying, so it’s rewarding to finally hit just the right frequency so that it disappears. It’s actually pretty effective. Perhaps I’ll keep it that way! There’s no hand-holding or snapping, so we use those little tricks to let the player know how “valid” their input is. Notice that I say “how valid,” because everything that you use the radio to interact with reflects this analog quality!
Q: Anything interesting going on in the audio department?
A: We have several streams going at once. There could be up to two actual “radio station” clips running at once. There’s also a static track running at all times, at different volumes. There are various “tuning” one-offs that play one at a time while the dial is being moved, and there is the sine wave I mentioned before. Finally, there is an additional stream for any “reaction” audio from nearby objects. So six streams, it sounds like. Not too bad!
Of course, after that, the radio station audio is fed through an equalizer, along with some other effects to make the distortion more believable. It’s still a work in progress, so perhaps it will grow a little more complex as we continue development.
Q: Any programming mumbo jumbo knowledge bombs you want to drop about implementing the radio?
A: Turns out you can write your own audio effects in Unity! You can think of them as a sort of “audio shader.” It requires creating a DLL in C++ based on some APIs that Unity provides separately. I haven’t tried this yet but it’s a stretch goal of ours to use these to get the radio sounding even more authentic.
Also, the new Audio Mixer in Unity is rad. Use it. And if you do use it, take note that you can make sub-mixers instead of putting all of your channels in one mixer. It’s super useful if, say, you want to create a specific mix for a scene, and then assign that mix to a channel in your global mix. Just sayin’.