In Reboot you play as a robot in an abandoned factory. To get out of the factory you will have to solve different puzzles, however, these puzzles demand more then you are capable of. To tackle these puzzles, you need to find spare parts in the factory to enhance your own abilities.
The core mechanic in Reboot was the ability to swap parts on the character to complete puzzles that required certain parts. Since the player character Blueprint kept track of what attachment was active, the Attachment Blueprint Event Graph was pretty bare-boned.
Instead of making several different Attachment Blueprints I decided to make one Blueprint with an enum to dictate what type of attachment it would be. This was then done in the Construction Script.
To make it easier to swap attachments I implemented a check to see if the player already had an attachment and just detached that before attaching the new one.
In Reboot we created two different attachments: the “Strong-arm”, which allows the player to perform feats of strength, and the “Screw-arm” which allows the player to rotate certain objects from different points in the world.
The Strong-arm attachment enhances the character’s strength which allows it to lift crates and pull levers. The crates were designed to be a tool for physical puzzles, like: pressure plates that need to be held down or as a blocker the player needed the Strong-arm to get past.
The levers were designed to be connected to another Blueprint called “Flip Puzzle”. These Flip puzzles could be flipped to serve as bridges or ramps to allow the player vertical traversal.
Flip puzzle Blueprint:
I made sure there was different sizes of the Flip puzzle for the purpose of different kinds of puzzles. Much like the Attachments I made an enum with different sizes and swapped the meshes in the Construction Script.
Flip puzzle Construction Scrpit:
The crates could also be used as blockers for the Flip puzzle. To avoid the players having trouble placing the crates at the right spot in the Flip puzzles, I created a system where the Flip puzzle has predetermined slots where boxes can be placed.
To visualize where the crate would be placed, I made a “Shadow crate” in the crate Blueprint which would show where the crate would snap to when placed in the Flip puzzle.
With the Screw-arm, players can rotate objects to solve different kids of puzzles. To do this they need to have the arm equipped and interact with a Screw puzzle station. These stations each have a Screw puzzle Blueprint connected to them.
There are two kinds of Spin puzzles, one that spins around the Y-axis (the one seen above) and one that spins around the Z-axis (see below). They are swapped between using an enum just like the Attachments in the Construction Script, the way the rotate also utilizes this enum to see what way it is supposed to rotate.
Spin puzzle controller:
Spin puzzle Blueprint:
Spin puzzle Construction Script:
Several objects in the world could be interacted with. To show this they got a highlight when the player moved close to them. I decided to create interfaces for this so that the player character blueprint could call the Interact and Highlight functions in the objects with the interfraces.
Interact from Character Blueprint:
Highlight from Character Blueprint:
Move to interaction point
When interacting with an interactable object, like a crate or lever, the player character moves to a point where the interation is going to take place in order to play their animations.
This was done by creating a custom event in the player blueprint that would call an Event Dispatcher upon reaching the desired point. The script loops through all the different Interaction Locations to decide which one is the shortest distance away from the player.
When the closest location has been determined the player character no longer recieves input from the controller in order to move to the choosen Interaction Location. Since only AI components can use a more advanced "Move to Location" function I created a delay to determine when player character has reached it's destination. Since a Nav Mesh was used to allow the script to work I estimated the path the character had to take to get to the desired location would be a very rough circle in order to calculate the time it would take the character to reach the desired position.