Saturday, 31 October 2026

I think I'm done with Western WarDogs....

Yeah, so my last post.... Not so much.  After the consistent, disappointing, experience on EU West and US servers in general I did the exact opposite of the Pet Shop Boys recommendation and I went East.

Yes, I've played my last five rounds on EU East and you know what... It's a revelation.  Sure there's still some questionable people, insta snapping aims and seemingly no recoil, but I've had successive interesting experiences and "fun" time spent in the game.

Which is what I said, if you spend enough time you find those nuggets, but I ain't got all day to sit panning sand by the river and there's a lot of sand to get through.

So EU East, I can't understand half the players, there's Cyrillic text flying by lots of Russians, but I got kills and killed, I got points and cash.... I had fun.

And I didn't get lazer beamed insta pudding set down by enemies.  I didn't get constantly insta vapourised by mortars nor tanks.... And you know what, firing 9mm from my Bison I got kills, okay shooting the dick hit meta but I got kills.

And I even took a mosin out and got a kill and a couple of head shots on armour (by the way, wearing a helmet and surviving a mosin shot to the face just totally annoys me.... but I did get the shot off, twice).

I've tried to understand why, as a game developer myself, but denuded of the larger picture I tried to understand; the first clear thing is there's still a spread of player levels out here, not everyone is running around in full max armour kits; don't get me wrong, some are, but not everyone.

Then the way they play, there's a lot more assault, ebb & flow, it's not a monotonous grinding constant chain of death death death.  Again, don't get me wrong, I've been inside fobs getting absolutely mullered, but it wasn't as insta and see nothing as in the West, I saw the attackers, I got one, I saw another, I marked a third, I heard grenades coming over the wall, I saw the breech happen..... I do not see any of that on EU West, it happens, but you don't see it, you're dead as a lower-spec-earlier in the chain poor player.

 So, I just came out an EU East game, we lost, but it was fun... That's the difference.  I wonder how regional variance is being tracked by Bulkhead, since my overwhelming negative experience has been in EU West servers and consistent.... Divide that shit experience across all servers & all regions, it maybe easy to overlook.

Wednesday, 28 October 2026

I think I'm done with Wardogs.... And that's a shame.

It's not the devs, the grind or the progression system. It's the player meta.

In the last week, I've had two genuinely great games. One was a late join where I switched into medic/scout, made around $30K and progressed both roles. The other had me running an SMG medic, keeping a higher-level sniper alive on a tower and watching out for infiltrators. Proper teamwork. Covering each other. Playing the situation, not just chasing kills.

That's the Wardogs experience I'm here for.

The problem is, those games feel like the exception.

Too many players seem to ignore comms, minimap intel, enemy markers and basic situational awareness. I'm not saying they're bad at FPS games. I'm saying Wardogs demands more than winning individual gunfights. Positioning, information, respawn distance and knowing when not to push all matter.

Here's a perfect example from my last game.

We're establishing a FOB. Builders are working, supply trucks are arriving, and Green starts pushing from the west. I'm on the flank as a scout sniper. I take out two approaching enemies, mark another push from the south and help clear it, then deal with another enemy on the opposite hill.

I settle into overwatch and keep marking targets. I must have marked around 15 enemies.... One assist.

Our players keep running straight into marked enemies, seemingly oblivious to the minimap. They push into firing lines, get shot in the back and give up the positional advantage we're supposed to be protecting.

Then a helicopter drops two enemies behind us while everyone is focused on the northern approach. I spot the southern threat, mark both enemies and engage. Two Greens go down. Five team mates are down.... I've got two revives.

I secure my flank area, make sure the bodies are in sensible positions, ask twice for a status update and watch for further threats. Nothing obvious, so I break my cover to try the revives.

There's a $500 bounty on one of them.... He's begging me to come over.

I approach carefully and start the revive.

"He's here! He's here, on my body!"

Zap. I'm Dead.

Was my teammate calling out to the enemy? Nope! It was the downed Green, still in the fight and communicating with his squad right up to the last moment.  Whilst my dead team mate calls me lame and bags out.

Fair play to the green. That's exactly the sort of information advantage and teamwork the game should reward.

But where was that awareness from my own team? A single warning could have made the difference.

That's what makes this so frustrating. The enemy is playing the tactical game, while your own team often treats it like a conventional run-and-gun shooter.

I've been playing FPS games since the Enemy Down league and the Day of Defeat days. I've also spent plenty of time with the mil-sim side of things in Arma. I understand both ends of the spectrum, and I genuinely hoped Wardogs would hit that sweet spot between accessible FPS action and meaningful tactical play.

It can. I've experienced it firsthand.

But when spotting, suppressing, holding a flank, communicating enemy movements and reviving teammates deliver so little satisfaction because nobody acts on that information, the whole tactical layer starts to feel pointless.

The game can provide the tools, the roles and the objectives. It can't make players use them in its current form, as it doesn't reward them to do so. But it can look at how its meta and reward systems encourage people to play different ways.

Right now, the most satisfying moments are too few and far between to justify the time investment, especially when you're working full-time and don't have hours to burn finding one decent squad, heck even one decent teammate.

So I'm stepping away.

Not because Wardogs is fundamentally broken, and not because I expect every player to run military-grade comms. I just want a game where situational awareness matters, teamwork pays off and playing your role feels worthwhile.

Wardogs has the ingredients for that experience. I just don't think the average match delivers it often enough.

And that's a shame, because when it clicks, it's bloody brilliant.

Friday, 16 October 2026

Scottish Independence Vote 2.0

The political landscape in the UK is in such disarray at the moment it's very hard to pick where the country is going.... The Country.... Even that is a loaded term.  When I say "The Country" I mean the United Kingdom of Great Britain and Northern Ireland the collective "We Brits" if you will allow me to say.

I have always fervently believed the union makes us stronger as an island nation and even lets us have fun with it, especially on the sports field.  But politically, globally, trade & positively as a nation better together.

I even tip my hat to the Republic of Ireland, Isle of Man and the Channel Islands in that; perhaps even as far as the overseas dependencies which have maintained the "Brit" connection and retain their self-determination.

So why am I waxing lyrical about this?

Scotland.  I keep seeing John Swinney of the SNP banging on about Scottish Independence and another vote, sure fine, go ahead, rock the boat John; I'm positively sure there's no problems at SNP headquarters anymore... Right?  (Queue the Anakin Skywalker Padme memes here).

What is it John Swinney is banging on about which has irked me?  Well, it's the way he blindly goes into this independence conversation, seemingly without any thought for the Scottish Public; what he seems to be focussing on is what the big sweeping brush he can achieve for Scotland might be.

Such things as closer ties to the EU, France especially, possibly Scotland rejoining the EU as an independent country from the UK's exit, he bangs on about Industry and opportunity for Scotland.

But he blindly ignores so much of the whole picture and that's what annoys me about the mans position and policies.

He wants to remove the UK Nuclear deterrent from Scotland, so what happens to all those jobs supporting that infrastructure?

What happens to all the Scots in the UK armed forces themselves?

What happens to all the free University places?

All the NHS infrastructure if he took it to being the SHS?

With modern data and searching it's quite trivial to see the baseline numbers on this, numbers he is ignoring and none of it works out for the Scottish public.

Scottish Government Revenue (2025-2026) was £98.3 billion.

Public expenditure for Scotland (2025-2026) was £123.3 billion.

That's a deficit, that means Scotland cannot run the services it currently has to the quality they currently are as an independent country.

This means free further education, adult social care, housing and personal benefits as well as probably infrastructure like the road and rail would all suffer in order to close that hole in the public finances.

Then add to the fact that Scotland needs a defence system of its own, unless the Scots wish to routinely welcome Russian over flights or threats of invasion by Donald Trump.

It's bizarre that the numbers are so stark and there are so many members of the Scottish public ignoring this simple and perfectly understandable situation.  And it's one the devolved Scottish government itself puts upon the people, they kept free further education in Scotland, that's all out of the public purse, the  revenue from the North Sea fields off of Aberdeen & Dundee, will likely walk off with the private investment owners - which won't be Scottish for the most part.

It's just bizarre that the SNP and John Swinney are rocking the national boat like this, seemingly for their own notoriety.  And the current Westminster gaggle are too spineless to address them with the simple reality - Scotland cannot afford to be independent without making the Scottish people very much poorer financially, functionally and fraternally.

Sunday, 20 September 2026

My thoughts on Warcraft Forever...

As an original World of Warcraft player, and a die-hard player from vanilla through to Wrath, I wanted to give my thoughts on World of Warcraft Forever. But before I can, I have to be a little lyrical.

I believe World of Warcraft is the best game ever made. There, I said it. I work in the games industry, and I genuinely feel that nothing has ever captured the zeitgeist and fired the imagination quite like it did.

Sure, it had bugs and flaws. I was among the early voices calling out Blizzard's lack of forethought around scaling levels and power. I made that clear on my appearance on Shut Up, We're Talking, all those years ago, when I founded this very blog.

My history with this game runs deep and long and old.

Would I say tired? No. I still dabbled from time to time, trying to understand the game I loved. I spent time on emulation servers. I even rolled my own, as any software engineer might.

So it's with a been there, done that, paid for it and tasted it for free perspective that I approach the Forever offering.

And honestly? I'm not going to play it.

That might be unfair to the game itself. As a standalone offering, it probably deserves my time and money. Blizzard would certainly love to have both.

But I can't bring myself to do it.

I don't trust Blizzard to preserve the game as I want it to be. I don't trust them not to wipe it away. And that lack of trust has become a deep, seemingly unbridgeable chasm.

I've watched executives wax lyrical about taking the war out of Warcraft. I've watched them gloss over that rhetoric, claim they've heard us—the players—and move on.

They haven't heard us. Not in the way that matters.

And that scares me.

I'm scared they don't understand what this game means to the wider player base. And, to be absolutely brutal, this is the game they should have made more than a decade ago.

Instead, it's arriving too late for me.

I love World of Warcraft. I always will. But I don't trust Blizzard with it any more.

Can Blizzard change that for me?

I'd love to talk to them about it. I just don't trust that they'd listen.

Wednesday, 5 August 2026

EA, Leveraged Buyouts, My Thoughts....

News has broken that Electronic Arts (EA) has agreed to a sale reportedly worth around $55 billion to a consortium led by Saudi Arabia's Public Investment Fund alongside Affinity Partners and JPMorgan Chase.

That's an extraordinary valuation.

EA is one of gaming's oldest and most recognisable publishers. Whether or not you're a fan of its catalogue, few companies have had the influence EA has had over the last forty years. Its sports franchises alone are enormous businesses.

But the sale itself is what caught my attention.

Much of the reporting quite naturally calls this a "sale", because that's exactly what it is for EA's existing shareholders. They receive cash and walk away.

The part that interests me is what happens afterwards.

From the public reporting, this appears to be structured as a leveraged buyout (LBO). In broad terms, that means the buyers contribute some of the purchase price themselves while borrowing the remainder to complete the acquisition. That's a well-established private equity model and not unusual in itself.

The important distinction is what comes next.

In a typical leveraged buyout, the acquisition debt does not simply disappear once the deal completes. Instead, the debt sits within the acquiring group and is ordinarily serviced from the cash generated by the acquired business. Existing shareholders have been paid. The lenders still expect to be repaid.

The exact financing arrangements for the EA transaction are not public, so I'm not suggesting I know the specific debt structure, repayment schedule or internal financing arrangements. But if this follows the broad mechanics of a conventional LBO, the acquired business ultimately becomes responsible for generating the cash needed to support that financing.

That changes incentives.

The company experiencing the stress of a change of ownership immediately suffers the added stress of serving the debt used to buy it. Framed from the bottom-up perspective of the people inside the organisation, that can seem deeply counterintuitive.

Every dollar spent on salaries, benefits, research, new technology or creative risk has to compete with the financial demands placed upon the business. Sometimes that pressure is manageable. Sometimes it becomes the defining constraint.

That is where my concern begins.

Games are not factories. They're creative projects with uncertain outcomes. One title becomes a phenomenon. Another, built by equally talented people, can miss its audience entirely. Creative industries don't always fit neatly into financial models built around predictable cash flows.

EA has advantages many publishers don't. Its sports portfolio generates recurring revenue that most companies would envy. That may make servicing acquisition financing easier than it would be for many of its competitors.

But outside those flagship franchises, EA's history has been far less predictable. Like every major publisher, it has celebrated huge successes alongside expensive disappointments.

The reason I care about this isn't theoretical.

I've lived through a leveraged buyout in the games industry.

Keywords Studios was acquired by Houting UK Limited, an acquisition vehicle backed by EQT, CPP Investments and Temasek in a classically structured private equity leveraged buyout. What followed, from my perspective as an employee, was increasing organisational consolidation under the long-running "One Keywords" strategy alongside restructuring across parts of the business.

I was one of the people who ultimately lost their job.

From where I stood, there was no appetite to keep experienced engineers available between projects, even if that meant retaining knowledge and being ready for the next opportunity. Instead, the business reduced headcount, with the expectation that people could simply be hired again when demand returned.

I can't say that decision was made solely because of the acquisition financing. What I can say is that, from the inside, it felt like a business becoming increasingly intolerant of anything that wasn't immediately billable or immediately reducing risk.

Losing a spreadsheet line is one thing. Losing your livelihood is something else entirely.

That experience inevitably colours how I read announcements like EA's.

I watched studios lose parts of their individual identity as more functions became centralised. I watched colleagues leave. I watched teams become leaner. Many of those decisions may well have had sound commercial reasons behind them; I cannot say that any individual decision was made because of the acquisition financing. Markets change, projects end, businesses restructure for many reasons.

But I also know what sustained financial pressure feels like from inside an organisation.

When cash becomes precious, hiring slows. Support functions shrink. Management layers are reviewed. Projects are merged or cancelled. Duplicate roles are questioned. None of those decisions are unique to leveraged buyouts, but leverage can make the consequences of under-performance much sharper.

Perhaps EA's future owners will prove my concerns unfounded. I genuinely hope they do.

Because behind every restructuring announcement are thousands of developers, artists, designers, testers, producers and support staff who simply want to make great games.

That's why I don't look at this transaction and see a headline valuation.

I see a business beginning a very different chapter, one where financial engineering and creative ambition will inevitably have to coexist.

Having lived through one version of that story already, I sincerely hope EA's ends better than mine did.

---

References: https://www.bbc.co.uk/news/articles/cjejyl34345o https://www.ea.com/news/ea-announces-completion-of-acquisition?isLocalized=true https://kotaku.com/helldivers-2-ceo-electronic-arts-acquisition-consolidation-safe-sequels-2000721559

 

Monday, 22 June 2026

XVE - Terrain Systems - Random Noise & Influence Mechanics

Well, politics aside I thought I'd talk about my game engine and some of the new terrain systems I'm working on.

There have been a couple of images and videos on the old YouTube channel with some of the examples, but here's a still for your enjoyment... See the MASSIVE tree remains on the peak it was to place trees (of the correct scale) into a natural pattern I then turned.


I started with the same noise algorithm I'd used for the peak itself, but that tended to give me slices of trees or uncanny looking placements.

Off to CImg I started to play with some noise algorithms and after a while I got an appearance for the groups of trees I liked; at least in 2D.

 


This being me though I went to bed and got distracted with horses and so only just came back to this very late on a Sunday evening, and the first thing I did was NOT the tree placements at all, no I started with the above set of points and wanted to check my "Area of Control" system.

This basically sets up the influence from each island, as you capture them the idea being that you improve them and they become stronger nodes, more loyal maybe, and that gives you bonus points towards your various activities and influence over neighbours... Whom you might conquer.

The trick however was how to set this up by default, so I decided to play a map up into individuals, and create a sort of area influence and then depending on the range you can travel that will build networks of connections to "who you might influence" or be influenced by.

However, that got quite complex quite quickly and my world still needs to be persisted on the server/back end, soooo.....

I got distracted again and made the initial influence a voronoi diagram pattern.

 


Sometimes you just have to let your mind wander, this weekend, the little computer time I had, was definitely just letting my mind wander.

I was quite tired after the latest release at work.... And to be honest, I kind of love Jason Voorhees.

 


 

Friday, 5 June 2026

People of Makerfield

Here I am again, being political, I watched Question Time last night... And I have to say I wasn't impressed with very many of the members of that panel.

The standout moments being the childish faces the Green Candidate pulled when members of the Green Party were quoted back to them.

The Liberal Democrat candidate and Reform candidates coming across as very nervous, or certainly not as confident as the others on the bench.

And then the Labour and Conservative candidates.... Often trying to bounce off one another as if they were jovial colleagues "We've had conversations at length".  To use a very English turn of phrase, they all piss in the same pot.

Really, people of Makerfield, you have an opportunity here to avoid voting for the current "mainstream" parties, those parties whom have hog tied and destroyed our democracy, spent our money and left this country a husk of itself in just a quarter of a century the decline in this country is unfathomable.

You Makerfield, you have the opportunity to simply null and void this party political shenanigans in the Labour party.

You Makerfield, have the opportunity to agree with many of the voices in that audience and indeed the candidates, that politics needs a root & branch reset.

That means simply not voting for the parties whom have proven themselves full of self-serving, lying, traitors.

I'm not telling you who to vote for.  I am however suggesting whom not to vote for.

Friday, 29 May 2026

Australia receives Pertinent UK News

I do try to avoid being too political here on my blog, however seeing this in my YouTube feed.... After I read the UK news this morning.... Has infuriated me:


Why mainstream UK Media, why is this NOT front page news here?  Why is not on UK Sky News, why am I having to see it via Australia!??

It really is enough to make you believe the media is somehow controlled & influenced by the government doesn't it.

Tuesday, 20 January 2026

Project Blackbird Leaks

I won't be linking the content, however earlier today some video of "Blackbird" leaked, it was syndicated on some news outlets, such as the Metro.

I have to say I have no idea from where the files came and it really quite annoyed me.  On a personal level, no-one I know of has nor ever tried to leak anything about that brilliant project; and as one of the first engineers on the task of bringing it to life it really irks me.

I've blogged about my feelings on the brutal cancellation before.

This video leak however is more annoying, not least because that was very old footage, it might even have been from a very early prototype build, and it clearly wasn't using the fantastic all ray traced renderer nor were the assets all the final ones we had (yes, live ray traced engine on an XBox Series X! Or a 2080 RTX min spec!).

People liked what they saw, but it wasn't mind blowing, Blackbird actually was.  Sure we had a ways to go, but the play loop was ace, the scope of the world was massive, the movement systems were top notch, I'm not saying anything others have not already said and I look at the predicted releases for XBox in 2026/2027 (our release window) and honestly I don't see much coming from their own mews.

Indeed, with the RAM shortage & it's costs it's pushing hardware options out into the future too, so it's likely Blackbird might have had 6-8 months added content creation before the next XBox hardware was even announced.

And remember this is Zenimax Online, their track record for live service games and regular content creation is right up there, we knew what we were doing (for the most part), we were realistic in dealing with things, we were moving into a massive tech debt and the tooling was all in place to start churning out the worlds and the stories we had to set in that living world.

Honestly, a gem has been buried, never to see the light, but unlike the Arkenstone the theif didn't come to steal from the dragon, instead the thieves stole our sweat & tears, I believe an unrivalled team.

So this leak, take it all with a pinch of salt, the game, the real game, looked so much better, fast paced and beautifully sultry. 

Tuesday, 21 October 2025

On The Cleveland Bay Breed

Viewers of my YouTube channel will know I have horses, we lunge, ride, trap & carriage drive and generally really enjoy them, keeping them and ourselves entertained.  They are pets and massive parts of our lives.

The eagle eyed of those viewers will have noticed over the last two years we have been training our Cleveland bay, he arrived from the breeders Mr & Mrs Orange at Kenley Cleveland Stud.  His name is Nova.... Or Kenley Supernova, and we had to join the Cleveland Bay Horse Society to own him.


He is that rich bay colour with the striking black socks on each leg and a strong black main and tail, the absolute standard for the Cleveland Bay Breed; accept no less!  He arrived with some of the biscuit fringe colours of a foul and he has been slightly behind on his teeth changing from baby to adult, but otherwise he is a big boy, today measuring at least 16hh3 (hh = hands).
 
Nova's character is a quirkly one, for the most part he is all over humans, he investigates you and things around him... Being very interested and unlike many horses he is mindful, he doesn't just blindly panic but instead thinks about the challenges he encounters.

Again this is a trait of his breed, to be mindful, steady temptered and is one of the reasons they are so popular in the driving role today; notably for the Royal Family, if you see a bay coloured hosed with the black mane, tail & socks, pulling a carriage for the King, well it'll likely be a Cleveland Bay.
 
When we started training Nova it was literal baby steps, head collar training, leading him around the field, past various bric-a-brac:
 

Since that video was taken I have lost a bunch of weight.... Nova has not, he's grown and grown, his shoulders coming out and strengthening right now in October 2025.  You can see here is withers are just around my shoulder height, today they're up around my ear and he is just such a much bigger animal.
 
Once the head collar training was done we moved onto a bridle, at first with a plastic bit, but quickly he had an upgrade to steel, with a soft articulation in the middle:
 

All of this training was done in house by ourselves, we'd done much of this before with Gerty, but never with such a young horse, still growing, so it has been fascinating to see his mind growing with his skills and size.
 
The next step was to decide how to best approach him into driving.... And long reigns were the best way to move forward, with the help of a local trainer we began introducing him to new equipment:
 
 

Two sessions later and it was my turn to keep this practice up.... As you can see by the state of the grass this was in the burning hot summer of 2025.

So it was I found myself behind him rather than leading him...
 

Which is a very alien thing for a horse to experience commands from literally out of sight as you walk in their rear blind spot, however, the Cleveland Bat genes run strong in him and he was extremely comfortable with this extremely quickly as his quality shone.
 
Graduating to road practive soon after, and I took him out without our trainer just this very morning...
 

All of this is not just about owning a horse, nor just owning a Cleveland Bay, so many people claim their horse is a CB it's hard sometimes to bite ones tongue as a true CB is a very special animal, and you have to have the rare breeds passport, Cleveland Bay Horse Society member ship and all the bloodlines clearly defined to state your horse is a CB.
 
And the bloodlines are very important, Mr & Mrs Orange who bred Nova are massive figures in the breeding programmes, advocates for the breed and the CBHS.  Nova was gelded without saving any semen from him, sometimes I am sad about that, but we could simply not have had a stallion at our yard.
 
So instead of spreading his genes I write this post to spread the true word about the Cleveland Bay, our experience with Nova has been so rich and rewarding and we have decades to come with him.
 
He will drive out pulling a carriage and we hope to ride him too, weight loss programmes and will power willing!
 
He has been an absolute powerhouse of mental development, horse wise he is very clever.
 
And so I bring my post to a close with this post from Mrs Orange:
 


 

Saturday, 18 October 2025

On the Topic of "Smart Pointers" and the Factory Create Pattern

This is a topic I have visited a few times over the years:

2016, 2016 on SDL2, 2019, 2023 on control block, and I visited it professionally on the now cancelled AAA MMO Game Engine with Zenimax Online; the specific pattern within which came from my original 2016 post, just with a few tweaks and expansions over the years.

Its just one of those things which comes up time and again in the C++ space, much like my crusade against return early in performance code... cough.

And it came up again just this week, where given a coding test I immediately did not like seeing raw pointers being used, so quickly refactored it to use a factory create pattern, except I was in a rush and didn't have the luxury of a whole game engine backing me up.

So denuded of even my own post I quickly used a different approach, so use a hidden (private) member struct in the constructor.  The constructor remains public so std::make_shared or std::make_unique can access them without hinderance from the static create factory member function, but that a regular user can not use a flat "operator new" as they can not access the private struct.... Sounds complex, but it's really not, and you will even find this exact pattern on CPP Reference sites across the web, let us quickly output an example (and I'll assume you've taken a look at my prior post from 2016 above for the actual "shared pointer friendship" I would prefer).

struct Thing
{
private:
   struct HiddenInternal {};    // Just an empty struct
public:
    using Ptr = std::shared_ptr<Thing>;

    static Ptr Create()
    {
        return std::make_shared<Thing>(HiddenInternal{});
    }
    explicit Thing([[maybe_unused]] HiddenInternal internal)
   {
   }   
};

And so with this code we can only get a Ptr instance here from the static Create call.

Now I've set the scene, what am I asking myself?  I'm asking what is the compile time and what is the runtime effect of these two patterns?

Compiletime my suspicions are that the shared_pointer friendship stuff in my original post is more weight to carry, there's a macro in my more complex implementations, so that's pre-processor overhead, there's expansion of the code at compile time.

But there's also this HiddenInternal in this new, simpler, implementation based solve; I believe there will even be compiler ellision of the HiddenInternal as its empty and does nothing; I just need to observe and understand this topic better.

Lets start with Compiler Explorer and my first confirmative discovery, just as I suspected, the compiler is very smart smart and it will easily see a trivial class such as mine above, or one with a single member, and fold it away to nothing in compiler ellision.

And this is a great thing!  It proves at zero runtime overhead whilst we have code fully communicative of the intent, self documenting code is a wonderful thing, and this is an interesting and eye catching pattern in the code.... Such that I believe even a new set of eyes meeting it would appreciate there is something special intended and they would take care to use the class properly, avoiding memory leaks for us along the way.

Good code health is as important as the final result, I especially take pride in code which can run a long duration.  I've always worked on long lived project timelines.

So HiddenInternal can result in no overhead when the class is trivial, what about when the class is complex?

The first thing I notice is that the factory creation function itself generates no code, yet we benefit from its intent at compile time and in the usage.  There is of course the control block creation for the shared pointer in this instance and I hold that in my mind, but the cost to pay back in intent of the code far outweighs the control block.

The constructor itself is interesting.... 


Removing the HiddenInternal gives no difference, so the compile has still removed the empty class, but enforces it's use in the code... This is a total win-win... The cost at compile time, one compile time ellision in one translation unit which is neglegable.

The runtime overhead zero.

What about the preprocessor and friendship.... The friend keyword itself is zero cost, the wrapping of it in a macro is therefore arguably a different conversation to have.  Resolving a friendship however is not so cost effective, the friend keyword adds a symbol, typically with a cost of O(1).

The look up from any other resolve is therefore either going to be O(1) or O(log N) where N is the number of other appearances of the name, this look up is going to be the compile time cost.  In practical terms this is going to be a very small duration, perhaps even below measurable in the pantheon that is a build across multiple cores.

A friendship link itself however costs nothing in code generation time, so we do not hold up the compile per se, we do however add a cost in the symbol table build.

Once something is in the symbol table it will result in complexity when refactoring code, potentially more rebuilds if the friendships, or classes within change.

In conclusion, if I have the option to set up a friendship to the underlying control block (see 2016) I would, but equally to keep the local complexity low I would also consider the Hidden private member class as a "trick".

Friday, 10 October 2025

XVE Game Engine: Thinking about AOE Damage Effects

I'm back on my home game engine and I need an area damage effect, which can apply to all the members of a team/party.... The trouble?  How to synchronize this over a network connection.

First of all, I know for certain that the server running my game world knows the center of the effect, and it knows the radius of the effect.  And it does tick the effect application against each player whether their client can visually see the effect - it appears in their combat log text immediately.

So the mechanics are there, the clients however, all run at different rates, they're in different locations world wide, with different latencies to the servers source of truth.... And so I need to now think about how I am going to tackle the issue of each player seeing an effect.

Simplicity first, the effect is just going to be represented by a wireframe sphereoid, it'll be a smooth shaded sparkles dripping effect later.

This quiets my engine engineer smooth brain some what and I now just need to synchronize the expansion from the center to the maximal radius of the effect, this will turn up at the clients from the server at any time after the effect is registered as affecting the players on the server... This maybe unfair, however, there is reason behind this in the design - the player will know the effect is going to be cast as there is pre-warning from the caster... They need to learn that and move before they see the effect basically.... That is, they need to be smart.... I know I know this is a cheap answer, but I am all about cheap answers to problems today - and in my gameplay loop, seeing the caster "spit" this effect and moving before it expands into a cloud of hell... is pretty rewarding.

So I have a time point, on all clients they know when the effect begins, they know the maximal extent and they know the center of it....

What I am thinking about now is the client side only, so without any network traffic, an entity definition for the effect which the client has pre-loaded into some dictionary of effects to execute, and this contains a rate per millisecond from the start time and the effect system has to linear interpret along the line.

I am thinking about designing some form of easing curve authoring for the client effect system - and I'll likely reuse this in the animation system - whereby I can try different easing curves.


 The system interpreting along the line could be more than a lerp too, again that'll be down the line.

Replaying, reversing or otherwise on such a defined effect is going to be quite interesting as reversing the delta will allow me to contract it again.... Though time-line ordering is to be forwards chronologically only for my game play, that maybe a feature I want to play with in future.

What's the problem then?  Yeah, it sounds like I have a handle on what I want, except.... I've assumed all the way through my thinking that the effect is fixed, known and defined up front.... The problem?

I want to scale the effect with the power of the caster, and this is not known up front, sure I can just add a float and multiply by 0.5 for half power or anywhere along that scope, heck I could even scaled the enemies power by some easing function as well and combing the power function along that line with the rate of the effect.... So there are answers to be had.

My problem is randomness, when it's random, things look wrong, they don't feel right when playing them and the rewarding feeling I had from the fixed function gameplay doesn't turn up... It's in some fort of metaphysical uncanny valley which I can't quite explain doesn't feel right.

I will have to play about some I feel.... 

Thursday, 9 October 2025

A Thought On Poles & Swingletrees

I was intrigued recently by a video from LindyBeige about Roman War Waggons, during which he brought up that some folks argue about how a horse might have been tacked to a wagon in that era.

Where by some etchings show only a single "pole" attaching a wagon to oxen or horses.

I looked at the image and wondered perhaps if it was a full length trace, which would be on the wagon frame, but he was totally right about the perspective and the image clearly being fanciful.

I today therefore was having a think about whether swingletrees would have been in use, they certainly are in ploughs and oxen drawn materials from the medieval period; I've read and seen etchings which come from contemporary sources.

My driving position has a single articulated pole, but this is not for the driving power, that is just for direction; and the swingletrees, to the horse traces, they are the power.... so there's a very intricate interplay between all of them to keep things in balance....

And to be honest.... I reckon in some form, this would have existed just a few years after starting to use horses, let alone a few dozen millennia as the turn to the common era would have been (year 0 by the Gregorian Calendar).


 

Tuesday, 7 October 2025

Over the Fence.... And Far Away....

No, I'm not talking about horses this time.... Lets talk engineering, what is a fence?  A memory fence or barrier is used to order reads and writes around certain operations called Atomics.

This ordering ensures that both communication of the value from the register in the processor is correct between all the cores/threads running and the cache within the chip as a minimum, and may even leave to a full flush to the main memory (though that is far longer in cycle).

These can take tens to hundreds of cycles to leap the value over the barrier.

In C++ the most common two, or certainly which I encounter most often, are fetch_add and fetch_sub, using them to control everything from the shared count on a resource to the control gating on fixed sized "high performance" containers.

And there in lies the rub, these operations cost a lot of cycles just to increment or decrement a counter in many of my use cases, so why use them?

Well, that barrier within the chip, between the memory is very expensive if we compare it simply with the very cheap increment or decrement of a register itself, just the value in the register on the chip can change in a single operation instruction; sure it took others to load the register and it'll take yet more to store the result off, just as it would with the atomic; but on top of that you have no overhead in comparison with the atomic....

Until... Until you try to synchronize that flat increment or decrment, sure then that code is going to be far faster, however, it's not thread safe, not at all, the atomic already is (when ordered correctly)...

In order to protect a flat operation one therefore has to wrap a separate lock, or mutex, around it which is far far more costly than the atomic operation.  This difference is called the "contention cost", the contention cost of an atomic is simply in the number of steps, lets look at code:

The atomic addition, the CPU itself will execute

lock xadd [or similar]

This itself is a single instruction, it may result in multiple cycles of the CPU to complete, but it is a single instruction.  It ensures unique ownership of the cache line (usually 64kb) within which this variable resides, and means if you perform an operation anywhere in that cache line you will be making optimal operations.  As the CPU can perform all the atomic updates in that 64kb block without having to fetch another, this is really useful when there are a few cores (2-8 on average) accessing an area of memory and event holds up when scaling out to more cores.

A mutex however, has to be controlled wholly separately from the increment, so we may end up with C++ such as this:

std::mutex lock;

uint64_t count { 0 }; 

{

    std::lock_guard<std::mutex> lockGuard { lock };

     ++count;

} 

The execution here will have to acquire the mutex in a harsh manner, internally this is an atomic; if the pathway here is lock-free, then the atomic operation underlying the mutex is the only added cost.  However, and this is a HUGE however, if there is contention, someone else already has the lock then this lock-guard has to spin wait... And it's the contention, the other thing having the mutex locked, which adds the cost.

So you're essentially gambling on whether you have a value not contested before the lock or not, and in both cases you take on the cost of an atomic operation; so for my codebase and it's uses across sub 32 core machines means that an atomic is much more efficient in most all my use cases.

A mutex however is far more useful when protecting more than a single register, when protecting a whole block of memory, a shared physical resource (like a disk) or just a complex structure you can only use a mutex around it.

All this sort of eluded me earlier this evening, I was in the middle of a technical conversation and I bought up the atomics backing a shared_pointer in C++ and immediately just sort of lost it, my memory drifted far far away and I have to admit to waffling some.

I even forgot about weak_ptr deriving from a shared_ptr and it's uses to "lock" a new copy of the shared_ptr and so passing ownership by weak pointers.

But it came from a very specific conversation about Unreal engine, about TSharedPtr... Not a structure I myself have used, and for the life of me I could not think why not, I just knew not to having been told...

And of course here I sit a few hours later and I know why, it's not thread safe... TSharedPtr in Unreal is not threadsafe, and why is it not?  Well because it does not protect its internal reference count with an atomic, no it's just a flat inc and dec of a count integer register "for performance purposes".

So sure if you're inside one Unreal system, on one thread, then yeah you can use the TSharedPtr, but it's utility is much reduced to my eye, and you would want to perhaps look at other ways to hold your resources in that thread, even in thread local storage rather than in the engine heap.

The moment that TSharePtr crosses a barrier, then you're far far away from thread safe.

So what do you use a TSharedPtr for?  The documentation says "To avoid heap allocation for a control block where possible"... Yet it contains an explicit reference count, which is in a control block, and underlying it is a flat "operator new" and it uses only default deletion via the flat operator delete.... So my non-Unreal expert brain says "Why use it at all".

Hence when asked earlier today my memory was over the fence and far far away.... Of course now, it's all returned and... yeah I just sat through two hours of TV mulling this over.... and had to come write something down before I went a little bit odder than usual.

Tomorrow let me regale you with my story about forgetting how to load a crash dump and the symbols files and explain myself properly, despite doing that particular duty about a hundred thousand times in my life.  Hey ho, a technical conversation in which I fouled up, one is only human.

Saturday, 27 September 2025

More on Refactoring & Software Teams

I've had one of those moments where I have posted and just feel the need to elaborate on the topic, I enjoy that feeling, so here goes.

I posted about prototyping and that is such a very loaded word and indeed quite a broad subject, I'm not delving into anything specific in that field; however I am going to talk about my intent in why I enjoy revisiting, refactoring and the benefits I have found with those efforts.

First, refactoring, itself a simply enough principle, you can both simplify something and make it more readable, more maintainable, you can also refactor to take advantage of new advances from other technologies; perhaps a new library, or new framework, which achieves the same effect as your code written by your (perhaps) smaller team; and in my opinion going with a library written and peer-reviewed in use with hundreds, thousands or even millions of other users is really a boon to your assurance of its use over your own individual effort.

[Yes, writing your own can also be good].

 Second, revisiting, this is really the meat of the prior post; going back to your own code, or code in another part of a large system, write it your way, update the coding standard, conform to emerging or simply new best practices.  Doing this is really quite interesting, and you can through the magic of software do it side-by-side.

You can refactor the function "foo" with your own "bar" then simply swap the two function names and voila the original system process flow now uses your new code, and you can test it, try it and crucially roll back if you need to.

This is a great tool and the real reason I wanted to highlight the practice.

It isn't just limited to individual benefits, it can benefit team members around you, to both have the practice demonstrated to them and used as a catalyst to encourage them to engage with the code more widely; too often I see engineers rabbit hole into a single field, or become the defacto owners of only one vertical slice of a code base.

Such occurrences can lead to friction, what happens if they are absent through say illness or holiday, a problem occurring in their field becomes very important, the pressure ramps up on them, on the team and ultimately the project.  And there's no pressure value to relieve this, you rely solely, heavily, on that one person.  What happens if they do not like this work environment?  You are unable to support them!  They feel they are trapped!  There are so many negative effects from the sole-engineer/owner model that again I am beginning to touch on a whole other field of the software engineering puzzle.

So refactoring efforts to me become a way to familiarize multiple engineers into the general planform of a project, large or small, it helps each engineer support every peer in the group; they find common things to discuss, or collaborate on.

To me, working through a codebase, as a group, in cooperation is really important.

And it starts with one person in front of one screen tinkering and discovering. 

Friday, 26 September 2025

Software: A Rant About Change for Changes Sake

In software engineering I am one of those people who like to embrace change, I will in my own projects and even in professional situations (time permitting) stand up a new version of existing functionality in a side-by-side manner to try out new things, seek better solutions or performance or simply to understand how someone else's solution solved for the problem at hand.

This mentality broadly sits under the "Prototyping" method of software engineering, however, prototyping itself often says you should create a prototype in a wholly other language or platform than your target; a little like when planning to make a game in a brand new custom game engine you might want to prototype in an existing one, so benefit from both your own engineering expanding your eventual product, but building confidence and a marker post for performance & the content to which you can work.

The same is then true when I just want to elaborate on a single target piece of code and rework it.

I say all this because I like change.

What I can not abide however is change simply for changes sake, changes or reengineering something for no purpose.

The biggest villian in this space for me, sadly, has to be Microsoft with the Windows Operating system.

The only reason I even still run windows is to test games I'm working on (not even to run those games in most cases).

And today they've drawn my ire by reengineering, for no purpose to me, nor benefit to any user the Lock Screen.

You could just Windows Key and L your way to exiting to lunch or to go away securely from your desk, it's a natural reaction for me to lock the screen, even when I'm working at home!  So ubiquitous was I taught about security, through hard learned lessons and practical jokes.

So it irks me massively to return to my machine just now, find it has installed an update and now when locked I come to wake the machine it sits.... and sits... and does nothing... and nothing happens.... and you wait....

To the point I believed the machine was locked up or crashed.

When really it's opening four widgets on the lock screen.... Four..... Inane news articles which do not interest me, junk adverts and even the weather app I must have uninstalled three times on this machine, yet it returns constantly.

The delay?  Yeah, it was off loading whatever framework it needed to show these embedded widgets.... Some Javascript framework taking a gig of ram no doubt, which has taken the lock screen of instant, consistent and functional usage to a dismal mess I am going to have to disable for my own sanity.

Microsoft, just NO, stop doing this.

Why the widgets? And then you remove them, after trying to figure out what's wrong and even with the value set to "NO" do not show me these widgets it still adds another app to the list of things it can show, it's so insidious; not to mention slow.  And when you finally do disable these needless widgets?..... Oh it's still massively slow and doesn't work as it did before.

Yeah you sould press any key and wake the locked screen to give you a log-in prompt... now only escape seems to give me a log in screen.... I have no idea why that change was done, I presume whomever was tasked with this change just likes or was themselves used to using the escape key; but it's the many tiny little changes the gas lighting of "this used to work <that> way" only to find it changed - without any visual reconfiguration it just now works differently - it all just beggars belief. 

Wednesday, 17 September 2025

XVE: Making Meteors!!!

I've had a little bit of a roller coaster few weeks, I would recommend anyone feeling life taking them and rushing them to try and find a minute for yourself, take a breath and slowly exhale.

  

Wednesday, 6 August 2025

Why Remote Work Just Works (for Me)

When I started working as a programmer, my days began with a ritual that felt entirely normal at the time: over an hour of inbound commuting into the city, and then another long outbound journey home. Time, energy, money — all drained in the process. It was the cost of doing business, or so I thought.

Then the pandemic hit, and everything changed. Practically overnight, that daily routine vanished. The entire company transitioned to remote work in just a few days. Luckily, we had already laid some of the groundwork — tools, systems, and workflows that supported remote access. All we had to do was scale up.

And it worked. Customers experienced very little disruption, and internally, we barely missed a beat.

Now, years later, we’re still working remotely. And — here’s the thing — it still works.

Not just for the company, but for me. Personally. Deeply. In ways I didn’t expect.

  

More Time, More Focus, Less Waste

The first and most obvious benefit? I got my time back. No more two-hour round trips, no more standing on packed trains or sitting in traffic. That reclaimed time went straight back into my life — and into my work.

I’m more productive now. I’m more focused. I’m in control of my time, my energy, my attention. Sure, life shows up — a doorbell, a neighbour, or an unexpected distraction — but the tradeoff is still massively in my favour. I’ve spent time building out a dedicated workspace at home, optimized for deep concentration and comfort. It’s not a makeshift setup at the kitchen table. It’s mine, and it’s built for what I do.

With that setup, and without the daily grind of commuting, I find I spend more time at my desk, more time on task, and the quality of that time is better. It's not just about more hours; it's about more effective hours. My brain arrives to work fresh instead of depleted.

 

The Return-to-Office Push: A Puzzle

Despite all of this, there’s a message echoing out there in the corporate world: return to the office. The tone ranges from gentle encouragement to stern mandates. But I keep asking myself — why?

Why bring people back into expensive office buildings? Why shoulder the cost of maintaining spaces built for humans — with their endless needs for coffee, heating, lighting, safety drills, and ergonomic chairs — when the alternative is already working?

If a company needs physical infrastructure, great. Build a tech hub. Keep your servers somewhere secure, your dev environments humming. Machines don’t need water coolers or office parties. But humans — we’ve figured out how to work remotely, and for many of us, it’s been a genuine upgrade.


The Uncomfortable Truths?

Maybe not everyone shares this experience. Maybe not every job translates well to remote work. Maybe some people don’t have a dedicated space at home, or they’re working at the kitchen counter while the family or flatmates buzz around. Maybe their productivity really has dropped.

And maybe, just maybe, some of the voices calling us back to the office are those for whom remote work didn’t feel good — or didn’t look productive from their side of the camera. Managers who are used to seeing bums on seats might feel unease when they can’t “see” work happening.

I get it. It’s hard to manage outcomes instead of hours. It’s hard to trust that people are working when you can’t walk by their desk. But is that really a reason to ignore all the gains?

  

What Does the Data Say?

I’d love to dive into studies on this — real data about productivity in remote vs. office environments. But I want more than just headline numbers. I want to know:

  • What kind of work were people doing?

  • Did they have a dedicated workspace at home?

  • Were they experienced at remote work, or thrust into it overnight?

Because I believe my personal productivity boost comes not just from being home, but from investing in a space that lets me focus, and in habits that support remote productivity. Without that, maybe the experience would be different.

 

It’s Not One-Size-Fits-All

This isn’t a blanket statement that everyone should work remotely, or that every company should shut its offices. But it is a reminder that — for many of us — the shift to remote wasn’t a compromise. It was an evolution.

We cut out inefficiencies, reduced stress, and created more sustainable workdays. And that’s not nothing.

So, when I hear the call to return to the office, I pause. Not out of resistance, but out of honest curiosity: What are we returning for? Is it about culture? Control? Collaboration?

Because if it’s about productivity — well, for some of us, remote work already won that argument.

 

My Conclusion

Remote work isn’t perfect. But it’s real, and it’s working. At least for me — and I suspect for many others too.

Maybe it’s time to stop viewing remote work as a temporary measure or a compromise, and start treating it as what it has proven to be: a legitimate, powerful, and in many cases superior way to work.

Let’s be thoughtful. Let’s look at the data. Let’s listen to the wide variety of experiences out there.

But let’s not forget: commuting two hours a day wasn’t normal. It was just what we got used to.


 

Saturday, 12 July 2025

XVE: Modular Ship Building System

Modular Ship Building system.... Yeah, so I've played about with compute shaders and high res oceans for, well for too long, I do want my game to have a low-poly feel so I've returned to focus in that direction.

Today beginning my modular ship building system, I can build a ship to place into the play space out of discrete pieces.  Since I'm using an Entity Component System this is trivial, I just create the "ship" as a series of child entities of the one ship and each has a different model offset to just place the renderable where I want them.... Yes yes, lots of words, just go with me here.

I started with building out a Hull Model, then a bow and finally a stern, and set up a function to build a ship with a number of segments of hull capped with ... yes the bow and stern:


The result was extremely visually underwhelming:


However, it proves out four key piece of technology, first is my transform hierarchy code is working as expected the parent entity here positions all the sub-renderables.

The next is the entity creation utilities are working, with the components tagging bow and stern orienting the entity along the X axis as "Forwards".

Right in the middle is my new Obj loader and the vertex colour attributes; I've moved away from using a Texture map to look up the colour of a face, say from a texture like this:

I've moved to vertex colours, but may return to UV's and faces, we'll see when I reenable global lighting.

And the final piece of tech is my revamped ImGui display of all the entities in the scene; I'm looking at implementing a gimbal control for moving entities about more easily within a scene.  This leads to the next piece of tech I am going to look at which is a scene editor, I need more play space defined, so land masses, buildings, objective markers, a compass display and of course to be able to control these new ships.... Watch this space.