We did not make sure that everybody had the same vision of the game from the start. During the first week we thought that everybody had the same vision but after we all wrote what we thought was the vision of the game we realized that it was not the same for everyone. We lost production time that could have been avoided if we had just letting everybody describe their vision of the game from the start and made clearer design pillars to follow.

What went well:

After the first week when we realized that our game project was not heading in the right direction we scraped most of what we had done, killed our darlings, and redirected our projects heading with clearer design pillars. The group was agile and did not give up. The result was that the game got a cohesive feel.

Movement

I started by splitting up the functions in gamepad input and keyboard inputs so the mouse did not effect the game when the player wanted to play with a gamepad. Then I handled the players movement and rotation in the separated functions dependent on the player input. Both movements are based on twin stick movement so the player can move in one direction and look in another.

Flashlight

I used event systems to make it easier to effect the enemies that are in the flashlights light and reset the flashlight when the level resets. The scriptable object variables made it easier to separate the different scripts functionality and dependencies.

Player input - Flare

The flare flies in a arc from the player to a target position. The needed velocity to reach the target postion and the arc that the flare will travel is calculated. This data i used to shoot the flare with the needed velocity to reach the target and render the arc that the flare will travel.

AI behaviour

I made a finite state machine that would manage the flow between different behaviour states for the AI. There are two different ways that the AI can chase the player to make a crowed of enemies feel more alive and not like a group of AI:s that do the same thing.

The intercept state uses the players movement direction and tries to intercept the player while the chase state only moves towards the players position.

In the hold state the enemy stays close to the player and attacks the player.

The RunAway state makes the enemy run from the light source that collides with the enemy.