Ornament Express - VR Escape Room

Role:
-
 General Programmer

Software:
- Unreal Engine
- Blender

Languages:
-
 C++
- Blueprints

Tech: 
- VR Gameplay systems
- Functional Concepts
- Steam achievements
- Unreal Engine performance Diagnostics

Summary

This Project was made during my entire third year at Breda University together with a team of 20. The assignment was to make a VR Escape room using Cell Shading and a train.

During the game the player plays as a detective who snuck on board a thief's train filled with stolen artifacts and curiosities. 

I primarily worked on Gameplay features, Shifting my focus to other aspects of the game when necessary to reduce the strain on the team. Including learning how to model in blender.

Contributions

  • Creating interactive objects to populate the scene
  • Turning design concepts into functional prototypes or finished products

  • Learning how to create simple models in blender

  • Connecting achievements to in game activities

  • Performing player testing to find and solve bugs and performance issue

      Prototyping

      Interactive Objects

      During the concepting phase of this project I was placed in a small strike team with the task of proving that a room populated with small interactive objects will be fun in VR.

      To prove this theory, during an one week sprint, I created two small interactive object prototypes per day. I placed those objects in a room and allowed team members and students to play with the objects freely and noted down the players overal reactions and their prefered objects.

      The playtests where overwelmingly positive with players enjoying the majority of objects. through this test, the team decided to turn having an interactive environment into one of our main game pillars. Many of these prototypes were iterated upon and added to the final game. for example:
      - Wearable hats
      - Working matchbox
      - Smoking pipe that can be lit and worn
      - A throwable paper airplane

      I polished these items further by improving the physics of the paper airplane and the matchbox, and by making more interactions between the items allowing players to set other objects besides the smoking pipe aflame. 

          Player controls

          At the start of the Prototyping phase, I made a simple UI to change the players movement settings to let developers choose their prefered movement modes and reduce nausea. This also doubled as a test to see if placing the settings on the back of the players hand is comfortable. Eventually, once we got more settings, they were moved to the main menu as physical objects.

          Magnifying glass

          At the start of the project the team was scared that the player would not be able to solve the puzzle if the level is filled with interactive objects. To solve this issue I proposed to have the magnifying glass highlight puzzle related objects if the player looks through it, as a hint for solving the puzzles.

          I created a prototype version of a shader that turns visible only when looked at through a certain object, which I set to be the glass of the magnifying glass. Allowing the player to see billboards shaped like stars whenever they held the magnifying glass close enough to their eye.

          This feature was eventually not implemented because our level was small and clear enough for players to find the solution to the puzzles without needing it. 

          No file set yet. Edit this block to upload a file.


              No file set yet. Edit this block to upload a file.

              Turning Concepts into Funcionals

              Custom Breakable Object Plugin

              During the prototyping phase, the designers where making concepts for puzzles involving breaking objects to find puzzle keys inside the object. But the designers where not sure if their concept was feasible in performance for the VR headset. So I set out to make a functional prototype to showcase the performance.

              started with the Unreal Engine's build in Chaos module that allows to simulate breaking of objects. The system worked perfectly to break random objects but once they became breakable, they were no longer moveable. I did some more thorough research into the module's documentation and found out that the module only works with static objects. This made the module incompatible with the concept of throwing the objects.

              I designed a custom breaking system for objects that allows them to still be moveable, but implementing it would make me go over the story points assigned to this task. I checked with my lead to debate if it was important enough to finish this sprint and they agreed it was important if I could finish it with a certain timeframe.

              After succesfully implementing the breakable feature, I did a performance test where I broke a lot of objects and was pleased with the results. I added some exposed variables that allow for more optimization down the line and I documented the process of making a break able object so other developers have an easier time creating them.

              Puzzle Concepting

              One of the first puzzle designs was placing elephants into order of size which would open a compartment. Instead of recreating the functionality of the puzzle, I took an item locking feature and a snapping system from two other programmer and combined them to create the first iteration of the puzzle, saving time in our already short development cycle.

              For the second level there was a puzzle concept for players to find and place three projector discs in the correct order in a projector. The projector would project an image into the wall that became clearer with every correct disc. I Reused the same puzzle mechanic as before but while the projector checks the positions of the puzzle pieces whenever the puzzle changes.

              Challenge of not having Artists

              Learning Blender

              This project started with a low amount of Visual Artists, and due to their personal reasons we were left with no artists by the halfway point of the project. Luckily we had enough assets to populate the first level, but we had to make a tough decision to remove the second level because it is better to have a fully polished game with less content.

              To help the team I decided to learn the basics of blender so I could create simple models we were lacking. This was a fun new learning opportunity. I had some trouble getting the seams and UV mapping right but after asking some pointers from a team member, I was able to get the wrapping to work with our custom Cell Shading system.

                  No Artists

                  Because we had no artists, I reduced the need for animations by moving components to mimic objects being animated. a great example of this is a singing fish whose mouth I move based on the current pitch of the audio file. another great example is a large plant that eats objects in the scene. the mouth opening, closing and eating all are made using timelines

                  No file set yet. Edit this block to upload a file.


                      No file set yet. Edit this block to upload a file.

                      Polish

                      Achievement

                      Using the Steam plugin we were able to very easily add achievements to the game. The team got together to brainstorm funny ideas and some ideas I came up with and implemented are:
                      - Bouncing the bouncy ball twice and have it land on the scales
                      - Break all the breakable objects
                      - Feed everything in the level to the plant

                      Playtesting & bugfixing

                      At the end of every sprint the team got together for a playtest where we had someone new play through the game. Every playtest I took notes on any bugs that could be fixed or feature that could be added to improve the gameplay.

                      Bugs I fixed due to playtests:
                      - Smoothing player teleportation for reduced nausea
                      - Fixing wrongly alligned snapping points for objects and incorrect hand positions
                      - Making static objects interactive

                      Improvements I made due to playtests:
                      - Allowing players to drop items on the scale instead of having to place them
                      - Allowing the players to hit the musical turtle shell with their hands
                      - Adding googly eyes to the game (googly eyes make everything better)