1
0
mirror of https://github.com/ppy/osu.git synced 2024-11-15 22:37:26 +08:00
Commit Graph

65036 Commits

Author SHA1 Message Date
Dean Herbert
093001438c
Merge branch 'master' into add-minimise-on-focus-loss-setting 2024-01-15 14:05:25 +09:00
Dean Herbert
0b5cc8fb10
Fix gameplay counter textures not being cached ahead of time
Part of https://github.com/ppy/osu/issues/26535.
2024-01-15 14:01:21 +09:00
Dean Herbert
0f521d6daf
Merge pull request #26530 from Susko3/expand-toolbar-button-click-target
Fix toolbar buttons not being clickable at screen edges
2024-01-15 13:51:20 +09:00
Susko3
47b385c552 Move toolbar button padding to a const 2024-01-14 21:13:00 +01:00
Susko3
724b4c9507 Expand click target of toolbar buttons and clock 2024-01-14 21:09:49 +01:00
Bartłomiej Dach
e3ffea1b12
Merge pull request #26528 from peppy/update-framework
Update framework
2024-01-14 15:18:14 +01:00
Dean Herbert
4c6c849d26
Merge pull request #26522 from bdach/slider-tick-display
Show "slider end" statistic next to slider ticks on results screen (and use correct colour)
2024-01-14 23:17:40 +09:00
Dean Herbert
a8b301c618
Merge pull request #26526 from bdach/fix-date-display-failing
Fix date failing to display on leaderboard for some scores with weird datetimes
2024-01-14 22:56:32 +09:00
Dean Herbert
fc1cef1ffc
Merge pull request #26525 from bdach/flashlight-slider-dim-before-start-time
Fix flashlight dim being applied before slider start time
2024-01-14 22:45:29 +09:00
Salman Ahmed
13060c8698
Merge branch 'master' into slider-tick-display 2024-01-14 16:35:34 +03:00
Dean Herbert
fb4f8d0834
Update framework 2024-01-14 22:31:48 +09:00
Bartłomiej Dach
baf3867e17
Fix date failing to display on leaderboard for some scores with weird datetimes
Addresses https://github.com/ppy/osu/discussions/26517.

The score reported has a datetime of 0001/1/1 05:00:00 AM.

Bit of a dodge fix but maybe fine?
2024-01-14 13:52:39 +01:00
Dean Herbert
6a1b03ebe7
Merge pull request #26521 from ppy/revert-26382-editor-more-frame-stable
Revert "Keep editor in frame stable mode when possible"
2024-01-14 21:19:03 +09:00
Bartłomiej Dach
0b2b1fc588
Fix flashlight dim being applied before slider start time
Closes https://github.com/ppy/osu/issues/26515.

Compare https://github.com/ppy/osu/pull/26053.
2024-01-14 13:05:02 +01:00
Bartłomiej Dach
f85e6add8e
Add failing test case 2024-01-14 13:03:03 +01:00
Bartłomiej Dach
1cd7656f33
Reorder hit results so that SliderTailHit is next to SmallTickHit
This addresses https://github.com/ppy/osu/discussions/26507.
2024-01-14 09:33:04 +01:00
Bartłomiej Dach
eecd868d66
Use darker blue for SliderTailHit result 2024-01-14 09:24:50 +01:00
Bartłomiej Dach
b7d74fda88
Revert "Keep editor in frame stable mode when possible" 2024-01-14 09:10:39 +01:00
Bartłomiej Dach
cfeab790b5
Merge pull request #26520 from peppy/fix-gameplay-leaderboads
Fix scores not showing up on leaderboards during gameplay
2024-01-14 08:29:52 +01:00
Dean Herbert
68496f7a0e
Fix scores not showing up on leaderboards during gameplay 2024-01-14 15:13:20 +09:00
Dean Herbert
779e509922
Merge pull request #26511 from bdach/i-wish-i-were-a-carpenter-right-now
Fix broken windows installer
2024-01-14 13:06:57 +09:00
OliBomby
243b7b6fda fix code quality 2024-01-13 23:17:38 +01:00
OliBomby
83e108071a fix wrong path type being displayed 2024-01-13 22:51:33 +01:00
OliBomby
39908f5425 remove Validating event and instead call validation explicitly on edits 2024-01-13 22:39:09 +01:00
Bartłomiej Dach
1e3c332658
Fix broken installer
Closes https://github.com/ppy/osu/issues/26510.

Time for a rant.

Technically, this "broke" with 9e8d07d314,
but it is actually an end result of upstream behaviours that I am
failing to find a better description for than "utterly broken".

Squirrel (the installer we use) has unit tests. Which is great, power
to them. However, the method in which that testing is implemented leads
to epic levels of WTF breakage.

To determine whether Squirrel is being tested right now, it is checking
all currently loaded assemblies, and determining that if any loaded
assembly contains the magic string of "NUNIT" - among others - it must
be being tested right now:

    2442721748/src/Squirrel/SimpleSplat/PlatformModeDetector.cs (L17-L32)

If one assumes that there is no conceivable way that an NUnit assembly
*may* be loaded *without* it being a test context, this *may* seem sane.
Foreshadowing.

(Now, to avoid being hypocritical, we also do this, *but* we do this
by checking if the *entry* assembly is an NUnit:

    92db55a527/osu.Framework/Development/DebugUtils.cs (L16-L34)

which seems *much* saner, no?)

Now, why did this break with 9e8d07d314
*specifically*, you might wonder?

Well the reason is this line:

    3d3f58c252/osu.Desktop/NVAPI.cs (L183)

Yes you are reading this correctly, it's not NVAPI anything itself that
breaks this, it is *a log statement*. To be precise, what the log
statement *does* to provoke this, is calling into framework. That causes
the framework assembly to load, *which* transitively loads the
`nunit.framework` assembly.

(If you ever find yourself wanting to find out this sort of cursed
knowledge - I hope you never need to - you can run something along
the lines of

    dotnet-trace collect --providers Microsoft-Windows-DotNETRuntime:4 -- .\osu!.exe

then open the resulting trace in PerfView, and then search the
`Microsoft-Windows-DotNETRuntime/AssemblyLoader/Start` log for
the cursed assembly. In this case, the relevant entry said something
along the lines of

    HasStack="True"
    ThreadID="23,924"
    ProcessorNumber="0"
    ClrInstanceID="6"
    AssemblyName="nunit.framework, Version=3.13.3.0, Culture=neutral, PublicKeyToken=2638cd05610744eb"
    AssemblyPath=""
    RequestingAssembly="osu.Framework, Version=2024.113.0.0, Culture=neutral, PublicKeyToken=null"
    AssemblyLoadContext="Default"
    RequestingAssemblyLoadContext="Default"
    ActivityID="/#21032/1/26/"

Either that or just comment the log line for kicks. But the above
is *much* faster.)

Now, what *happens* if Squirrel "detects" that it is being "tested"?
Well, it will refuse to close after executing the "hooks" defined via
`SquirrelAwareApp`:

    2442721748/src/Squirrel/SquirrelAwareApp.cs (L85-L88)

and it will also refuse to create version shortcuts:

    2442721748/src/Squirrel/UpdateManager.Shortcuts.cs (L63-L65)

Sounds familiar, don't it?

There are days on which I tire of computers. Today is one of them.
2024-01-13 22:04:21 +01:00
OliBomby
da4d83f8ca remove the need for caching points in segment 2024-01-13 21:41:33 +01:00
OliBomby
b4f9878b46 working jank solution 2024-01-13 20:39:49 +01:00
OliBomby
f5d6d52d4c Move logic for caching segments and updating path types to PathControlPointVisualiser 2024-01-13 14:47:40 +01:00
OliBomby
ce643aa68f revert overwriting Position getter in SliderTailCircle
It would have very weird implications when combined with the position bindable which would be all wrong and stuff
2024-01-13 13:54:04 +01:00
OliBomby
fca9b1f536 Fix so it reacts to PathVersion with Scheduler 2024-01-13 12:50:39 +01:00
Salman Ahmed
c514550dfa Fix multiplayer potentially selecting mods of wrong ruleset when starting match 2024-01-13 11:17:08 +03:00
Salman Ahmed
4cde8685d3 Add failing test case 2024-01-13 11:16:22 +03:00
Salman Ahmed
aebf246f62 Change select all mod buttons to check ValidForSelection instead of directly checking system mods 2024-01-13 09:43:50 +03:00
Salman Ahmed
c476843a83 Mark system mods as invalid for selection in mod select overlay 2024-01-13 09:43:20 +03:00
Salman Ahmed
5303023e57 Add failing test case and fix selection assertion 2024-01-13 09:42:23 +03:00
Dean Herbert
3d3f58c252
Merge pull request #26486 from peppy/update-framework
Update framework
2024-01-13 15:19:49 +09:00
Dean Herbert
0934cff501
Workaround implementation oversight
See https://github.com/ppy/osu-framework/pull/6130.
2024-01-13 15:19:02 +09:00
Dean Herbert
98fe9f32d8
Merge pull request #26484 from bdach/only-validate-playback-rate-when-submitting
Only validate playback rate when in submission context
2024-01-13 12:10:55 +09:00
OliBomby
e1186080b8 simplify scheduling logic 2024-01-13 02:24:33 +01:00
OliBomby
5fa7f6ec53 make drawables that update from path version update once per frame 2024-01-13 02:21:32 +01:00
OliBomby
882f490390 lazy load slider tail position 2024-01-13 01:32:37 +01:00
Dean Herbert
58ade18c06
Update framework 2024-01-13 04:53:26 +09:00
Bartłomiej Dach
6572fa4378
Only validate playback rate when in submission context
Temporary workaround for https://github.com/ppy/osu/issues/26404.

It appears that some audio files do not behave well with BASS, leading
BASS to report a contradictory state of affairs (i.e. a track that is
in playing state but also not progressing). This appears to be related
to seeking specifically, therefore only enable the validation of
playback rate in the most sensitive contexts, namely when any sort of
score submission is involved.
2024-01-12 14:59:15 +01:00
Dean Herbert
02975b9498
Merge pull request #26471 from bdach/fix-incorrect-difficulty-peppy-stars
Fix incorrect score conversion on selected beatmaps due to incorrect `difficultyPeppyStars` rounding
2024-01-12 22:34:54 +09:00
Bartłomiej Dach
593ca9f84f
Merge pull request #26468 from frenzibyte/fix-skin-parsing
Fix mania skin array decoder not handling malformed entries rigorously
2024-01-12 12:52:02 +01:00
Bartłomiej Dach
da29faffd0
Merge pull request #26455 from peppy/health-less-value-changed
Remove bindable overheads of health displays
2024-01-11 11:01:53 +01:00
Bartłomiej Dach
b65d3baa8a
Merge branch 'master' into health-less-value-changed 2024-01-11 10:33:08 +01:00
Bartłomiej Dach
600e4b6ef3
Adjust skinnable health display test scene for usability 2024-01-11 10:17:32 +01:00
Bartłomiej Dach
861080d3ae
Move simulated drain to separate test case
Having it on at all times was causing other tests to fail.
2024-01-11 10:04:37 +01:00
Bartłomiej Dach
7c9adc7ad3
Fix incorrect score conversion on selected beatmaps due to incorrect difficultyPeppyStars rounding
Fixes issue that occurs on *about* 246 beatmaps and was first described
by me on discord:

    https://discord.com/channels/188630481301012481/188630652340404224/1154367700378865715

and then rediscovered again during work on
https://github.com/ppy/osu/pull/26405:

    https://gist.github.com/bdach/414d5289f65b0399fa8f9732245a4f7c#venenog-on-ultmate-end-by-blacky-overdose-631

It so happens that in stable, due to .NET Framework internals, float
math would be performed using x87 registers and opcodes.
.NET (Core) however uses SSE instructions on 32- and 64-bit words.
x87 registers are _80 bits_ wide. Which is notably wider than _both_
float and double. Therefore, on a significant number of beatmaps,
the rounding would not produce correct values due to insufficient
precision.

See following gist for corroboration of the above:

    https://gist.github.com/bdach/dcde58d5a3607b0408faa3aa2b67bf10

Thus, to crudely - but, seemingly accurately, after checking across
all ranked maps - emulate this, use `decimal`, which is slow, but has
bigger precision than `double`. The single known exception beatmap
in whose case this results in an incorrect result is

    https://osu.ppy.sh/beatmapsets/1156087#osu/2625853

which is considered an "acceptable casualty" of sorts.

Doing this requires some fooling of the compiler / runtime (see second
inline comment in new method). To corroborate that this is required,
you can try the following code snippet:

    Console.WriteLine(string.Join(' ', BitConverter.GetBytes(1.3f).Select(x => x.ToString("X2"))));
    Console.WriteLine(string.Join(' ', BitConverter.GetBytes(1.3).Select(x => x.ToString("X2"))));
    Console.WriteLine();

    decimal d1 = (decimal)1.3f;
    decimal d2 = (decimal)1.3;
    decimal d3 = (decimal)(double)1.3f;

    Console.WriteLine(string.Join(' ', decimal.GetBits(d1).SelectMany(BitConverter.GetBytes).Select(x => x.ToString("X2"))));
    Console.WriteLine(string.Join(' ', decimal.GetBits(d2).SelectMany(BitConverter.GetBytes).Select(x => x.ToString("X2"))));
    Console.WriteLine(string.Join(' ', decimal.GetBits(d3).SelectMany(BitConverter.GetBytes).Select(x => x.ToString("X2"))));

which will print

    66 66 A6 3F
    CD CC CC CC CC CC F4 3F

    0D 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00
    0D 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00
    8C 5D 89 FB 3B 76 00 00 00 00 00 00 00 00 0E 00

Note that despite `d1` being converted from a less-precise floating-
-point value than `d2`, it still is represented 100% accurately as
a decimal number.

After applying this change, recomputation of legacy scoring attributes
for *all* rulesets will be required.
2024-01-10 19:30:18 +01:00