Prisma Odyssey

Creative Embedded Systems Module 2

Prisma Odyssey is an Experimental Art Exploration Game Designed for 16-inch Macbook and Joystick (also supports WASD+SPACE controls and other sized screens) using Pygame

Gameplay of Prisma Odyssey

Artistic Vision

The assignment given was to create an interactive device that runs off wired power and sends data back to a machine for media generation. It was required to connect components to an ESP32 and create an enclosure for the device. From a software perspective, an ESP32 program that collects and sends sensor data using a serial connection and a media generation program was required.

This work was largely inspired by The Catacombs of Solaris which I learned about from visiting ACMI in 2023. I wanted to create a 3D game and was inspired by the illusion inducing, hynotic, and trippy nature of The Catacombs of Solaris. I was also inspired by my own art peices that featured triangles of various shapes and monochromatic shades.

My Artwork from 2020

I initially wanted to create a 3D space of triangular prisms that could be explored and climbed on. When researching how to create a 3D game with pygame, I found a stackoverflow post that demoed a 3D sky of stars. I iterated from here, transforming the stars into triangles of randoms shapes, shades and sizes and was struck by the kalidescopic effect that was created. To add onto the effect, I added a random mix of different colors each level and music that is relaxing and hypnotic. I wanted the game to be minimalistic so there is no seperate directions. I created display of the pieces that need to be collected and have been collected to imply to goal of the game. I also added a sound effect for when the player collects a piece and when a level is complete. For accessibility, I included a WASD control scheme so the game could be played without the joystick.

Technical Challenges

The wiring for the joystick was a little difficult to figure out because the joystick in the enclosure is at a different orientation than the default. So the x and y axis were switched and used different ranges for each direction. I had to adjust the wiring and arduino code to account for this.

The most difficult part of the software was creating the 3D projection in the game. Since pygame does not have a built in 3D engine, I used the formula for 3D projection from this stackoverflow post. I had to adjust the formula to create rotated triangles and to ensure the triangles were displayed in the correctly.

Timing the data sent via the serial connection, with the game frame rate was also a challenge. I had to adjust the delay between each time data was sent from the ESP32 to my pygame program to ensure the game ran smoothly with minimal errors. I also had issues with the game freezing and was able to fix this bug by checking that the points of each triangle were in the range of the screen.

Another challenge I faced was figuring out how to allow the player to collect triangles when they were close to the triangle. I came up with checking if the triangle took up a significant amount of the screen and allowed the player to collect the triangle if it did. I had to make various small adjustments to the range the triangles can be spawned and the range the player can collect the triangles to make the game challenging but not impossible.

When creating the enclosure I wanted to make sure the joystick could be used ergonomically with just one hand. I also wanted the enclosure to be easy to assemble without many peices. I created many prototypes to ensure that the joystick had a full range of motion and was comfortable to use. I started by taping peices together before gluing. I also wanted to make sure the ESP32 could be accessed in the enclosure so the enclosure needed to be able to open.

Prototypes of the enclosure
Finished Enclosure!

Installing

Download the code and get enclosure instructions