tareq alyousef - STRAFE

Background


Growing up, I played Source Engine based games. The intricate movement mechanics felt gratifying--whether it was surfing, bunnyhopping, or rocket jumping, something about the engine's movement left an impression.

My journey with game development began when I discovered the Blender Game Engine in elementary school. Although I had trouble understanding the engine at the time, I was eager to learn it. I made splitscreen games and played with friends at a school computer.

It quickly became a hobby. Over the years, I've made a multitude of games, and I learned every part of the development process--modeling, texturing, animating, and programming. I've toyed with other game engines such as Unity3d, Torque, and Unreal Engine.

Of all the game engines I've used, Unity3d was my favorite--it didn't have a ridiculous entry skill level, had great community support, was very flexible, and used C#!

When I decided it was time to create a serious game, I stuck with what I loved: movement-based video games. These peculiar gamemodes have always been fairly unpopular, but the communities surrounding them have always been very dedicated and competitive.

I thought it would be fitting to create a rocket jumping game, one that would include the smooth movement I've always loved but unconstrained by the old technology of popular movement-based games.

Project


The game is built using Unity3d, coded with C#, animated and modeled with Blender, and textured with GIMP. It is a competitive rocket jumping game--players use explosives from rockets to propel themselves across a series of levels.

I relied on Source's multiplayer documentation for the client-server model. The game is server-authoritative, meaning the server ultimately controls the "state" of the game, rather than relying on information from clients. This has numerous benefits over a traditional client-server architecture: it prevents cheating, allows for validating data sent from the client to the server, and is very consistent and reliable over all clients. To combat the full round trip delay of the server-authoritative model, I've added client-side prediction, a method that allows client-side actions to be performed instantly only on their end. To clarify, these actions only exist on the client--other clients use data from the server's game state.

Since then, Unity3d has transformed with the new render pipelines, new networking solutions, and DOTS, the data-oriented technology stack. The engine has become somewhat unstable with the constant set of changes. For this reason, development for this project has slowed down.