Skip to content

Releases: Synaps33/FroggySM

Release list

FroggySM v1.0.0

Choose a tag to compare

@Synaps33 Synaps33 released this 18 Oct 07:04

StepMania 3.9 on a 200 MHz MIPS32 handheld — written from scratch in C,
because the original PSP port needs a C++/Rage framework, the PSP SDK,
DirectX, OpenGL, Lua and the PSP's hardware MP3 decoder, none of which exist
on this hardware.

Download

File Console Size SHA-256
froggysm.sf2k GB300V2 360 392 B 3d882371331ee8c769452ff3526dd38830488d4691881e28d782735c1c9e09e5

This build targets the GB300V2 firmware. The SF2000 firmware uses
different BIOS syscall addresses, so it needs a separate payload built with
FROGGY_TYPE=SF2000; the two are not interchangeable.

Install

1. Core

cp froggysm.sf2k /media/<CARD>/system/Deimos/cores/froggysm.sf2k

2. Folders

mkdir -p /media/<CARD>/ROMS/froggysm/Songs

3. ROM entry — read this one

The .gba file is a stub. The firmware reads its contents and parses them
as:

<core id>;<ROM folder>;<ROM file>.<extension>

The third field must contain a dot. The firmware strips the extension, so a
bare filename makes the parse fail — the console then treats the stub as an
ordinary GBA ROM, prints STOCK and the core never loads.

printf 'froggysm;froggysm;froggysm.gba' > '/media/<CARD>/ROMS/froggysm;froggysm.gba'
printf 'froggysm;froggysm;froggysm.gba' > /media/<CARD>/ROMS/froggysm/froggysm
sync

This resolves to system/Deimos/cores/froggysm.sf2k for the core and
ROMS/froggysm/froggysm for the ROM. Compare a core that works:
nfs2se;nfs2se;Need For Speed II SE.gba.

4. Launch

Open the file browser and start FroggySM.

If you see STOCK instead of the game, step 3 is wrong — check with
cat '/media/<CARD>/ROMS/froggysm;froggysm.gba', it must print
froggysm;froggysm;froggysm.gba.

Songs

/ROMS/froggysm/Songs/
└── <artist or pack>/
    └── <song>/
        ├── song.sm        # chart (required)
        ├── song.mp3       # referenced by #MUSIC
        ├── banner.png     # optional
        └── background.png # optional

#MUSIC: resolves relative to the chart's folder. A chart with no #TITLE:
borrows the folder name, split on the first -, ~, ( or [. Sub-folders
become albums; press SELECT on the select screen to cycle through them.

Audio

Re-encode your library to 128 kbps CBR, 44.1 kHz stereo. The decoder is
software (minimp3) on a soft-float CPU and bitrate costs frame time directly,
so 320 kbps stutters. 44.1 kHz divides evenly into the console's 22050 Hz
output, so the resampler never drifts:

find /ROMS/froggysm/Songs -iname '*.mp3' -print0 |
while IFS= read -r -d '' f; do
    ffmpeg -y -i "$f" -vn -ar 44100 -ac 2 -b:a 128k -c:a libmp3lame "$f.tmp.mp3" &&
    mv "$f.tmp.mp3" "$f"
done

Controls

Nintendo Switch ABXY: X top, B bottom, Y left, A right.

Where Action Input
Select Change song D-Pad Up / Down
Select Change difficulty D-Pad Left / Right, or L / R
Select Change album SELECT
Select Play A or START
Play Lanes D-Pad or Y/B/X/A
Play Pause START
Play Quit to wheel SELECT while paused

What it does

  • .sm / MSD charts, all five difficulties, holds and jumps
  • #BPMS, #STOPS, #OFFSET with correct beat↔second mapping
  • ScoreKeeperMAX2 scoring with the original judgment windows and AAAA…D
    grades, shown on a colour-graded badge
  • Album browsing, song preview, pause/resume
  • MP3 streaming with the whole file in RAM — no SD access during gameplay
  • The song clock is derived from decoded audio samples, exactly as in the
    original, so notes cannot drift from the music however badly the frame rate
    fluctuates

Docs: https://github.com/Synaps33/FroggySM#readme
Issues: https://github.com/Synaps33/FroggySM/issues