Skip to content
← All news

The rebuild: VHL now runs on real foundations

From the outside this might look like a long list of bug fixes. It is not. Over thirteen days and 151 commits we rewrote the engine underneath VHL. Not the art, not the rink, not the feel we are aiming for. The part that decides what actually happens in a match.

What was wrong

VHL was built almost entirely in Blueprints, Unreal's visual scripting system. Blueprints are excellent for proving an idea works. They are not a foundation for a fast, competitive 4v4 online game, and everyone who played felt the consequences.

The puck stuttered, because the game was sending hundreds of guaranteed network messages every second just to describe where players were skating. It was flooding its own connection. Shots that should have hit you passed straight through. Worst of all, whoever hosted the match got a measurably better version of the game than everyone else, and some events simply resolved differently depending on whose machine you asked.

None of that is patchable. It needed the foundation rebuilt.

What changed

Every gameplay system is now native C++ and server-authoritative. In plain terms: the server decides what happened, everyone in the match sees the same thing, and the game stops arguing with itself. Skating, puck physics, shooting, possession and stealing, every ability, match flow, the shootout and the camera were all rebuilt rather than ported.

The biggest single win was deleting those per-frame guaranteed message streams entirely. Movement is now predicted on your machine and reconciled with the server the way Unreal actually intends. That was the largest source of stutter, and it is simply gone.

Three bugs worth telling you about

The puck that phased through you. The complaint we heard most. A full-power shot off the boards would pass clean through a player standing in its path. Everyone assumed the puck was moving too fast for collision. It wasn't: the puck's physics were checked along its whole path, which is why bounces always worked. But the pickup check only asked whether a player was touching the puck at that exact instant. At shot speed the puck is in front of you on one frame and behind you on the next, so the answer was always no. Pickup is now checked along the puck's entire path.

Boost was secretly a brake. Boost felt great from a standstill and useless at speed. It turned out it was not increasing your speed, it was setting it, to a fixed number. Hit boost while already skating fast and it set you to a value below your current speed. Players had been told for a long time that boost feels weak when you're moving. It wasn't weak, it was slowing them down. It is now a proper additive burst, worth the same whether you're stationary or flying.

The turn speed setting that never worked. There is a rotation speed setting that controls how fast your player turns. It did nothing, at any value, for as long as it had existed. A single engine flag, on by default, was snapping the player's facing instantly every frame. We measured the real turn rate at 12,000 degrees per second against a configured limit of 100. That is about 35 full spins per second.

The camera is its own thing now

This is the change you notice in the first ten seconds. The camera used to be bolted to your player, so it had to follow you, and "panning" was faked by sliding it away on an invisible leash. That is also why it snapped to the middle of the rink when your goalie got pulled: the camera's memory lived on the player model, so destroying the model destroyed the memory.

It is now fully detached. Free camera by default, panning at the screen edges, fenced to the rink so you can't lose yourself in the void, spacebar to snap back to your player, and toggles for follow-player and follow-puck. That last one matters for goalies: follow the puck up the ice, flick the toggle off, and the camera stays exactly where it is instead of yanking your view back.

And VHL has a real server

The rebuild landed on hardware. VHL now runs on a dedicated machine in a Nuremberg data centre, 24 hours a day, and it is nobody's gaming PC.

Nuremberg
LiveNuremberg, Germany— VHL’s dedicated alpha server.

That sounds like a small thing. It isn't. Until this month, playing VHL meant somebody had to host, and that person got a different game to everyone else. There is now a neutral machine that owns the truth, and every player connects to it as an equal.

The machine is deliberately boring. One port open, logs that survive restarts and rotate so they can't fill the disk. None of that is exciting and all of it is the difference between "we played some games" and "we played some games and can find out what went wrong."

Here is the part we're most pleased about. During the first session on it, the ping felt terrible, around 218ms and unplayable. A local ping tool reported 13ms. The server disagreed, reported 244ms, and noted zero packet loss. Delay that large with no loss has one common cause: something is saturating the connection and the game's packets are queued behind it. And they were. Someone was uploading a build to cloud storage while playing. The server caught the whole thing on its own, the slowdown, the cause and the recovery back to 28ms, without anybody having to screenshot anything.

"It felt laggy" used to be an argument. Now it is a number with a timestamp. Incidentally, that is also a practical tip: don't upload or download anything while you play, because it wrecks your ping and looks exactly like a server problem.

What happens next

The first real session on the dedicated server produced six bugs, and every one of them was found by playing rather than by reading code. Several could only ever have appeared on a real server. One was genuinely dangerous: if a player disconnected while carrying the puck, the puck stayed marked as carried by someone who no longer existed, for the rest of the match, with no way back short of restarting. That is fixed at the root now.

From here the work is feel rather than function. Skating weight, turn rate, boost strength, ability cooldowns. All of those are knobs to turn now instead of systems to rebuild, which was the entire point of the last month. After that, matchmaking, so nobody has to paste an address to play a game of hockey.

Feel is the one thing we cannot measure from here. Does the skating feel heavy or floaty, is boost worth its cooldown, does a hit land the way you expected. That needs people on the ice. If you want to be one of them, sign up for a playtest.