Johan Holmér

Gameplay designer & Scripter

I am a Game Designer and Scripter, currently studying Game Design at Future Games in Stockholm. I’ve spent my time at school broadening my designing knowledge, while also specializing in scripting, deepening my capabilities within Unity and Unreal.

GROUP PROJECTS

PERSONAL PROJECTS

AI Flocking Behaviour

AI using flocking behaviour, which implements Cohesion, Separation, Alignment, Goal seeking, Field of View, Dynamic Obstacle- and Mouse Avoidance.

The algorithms are weighted by distance.  In this scene, I created fish AI which avoids the mouse cursor, but the behaviour is highly customizable and the algorithms can be tweaked and saved through a Customized Inspector.

AI Behaviour Tree

I built a Behaviour Tree system and created two AIs with different behaviours using it. Both AIs area also using an A* pathfinding which is using weights to navigate the area.

The first AI tries to activate each of the generators, while the second AI patrols the area and tries to catch the first AI if it spots it.

private void BurglarAISetup()
{
    Routine flee =
        Routines.Sequence(
            Routines.Inverter(Routines.SpottingCheck(Entity.SpottingStatus.Nothing)),
            Routines.Flee(),
            Routines.Inverter(Routines.SpottingCheck(Entity.SpottingStatus.Nothing)),
            Routines.Hide()
            );

    Routine startGenerator =
        Routines.Sequence(
            Routines.SpottingCheck(Entity.SpottingStatus.Nothing),
            Routines.FindGenerator(),
            Routines.Interact()
            );

    Routine burglarBehavior = 
        Routines.Repeat(
        Routines.Selector(
            flee, startGenerator));
        
    burglar.SetRoutine(burglarBehavior);
}

private void GuardAISetup()
{
    Routine patrol =
        Routines.Sequence(
            Routines.Patrol(),
            Routines.GuardSpot()
            );

    Routine investigate =
        Routines.Sequence(
            Routines.SpottingCheck(Entity.SpottingStatus.OutOfSight),
            Routines.MoveTo(guard.GetTarget()),
            Routines.GuardSpot()

            );

    Routine arrest =
        Routines.Sequence(
                Routines.SpottingCheck(Entity.SpottingStatus.InSight),
                Routines.Sequence(
                    Routines.MoveTo(guard.GetTarget()),
                    Routines.SpottingCheck(Entity.SpottingStatus.InSight),
                    Routines.IsInRange(),
                    Routines.Interact()

                        )
                    );

    Routine guardBehavior = Routines.Repeat(
        Routines.Selector(
            arrest, investigate, patrol));

    guard.SetRoutine(guardBehavior);
}

Eight Days of Invasion (WIP)

This project is a personal project I’m currently working on in my spare time. The game is a mix of a Twin-Stick Shooter and a Tower Defence game, where the player switches between controlling a spaceship and building satellite turrets to defend the planet from waves of attacking enemy ships.

The project originated from a 2-week course covering UI scripting and UX design, where I focused on creating a modular menu system with changeable graphics and audio settings. Settings are saved to a file and I will add even more graphics and gameplay settings in the future.