Unreal Steam(ed) LAN(s) Last week the time came to finally move MinerMancers multiplayer code over to Steam. We’re a P2P game - we don’t want to run servers, and it’s a co-op game so host advantage isn’t a problem - so we wanted to retain a LAN as an option as well. There were a few wrinkles to doing this, so I thought I’d quickly document what I learned over the last…
Intro This week, after trying to upgrade our project from Unreal 5.6.1 to 5.7.4 and discovering yet again that as well as fixing some bugs that were impacting us, 5.7 introduced a whole new, thornier bug - breaking bundled PSOs which I’d only recently added and did not want to lose. Rant: feel free to skip Unreal is great but it really, really needs an LTS version where bugs are…
Introduction I have an old 15" MacBook Pro from late 2013. Physically, it’s perfectly fine and still a very nice machine. But Apple has decided to abandon it to e-waste; the latest macOS that will run on it is Big Sur, which hasn’t had an update in years, and increasingly software will just not run on it. Visual Studio Code will even auto-update itself to a version that won’t…
The Problem Our game Minermancers involves a handful of silly wizards going mining together. They dig through rock to get to minerals, and that has its own challenges for navmesh updates, but until recently the standard UE navmesh facilities worked fine. However, a tricky problem I had recently is: what if I want NPCs to dig through rock to get to where they need to go, if there isn’t a good…
In-Game Map: The Requirements I wanted to make an in-game map screen. My requirements were: Generated from world geometry My levels are procedural and modifiable so I couldn’t just manually draw it once Stylistic I wanted it to look a bit like an old-skool TTRPG map, not just an overhead game render Here’s the final result, which is basically what I was looking for: You can see that…
There are 2 types of font in Unreal - regular runtime fonts, and “offline” distance field fonts. The former is what you’ll use for UI widgets and such, but for in-world Text Render Components you need Distance Field Fonts. The engine only comes with one, “RobotoDistanceField”, and there isn’t very much information online on how to create new ones. I’ve…
A quick one today to hopefully help someone else who is scratching their head about very weird LastRenderTime results in UE 5.5! TL;DR In Unreal 5.5 if you disable Occlusion Queries, LastRenderTime on most Primitive Components will not be updated correctly. This will cause Skeletal Animations not to play even though a skeletal mesh is definitely within the camera frustum, and any other effects…
The Problem Disclaimer: I am not a netcode specialist, in Unreal Engine or otherwise. I’m just going to tell you how I solved a gnarly problem I had, and why I think it happened. I may well be wrong about any of this, so I welcome all feedback about any nuances or specifics I might have missed or misunderstood, you can find me at Mastodon (preferable) and Bluesky. We’re working on a…
Unreal has some exising documentation on Agent Navigation Avoidance, which works fine if you only want your agents to avoid each other. What if you have friendly / neutral agents that should avoid bumping into the player? There’s basically no documentation on this, and all the advice I could find on the forums was either incorrect or incomplete as of UE 5.4+. So here’s how you actually…
What’s The Problem? Sometimes you want to do some calculations based on the current view, such as a ray/plane intersection to figure out where the player is looking. A lot of information online will immediately tell you to “get the camera component and…”. ⛔ NO! ⛔ If you do this you’ll get some weird edge cases where the results that gives you are just plain wrong.…
The Requirement Niagara is great for simulated particle systems, but its renderers seem pretty useful for non-simulated things as well. What if I just want to give Niagara a set of points, and tell it to use those as particles? My use case was a “throwing arc” visualisation, for when you’re aiming a thrown projectile. UE provides you with helper functions to generate a list of…
Why? With all the assets that make up a game, it’s easy to forget a setting or two sometimes. One of our most common mistakes is forgetting to set up Sound Attenuation for a given sound wave / cue. If you forget to assign attenuation settings for a sound, it’ll always play at full volume regardless of where it is in the world in relation to a player. In a multipplayer game like ours,…
Making multiplayer games is hard. Keeping things responsive for the local client, while still keeping everything consistent on the server which controls it all, which is always a non-zero number of milliseconds of network traffic away, is a tough problem. Unreal Engine has your back for the most part, its in-built replication and multiplayer support is pretty robust. Character controllers…
Have you ever had problems with textures being blurry when you render to textures in Unreal using a Scene Capture Component 2D? Maybe you’ve searched for the problem, and come across forum threads that give really terrible advice, such as turning off texture streaming, or adding a global boost to all texture LODs? If so, you’re me earlier today. The difference is, I can save you some…
You can use Animation montages to play ad-hoc animations on a character. While your animation blueprint is stateful, montages are useful to just do a one-off animation like a reload, a hit reaction, or an emote. But, if you’re making a multiplayer game, calling “PlayAnimMontage” on the character is only going to play it locally. If you want other players to see it, you need to…
Just a quick post today about a very weird error I encountered while trying to package a project with Unreal 5.3; and because I got zero search hits for it on the web, I figured I’d document how I fixed it to save others in the future. Here’s the error I got while trying to package this UE project, either from the editor or the command line: LogObj: Error: LoadConfig…
It’s always better to drive your game’s systems from data that’s easily editable. Games require a lot of iteration, and if you can just play with settings on the fly instead of having to change code, you can try things out much faster, and everyone on the team can experiment, not just programmers. A key asset type for this in Unreal is the DataTable. You make a row struct, then…
Why I Use Note Taking Apps My memory sucks. Partly that’s age, but if I’m honest, it’s never been that good. For years now, whenever I learn something useful, I make sure I put it in a searchable note taking system so that I can find it again later. Sometimes, I even blog about it, and read my own blog later to remind myself of the details 😀 But I always make sure my notes…
Just a quick post today about how I replaced our doorbell with a custom Zigbee button and Home Assistant, running on an old Raspberry Pi 2 I had sitting in a drawer, which pings our phones when someone presses the button, instead of ringing a regular chime. If this interests you, read on! Whyyy? Good question! Our cat Harry, who we adopted from the shelter a couple of years ago, is terrified of…
Do you use JetBrains IDEs like Rider? They’re pretty great; I use Rider myself daily for Unreal Engine development. In this post, I’m going to assume other JetBrains IDEs function largely the same as Rider in this respect, which I’m pretty sure they do. When I started using Rider, I was surprised to discover that, as far as I’ve seen, JetBrains have the best IDE version…
Intro You can do some quite nice text effects with Unreal Engine’s UMG Rich Text Block. Coloured text, outlines, shadows, even embed images in the text. But what if you wanted to do things like this to your text: When I was looking for information on how to do this kind of animated effect, I didn’t find very much. So now I’ve figured it out, here’s the information I wish…
Intro I’ve been experimenting with UE4’s Control Rig recently, in my case in order to be able to do custom skeletal animation in level sequences - this is really handy when you want to animate something in the context of the actual level, instead of just in isolation. I’ve generally found it very useful, if a little under-documented, but that’s understandable since…
Sequencer and Gameplay Camera Blending UE4’s most recent tool for making level animations, cutscenes and other cinematics is called Sequencer. I only just started using it this week, and I really like it. However, I had a lot of difficulty at first with a problem I thought would be extremely common: smoothly transitioning from your normal gameplay view into a cutscene, and back out again…
How to add editor visualisation to unselected objects in UE4? I solved a particular problem of mine in Unreal Engine this week, which was this: How do I visualise any custom information I want at edit time (not runtime), even when objects are not selected? I’m talking about information that doesn’t come naturally from things like collision bounds, or other existing components. Custom…
Skyboxes are textures that you use to display distant objects and environments in your scene, so that you don’t have to render the universe to an infinite distance. They’re often pre-rendered or captured, although you can start adding layered and dynamic elements to make them fancier. Ultimately they’re an optimisation to the problem of how do you give the impression that the…
Our Story So Far Just over a year ago, I started the process of learning Unreal Engine 4. I should probably say re-started, because I’d experimented with it before - in fact when the Epic Store launched, I was surprised to have an unexplained store credit, which turned out to be because I paid for UE4 for a while when it was a monthly subscription, and they refunded some of that after they…
Introduction I wrote this blog post to fill a few gaps in the documentation I’d found for C++ interfaces in Unreal. Specifically I have a few tips for what I think are common usage scenarios that no blog post I found talked about. Note: This blog post is based on Unreal Engine version 4.25.3 What are Interfaces? Interfaces are great in any language. They let you define a set of functionality…
The case for self-hosting VCS For game development, I like hosting my own source code repositories. The reason? They get big really fast. We’re hardly making AAA assets but even so, things adds up very quickly unless you’re doing something low-fi. Big files mean increased storage costs, and slower network transfer speeds if you use remote hosted solutions. If you self-host, storage is…
A Problem of Determinism I had a particular problem to solve for our next (so far unannounced) game. I needed deterministic physics. That is, given a certain starting state, I needed to know that if I applied the same forces to that simulation, the same results would always occur. Now, this is extremely hard to do universally, especially across platforms, and even between different binaries on the…
Almost 4 years ago now I blogged about my decision to use Unity for our new game development adventures, and in that time we’ve shipped one game (Washed Up!), stealth-shipped one polished prototype (only to our bestest fans 😏), participated in 4 game jams, and noodled with another 2 prototypes that never saw the light of day. All of those have used Unity, and generally speaking we’ve…
I’ve had a few friends ask me why we chose the name Old Doorways for our new game development venture. I’ve repeated the explanation enough times now that I figured it was worth blogging about, in case anyone else was wondering. The struggle is real As anyone who has had to name anything - a company, a product, a small human - will know, names are hard. I mean really hard.
About Me Hi, I’m Steve, and I write code; have done in some capacity for over 30 years now, spanning many platforms, languages and domains. I’m currently an independent game developer, working with Unreal Engine. In the distant past, I was responsible for creating an open source 3D engine called Ogre, and worked on the graphical side of a bunch of games and non-game 3D projects for a…
I never used to drink coffee. Early in my career, fresh-faced and beardless as I was, while spending my days coding business software and my free time tinkering with 3D graphics, I burned the candle at all 3 ends in a fashion that was far from healthy. The lack of sleep often took a bit of a toll on the old (or at that point, young) synapses, so at first I started drinking coffee purely for the…
I’m 37, and I’ve been a (professional) developer for 16 years. You would have thought that in that time, I’d have figured out an effective work style which delivered the desired outcomes (code cut, products shipped etc) without causing detrimental knock-on effects - but, sadly, you’d be wrong. I think the style in which I practiced my craft for the first 15 years of my…