In Bloom

Horror | FPS | Post-apocalyptic

A first person horror survival game in a post-apocalyptic world where nature has taken over.

Summary

I primarily worked on AI, combat and UI programming. Used Unreal's behavior tree for AI and made sure that the enemy worked with the main combat mechanic. Also worked with the UI team to implement and connect UI with gameplay. I got better at managing time with a lot of tasks and a short deadline, taking ownership of features, and communicating in a team.

Project Info

Team Size: 18

Project Duration: 7 weeks

Engine: Unreal 5

Roles: AI/Combat/UI programming

Other Tools: Perforce, Miro, Jira

Introduction

In Bloom is a first person survival horror game, set in a post-apocalyptic world where nature has taken over. The player needs to explore the world and gather items and survive nature's horrors to traverse levels.The player has a gun to defend itself with, but little ammo available so fights need to be managed carefully.

In this project my main working areas were: AI and combat programming - anything related to the enemy in the game was my responsibility to manage and program. UI programming - helping the UI team implement their UI and any features that they needed was my responsibility to fix and help with if needed.

The AI uses Unreal's behavior tree and states to determine behavior, combining AI controllers and task nodes for execution. We used unreal's third person character as a base for movement, saving time on not making our own character controller. For combat I made sure that the enemy worked with the main combat mechanic in the game and that the enemies were easily balanceable without modifying code.

I worked together with the UI team helping them with implementation and programming related features, setting up connections between what happens in the game with the UI. I worked on the main- and pause menu, making settings and navigation consistent.

I spent most of my time programming in blueprints mostly because it was fast to prototype features, and so others in the team had the possibility to edit and understand the code base, especially if they didn't have experience working in C++.

AI

The enemy AI uses Unreal's Behavior Tree and AI controller in combination with task nodes and a Blackboard to create the enemies behavior. It also has an AI Perception component used for seeing and hearing noises the player makes. The AI has different states It can be in:

Idle; standing in one place looking around waiting for a new event to execute a different behavior.

Patrol; moving around to different locations depending on what patrol pattern is attached.

Alerted; moves to the last known location of a sensation trigger.

Chase; Chases the player if the player is in its seeing range, when it's close enough to the player it attacks.

Attack; The enemy attacks doing an attack animation and a collision check to see if it hits, if it does the player takes damage, if the player moves out of range during the attack nothing happens.

The AI is editable per enemy so it can have different behaviors making it possible to have different scenarios and challenges for the player. There are four patrol behaviors:

No Patrolling; the Ai doesn't move from its spawn position.

Patrol points in order; follows a fixed route based on patrol points.

Patrol points random; randomly chooses a patrol point it can go to.

True random; randomly chooses a point in the navigation mesh it's in and goes to it.

A normal sequence for the Ai would be, moving around based on its patrol behavior, if it gets a sensation trigger change to Alerted state. If it spots the player, change to Chase state. When it loses sight of the player, change Alerted state and if it can not see the player there change to Patrol state.

What I learned

Working on this project I learned how to manage time more efficiently, I often needed to juggle multiple tasks at the same time when having similar deadlines. I needed to prioritize features for each deadline very carefully so I didn't spend too much time on one thing, so the experience of the whole game is better.

Learning Unreal and their AI systems, when I don't have much experience working in Unreal or with AI npcs.

Getting better at taking ownership of a feature that I am working on in a team environment, making sure that the feature is up to the standard with the project and so it gets done in time as agreed by the team.

Being better at voicing my opinion in the team, being able to bring up concerns, and coming to a consensus on how features should operate.