da Bomb contains a multiplayer sea battle game that takes place over a private, BLE radio network at DEF CON 27. To play, you must have a badge and have someone else to fight against nearby. By nearby, we mean "within BLE Radio Range", which can be anywhere up to 50 feet away or less (maybe more), depending on radio conditions.
Badges are aware of other badges and advertise their status using BLE GAP advertisements periodically, approximately once every three seconds. If you want to disable this, enable airplane mode.
Once you connect to another player we open a high-speed BLE L2CAP connection that allows for fast transmission and real-time game play! Unlike our turn-by-turn DC25 badge, we're using some fancy code to play in real-time.
Controls
Getting Started
Pressing the battle icon on the main badge screen or selecting “Sea Battle” from the launcher (access the launcher by hitting the gear icon on the default badge screen) will place you on the WORLD MAP. On the world map you can see other badges moving around.
Ship positions are randomized at initial configuration load and do not represent actual distance, but they do represent your current position in the game. You must be within radio range to see and battle ships.
The color of each square on the World Map "radar" represents what their level is versus your level.
Difference | Factor | Display Color |
---|---|---|
≥ 3 | 2x XP | RED |
≥ 2 | 1.50x XP | ORANGE |
≥ 1 | 1.25x XP | YELLOW |
0 | 1x XP | GREEN |
≤ 1 | .75x XP | GREEN |
≤ 2 | .25x XP | DARK GREEN |
≤ 3 | 0 XP | GREY |
To find an enemy, pull up along side them with your square (in white) and press down on the "B" joystick to activate the "select" button.
Gameplay
Engage a ship by pressing down on the B Joystick, or exit the WORLD MAP by pushing down on the A joystick. When you engage another ship, your badge connects to theirs and the ship selection screen will be shown.
At this point you'll have 20 seconds to select a ship. Select a ship by moving the A joystick. When both players have selected a ship, the game will advance to the battle screen.
Note! Until you both agree to fight, you can always press the selection button again to back out and change your ship. Only when you both agree will combat begin.
Initially, you can only use the PT boat. Each level up will unlock a new ship up to level 6. The ships, levels, and their differences are:
Lvl | Ship | Max HP | Max Energy | Max DMG | Shot Cost | Shots per Sec | Special Cost | Special |
---|---|---|---|---|---|---|---|---|
1 | PT Boat | 200 | 100 | 25 | 30 | 2:1 S | 30 | 4-way Diagonal Shot |
2 | Patrol Boat | 250 | 120 | 40 | 30 | 1:1 S | 40 | 4-way Axis Shot |
3 | Destroyer | 400 | 120 | 50 | 60 | 1:2 S | 40 | Lay Mine |
4 | Cruiser | 400 | 250 | 45 | 60 | 1:1.25 S | 250 | Shield |
5 | Frigate | 250 | 300 | 80 | 70 | 2:1 S | 150 | Heal |
6 | Battleship | 600 | 400 | 100 | 100 | 3:1 S | 100 | 4-way Diag Cannon |
?? | S____ | 300 | 300 | 30 | 45 | 3:1 S | 100 | Cloak |
?? | T____ | 300 | 300 | 60 | 45 | 3:1 S | 300 | Teleport |
There are many ships and many parameters that run the SEA BATTLE simulation. Ships are represented in a physics simulation and each have their own drag, velocity, and acceleration profiles. Experiment with them and learn!
The first six ships will unlock, one per level, as you level up. There are also two hidden ships which can be unlocked. They are known as [redacted and [redacted]. Find a way to unlock them and their power can be yours.
Specials
All ships have at least one special, unique to their class.
The Cruiser's shield stops all damage for a short amount of time at great energy cost. It costs 250 energy to enable the shield.
The Destroyer is the only ship that can lay mines, laying 6 mines at a time.
Each mine lasts for seven seconds, at which point it will expire.
The Frigate is the only ship that can heal - It will restore HP at a specific rate, allowing you to recover from damage.
Combat
Once a ship is selected, combat will begin. Combat is limited to two minutes.
The attacker starts on the left side of the screen. The defender, on the right.
In combat, regardless of what side of the screen you start on, two things are always true:
Your ship that you are controlling is always colored black.
The enemy and their bullets are always colored red.
You can now use the A joystick to move and the B joystick to fire your weapons on the axis (remember Robotron? Yeah, that. You get to shoot in four directions. woooot!)
Pressing down on the B joystick will use the ships “Special”
The top bar indicates how many hit points you have. When this reaches zero, you die. When the enemy’s reaches zero, they die.
The bottom bar indicates Energy. Energy is required to fire and to use your special. It recharges at a rate that is based on the ship type. Beware! If you run out of energy, you cannot fire and you cannot use your special. With some ships, this can be certain death!
Without energy, you cannot use specials or fire weapons. a "boop" sound will alert you to this.
Each ship regenerates energy at a specific rate, as specified below
Level | Ship | Max Energy | Regeneration Rate (per second) |
---|---|---|---|
1 | PT Boat | 100 | 30 |
2 | Patrol Boat | 120 | 30 |
3 | Destroyer | 120 | 60 |
4 | Cruiser | 250 | 60 |
5 | Frigate | 300 | 90 |
6 | Battleship | 400 | 90 |
?? | [redacted] | 300 | 90 |
?? | [redacted] | 300 | 120 |
Note that some special ships can cloak or submerge. When cloaked or submerged energy does not regenerate.
Damage
Damage is calculated when your ship is hit by a bullet.
Each ship can deliver up to MAX DMG (see the above table)
Running aground will cost you and your opponent 10% of your max hit points. Do this for too long and you will sink. It can be a useful strategy when you're cornered.
The damage calculation is:
Starting with a A random number between 75% and 100% of the maximum damage possible (max_dmg is taken from the attacking ship)
Then Multiply by:
- 1.25 if a mine
- .9 if the user being hit has the UL_PLUSDEF (Defense) unlock
- 1.1 if the user who fired has the UL_PLUSDMG (Additional Damage) unlock
Your level and XP DO NOT come into play in the damage calculation. Only the opponet's MAX DMG value matter here.
Combat continues until a player's HP reaches zero or the time runs out.
End-of-Game
The game ends when one player reaches zero HP.
If the game ends due to a timeout, the player with the highest HP wins. In a tie, both players split the XP pool.
XP Gain on a win is calculated by:
(80 + ((winners_level * 16)) * factor
On a loss, it is:
(10 + ((losers_level) * 16)) * factor
factor comes from the level difference table, shown above.
Obviously, battling lower level opponents gets you no where fast. Find higher level players to play with and challenge yourself!
If you TIE with your opponent, we will split the XP on Win with both of you, because that's only fair.
Level up
When you reach the required XP for each level, you'll get a level up message and you'll advance to the next level.
This one goes to 11. After level 11, no further advancement is possible but you will continue to gain XP.
Level | RANK | Required XP |
---|---|---|
1 | Ensign | 0 |
2 | Lt. Junior | 400 |
3 | Lieutenant | 880 |
4 | LT Commander | 1,440 |
5 | Commander | 2,080 |
6 | Captain | 2,800 |
7 | Rear Admiral | 3,600 |
8 | Rear Admiral 2 | 4,480 |
9 | Vice Admiral | 5,440 |
10 | Admiral | 6,480 |
11 | [redacted] | 10,000 |
Radio Issues
The BLE radio on the NRF 52840 isn't the best thing in the world. We've tried our best to build the radio subsystem to the specs on the data sheet and when we see signal loss, we've tried to recover the transmission as much as we can. We expect performance in the high noise, caustic radio environment of DC27 to be a difficult one, but we hope our code changes will make it through the noise.
When the badge experiences major signal loss, the game will abort with a BLE XMIT FAIL message or RADIO LINK LOST message.
If your badge continues to fail to connect, hit the RESET button at the top of the badge and try to battle again.
Lastly, Thanks for playing!
We hope you enjoy our game as much as we have making it for you.
If you find bugs, please file an issue in our github at:
https://github.com/netik/dc27_badge/issues