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
No edit summary
No edit summary
Line 4: 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=2023/10/15
|lastupdated=2023/12/31
|type=Music
|type=Music
|version=1.6.1
|version=1.7.1
|license=MIT
|license=MIT
|download=https://github.com/afska/piugba/releases
|download=https://github.com/afska/piugba/releases
Line 86: Line 86:


==Changelog==
==Changelog==
'''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.*'''
'''v1.6.*'''
* Graphical improvements:
* Graphical improvements:

Revision as of 02:50, 7 Ocak 2024

piuGBA
Piugba2.png
General
Author[r]labs
TypeMusic
Version1.7.1
LicenseMIT License
Last Updated2023/12/31
Links
Download
Website
Source

piuGBA is a PIU emulator for the GBA that uses StepMania SSC charts.

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.
      • Multi Coop - Double (10-panel) charts via Link Cable.
    • Impossible - Hardcore charts with insane mods.
  • Speed multipliers can be changed in-game.
  • Mods support:
    • Stage break.
    • Pixelate - Mosaic effect.
    • Jump/Reduce - Moves game area.
    • Decolorize - Inverts/removes colors.
    • Random speed.
    • Mirror and random steps.
    • Training mode - Rate and checkpoints.
  • Hardware integrations:
    • Rumble.
    • I/O LED Sync.
    • SRAM LED Sync.
  • BGA DARK background with blink effect.
  • Song selector with names, backgrounds and sound previews.
  • 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.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.*

  • (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.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.4
New features:

SRAM LED Blink.

  • Arcade improvements:
    • Added Double charts support inside Single player mode.
    • Added mark as deffective option for broken charts.
    • Added Reduce Mod variant: MICRO.
    • Added save file reset options.

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: