Classic brick breaker arcade game for the WiFi Pineapple Pager.
Created by brAinphreAk | www.brainphreak.net
| Main Menu | Custom Level Set | Gameplay | Pause Menu |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
Break all the bricks by bouncing the ball off your paddle! Don't let the ball fall off the bottom of the screen.
| Button | Action |
|---|---|
| LEFT | Move paddle left |
| RIGHT | Move paddle right |
| GREEN | Launch ball / Fire laser |
| RED | Pause menu |
| UP/DOWN | Menu navigation |
- NOOB - Slower ball speed for beginners
- PRO - Standard speed
- L33T - Fast ball for experts
- Normal bricks: 10 points
- Silver bricks (2 hits): 20 points
- Gold bricks (3 hits): 30 points
- Metal bricks are indestructible
Power-ups are hidden inside special bricks. When destroyed, they drop down - catch them with your paddle!
| Power-Up | Effect |
|---|---|
| L - Laser | Shoot bricks with GREEN button (10 sec) |
| C - Catch | Ball sticks to paddle (one use) |
| E - Expand | Paddle gets wider |
| T - Tiny | Paddle shrinks (bad!) |
| S - Slow | Ball slows down (8 sec) |
| F - Fast | Ball speeds up (bad!) |
| + - Extra Life | Gain an extra life (max 5) |
| R - Random | Any of the above |
Hakanoid supports multiple level sets! Switch between them on the main menu.
- DEFAULT - Classic rainbow levels
- HAK5 - Hak5 themed levels
- Create a new folder in
/root/payloads/user/games/hakanoid/levels/ - Add level files named
level1.txt,level2.txt, etc. - Your level set will appear in the menu!
See levels/readme.txt for the complete level editor guide.
Levels are 14 columns x 8 rows. Bricks are space-separated:
# Level 1 - Hak5 Text
#
w w w w w w w w w w w w w w
w S w S w G w S w S G G G w
w S w S G w G S w S G w w w
w S S S G G G S S w G G w w
w S w S G w G S w SEw w G w
w S w S G w G S w S G G w w
w w wCw w w w wLw w w w wCw
0 0 0 0 0 0 0 0 0 0 0 0 0 0
Brick Colors:
r=red,o=orange,y=yellow,g=green,t=teal,b=blue,p=purple,m=magentaw=white,c=chartreuse,n=brown,k=pink,l=lime,a=aqua,v=violet,i=indigo,s=skyx=invisible (surprise blocks!)
Special Bricks: S=silver (2 hits), G=gold (3 hits), I=indestructible (metal)
Power-ups: Add after brick color (e.g., rL=red with laser, gE=green with expand):
L=Laser,C=Catch,E=Expand,S=Slow,+=Extra LifeT=Tiny (bad!),F=Fast (bad!),R=Random
-
Connect to your Pager via SSH:
ssh root@172.16.52.1
-
Create the game directory:
mkdir -p /root/payloads/user/games/hakanoid/levels
-
Copy the files from
payloads/user/games/hakanoid/to your Pager:scp -r payloads/user/games/hakanoid/* root@172.16.52.1:/root/payloads/user/games/hakanoid/ -
Make the files executable:
ssh root@172.16.52.1 "chmod +x /root/payloads/user/games/hakanoid/hakanoid /root/payloads/user/games/hakanoid/payload.sh" -
The game will now appear in your Pager's Games menu!
All Pager games are built on a Linux build server with the OpenWrt MIPS toolchain installed. The workflow is:
- Develop locally - Edit source files on your local machine
- Sync to build server - Copy source to the build server (e.g.,
root@brainphreak) - Build on server - Cross-compile using the MIPS toolchain
- Download binary - Copy the compiled binary back to your local machine
- Deploy to Pager - Push the binary to the connected Pager
On the build server:
- MIPS cross-compiler:
mipsel-openwrt-linux-musl-gcc - Standard build tools (make)
You can obtain the cross-compiler from the OpenWrt SDK for the ramips/mt76x8 target.
IMPORTANT: Always use CROSS_COMPILE when building on the server! Without it, you'll get an x86_64 binary that crashes on the MIPS Pager.
# 1. Sync source to build server
rsync -av --exclude='*.o' --exclude='build/' . root@brainphreak:~/pineapple_pager_hakanoid/
# 2. Build on server - MUST use CROSS_COMPILE for MIPS!
# The toolchain PATH must be set first!
ssh root@brainphreak "export PATH=/root/openwrt-sdk-24.10.0-ramips-mt76x8_gcc-13.3.0_musl.Linux-x86_64/staging_dir/toolchain-mipsel_24kc_gcc-13.3.0_musl/bin:\$PATH && cd ~/pineapple_pager_hakanoid && make clean && make CROSS_COMPILE=mipsel-openwrt-linux-musl- hakanoid"
# 3. Download compiled binary
scp root@brainphreak:~/pineapple_pager_hakanoid/payloads/user/games/hakanoid/hakanoid payloads/user/games/hakanoid/
# 4. Deploy to Pager (may need to kill running game first)
ssh root@172.16.52.1 "killall hakanoid 2>/dev/null; rm -f /root/payloads/user/games/hakanoid/hakanoid"
scp payloads/user/games/hakanoid/hakanoid root@172.16.52.1:/root/payloads/user/games/hakanoid/
ssh root@172.16.52.1 "chmod +x /root/payloads/user/games/hakanoid/hakanoid"Toolchain location on build server:
- SDK:
/root/openwrt-sdk-24.10.0-ramips-mt76x8_gcc-13.3.0_musl.Linux-x86_64/ - Compiler:
staging_dir/toolchain-mipsel_24kc_gcc-13.3.0_musl/bin/mipsel-openwrt-linux-musl-gcc
Verify correct build: The MIPS binary should be ~575KB. If it's ~41KB, you built for x86_64 by mistake!
# Cross-compile for Pager - REQUIRED for the binary to run on Pager!
make CROSS_COMPILE=mipsel-openwrt-linux-musl- hakanoid
# WARNING: Running just "make hakanoid" builds for x86_64 which will NOT work on the Pager!# Deploy via SSH (Pager connected via USB)
make deploy
# Or specify a different IP
make deploy PAGER_IP=192.168.1.100pineapple_pager_hakanoid/
├── src/
│ ├── lib/
│ │ ├── pager_gfx.h # Graphics library header
│ │ └── pager_gfx.c # Graphics library implementation
│ └── arkanoid/
│ └── arkanoid.c # Main game source
├── payloads/user/games/hakanoid/
│ ├── payload.sh # Pager payload entry point
│ ├── hakanoid # Compiled binary (after build)
│ └── levels/
│ ├── readme.txt # Level editor documentation
│ ├── DEFAULT/ # Default level set
│ │ └── level1-5.txt
│ └── HAK5/ # Hak5 themed levels
│ └── level1-5.txt
├── screenshots/ # Game screenshots
├── Makefile # Build configuration
├── .gitignore
└── README.md
- 14x8 brick grid with colorful patterns
- Multiple brick types:
- Normal (1 hit) - 18 different colors
- Silver (2 hits)
- Gold (3 hits)
- Metal (indestructible)
- Invisible (surprise blocks!)
- Power-up system with 8 different power-ups
- Level set support - switch between level packs
- Custom level editor - create your own levels!
- 3 difficulty levels - NOOB, PRO, L33T
- Ball physics - angle varies based on paddle hit position
- High score persistence (saved to
/root/loot/hakanoid_highscore) - Sound effects via RTTTL buzzer
- LED effects for game events
- Smooth gameplay with fixed-point ball physics
- Display: 222x480 (used in landscape: 480x222)
- Input: D-pad + A/B buttons
- Audio: Buzzer with RTTTL support
- LEDs: RGB D-pad LEDs + A/B button LEDs
MIT License
Created by brAinphreAk



