top of page

JACOB HJORTH​​​​​  PROJECTS  ABOUT       [Gameplay programmer]  

STELLAR, 2024


Role [Gameplay programmer]
Software [Unreal Engine, Logic Pro]
Framework [Blueprint, C++]
Duration [10 weeks]
Date [Spring 2024]
Team size [8]
Type [PC video game]

​​​

 

 

OVERVIEW

Stellar is a puzzle and adventure game where players take on the role of Stella, a fallen star on a journey to find her way back to the sky. The story begins with Stella plummeting from the heavens and landing on Earth, setting the player on a mission to help her return home.


I developed this project as part of my studies at Stockholm University over a 10-week period with a team of eight students. It was also my introduction to Unreal Engine and the Blueprint system, where I expanded my understanding of how Blueprints and C++ work together. My primary role was gameplay programming, though the condensed timeline and broad scope meant team members frequently worked outside their designated areas, which gave me experience across multiple disciplines. Despite that, we maintained consistent design patterns throughout to keep integration smooth and the codebase cohesive.

GRAB & DROP

​​

 

 

DEVELOPMENT

I took primary responsibility for the puzzles and UI. Below I go through each system, the goals I set for it, and the reasoning behind the decisions I made.

​​​​​

​​

I designed and developed a grab and drop mechanic that allows players to pick up objects and place them on pressure plates to trigger in-game events. The interaction needed to feel immediate, placement needed to be forgiving enough to not frustrate players, and the whole thing needed to work intuitively without explanation.


The system is built around overlap events triggered by box collisions and an interaction interface. When a player picks up an object it attaches directly to the player actor, giving immediate tactile feedback. On drop, the mechanic performs a downward line trace to detect the ground position. To handle placement on pressure plates specifically, I added an invisible trigger zone around each plate. If the line trace intersects that zone, the object snaps to the plate's centre rather than wherever the trace lands. This reduces placement error significantly and makes the interaction feel precise without requiring pixel-perfect positioning from the player.​

​​

 

PUSH & RELEASE

 

I designed and developed a push and release mechanic that allows players to interact with and move obstacles in the environment. The interaction needed to feel like the player was actually pushing something rather than teleporting it. To give some weight to the mechanic I synced the push speed with the animation.


Like the grab and drop system, this is built around overlap events and box collision using the same interaction interface. When the player engages with an object it attaches directly to the player actor, matching the grab and drop approach for consistency. I deliberately avoided line tracing here since the nature of pushing obstacles doesn't require the same precision as placing objects on pressure plates. The result is a fluid interaction that integrates naturally with the grab and drop system without adding unnecessary complexity.

COLLISION HANDLING PROBLEM


A significant problem came up during development around collision for held objects. When an actor with its own collision component is attached to another actor that also has a collision component, Unreal Engine disables the attached actor's collision as an internal optimisation. I wasn't aware of this initially, and it caused held objects to phase through geometry.


Two solutions presented themselves. The first was to work with the 3D artist to create multiple player mesh variants, each with a different pickup object baked in. The second was to implement a sphere trace in the player's forward direction that detects potential collisions and pauses movement when an obstacle is found. Given the time constraints and the cost of asking the modelling team to produce additional assets, I went with the sphere trace. It is less precise than a proper collision capsule, but it solved the problem effectively within the project's constraints.

 

PUZZLES

I was responsible for designing and developing all the puzzles in the game, with occasional help from a fellow team member. The three goals I set for the puzzle system were modularity, data efficiency, and challenge balanced with engagement.


MODULARITY
I designed each puzzle actor with a modular structure so that components could be reused and reconfigured across different scenarios without duplication. A pressure plate built for one puzzle works in any other puzzle that needs one. A lever is a lever regardless of what it connects to. This meant that as the puzzles grew in complexity I was combining and adjusting existing pieces rather than rebuilding from scratch each time. It also made iteration fast and changing a puzzle's layout or difficulty didn't require touching the underlying systems.

​​

PRESSURE PLATE ACTIVATION

 

In the first puzzle, players are tasked with picking up crystals and placing them on pressure plates scattered throughout the environment. The objective is to activate all the plates, which collectively trigger an event-typically the opening of a door that allows the player to progress further in their adventure. To increase the complexity of the puzzle, a lever is also introduced that can fasten a bridge, adding an additional layer of challenge.

This puzzle not only teaches players the core mechanics of object interaction and pressure plate activation but also encourages them to strategize their actions with the lever, setting the stage for more intricate challenges ahead.

​​

LEVER & LIGHT/STATUE ALIGNMENT

 

In the second puzzle, players must use a lever to move statues positioned on a board, aligning each one into its correct place. I found a way to incorporate a mechanic developed by a fellow student: a light that can be transferred between the player and the puzzle. When the player adds the light to a specific row on the board, only the statue in that row can be moved.

Once all statues are accurately positioned, an event is triggered-opening a door that allows the player to continue their journey. This puzzle enhances the gameplay experience by introducing spatial reasoning and lever mechanics while also utilizing the light mechanic to add a layer of strategic complexity. This approach builds on the core interaction skills developed in the previous puzzle and encourages players to think critically about their actions.​

​​

MOUNT & PRESSURE PLATE

 

In the third puzzle, players use the pressure plate mechanic introduced earlier, now with added complexity. Instead of simply dropping an object, they must guide their mount to the pressure plate to activate it. This puzzle encourages critical thinking and strategic planning as players explore the relationship between their actions and the mount's positioning to navigate across gaps.

​​

BRIDGE ACTIVATION SEQUENCE

 

In the fourth puzzle, players utilize the same grab-and-drop mechanic introduced in the first puzzle, but with added complexity. Each pressure plate can activate one or more bridges, requiring players to determine the correct sequence to activate these plates in order to cross all the bridges successfully. This design challenges players to think critically about their actions and the relationships between the pressure plates and bridges, emphasizing problem-solving skills and strategic planning as they navigate their way across the gaps.

UI: INPUT DETECTION (LOWER LEFT CORNER)

 

I designed and developed the game’s UI HUD to be highly modular, allowing frequent use of SetText efficiently. Additionally, I implemented a system to detect whether input is from a controller or keyboard/mouse.

bottom of page