Catch'em Sheep

Catch'em Sheep is a third person game, where the player's goal is to shear all the sheeps, while completing various side objectives as well.This was the fourth game project I participated in during my time at Futuregames, where we worked as a team of 12, including 5 programmers. My role was gameplay programmer, with primary responsibility for setting up the player and implementing the various equipment in the game.

  • For the equipment, my first thought was to use the Gameplay Ability System since I wanted to get some practice with the system, but it felt unreasonable for a project with a 4-week scope, especially because none of the other team members were familiar with the system. So I decided to build a system inspired by it, but much simpler than the robust GAS.
  • As with previous game projects, I was also tasked with some of the backend work, such as handling game states from the main menu all the way through to the end of the game.

Equipment

The system consists of an actor component and a base class from which various equipment types can derive. The base class includes functions for starting, stopping, and executing actions, which can be overridden. This design provides a nice level of abstraction, allowing all equipment-specific implementations to remain separate from the player class.


This approach allowed us to create a highly scalable system, where implementing new equipment types became quick and straightforward.


All logic can be implemented directly on the equipment itself, either in Blueprints or C++, making the system easily accessible for our designers.

Pickups

The other system closely tied to the equipment was the pickup spawner. I created a simple spawner responsible for generating pickups at runtime whenever we switch to the appropriate game state.

For the purpose of learning I decided to implement it in a
data driven approach. I setup a data table that holds all the positions where the pickups should spawn and a reference to an FPrimaryAssetId. This way the data table uses very little memory till I load the actual actor classes manually. I also added a callback function so that once loading is complete, the pickups begin spawning into the level automatically.

Take aways

Some key insights include:


  • Balancing structure with scope: Three of our four designers were interested in technical design and Blueprint coding. I initially planned for a high level of abstraction, but early discussions led me to the conclusion that this could overcomplicate our 4-week project, limiting the team’s ability to learn and benefit from the systems.

  • Applying focused design principles: While trying to reduce complexity, but still applying some abstraction and following design principles like Separation of Concerns (SoC) to some degree, proved beneficial in my opinion.

  • Creating a comfortable team environment: Regular Friday ~hour long play sessions or small talks with team members during breaks helped to foster openness, making team members more comfortable sharing feedback during stand-ups, which led to a more polished final product.


Over all I feel like this has been the greatest game project during my time at Futuregames and I am really happy that I have been a part of this team.