Inspiration
We've all wanted to experience the childhood dream of being an actual wizard, casting flashy and destructive spells at enemies. But existing games that offer anything remotely similar turn that excitement into a series of artificial clicks and button presses, taking away from the chance to feel like an actual wizard casting actual spells.
That's why we created Arcane Shell, a first-person PVE game that turns these dreams into a reality by putting a Wii Remote in your hand as a wand and an external tablet in front of you as your grimoire, so every spell you cast and every enemy you defeat makes it feel like you're actually wielding magic and fighting opponents.
What it does
Arcane Shell is a first-person PVE game that turns every child's wizard dreams into a reality by bringing the feeling of being a wizard directly into the physical world. Instead of relying on traditional controls, players wield a Wii Remote as a motion-tracked wand. They can aim and cast spells through specific gestures, while an external tablet represents a grimoire, allowing players to create new spells and solve the mini-games required to progress through each stage.
How we built it
The project was built using Vite and Typescript. We used three.js for 3D rendering for every single prop, map, enemy, spell animation, etc, all procedurally built with code. We also used XInput/WinHID for retrieving Wii Remote input as well as websockets to sync the game functionality with the external screen display used to craft and complete mini-games.
Wii remote bluetooth support is not native to Windows, that is, even though Wiimotes have bluetooth, your laptop cannot connect to them without external software. To remedy, we used WiimoteHook to setup a UDP Server so that the frontend can receive what buttons are being pressed. We then used XInput to be able to send haptics to the Wiimote.
Impressively, the Wiimote's latency is minimal, as the connection is via bluetooth. We are able to receive gyro, accelerometer, nunchuck and button data at very fast rates, converting gyro + acceleration data into a functional pointer and gestures for the wand-- again a huge shoutout to WiimoteHook.
The external display ("book") is much easier, we have a separate dedicated page to the UI for the book, and simply display that page on the tablet. The tablet is a 7" touch screen LCD for Raspberry Pi's, although a Pi is not necessary.
Challenges we ran into
Having been our entire team's first time ever building a fully functional game, we faced many challenges throughout the process of creating this project:
- Balancing FPS and overall performance with intricacy of designs and animations
- Hardware issues with the joystick controller and Wii Remote (accurate tracking and gesture detection)
- Misprinting the 3D printed case for our "grimoire"
But despite these several challenges we ran into, we traversed all of them and achieved our goals.
Accomplishments that we're proud of
There were many things we did that we were proud of, especially:
- Creating the whole game using no 3D assets, only code
- Making the gesture detections for the Wii Remote wand effective and consistent and avoiding misfiring
- Connecting our external display to our main system and integrating it with altars to activate custom mini-games
- Creating custom designs and animations for spell casting, enemy attacks, movements, sound effects, etc
What we learned
- The intricacies that go into developing a game. It's completely different from traditional software or hardware, so it was important that we looked into common tech stacks and architecture
- Physical prop interactions can make a game many times more realistic and engaging
What's next for Arcane Shell
- Multiplayer: We are hoping to support multiplayer modes (FFA, CO-OP, Competitive, etc) where users can compete, cooperate, and have fun with each other
- A better substitute for the wand + grimoire (functionality + design/appearance wise)
- More stages and narratives + detailed backstory
- More spells, abilities, enemies, wand gestures, mini-games, etc.
Built With
- mediapipe
- three.js
- typescript
- vite
- websockets
- xinput-ffi

Log in or sign up for Devpost to join the conversation.