Team Project • The Game Assembly

Maruk - Shipwrecked

A third-person platformer built in TGA Engine, where I worked mainly on companion AI, behavior trees, and gameplay-driven systems.

Role

Gameplay / AI Programmer

Project Type

Team Project

Focus

Companion AI, Behavior Trees

Engine

Lamp Engine / C++

Meet Greedy McNeedy

Greedy was the main thing I worked on during this project and something I put a lot of care into.

I wanted him to feel alive and like he had personality.

Companion AI, Behavior Tree & Blackboard

Greedy’s behavior was built around a behavior tree and a blackboard.

The tree handled behaviors like following the player, changing position around them, reacting when the player takes damage, collecting nearby coins, and teleporting back when too far away.

The blackboard stored shared state like offsets, target positions, collectibles and temporary behavior flags which allowed different parts of the AI to work together.

Movement, Positioning & Feel

A big part of making Greedy work was not just what behavior was chosen, but how he moved and positioned himself around the player.

His movement is driven by steering from the behavior tree, with offsets that let him shift sides instead of staying in one fixed position.

This helped him feel more natural, especially when picking up coins or changing position around the player.

Events & Visual Scripting

I also worked on events and scripting support for Greedy.

He reacts to messages sent through our event system which are handled by the behavior tree and blackboard.

I created several visual scripting nodes so that others in our group could control his behavior, such as making him face the player, move to a position, lock back to the player, or spawn and despawn during gameplay.

Animation & Gameplay Integration

I didn’t build the animation system itself but I hooked it up to the behaviour tree so Greedy could play the right animations based on what each node was doing.

Some nodes were also a bit more involved. For example, when Greedy changed position around the player, I used the player’s facing direction together with the camera angle to figure out which movement animation should play.

Takeaway

This project was a big step for me. It was my first time working with a more advanced AI setup using behavior trees.

It also made me more comfortable building systems that feel good in-game and not just work technically.

I ended up getting very attached to Greedy, which made the whole process especially rewarding.