top of page

Platform:

Windows PC

Language:

C++

Tools Used:

Unreal, Visual Studio

Completion:

April 2018

Team Size:

1

FPS Time Trial Game

A 3d first person shooter game built with C++ in the Unreal engine for an Advanced Game Implementation module at the University of Bolton

This game involves attempting to run through a looping map in the fastest time possible while shooting targets. The targets can either be enemy targets that give points when shot, or civilians that deduct points and whether the targets are civilians or enemies is randomized for each run. The weapon used is also randomized with random stats for attributes such as fire rate, magazine capacity and reload speed. After a successful run, the score is shown on a monitor in game, and saved to a file using json.

The initial idea for the game was to be an accurate weapon simulation, with customization weapon parts that changed how the weapon handled. To achieve this the weapon was based on a component model, with a weapon base that received input from the player that had components for the magazine, barrel and stock. These individual weapon components held the weapon functionality and specific stats. In this way a weapon component could be removed from a weapon base, and a new component could be added with different stats.

This is shown below where the weapon base has a reload function, that calls a function on the magazine component. The magazine component then uses it's own variables for reload speed, magazine capacity, etc to carry-out the reload.

For the weapon firing itself I decided on a hit-scan style using linetraces. I debated on whether to start the line trace from the actual barrel of the weapon or from the center of the player's view, and in the end choice the latter. This was because having the shot originate from the barrel could cause problems if the player is standing over cover, or if the barrel is blocked in any other way. It was at this point that I decided against making the game as accurate as possible and instead choose to focus on play ability and having a good weapon feel.

 

The "bullets" fired can ricochet or penetrate through certain materials, and this was done simply by checking a hit actor's physics material. When the actor's physics material matches the material it is compared with, a second line trace is called. For penetrating, the second line trace uses the same direction as the first, but the hit actor is added to the collisionparams ignored actors list. For ricocheting, the second line trace uses a direction calculated from mirroring the original direction.

I am quite happy with the end product of this project. It's probably one of my best looking project thanks to the assets used for the weapons and animations. In general the weapon feel is good, but the randomness of the weapon's stats can occasionally produce some unwieldy weapons. Because of this the random stats may not be appropriate for this style of game. This project also gave me the chance to further refine my skills in using json that I gained when working on Manny the Manx. This project involved saving and reading an array of arrays that definitely tested my knowledge in this area.

Overall I feel that I have made a good base FPS game to expand upon in the future with refined features and proper level design.

  • Facebook - Grey Circle
  • Twitter - Grey Circle
  • Google+ - Grey Circle
  • LinkedIn - Grey Circle
bottom of page