Skip to content

osu!echo 1.0.5

Choose a tag to compare

@ptrchain ptrchain released this 26 Sep 22:34
· 48 commits to main since this release

osu-echo v1.0.5

Highlights & Improvements

  • Official Weighted Overall Accuracy:

    • Implemented the official osu! exponential decay weighting formula ($\sum \text{acc}_i \cdot 0.95^i / \sum 0.95^i$) across all top scores on a player's profile.
    • Overall accuracy is now computed in tandem with total weighted PP in a single sorted pass, replacing the unweighted arithmetic mean and properly rewarding high-accuracy top plays.
    • Updated the in-game !recalculate (and !recalc) BanchoBot summary report to explicitly format and display weighted accuracy alongside total PP (PP: Xpp | Acc: Y.YY%).
  • Hardened Beatmap Isolation & Stolen ID Defense:

    • Added strict canonical hash validation for score submissions: if a submitted beatmap references an official beatmap_id, its file hash is verified against the canonical ranked database entry.
    • Mismatched diffs (e.g. locally modified or rate-changed .osu files that retain the original map's BeatmapID header) are instantly stripped of online IDs (beatmap_id: 0) and unranked, preventing custom or practice plays from scoring on official leaderboards or distorting profile stats.
    • Expanded heuristic detection during local .osu parsing to detect rate edits (e.g. 1.1x, 1.2x, 0.85x), practice diffs (prac), cuts, buffs, and nerfs, unconditionally preventing cloned diffs from inheriting parent IDs upon import.
  • Score Submission Deadlock Resolution:

    • Resolved an asynchronous self-deadlock in native score submission (process_native_submission) occurring when a submitted replay's player name does not match the logged-in player (e.g. watching external replays or multi-profile setups).
    • Explicitly drops active state read locks before acquiring write locks for client notification queueing, ensuring the server stays completely responsive.
  • Seamless Database Migration & Self-Healing (No Reset Required):

    • Users do not need to wipe or start with a fresh database.
    • Startup migration automatically sanitizes legacy SQLite databases: any corrupt custom, rate, or practice diffs that previously borrowed or collided with official IDs are demoted (beatmap_id: 0, approved: 0).
    • Running !recalculate in-game immediately re-indexes profile stats using the new weighted accuracy engine without losing play history, local scores, or configurations.
  • Simulated Bancho Restriction (!restrictself / !unrestrict):

    • Added a playful !restrictself [reason] command (alias !restrict) that accurately mimics an official osu! server ban / account restriction.
    • Pops the official in-game yellow toast notification banner: "Your account is currently in restricted mode! Please visit the osu! website for more information."
    • Automatically sends the authentic BanchoBot direct message (with optional custom reason), revokes Bancho privileges, wipes in-game rank (#0) and PP in the client panel, disables public channel chatting, and returns error: ban on score submissions.
    • Accurately mirrors official Bancho behavior by preserving the player's personal best banner in song select, allowing restricted players to still view their own best records locally.
    • Running !restrictself again (or !unrestrict / !unrestrictself / !restrictself off) seamlessly lifts the restriction, restores privileges, recalculates profile stats, and pushes an unban welcome notification.
  • Non-Blocking Leaderboard & Replay Network Concurrency:

    • Eliminated global AppState lock contention during official Bancho score lookups and .osr replay streaming.
    • HTTP requests to official servers are now executed asynchronously without holding global read or write locks, ensuring packet routing, chat, and concurrent client requests remain silky smooth even under slow network conditions.
  • Instant Pre-Login Song Select Responsiveness:

    • Optimized the pre-login leaderboard wait loop, reducing polling intervals from 100ms down to 15ms with a tighter bounded timeout.
    • Completely eliminates client UI lag and audio micro-stutters when entering song select immediately upon launching osu! before the login handshake finishes.
  • Personal Best Banner PP Isolation:

    • Fixed a score formatting bug where show_pp_for_personal_best = true would inadvertently format PP into all leaderboard list entries even when pp_leaderboard = false.
    • PP values are now strictly isolated to the personal best banner, keeping the main leaderboard list in pure raw score mode as configured.