Zombies, Skeletons, Goblins, and other foul creatures are here to destroy your home village, but you were already counting on it. Construct Ballistic, Sonic and Death Ray turrets to actively take down your enemies. Wield your trusty Sword and confront their lines head-on. Surround the field with Damage and Speed turrets to increase your damage output.

Your strategy and how you upgrade your weapons will depend on the type of loot dropped by the fallen. Imbued your sword and turrets with the power of elemental gems (Fire, Ice, Plasma) to double your damage against the weakest typing. Passive turrets can also be enhanced with elemental gems to temporarily change your sword’s typing in the heat of battle inside their influence area.

Protect your village. Take them all out.

This game was developed by 2 designers and 2 programmers with the idea to learn more about UE5 and improve our portfolio with another game.

You can find more information about all the projects in his itch.io website and the source code in this link.

In this project I developed a lot of gameplay features and systems. Also I developed some things for the UI of the game.

  • Engine : Unreal Engine 5.1
  • Languages Used : C++, Blueprints
  • Role : Gameplay, AI, System Programmer.

My Contribuctions

In this project we wanted to allow designers to create as many enemies as they wanted so we created a Data Driven Table to create enemies from scratch with the different assets they needed.

With the chosen configuration we created the enemy taken from the enemyPooler. In this game the enemies start appearing depending on the round and the amount and type are selected randomly.

With the items that we collected from the enemies, now we have to use it in the different structures we have along the map. All of these structures share our WidgetShopComponent.

With this component we lead the logic to open or close the UI to the component and not the structure. In the component you can select which ShopClass you want to select and at the beginning of the game it creates just one instance of each class and shares it with all with the same components that have the same class.

When our hero kill an enemy it drops a loot, we need the blueprints to create and upgrade the differents towers and upgrades for the hero, with all of this we wanted to notify the player which item is he getting from killing the enemy so we created a log at right side of the screen to show the player with item is getting.

We have to create on one hand the logCard, it contains the animation logic and delegates to alert the owner when an animation ends to continue with other logic. We have to set the background color, the amount, and the object type. On the other hand we have to create a widget, it contains all the cards and the logic to show a logCard. When the player receives an item the widget registers it and prepares a logCard and starts its logic, when the logCard ends the FadeIn Animation alerts the widget, so it can prepare a new card. In this class we created a small pool of logCards to avoid the problem of creating and destroying objects.

Our hero can change the type of element that contains his sword to deal more damage to enemies that are weak to this type of element. First we have to create all the elements in an enumerator and a DataAsset that contains the element and the multipliers it does to others elements.

With all of this we can create a component for all the characters of the game. In this component we can select the spawn element or a temporal element if the enemy or the player enters an area that changes the element while they are in the area.

Another important thing we did at the beginning of the project was an enemyPooler. In this kind of game that we are destroying and creating enemies all the time we wanted to have a pool to avoid this problem.