My Role - Gameplay Programmer
My Role - Gameplay Programmer
Genre - first-person Investigative
Engine - Unreal Engine 5
Platform - PC (Itch.io)
Team size - ~10 people
Duration - 7 months
An investigative noir-themed first-person game set in Turin.
Project made during my third and last year at Event Horizon School, in this project i experienced for the first time collaborating with another porgrammer during the development.
These are the key contribution i made to the project:
Generic Browsable Book - Helped design and implement a browsable animated book from scratch, since bending interactable widgets were not supported natively by the Engine.
Notebook - Implemented a specialization of the Generic Browsable Book where the player can take notes and store pictures taken with the Photocamera.
Screenshot System - Implemented a Photocamera given to the player as a tool to take pictures of the scenes and save them in an album.
Interaction and Inspection System - Developed the System behind Interactable objects and Inspectable objects.
Case System - Helped implementing the system that handles the progression of the player trhough the game solving cases and riddles.
This is the main feature of the game, it all started with the idea of making a videogame set inside a Comic book; unfortunately, Unreal Engine does not support natively 3D interactable widgets that can bend like the page of a book, thus we had to make our own, and so we did.
This features as been made as generic as possible and the book's content is defined inside a Data Asset called "FlexibleBookContent",
here we can specify widgets to display and provide other informations regarding Interactions that should happen on a specific page collected inside other Data Assets.
The Book actor does not work alone to achieve its objective because the widgets are only projected onto its pages thgrough their material. The Actor that actually takes care of displaying the widgets is called Widget Displayer. This Actor is connected directly to the Book actor and exchanges informations with it.
Here's a little diagram that explains how a mouse input on the Book is translated into a mouse input on the Widget Displayer (drawio).
This feature consists in an Actor provided to the player to take pictures of anything they may find useful to the case.
Here I took care of everything regarding its implementation, In-Engine and also on the C++ side, where I made a useful function library called CaseImageUtils full of useful functions when it comes to taking in-game screenshots and saving them as png files on disk in specific folders and also retrieving them from said folders.
Here's a look at the .h file of the function library I made.
I'm quite proud of the product we've been able to deliver and here, for the first time, I've found myself working on things that we had to make from scratch, only relying on our own capabilities since no other reference or example could be found, as for example the Browsable & Interactable Book.