Beyond the Marion
~Programming lead Assistant and Engineer~
Check out our Game!
Summer 2024
Unity 3D
System
Tool
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 created over the course of three 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.
​​​My role on this project was Assistant Programming Lead and Engineer. I assisted the programming lead with things such as taking meeting notes, attending lead meetings, and reviewing pull requests on GitHub for functionality, proper documentation, and adherence to the style guide.
​
The first task I completed for this project was the Interaction System. Since this was a first person game, I decided to use a raycast-based system for this project. I created an interface for each interact-able object to implement. I also created the system on the player that detects the interact-able objects.
The interface I created initially included an Interact method, as well as methods to enable and disable the interaction prompt.
While developing the Goop's generator mini-games, 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.
I created a script on the player object that would detect when there was an interact input using unity's new input system. It would call the Interact and Cancel Interact methods 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, and called the method to enable and disable the interact prompt based on a raycast from the player.
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 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 left) 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 (shown below) 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.
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.