I love escape rooms! If you haven't played one, you need to, period. They are fun, intellectually challenging and frustrating all at the same time. I have created physical escape rooms, but wanted to try my hand in the digital world. Until now, a voice-only room was the only option with Alexa - but enter APL! Now you could see some of the objects in the room too - l'm in, let's do this!

What it does

Escape Rooms is a voice-forward, visually immersive virtual escape room skill for Alexa-powered devices. Although designed to work on any Alexa voice-forward device, it is designed to really shine on Alexa devices with screens such as FireTV and Echo Shows. Players enter the lobby and can then select from multiple escape rooms to match their wits against the nefarious masterminds who have trapped them there. By making observations, solving puzzles and following clues, anyone can try to escape the terrible fate in store behind each room's door. You bring your wits with you into the room and must use the objects inside to find the path to escape. Although there is no "phone a friend" to help you, you can ask Alexa for hints along the way. She's cool like that, she wants you to get out, but she isn't going to just point to the exit - she wants you to work it out, with a few friendly suggestions!

How I built it

Escape Rooms is built using the new Alexa Presentation Language (APL) visualization language to bring the descriptions of the room, its contents, and puzzles to life. I have used a variety of touch events to supplement the voice-forward interaction approach to create a more immersive and natural interface for devices with screens. The back-end is node.js lambda functions and json APL documents. The lobby is the starting point and is designed to allow me to add an unlimited number of room challenges for players using APL Sequences and Pagers to add repeating elements like doors to various game rooms and inventories of items collected inside rooms.

Challenges I ran into

For someone used to HTML, jquery and javascript, APL "felt" familiar. However, like any new language or syntax, it was hard to get all the concepts into my head. I often found myself incorrectly nesting elements and staring at CloudWatch logs in total frustration until figuring out which hierarchy I had messed up. APL's authoring tools only get you so far right now, and although it is relatively easy to right "correct" json files, they may not inflate in the way you think! In the end, however, the visual and interactive result is worth it!

Accomplishments that I'm proud of

I am proud of reusable elements of the game. Figuring out how to design a lobby and multiple game rooms was tricky. Trickier still was structuring the interactions inside a room to be templates as well, so that each room doesn't have to be coded uniquely, but instead sits on top of a dataset of room d├ęcor, objects and game stages.

What I learned

I learned a whole bunch about APL, first and foremost. I also had to flip my thinking and start with the voice elements of the game before the visuals were locked. It was too easy to "fall" into old html-type habits only to find out that clicking and dragging assumptions do not always hold up well in a voice-forward interface.

What's next for Escape Rooms

I am working hard to make more rooms. I feel like it has taken a long time to get the foundation and framing for the game in place, but now I can reuse the many elements and approaches as templates for more rooms. I also want to deepen the rooms to become a series of rooms within each game experience. Imagine then that you have been trapped in a multi-room mansion and have to escape from several contiguous rooms to get out of the overall house! There are also opportunities for in-skill-purchasing sales of hint packs, premium pay-per-play rooms, and multi-player head-to-head "escape races/contests". I also imagine linking the virtual game experience with directories of real-life physical escape rooms near your home that you could learn about and even book using your voice. Then you can have Alexa order up an Uber and...(you get the picture!).

Built With

Share this project: