Game Feel and Cider Presses - Hanzo’s Wall Climb, Object Interaction, and the Poetry of John Keats
What the hell is this?! A blog post?!
It’s been too long! Man, life has been something of an adventure in the time between my last blog post and now. It’s a long story, but the conclusion of it really is that I’m hoping to do more blog posts soon.
I’ve once again overhauled the portfolio section of the site to include a clear distinction between narrative work and programming work. It’s all game development, really, but this way it’s better at showing off my skills in those areas.
The more I learn about gameplay programming, the more obsessed I become with replicating game feel. This really gives you a great idea of how games are actually working underneath the hood. To that end, there’s two items I wanted to share with you today.
Item the first - I’ve been watching a series of tutorials created by Matthew Palaje that centers on recreating popular game mechanics in Unreal Engine 4. It’s an amazing and super educational series. That said, it obviously doesn’t replicate some of these things on a 1-to-1 level. After recently getting back into Overwatch, I wanted to take at least one of his tutorials and enhance it to both be slightly more performant and, most importantly, to better replicate what is truly going on in Overwatch. Since this idea popped into my head when I was watching his Hanzo wall climb video…that’s what I did! To best explain the Blueprint scripting behind this idea, I made this short video to show it off:
Item the second - the other thing that’s been taking up my mind has been object interaction in games. The logic behind it is very interesting stuff - imagine the work that’s gone into ensuring you can accurately, smoothly interact with a 3D environment when you’re looking at a 2D screen and navigating with a keyboard or gamepad!
Take, for example, Halo. One of my all-time favorite series! One night, when I was randomly playing Halo: Reach and thinking about its underlying logic, I came to the conclusion that the game is doing constant line traces of one sort or another since your reticle will change color when you hover over an enemy (and components on enemies - remember how it will put an extra dot on your reticle if you’re aimed at their head). But, obviously, this line trace is not used for object interaction, at least, not initially. Otherwise, you’d be able to interact with terminals/buttons/weapons/etc from quite a distance…
So, as I wandered around the burning planet one Saturday evening, I spent an inordinate amount of time thinking about how the game might be performing object interaction. I know, I’m just a nonstop fount of fun, ain’t I? Who else spends their Saturday nights trying to figure out these sorts of things! But, the more you think about it, the more you play around with the game to see what it’s actually capable of, the more intricate it seems this system must be…at least, in the view of my tiny brain!
So yes, I did just stand there for a good hour looking at a terminal, then away, then at a weapon on the ground, then two weapons on the ground, thinking through possible ways to replicate this system…no, I’m not insane. At least, the voices in my head tell me I’m not crazy.
All that said, after thinking about how I would replicate this system in Unreal Engine, this is what I came up with…
Each interactive object must have a trigger volume to detect when the player is within range of it.
When this happens, the object is added to an array on the player. Call it something like “array of interactive items in range.”
Obviously, when you exit the trigger volume, the item must then be removed from this array.
Every few seconds/ticks/whatever the case may be, do dot products on these items. We want to figure out which of these is closest to the center of the screen!
Whichever has the dot product closest to 1 (closest to the center of the screen) is marked as the current “interactable item.”
When an item is marked as the interactable item, and if the dot product is a certain value, send a message to the item to inform it as such. This will in turn send a message to the UI for an interactive alert and enables input on the object.
Now, when the player presses the interact key, call the interact interface on it!
…Or, at least, something like that! Ha! If anyone reading this has worked on interactive objects in Halo before, I’d love to speak with you and learn more on the topic!
With that said, let’s move onto something a bit less technical, and a bit more poetic!
As autumn dawns with blood-red skies and the smell of smoke blanketing the entire Denver area, let’s take some time in the midst of COVID to reflect on the beauty we have around us! It may be a crap year, we can find solace in a cider, nature, and a good poem!
To that end, let’s celebrate the season with the work of John Keats. I’ve been getting more into poetry lately. I love language, and the numinous experience of that pleasure. I also attribute my newfound love for this to Malcolm Guite, an English poet who’s written some fantastic stuff…and yes, has a gaming connection. I’ll save you the joy of discovering it for yourself. For my part, it felt like destiny when I did. Since the start of the pandemic, he’s been doing videos from his home office sharing poems, prose pieces, and art from the vast library of English literature and culture. They’re well worth a watch, especially for those of us stuck at home right now.
To Autumn by Keats: https://www.poetryfoundation.org/poems/44484/to-autumn
Thanks all. Stay safe, stay healthy, and as always, go forth and do good!
Connor