This started as a 3-month project to teach the fundamentals of Software Development. It uses Python and Flask to run an API backend as the main game server. The front-end (on the handheld scanner devices) is written in Micropython and uses REST calls to request/pass data to the server.
The scanners themselves were designed in Solidworks and 3d printed on a standard-issue FDM printer (specifically a Neptune 2). An ESP32 was selected as it provides a full fledged micro computer + display + wifi + battery management for a small price point.
The code itself was developed by a team of 12 students over the course of the 3 months using Github. It was built using standard OO and MVC patterns to make the code as modular as possible. Each scanner has a module to manage each hardware component as well as a simple mainloop. The primary state of the scanner is managed by loading/running a minigame based on the actions of the player.
Gameplay itself starts with the players scanning their RFID-chipped ID badges (in this case their school ID badges, but any RFID tag would work) using the MFRC522 mounted to the back of each scanner. Once all players have scanned in, the game starts when a "Start Game" tag is scanned by any scanner.
When the game begins, the scanner tells each player their role (good guy or imposter) then gives them the options to play.
For good guys they must wander around the area where there are "Stations" (RFID tags) stuck to the walls. The scanner will randomly choose which station to go to and once a player goes there and scans the station they are given a minigame. They must complete the minigame before moving to the next task. There are a half dozen minigames, chosen at random when the station is scanned.
Imposters can pretend to scan stations/play minigames, scan player ID cards (which are attached to their backs) to "murder" them, or press a button to trigger a "sabotage".
When a murdered player is discovered, scanning their ID badge will trigger a voting session. Every scanner will All players must return to the voting room and scan the voting tag to register themselves in the room. Failure to do so within a minute will result in their immediate death
Games are won if enough minigames are completed by the good guys, the imposters are voted out, or if the imposters murder down all the good guys
All project files for this project has been published on Github! See the linky on the left for both code and 3d model files.
NOTE! This project is concluded. All issues on github will be ignored. For contact, please message via ProfessorWoody here on hackaday or post on the discussion board below
Disclaimer: Photos have been edited to remove sensitive information. For publicity rule reasons the name of the school has been omitted from this page. For legal reasons the name of any specific students has been omitted, though the teammember names mentioned here are from those teammates which have explicitly chosen to be identified with this project. To avoid all liability, responsibility, or legal claims the entire project is published under the MIT License