VR Game Designer & Programmer – Unreal Engine 4
Steam Store Link
Chiaro and the Elixir of Life is a VR open world puzzle adventure game where the player interacts with the environment with fun and innovative tools.
For Chiaro, I had to work on an interactive rowboat system that the player can use to get around to different locations in one of the larger outside levels in the game. With the rowboat, the player can sit on the ground in their VR space (or on a chair) and use the motion controllers to mimic real rowing motions to accurately row the in-game boat throughout the level.
When I started working on the rowboat, there was a lot of simulator sickness for the player based on the boat’s movement and rotation and so I went through a lot of different design choices to come up with the best solution. I made sure all of the movement with the boat had no acceleration as that is a very common source of motion sickness in VR, and then used vector math to get the motion controller rotation in relation to the boats handles to know whether the player was moving forward/backward and left/right.
For the simulator sickness, I also went in and implemented a slight vignette fade on the main camera for the player so when the boat is moving quickly, the peripheral vision will sense movement as well. This new system reduced simulator sickness almost entirely and the vignette is barely noticeable to the player.
I ran regular in person playtests to get player feedback to implement new fixes for the rowboat mechanics, which ended up making the rowboat feel extremely satisfying for the player. We enlarged the level by double it’s size so that the player can have more time in the rowboat.
VR Interaction Objects System
Another major piece of the Chiaro gameplay is interacting with various objects from doors, drawers and books that all can be opened, picked up, and interacted in unique specific ways. I was tasked with creating a base level interaction object system that would make it extremely simple to create new interaction objects and would hold all the functionality.
I split up the interaction object system into three categories: Pickup-able objects, linear interaction objects and rotation interaction objects.
It is simple to connect multiple interaction objects together to make one system of interconnected actions for the player to preform. In Chiaro and the Elixir of Life there is one door that has the player pull a panel out (linear interaction object), rotate the panel (rotation interaction), then push the panel back in to lock the new rotation in place. This door contained multiple interaction objects that worked together in tandem to instantly add satisfying functionality to the game.
The pickup-able objects refers to everything from potted plants and books to crucial key items that are required to complete the level. These objects for the most part acted very simple with the player being able to grab onto them with either hand to hold and also having a mass value for acting realistically when being thrown.
The key items had the functionality where if the player were to throw them far enough away from them, the item would spawn back to a set location, which for the most part was their initial spawn location. This prevents players from accidentally throwing away important items.
Linear Interaction Objects
The linear interaction objects refer to simple interactions such as a rope to pull straight down, a drawer door or a button type object. Linear interaction objects could be pulled on any axis and were the easiest to implement, as the developer just had to enter in a few values to create the intended functionality.
Every linear interaction object had the functionality that would let the drawer slam shut if the player let go while moving the drawer. I got the velocity speed of the drawer and would apply slight friction to make the drawers and other objects interact in a very realistic and satisfying way.
Rotation Interaction Objects
The rotation interaction objects make up every object that can be rotated along any axis and also refer to wheel objects that have to be rotated past 360 degrees. Rotation interaction objects were the most common and so had the most comprehensive functionality.
Doors and levers are extremely simple to create, and there is the functionality for each to snap back to their initial rotation in the case of a door becoming locked or a level resetting to it’s starting position.
The wheel interaction objects lets the developer set a min and max value above or below 360 degrees on any axis meaning the player can crank the wheel however long they want before it activates.
VR Fishing Rod
One tool that I created for the game was a fishing rod that the players can equip, cast and reel in to get a fish. This ended up being a fun little mini-game that gives the player a break from the direct story through interactive mechanics.
The player equips the fishing rod like any other tool and then by releasing the trigger will cast out a line. I used multiple different Unreal Engine components on the tool to visually create the line and act of casting have a lot of player feedback. After casting the player must wait to see a fish bite. We made multiple different types of fish, and with controller vibration and visual cues the player will know they need to start reeling.
Similar to the rowboat, I used vector math to accurately determine the distance between the motion controller and the fishing rod’s wheel (which I used my rotation interaction object to create). This makes the reeling feel extremely realistic which was the first priority for this mechanic.
More media to come after game’s release…