Sign in

Steve Streeting

@sinbad3d.bsky.social
1.1K followers 188 following 996 posts

Greybeard. Working on MinerMancers, a game about silly wizards going mining together. Made engines (Ogre3D), devtools (Sourcetree, Git LFS), now games, Unreal Engine tools & plugins. Code: github.com/sinbad Blog: www.stevestreeting.com

PostsRepliesMedia
Steve Streeting @sinbad3d.bsky.social · 23/07/2026
Suits you, Sir
A red robed wizard wearing a jester hat with gold diamond shapes on it, sporting a blonde beard with gold rings
010
Steve Streeting @sinbad3d.bsky.social · 28/04/2026
Switched to an AGX tonemapper for MinerMancers, and I really like how it retains the vibrancy of the colours much better than ACES did, especially when bright. It’s much closer to how HDR looked before, to the extent that I’ll probably drop the HDR path now since it was fiddly anyway
Screenshot of a pink wizard in a top-down cave, with veins of bright crystalScreenshot of a pink wizard in a top-down cave, with veins of bright crystal
061
Steve Streeting @sinbad3d.bsky.social · 11/04/2026
Object scattering system is starting to make open areas in MinerMancers levels feel a little more interesting 🧙‍♂️⛏️ #screenshotsaturday
A pink wizard in some sandy caves, surrounded by coral like decorationsA pink wizard in some sandy caves, surrounded by coral like decorations
1121
Steve Streeting @sinbad3d.bsky.social · 20/03/2026
Squishy mushrooms
072
Steve Streeting @sinbad3d.bsky.social · 10/03/2026
WIP decorative ground object growth system for MinerMancers. Kind of an L-System, everything grows out of a single point
031
Steve Streeting @sinbad3d.bsky.social · 14/12/2025
New lobber enemy (I affectionately refer to them as my lobby boys) making poison clouds and hiding behind things, annoyingly
040
Steve Streeting @sinbad3d.bsky.social · 05/11/2025
Explosions now apply force to things!
030
Steve Streeting @sinbad3d.bsky.social · 05/11/2025
Explosions can now destroy diggable areas. Now we're mining!💥⛏️
151
Steve Streeting @sinbad3d.bsky.social · 01/11/2025
Minermancers spell work this week: physics objects and AOEs! Here’s a bouncing explosive barrel spell that’s fun to play with Getting client prediction and smooth replication working on physics objects was fiddly but it works now.
030
Steve Streeting @sinbad3d.bsky.social · 25/10/2025
The particle systems clip against geometry as well
040
Steve Streeting @sinbad3d.bsky.social · 25/10/2025
Here’s the debug display of the spray on the server; expanding damage probes which automatically fill the space given cone angle / velocity settings. Much better than a fixed cone overlap test which wouldn’t track spray motion properly. It also clips against geometry so it doesn’t go through walls
150
Steve Streeting @sinbad3d.bsky.social · 25/10/2025
Minermancers progress this week: spray-style spells. Multiplayer predicted, and the underlying damage shapes are properly simulated to match the particle effects
1112
Steve Streeting @sinbad3d.bsky.social · 15/10/2025
SUDS Pro is on sale! It's my #unrealengine dialogue plugin that lets you use text files to write dialogue, direct camera cuts, character animation and more. If you prefer writing dialogue like a script, I think this is a nice way to do it. Reposts appreciated! www.fab.com/listings/3e3...
A promotional image for SUDS Pro
030
Steve Streeting @sinbad3d.bsky.social · 01/10/2025
Quietly allowing people to assume you use LLM chatbots as well so they stop fecking talking at you about it
Wesley Crusher and friend wearing fake headsets in ST:TNG “The Game” while his Mum looks on in the background looking thrilled
0110
Steve Streeting @sinbad3d.bsky.social · 29/09/2025
Spending all day in this view making very careful changes so I don't break any of the multiplayer replication & prediction systems, as I chop up the spell system and re-assemble it. All appears to be working again now but 😖I hate multiplayer code
3 UE windows in a test level with 3 different coloured wizards in a triangle
120
Steve Streeting @sinbad3d.bsky.social · 27/09/2025
Combat training has been suspended for now at least #caturday
Two black and white cats on a blue blanket together
050
Steve Streeting @sinbad3d.bsky.social · 27/09/2025
What my chair actually looks like vs what my cats think it is This afternoon Merry was defeated in single combat by my chair while I was trying to do the hoovering
A red HÅG Capisco saddle chair. It has the signature horizontal T shaped back/arm restsA young Bruce Lee using a Wing Chung practice dummy
140
Steve Streeting @sinbad3d.bsky.social · 27/09/2025
I use honey instead of sugar in my bread these days, and having to rescue the last remnants of solidifying honey from the bottom of the bottle with heat and water has made my routinely eyeballed measurements even vaguer than usual.
12 bread rolls cooling on a rack. They’re very reddish brown
140
Steve Streeting @sinbad3d.bsky.social · 26/09/2025
The beta of GOLD TEETH has a great hook #ttrpg
Man the jibber beams and loose the fore-berks! It's time to set sail.
The course ahead may be treacherous, but by following the navigation
aids in this section—perhaps while reading bits to each other aloud—
you'll soon be in open ocean with a fine wind in your sails.
Welcome to the Punchbowl
The year is 1781. Oceans are battlefields. And battlefields are
rich pickings for the likes of you.
Nowhere is this more true than the Punchbowl of the
Antilles—a tropical archipelago brutalised by colonial powers
and further cursed by the detonation of an occult weapon one
year past.
It is now a vast lagoon—500 miles across and 50 ft below the
level the Atlantic ocean, which is held at bay by some magical
force, forming an encircling wall of seawater.
No one can get out. And only the most desperate and dangerous
people can get in.
People such as yourselves. Each of you a pirate, a criminal
or a scoundrel—each of you already befouled by magical
contamination—each of you almost beyond saving. It is why
you have been commissioned by King George III himself to
go beyond the water wall on a desperate mission to reclaim
the weapon that wrought such devastation there, and trouble
England's enemies all the while.
But this is subterfuge! You are no friend of England! In fact,
you have another agenda entirely. An agenda which is your
only chance at redemption: your only chance to survive the
pirate curse which will claim your soul.
020
Steve Streeting @sinbad3d.bsky.social · 25/09/2025
"It's so weird how we couldn't sell all those AI chips that no-one asked for"
Gene Wilder in Willy Wonka doing the sarcastic "tell me more" pose
020
Steve Streeting @sinbad3d.bsky.social · 24/09/2025
Uuum, sure but that's not really my fault, is it? This is your default install location, maybe you should shorten *your* paths 🙄🤣 #unrealengine
Installing the UE 5.7 Preview in the default C:\Program Files\Epic Games folder causes it to throw an error "Files within the installation folder would exceed t he maximum path length of 250 characters. Please shorten the path"
150
Steve Streeting @sinbad3d.bsky.social · 22/09/2025
I baked my first apple pie of the year since our tree is ready. Left it to cool on the unit while we ate dinner, with a net cover over it.
Mugshot of the suspect
A black and white cat playing with a kickaroo on the floor
140
Steve Streeting @sinbad3d.bsky.social · 15/09/2025
Me: puts books sideways and on top of a bookshelf because of lack of space Also me: still has stuff like this on another shelf for some reason. I don’t even use a Mac anymore
A shelf with 2 copies of Adobe Photoshop CS5 for Mac, Office for Mac and Windows 7 Professional
020
Steve Streeting @sinbad3d.bsky.social · 15/09/2025
Finally got around to clearing my last blocker for updating to UE 5.6 - my Runtime Virtual Texture based map system stopped working entirely. Turns out they added a new member to FPrimitiveSceneProxy that I only found by diffing the source 🙄
As of UE 5.6 the FPrimitiveSceneProxy class added a new property bSupportsRuntimeVirtualTexture which needs to be set in order for your procedural mesh to render into an RVT. Add this to the constructor to fix that:

#if ENGINE_MINOR_VERSION >= 6
		// UE 5.6 added this, required for rendering to RVT
		bSupportsRuntimeVirtualTexture = true;
#endif
150
Steve Streeting @sinbad3d.bsky.social · 11/09/2025
Ahhhh I just figured out how to get a more traditional timeline sequence view of frame timings in Superluminal: you just re-sort the instance table on the left, which defaults to Duration descending, which is why the worst offenders are at the top.
Superluminal function statistics view for UWorld::Tick sorted by Start Time ascending instead of the default Duration descending
120
Steve Streeting @sinbad3d.bsky.social · 11/09/2025
I was just sharing my newfound love of Superluminal with someone and I noticed the tagline "From installation to first fix in less than 10 minutes." on the website. It was 100% true in my case! Marketing copy that's actually true? Unheard of 😜
Superluminal website tagline "From installation to first fix in less than 10 minutes."
120
Steve Streeting @sinbad3d.bsky.social · 10/09/2025
Also perhaps of interest: if you launch a packaged UE game build from Superluminal with the default settings, it'll show you nothing except that a thread was waiting forever. This is because UE games have one exe in the root, which bootstraps into another exe in the nested binaries dir.
Superluminal capture options, with "Enable child process profiling" enabled and underlined
110
Steve Streeting @sinbad3d.bsky.social · 07/09/2025
There's been a lot of negative talk lately about "the UE look", which I don't really agree with, but I can see some aspects of. But at least I can say with some confidence that we don't really have that look. Probably because we've turned off so much we're basically using UE4 with better tooling
Minermancers screenshot: four silly wizards in a mine from above
171
Steve Streeting @sinbad3d.bsky.social · 04/09/2025
Making some progress, basically had to override the nav geometry export to not send colliders as blocking geometry for diggables, but to report the convex colliders modifiers instead. Seems to work at least partially (updates aren't working yet)
Debug nav mesh display showing green default walking areas
100
Steve Streeting @sinbad3d.bsky.social · 03/09/2025
It's quite tricky to come up with the "filler" rocks (non-resource bearing) so that they're both interesting and distinct from each other, but also not insane looking or more eye catching than the actual resources. Marie's been working hard on them lately.
A wizard in cyan robes in a cave surrounded by different types of rock, mostly purplishA wizard in cyan robes in a cave surrounded by different types of rock, mostly reddish
120
Steve Streeting @sinbad3d.bsky.social · 03/09/2025
Amazing what a little roughness map tweaking can do for the punchiness of surfaces (Marie did the actual work, not me) [Our hero materials use a packed AORMH map where R=AO, G=Roughness, B=Metallic, A=Height, authored in Substance]
Picture of a stony surface, the edges of some of the stones catch the light because of the roughness map
120
Steve Streeting @sinbad3d.bsky.social · 28/08/2025
I usually don’t do anything particularly complex in DaVinci Resolve so cutting together this several minute VO montage from tens of source videos is stretching my capabilities
I have no idea what I’m doing kitten
0100
Steve Streeting @sinbad3d.bsky.social · 24/08/2025
I SAID, YOUNG MAN
A scene from the Men At Work board game with 4 meeples in yellow hard hats in a line along a girder
050
Steve Streeting @sinbad3d.bsky.social · 22/08/2025
Screenshots of the new ground variation system. Both the materials and rock scatters can vary based on ground type. I implemented this by re-using the systems that make ground reflect the mineables that *used* to be there when they're mined away
A red wizard in a mining level. The ground has different texturing and rock detritus in different areasA red wizard in a mining level. The ground has different texturing and rock detritus in different areas
130
Steve Streeting @sinbad3d.bsky.social · 19/08/2025
Tuna detection system: Online
Two black and white cats camping for tuna
020
Steve Streeting @sinbad3d.bsky.social · 18/08/2025
Bwahahahahaa
Cursed code that forces a crash by trying to write a value to memory location 0
110
Steve Streeting @sinbad3d.bsky.social · 18/08/2025
Trying to make my crash bug tickets less intimidating
A Trello ticket titled "Crashypoo"
010
Steve Streeting @sinbad3d.bsky.social · 15/08/2025
🎶99 changes to source content files 99 changes to files You import one, pass it around 98 changes to source content files
Unreal auto-import dialog reporting "99 changes to source content files"
1141
Steve Streeting @sinbad3d.bsky.social · 13/08/2025
I've edited enough VO now that maybe I'm becoming a (very) amateur audio engineer; I can spot a P-pop that I might need to tone down just by looking at the wave form
A VO wave from in Audacity. Circled is an area on the waveform that is a P-pop ie a P-sound that has caused too much of a spike
040
Steve Streeting @sinbad3d.bsky.social · 13/08/2025
Doing it for the bants
Unreal Gameplay Tag selector with VoiceLine.Player.Banter.EnterMission selected
010
Steve Streeting @sinbad3d.bsky.social · 11/08/2025
I've just cut up the first of the silly wizard VO contributions ready for import and I *swear* I didn't do this on purpose
UE import prompt saying that 69 changes were detected. Nice.
020
Steve Streeting @sinbad3d.bsky.social · 08/08/2025
Yay, now that Nanite is gone I can run 4-player tests on my machine again. I'm sure I could do this before but I think that UE's defaults just slowly creep up every version update
4 wizards of various colours on a dais
000
Steve Streeting @sinbad3d.bsky.social · 08/08/2025
Here's the settings to fully disable Nanite if you're a sicko like me using UE to make games that don't need it. The "ProjectEnabled" is the one exposed to project settings but you need the other one too to stop it bitching about it.
[/Script/Engine.RendererSettings]
r.Nanite.ProjectEnabled=False
r.Nanite=0
110
Steve Streeting @sinbad3d.bsky.social · 08/08/2025
JFC, Nanite, 4GB VRAM, really? I don't even need you for a top-down game but when I turn you off in the project settings you constantly bitch at me that you're disabled 😩
UE resource usage view showing the Nanite.StreamingManager.ClusterPageData using 4GB VRAM, a full 2/3rds of total game use
110
Steve Streeting @sinbad3d.bsky.social · 02/08/2025
Busy Saturday #caturday
Merry the black and white cat fast asleep on a blue blanket
060
Steve Streeting @sinbad3d.bsky.social · 31/07/2025
Well, technically it was a code comment
bool UMinerCommunicateAbility::ShouldActivateAbility(ENetRole Role) const
{
	// The default implementation rejects cases where the actor role is ROLE_SimulatedProxy
	// but when you're dead you still need to be able to communicate. So allow it
	return /* Role != ROLE_SimulatedProxy && */	
		(Role == ROLE_Authority || (NetSecurityPolicy != EGameplayAbilityNetSecurityPolicy::ServerOnly && NetSecurityPolicy != EGameplayAbilityNetSecurityPolicy::ServerOnlyExecution));	// Don't violate security policy if we're not the server
}
000
Steve Streeting @sinbad3d.bsky.social · 29/07/2025
A reliable skeletal mesh pipeline from Blender to UE has always been fraught & plagued with little edge cases - extra root bones, weird scaling etc. We found the best option is the (now abandoned by Epic, maintained by the community) Send2Unreal, but 5.5 broke that because of the new "Interchange"
An Editor Utility Blueprint that runs at editor startup and sets the console variable `Interchange.FeatureFlags.Import.FBX False`
171
Steve Streeting @sinbad3d.bsky.social · 26/07/2025
OK one of the old batteries had leaked a tiiiny bit, barely anything
A positive battery terminal and one gas vent with a little bit of crusted acid leakage
110
Steve Streeting @sinbad3d.bsky.social · 26/07/2025
Until my UPS started complaining about the battery I had no idea that they just used standard mobility scooter batteries. Managed to source a couple of compatible ones from a local supplier, half the price of official battery cartridges 👍
Two Yuasa NP7-12 mobility scooter batteries on a desk
130
Steve Streeting @sinbad3d.bsky.social · 25/07/2025
And if you want to load async and then immediately use the asset once it's loaded, you can do this:
FStreamableManager& Streamable = UAssetManager::GetStreamableManager();
FStreamableDelegate LoadDelegate;
LoadDelegate.BindLambda([this, Sequence, bCentreOnStashBox, PlaybackSettings, OnFinished]
{
	PlayLoadedLevelSequence(Sequence.Get(), bCentreOnStashBox, PlaybackSettings, OnFinished);
});
Streamable.RequestAsyncLoad(Sequence.ToSoftObjectPath(), LoadDelegate);
010