Releases: QingQiz/BmsRuleset
Release list
2026.711.1
Highlights
- Added pause/resume rewind gameplay support.
- Added editable Score Graph and Song Progress HUD components.
- Added Stage HUD note-height scaling and improved customizable stage layout support.
- Added a sample-only song preview setting and improved preview responsiveness during gameplay loading.
- Added Chinese localisation for the ruleset.
- Redesigned difficulty-table settings with clearer table actions and status indicators.
- Expanded result analysis with a mania-style hit offset graph and hit offset standard deviation.
- Added a dedicated BMS ruleset icon.
Fixes
- Fixed long-note bodies remaining visually incorrect when notes were released too early.
- Fixed failed long-note and charge-note heads passing the judgement line.
- Fixed the minimum chart lead-in for charts whose first timing event starts too early.
- Fixed scroll speed preservation when using rate-changing mods.
- Fixed composite difficulty delimiters being lost during parsing.
- Fixed difficulty-table synchronization for imported and remote tables.
- Fixed the default Stage HUD anchor and preserved untouched BGA, score, and accuracy HUD layout during editing.
Compatibility
This release targets osu! 2026.711.0.
Full Changelog: 2026.711.0...2026.711.1

2026.711.0
Highlights
Editable Stage Layout
The BMS playfield Stage can now be customised through osu!'s in-game skin editor.
- Move the Stage anywhere on screen.
- Resize horizontally to change lane, note, and Stage graphic width.
- Resize vertically to change the visible lane length without vertically scaling gameplay content.
- Resize diagonally to scale the entire Stage uniformly.
- Adjust the judgement line position independently from the skin-defined hit position.
- Save a separate BMS gameplay layout for each skin.
- Delete the Stage HUD component to reset its position, size, and settings to their defaults.
Several alignment and editor-boundary issues have also been fixed, keeping the Stage correctly positioned and its controls accessible after resizing.
Clear Lamp Improvements
Clear lamps now respect the difficulty of the currently selected mods.
- Lamps earned under harder conditions remain visible when difficulty-lowering mods are selected.
- Lamps earned under easier conditions are hidden when the selected conditions become harder.
- Double Time is treated as a difficulty increase.
Fixes
- Fixed long-note hit events appearing as large clusters at
0 msin result-screen statistics. - Improved long-note head and tail timing data used by Hit Scatter and Hit Offset.
- Limited extreme scatter graph ranges to keep timing data readable.
- Updated compatibility for osu!
2026.711.0.
Compatibility
This release targets osu! 2026.711.0.
Full Changelog: 2026.624.5...2026.711.0
2026-07-12.23-27-54_10M.mp4
2026.624.5
Highlights
- Added
#VOLWAVsupport for chart-defined WAV volume. - Embedded multi-platform FFmpeg into the final DLL, reducing separate native release artifacts.
- Reduced BMS playback overhead.
- Corrected audio volume routing for BGM, keysounds, and preview samples so chart/sample playback is not affected by effect/sample volume.
- Local BMS leaderboards now match scores by beatmap hash instead of beatmap ID, preserving scores after reimport.
Fixes
- Prevented preview audio from replaying during gameplay.
- Fixed import deduplication.
- Fixed parser title inference for bracketed difficulty suffixes.
- Removed non-standard BMS comment stripping support for
//,;, and/* */. - Fixed skin load priority, keys-under-notes layering, and BGA placement/bounds issues.
- Adjusted BGA load ordering.
- Fixed result gauge fail marks after resizing.
- Added
EPOORdisplay to the hit scatter. - Guarded replay fail indicator disposal when unloaded.
- Build now skips recompressing unchanged native backend resources.
Full Changelog: 2026.624.4...2026.624.5
2026.624.4
Highlights
A brand-new results screen for BMS scores, with detailed per-note statistics. You can open the statistics for any past score without watching a replay.
Every score saves its hit events and gauge history. When you open the statistics panel for any stored score (right after a run, or by clicking a score in the leaderboard), the charts rebuild straight from that saved data. No need to sit through a replay to inspect how a run played out. There are four panels:
- Gauge History: the full gauge curve across the chart, with the clear line, per-tier failure markers, and overlaid Auto Gauge tiers.
- Timeline: three stacked sub-plots for Notes, Judgement quality, and Fast/Late timing bias.
- Hit Scatter: a per-note scatter of hit timing offsets, with a per-key breakdown.
- Hit Offset: a histogram of timing offsets, with a per-key breakdown.
The scatter and offset graphs are now click to show or hide per-key sub-graphs, so you can isolate a single key.
✨ New Features
- Results screen statistics: Gauge History, Timeline, Hit Scatter, and Hit Offset panels, plus judgement-coloured hit-result text on the ranking panel.
- Statistics without replays: any stored score's statistics render instantly, with no replay needed.
- Clickable per-key sub-graphs on the Hit Scatter and Hit Offset panels.
- The accuracy ring now uses BMS DJ LEVEL cutoffs (S = 8/9, A = 7/9, B = 6/9, C = 5/9).
🐛 Fixes
- Fixed Hard gauge HP reaching 0 at edge cases but being reported as cleared in the statistics.
- Fixed the Normal gauge failure marker position.
- Fixed the accuracy (ACC) ring mismatch.
- Fixed horizontal overflow on the gauge history graph.
- Fixed charts in a beatmapset with the same MD5 hash being imported as duplicates.
- Fixed UTF-8 decoded filenames failing to find audio files due to an encoding mismatch.
- Mitigated the UI freeze that could occur when the first long note appears.
Full Changelog: 2026.624.3...2026.624.4
tgt_10M.mp4
2026.624.3
What's Changed
Important
Re-import beatmaps after updating to this release. EXRank display and corrected SR values depend on re-imported beatmap data.
but not reimporting actually has no real impact, only a metadata display issue.
Highlights
- Added EXRank judgement support.
- Display EXRank in beatmap attributes.
- Added replay support.
- Added parser support for
#MIDIFILE. - Improved SR calculation performance, reported as 2.3x faster with 0.1x memory use.
Fixes
- Use the true hit window for SR calculation.
- Use lamp priority over total score when selecting the best score.
- Disabled editor usage to prevent crashes.
Maintenance
- Refactored preview cache handling with a Harmony patch.
- Simplified lamp display components.
- Added real lamp test coverage on song select.
- Updated README/docs and removed unused docs.
- Release version bumped to
2026.624.3.
Full Changelog: 2026.624.2...2026.624.3
2026.624.2
What's Changed
Added
- Added BMS lamp display to song select, showing the clear status for the selected chart.
- Supported lamp states: No Play, Failed, Assist Clear, Easy Clear, Clear, Hard Clear, EX Hard Clear, Full Combo, Perfect, and Max.
- Lamp status is calculated from the best matching local score and reflects the gauge type used for the clear.
- Lamp calculation filters scores by gameplay-affecting mods, preventing results from different play conditions from being mixed.
- When Auto Scratch, Hide Scratch, Half Time, Double Time, or Constant is selected, only scores with matching conditions are used for the displayed lamp.
- Mods that do not affect lamp grouping, such as No Fail, do not split lamp results.
PixPin_2026-07-05_22-05-30.mp4
2026.624.1
What's Changed
Highlights
-
Added BGA support for BMS charts.
- Supports
#BMPxx,#BGAxx,#POORBGA,#STAGEFILE,#BACKBMP, and#BANNER. - Supports BGA layer channels
04,06,07,0Aand opacity channels0B-0E. - Adds gameplay BGA rendering behind the playfield with aspect-fit sizing.
- Adds a global BGA dim setting.
- Supports
-
Added video BGA support.
- Uses the framework video backend where available.
- Adds a supplemental FFmpeg backend for legacy BGA video formats, including MPEG-1/MPEG-2 style files.
- Preloads BGA video resources during loading to reduce gameplay-time stalls.
-
Improved song select visuals for BMS charts.
- Uses
#BANNER,#STAGEFILE, and#BACKBMPas song select card/background images. - Adds external texture loading for charts imported from local BMS folders.
- Uses
Gameplay / Settings
- Added Reference BPM setting for charts without
#BASEBPM.- Options: Start BPM, Max BPM, Main BPM, Min BPM.
- Main BPM uses the BPM segment with the most playable notes.
- Removed preview lead-in silence so song previews begin at the first audible event.
- Improved text HUD behavior in the skin editor with a visible placeholder while editing.
- Removed the old Cinema mod now that BGA is handled by the HUD/playfield.
Parser / Import
- Added a faster import-summary parser for scanning BMS metadata, timing, object counts, and star rating data.
- Improved title and difficulty-name inference across multi-chart BMS folders.
- Added parser support for BGA metadata, crop definitions, poor BGA modes, and BGA opacity events.
- Added safer filesystem resource resolution for chart-controlled paths.
- Added support for selecting song select background candidates from BMS metadata.
Fixes
- Fixed raw MPEG-1 video elementary stream decoding for BGA playback.
- Fixed crashes/exceptions when exiting the skin editor.
- Fixed score saving issues with Auto Gauge.
- Fixed Auto Gauge attaching the wrong gauge type after play.
- Fixed an exception when switching from another ruleset to BMS.
- Fixed import/title inference cases where one bad or unrelated chart title could collapse the set title.
- Fixed preview playback restoration after gameplay suppression.
Documentation
- Updated README documentation for supported BMS commands/channels.
- Documented BGA support, BGA dim, Reference BPM, song select image fallback behavior, and skin editor BGA/Text HUD notes.
2026.624.0
Features
- feat(mod): Auto Gauge (AG) — 80125e4
- feat(mod): Background Keysound (BK) — 1487c02
- feat(skin): render HitExplosion/ColumnLight/mania-key — 6adc419
Fixes
- fix(dep): use local osu dependency — fe929ad (version-driven NuGet/local switch + sync to lazer 2026.624.0)
- fix(audio): BMS preview restore audio catch-up — 6ab1eb4
- fix(audio): song preview / gameplay audio adapt to DT/HT clockrate — 6aa01b8
- fix(render): negative scroll/bpm — LN tail appearing before head; lifetime adapted — b052dbf
- fix(gameplay): feature lifetime too short to hit at very short visible time (large scroll/bpm) — 61f6c66
Refactors
- refactor(ln): fade body+tail on early release instead of greying body alone — 3742a56 (replaces the grey tint introduced by #LNMODE)
- refactor(ln): extract LN judgement controller from DrawableBmsLongNote — 1293404
- refactor(bms): decouple per-column gameplay from BmsPlayfield (column-decoupling) — 8a82e9e
- refactor(ui): remove default CompositeDrawable in UI components; use LegacySkinTransformer to catch all fallback — c310239
- refactor: decouple scroll speed control from playfield — bb53a3c
- refactor(object): remove playfield reference in DrawableBmsHitObject — 0662e3f
- refactor: move some fields from hitobject to its sub types — 3e3c397
2026.621.2
Note
This release was built against NuGet package ppy.osu.Game 2026.621.0, but the published osu! lazer
at the time is 2026.620.0. The ruleset loads and runs correctly because
.NET assembly unification resolves the version at runtime, but the following
FileNotFoundException is logged at verbose level during ruleset registration:
Could not load file or assembly 'osu.Game, Version=2026.621.0.0, ...'
Impact: None. The ruleset functions normally. The log noise is cosmetic only
New Features
- LNMODE The chart parser now handles the
#LNMODEheader, enabling support for long note mode configurations in BMS charts. If bms does not specify this parameter, you can use Mod under the Fun category to switch the LN judgment mode (LN/CN/HCN). - PREVIEW The parser now reads
#PREVIEWheaders from BMS files, used to specify song preview start points. If no preview song is specified and there is no audio file starting with "preview" in the source folder, then splice the keysound and background music audio in real time as the preview.
Refactoring
- Judgment system rework Adapted the judge timing system from the LR2 standard to beatoraja's model, improving timing accuracy and compatibility.
- Test reorganization Restructured the test folder hierarchy for better maintainability and discovery of tests.
2026.621.0
Note
This release was built against NuGet package ppy.osu.Game 2026.621.0, but the published osu! lazer
at the time is 2026.620.0. The ruleset loads and runs correctly because
.NET assembly unification resolves the version at runtime, but the following
FileNotFoundException is logged at verbose level during ruleset registration:
Could not load file or assembly 'osu.Game, Version=2026.621.0.0, ...'
Impact: None. The ruleset functions normally. The log noise is cosmetic only
Features
- gauge — gameplay gauge with configurable health bar color
- gameplay — split Auto Scratch and Auto Scale mods
- ui — beautify beatmap attribute display
- skin — restyle the HP bar
- render — hide expired measure lines
Performance
- lifetime — precompute all lifetimes at load, recompute on scroll change
- render — skip expired mine rendering; cache skin lookup and texture
- skin — replace multicast delegate with O(1) slot-list event store
Refactor
- scroll — move HitObject management to per-column containers, simplify drawable hierarchy
- render — split drawable hit objects into note / LN / mine
- lifetime — move lifetime computation to
BmsHitObjectLifetimeEntry - skin — full refactor for maintainability (2-part)
- general — propagate compile-time column type through generic pipeline
- ui — move HP bar, combo, judgement to Playfield layer; make judgement display a HUD component
Fixes
- render — LN rendering issue on scroll < 0
- render — UI freeze between loading and play
- render — note
earliestVisibleTimebeing too late - gameplay — unsubscribe
BmsTextHudfrom staticBmsEventBus