Piugba
🎮 PIU simulator for the GBA.
Install / Use
/learn @afska/PiugbaREADME
piuGBA
This is a PIU simulator for the GBA that uses StepMania SSC charts.












<img alt="rlabs" width="16" height="16" src="https://user-images.githubusercontent.com/1631752/116227197-400d2380-a72a-11eb-9e7b-389aae76f13e.png" /> Created by [r]labs.
<img alt="discord" width="16" height="16" src="https://user-images.githubusercontent.com/1631752/116226650-a180c280-a729-11eb-8ae2-be2745d40481.png" /> Join our community!
Key features
- Full .ssc files support, including:
- Normal, hold and fake notes
- BPM changes
- Scroll speed changes
- Stops/Delays and async-stops
- Warps and fast-BPM warps
- Multiple game modes:
- Campaign: Play, unlock songs and defeat bosses
- Arcade: Play songs in any numerical difficulty level
- Single: 1 player, either Single (5-panel) or Double (10-panel) charts
- Multi VS: VS battles via Link Cable or Wireless Adapter
- Multi COOP: Double (10-panel) charts via Link Cable or Wireless Adapter
- Impossible: Faster songs with insane mods
- Speed multipliers can be changed in-game
- Mods support:
- Stage break: On, Off or SuddenDeath
- Pixelate: Mosaic effect
- Jump/Reduce: Moves game area
- Bounce: Makes the arrows bounce
- Color filter: Alters colors
- Speed hack: AutoVelocity, FixedVelocity or RandomSpeed
- Mirror and random steps
- Training mode: Rate, Fast-forward, Rewind
- AutoMod: Swaps mods randomly
- Background videos (uncompressed 240x160) can be displayed using a flash cart
- HQ audio (uncompressed s8 PCM) can be played using a flash cart
- Two themes: Classic and Modern
- BGA DARK background with blink effect
- Song selector with names, backgrounds and sound previews
- Hardware integrations:
- Rumble
- I/O LED Sync
- SRAM LED Sync
- PS/2 input
- Optimized to support ~70 songs per ROM file.
Downloads
The downloads provided in our Releases section include:
- A portable song importer for Windows.
- 4 clean builds (without songs) ready to be used with the importer.
- If you use the portable importer, these files are not needed!
- A small demo with 9 songs from Project Outfox Serenity's Volume I & II sets.
To play, you need to build a ROM with your songs.
How does it work?
A node.js script (the importer) converts a list of SSC/MP3/PNG files into binary files which the GBA can then understand. For audio, it uses GSM audio files which are very small in size.
Charts are converted into a format created for this project called PIUS. Then everything is bundled in a GBFS file (a filesystem created by the GBA scene) and appended to the final ROM.
Read the wiki for more details!
How to a build a ROM
Developing
Install - Any OS (Docker)
# download docker image
docker pull afska/piugba-dev
# compile game assets
./dockermake.sh assets
# install importer dependencies
./dockermake.sh install
# run ./dockermake.sh {action} {arguments...}
# for example, to build a clean Arcade ROM, use:
./dockermake.sh build ENV=production ARCADE=true
Actions
Commands
make install: Installs the importer dependenciesmake check: Verifies that all the tools are installed correctlymake clean: Cleans build artifacts (except assets)make assets: Compiles the needed assets insrc/data/content/_compiled_sprites(required for compiling)make build: Compiles and generates a.gbafile without datamake import: Imports the songs fromsrc/data/content/songsto a GBFS filemake pkg: Appends the GBFS file to the ROM (piugba.gba->piugba.out.gba)make package: Compiles and appends the GBFS file to the ROM (build+pkg)make start: Packages and starts the compiled ROM (package + launch rom)make rebuild: Recompiles a full ROM (clean+package)make restart: Recompiles and starts the ROM (rebuild+start)make reimport: Reimports the songs and starts the ROM without recompiling (import+package+start)
Parameters
| Name | Values | Description |
| --------------- | --------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ENV | development, or debug or production | debug: everything is unlocked, backgrounds are disabled, and stage-break is OFF.<br>development: the same thing, but including backgrounds.<br>production: backgrounds, stage-break ON, and working locks.<br><br>Non-production versions also have:<br><br>1) PIU-style controls by default, and a debug menu to correct songs' offsets. See Wiki: Correcting offsets.<br><br>2) If SELECT is pressed when a campaign song starts, stage-break will be ON regardless of the environment.<br><br>3) Profiling code and some logs. |
| BOSS | false or true | Automatically adds boss levels to the campaign modes. |
| ARCADE | false or true | Creates an arcade-only version of the game that only uses numeric levels, without the campaign modes.<br><br>Add this parameter to both import and build commands! |
| SONGS | path to a directory | Songs directory. Defaults to: src/data/content/songs |
| VIDEOLIB | path to a directory | Video library output directory. Defaults to: src/data/content/piuGBA_videos |
| VIDEOENABLE | false or true | Enables the conversion of video files (from ${SONGS}/_videos) to the VIDEOLIB folder.
Related Skills
node-connect
346.4kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
107.2kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
346.4kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
346.4kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
