Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

PiuGBA: Difference between revisions

From GameBrew
(Created page with "{{#seo: |title= (Music) - GameBrew |title_mode=append |image=piugba2.png |image_alt=piuGBA }} {{Infobox GBA Homebrews |title=piuGBA |image=piugba2.png |description=PIU (Pump I...")
 
No edit summary
 
(26 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{#seo:
|title= (Music) - GameBrew
|title_mode=append
|image=piugba2.png
|image_alt=piuGBA
}}
{{Infobox GBA Homebrews
{{Infobox GBA Homebrews
|title=piuGBA
|title=piuGBA
Line 10: Line 4:
|description=PIU (Pump It Up) emulator for the GBA.
|description=PIU (Pump It Up) emulator for the GBA.
|author=[r]labs
|author=[r]labs
|lastupdated=2021/04/06
|lastupdated=2024/10/08
|type=Music
|type=Music
|version=1.4.0
|version=1.11.2
|license=MIT
|license=MIT
|download=https://discord.com/invite/JE33cc2 Pre-built ROMs
|download=https://github.com/afska/piugba/releases
|website=https://github.com/rodri042/piugba/wiki
|website=https://github.com/rodri042/piugba/wiki
|source=https://github.com/rodri042/piugba/releases
|source=https://github.com/rodri042/piugba
}}
{{#seo:
|title= (Music) - GameBrew
|title_mode=append
|image=piugba2.png
|image_alt=piuGBA
}}
}}
piuGBA is a PIU emulator for the GBA that uses [https://github.com/stepmania/stepmania StepMania] SSC charts.
<!--piugba2.7z-->
piuGBA is a Pump It Up (PIU) emulator specifically designed for the Game Boy Advance (GBA). Created by [r]labs, this emulator allows you to experience the rhythm and excitement ([https://github.com/stepmania/stepmania StepMania] SSC charts) of PIU on your GBA handheld device.  


==Features==
==Features==
*Full .ssc files support, including:
* Full .ssc files support, including:
**Normal, hold and fake notes.
** Normal, hold and fake notes.
**BPM changes.
** BPM changes.
**Scroll speed changes.
** Scroll speed changes.
**Stops/Delays and async-stops.
** Stops/Delays and async-stops.
**Warps and fast-BPM warps.
** Warps and fast-BPM warps.
*Multiple game modes:
* Multiple game modes:.
**Campaign - Play, unlock songs and defeat bosses.
** Campaign: Play, unlock songs and defeat bosses.
**Arcade - Play songs in any numerical difficulty level.
** Arcade: Play songs in any numerical difficulty level.
***Single - 1 player, either Single (5-panel) or Double (10-panel) charts.
*** Single: 1 player, either Single (5-panel) or Double (10-panel) charts.
***Multi VS - VS battles via Link Cable.
*** Multi VS: VS battles via Link Cable or Wireless Adapter.
***Multi Coop - Double (10-panel) charts via Link Cable.
*** Multi COOP: Double (10-panel) charts via Link Cable or Wireless Adapter.
**Impossible - Hardcore charts with insane mods.
** Impossible: Faster songs with insane mods.
*Speed multipliers can be changed in-game.
* Speed multipliers can be changed in-game.
*Mods support:
* Mods support:.
**Stage break.
** Stage break: On, Off or SuddenDeath.
**Pixelate - Mosaic effect.
** Pixelate: Mosaic effect.
**Jump/Reduce - Moves game area.
** Jump/Reduce: Moves game area.
**Decolorize - Inverts/removes colors.
** Bounce: Makes the arrows bounce.
**Random speed.
** Color filter: Alters colors.
**Mirror and random steps.
** Speed hack: AutoVelocity, FixedVelocity or RandomSpeed.
**Training mode - Rate and checkpoints.
** Mirror and random steps.
*Hardware integrations:
** Training mode: Rate, Fast-forward, Rewind.
**Rumble.
** AutoMod: Swaps mods randomly.
**I/O LED Sync.
* Background videos "(uncompressed 240x160)" can be displayed using a flash cart.
**SRAM LED Sync.
* HQ audio "(uncompressed s8 PCM)" can be played using a flash cart.
*BGA DARK background with blink effect.
* Two themes: "Classic" and "Modern".
*Song selector with names, backgrounds and sound previews.
* BGA DARK background with blink effect.
*Optimized to support ~70 songs per ROM file.
* 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.


==User guide==
==User guide==
Line 79: Line 86:


==Media==
==Media==
'''piuGBA - Impossible Mode w/ Rumble''' ([https://www.youtube.com/watch?v=H7OOU1AE1Tw Rodrigo Alfonso])
'''piuGBA - Impossible Mode w/ Rumble''' ([https://www.youtube.com/watch?v=H7OOU1AE1Tw Rodrigo Alfonso])<br>
<youtube>H7OOU1AE1Tw<youtube>
<youtube>H7OOU1AE1Tw</youtube>


==Compatibility==
==Compatibility==
Line 86: Line 93:


==Changelog==
==Changelog==
'''v1.11.'''
*'''New features:'''
** Rumble now works on mGBA. The new default rumble options give more consistent results with different cartridges
** Added a ''Progress'' screen that displays some stats and game completion %
** Added a ''Shuffle'' mode to ''Arcade'' builds
** Added 4-digit support for combo and score numbers
** Grades obtained in Campaign mode are now saved into the Arcade mode as well
** When scrolling through Arcade mode, chart levels are now selected in a more intuitive way: the game will remember the last selected level (e.g. s19) and try to select the closest chart for each song, until the level is changed again
** The numeric level won't be reset anymore when switching from Campaign to Arcade
** The selected song won't be reset anymore when switching from Arcade to Campaign, if they use the same library
** In Multiplayer VS battles:
*** The screen now displays both players' selected levels
*** The host and guest levels are now completely independent of each other
** Added the song, artist, and level to Dance Grade screen for score posting
*'''Engine improvements:'''
** Now the engine doesn't have to measure how many frames each beat takes, it receives that information via the importing process. This makes rumble work immediately after any BPM change, instead of having to wait 1 beat to start
** Improved PS/2 input key handling by making each keypress event last at least one frame
** Adjusted audio lag corrections when using the rate mod (better measure)
*'''Graphical improvements:'''
** Updated text font by adding borders
** Added fire animation to Boss channel
** Added alternative Dance Break sprites for ''Modern'' theme
** Improved original Dance Break sprites in ''Classic'' theme
*'''Misc. changes:'''
** The numbers below the Selection screen now indicate the selected song instead of the total game progress
** In ''Training mode'', using rewind when no point is saved now saves a first rewind point
** Renamed &quot;Link Cable&quot; to &quot;Link Adapter&quot; in the co-op message to also include Wireless Adapter support
** Renamed &quot;Connecting...&quot; with more clear instructions for multiplayer
** Holding ''L'' when entering a multiplayer mode will now force cabled mode
** Holding ''R'' when entering a multiplayer mode will now force wireless host mode
** EWRAM overclock is now independent from HQ mode, as it can crash on some GBA SP units
** In-game actions like changing the multiplier or using the ''Training mode'' hotkeys now display a more obvious hint
** The screen now turns black during soft reset
** Updated foreground palette colors for Double
** Improved random seeding process
*'''Optimizations:'''
** Now the importer LZ77 compresses all backgrounds, saving ~1.5 MB for extra songs
** The engine now uses 26 KB less of static EWRAM
** Reducing life bar rendering CPU usage
** Updated [https://github.com/afska/gba-link-connection gba-link-connection] to v7.0.1
** Updated [https://github.com/AntonioND/libugba libugba] to v0.3.0
*'''Build process updates:'''
** The portable song importer now supports spaces in paths and dragging from any location
** Added containerized builds with Docker, which simplifies a lot the building process
** Partial builds are now working again
** The importer now shows the right total value when importing bonus songs
** Added mGBA logs support in development
** Added profiling functions in development
** Switched to a more portable Makefile for Linux builds
** Empty builds now display their build variant
** The <code>MODE=manual</code> importer option was removed
*'''Bugfixes:'''
** Fixed false negative in ''EverDrive'' detection (HQ mode)
** Fixed a graphical glitch where the game would show sprites and text in inconsistent state when using HQ audio and a slow microSD card
** Removed VBlank wait on Selection scene if Double charts are selected (fixes audio glitches)
** The multiplayer screen now ensures the Wireless Adapter is gracefully deactivated (put in low consumption mode), disallowing the soft reset combo
** Multiplayer code now behaves correctly if the send buffer is full, which is very unlikely, but just in case
** Fixed a bug related to soft reset behaving weirdly after losing a challenge
** Fixed a rare bug in the <code>patch_ezfo_hqmode</code> version where the game wouldn't store the custom offsets for Double charts after saving
* Patches:
** (v1.11.1) Moved Stage passes on top of Stage breaks
** (v1.11.1) Stats are not saved anymore in Multiplayer VS mode
** (v1.11.1) Stats are not saved anymore when Grade saving is OFF
** (v1.11.1) Dance grades are not saved in Multiplayer VS mode anymore if the player didn't stage-pass
** (v1.11.1) The Random steps mod now disables Grade saving
** (v1.11.2) Disabled background compression in the Selection screen to avoid visual glitch.
'''v1.10.*'''
* New features:
** The game can now play [https://github.com/afska/piugba/wiki/Admin#hq-audio--video High-quality audio] by reading uncompressed PCM files from the flash cart's SD card.
** Added support for "EZ Flash Omega" flash carts when using Background videos and High-quality audio.
** Added support for SD cards formatted in exFAT.
** Added "Modern" theme.
** Added "Rewind" functionality to "Training mode", useful to practice difficult parts.
** Added [https://github.com/afska/piugba/wiki/Admin#rumble-options Rumble options].
** Added [https://github.com/afska/piugba/wiki/Admin#configuring-song-offsets-in-arcade-modes Global offset] option.
* Graphical improvements:
** Important sprite rework, supporting multiple themes.
** Added scaling effect to in-game score.
** Added scaling effect to Stage Break animation.
** Added scaling effect to S grades.
* Misc. changes:
** Improved handling of SELECT key to quit multiplayer sessions.
** Adjusted fade time when confirming songs.
** "Background blink" can now be disabled in multiplayer.
** Multiplayer battles can now be tied.
* Build process updates:
** Added OPUS and JPEG support to the importer.
*Bugfixes:
** Fixed pending audio glitches (e.g. when navigating to the next page after confirming a song).
'''v1.9.*'''
*New features:
**The game can now display Background videos by reading them from the flash cart's SD card! (EverDrive exclusive feature).
**Added PS/2 keyboard support via Link Port.
**Added Rumble support via Link Port, for cartridges without Rumble.
**Added a FixedVelocity speed hack that ignores mid-game multiplier changes. Grade saving is disabled while this mod is active.
**Added more post-game content after completing challenges.
*Optimizations:
**Rearranged game loop for better usage of VDraw time.
**Moved lots of functions to IWRAM.
**Added optional EWRAM overclock.
**Removed unused features from gba-sprite-engine.
*Graphical improvements.
**You can now move the instructor's body when pressing keys in the Controls screen.
**Manually improved Home screen and Selection screen color conversion.
*Misc. changes:
**Challenge mode now uses FixedVelocity.
**Rumble is now enabled by default.
**The Settings screen now shows the trigger buttons and teaches users how to enter the Admin menu.
**The NIGHT color filter was replaced with a new ETHEREAL filter, which looks nicer.
**Pixelate = FIXED will now use one less mosaic level so the life bar content is readable.
**The A+B+START+SELECT combo is now ignored in multiplayer sessions (except for cancelling the song) to prevent involuntary disconnects.
**The Link Cable multiplayer has now a slightly higher timeout to handle the case where one console has background videos and the other doesn't.
*Build process updates:
**Added a --fast option to the importer to use async I/O (~2x faster).
**Adding global offset support.
**Added configuration options to the portable song importer.
**The importer now forces the expected node version.
**Improved build error messages.
*Bugfixes:
**Reduced life bar's blink speed to once every 2 frames to make it more visible on some GBA displays.
**Fixed occasional audio clicks during multiplayer sessions by enabling nested interrupts for VBlank.
**Fixed occasional audio glitches during screen transitions.
**(v1.9.1) Improved SD card reading error messages.
**(v1.9.1) Fixed a glitch where Rumble would remain enabled after failing a song on a new beat.
'''v1.8.*'''
*New features:
**Added a new challenge mode when completing the campaign mode.
**Arcade modes now store Dance Grades by index instead of by level. This allows saving different scores for charts that have the same numeric level (e.g. s19-a, s19-b).
*Misc. changes:
**Stage Break = DEATH will now display the life bar at minimum level and ignore BADs in the judgement phase.
**Now the game remembers the page/song when switching between campaign and the challenge (e.g. impossible) modes.
**Bubbles in the Home Screen will 'regenerate' when leaving a submenu.
**Removed pixel blinking effect from the Home Screen.
*Optimizations.
**Now charts use static EWRAM to prevent crashes due to allocation failures.
**Updated gba-link-connection to v6.0.3, which fixes potential autopairing issues (e.g. two couples trying to create two separate sessions via Wireless Adapter).
*Bugfixes:
**Fixed a small memory leak after playing a song.
**Fixed a bug with the random number generator that was causing the last value of a range to be ignored.
**Fixed a glitch where the user could enter the "Audio lag" option and navigate to the previous/next option during the transition.
**(v1.8.1) Added small fixes and adjustments to the new challenge mode.
**(v1.8.2) The Wireless Adapter is now put in low consumption mode when not in use.
**(v1.8.3) General system stability improvements to enhance the user's experience.
**(v1.8.3) Fixed Rate = +1 mod in Impossible mode (v1.8.0 regression).
**(v1.8.3) Fixed 'mark as defective' combo being enabled during challenge mode.
**(v1.8.3) The challenge mode now displays the current song.
**(v1.8.3) If the Arcade library matches the selected difficulty level of the Campaign mode (most common case), the game now remembers the selected song when switching between modes.
**(v1.8.3) The importer is now provided as a portable Windows executable.
**(v1.8.4) Huh. all this time prefetch was disabled. Well, free performance boost.
**(v1.8.4) The sprite limit was increased from 50 to 90.
**(v1.8.4) The Bounce mod now uses a slightly less aggressive curve.
**(v1.8.4) Fixed an importer bug which could cause subindexes to appear in situations where they shouldn't (e.g. deleting level-99 charts via offsets.pofs).
'''v1.7.*'''
*New features:
**Menu controls.
**Menus can now be navigated using two key layouts: GBA style (new), and PIU style.
**GBA style feels more natural, as it's how most GBA games work (navigate with arrows and confirm with A).
**The default layout was changed to GBA style, but it can be changed using the Admin menu.
**Single-player Arcade mode.
**Double charts can now be selected directly using the level change buttons.
**Added AutoVelocity, under the Speed hacks mod (replaces Random speeds). AutoVelocity ignores the multiplier and sets a regular scroll BPM for all songs.
**Added Color filter mod (replaces Decolorize), with 16 different filters to alter game's background and sprites.
**Added Bounce mod, which makes the arrows (and/or its receptors) bounce.
**Added AutoMod mod, which randomly combines all mods every 1~4 beats.
**Modified LINEAR and MICRO variants of Jump/Reduce mods to move the game area rhythmically.
**Consecutive charts with the same numeric level now have a subindex to differentiate them.
**Enabled mods are now highlighted to easily identify which ones are in use.
**Added a warning to let users know when the current mods won't let them save their Dance Grades.
**Multiplayer Arcade mode.
**VS mode now makes the winner's life bar bounce during gameplay to enhance competitiveness.
**Now players don't have to set the difficulty level after each song; the game remembers.
**Impossible mode.
**It now uses the AutoMod/INSANE, +1 rate, and mirror steps mods.
**Admin menu.
**offsets.
**Added a menu to set up custom offsets for each song/level. This feature is useful if you're playing a non-tested song pack and encounter an out-of-sync song. Now, you can add +/- 8ms offsets, which will be recorded in the save file and applied when playing.
*Engine fixes.
**This build fixes ~32768 corner cases related to chart reading, increasing overall compatibility (specially with gimmick charts).
**Added mid-note BPM changes support. This fixes a lot of out-of-sync charts.
**Important ASYNC_STOP (aka setting #SCROLLS to 0) rewrite. This fixes multiple bugs where ASYNC_STOPs caused the chart to end up completely out of sync, with a broken metronome, or with infinite holds.
**BPM changes and arrow predictions are now executed even if the chart has stopped.
**The importer now ensures that every HOLD_START will have a subsequent HOLD_END. Now most of the start events have their duration pre-assigned, so no chart should show broken holds again.
**Events inside WARP sections are no longer ignored by the importer, as they are important for gimmick charts. Instead, these are ignored during the judgement phase, to avoid unfair MISSes.
**Unsupported #SCROLLS segments are now emulated as regular speed changes. It doesn't have the same effect, but it works better than ignoring them. This fixes songs with a broken multiplier.
**MISSes are now judged by timing instead of by their Y coordinate. This is important when using low multiplier / speed values.
**Using a lower FAST_BPM_WARP constant also fixed some songs.
**Fixed a corner case with fake segments events which caused some fake notes to appear as regular notes.
**Removed frame skip in chart reading code, which fixes some glitches in gimmick charts.
**Fixed a corner case where a Scroll BPM change could be ignored until the player manually adjusts the multiplier.
**Equivalent keys (like RIGHT and B for CENTER) now trigger new keypress events even when the other key is already pressed. This makes single-note trills easier.
**Precision of hold arrow judging was adjusted.
**The default scroll BPM change speed was adjusted (100 => 150) and a lower arrow speed limit was set (1px/frame).
*Engine improvements:
**Added co-op chart support: pump-couple and pump-routine.
**SSC parsing is now more robust, ignoring comments and finding charts using #NOTEDATA:; tags.
**Unsupported S, V and H events are now individually ignored instead of ignoring the whole chart.
**Unsupported negative #SPEEDS are now individually ignored instead of ignoring the whole chart.
*Optimizations:
**Optimized IWRAM code, making everything faster and preventing slowdowns in complex charts.
**Reduced memory access and CPU usage during gameplay.
**Updated gba-link-connection to v6.
**Significantly reduced latency in multiplayer sessions (both wired and wireless).
**Significantly reduced CPU consumption in multiplayer sessions.
**Reduced base ROM size by removing dead gba-sprite-engine code.
**Reduced final ROM size by optimizing space in the PIUS format.
*Misc. changes:
**Pressing L and R in menus now lets the player change the option in any direction.
**You can now exit any menu using either START or SELECT.
**Finishing the game now takes user to the updated Home screen.
**Rumble is now disabled during fast-forward (Training Mode).
**SUDDEN_DEATH was renamed to DEATH.
**The FAST Background blink mode was removed.
**The keys tutorial was moved from song 1 to song 0.
**Holding START before entering a multiplayer mode will now set the communication mode to Wireless Host.
**Wireless multiplayer will now use a slightly higher timeout value.
**Library autoscroll can now be used in multiplayer.
**Added save file validation code.
*Build process updates:
**Support for double/multiplayer chart offsets, subindex, and delete keyword in offset.pofs files.
**The importer can now automatically add BOSS levels when creating Campaign builds.
**Fixed some errors with the parsing of chart vs global properties.
**Fixed an error that caused complexity to be zero if the charts didn't have a #LASTSECONDHINT.
**Using a Campaign build with an Arcade library will now show a proper error when running the ROM (instead of crashing).
**Reusing romid.u32 while changing the song count will now throw a proper error instead of building an incorrect ROM file.
**Fixed make package silently failing when the output ROM file was in use.
**All errors thrown by the importer now have more details.
*Graphical improvements.
**Song screen.
***Fake HOLD_FILL notes now look fake (dedicated sprite).
**Home screen.
***Increased demo chart complexity when some of the campaign modes are completed.
**Multiplayer/Connecting screen.
***Added a 'transmitting' animated icon.
**Selection screen.
***DOUBLE mode now has its own color palette, to easily identify what type of charts we're seeing.
***Added 'transmitting' animated icons. On the host side, it will show two 'sending' icons over the lights. On the client side, a 'receiving' icon at the corner.
**Dance Grade screen.
***Updated winner message in VS multiplayer mode for clarity.
*Bugfixes:
**Fixed a random DMA lockup on hardware.
**Fixed a glitch where changing the multiplier before the first SET_TEMPO event would cause the Scroll BPM to be set to 0, making initial arrows appear from nowhere.
**Fixed a glitch where correctly judged arrows would pass through receptors when using the Reduce mod.
**Fixed a glitch during transitions where the Selection screen could show garbage for one frame.
**Fixed a bug where I/O SD blink time was tied to the value of the -now deprecated- Background blink speed setting.
**Fixed a bug related to numeric level synchronization (again) in multiplayer sessions.
**Fixed a bug where SRAM LED blink/ON HIT was also blinking with other player's arrows.
**Fixed a bug where other player's WARPs were causing the local screen to blink using the pixel effect.
**Fixed a bug where multiplier changes were not synchronized correctly in multiplayer sessions.
**Fixed a bug where pixel blinks in level selection were not synchronized correctly during multiplayer sessions.
**Fixed a bug where using fast-forward in training mode would cause a subsequent multiplier change to be ignored.
**(v1.7.1) Fixed a bug in the importer which caused a few songs (with redundant #WARPS and #BPMS.=1000000) to warp twice.
**(v1.7.1) Fixed a glitch where the life bar could blink at max level when returning from negative to positive value.
**(v1.7.1) Fixed a glitch where the controls screen was animating one of the center buttons at double speed.
**(v1.7.1) Adjusted the orientation of the R button sprite, which previously had its corner pointing to the left.
**(v1.7.1) Adjusted the contrast of the center idle sprite, which appeared too bright on some consoles compared to other sprites.
'''v1.6.*'''
* Graphical improvements:
** Added black outline to sprites.
** Added bounce animation on note hit.
** Added a SLOW background blink mode.
* Bugfixes:
** Decolorize mod now also mutates life bars.
** Fixed arrow holders blinking one frame late.
** (v1.6.1) Fixed small glitch where fake taps were displaying the wrong tile.
'''v1.5.*'''
* New features:
** [https://github.com/rodri042/piugba/wiki/Multiplayer Wireless Adapter support].
** Wireless adapter support.
* Bugfixes:
** Now multiplayer scores will always be in sync after a game (fixed Link Connection's packet loss).
** Fixed errors where individual difficulty levels could get out of sync in multiplayer sessions.
** Fixed glitch when confirming a song selection while crossing a page.
** Fixed admin menu key combo handling.
* (v1.5.1) Fixed random crash in wireless multiplayer sessions due to audio DMA conflicts with serial IRQs.
* (v1.5.1) Fixed wireless multiplayer slowdowns by moving time-critical code to IWRAM.
* (v1.5.2) Fixed graphical glitch when the initial multiplier is set to 6x.
* (v1.5.3) Fixed invalid memory read that affects SRAM LED Blink, but might cause other crashes.
* (v1.5.3) Fixed vsync method (changed in v1.5.0) for better battery life.
'''v1.4'''
'''v1.4'''


New features:
New features:
*Hardware integrations
*Hardware integrations.
**[https://github.com/rodri042/piugba/wiki/Admin#rumble Rumble].
**[https://github.com/rodri042/piugba/wiki/Admin#rumble Rumble].
**[https://github.com/rodri042/piugba/wiki/Admin#io-sd-blink I/O SD Blink].
**[https://github.com/rodri042/piugba/wiki/Admin#io-sd-blink I/O SD Blink].
[https://github.com/rodri042/piugba/wiki/Admin#sram-led-blink SRAM LED Blink].
**[https://github.com/rodri042/piugba/wiki/Admin#sram-led-blink SRAM LED Blink].
 
*Arcade improvements.
*Arcade improvements:
**Added [https://github.com/rodri042/piugba/wiki/Admin#arcade-charts Double charts] support inside Single player mode.
**Added [https://github.com/rodri042/piugba/wiki/Admin#arcade-charts Double charts] support inside Single player mode.
**Added [https://github.com/rodri042/piugba/wiki/Admin#mark-a-song-as-defective-in-arcade-modes mark as deffective] option for broken charts.
**Added [https://github.com/rodri042/piugba/wiki/Admin#mark-a-song-as-defective-in-arcade-modes mark as deffective] option for broken charts.
Line 109: Line 399:
Graphical improvements:
Graphical improvements:
*Improved screen transitions.
*Improved screen transitions.
*Now the selection screen background looks cleaner (less dithering below the lights)
*Now the selection screen background looks cleaner (less dithering below the lights).


Bugfixes:
Bugfixes:
*Fixed random crash due to invalid read after winning a song
*Fixed random crash due to invalid read after winning a song.
*Fixed random crash due to a memory leak during screen transitions
*Fixed random crash due to a memory leak during screen transitions.
*Fixed metronome. It was sometimes blinking on weak beats
*Fixed metronome. It was sometimes blinking on weak beats.
*Now the random is more random
*Now the random is more random.
*Now "random steps" is more humanly usable, since it tries to avoid repeated notes
*Now "random steps" is more humanly usable, since it tries to avoid repeated notes.


[https://github.com/rodri042/piugba/wiki/Changelog Release notes.]
[https://github.com/rodri042/piugba/wiki/Changelog Release notes.]
Line 122: Line 412:
==Credits==
==Credits==
Open-source projects involved:
Open-source projects involved:
*[https://github.com/wgroeneveld/gba-sprite-engine wgroeneveld/gba-sprite-engine] Dec 18, 2019.
* [https://github.com/wgroeneveld/gba-sprite-engine wgroeneveld/gba-sprite-engine]: Dec 18, 2019
**Forked at: [https://github.com/rodri042/gba-sprite-engine rodri042/gba-sprite-engine].
** Forked at: [https://github.com/afska/gba-sprite-engine afska/gba-sprite-engine]
*[https://github.com/pinobatch/gsmplayer-gba pinobatch/gsmplayer-gba] Feb 9, 2020.
* [https://github.com/pinobatch/gsmplayer-gba pinobatch/gsmplayer-gba]: Feb 9, 2020
*[https://github.com/wgroeneveld/gba-sprite-engine rodri042/gba-link-connection].
* [https://github.com/AntonioND/libugba AntonioND/libugba]: May 20, 2022
* [https://github.com/afska/gba-link-connection afska/gba-link-connection]: v6.0.3
* [https://github.com/afska/gba-flashcartio afska/gba-flashcartio]: v1.0.5
* [http://elm-chan.org/fsw/ff/ FatFS]: R0.15


==External links==
==External links==
* GitHub -  https://github.com/rodri042/piugba
* GitHub -  https://github.com/rodri042/piugba
* DIscord - https://discord.com/invite/JE33cc2
* Discord - https://discord.com/invite/JE33cc2
 
[[Category:GBA homebrew games]]
[[Category:Homebrew music games on GBA]]
[[Category:GBA homebrew emulators]]
[[Category:Other homebrew emulators on GBA]]

Latest revision as of 01:05, 13 October 2024

piuGBA
Piugba2.png
General
Author[r]labs
TypeMusic
Version1.11.2
LicenseMIT License
Last Updated2024/10/08
Links
Download
Website
Source

piuGBA is a Pump It Up (PIU) emulator specifically designed for the Game Boy Advance (GBA). Created by [r]labs, this emulator allows you to experience the rhythm and excitement (StepMania SSC charts) of PIU on your GBA handheld device.

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.

User guide

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 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 and guide of how to build a ROM.

You can also join the official Discord server to find pre-built ROMs and user-created content.

Screenshots

piugba3.gif piugba4.gif piugba5.gif

piugba6.gif piugba7.gif piugba8.gif

piugba9.gif piugba10.gif piugba11.gif

piugba12.gif piugba13.gif piugba14.gif

Media

piuGBA - Impossible Mode w/ Rumble (Rodrigo Alfonso)

Compatibility

Tested and works on mGBA, VBA-M, and NO$GBA.

Changelog

v1.11.

  • New features:
    • Rumble now works on mGBA. The new default rumble options give more consistent results with different cartridges
    • Added a Progress screen that displays some stats and game completion %
    • Added a Shuffle mode to Arcade builds
    • Added 4-digit support for combo and score numbers
    • Grades obtained in Campaign mode are now saved into the Arcade mode as well
    • When scrolling through Arcade mode, chart levels are now selected in a more intuitive way: the game will remember the last selected level (e.g. s19) and try to select the closest chart for each song, until the level is changed again
    • The numeric level won't be reset anymore when switching from Campaign to Arcade
    • The selected song won't be reset anymore when switching from Arcade to Campaign, if they use the same library
    • In Multiplayer VS battles:
      • The screen now displays both players' selected levels
      • The host and guest levels are now completely independent of each other
    • Added the song, artist, and level to Dance Grade screen for score posting
  • Engine improvements:
    • Now the engine doesn't have to measure how many frames each beat takes, it receives that information via the importing process. This makes rumble work immediately after any BPM change, instead of having to wait 1 beat to start
    • Improved PS/2 input key handling by making each keypress event last at least one frame
    • Adjusted audio lag corrections when using the rate mod (better measure)
  • Graphical improvements:
    • Updated text font by adding borders
    • Added fire animation to Boss channel
    • Added alternative Dance Break sprites for Modern theme
    • Improved original Dance Break sprites in Classic theme
  • Misc. changes:
    • The numbers below the Selection screen now indicate the selected song instead of the total game progress
    • In Training mode, using rewind when no point is saved now saves a first rewind point
    • Renamed "Link Cable" to "Link Adapter" in the co-op message to also include Wireless Adapter support
    • Renamed "Connecting..." with more clear instructions for multiplayer
    • Holding L when entering a multiplayer mode will now force cabled mode
    • Holding R when entering a multiplayer mode will now force wireless host mode
    • EWRAM overclock is now independent from HQ mode, as it can crash on some GBA SP units
    • In-game actions like changing the multiplier or using the Training mode hotkeys now display a more obvious hint
    • The screen now turns black during soft reset
    • Updated foreground palette colors for Double
    • Improved random seeding process
  • Optimizations:
    • Now the importer LZ77 compresses all backgrounds, saving ~1.5 MB for extra songs
    • The engine now uses 26 KB less of static EWRAM
    • Reducing life bar rendering CPU usage
    • Updated gba-link-connection to v7.0.1
    • Updated libugba to v0.3.0
  • Build process updates:
    • The portable song importer now supports spaces in paths and dragging from any location
    • Added containerized builds with Docker, which simplifies a lot the building process
    • Partial builds are now working again
    • The importer now shows the right total value when importing bonus songs
    • Added mGBA logs support in development
    • Added profiling functions in development
    • Switched to a more portable Makefile for Linux builds
    • Empty builds now display their build variant
    • The MODE=manual importer option was removed
  • Bugfixes:
    • Fixed false negative in EverDrive detection (HQ mode)
    • Fixed a graphical glitch where the game would show sprites and text in inconsistent state when using HQ audio and a slow microSD card
    • Removed VBlank wait on Selection scene if Double charts are selected (fixes audio glitches)
    • The multiplayer screen now ensures the Wireless Adapter is gracefully deactivated (put in low consumption mode), disallowing the soft reset combo
    • Multiplayer code now behaves correctly if the send buffer is full, which is very unlikely, but just in case
    • Fixed a bug related to soft reset behaving weirdly after losing a challenge
    • Fixed a rare bug in the patch_ezfo_hqmode version where the game wouldn't store the custom offsets for Double charts after saving
  • Patches:
    • (v1.11.1) Moved Stage passes on top of Stage breaks
    • (v1.11.1) Stats are not saved anymore in Multiplayer VS mode
    • (v1.11.1) Stats are not saved anymore when Grade saving is OFF
    • (v1.11.1) Dance grades are not saved in Multiplayer VS mode anymore if the player didn't stage-pass
    • (v1.11.1) The Random steps mod now disables Grade saving
    • (v1.11.2) Disabled background compression in the Selection screen to avoid visual glitch.

v1.10.*

  • New features:
    • The game can now play High-quality audio by reading uncompressed PCM files from the flash cart's SD card.
    • Added support for "EZ Flash Omega" flash carts when using Background videos and High-quality audio.
    • Added support for SD cards formatted in exFAT.
    • Added "Modern" theme.
    • Added "Rewind" functionality to "Training mode", useful to practice difficult parts.
    • Added Rumble options.
    • Added Global offset option.
  • Graphical improvements:
    • Important sprite rework, supporting multiple themes.
    • Added scaling effect to in-game score.
    • Added scaling effect to Stage Break animation.
    • Added scaling effect to S grades.
  • Misc. changes:
    • Improved handling of SELECT key to quit multiplayer sessions.
    • Adjusted fade time when confirming songs.
    • "Background blink" can now be disabled in multiplayer.
    • Multiplayer battles can now be tied.
  • Build process updates:
    • Added OPUS and JPEG support to the importer.
  • Bugfixes:
    • Fixed pending audio glitches (e.g. when navigating to the next page after confirming a song).

v1.9.*

  • New features:
    • The game can now display Background videos by reading them from the flash cart's SD card! (EverDrive exclusive feature).
    • Added PS/2 keyboard support via Link Port.
    • Added Rumble support via Link Port, for cartridges without Rumble.
    • Added a FixedVelocity speed hack that ignores mid-game multiplier changes. Grade saving is disabled while this mod is active.
    • Added more post-game content after completing challenges.
  • Optimizations:
    • Rearranged game loop for better usage of VDraw time.
    • Moved lots of functions to IWRAM.
    • Added optional EWRAM overclock.
    • Removed unused features from gba-sprite-engine.
  • Graphical improvements.
    • You can now move the instructor's body when pressing keys in the Controls screen.
    • Manually improved Home screen and Selection screen color conversion.
  • Misc. changes:
    • Challenge mode now uses FixedVelocity.
    • Rumble is now enabled by default.
    • The Settings screen now shows the trigger buttons and teaches users how to enter the Admin menu.
    • The NIGHT color filter was replaced with a new ETHEREAL filter, which looks nicer.
    • Pixelate = FIXED will now use one less mosaic level so the life bar content is readable.
    • The A+B+START+SELECT combo is now ignored in multiplayer sessions (except for cancelling the song) to prevent involuntary disconnects.
    • The Link Cable multiplayer has now a slightly higher timeout to handle the case where one console has background videos and the other doesn't.
  • Build process updates:
    • Added a --fast option to the importer to use async I/O (~2x faster).
    • Adding global offset support.
    • Added configuration options to the portable song importer.
    • The importer now forces the expected node version.
    • Improved build error messages.
  • Bugfixes:
    • Reduced life bar's blink speed to once every 2 frames to make it more visible on some GBA displays.
    • Fixed occasional audio clicks during multiplayer sessions by enabling nested interrupts for VBlank.
    • Fixed occasional audio glitches during screen transitions.
    • (v1.9.1) Improved SD card reading error messages.
    • (v1.9.1) Fixed a glitch where Rumble would remain enabled after failing a song on a new beat.

v1.8.*

  • New features:
    • Added a new challenge mode when completing the campaign mode.
    • Arcade modes now store Dance Grades by index instead of by level. This allows saving different scores for charts that have the same numeric level (e.g. s19-a, s19-b).
  • Misc. changes:
    • Stage Break = DEATH will now display the life bar at minimum level and ignore BADs in the judgement phase.
    • Now the game remembers the page/song when switching between campaign and the challenge (e.g. impossible) modes.
    • Bubbles in the Home Screen will 'regenerate' when leaving a submenu.
    • Removed pixel blinking effect from the Home Screen.
  • Optimizations.
    • Now charts use static EWRAM to prevent crashes due to allocation failures.
    • Updated gba-link-connection to v6.0.3, which fixes potential autopairing issues (e.g. two couples trying to create two separate sessions via Wireless Adapter).
  • Bugfixes:
    • Fixed a small memory leak after playing a song.
    • Fixed a bug with the random number generator that was causing the last value of a range to be ignored.
    • Fixed a glitch where the user could enter the "Audio lag" option and navigate to the previous/next option during the transition.
    • (v1.8.1) Added small fixes and adjustments to the new challenge mode.
    • (v1.8.2) The Wireless Adapter is now put in low consumption mode when not in use.
    • (v1.8.3) General system stability improvements to enhance the user's experience.
    • (v1.8.3) Fixed Rate = +1 mod in Impossible mode (v1.8.0 regression).
    • (v1.8.3) Fixed 'mark as defective' combo being enabled during challenge mode.
    • (v1.8.3) The challenge mode now displays the current song.
    • (v1.8.3) If the Arcade library matches the selected difficulty level of the Campaign mode (most common case), the game now remembers the selected song when switching between modes.
    • (v1.8.3) The importer is now provided as a portable Windows executable.
    • (v1.8.4) Huh. all this time prefetch was disabled. Well, free performance boost.
    • (v1.8.4) The sprite limit was increased from 50 to 90.
    • (v1.8.4) The Bounce mod now uses a slightly less aggressive curve.
    • (v1.8.4) Fixed an importer bug which could cause subindexes to appear in situations where they shouldn't (e.g. deleting level-99 charts via offsets.pofs).

v1.7.*

  • New features:
    • Menu controls.
    • Menus can now be navigated using two key layouts: GBA style (new), and PIU style.
    • GBA style feels more natural, as it's how most GBA games work (navigate with arrows and confirm with A).
    • The default layout was changed to GBA style, but it can be changed using the Admin menu.
    • Single-player Arcade mode.
    • Double charts can now be selected directly using the level change buttons.
    • Added AutoVelocity, under the Speed hacks mod (replaces Random speeds). AutoVelocity ignores the multiplier and sets a regular scroll BPM for all songs.
    • Added Color filter mod (replaces Decolorize), with 16 different filters to alter game's background and sprites.
    • Added Bounce mod, which makes the arrows (and/or its receptors) bounce.
    • Added AutoMod mod, which randomly combines all mods every 1~4 beats.
    • Modified LINEAR and MICRO variants of Jump/Reduce mods to move the game area rhythmically.
    • Consecutive charts with the same numeric level now have a subindex to differentiate them.
    • Enabled mods are now highlighted to easily identify which ones are in use.
    • Added a warning to let users know when the current mods won't let them save their Dance Grades.
    • Multiplayer Arcade mode.
    • VS mode now makes the winner's life bar bounce during gameplay to enhance competitiveness.
    • Now players don't have to set the difficulty level after each song; the game remembers.
    • Impossible mode.
    • It now uses the AutoMod/INSANE, +1 rate, and mirror steps mods.
    • Admin menu.
    • offsets.
    • Added a menu to set up custom offsets for each song/level. This feature is useful if you're playing a non-tested song pack and encounter an out-of-sync song. Now, you can add +/- 8ms offsets, which will be recorded in the save file and applied when playing.
  • Engine fixes.
    • This build fixes ~32768 corner cases related to chart reading, increasing overall compatibility (specially with gimmick charts).
    • Added mid-note BPM changes support. This fixes a lot of out-of-sync charts.
    • Important ASYNC_STOP (aka setting #SCROLLS to 0) rewrite. This fixes multiple bugs where ASYNC_STOPs caused the chart to end up completely out of sync, with a broken metronome, or with infinite holds.
    • BPM changes and arrow predictions are now executed even if the chart has stopped.
    • The importer now ensures that every HOLD_START will have a subsequent HOLD_END. Now most of the start events have their duration pre-assigned, so no chart should show broken holds again.
    • Events inside WARP sections are no longer ignored by the importer, as they are important for gimmick charts. Instead, these are ignored during the judgement phase, to avoid unfair MISSes.
    • Unsupported #SCROLLS segments are now emulated as regular speed changes. It doesn't have the same effect, but it works better than ignoring them. This fixes songs with a broken multiplier.
    • MISSes are now judged by timing instead of by their Y coordinate. This is important when using low multiplier / speed values.
    • Using a lower FAST_BPM_WARP constant also fixed some songs.
    • Fixed a corner case with fake segments events which caused some fake notes to appear as regular notes.
    • Removed frame skip in chart reading code, which fixes some glitches in gimmick charts.
    • Fixed a corner case where a Scroll BPM change could be ignored until the player manually adjusts the multiplier.
    • Equivalent keys (like RIGHT and B for CENTER) now trigger new keypress events even when the other key is already pressed. This makes single-note trills easier.
    • Precision of hold arrow judging was adjusted.
    • The default scroll BPM change speed was adjusted (100 => 150) and a lower arrow speed limit was set (1px/frame).
  • Engine improvements:
    • Added co-op chart support: pump-couple and pump-routine.
    • SSC parsing is now more robust, ignoring comments and finding charts using #NOTEDATA:; tags.
    • Unsupported S, V and H events are now individually ignored instead of ignoring the whole chart.
    • Unsupported negative #SPEEDS are now individually ignored instead of ignoring the whole chart.
  • Optimizations:
    • Optimized IWRAM code, making everything faster and preventing slowdowns in complex charts.
    • Reduced memory access and CPU usage during gameplay.
    • Updated gba-link-connection to v6.
    • Significantly reduced latency in multiplayer sessions (both wired and wireless).
    • Significantly reduced CPU consumption in multiplayer sessions.
    • Reduced base ROM size by removing dead gba-sprite-engine code.
    • Reduced final ROM size by optimizing space in the PIUS format.
  • Misc. changes:
    • Pressing L and R in menus now lets the player change the option in any direction.
    • You can now exit any menu using either START or SELECT.
    • Finishing the game now takes user to the updated Home screen.
    • Rumble is now disabled during fast-forward (Training Mode).
    • SUDDEN_DEATH was renamed to DEATH.
    • The FAST Background blink mode was removed.
    • The keys tutorial was moved from song 1 to song 0.
    • Holding START before entering a multiplayer mode will now set the communication mode to Wireless Host.
    • Wireless multiplayer will now use a slightly higher timeout value.
    • Library autoscroll can now be used in multiplayer.
    • Added save file validation code.
  • Build process updates:
    • Support for double/multiplayer chart offsets, subindex, and delete keyword in offset.pofs files.
    • The importer can now automatically add BOSS levels when creating Campaign builds.
    • Fixed some errors with the parsing of chart vs global properties.
    • Fixed an error that caused complexity to be zero if the charts didn't have a #LASTSECONDHINT.
    • Using a Campaign build with an Arcade library will now show a proper error when running the ROM (instead of crashing).
    • Reusing romid.u32 while changing the song count will now throw a proper error instead of building an incorrect ROM file.
    • Fixed make package silently failing when the output ROM file was in use.
    • All errors thrown by the importer now have more details.
  • Graphical improvements.
    • Song screen.
      • Fake HOLD_FILL notes now look fake (dedicated sprite).
    • Home screen.
      • Increased demo chart complexity when some of the campaign modes are completed.
    • Multiplayer/Connecting screen.
      • Added a 'transmitting' animated icon.
    • Selection screen.
      • DOUBLE mode now has its own color palette, to easily identify what type of charts we're seeing.
      • Added 'transmitting' animated icons. On the host side, it will show two 'sending' icons over the lights. On the client side, a 'receiving' icon at the corner.
    • Dance Grade screen.
      • Updated winner message in VS multiplayer mode for clarity.
  • Bugfixes:
    • Fixed a random DMA lockup on hardware.
    • Fixed a glitch where changing the multiplier before the first SET_TEMPO event would cause the Scroll BPM to be set to 0, making initial arrows appear from nowhere.
    • Fixed a glitch where correctly judged arrows would pass through receptors when using the Reduce mod.
    • Fixed a glitch during transitions where the Selection screen could show garbage for one frame.
    • Fixed a bug where I/O SD blink time was tied to the value of the -now deprecated- Background blink speed setting.
    • Fixed a bug related to numeric level synchronization (again) in multiplayer sessions.
    • Fixed a bug where SRAM LED blink/ON HIT was also blinking with other player's arrows.
    • Fixed a bug where other player's WARPs were causing the local screen to blink using the pixel effect.
    • Fixed a bug where multiplier changes were not synchronized correctly in multiplayer sessions.
    • Fixed a bug where pixel blinks in level selection were not synchronized correctly during multiplayer sessions.
    • Fixed a bug where using fast-forward in training mode would cause a subsequent multiplier change to be ignored.
    • (v1.7.1) Fixed a bug in the importer which caused a few songs (with redundant #WARPS and #BPMS.=1000000) to warp twice.
    • (v1.7.1) Fixed a glitch where the life bar could blink at max level when returning from negative to positive value.
    • (v1.7.1) Fixed a glitch where the controls screen was animating one of the center buttons at double speed.
    • (v1.7.1) Adjusted the orientation of the R button sprite, which previously had its corner pointing to the left.
    • (v1.7.1) Adjusted the contrast of the center idle sprite, which appeared too bright on some consoles compared to other sprites.

v1.6.*

  • Graphical improvements:
    • Added black outline to sprites.
    • Added bounce animation on note hit.
    • Added a SLOW background blink mode.
  • Bugfixes:
    • Decolorize mod now also mutates life bars.
    • Fixed arrow holders blinking one frame late.
    • (v1.6.1) Fixed small glitch where fake taps were displaying the wrong tile.

v1.5.*

  • New features:
  • Bugfixes:
    • Now multiplayer scores will always be in sync after a game (fixed Link Connection's packet loss).
    • Fixed errors where individual difficulty levels could get out of sync in multiplayer sessions.
    • Fixed glitch when confirming a song selection while crossing a page.
    • Fixed admin menu key combo handling.
  • (v1.5.1) Fixed random crash in wireless multiplayer sessions due to audio DMA conflicts with serial IRQs.
  • (v1.5.1) Fixed wireless multiplayer slowdowns by moving time-critical code to IWRAM.
  • (v1.5.2) Fixed graphical glitch when the initial multiplier is set to 6x.
  • (v1.5.3) Fixed invalid memory read that affects SRAM LED Blink, but might cause other crashes.
  • (v1.5.3) Fixed vsync method (changed in v1.5.0) for better battery life.

v1.4

New features:

Impossible mode changes:

  • Removed decolorize.
  • Added reduce=micro.

Engine improvements:

  • Added fake notes support through the {1|v|1|0} SSC syntax.

Graphical improvements:

  • Improved screen transitions.
  • Now the selection screen background looks cleaner (less dithering below the lights).

Bugfixes:

  • Fixed random crash due to invalid read after winning a song.
  • Fixed random crash due to a memory leak during screen transitions.
  • Fixed metronome. It was sometimes blinking on weak beats.
  • Now the random is more random.
  • Now "random steps" is more humanly usable, since it tries to avoid repeated notes.

Release notes.

Credits

Open-source projects involved:

External links

Advertising: