Category: gamedev
-
Combat, Part 1 of N

I’m finally able to start working on building out a combat system for this game, and boy is it a lot more complicated than I originally anticipated. Before that however, I had to modify my architecture a bit because during building out the ECS system for combat I realized I…
-
More Animation Work

Hey folks, back after a slight break (trip) but I have been getting back into things here by fixing my animations and getting them to work for the network character(s). Let’s dive in. As you may recall we left off with our character able to run around with the default…
-
Fixing PMOCharacter animations

As cool as it is to see my character zooming around in the A pose, I wanted to fix up at least my own character class’s AnimBlueprint. By default the Animation blueprint is heavily coupled to the Character and CharacterMovementComponent. Meaning, me hijacking movement with Jolt’s physics isn’t going to…
-
PMO Network Movement in UE5

Mission Accomplished Phew, after a year and a month, I FINALLY have networked movement visible with Unreal Actors in my MMORPG! As you can see we now have characters moving around and visible in the UE5 editor: Your browser does not support the video tag. Problems getting here After my…
-
Performance & Load Testing (300 Concurrent Clients!)

As much as I want to get multiple characters up and running around in Unreal Engine so I can see them, there’s one final task I must complete, and that is making sure this whole thing is actually going to work to the scale I want it to. I want…
-
World State

As I mentioned in my 1 year anniversary post, I’ve completed the WorldState system. This system is based off the Quake 3 Arena delta compression technique and will hopefully allow me to efficiently transmit state updates to clients. If you want a general understanding with visuals, I recommend reading the…
-
PMOs 1 Year Anniversary

While going through some of my old posts to look as to why I designed somethings, I noticed June 28th is the first post of me taking on this massive project. It’s always good to reflect on what you’ve done and accomplished and a one year anniversary is a good…
-
Area of Interest Part 2

In the last post I hinted that the AoI system will probably span a few posts. While I had the initial design and built the sensors in Jolt Samples, I quickly noticed a problem, my character wasn’t triggering the sensor volumes. Pairing Jolt’s CharacterVirtual with a Rigid Body It turns…
-
Area of Interest Initial Design Idea

Now that my physics engine is in place and I can move the primary character around, I need to start sending positional information to all connected clients. To do this, I need to have a system that knows which characters are near each other and who should be able to…
-
Some bugs and how I fixed them

Half Capsule Problem I left off last post where I finally fixed collision, but my character’s collision capsule appeared to be half inside of the mesh. This took me a good long while to figure out and finally with help from the author of Jolt he cracked what I was…
-
The journey to get Jolt’s Character to not fall to it’s doom

After, 2 weeks of intense debugging I finally have Jolt’s Character class working in my game! Picking up where I left off last, my character had an unfortunate feature of falling through the world. I was convinced this was a problem with how I was loading my FBX landscape mesh.…
-
Debugging JoltPhysics in UE5

I have been struggling with getting JoltPhysics to play nicely in my code. What seems to work just fine in the JoltPhysic’s samples, utterly fails when I try to play inside the Unreal Editor. This post is a quick update on how I’m going to start debugging Jolt from inside…
-
Loading FBX models into JoltPhysic’s Samples

I realize it’s been a long time since I posted, but I assure you I’m still working on this almost every free chance I get. It’s been rather slow going because I’m not really familiar with physics or loading meshes manually. I’ve been reading over the Jolt Physics docs and…
-
Understanding Basic Trigonometry to Calculate Movement for Server & Clients

One thing I probably should have done before I even started working on networking movement was to really understand and replicate how movement even works in my own code. I should warn the reader(s) that I actually am TERRIBLE at math. So even calculating the most basic things are usually…
-
Custom Movement, Inputs, and Compression
Input Today’s topic will be about how I plan on transmitting input/movement data to the server. Before we dive in, let’s discuss some constraints we have and some fundamentals. At first I was planning on sending a series of ‘actions’ and magnitudes. Where magnitudes would be the amount of yaw…
-
UDP Reliability Part 4 (Resending)
This will be my last post on UDP Reliability for a while, even though it technically is incomplete. Honestly, I’ve done enough work on it that I need to move onto something else to keep my interest in this project up! I left off where I wanted the game system(s)…
-
Using Valgrind to Find and Fix Memory Leaks
I’ll admit, I’m still very new to C++, even though I’ve worked on and off with it over many years. It’s different when you are sitting down and writing a large scale program than just writing small tools or reviewing other peoples tools/code. I wanted to make sure after I…
-
std::function, Lambda and Testing
While I begin to wrap up porting reliable.io from C to C++ for my PMO library, I wanted to touch on a quick testing technique I’ve used in Go for quite some time, which I realized I can also use in C++. Go interface{}, Mock Functions and Tests In Go…
-
UDP Reliability Part 3 (Reliable Endpoints to PMO)
While translating reliable.io’s endpoints to C++ I quickly came to the realization that I will need to properly implement the messaging system. Right now it’s kind of spread out all over the place (in the socket thread, the main loop, and inside of flecs systems). To make the system cleaner…
-
UDP Reliability Part 2 (Porting reliable.io)
Welcome to the second part of getting UDP reliability into my engine. Now with connections complete, I need a way of tracking sequence ids between packets and store histories and all that jazz, but it turns out someone already did the hard work for me!. Of course I am talking…
-
UDP Reliability Part 1 (Connections)
I’ve started working on the reliability layer of PMO. Good place to start is with the concept of “connections”. Since we are dealing with UDP, this isn’t really a thing, as each packet is independent. I plan on building the entire reliability layer inside of flecs’ systems, queries and observers.…
-
How (Third Person) Movement Works in UE5

Before I rip out the movement code for the UE5 Pawn, I want to make sure I understand how everything works. Movement has a lot of implications for collision and general physics systems so knowing what happens after you send an input is critical. I need to make sure my…
-
Floating points, Movement, and Quantization
Now that my library works in UE5, and I can communicate over the UDP socket to my server, it’s time to take a look at getting objects moving. As a refresher, clients send only their inputs and some additional metadata to the server. It’s usually a Really Bad Idea to…
-
DLLs, Memory, and You

Before we get into the topic of DLLs and memory, I just want to comment that after two weeks I am finally unstuck. This was mostly due to Sander (the flecs maintainer) fixing an issue I identified. As you can see from that issue, I tried many different methods and…