Skip to content

Releases: sumiyuki727/O2Lazer

O2Lazer 1.0.0-test3

Choose a tag to compare

@sumiyuki727 sumiyuki727 released this 14 Oct 05:34

O2Lazer 1.0.0-test3

The third 1.0.0 test release targets osu!lazer 2026.1005.0-lazer.
The assembly version remains 1.0.0 to preserve ruleset identity.

Changes since test2

  • Restores still-active sample tails during compatible preview difficulty changes and replay seeks.
    Replay restoration follows recorded successful hits; missed notes remain silent.
  • Restores preview sample tails when returning from gameplay or replay without restarting the song
    or duplicating already-active voices.
  • Applies native master/music volume and inactive-window dimming to keysounds and background audio,
    independently of global effect volume and the beatmap hitsound toggle.
  • Detects changed or replaced OJM sources, reuses unchanged OJN documents and directory context,
    and uses native audio-preparation completion scheduling.
  • Adds bounded OJN/OJM and replay input/materialisation handling, validates imported score metadata,
    and preserves valid score data if saving a replay attachment fails.
  • Separates shared patch coordination and read-only compatibility diagnostics, retaining
    ruleset-scoped ownership and the validated BMS coexistence boundaries.
  • Makes core timing snapshots read-only, improves judgement-history restoration, removes unused
    localisation resources while retaining saved setting identities, and adds a narrow native
    selection fallback for stale pending charts when entering O2Lazer.

Packaging and installation

The public DLL is built with O2LazerTestBridge=false and O2JamSyncDiagnostics=false.
It contains no local test bridge or NUnit test types; optional audio/gameplay sync-tracing hooks are not compiled.
The test bridge remains available only for explicitly instrumented local builds.

  1. Close osu!lazer.
  2. Replace the previous DLL in the data directory's rulesets folder with the attached
    osu.Game.Rulesets.O2Lazer.dll. Keep backups outside rulesets and install only one O2Lazer DLL.
  3. Restart lazer. Keep the configured library and original OJN/OJM sources; clearing imports is
    not required for this upgrade.

SHA256SUMS.txt verifies the attached DLL. Marked v5 replays and existing saved scores remain supported;
unmarked pre-rewrite test replays remain unsupported.

Validation and remaining limits

  • Matching production sources passed 1,941 distinct filtered cases locally and in full GitHub host CI;
    native Realm, replay and old-settings cases run in separate processes. Source-boundary analysis is clean.
  • User acceptance passed NoMS/MS gameplay, pause/resume, results/saving, replay seeking in both directions,
    and MS/HR/EZ colour transitions and SR presentation. Reason HX replay-to-preview restoration also passed.
  • The two new accepted scores and replay attachments remained readable after a normal restart.
  • Intermittent Mania-to-O2Lazer selection retention remains an observation; normal switches do not prove
    that every trigger has been eliminated.
  • An isolated diagnostic confirms a native Realm cancellation/exception counter gap. The exact cause
    of the observed shutdown timeout remains unconfirmed; no global database patch is added.
  • Cold asynchronous preparation may temporarily omit a sample tail. Global native PCM/copy peaks,
    host dependency advisories and broader device/library/ruleset combinations retain their documented limits.

This is a prerelease. The published test2 assets remain unchanged.
See the current acceptance record,
maintenance delivery,
audio contract, and
remaining work.

O2Lazer 1.0.0-test2

Choose a tag to compare

@sumiyuki727 sumiyuki727 released this 06 Oct 05:57

O2Lazer 1.0.0-test2

The second 1.0.0 test release targets osu!lazer 2026.1005.0. The assembly version remains
1.0.0 to preserve ruleset identity; the release tag identifies this test build.

Changes since the first test release

  • Separates OJN/OJM decoding and O2Jam gameplay rules into independent modules, with host storage,
    native integration and presentation boundaries checked automatically.
  • Implements Mania Score using native mania scoring, health, statistics and PP. Carrying Easy,
    Hard Rock or Classic into O2Lazer selects Mania Score; non-MS play remains ineligible for PP.
  • Reworks library updates, source-content identity, missing-source cleanup and deferred star calculation.
    Imported charts become available before the remaining star calculation finishes. Update counters use
    unique source content and animate from zero; clearing imports also reports progress.
  • Reworks preview/gameplay audio, pause handling and replay seeking while preserving authored sample
    references and keeping musical samples independent of global effect volume and the hitsound toggle.
  • Refines O2Jam judgement, LN presentation, randomisation and zero-life EX recording policies.
  • Restores native difficulty presentation transitions while retaining O2Jam level colours and values.
  • Tracks folder-collection ownership by native collection ID. Enabling folder collections now shows
    synchronisation and completion notifications. Untracked old collections are preserved.
  • Fixes the optional Percy LN-body extension: correct column width, fixed-scale lower-half segments,
    no overlap with the first body span, and no enlarged final remainder. Disabled repair keeps native
    Mania rendering. The reported skin issue has passed user testing.
  • Uses native 50 (HitResult.Meh) for O2Jam BAD judgements and statistics, so results and UR
    bars share native yellow without colour patches. Mania Score retains its native 100/50 keys;
    old O2Jam 100 statistics are not migrated.
  • Removes the CI source checks' dependency on ripgrep; GitHub's Windows runner can execute them directly.

Install / upgrade

  1. Close osu!lazer.
  2. Download osu.Game.Rulesets.O2Lazer.dll and replace the previous DLL in your lazer data directory's
    rulesets folder. Keep backups outside that folder and install only one O2Lazer version.
  3. Start lazer, select your library path in Settings → O2Jam, and run Update beatmaps.
    There is no need to clear imports first.

Keep the original .ojn and matching .ojm, .omc or .m30 files available. Existing scores are
retained; pre-rewrite unmarked test replays are intentionally unsupported. Current replays use schema v5.
SHA256SUMS.txt verifies the attached DLL.

Validation and remaining limits

  • 1,385 filtered tests passed with no failures or skips; production/diagnostic dependency analysis found
    no compilation errors, boundary violations or stale exceptions.
  • The maintenance commit passed GitHub Actions. Remote CI covers portable modules and the checker;
    full host analysis was performed locally against matching binaries.
  • Seeking into the middle of an already-started short sample does not reconstruct its remaining audio.
  • Old folder collections without ownership records remain untouched and may coexist with newly created
    collections bearing the same name; automatic adoption is not implemented.
  • This is a prerelease, not a declaration that every skin, replay, library migration or host version has
    been validated. Remaining issues are recorded in the repository's architecture/review documents.

See the maintenance review,
storage contract, and behaviour specification.

O2Lazer 1.0.0-test

Choose a tag to compare

@sumiyuki727 sumiyuki727 released this 01 Sep 12:32

O2Lazer 1.0.0-test

This prerelease targets osu!lazer 2026.804.2 and packages the clean, independently structured
O2Lazer ruleset for wider testing. The Git tag carries the -test suffix; the persisted assembly
version remains 1.0.0 to preserve ruleset identity compatibility.

Highlights

  • Adds mania-compatible No Fail, Half Time, Daycore, No Release, Sudden Death, Perfect,
    Double Time, Nightcore, Fade In, Hidden, Cover, Flashlight, Accuracy Challenge, Random,
    Mirror, Invert, Constant Speed, Wind Up, Wind Down, Muted and Adaptive Speed mods.
  • Preserves O2Jam chart-position judgement, exact note/hold types and OJM audio routing while
    reusing native mania mod presentation and behaviour where compatible.
  • Applies HT/DT pitch settings to BGM and player keysounds, applies DC/NC pitch policy to both,
    and keeps dynamic rate-mod audio and visual scrolling on the same live speed.
  • Makes all O2Jam score combinations ineligible for PP without Mania Score. With Mania Score,
    eligibility follows each selected mania mod's native ranking state. Mania Score remains hidden
    until its scoring and performance calculation are implemented.
  • Adds the O2Lazer No Mod unranked-badge position and transition paths while retaining osu!'s
    native animations for all native destinations.
  • Stores native mania stars separately from O2Jam level stars. Song select gains O2Jam Level sort
    and group options, while native star search, sorting and grouping continue to use mania stars.
  • Removes the fixed-scroll setting; Constant Speed now exclusively owns that visual behaviour.
  • Hides unsupported player settings, protects imported O2Jam charts from the native beatmap editor,
    and keeps OJM musical samples independent of the global effect-volume and beatmap-hitsound toggles.
  • Preserves coexistence with the current BMS ruleset across both ruleset load orders.

Installation and upgrade

  1. Close osu!lazer.
  2. Place osu.Game.Rulesets.O2Lazer.dll in the lazer data directory's rulesets folder, replacing
    the previous O2Lazer DLL. Keep backups outside that folder.
  3. Start lazer and run Settings -> O2Jam -> Refresh beatmaps once. This populates the independent
    O2Jam/mania star metadata without replacing beatmap IDs or score associations.

The original .ojn and matching .ojm, .omc or .m30 files must remain available. Replay data
from the pre-rewrite format is not supported, but existing score records are retained.

Known limitations

  • Mania Score is a hidden placeholder; mania scoring and PP calculation are not implemented.
  • Easy, Hard Rock and Classic are deferred until Mania Score is implemented.
  • The sample backend exposes Tempo but cannot time-stretch small sample channels. Pitch-preserving
    rate mods therefore keep small keysounds at their original pitch and duration while their trigger
    timing follows the gameplay clock.
  • This is a test release. Back up the lazer database before testing library migration or refresh
    behaviour with irreplaceable data.

See the behaviour specification,
architecture notes and
rate-mod audio notes
for implementation boundaries and evidence.

Verification

  • Release build completed with 0 errors.
  • 663 filtered Normal tests passed.
  • 3 BMS coexistence/load-order tests passed in independent processes.
  • git diff --check passed before commit.

Asset checksum

b9320b8820b6ea3bb7d53066c11091007871f0137b55cc0c6b4b147d15c22140  osu.Game.Rulesets.O2Lazer.dll

old-v1.2.2

Choose a tag to compare

@sumiyuki727 sumiyuki727 released this 26 Aug 14:54

What's Changed

  • Restored O2Jam beat/distance judgement: Cool/Good/Bad timing windows are derived from BPM.
  • Pill-rescued BAD now displays as COOL and keeps combo; displayed BAD always breaks combo.
  • Replay payload now embeds score, accuracy, max combo, statistics, mods, and date at result time, with native-style replay filenames.
  • Old v3 replays remain importable and are upgraded with embedded score data after playback.
  • LN head stays pinned while held, the visual hides at EndTime, and a new O2Jam long note visual option restores the original miss visual.
  • Removed the temporary judgement audit listener.

old-v1.2.1

Choose a tag to compare

@sumiyuki727 sumiyuki727 released this 25 Aug 14:06

What's Changed

  • LN miss now dims grey and keeps scrolling past the judgement line, matching osu!mania's hold note behaviour.
  • Legacy lightingN hit-explosion animations now play all frames instead of stopping on the first one.
  • Hold-note body repeat (投皮修复) now only tiles beyond the fixed 32800px stretch span; shorter bodies keep the mania-aligned single-sprite path.

old-v1.2.0

Choose a tag to compare

@sumiyuki727 sumiyuki727 released this 25 Aug 11:52
feat: prepare 1.2.2 release (replay metadata, ln visual options)

old-v1.1.0

Choose a tag to compare

@sumiyuki727 sumiyuki727 released this 23 Aug 17:27
feat: prepare 1.2.2 release (replay metadata, ln visual options)

old-v1.0.0

Choose a tag to compare

@sumiyuki727 sumiyuki727 released this 25 Aug 11:59
feat: prepare 1.2.2 release (replay metadata, ln visual options)