Beyond the Marion

Programming Lead Assistant and Engineer

game engine logo 20 Summer '24 Gameplay
Play on Steam! Play on Itch! See Production Blog!

Key Contributions

Game Summary

I worked for Placebo Entertainment, an indie game studio of around twenty passionate students who wanted to create a game over their summer. Beyond the Marion was developed over the course of 3 months and has been published to Steam and Itch in Fall 2024. In the game, the player is a crew member ​aboard a space ship, in which they have to avoid numerous catastrophes by interacting with NPCs onboard and completing mini games.

Interaction System

The first task I completed for this project was the Interaction System. I noticed each functional team had made their own system for interacting with the world. This meant the player needed multiple scripts on them to interact with NPCs or the minigames.

Noticing this issue, I began developing a better, more inclusive, system. This was a first person game, so I decided to use a raycast to detect interact-able objects in front of the player rather than triggers. I created an interface for each interact-able object to implement, allowing any pre-existing object to become interact-able by implementing the interface. I also wrote a script on the player that handles the raycast and interact-able object detection.

The interface I created initially included an Interact method, as well as methods to enable and disable the interaction prompt.

However, while a teammate was building another mini-game, a method for when the player canceled the interact input was needed. In order to have minimal changes to the scripts that already implemented this interface, I added a method with a default implementation to the interface, so only the scripts that needed this method had to implement it.

IInteractable scrript
Interact script for the player

The script on the player detected when there was an interact input using Unity's new input system. It would call the Tnteract and Cancel Interact omethods on the interact-able object currently being detected by the coroutine shown to the left.

This coroutine detected when an interact-able object was in range, stored that object in a reference of type IInteractable to minimize casting, and called the method to enable and disable the interact prompt based on the player’s raycast. This system was used for every interactable object in the game.

Angel Mini-Game

Below is a clip of what the final version of the Angel mini-game looks like, which is another major task I had during this project. In the video, you can see the Interact functionality and UI prompts being used.

This mini-game is a series of smaller challenges like pulling levers, turning dials, and clicking buttons in a specific order depicted on a screen. There are four rounds, and a lot of common functionality. Because of this I decided to create a class hierarchy system for each station’s and screen’s behaviors as well as a mini-game manager to coordinate the two.

The parent class for the screen (shown to the right) had functionality to receive the random order from the mini-game manager, set the screen with the correct combination, and to reset the screen.

The parent class for the stations had functionality to check if the player had input the correct combination, reset the interact-able elements to their default position, and make the station itself interact-able.

IInteractable scrript

Other Tasks

As an engineer on this project, I had a few tasks that were mentioned above, but most of my time was spent on bug fixes and alterations to existing code. One of these tasks was cleaning up the event system that one of my peers had set up. The system was created for NPCs to trigger and listen to different events, but I was assigned to expand the functionality to be used for more than just the NPCs.

My Role

As Assistant Programming Lead, I assisted the Programming Lead with things such as taking meeting notes and attending lead meetings. I also reviewed pull requests on GitHub for functionality, proper documentation, and adherence to the style guide. Since this project was developed in our free time during the summer, people took time off, so I had this role to help fill in any gaps in communication.

Highlighted Projects

See All Projects!

Let's Create Together!