top of page

Age of Powder is a Survival FPS in a dark fantasy universe. In this game, the player has to survive infinites waves of enemies, using weapons and collectables he can find along the village he spawned in. Player's objective is to reach the highest score in a run. 

Project relaized on Unreal Engine 5.

Character

Like many others FPS, character's mesh is only a pair of arms. Many of the character's logic, allowing the player to interact with his world, is found in character's blueprint. Basic locomotion is controlled using Unreal's built-in Character Movement Component, but system's logics, like damages, health or ammunitions, use hand made properties.
Weapons blueprint isn't visible by default on character cause we wanted the player to spawn unarmed and pick a weapon later so that he can familiarize himself with his environment.

Weapons

The first weapon is the rifle. The player can use it to shoot enemies from a long distance. Rifle's bullets are penetrating, hitting one enemy after the first target. Damages are decreased after the first hit. The player can aim for the head of the enemies, resulting in a one shot on this target.

When shooting with the rifle on an armor piece, the targeted enemy won't take any damage but it's piece will be removed.

This weapon's reload uses punitive charger, so a full magazine will be removed from player's inventory, regarless of the missing bullet's number in the current magazine.

Rifle

Shotgun

The second one is the shotgun. This weapon is useful to clear groups of enemies, as it's hitbox area ( white cone on the screen ) is large. Moreover, shotgun's ammunitions hit every targets in this area, even if an enemy is in front of another one, and ignoring armor.

Shotgun's damages depend on the distance from the player's character to the hit enemy.

When the player reloads this weapon, the reload animation will loop to match the number of missing bullets in the gun.

Flame Thrower

Finally, the third option is the flame thrower. This weapon, which appears less frequently than the others, is the more powerful. It's magazine permits the player to shoot for 20 seconds straight, but it can't be reloaded. 

Like the shotgun, the flame thrower uses a large area to hit enemies. 
When a target is hit during one second, it starts to burn, inflicting damages over time and slowing it.

System

To pick a new weapon, or reload his current, the player uses ammunition cases.

They are composed of three parts : the gun box, the grenades one and the heals one. When using one of them, the corresponding ressource will be filled. If the player use the gun case, it will swap his current weapon to match the ammunition case's one.

These elements are instanciated with spawners placed in the world, but there can only be one at a time on the map. So, when a case will be spawned, an area arounnd the player checks all available spawners and picks one. The weapon is chosen randomly, with a pity system for the flame thrower, which is less likely to be chosen. 

After the player used the case, it dispawns to spawn another one.

Ammunition Case

Enemy AI

Enemies articficial intelligence uses zombie - like behavior, which is pretty basic ( locomotion, look for player's character, hit on range ). To move on the map and find the player's character, it uses Unreal's NavMesh and AI Perception Component.

The enemy blueprint contains various colliders, one for each body part, influencing the score granted to the player on a landing shoot.

There 4 variations of enemies which are defined by armor pieces added randomly to the spawned AI.

These AIs are spawned according to waves setups, which have an influence on number of enemies, number of variations and mainly spawn locations of them.

These AIs are spawned according to waves setups, which have an influence on number of enemies, number of variations and mainly spawn locations of them.

Indeed, as we wanted the player to be stressed and feel claustrophobic, it was necessary to work on the spawn system behavior. At the start of a wave, enemy spawners will be chosen randomly between every available one's on the map. Then, for the sub-waves, the system will detect in which sector the player spent most of his time during the round, and select the selects the spawners in it to be the availables ones for future spawns.

Moreover, to surprise the player during a round, some AI spawn locations will be picked by partially anticipating the player's trajectory and choose the spawner in front of his future movement.

Map sectors

© 2023 by Mazeau Grégoire

bottom of page