This multi-player application relies on a SubGHz API that was recently changed. Older firmware will get a build error, due to not supporting the new API definitions.
It should build successfully on the following versions:
- Official firmware - RC 33.0
- Official firmware - Release 33.0
- Official firmware - DEV 34.1
- Unleashed firmware - DEV 34.0
- RogueMaster firmware - DEV 34.1
If you get error unknown type name 'SubGhzDevice'
trying to build, then you need a newer firmware version.
This is a multi-player game of Rock, Paper, Scissors! In version 1.2, we use the Flipper Zero Sub-GHz radio to find other players, communicate moves, and exchange contact information.
Watch on YouTube.
I recommend FlipC.org as the easiest way to install the game on your Flipper Zero.
- If you have a different firmware, see the installation directions below.
These directions assume you are starting at the flipper desktop. If not, please press the back button until you are at the desktop.
-
On both Flippers, launch the "Rock Paper Scissors" application.
- Press the OK button on the flipper to pull up the main menu.
- Choose "Applications" from the menu.
- Choose "Games" from the sub-menu.
- Choose "Rock Paper Scissors"
-
On both Flippers, choose "Edit contact info".
- Enter your Discord name, or Facebook name, or whatever you want to share with other players.
- Hold the backspace button (top right) to clear the field.
- Hold a letter button to choose lowercase letters.
- Use the enter button (bottom right) to save your contact info.
-
On Flipper 1, choose "Host game".
- select a valid frequency. (like "433.92" in US region)
- choose a game number (like "042")
- click OK button to start game.
-
On Flipper 2, choose "Join game".
- select the same valid frequency as Flipper 1.
- "game none" should change to show the game number from Flipper 1 & its name.
- click OK button to join game.
-
Once two players are joined:
- Press "OK" to send "1". The other player should also press "OK" to send "1" back - Press "OK" to send "2". The other player should also press "OK" to send "2" back - Press "UP" to send a "Rock", or "RIGHT" to send a "Paper", or "DOWN" to send a "Scissors".
- Rules:
- Rock beats Scissors.
- Paper beats Rock.
- Scissors beat Paper.
- Two identical items tie.
-
Play again screen will show the results of the game.
- Click "Right" to select "No".
- Click "Left" to select "Yes" (the default).
- Click "OK" to answer the prompt.
-
Short press the BACK button for the main menu.
-
Long press the BACK button to exit the game.
V1 completed features:
- The game logic is complete (two flippers can play against each other.)
- UI to show Flipper images instead of just debug text.
- Allow changing contact information (discord, Facebook, etc.)
- Allow changing frequency, in case one Flipper is in a restricted region.
- Allow changing game number, in case multiple games at a conference.
- Show games found & let user pick the game to join.
- Receiving a Join game does an ACK (to cause game on joiner to start).
- A join ACK removes it from the list of available games.
- Vibro on button press (valid move).
- "Song" when win/loss/draw.
- Log game results & contact info onto SD card.
- Allow viewing past games/scores.
- Relaxed timing, so Count 1/Count 2/RPS no longer have to be timed tightly.
- Added a "Play again" screen.
- Play again from one Flipper Zero auto-starts/exit other Flipper Zero.
Planed work for V2.0:
- Wrap user content to two lines on Past Games screen.
- Allow for replacement of keyboard layout/keys.
- Refactor the code, so it has less duplication.
- Write tutorial.
Future ideas:
- Add game ending animations.
- Create stand-alone hardware badges that can play the game too.
- Uses Princeton signals for communication.
- Instead of subghz, use GPIO.
- Instead of subghz, use IR.
This project is intended to be overlayed on top of an existing firmware repo.
- Clone, Build & Deploy an existing flipper zero firmware repo. See this tutorial for updating firmware.
- Copy the "rock_paper_scissors" folder to the \applications_user\rock_paper_scissors folder in your firmware.
- Build & deploy the firmware. See this tutorial for updating firmware.
- NOTE: You can also copy rock_paper_scissors.FAP from latest.extapps folder and use qFlipper to copy the file to the SD Card/apps/Misc folder.
-
If you do not have two Flipper Zero devices, you can use a HackRF One to record messages & broadcast those messages at a future date. I made a YouTube video demo of how to record and broadcast messages.
-
To record a message: (replace "flipper-chat.rf" with the file name you want to use, such as "select-rock.rf".)
sudo hackrf_transfer -r flipper-chat.rf -f 433920000 -s 8000000
- To broadcast a message: (replace "flipper-chat.rf" with the saved file name.)
sudo hackrf_transfer -r flipper-chat.rf -f 433920000 -s 8000000 -x 47
- What I typically do is:
- Use the Flipper Zero to send a messasge that I record, then I play back that message at a later time when I want to pretend the other Flipper Zero is sending a message. You can use the chat app in https://lab.flipper.net/cli, like shown in the video to send a specific packet (or you can use your own code to create the packet.)
- Use the HackRF One to record the message from my Flipper Zero. Then later I use the chat app in https://lab.flipper.net/cli, to see what the message was (or I replay the message to see how my application would respond.)
-
application.fam
- specifies the name of our application.
- specifies the entry point for our application.
- specifies we use the GUI.
- specifies our icon is the rock_paper_scissors.png file.
- specifies our application can be found in the "Game" category.
-
rock_paper_scissors.png
- The icon for our application.
-
rock_paper_scissors.c
- This is the game applcation (tutorial coming soon).
-
Beacon for game 042: Lumyphut: RPS:BA042
-
Not Beacon for game 042: Lumyphut: RPS:NA042
-
Join game 042: Lumyphut: RPS:JA042NYourNameHere
-
Join-ack for game 042: Lumyphut: RPS:AA042NYourNameHere
-
Count 1 for game 042: Lumyphut: RPS:MA0421
-
Count 2 for game 042: Lumyphut: RPS:MA0422
-
Rock for game 042: Lumyphut: RPS:MA042R
-
Paper for game 042: Lumyphut: RPS:MA042P
-
Scissors for game 042: Lumyphut: RPS:MA042S