Dead Rails

Overview

This game is currently in development to be launched on Steam, and Xbox.

Apocalypse Train is a 4 player networked multiplayer co-op survival game made with Unreal Engine C++ where you must keep your train moving, while also defending it from zombies! Keep refueling the train as you go to prevent it from stopping and losing.

Takeaways

Dead Rails was the first game where I put everything I had learned to the test. Creating tight and polished gameplay, scalable code architecture and modular systems. Most of all, this was a networked multiplayer game. I learned a lot in this project, but mainly I saw the real world benefits of writing organized, and clean code that did not break when becoming so large.

I also got a lot more comfortable with writing networked gameplay code, and gained an understanding of how to optimize for online play.

Multiplayer Networking

Using Unreal’s replication system, I implemented networked multiplayer gameplay. Implementing solid networked gameplay required a lot of optimization on what exactly needs to be networked, and what needs to stay local in order to minimize packet sizes to keep the game playable with lower end networks, and higher ping. For example, all of the shooting and dynamic player occlusion logic is done locally, and only the final result of spawning a bullet particle, or fading out a building roof are replicated across all clients.

mODULAR wEAPONS and Enemies

The goal for this game was to make it very easy to add, and modify weapons. As there is a shop, and different enemy types with similar archetype behavior, I made the enemies and weapons very modular. To accomplish this, I made the weapons and enemies take their stats from a Data Asset file which would then be configured by designers. This not only made it easy to change and add new variants, but also made the enemies, which spawn in large amounts at a time, a lot more light weight, since they did not carry a copy of the same values in their instances, and instead all referenced one value in the data asset instance.

Dynamic Player Occlusion

The player occlusion system required some creative thinking. While it was very easy to implement for one player by just checking if an object is between the player and the camera, it was a little more complicated for multiple people. I implemented an object caching system that would have an active, recent, and fade out cache. These would then be used to compare against the other players’ active caches to see if they were under the same object. This, paired with the fade out cache to allow for fast object switching while accurately fading out old objects successfully allowed the system to be scalable to the max player count.

Vision Cone Turret

I created a turret system in C++ with the ability to modify the shape and accuracy of the turret’s vision cone through the editor details panel. I used two methods to do this. The first of which was through using trigonometry by finding each end point of the vision cone rays using sin and cosine. The second was using Unreal’s FVector functionality.

Next
Next

OdysseyVR