I am making a wireless alternative controller game. In this game, players will control sprites and events in a video game by moving a large, engraved brick. This “brick” will be embedded with a Raspberry Pi 3 B+, an accelerometer, two vibration motors, an inductive charging set, and a LiPo battery. The Raspberry Pi will send data from the accelerometer to a webpage using websockets. The accelerometer data will control the content on the webpage. The webpage is where the players will see the actual video game and the effects of their actions when using the controller. The webpage will send data back to the controller after certain events in the game. This will activate the vibration motors and provide haptic feedback for dramatic effect at key moments.
Although I haven’t fully crafted the story of the game just yet, the main plot centers on a spirit trapped in the brick. The ultimate goal of the game is for the player to release the spirit trapped inside of the brick. The movement of the accelerometer will affect “time” in the game. Players determine the rate at which time moves forward by controlling the movement of the accelerometer. In addition to this, players will need to solve puzzles where they align the x,y, and z axes in a particular manner in order to trigger key plot points. After a series of important events have happened, the spirit will be released from the brick.
In order to create an engaging and believable gaming experience, the controller needs to meet these requirements:
- It needs to be wireless. I want the controller to look like a stand alone brick and to even feel like one too (so it needs to have a little bit of heft).
- I want the brick to be completely solid. It can’t have any holes for various plugs/cables. This is why I would like to use a LiPo battery and inductive charging to power the controller.
- There needs to be minimal lag between the controller and the game happening on the screen. This is why I decided to use websockets and a webserver hosted on the Raspberry Pi.
Here are some materials that I will need for the project:
- Raspberry Pi 3 B+
- LIS3DH Accelerometer
- 2 vibration motors
- Raspberry Pi Dev Shield
- Soldering Iron
- LiPo Battery
- Inductive Charging Set
- Clayfoam
Progress Thus Far
So far I have connected the accelerometer to the Raspberry Pi and made it send data to a webpage via a websocket. The webpage displays the X,Y, and Z rotation while also showing data for the Pitch, Roll, and Inclination. I’ve added a few visual experiments where I change elements on the webpage according to the incoming data. The thick red line changes hue from bright red to magenta depending on the inclination, while the green rectangle changes location according to rotation of the x-axis. The animated character at the bottom slows down or speeds up according to the rotation of the y axis. At this stage I want to see what kind of transitions and interactions best lend themselves to the incoming data. This will later be used to inspire the puzzle design.
Here is a gif showing the current demo I have on the webpage:
Game Design/Concept Art
This is a sketch depicting the final design of the brick.
One of the primary concepts of this game is that players can control how time shifts. I would like to divide the screen content into background, midground, and foreground layers which move individually based off of the accelerometer data.
Therefore having individualized control of each layer will amplify this effect as some elements will stay in place while others movie. I think I will use these shifting elements to design puzzles later on, where the player needs to rotate the brick in a certain way in order to align the foreground, midground, and background in order to complete the puzzle and progress onto the next level.
I drafted some concept art which shows the visual direction of the game. I want the visual design to accommodate these shifting layers. Therefore, I opted for a messy collage style which makes room for layering, abstraction, and that will still look aesthetically pleasing during abrupt movement.
What’s Still Left to Do
- Add the vibration motors to the circuit and make them react to data sent from the webserver.
- Add inductive charging to the Raspberry Pi
- Design a puzzle that utilizes the accelerometer data and shifting scenery in the game
- Build the case for the brick
I’ll work through the remainder of these items over the next couple of weeks!