top of page

Role

Gameplay Programmer / Project Manager

Description

Queries Unlimited is an online multiplayer co-op horror game about investigating a procedurally generated haunted mansion and, with the help of your friends and some tools, banishing the ghost that resides within it. The game uses the Client/Server (Listen Server) model in Unreal Engine.

As a Gameplay Programmer, with the help of the Steam SDK, I implemented core gameplay mechanics in C++ that enhance player immersion and interaction. I implemented a proximity-based voice chat system and developed a fully replicated Phone mechanic enabling global communication among players. Additionally, I created a unique Magnifying Glass feature, allowing only the owning player to reveal hidden elements like footsteps and ghost trails, visible only through this specialized view. All mechanics were seamlessly integrated into the game using Unreal Engine’s C++ API and finalized with Blueprint scripting.

As the Project Manager, I managed and guided an 18-member multi-disciplinary team, ensuring seamless collaboration across various fields.

Year

August 2024 - Present

Language

C++ and Blueprints

Platform

Windows PC

Team Size

19+ People

Engine

Unreal Engine 5

Latest WIP Showcase

Code Snippets

GithubIcon.png

Magnifying Glass
 

The Magnifying Glass mechanic is designed to be a mechanic that allows the user, and only the user, to see any actor derived from my HiddenActor C++ class. 

 

An example of a HiddenActor subclass the glass can see is a Blueprint actor I spawn through player's locomotive animation montages. This actor contains a footprint decal that changes color depending on the player that owns it. 

 

When the player presses the UseItem input, the client-side UseItem() function gets called on that player's machine. This function then calls another client-side function that draws a sphere trace in front of the player's camera and reveals any actors hit by the sphere that inherit from HiddenActor. After this, the UseItem() function calls a server RPC function Server_UseItem() that executes server side logic such as playing the "Held Up" animation on all clients. When the player releases the UseItem input, a bound function for the OnEndUseItem delegate gets called that hides all HiddenActor entities client side, and plays the "Put Down" animation through a server rpc for all clients.

While developing this mechanic I ran into several challenges, the most prominent being how to correctly and efficiently separate client side logic from server side logic. Specifically, since the hosting client is considered the server in the Listen Server model, any logic done on replicated actors through the hosting client are replicated down to all clients. This raised an issue where any HiddenActor revealed by the host would show on all client's screens. To fix this I instead created a footprint actor component within the character class that is responsible for spawning footprints for each client individually and an Animation Notify to tell that component which foot decal to spawn and when. I stopped replicating the footprint actor so that each client has their own unique instances of footprint actors and it fixed the issue completely.

Phone
 

The Phone is a type of actor that is owned by an individual Player Character. The server spawns each Player Character a Phone and assigns them as the owner of their own Phone.

Currently the phone has two features. A calling feature that allows 2 players to call one another globally and a GPS feature that shows a live render of the layout of the mansion and the player's location in the mansion.

Boombox
 

The Boombox is an item that can be picked up by any player. Once picked up, the player may use the boombox to play music through the speakers. Each CD does something different depending on the CD's genre. As of right now there are only 2 genres: Heavy Metal and Lofi.

 

A Heavy Metal CD will play a Heavy Metal song through the Boombox and if the Ghost is not haunting currently, it will speed up it's haunting timer to force it to go into Haunting phase quicker. If the ghost is already in the Haunting phase, it forces the ghost to target the player who used the boombox no matter what, and it gives the user unlimited stamina for a set amount of time.

A Lofi CD will play a Lofi, calming, song through the boombox. The gameplay effect of this genre is still in the works but we plan to use it as an Area of Effect buff to the user and other nearby players.

Once a song is played, the Boombox is set to "rewind" and can't be used until the rewinding is finished, preventing players from mass playing songs with no consequences.

bottom of page