Role: Programmer + Designer

Grim Keeper is a single-player, third-person close combat action game in which the player plays as the grim reaper and defeats enemies with his scythe, wave-slash, ethereal sprint, life steal, and the companionship of the dog Alastor. The game was made by a team of six as the final project for Vancouver Film School’s game design program. My primary responsibilities in the project were the close combat and melee enemy AI implementation.

Download and Play

Click here to go to VFS arcade to download. Note that a controller is required to play.

Cleave Attack Solution

Since the primary weapon was a scythe, we found players expected a cleaving attack. The different attack animations in the game also implied a different angle in front of the player where the attack would land. To manage this I created a script that would take a range and an angle, then hit all enemies within that area in front of the player. The attack actions then happen to all enemies within the array _enemiesHit.

private void HitEnemies()
{
    // clear the previous list of enemies that have been hit and that are in range
    _enemiesHit.Clear();
    Array.Clear(_enemiesInRange, 0, _enemiesInRange.Length);

    // update the enemies that are in the overlap sphere around the player
    Physics.OverlapSphereNonAlloc(transform.position, _lightAttackRange, _enemiesInRange, _enemyLayer);

    foreach (Collider enemy in _enemiesInRange)
    {
        // only add enemies within the set angle in front of grim to the list of enemies hit
        if (enemy != null &&
            Vector3.Angle(transform.forward, enemy.transform.position - transform.position) < _lightAttackHalfAngle &&
            enemy.GetType() == typeof(CapsuleCollider))
        {
            _enemiesHit.Add(enemy);
        }
    }
Next
Next

Frankenswoon