Project period: 2018, for roughly 8 weeks.
My role: Gameplay Programmer and PR Lead.
My contribution:
- SaveGame/Progression system
- UI logic & UI relevant animations
- Puzzle elements & system
- Shop system
- Movement: jumping
- InteractableObjects
- Options/Sound & Quality settings
Preface
On this page I'll explain how the following Systems work:
-
SaveGame/Progression system
A progression System that uses savestates and saved data to close of paths and Place the player
back and the Hub/Start room.
-
Puzzle elements & system
The puzzle system itself, A puzzle that resembles the pillar puzzles from Skyrim and a puzzle
element used in the TimeJumpPuzzle.
-
InteractableObjects
A system used to interact with objects and then Trigger its Triggered object.
The Game
IndianaBones is a 2.5D game with the camera positioned in a side view.
The basic idea of the game was to make a puzzle/parkour based adventure game, placed in a
stylized dungeon environment.
The player plays as a skeleton making its way through several rooms with either a puzzle or
parkour challenge.
The only information the player can get in the beginning is that the exit only opens for those
who are well equipped.
After traversing the two pathways of the dungeon, the final gate opens and the player will be
able to leave the dungeon and finish the game.
SaveGame/Progression
The progression in the game is semi linear.
The way I did this is by allowing the player to choose a path and then forcing the door closed
after they enter one of these paths.
This is to stop the player from backtracking.
If the player dies they will load the last saved state of the game, which if they just started
is the beginning of the game.
If the player reaches the end of one of the paths they will recieve a quest item, which is saved
as a boolean in a array of booleans.
After the player takes the quest item, a door at the other end of the room opens.
When entering through the door a Save Trigger occurs.
This will use static variables representing the Players values like hp and coins that get
updated when changed during the game.
These are used to fill the rest of the save template and that will save the template in binary.
The scene will be reloaded with the new savedata and because of a lack of player coordinates
they will be placed in the start room.
When the SaveTrigger class loads and cannot confirm a filled save file, it will make a private
new instance of the save template to be filled at a save trigger.
When the SaveTrigger class loads and can confirm a filled save file, it will make its template
the same as the current save file.
Then it will adjusts an array used to save quest items, setting the already collected items to
true.
When a Doors class loads it checks if its part of a path (Only the doors that enter into
pathways are classified as this).
If so the class checks for a filled save file.
If this is also found it will check if its paths quest item has been picked up and close itself
when this is true.
Besides checking if the player went down a certain path already, the quest items also gets used
to check if the game is complete.
If so the gate placed underneath the starting room will open and if passed will trigger the
EndGame.
PuzzleElements & system
The puzzle system works using the PuzzleManager. All puzzle elements in the game need to go through the PuzzleManager to trigger functionality in their puzzles. this is using variables referencing their puzzle and which part they are. The PuzzleManager uses this information to pick the right puzzle out of a list and trigger the Puzzle Trigger function in the puzzle class. This takes the information and uses it to perform the appropriate action.
I personally made one of the puzzles and a puzzle element for the parkour path.
The puzzle I made was a Skyrim style Turn-Stone Puzzle.
This puzzle works by turning pillars with markings on each side.
with the correct combination, the player can pull a lever.
The correct combination is hinted at through the entire path shown on gravestones placed in some
rooms.
If the player give the wrong input, spikes will pop up from the floor and kill them.
When the player give the correct input, the door will open and allows them to proceed.
In the game itself this puzzle is placed at the end a path to give enough space for placing the
gravestones.
The puzzle element I made was a wooden beam used as a platforming challenge or just as floor to
stand on.
The beam has four states: Instant, Gradual, AfterTime and StayInPlace.
- Instant: Instantly retracts after being fully extended.
- Gradual: Gradual slows the animation making it take longer for the beam to retract.
- AfterTime: Instantly retracts after a certain amount of time passed.
- StayInPlace: The beam starts in the scene extended and stays like that till the end of the game.
The "Puzzle" I made with this, was the first parkour challenge you find with this mechanic. This extends several beams as a jumping stairway, which after some time would retract in again. This puzzle was triggered by a button next to a pit of spikes.
Interactable Objects
The Interactable Objects system works by using interactable objects and triggered Objects.
Interactable objects are all the Objects The player can interact with like buttons and levers.
Triggered objects are objects that react to the input of an interactable object like a door.
When a interactable object gets an input it will trigger its trigger objects and make the player
interact appropriately (kicks the chest or pushes a button).
When a triggered object is triggered, it will trigger its Trigger Functionality.
Some objects are both an interactable object and a triggered object, which both takes the
players input and react to it.
An example of this is a chest which the player kicks open shooting out its contents.