top of page

Wolf Game

The first Virtual Reality game project developed by studio Hardly Hyperbolic, which I co-founded with Euan Pollard.

It is a survival game in much the same vein as Horizon Zero Dawn. 

The video is a walkthrough of a prototype we produced to demonstrate the mechanics of interaction with the player's wolf companion, which is at the heart of the experience we envisioned. 

My roles: Programming, Game Design, QA Testing

Concept Art

Concept art produced by students at Leeds City College




The climbing was designed to be versatile and easy to grasp. I took inspiration from this video to turn the player into a "Geodude" (a head with two arms) whilst they are climbing. This maximises their freedom of movement whilst maintaining immersion, and permits climbing on angled surfaces, which would be clunky or impossible with a full-height collision capsule in tow. In the future I plan to add automatic foot/leg posing while climbing to further elevate the experience.

Wolf Commands: GET

The player has four commands at their disposal: GET, DROP, ATTACK and STAY. These commands give them a degree of control over their wolf companion and make the wolf useful in completing gameplay objectives such as finding resources or solving puzzles.

The GET command has the greatest scope and complexity of the four Wolf commands. Different behaviours can be produced by providing certain contexts to the wolf.

In this way, the wolf appears more intelligent and characterful than if there were a higher number of commands with rigidly defined functions. The need for context also heightens the level of interaction between player and wolf. 

< Click a button to see the relevant section of code

Obtain visual on player

Obtain visual on player.PNG

I opted to use Unreal Engine 4's Environmental Query System to allow the wolf to find a position where they can see the player.

The system generates a grid of points around the wolf using the navmesh. The first two tests exclude grid points where the wolf either can't see the player or is too close to them. The PathLength test discards positions which the wolf can't reach and scores the remaining points, favouring ones which are closer to travel to. The fourth test favours points based on the shortest distance to the player. Finally, the last test causes the wolf to slightly favour higher elevations as an imitation of natural behaviour.

Seek item or context

Seek item or context.PNG

The wolf attempts to find a context, which could be: a held item, an item that is being pointed at, or a thrown item.

Try to get item

Try to get item.PNG



The search behaviour allows the player to use the wolf to gather more of any given item type. A spline is used to track the wolf's movements to ensure it doesn't double back or look in the same area twice. An Environmental Query System directs the wolf in its search. The illusion would work best in a cluttered natural environment where the player cannot easily see all the resources around them. As you can see, the wolf presently has no memory of items it has seen, this is a feature I plan to add in the future. Another such is the idea that the wolf may behave differently with certain item types; meat, for example, it could steal and eat.

Retrieval is where the player points at an item and the wolf brings it to them. This behaviour could simply be used for the player's convenience, as the wolf is faster and more agile, not to mention it is easier to take an object from the wolf's mouth than directly from the ground. Alternatively it could be used in puzzles; for example: to get the wolf to yank on a bar attached to a chain.


Let's the player enjoy the timeless game of fetch with their wolf. Not only a fun bonding experience, it could also be useful to return thrown weapons such as spears or boomerangs to the player. A function is used to predict the path of the thrown object to imitate how dogs perceive and chase projectiles through the air.

Player has an item, wolf does not

Player has an item, wolf does not.PNG

Has desired item

Has desired item.PNG
bottom of page