<100 subscribers
When we think about "hardware" for web3, we tend to think of the blockchain that an application runs on. For web3 gaming, the metaphor extends even further. There are plenty of web3 gaming "consoles" and "arcades" out there, but those consoles and arcades are generally just branding around digital distribution platforms. This project is an attempt to make a physical web3 gaming console.
In its final form, I want the console to be cheap (less than $125 in parts), handheld, and fully dedicated to web3.
Earlier this year, I put together a couple pre-designed kits for Retropie consoles built around the Raspberry Pi Zero W 2. The first was a PiGRRL Zero by Adafruit, and cost me $92.26 in parts. It took a fair amount soldering, 3D printing, and wire wrangling, and still resulted in a device that technically worked, but was still very clunky.
My second build was the Null 2 by Ampersand, which cost me $99.38 in parts. While still requiring some soldering, and multiple failed 3D case prints, the result was super compact and enjoyable to use. In fact, I still play on it a couple times a week. My conclusion is that attaching all major components to a large, pre-designed PCB is the way to go (less wires to wrangle).
These 2 previous builds exclusively ran old Retropie games, though. To make a console that works exclusively with web3 games, I'll need a handful of additional features.
Web3 game launcher that opens at startup (this will house the players library of web3 games)
A web2 game engine that can build around on-chain data storage and syncing (like Unreal, Unity, or Godot)
A web3 game engine that will handle the on-chain data storage and syncing (like MUD)
A board powerful enough to run modern 2D games (and maybe 3D games), while making heavy use of network calls
A built-in hardware wallet that permanently links gameplay to a particular device
The continuation of this series primarily depends on if a MUD plugin can be made to work with Godot 4 (MUD is an on-chain game engine built by Lattice, and Godot 4 is an open source traditional game engine). But assuming all goes well, I can see there being at least 4 parts.
Testing the waters with Godot and cheap DIY components (this post)
Adding a MUD plugin to make my Godot game on-chain
Designing my own console and web3 Godot game
Adding a hardware wallet to my console
I wanted a board that was as cheap as I could go, while still being capable of displaying a 2D game on a 3 inch screen, and while also having decent support/documentation/community for when things go wrong. For the third quality, Raspberry Pi seemed like the obvious choice. There's a huge and friendly community for Raspberry Pi, and plenty of solid documentation. For the first two qualities, I narrowed it down even further to the Raspberry Pi 3 B+, which cost me $48 before taxes and shipping.
The screen was a bit more persnickety. My first choice was a $14 Waveshare 240x320 IPS LCD Display. However, because it used an IPS connection, a fair amount of driver installation and configuration was required. As it turned out, one of the drivers (FBCP) is deprecated in the latest Raspberry Pi OS (Bookworm). And the older OS (Bullseye) didn't have OpenGL 3, which my Godot game required. So I moved on to another screen.
My second choice was a $33 Osoyoo 480x320 HDMI LCD Display. While a little pricier, I at least didn't have to install any drivers, and it's likely that the HDMI connection will look smoother given its faster responsiveness. It also means no soldering! I may change back to IPS in the future, if I need something that is more compact, but I'll return to that in a later post.
My remaining bits of hardware are a 5v micro USB power cable, a cheap Logitech game controller, and a wireless keyboard and mouse to launch the game (in the future I'll have the game launch at startup).
As mentioned earlier, I'm using the latest full Raspberry Pi OS as my operating system. This may be overkill for a device that is purely dedicated to launching a game on startup, but it seemed the easiest to go with for testing.
On the game side, I'm beginning with the Godot engine--it's open source, growing in popularity, and doesn't include the pricing hikes that Unity recently introduced. 7 years ago, I dabbled with Unreal for a music VR project, but didn't get far. Already, though, getting up and running with Godot is much easier (based on my memory of Unreal): the download file is tiny, and going from their website's splash page to loading your first project takes about 2 minutes.
Given that I've never created a game in Godot, I started with a beginner tutorial. This one seemed good:
A couple hours later, and the demo was ready to test. While running perfectly smoothly on my MacBook, the game moved at glacier speeds on the Pi. As it turned out, my 1GB of RAM was no match for the HD resolution I exported at, and the default resolution the OS ran on. I found that exporting the game at 640x480 and downgrading the Raspberry Pi OS' resolution to the lowest setting was the winning combination to get things running smoothly. The result is just enough to feel like I'm cutting my teeth on what constraints will look like throughout the project.
As much as I'd like to jump into designing a full minigame, PCB, and 3D printed housing, I first need to make sure that the web3 plugin will work. The next post will primarily deal with trying to get a MUD-ified version of this demo working.
Get a MUD plugin working in Godot
Add on-chain components to my demo game (each coin picked up is stored on-chain)
Ensure MUD-ified game can be exported and played on the current demo device
Launch game at startup and play in kiosk mode
Add a safe power shut down when user quits game
ECWireless
Started working on a web3 gaming console for fully on-chain games. This first part is on running a Godot demo game on cheap parts. Next will be adding MUD for on-chain functionality! https://paragraph.com/@raidguild-forge/building-a-web3-gaming-console-part-1