Over the years I've played many genres of video games, everything from platformers, puzzlers, fantasy, sci-fi, esports, traditional, using VR/AR/Touch screen/Gamepad.

Hearing about the success of Alexa with a surge in demand for 'pick your own adventure' story experiences, I was interested to try developing a game for this exciting new platform with new ideas and innovations to take the story telling experience to the next level.

I wanted to meld my influences from open world games where you can explore and collect the rich in-game lore of items for hours on end, to single player games with short exotic and bizarre settings where your character is essentially a mute character and you project yourself onto them as if you are that individual.

What it does

Blank slate is a voice based adventure/survival/detective/story-telling game with visual aids. Use voice commands you dictate the actions of a mysterious character suffering from mental trauma lost on a large dilapidated farm.

Ensure your survival by tending to your basic needs of food, water, shelter and rest. Familiarise yourself with this new environment and gather information and clues to reveal information on this unknown world, and the mystery of your absent memories.

Explore beyond the horizon and search for civilisation, answers, and power. Rebuild your lost memories and forge new ones.

  • Player based survival needs (thirst, hunger, sleep, stamina, temperature)
  • Damage mechanics (kick, punch, throw)
  • Inventory (collect and store items)
  • Navigation (explore different areas, traverse terrain)
  • Scripted events (opening scene)
  • Puzzles
  • Lore
  • Survival mechanics (find shelter, source food and water)

How we built it

The core logic of the game (the voice skill) is built in NodeJS and hosted on AWS as a lambda function. All coding for this core code is done in the browser and tested the game using an echo show 8.

This voice skill connects to several specialised micro-services built using open source technologies and hosted on cloud based servers to enable the advanced functionality the game offer which consists of the following:

  • Voice skill (hosted on Lambda): NodeJS application built using the Alexa api. Uses the twig templating system for building SSML output in the same way a HTML page template would typically generate HTML for a web page. All intent handlers are promise based with an MVC structure simillar to a modern PHP app, and utilizes vue ecosystem files shared between both the voice skill and the web app. Hundreds of intent handlers written as standalone JS files with several abstractions written for helpers that slim down the code needed for common tasks such as establishing device capability and building up multi-modal responses.

  • JAM stack site (Gridsome): This server-less static site is hosted on AWS Amplify and utilises a large Vue ecosystem with layers of abstractions for different concerns of the frontend app, including the data store (Vuex), data store ORM (Vuex ORM), data store ORM service APIs (Vuex ORM Axios), API framework (Axios), CSS framework (Tailwind), and a full 3D VR framework (Aframe). This allows extremely advanced composition of both data and visuals with very minimal code that is not currently possible with vanilla javascript and Alexa tools. In combination with the Alexa javascript library for web apps, information including intents, actions, entities, and contextual information are communicated between the web app and alexa skill. Vue components make up all the visual elements, with some components tailored to intents that display when an intent is triggered, some layout generic, and entire 3D aframe scenes are built as individual components.

  • POD server (PHPods): A loose interpretation of Solid PODs built using Laravel. The purpose of this service is to store all data within a game world environment that is unique to a player. This allows for all unique game session information to be stored on a universal service with a large capacity for what is essentially personal data/user generated content. This solution will eventually allows multiple profiles per user, cross platform integrations, and players more control over their save data in the long run without a massive rewrite to the core application or dependant micro-services in the future. Hosted using a combination of AWS EC2 and Elastic beanstalk for a scalable LEMP environment.

  • Headless CMS (Strapi): A place for all the image and text content for the game to managed. Hosted on Digital ocean - Strapi one click, this data once entered is pulled through to

  • Map server (Game world sat-nav): A bespoke micro-service application hosted on Digital ocean - NodeJS one click NoSQL database hosting (Mongo DB atlas)

Challenges we ran into

  • Data storage between sessions
  • Visual aids
  • Large javascript files

Accomplishments that we're proud of

  • First commercially published voice skill
  • First game app ever published
  • One of the first Alexa 3D apps
  • First app collaboration project

What we learned

  • Alex learned how to create 3D models and create 3D environments
  • Wade learned how to create voice skills and voice first application methodology
  • Wade learned how to use an advanced vue eco system, create map/gps servers, building and deploying a large micro service clustered stack

What's next for Blank Slate

  • Adding more content, free and premium (bigger map, more items, new areas)
  • Adding new motion skill capabilities
  • Porting VR version to Oculus Quest 2 + cross play integration
  • Phone apps (iPhone/Android) + cross play integration
  • New levels

Built With

Share this project: