Inspiration
We were inspired by retro reaction games! We wanted to bring the classic Wild West "quick-draw" trope to life, but we wanted to take it a step further than just clicking a mouse. We wanted to merge high-stakes, real-time reactions with physical motion and modern cross-platform technology to make you feel like a cowboy in a dual.
What it does
It is a 1v1 real-time multiplayer reaction game that puts players in the boots of a Wild West gunslinger. The game features two totally unique ways to play:
1.Keyboard Mode: PC players duel by typing out randomly generated "Wild West" words (like 'revolver' or 'stagecoach') as fast as the screen turns green.
2.Smartphone Holster Mode: Players scan a QR code on the desktop to link their smartphone. Physically holstering their phone by their hip. When its time to draw, they must physically swing their phone upward to trigger a shot!
How we built it
Frontend(Desktop): We used Electron for wrapping HTML, CSS, and vanilla JavaScript. We focused heavily on game immersion by building a responsive cinematic UI using purely CSS animations: screen shake, light rays, fading wooden saloon doors, and visual recoil).
Backend:We wrote an asynchronous Python server using FastAPI and Socket.IO to handle extremely fast, real-time bidirectional communication between the players.
Networking % Hardware Integration: We used Ngrok to tunnel our local game server to the public internet, allowing mobile phones to seamlessly pair with the desktop app via QR codes. On the mobile app, we utilized DeviceOrientationEvent API to read the gyroscope's beta axis to translate the physical tilt of the phone into interactive game states(Holstered -> Armed -> Fired).
Audio & Polish: We implemented immersive audio layers, featuring tense background music, heavy firing sound effects, and ambient noise to raise the adrenaline.
Packaging:We wrote a custom batch script utilizing PyInstaller and Electron-Builder to compile the Python backend and Node frontend together into a professional Windows .exe setup wizard.
Challenges we ran into
Real-time Synchronization: Handling the race condition when both players will shoot within 10s of milliseconds of each other was a rough patch for us. We had to implement strict state tracking in Python to ensure accurate calculations and preventing double defeats.
Mobile Gyroscope Permissions:Calibrating the phone's tilt so the game accurately knows the difference between a phone pointing at a floor over being swung up was difficult. However, navigating modern browser security polices(like IOS requiring the user to allow sensor access) was a hurdle we had to code around and eventually would introduce Ngrok to ensure a trusted secure connection.
Accomplishments that we're proud of
Holster Mechanic: To us it feels incredibly cool to actually swing your phone and for that to communicate between devices and display winning a dual of reaction time. Bridging the gap between desktop software and mobile hardware over a 24-hour period was a massive win.
A Complete Product: We were able to not only produce a barebones minimum viable product in 24-hours that was cross-communication with other desktops, but also other mobile phones and their hardware. Finishing the project with final touches of an installer felt like a good achievement to leave it at.
What we learned
We learning how to deeply integrate WebSockets (Socket.IO) with asynchronous Python scrips to handle fast, responsive multiplayer logic.
We learned how access and manipulate raw hardware sensor data(Gyroscopes/Accelerometers) via mobile web browsers.
We stretched ourselves by learning how to package and bundle a multi-language tech stack(Python +Node.js) into a single, cohesive desktop application.
What's next for Standoff Valley
Global Matchmaking: Replacing the local Ngrok tunnel with a fully hosted cloud backed(like AWS) so anyone can duel whoever around the world.
Game Modes: Implementing more creative game modes to keep the chaos and fun going! Such as a tournament style shootout between global players with special party modes.

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