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.
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.
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.
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.