🎮 PIU emulator for the GBA.
This is a PIU emulator for the GBA that uses StepMania SSC charts.
Created by [r]labs.
Join our Discord server to find pre-built ROMs and user-created content!
The downloads provided in our Releases section include:
To play, you need to build a custom ROM or download a complete one from our Discord.
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!
GBA_DIR
) and use this file structure:
gba
tools
devkitPro
projects
piugba
ffmpeg.exe
binary included with ImageMagick, add it to PATH
first!where ffmpeg
cd scripts/importer
npm install
~/.bash_profile
:# set your ImageMagick install path here:
export PATH=$PATH:/c/Program\ Files/ImageMagick-7.0.10-Q16
export GBA_DIR="/c/Work/gba" # <<< CHANGE THIS PATH
export DEVKITPRO="$GBA_DIR/tools/devkitPro"
export PATH="$PATH:$GBA_DIR/tools/devkitPro/bin"
export PATH="$PATH:$GBA_DIR/tools/devkitPro/devkitARM/bin"
export PATH="$PATH:$GBA_DIR/tools/devkitPro/tools/bin"
./scripts/toolchain/check.sh
C/C++ Extensions
, EditorConfig
, Prettier - Code formatter
make clean
: Cleans build artifactsmake assets
: Compiles the needed assets in src/data/content/_compiled_sprites
(required for compiling)make build
: Compiles and generates a .gba
file without datamake import
: Imports the songs from src/data/content/songs
to a GBFS filemake package
: Compiles and appends the GBFS file to the ROMmake start
: Starts the compiled ROMmake rebuild
: Recompiles (clean+build+package) a full ROMmake restart
: Recompiles and starts the ROMmake reimport
: Reimports the songs and starts the ROM without recompilingName | Values | Description |
---|---|---|
MODE |
auto or manual |
When using auto , the import process tries to guess the missing data (e.g. difficulty levels). See Wiki: Autoimporting songs. |
ENV |
development , or debug or production |
debug : everything is unlocked, backgrounds are disabled, and stage-break is OFF.development : the same thing, but including backgrounds.production : backgrounds, stage-break ON, and working locks.Non-production versions also have: 1) PIU-style controls by default, and a debug menu to correct songs' offsets. See Wiki: Correcting offsets. 2) If SELECT is pressed when a campaign song starts, stage-break will be ON regardless of the environment. |
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. 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 creation of a video library file (VIDEOLIB ) using the ${SONGS}/_videos folder. |
FAST |
false or true | Uses async I/O to import songs faster. It may disrupt stdout order. |
# use #FF00FF as transparency color
grit *.bmp -ftc -pS -gB8 -gT ff00ff -O shared_palette.c
magick file.png -resize 240x160\! -colors 255 file.bmp
grit file.bmp -gt -gB8 -mRtf -mLs -ftb
ffmpeg -y -i file.mp3 -ac 1 -af 'aresample=18157' -strict unofficial -c:a gsm file.gsm
ffplay -ar 18157 file.gsm
gbfs files.gbfs *.pius *.gsm *.bin
# pad rom.gba to a 256-byte boundary
cat rom.gba files.gbfs > rom.out.gba
rm -rf cmake-build-debug ; mkdir cmake-build-debug ; cd cmake-build-debug ; cmake ../ -G "Unix Makefiles" ; make ; cp engine/libgba-sprite-engine.a ../../piugba/libs/libgba-sprite-engine/lib/libgba-sprite-engine.a ; cd ../ ; rm -rf ../piugba/libs/libgba-sprite-engine/include/ ; cp -r ./engine/include ../piugba/libs/libgba-sprite-engine/
cd scripts/importer
npm install -g pkg
pkg --targets node14-win --config package.json -o importer.exe --public --public-packages "*" --no-bytecode --compress GZip src/importer.js
Makefile
, replace -Ofast
by -Og -g
to include debug symbols in the .elf
fileIf you've added new folders, ensure they're in Makefile
's SRCDIRS
list!