Dreamscape Hotel Post Mortem


Table of Contents

  1. Overview
    1. Project Breakdown
    2. Skills Used
    3. Level Story
  2. Pre-production
    1. Top-Down Map
    2. Bubble Diagram
    3. Level IPM Chart
    4. Mood Boards
  3. Level Design
    1. Blockmesh
    2. Design Techniques
  4. Gameplay
    1. Mechanics
  5. Playtesting
  6. Post Mortem
    1. What Went Right
    2. What Went Wrong
    3. Conclusion

Overview

Project Breakdown

  • Progressed an original level idea from concept to prototype.
  • Created in Unreal Engine 5.
  • 3 weeks full time (8 hours a day).
  • Focus on capturing the essence of a dream in a level through non linear gameplay.
  • Populated with block mesh assets.
  • Custom level/player mechanics.

Skills Used

  • Designing a level from concept to prototype
  • Creating a level design document
  • Creating a level bubble diagram
  • Creating a top-down level map
  • Creating storyboards for custom mechanics
  • Blockmeshing a level
  • Creating/Adding gameplay to a level
  • Setting Up Level/Gameplay analytics
  • Tested the level and conducted play tests

Level Story

The player wakes up in a strange hotel, and soon comes to find out that they are in a dream. The player must explore the hotel and find a way to wake themselves up. As they explore, they find subliminal messages left behind from other people who have also been trapped in the same dream, as well as various things buried within the player’s subconscious. Through these messages, the player learns that they must confront their internal struggles in order to make it to the roof and jump off of the building, allowing them to finally awaken.


Pre-production

In the pre-production week, I worked on a level design document containing various descriptions, illustrations, and charts for the level. Below are a few of the things I included in the level design document.

Top-Down Map

Bubble Diagram

Level IPM Chart

Mood Boards


Level Design

The following week, I focused on taking my ideas from the level design document and using them to create a blockmesh level.

Blockmesh

For a video of me going through the level after the completed blockmesh, click the button below!

Design Techniques

Leading Lines:

When the player exits the elevator, the path forward is blocked by the baggage carrier, and multiple objects are point in the direction of the subliminal message at the front door.

Denying Affordance:

To communicate that the player cannot go up the stairs ahead, baggage carriers were placed in realistic ways that prove to be an obstacle for the player. This tells the player that they will have to find a different way.

Environmental Storytelling:

The dining room is in disarray, with chairs flipped over and strewn about. It can implied that something happened that caused people to panic in this room. Later in the game, the player can learn that there was a devastating fire in the hotel. In the dining room, a fire is placed in the midst of this hectic scene.

Teaching The Player:

The count sheep mechanic is taught to the player at a certain point in the game by reading a subliminal message. After reading it, a UI prompt appears at the bottom and doesn’t go away until the player counts sheep. Additionally, a sheep texture is placed on walls to indicate that the player should count sheep.

Breadcrumbs:

Throughout the level, the player can notice flickering lights that guide them in the right direction.


Gameplay

Mechanics

Portal Doors/Dream Doors:

Originally called portal doors, I decided to rename them to “dream doors” after a play tester referred to them that way. The dream doors seamlessly teleport the player from one location to another. The teleportation takes into account the players velocity and rotation. It will even smoothly reorient the player if the dream door is sideways or upside down, causing the player to come out of it sideways or upside down. Visually, they will dance around as the player is approaching it and center itself when the player is about to walk through it.

Counting Sheep:

The count sheep mechanic allows the player to change the state of the dream doors to enable or disable them. On input, the nearest dream door to the player will be activated or deactivated. This mechanic is learned after the player follows their initial path of choice, and allows them to explore new areas of the level or disable portals that were previously blocking them from continuing.

Subliminal Messages and Interactable Objects:

Subliminal messages are essentially notes that the player can find throughout the level. These notes will provide narrative and story, while also guiding the player. Subliminal messages are what introduce the “count sheep” mechanic, and upon reading one that talks about it, the player can then use it throughout the level.
With the development of subliminal messages, I also developed an interactive object system. This allows the player to collect and interact with objects in the level in the same way that they can collect a subliminal message. Collecting these interactable objects will check off certain Booleans in the character to be true, which is used in the game for a variety of things. When the player hovers over these interactable objects, a UI prompts them to interact on the bottom of the screen. This can be seen below.

Internal Dialgoue

Internal dialogue is activated by triggers throughout the level. They represent the player’s thoughts and are the primary guidance for the player. In the image above, the player is communicating that they need to find a way to wake up. After saying this, the objective “Wake Up” is added to the top right of the screen. Other objectives throughout the level are also added this way. On top of that, these internal dialogue triggers are used to cause certain level events to occur.

For an in depth breakdown on the code of all of these mechanics, click the button below:


Playtesting

Five unique testers, who know nothing about the level but fit into the target demographic of the level played the game. A form was created and sent to the testers before and after playing to gather their feedback. Their playtests were also monitored by the me, in which I took notes and collected external data. Additionally, I set up various means for the level to collect data internally as well.


Post Mortem

What Went Right

  1. Blockmesh – When blocking out the level with blockmesh assets, I found myself in flow quite often. Not only did I enjoy doing it, but I’m very proud of how the level looks in its blockmesh state. 
  2. Subliminal Messages Mechanic – The subliminal message mechanic turned out pretty well. I had a clear idea in mind for it and ended up putting that idea into fruition. It was also fun to use this mechanic as a way to guide the player in the right direction, trigger level events, and provide story telling for the level.
  3. Gameplay – I was initially worried that the gameplay would be bland or boring, and that player choices  would be too limited. However, I was able to develop the mechanics into a state where the gameplay was enjoyable and fluid– and with the different paths in the level, the player was able to make choices. In the playtesting sessions that I have conducted so far, the playtesters seem to enjoy the gameplay as well.
  4. Dream Setting Choice – I wanted to come up with a level concept that was fairly creative, and I think that the level being within a dream was a good, but risky choice. This is because convincing the player that they are in a dream is the most important part, and if the level is not convincing, it’ll just seem like a regular hotel. Luckily, I had a lot of fun coming up with various ways to reinforce the dream-like ambience for the player, such as transporting them to an infinite sky plane, putting the player character’s childhood bedroom in the level, etc. 
  5. Height of Hotel Fit perfectly within the gameplay box – When I made my top-down map for the level, it included 8 different floors. Since the goal of the blockmesh was to contain gameplay within a restricted space, I had initial worries about the design for the hotel being too tall. However, after laying out each floor, the hotel fit pixel perfectly underneath the gameplay box that was set up to restrict the play area.

What Went Wrong

  1. Redesign of Portal Door Mechanic – My initial design for the portal door mechanic was to have the portal doors function similar to how portals function in the game Portal. Most importantly, I wanted to have the view from one portal displayed on the other portal so that the player can see where they will be travelling to by entering the portal door (or at the very least see that it will be taking them somewhere that would only be possible in a dream). I spent a full day getting this mechanic to work, and it ended up working exactly as I intended– in isolation. When I placed all of the portal doors throughout the level, it made the game’s performance virtually unplayable due to the camera view from the linked portals constantly being updated and rendered. I spent half of a day trying to figure out how to optimize it while keeping the same design, but ultimately decided it would be best to just redesign the portal aesthetically and cut the camera render feature. Luckily, I’m still pretty happy with the new and improved portal doors.
  2. Lighting Caused Lag – With my level being within a hotel and completely in doors (apart from the roof area), there were A LOT of lights within the level. This began to cause performance issues. I spent quite some time optimizing the lighting and luckily it is in a state now where it is not causing performance issues any more. 
  3. Pixelated Shadows – After fixing the performance issues caused by the lighting, I then ran into the issue of having pixelated shadows. I tried many different solutions, even at one point completely disabling dynamic lighting, which fixed it but made the game look considerably worse. I also searched through numerous forums and documentation and did not find anybody having the same issues that I was having. Eventually, after much trial and error, I found that changing the shadow maps from virtual to normal and then building the lighting fixed the issue.
  4. Count Sheep Mechanic – Initially, I wanted the count sheep mechanic to be interactable for the player, or for it to at least have a UI or some kind of effect pop up before enabling/disabling a portal. I worked at this for a while, but ultimately felt like it was okay to simply have it functional with unique sound/audio, rather then spend more time than necessary making it look how I had hoped it would. So unfortunately, the count sheep mechanic doesn’t actually have much to do with “counting sheep” at all, but it is still called that for the sake of the dream setting.
  5. Original Map Layout Difficulties – Compared to the top-down map that I created in Week 1, the actual layout of the level changed quite a bit. For example, I initially had planned to have path 3 have a fire escape to the roof, but scrapped that idea since it would mean having a window large enough for the player to go through or making a mechanic that lets the player crawl through windows. Additionally, I changed where certain rooms were to better fit the level. While not the biggest problem, it did take up some time figuring out the best way to go about reorienting parts of the level, like how the lobby floor would connect to the 2nd floor for path #1. 

Conclusion

Overall, I’m very proud of how the Dreamscape Hotel turned out, and it might even be a project that I continue development on in the future. Difficulties will come with every project, so it is very important to constantly be problem-solving and come up with solutions or work arounds that can turn into some of the things in the level that stand out the most.  From concept to prototype, I had a clear goal in mind for the project and it felt great to be able to accomplish it and get the level in a place that I was proud of. It is also nice to know that people have enjoyed playing it!