Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1050 commits
Select commit Hold shift + click to select a range
cf09ed3
Fix unobserved timeouts still showing to user
peppy Jan 30, 2026
2ab7492
Fix initial solo gameplay leaderboard position and color (#36496)
Joehuu Jan 30, 2026
8c21a5b
Merge pull request #36536 from peppy/silence-timeouts
bdach Jan 30, 2026
c9a50b4
Merge pull request #36387 from ArijanJ/cycle-skins
bdach Jan 30, 2026
e9974ba
Adjust speed deviation scaling to be more harsh on low end (#36554)
Givikap120 Jan 30, 2026
9e9b5cf
Invert quick play queue backgrounding and canceling flow (#36247)
smoogipoo Jan 31, 2026
355addc
Nerf aim strain for objects <radius (#36558)
tsunyoku Jan 31, 2026
85b8480
Fix two mod presets having key binding of `1` (#36563)
voidstar0 Feb 1, 2026
ee0ac3e
Simplify hidden difficulty calculation (#36465)
Givikap120 Feb 1, 2026
b8b6327
Fix revert to default button not resizing correctly after changing la…
peppy Feb 3, 2026
892e34b
Add automation to copy labels from issue when PR is opened
peppy Feb 4, 2026
57222ea
Merge pull request #36580 from peppy/fix-revert-button-wrong-size
bdach Feb 4, 2026
1230da3
Implement sorting and display styles for currently online users (#33649)
smoogipoo Feb 4, 2026
8c180b0
Change wide bonus distance reduction to be consistent with `SpeedAim.…
stanriders Feb 4, 2026
52be311
Add a bunch of rhythm improvements (#36569)
stanriders Feb 4, 2026
5d4bb1b
Localise "running" in `DigitalClockDisplay` (#36589)
nnfz Feb 5, 2026
4eec06c
Add real sliderend check in rhythm (#36593)
stanriders Feb 5, 2026
5e01dda
Fix star rating no longer updating from mod setting changes after re-…
bdach Feb 6, 2026
40b3316
Localise some strings on SSV2 (#36591)
diquoks Feb 6, 2026
5231cfa
Change difficulty range slider colors to match star rating more close…
mmiddlezong Feb 6, 2026
e77e08c
Localize "Effect, Master, Music" in `VolumeOverlay` (#36594)
nnfz Feb 6, 2026
a616fa6
Localise some more strings in settings (#36590)
diquoks Feb 6, 2026
2efe0c9
Fix "copy labels from issues" workflow not having the appropriate per…
bdach Feb 6, 2026
6c55731
Merge branch 'pp-dev' into fc_time_with_penalty
Natelytle Feb 6, 2026
48ffadc
fingies: i am goingst to touches you
Natelytle Feb 6, 2026
b6cbaa6
multage
Natelytle Feb 7, 2026
c9e44bc
Move stuff to better spots, properly support databasing miss penalty …
Natelytle Feb 7, 2026
8fe76f2
unfiretruck attribute json properties
Natelytle Feb 7, 2026
5cdf07c
Make grouped friend notifications Transient and not important (#36620)
SupDos Feb 8, 2026
239951e
Fix seeking to previous bookmark not working when song is playing (#3…
Joehuu Feb 8, 2026
7263551
Improve handling of account registration errors (#36600)
bdach Feb 8, 2026
bb04a18
Localise "lounge" & "quick play" in `ButtonSystem` (#36220)
diquoks Feb 8, 2026
0f70903
only nerf total cognition sum when reading > flashlight (#36599)
molneya Feb 8, 2026
0d42b77
Return zero rhythm difficulty for `Swell` and `DrumRoll` (#36628)
stanriders Feb 8, 2026
0a4497d
Fix local beatmap metadata not being cleared when previously selecte…
Joehuu Feb 9, 2026
bb83f3d
Fix unreliable async loading due to incorrect single-child assumption
peppy Feb 9, 2026
0198203
Allow binding left/right modifier keys separately for gameplay bindin…
failaip12 Feb 9, 2026
60d98f0
Improve adjusting mods settings values with keyboard (#36090)
diquoks Feb 9, 2026
efd4d12
Add info about damage dealt to ranked play user state (#36627)
minetoblend Feb 9, 2026
f39b310
Add missing wait step to fix flaky test in `TestSceneModPresetColumn`
peppy Feb 9, 2026
cae8d3f
Update production endpoints in an attempt to fix Russian player conne…
peppy Feb 9, 2026
b613c1d
Merge pull request #36635 from peppy/update-production-endpoints
bdach Feb 9, 2026
a1136c3
Update framework (#36637)
peppy Feb 9, 2026
dbce888
Rename `Ruleset.GetHitResults{ -> ForDisplay}()`
bdach Feb 9, 2026
3678ea0
Publicise `Ruleset.GetValidHitResults()`
bdach Feb 9, 2026
15c49a7
Adjust contract of `Ruleset.GetValidHitResults()` to always enumerate…
bdach Feb 9, 2026
655d725
Perform extra checks when loading rulesets (#36641)
bdach Feb 10, 2026
c59e5bf
Merge pull request #36639 from bdach/actually-all-valid-hit-results
peppy Feb 10, 2026
25d2c04
Add early returns in `HarmonicSkill` and `OsuDifficultyCalculator` (#…
stanriders Feb 10, 2026
56bc80f
Update resources
peppy Feb 10, 2026
3a46319
Nerf HD perfect stack reward (#36623)
Givikap120 Feb 10, 2026
50426eb
Refactor UpdateableTeamFlag for use on team overlay (#36286)
LiquidPL Feb 10, 2026
c8318d6
Refactor `DifficultyHitObject` to include `ClockRate` and `HitWindows…
stanriders Feb 10, 2026
5afd6c6
Add user role to `MultiplayerRoomUser` (#36652)
bdach Feb 11, 2026
860427e
Fix corner radius for user tag glow (#36659)
netineko Feb 13, 2026
94d9de9
Add explanations for scoring mode used in ranked & total score toolti…
bdach Feb 13, 2026
a166d00
Change accuracy pp to be uncapped (#36669)
stanriders Feb 14, 2026
62fdd42
Adjust wide angle bonus to be closer to SpeedAim distance scaling (#3…
stanriders Feb 15, 2026
29571d1
Improve binning and fix the miss penalty being quite wrong
Natelytle Feb 15, 2026
c494a3d
unnerf zetsubou by adding a retry cooldown constant
Natelytle Feb 15, 2026
87f323a
Update resources
peppy Feb 15, 2026
2f459dd
Preserve bookmarks when creating a new difficulty from scratch (#36675)
64ArthurAraujo Feb 16, 2026
810edeb
Fix extra lives in Easy mod potentially getting reapplied during game…
bdach Feb 16, 2026
8e26cf4
Restore previous beatmap when leaving scoped mode (#36582)
LiquidPL Feb 16, 2026
fc4e297
Use directory of last-selected sample as initial directory in sample …
bdach Feb 16, 2026
42bf254
Fix osu! editor composer scale handles not updating correctly when se…
bdach Feb 16, 2026
94cec71
Prevent tagging beatmaps when played with conversion mods (#36684)
imvanni Feb 17, 2026
71583bc
Add basic support for `scoreentry-` skinnable text
peppy Feb 17, 2026
6e03d5b
Show initial key placeholder / trigger name using non-skinned font
peppy Feb 17, 2026
cc9a5ed
Update resources
peppy Feb 17, 2026
86ab507
Use default overlap of 1
peppy Feb 17, 2026
7445efa
Ensure state resets back to initial display on rewind
peppy Feb 17, 2026
9fa7812
Merge pull request #36687 from peppy/legacy-key-counter-skinnable-font
bdach Feb 18, 2026
f15e086
Add "spin" keyword for menu cursor rotation
peppy Feb 18, 2026
83587e2
Add ability for `LoadingLayer` to block all keyboard input
peppy Feb 18, 2026
93d1a61
Migrate playlist freestyle select screen to use `SongSelectV2`
peppy Feb 17, 2026
fb8c228
Add test coverage of actual user flows involving freestyle select screen
peppy Feb 18, 2026
110f11f
Fade out header line for now to avoid visual overlap
peppy Feb 18, 2026
d33a6d5
Add ability for `LoadingLayer` to block all keyboard input
peppy Feb 18, 2026
4854473
Migrate multiplayer freestyle select screen to use `SongSelectV2`
peppy Feb 18, 2026
25d6308
Merge pull request #36695 from peppy/loading-layer-block-non-positional
bdach Feb 18, 2026
e15cb08
Privatise setter
bdach Feb 18, 2026
1153d17
Disallow use of scoping button when at freestyle song select
peppy Feb 18, 2026
de50789
Adjust RX-related multipliers (#36697)
stanriders Feb 18, 2026
716cd8d
Fix Aim's `skillMultiplierTotal` being applied incorrectly (#36699)
stanriders Feb 18, 2026
f9f927f
Disable footer buttons on freestyle song select
bdach Feb 19, 2026
9ae9964
Merge pull request #36694 from peppy/freestyle-select-update
bdach Feb 19, 2026
d3b4836
Merge branch 'master' into multiplayer-freestyle-select
bdach Feb 19, 2026
69c2747
Merge pull request #36696 from peppy/multiplayer-freestyle-select
bdach Feb 19, 2026
1e8b9a7
Adjust nightcore sample playback to not stop randomly and be closer t…
bdach Feb 20, 2026
c144cf1
Fix reversing straight perfect curve sliders positioning them weirdly…
64ArthurAraujo Feb 20, 2026
29a39cb
Fix spectator player cells not having initial shadow edge effect set …
Joehuu Feb 21, 2026
a14e87f
Q1 2026 osu! Balancing pass (#36734)
stanriders Feb 22, 2026
d139f59
Update resources
peppy Feb 22, 2026
a09489d
Move transformation logic local to transient drawable
peppy Feb 23, 2026
4916c87
Move toolbar button text local to single usage in `ToolbarUserButton`
peppy Feb 23, 2026
f39615a
Move spacing local to usages
peppy Feb 23, 2026
e2cbfb9
Merge pull request #36738 from peppy/user-button-animation-fix
bdach Feb 24, 2026
efc9a27
Remove no longer used class
peppy Feb 19, 2026
cb12d35
Combine old classes to provide better starting point for migration
peppy Feb 19, 2026
fabce18
Remove `V2` suffix from migrated classes
peppy Feb 20, 2026
5602281
Merge pull request #36745 from peppy/song-select-cleanup
bdach Feb 24, 2026
ccb0224
Attempt to fix "copy labels from issues" workflow permissions again
bdach Feb 24, 2026
5b1d4ce
Merge pull request #36746 from bdach/fix-thing-again
peppy Feb 24, 2026
ee8d990
Rename one more missed song select v2 class
peppy Feb 24, 2026
99ab245
Tidy up how `SettingsSubsection` headings are created
peppy Feb 25, 2026
cb597c4
Fix flow animating its display initially when it shouldn't
peppy Feb 25, 2026
047ea7c
Fix hidden settings flow content still being interactive
peppy Feb 25, 2026
0dfb362
Use `HotkeyDisplay` for toolbar buttons (#36750)
netineko Feb 25, 2026
32d1040
Merge pull request #36751 from peppy/fix-hidden-controls-settings
bdach Feb 25, 2026
5174d8b
Fix changing normal sample bank via keyboard hotkeys not updating add…
bdach Feb 25, 2026
7e2771c
Improve usability of sample bank toggles (#36753)
bdach Feb 26, 2026
2d6fa65
Use full hitwindow in taiko Rhythm skill (#36671)
stanriders Feb 26, 2026
5131b18
Remove redundant footer from `TestScenePlaylistsRoomSubscreen`
LiquidPL Feb 27, 2026
2e659a7
Merge pull request #36767 from LiquidPL/cleanup-online-play-tests
peppy Feb 27, 2026
c72b641
Add pool type to matchmaking room invited event (#36765)
smoogipoo Feb 27, 2026
105342e
Migrate sheared overlay tests to `ScreenTestScene` (#36736)
LiquidPL Feb 27, 2026
9c489aa
Use better text structure for `ScreenshotSaved` notification (#36701)
diquoks Feb 28, 2026
b88cba0
Refactor `TestSceneScreenFooter` to test entire `OsuScreen`s (#36718)
LiquidPL Mar 1, 2026
033e13c
Fix song select navigation with page up/down (#36293)
linusgenz Mar 1, 2026
9c8dfaf
Apply more sanity checks when handling files from archives
bdach Mar 2, 2026
f241d9c
Fix combined slider velocity calculation (#36773)
stanriders Mar 2, 2026
b1227e1
Aim strain influence reduction (#36792)
stanriders Mar 2, 2026
ee9f8d5
Fix custom tooltip formats no longer displaying in settings
peppy Mar 3, 2026
d27d0f4
Switch multiplayer to use song select v2 (#36747)
peppy Mar 3, 2026
d60a12a
Fix ordering of skins not working as expected (#36772)
peppy Mar 3, 2026
b0759ff
Fix song select carousel state capture
peppy Mar 3, 2026
c372f9b
Standardise display order of playcount / favourites
Joehuu Mar 3, 2026
b831bcb
Change beatmap card play count and date icon to solid to match web
Joehuu Mar 3, 2026
7dfbab2
Add nominations statistic to beatmap info overlay
Joehuu Mar 3, 2026
564b6eb
Add tooltips to beatmap info overlay statistics
Joehuu Mar 3, 2026
521a40d
Remove now unused footer buttons
peppy Feb 24, 2026
a7e6286
Fix a few remaining references to old song select
peppy Feb 25, 2026
f20d182
Update filter matching tests to be independent of old song select cla…
peppy Feb 25, 2026
ce542b0
Move components only used by beatmap set overlay local to namespace
peppy Feb 25, 2026
54a1417
Move leaderboards classes to gameplay namespace for now
peppy Feb 25, 2026
1a8d285
Remove all song select v1 files
peppy Feb 25, 2026
7e7421e
Update `TestSceneDeleteLocalScore` to use newer leaderboard
peppy Feb 25, 2026
b4f4063
Add special not regarding collection dropdown
peppy Feb 25, 2026
c28c649
Move v2 files to final location
peppy Feb 25, 2026
b1044b6
Update framework
peppy Mar 3, 2026
317be21
Final attempt to make copy labels work
peppy Mar 3, 2026
2539bd9
Merge pull request #36794 from peppy/fix-tooltips-not-displaying-custom
bdach Mar 3, 2026
d748470
Merge pull request #36795 from peppy/carousel-scrollbar-state-capture
bdach Mar 3, 2026
d37f594
Merge pull request #36796 from Joehuu/standardise-play-favourite-order
bdach Mar 3, 2026
e64e0f0
Fix beatmap set overlay not showing user tags at all
bdach Mar 3, 2026
2f96e96
Migrate realm populating online lookup source to use helper method fo…
bdach Mar 3, 2026
65b4913
Move constant closer to helper
bdach Mar 3, 2026
d9e1822
Add bool flag for checking tag vote threshold & utilise as required
bdach Mar 3, 2026
1aa42a7
Fix code quality
bdach Mar 3, 2026
a028f0b
Fix loose spacers at top of leaderboard score context menu (#36799)
bdach Mar 3, 2026
f74a21c
Merge branch 'master' into song-select-v1-salute
bdach Mar 4, 2026
43af89f
Remove outdated xmldoc
bdach Mar 4, 2026
4c87378
Merge pull request #36752 from peppy/song-select-v1-salute
bdach Mar 4, 2026
9b55e1d
Only show user tags above threshold by default
bdach Mar 4, 2026
459d5e8
Merge branch 'master' into tags-broken
peppy Mar 4, 2026
a0ecbd7
Merge pull request #36798 from bdach/tags-broken
peppy Mar 4, 2026
ae03262
Unimplement legacy compatibility method (#36812)
smoogipoo Mar 4, 2026
cab50e9
Reduce online user list panel churn on initial display (#36811)
peppy Mar 4, 2026
020e6fa
Reduce strain influence a bit more (#36813)
stanriders Mar 4, 2026
45945e3
Return tooltips to footer buttons on `MultiplayerMatchSongSelect` (#3…
diquoks Mar 5, 2026
28a18f7
Use web localisation on `LeaderboardScopeSelector` to match `osu-web`…
diquoks Mar 5, 2026
bb28936
Update resources
peppy Mar 5, 2026
4389745
Fix subscription leak from composer reloads (#36828)
bdach Mar 5, 2026
6b10ef8
Disable presenting scores in online song selects (#36826)
bdach Mar 5, 2026
b76a7e1
Refactor `ShearedButton` to allow easier relative sizing (#36802)
LiquidPL Mar 5, 2026
b945e2e
Adjust wide aim bonus cutoff after SpeedAim changes (#36835)
stanriders Mar 5, 2026
ba2ae32
Show first two slider repeats with the rest of the combo in Freeze Fr…
bdach Mar 6, 2026
e911217
Fix crash when clicking panels during recycling (#36457)
eeliogata Mar 6, 2026
c1555af
Only play nightcore hat sounds when tick rate is a multiple of 2 (#36…
eeliogata Mar 6, 2026
8fe63ad
Adjust padding and text size in editor inspector (#36843)
peppy Mar 6, 2026
04767f4
Allow editor 100% background dim (#36847)
peppy Mar 6, 2026
f9e863a
Remove "copy labels from linked issues" github workflow (#36854)
bdach Mar 6, 2026
482d31d
Fix "no tablet" settings display not updating after language change (…
peppy Mar 6, 2026
b46656e
Fix loading spinner not being centered correctly (#36849)
peppy Mar 6, 2026
0d74983
Fix rotation of certain objects breaking change states (#36852)
bdach Mar 6, 2026
16bc1de
Allow changing addition bank button state when objects are selected e…
bdach Mar 6, 2026
0fd0bd3
Consider comments in wiki's front matter YAML (#36758)
CloneWith Mar 6, 2026
0988552
Implement ranked play (#36819)
smoogipoo Mar 6, 2026
de9cf75
Fix `LoadingLayer` centering
peppy Mar 6, 2026
ab2c91e
Slightly increase TD penalty (#36855)
stanriders Mar 6, 2026
c4402e9
Fix potential crash due to handling scores in leaderboard post-dispos…
peppy Mar 6, 2026
8efb10d
Increase high cs bonus in SpeedAim (#36856)
stanriders Mar 6, 2026
14ae231
Fix a few flaky tests
peppy Mar 7, 2026
e3a0464
Update a few sample playback usages to use new helper method
peppy Mar 7, 2026
7227afe
Fix missed using statement
peppy Mar 8, 2026
e4f7bd5
Fix score delete dialog not using user-facing rank terminology (#36861)
Joehuu Mar 9, 2026
a344408
Fix possible exception (#36895)
smoogipoo Mar 9, 2026
3b86d15
Mute warning samples during stage fast forwards (#36894)
smoogipoo Mar 9, 2026
a7860dd
Fix timeline selection box showing rotation handles
bdach Mar 9, 2026
3378e60
Merge pull request #36898 from bdach/oops
peppy Mar 9, 2026
c2e9b05
Add basic flow evaluation (#36902)
stanriders Mar 9, 2026
f3d97c0
Penalize angle repetition depending on the difference between vectors…
kwotaq Mar 9, 2026
277d53a
Adjust all selected hold notes if they have the same StartTime and Du…
64ArthurAraujo Mar 10, 2026
de0e2c3
Merge branch 'master' into pp-dev
peppy Mar 10, 2026
14bde85
Fix song select navigation with home/end keys (#36879)
Rudicito Mar 10, 2026
caffc72
Do not forcibly log out user if user retrieval fails with a server er…
bdach Mar 10, 2026
321e698
Improve support for import & export flows on Android via using system…
bdach Mar 10, 2026
054ae29
Extract user overlay actions button component (#36236)
LiquidPL Mar 10, 2026
1b48894
Localise some more `PopupDialog`s (#36890)
diquoks Mar 10, 2026
9105fc1
Fix editor not updating titlebar with new difficulty name after renam…
peppy Mar 10, 2026
14743a1
Fix "Deselect all" mods button becoming enabled when system mods are …
peppy Mar 10, 2026
87b37fd
Fix volume slider title text horizontal scaling on some languages (#3…
MayoCollector Mar 10, 2026
e9f5975
Fix Hidden mod perfect stacks buff for osu! reading difficulty (#36918)
Rian8337 Mar 10, 2026
c2c8b90
Remove `OsuStrainSkill` (#36917)
stanriders Mar 10, 2026
29e089c
Organize osu! difficulty evaluators a bit better (#36921)
stanriders Mar 10, 2026
6c9a729
Adjust `Speed` harmonic summation params (#36923)
stanriders Mar 10, 2026
b0ee82d
Remove `OsuStrainUtils` (#36924)
tsunyoku Mar 11, 2026
ce571e3
Ranked Play: Fix casing inconsistency in results screen (#36931)
smoogipoo Mar 11, 2026
4c0657f
Ranked Play: Add countdown timer to all screens (#36930)
smoogipoo Mar 11, 2026
d0d5d97
Add replay / spectator mode scrolling text back (#36911)
peppy Mar 11, 2026
390fc52
Fix avatar sometimes showing as guest in beatmap detail comment conta…
cdwcgt Mar 11, 2026
94c9f16
Update editor hitsound icons with new designs from Adarin (#36940)
peppy Mar 12, 2026
365b88b
Ensure folder migration screen uses a blank background to avoid reada…
peppy Mar 12, 2026
28fbb83
Fix Simplified Rhythm mod breaking diffcalc when applied to some maps…
bdach Mar 12, 2026
1e01001
Use current object's `Preempt` when retrieving past visible objects i…
Rian8337 Mar 12, 2026
2380fcd
Reuse existing triangles in `Triangles` background (#36951)
EVAST9919 Mar 13, 2026
fd66d7c
Localise some strings on `SecondFactorAuthForm` (#36961)
diquoks Mar 14, 2026
ed905b7
Add models for new tournament-related multiplayer operations (#36953)
bdach Mar 14, 2026
39912e0
Fix weird variable naming
peppy Mar 14, 2026
73644d8
Attempt to fix mod output including build output
peppy Mar 16, 2026
5b8067a
Restore precision buff in Agility (#36968)
stanriders Mar 16, 2026
a996261
Update lots of packages (#36996)
peppy Mar 16, 2026
00c017e
Merge branch 'master' into pp-dev
smoogipoo Mar 16, 2026
abf1a00
Apply a few minor fixes to flow aim evaluation (#36999)
tsunyoku Mar 16, 2026
fc82dac
Remove slider velocity considerations from previous object velocity (…
stanriders Mar 16, 2026
09bcef1
Adjust Aim RX multiplier (#36985)
stanriders Mar 16, 2026
fadb1c3
Calculate clock time when creating difficulty hit objects (#36962)
stanriders Mar 16, 2026
b538c1d
Change the aim scaling slightly (#36967)
stanriders Mar 16, 2026
210464d
Merge branch 'pp-dev' into fc_time_with_penalty
Natelytle Mar 19, 2026
9299f1c
Quick update thing
Natelytle Mar 20, 2026
c7eeccc
Make miss penalty slightly harsher on first misses (#37040)
stanriders Mar 22, 2026
ef37b94
Merge branch 'pp-dev' into fc_time_with_penalty
Natelytle Mar 22, 2026
8a78900
blonce
Natelytle Mar 22, 2026
22ac12c
Undo Agility strain influence rescaling (#37081)
stanriders Mar 24, 2026
0071c82
Adjust high CS bonuses after all the distance-time rescaling (#37088)
stanriders Mar 25, 2026
0f37874
Increase Aim strain decay base (#37099)
stanriders Mar 25, 2026
b31d1b3
Account for alternating angles in reading angle factor (#36466)
Givikap120 Mar 26, 2026
b0047e4
Use variable-length strains to fix chunking-related issues (#33351)
Finadoggie Mar 27, 2026
4ce4bca
Very slight overall aim buff (#37134)
stanriders Mar 27, 2026
e082550
Aim balancing (#37147)
stanriders Mar 29, 2026
c4ef081
Refactor Reading strain to match the rest of the skills (#37010)
kwotaq Mar 29, 2026
f6223d1
Move Aim mod-related difficulty adjustments to after the probability …
stanriders Apr 3, 2026
5049ac8
Refactor SnapAimEvaluator bonuses for better readability (#37119)
kwotaq Apr 12, 2026
b20b367
Fix snap angle repetition (#37286)
stanriders Apr 13, 2026
a057138
Fix low distance snap/flow relation (#37306)
stanriders Apr 15, 2026
5aff5a4
Rebalance TC Bonus (#36555)
piiidosu Apr 16, 2026
16089ad
add deviation breakdown past a certain difficulty
TextAdventurer12 Apr 17, 2026
ce61c4c
Merge remote-tracking branch 'ppy/pp-dev' into fc-time-limit
kwotaq Apr 17, 2026
c175a54
merhe fix
kwotaq Apr 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .config/dotnet-tools.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
]
},
"ppy.localisationanalyser.tools": {
"version": "2024.802.0",
"version": "2025.1208.0",
"commands": [
"localisation"
]
Expand Down
6 changes: 5 additions & 1 deletion .github/workflows/update-web-mod-definitions.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,12 @@ jobs:
run: ./UseLocalOsu.sh
working-directory: ./osu-tools

- name: Build tools
run: dotnet build PerformanceCalculator --nologo --verbosity quiet
working-directory: ./osu-tools

- name: Regenerate mod definitions
run: dotnet run --project PerformanceCalculator -- mods > ../osu-web/database/mods.json
run: dotnet run --project PerformanceCalculator --no-build -- mods > ../osu-web/database/mods.json
working-directory: ./osu-tools

- name: Create pull request with changes
Expand Down
7 changes: 4 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,7 @@ When in doubt, it's probably best to start with a discussion first. We will esca

While pull requests from unaffiliated contributors are welcome, please note that due to significant community interest and limited review throughput, the core team's primary focus is on the issues which are currently [on the roadmap](https://github.com/orgs/ppy/projects/7/views/6). Reviewing PRs that fall outside of the scope of the roadmap is done on a best-effort basis, so please be aware that it may take a while before a core maintainer gets around to review your change.

The [issue tracker](https://github.com/ppy/osu/issues) should provide plenty of issues to start with. We also have a [`good first issue`](https://github.com/ppy/osu/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) label, although from experience it is not used very often, as it is relatively rare that we can spot an issue that will definitively be a good first issue for a new contributor regardless of their programming experience.

In the case of simple issues, a direct PR is okay. However, if you decide to work on an existing issue which doesn't seem trivial, **please ask us first**. This way we can try to estimate if it is a good fit for you and provide the correct direction on how to address it. In addition, note that while we do not rule out external contributors from working on roadmapped issues, we will generally prefer to handle them ourselves unless they're not very time sensitive.
The [issue tracker](https://github.com/ppy/osu/issues) should provide plenty of issues to start with. In the case of simple issues, a direct PR is okay. However, if you decide to work on an existing issue which doesn't seem trivial, **please ask us first**. This way we can try to estimate if it is a good fit for you and provide the correct direction on how to address it. In addition, note that while we do not rule out external contributors from working on roadmapped issues, we will generally prefer to handle them ourselves unless they're not very time sensitive.

If you'd like to propose a subjective change to one of the visual aspects of the game, or there is a bigger task you'd like to work on, but there is no corresponding issue or discussion thread yet for it, **please open a discussion or issue first** to avoid wasted effort. This in particular applies if you want to work on [one of the available designs from the osu! Figma master library](https://www.figma.com/file/VIkXMYNPMtQem2RJg9k2iQ/Master-Library).

Expand All @@ -73,6 +71,9 @@ Aside from the above, below is a brief checklist of things to watch out when you
After you're done with your changes and you wish to open the PR, please observe the following recommendations:

- Please submit the pull request from a [topic branch](https://git-scm.com/book/en/v2/Git-Branching-Branching-Workflows#_topic_branch) (not `master`), and keep the *Allow edits from maintainers* check box selected, so that we can push fixes to your PR if necessary.
- Please pick the following target branch for your pull request:
- `pp-dev`, if the change impacts star rating or performance points calculations for any of the rulesets,
- `master`, otherwise.
- Please avoid pushing untested or incomplete code.
- Please do not force-push or rebase unless we ask you to.
- Please do not merge `master` continually if there are no conflicts to resolve. We will do this for you when the change is ready for merge.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
</PropertyGroup>
<ItemGroup Label="Package References">
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
<PackageReference Include="NUnit" Version="3.14.0" />
<PackageReference Include="NUnit3TestAdapter" Version="4.6.0" />
<PackageReference Include="NUnit" Version="4.5.1" />
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\osu.Game.Rulesets.EmptyFreeform\osu.Game.Rulesets.EmptyFreeform.csproj" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@ public EmptyFreeformDifficultyCalculator(IRulesetInfo ruleset, IWorkingBeatmap b
{
}

protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills, double clockRate)
protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills)
{
return new DifficultyAttributes(mods, 0);
}

protected override IEnumerable<DifficultyHitObject> CreateDifficultyHitObjects(IBeatmap beatmap, double clockRate) => Enumerable.Empty<DifficultyHitObject>();
protected override IEnumerable<DifficultyHitObject> CreateDifficultyHitObjects(IBeatmap beatmap, Mod[] mods) => Enumerable.Empty<DifficultyHitObject>();

protected override Skill[] CreateSkills(IBeatmap beatmap, Mod[] mods, double clockRate) => Array.Empty<Skill>();
protected override Skill[] CreateSkills(IBeatmap beatmap, Mod[] mods) => Array.Empty<Skill>();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
</PropertyGroup>
<ItemGroup Label="Package References">
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
<PackageReference Include="NUnit" Version="3.14.0" />
<PackageReference Include="NUnit3TestAdapter" Version="4.6.0" />
<PackageReference Include="NUnit" Version="4.5.1" />
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\osu.Game.Rulesets.Pippidon\osu.Game.Rulesets.Pippidon.csproj" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@ public PippidonDifficultyCalculator(IRulesetInfo ruleset, IWorkingBeatmap beatma
{
}

protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills, double clockRate)
protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills)
{
return new DifficultyAttributes(mods, 0);
}

protected override IEnumerable<DifficultyHitObject> CreateDifficultyHitObjects(IBeatmap beatmap, double clockRate) => Enumerable.Empty<DifficultyHitObject>();
protected override IEnumerable<DifficultyHitObject> CreateDifficultyHitObjects(IBeatmap beatmap, Mod[] mods) => Enumerable.Empty<DifficultyHitObject>();

protected override Skill[] CreateSkills(IBeatmap beatmap, Mod[] mods, double clockRate) => Array.Empty<Skill>();
protected override Skill[] CreateSkills(IBeatmap beatmap, Mod[] mods) => Array.Empty<Skill>();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
</PropertyGroup>
<ItemGroup Label="Package References">
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
<PackageReference Include="NUnit" Version="3.14.0" />
<PackageReference Include="NUnit3TestAdapter" Version="4.6.0" />
<PackageReference Include="NUnit" Version="4.5.1" />
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\osu.Game.Rulesets.EmptyScrolling\osu.Game.Rulesets.EmptyScrolling.csproj" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@ public EmptyScrollingDifficultyCalculator(IRulesetInfo ruleset, IWorkingBeatmap
{
}

protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills, double clockRate)
protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills)
{
return new DifficultyAttributes(mods, 0);
}

protected override IEnumerable<DifficultyHitObject> CreateDifficultyHitObjects(IBeatmap beatmap, double clockRate) => Enumerable.Empty<DifficultyHitObject>();
protected override IEnumerable<DifficultyHitObject> CreateDifficultyHitObjects(IBeatmap beatmap, Mod[] mods) => Enumerable.Empty<DifficultyHitObject>();

protected override Skill[] CreateSkills(IBeatmap beatmap, Mod[] mods, double clockRate) => Array.Empty<Skill>();
protected override Skill[] CreateSkills(IBeatmap beatmap, Mod[] mods) => Array.Empty<Skill>();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
</PropertyGroup>
<ItemGroup Label="Package References">
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
<PackageReference Include="NUnit" Version="3.14.0" />
<PackageReference Include="NUnit3TestAdapter" Version="4.6.0" />
<PackageReference Include="NUnit" Version="4.5.1" />
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\osu.Game.Rulesets.Pippidon\osu.Game.Rulesets.Pippidon.csproj" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@ public PippidonDifficultyCalculator(IRulesetInfo ruleset, IWorkingBeatmap beatma
{
}

protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills, double clockRate)
protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills)
{
return new DifficultyAttributes(mods, 0);
}

protected override IEnumerable<DifficultyHitObject> CreateDifficultyHitObjects(IBeatmap beatmap, double clockRate) => Enumerable.Empty<DifficultyHitObject>();
protected override IEnumerable<DifficultyHitObject> CreateDifficultyHitObjects(IBeatmap beatmap, Mod[] mods) => Enumerable.Empty<DifficultyHitObject>();

protected override Skill[] CreateSkills(IBeatmap beatmap, Mod[] mods, double clockRate) => Array.Empty<Skill>();
protected override Skill[] CreateSkills(IBeatmap beatmap, Mod[] mods) => Array.Empty<Skill>();
}
}
2 changes: 1 addition & 1 deletion osu.Android.props
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
<EmbedAssembliesIntoApk>true</EmbedAssembliesIntoApk>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="ppy.osu.Framework.Android" Version="2025.1028.0" />
<PackageReference Include="ppy.osu.Framework.Android" Version="2026.310.0" />
</ItemGroup>
<PropertyGroup>
<!-- Fody does not handle Android build well, and warns when unchanged.
Expand Down
21 changes: 9 additions & 12 deletions osu.Android/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,13 @@
android:supportsRtl="true"
android:label="osu!"
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher" />
<!-- for editor usage -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<!--
READ_MEDIA_* permissions are available only on API 33 or greater. Devices with older android versions
don't understand the new permissions, so request the old READ_EXTERNAL_STORAGE permission to get storage access.
Since the old permission has no effect on >= API 33, don't request it.

Care needs to be taken to ensure runtime permission checks target the correct permission for the API level.
-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32"/>
android:roundIcon="@mipmap/ic_launcher">
<provider android:name="androidx.core.content.FileProvider"
android:authorities="sh.ppy.osulazer.fileprovider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
</application>
</manifest>
6 changes: 6 additions & 0 deletions osu.Android/Resources/xml/filepaths.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<paths>
<!-- https://developer.android.com/reference/androidx/core/content/FileProvider -->
<external-files-path path="logs" name="logs" />
<external-files-path path="exports" name="exports" />
</paths>
10 changes: 7 additions & 3 deletions osu.Desktop/OsuGameDesktop.cs
Original file line number Diff line number Diff line change
Expand Up @@ -146,9 +146,13 @@ public override void SetHost(GameHost host)
{
base.SetHost(host);

var iconStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(GetType(), "lazer.ico");
if (iconStream != null)
host.Window.SetIconFromStream(iconStream);
// Apple operating systems use a better icon provided via external assets.
if (!RuntimeInfo.IsApple)
{
var iconStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(GetType(), "lazer.ico");
if (iconStream != null)
host.Window.SetIconFromStream(iconStream);
}

host.Window.Title = Name;
}
Expand Down
3 changes: 2 additions & 1 deletion osu.Desktop/Security/ElevatedPrivilegesChecker.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
using osu.Framework.Graphics;
using osu.Framework.Graphics.Sprites;
using osu.Game.Graphics;
using osu.Game.Localisation;
using osu.Game.Overlays;
using osu.Game.Overlays.Notifications;

Expand All @@ -32,7 +33,7 @@ private partial class ElevatedPrivilegesNotification : SimpleNotification
{
public ElevatedPrivilegesNotification()
{
Text = $"Running osu! as {(RuntimeInfo.IsUnix ? "root" : "administrator")} does not improve performance, may break integrations and poses a security risk. Please run the game as a normal user.";
Text = NotificationsStrings.ElevatedPrivileges(RuntimeInfo.IsUnix ? "root" : "Administrator");
}

[BackgroundDependencyLoader]
Expand Down
4 changes: 2 additions & 2 deletions osu.Desktop/osu.Desktop.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@
<ProjectReference Include="..\osu.Game.Rulesets.Taiko\osu.Game.Rulesets.Taiko.csproj" />
</ItemGroup>
<ItemGroup Label="Package References">
<PackageReference Include="System.IO.Packaging" Version="9.0.2" />
<PackageReference Include="DiscordRichPresence" Version="1.2.1.24" />
<PackageReference Include="System.IO.Packaging" Version="10.0.5" />
<PackageReference Include="DiscordRichPresence" Version="1.6.1.70" />
<PackageReference Include="Velopack" Version="0.0.1298" />
</ItemGroup>
<ItemGroup Label="Resources">
Expand Down
6 changes: 3 additions & 3 deletions osu.Game.Benchmarks/BenchmarkCarouselFilter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
using osu.Game.Beatmaps;
using osu.Game.Rulesets;
using osu.Game.Screens.Select;
using osu.Game.Screens.Select.Carousel;
using osu.Game.Tests.NonVisual.Filtering;

namespace osu.Game.Benchmarks
{
Expand Down Expand Up @@ -42,7 +42,7 @@ public class BenchmarkCarouselFilter : BenchmarkTest
Status = BeatmapOnlineStatus.Loved
};

private CarouselBeatmap carouselBeatmap = null!;
private FilterMatchingTest.CarouselBeatmap carouselBeatmap = null!;
private FilterCriteria criteria1 = null!;
private FilterCriteria criteria2 = null!;
private FilterCriteria criteria3 = null!;
Expand All @@ -55,7 +55,7 @@ public override void SetUp()
var beatmap = getExampleBeatmap();
beatmap.OnlineID = 20201010;
beatmap.BeatmapSet = new BeatmapSetInfo { OnlineID = 1535 };
carouselBeatmap = new CarouselBeatmap(beatmap);
carouselBeatmap = new FilterMatchingTest.CarouselBeatmap(beatmap);
criteria1 = new FilterCriteria();
criteria2 = new FilterCriteria
{
Expand Down
6 changes: 3 additions & 3 deletions osu.Game.Benchmarks/osu.Game.Benchmarks.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.14.0" />
<PackageReference Include="nunit" Version="3.14.0" />
<PackageReference Include="NUnit3TestAdapter" Version="4.6.0" />
<PackageReference Include="BenchmarkDotNet" Version="0.15.8" />
<PackageReference Include="nunit" Version="4.5.1" />
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
</ItemGroup>

<ItemGroup>
Expand Down
4 changes: 1 addition & 3 deletions osu.Game.Rulesets.Catch.Tests.iOS/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,9 @@
<string>UIInterfaceOrientationLandscapeRight</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
</array>
<key>XSAppIconAssets</key>
<string>Assets.xcassets/AppIcon.appiconset</string>
<key>UIApplicationSupportsIndirectInputEvents</key>
<true/>
<key>CADisableMinimumFrameDurationOnPhone</key>
<true/>
</dict>
</plist>
</plist>
7 changes: 4 additions & 3 deletions osu.Game.Rulesets.Catch.Tests/CatchSkinColourDecodingTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
// See the LICENCE file in the repository root for full licence text.

using NUnit.Framework;
using NUnit.Framework.Legacy;
using osu.Framework.IO.Stores;
using osu.Game.Rulesets.Catch.Skinning;
using osu.Game.Rulesets.Catch.Skinning.Legacy;
Expand All @@ -21,9 +22,9 @@ public void TestCatchSkinColourDecoding()
var skinSource = new SkinProvidingContainer(rawSkin);
var skin = new CatchLegacySkinTransformer(skinSource);

Assert.AreEqual(new Color4(232, 185, 35, 255), skin.GetConfig<CatchSkinColour, Color4>(CatchSkinColour.HyperDash)?.Value);
Assert.AreEqual(new Color4(232, 74, 35, 255), skin.GetConfig<CatchSkinColour, Color4>(CatchSkinColour.HyperDashAfterImage)?.Value);
Assert.AreEqual(new Color4(0, 255, 255, 255), skin.GetConfig<CatchSkinColour, Color4>(CatchSkinColour.HyperDashFruit)?.Value);
ClassicAssert.AreEqual(new Color4(232, 185, 35, 255), skin.GetConfig<CatchSkinColour, Color4>(CatchSkinColour.HyperDash)?.Value);
ClassicAssert.AreEqual(new Color4(232, 74, 35, 255), skin.GetConfig<CatchSkinColour, Color4>(CatchSkinColour.HyperDashAfterImage)?.Value);
ClassicAssert.AreEqual(new Color4(0, 255, 255, 255), skin.GetConfig<CatchSkinColour, Color4>(CatchSkinColour.HyperDashFruit)?.Value);
}

private class TestLegacySkin : LegacySkin
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\osu.TestProject.props" />
<ItemGroup Label="Package References">
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
<PackageReference Include="NUnit" Version="3.14.0" />
<PackageReference Include="NUnit3TestAdapter" Version="4.6.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<PackageReference Include="NUnit" Version="4.5.1" />
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
</ItemGroup>
<PropertyGroup Label="Project">
<OutputType>WinExe</OutputType>
Expand Down
9 changes: 7 additions & 2 deletions osu.Game.Rulesets.Catch/CatchRuleset.cs
Original file line number Diff line number Diff line change
Expand Up @@ -176,15 +176,20 @@ public override IEnumerable<Mod> GetModsFor(ModType type)

public override Drawable CreateIcon() => new SpriteIcon { Icon = OsuIcon.RulesetCatch };

protected override IEnumerable<HitResult> GetValidHitResults()
public override IEnumerable<HitResult> GetValidHitResults()
{
return new[]
{
HitResult.Great,
HitResult.Miss,

HitResult.LargeTickHit,
HitResult.LargeTickMiss,
HitResult.SmallTickHit,
HitResult.SmallTickMiss,
HitResult.LargeBonus,
HitResult.IgnoreHit,
HitResult.IgnoreMiss,
};
}

Expand Down Expand Up @@ -300,7 +305,7 @@ public override IEnumerable<RulesetBeatmapAttribute> GetBeatmapAttributesForDisp
Description = "Affects how early fruits fade in on the screen.",
AdditionalMetrics =
[
new RulesetBeatmapAttribute.AdditionalMetric("Fade-in time", LocalisableString.Interpolate($@"{IBeatmapDifficultyInfo.DifficultyRange(effectiveDifficulty.ApproachRate, CatchHitObject.PREEMPT_RANGE):#,0.##} ms"))
new RulesetBeatmapAttribute.AdditionalMetric("Fade-in time", LocalisableString.Interpolate($@"{IBeatmapDifficultyInfo.DifficultyRangeInt(effectiveDifficulty.ApproachRate, CatchHitObject.PREEMPT_RANGE):#,0.##} ms"))
]
};
yield return new RulesetBeatmapAttribute(SongSelectStrings.HPDrain, @"HP", originalDifficulty.DrainRate, effectiveDifficulty.DrainRate, 10)
Expand Down
Loading
Loading