02 May 2018
Here comes another big one. We’ve been busy across the board and are making phenomenal progress, especially with the new web site (which is now enjoying being the primary experience that most users will see going forward). We’ve been closely monitoring your feedback and making changes where necessary to ensure it’s as comfortable as possible.
It’s looking more likely that these posts will be monthly going forward, in line with our monthly project milestone goals. We’re also improving the changelog display on the web so it can include lazer and new web changelog entries in a more visual way, bridging the gap with these posts (and possibly making them redundant?).
Here’s a preview of the direction we’re going:
We’ve also been making some headway over at osu-performance, modernising the code base ready for further contributions (thanks heavily to Tom94!).
We have also begun releasing production data which can be used in conjunction with this project to perform local statistical analysis and testing. We hope to continue pushing development on analytic tools to make it easier for the community to jump in and test algorithm changes for star difficulty and performance points.
osu The osu!lazer project. The future of the osu! client. Download preview releases from here and follow along!
Add toggles for beatmap skins and hitsounds #2432 (UselessToucan)
You can now choose whether you want to see and hear beatmap-specific skins/hitsounds or not. Currently this is a global setting, but based on feedback we will likely re-implement it to be saved on a per-beatmap basis.
In order to user some new APIs (and benefit from GC improvements) we have been keeping up with new .NET releases. Unfortunately in this upgrade to 4.7.1 we seem to have broken compatibility for some users – we may have pulled the trigger too early. This is something we are currently working on fixing. If you’re no longer able to run lazer, please reinstall using the latest release from the releases page.
With this change, links in chat which point directly to beatmap difficulties (as opposed to beatmap sets) are now clicking, bringing you to the in-game beatmap display rather than loading the website.
This makes it easier to deploy updates to github, reducing a manual step of running the deploy app on my own PC. Reduces overhead and also increases security. Should mean you see a lot more frequent updates pushed out over the coming months!
To match the new web implementation, profile badges are now displayed on the in-game profile overlay as well.
Until now, we didn’t have a way to convert “legacy” mods (as found in replay headers) to the per-ruleset lazer implementation. This adds the ability to do so, exposing a method for legacy rulesets to implement and support replay mod conversion. As a reminder, you can watch replays in lazer by drag-and-dropping .osr files into the window.
While personally I don’t think this is a great thing to have as it goes against tried UX for scroll views, it has been in osu! since forever. Disabled by default, you can now choose to let right mouse drags scroll at song select as they do on osu-stable.
There was an issue where oauth tokens would be lost at random, causing unexpected logging out from lazer. This should now be resolved, meaning you can keep your session for longer without issue!
I’m not sure how these got merged before I could object, but they are in for now. The colours are not final and it is very obvious that this needs further iteration, as they blend in with almost all beatmap backgrounds making it even more impossible to see judgements.
Touched on in the last changelog, this adds the ability to turn on performance profiling, now being disabled by default to reduce the performance overhead it incurs.
- Fix some occasionally failing tests #2446 (peppy)
- Disable tab switching for add channel button #2405 (swoolcock)
- Fix new detections in rider 2018.1 #2444 (peppy)
- Fix intro setting beatmap in background thread causing race conditions #2438 (peppy)
- Add error handling on a per-line level in LegacyDecoder #2429 (peppy)
- Fix BadgeContainer being unable to handle null badges #2427 (peppy)
- Deploy improvements #2431 (peppy)
- Update profile header to match osu-web changes #2422 (tgi74)
- Make BeatmapSetOverlay accept nulls everywhere #2416 (peppy)
- Fix hitobject lengths not being calculated for overlapping speed changes #2409 (smoogipoo)
- Remove now unnecessary approachcircle proxy disables #2374 (smoogipoo)
- Make screens always load async (fixes stutter when entering editor) #2334 (peppy)
- Update OsuTestCase with framework testing changes #2415 (smoogipoo)
- Fix various leaderboard data races #2408 (smoogipoo)
- Make buttons only accept input when expanded #2402 (FreezyLemon)
- Add back app.manifest #2381 (peppy)
- Fix qualified category on rank status #2377 (Joehuu)
- Add HardRock position mangling for CatchTheBeat #2366 (tgi74)
- Update NUnit to version 3.10.1 #2399 (FreezyLemon)
- Hide menu cursor when taking screenshots by default #2397 (smoogipoo)
- Remove composer from player loader #2396 (Joehuu)
- Fix incorrect ordering of difficulties retrieved from API #2394 (UselessToucan)
- Lowercase back button #2390 (Joehuu)
- Fix new input handlers not being enabled by default #2389 (UselessToucan)
- Wave container #2383 (DrabWeb)
- Fix regression causing hard crash #2379 (peppy)
- Normalize line endings to LF #2378 (peppy)
- Add xmldoc to some high-level classes to explain their separation #2376 (peppy)
- Fix all possible cases of crossthread import data races #2373 (smoogipoo)
- Remove TestCaseGamefield #2372 (smoogipoo)
- Handle multiple song previews playing in different beatmap categories… #2360 (UselessToucan)
- Move seeking logic into a custom editor clock #2356 (smoogipoo)
- Create ManualInputManagerTestCase #2354 (peppy)
- Make beatmap carousel select a random beatmap when there was no previous selection #2332 (LittleEndu)
- Update AssemblyInfo in line with framework changes #2353 (peppy)
- Remove TestTestCase #2352 (peppy)
- Don’t display judgements in OsuEditPlayfield #2349 (smoogipoo)
- Fix osu!catch autoplay missing starts/ends of JuiceStreams #2348 (smoogipoo)
- Handle possible FormatException when parsing timing points #2342 (smoogipoo)
- Use Linq.Append and Prepend. #2340 (huoyaoyuan)
- Fix ScalableContainer irrepairably altering content size #2339 (smoogipoo)
- Fix skin path being ignored in extension agnostic lookups #2335 (peppy)
- Revert changes on hard rock mod #2333 (Joehuu)
- Tab strip #2331 (DrabWeb)
- Rewrite editor selections to better handle selection and movement logic #2329 (smoogipoo)
- Add rider run/debug configurations #2326 (peppy)
- Fix mania playing the wrong/duplicated sounds on playfield keypress #2325 (smoogipoo)
- Make VisualTests/nUnit work again #2321 (peppy)
- Add ranked status and video marker to beatmap overlay and panels #2320 (DrabWeb)
- Set Correct values for addDelayedMovements() function #2308 (johnneijzen)
- Switch to .NET Standard 2.0 #2305 (smoogipoo)
- Fix @1x skin elements not being used #2304 (peppy)
- Increase deploy delta keep #2301 (peppy)
- Fix Player trying to load DummyWorkingBeatmap and failing #2288 (FreezyLemon)
osu-framework The game framework behind osu!lazer. Written from scratch with osu! in mind, but very extensible.
Paving the way forward for even better cross-platform support, we have finally made the jump to .NET standard 2.0. This means we can now fully support .NET core in addition to .NET Framework / Mono. It also makes deploying to iOS/android a much more pain-free progress. This chewed up a considerable amount of development time this month, but it had to happen sooner or later. Feels really good to get this completed!
We will begin to look at switching to .NET core for our deployment builds over the coming months, removing all .NET framework dependencies and providing native macOS and linux builds in our pre-compiled releases.
We have been running into issues with our automated testing process randomly and inexplicably failing, adding a huge amount of frustration to the development process. Enough was enough, so I set aside a couple of days to go through every possible failure path (and I ended up finding more than one!)
Needless to say, testing and deployment should be 100% smoother now.
Until now, screen switches could potentially cause a blocking load operation if their parent wasn’t asynchronously loading the next screen. This change resolves that by adding async load logic at a
Screen level. Now screens are always loaded asynchronously regardless of how they are pushed.
A decent performance improvement in certain display scenarios by reducing redundant uncached calculations.
- Update to .NET 4.7.1 #1529 (peppy)
- Replace PrimitiveType.Quads with PrimitiveType.TriangleStrip in CircularProgressDrawNode #1532 (jorolf)
- Add the ability to switch between tabs using keyboard controls #1363 (swoolcock)
- Fix new detections in rider 2018.1 #1536 (peppy)
- Fix dynamic compilation not working for some users #1535 (peppy)
- Ensure host is in a running state before running tests further #1534 (peppy)
- Fix test steps being added in LoadComplete never running in nUnit #1530 (peppy)
- Log exceptions when asset loading fails #1526 (smoogipoo)
- Fix ProxyDrawables not respecting whether the originals would be drawn #1507 (smoogipoo)
- Fix testcase SetUp methods not being properly run #1525 (smoogipoo)
- Make sure each TestCase runs all tests under one GameHost #1524 (peppy)
- Fix potential nullref if GlyphStore is used too quickly #1522 (peppy)
- Simplify SetProportional in BindableNumber #1458 (jorolf)
- Consume all pending text from input in OnKeyUp #1519 (FreezyLemon)
- Fix regression in input handler configuration #1518 (peppy)
- Implement IBindable interfaces for get-only support #1517 (smoogipoo)
- Update NUnit to version 3.10.1 #1516 (FreezyLemon)
- Fix new input handlers not being enabled by default #1513 (UselessToucan)
- Normalize line endings to LF #1509 (peppy)
- Fix regression in dynamic compilation #1506 (peppy)
- Fix test StepContainer light colours not always applying correctly #1502 (peppy)
- Fix dynamic compilation namespace suffix being appended multiple times #1501 (peppy)
- Make FrameworkTestCase abstract #1500 (peppy)
- Explicitly define the dynamic compilation namespace to avoid crosstalk #1499 (peppy)
- Delete unnecessary libraries #1496 (FreezyLemon)
- Remove TestTestCase #1498 (peppy)
- Fix some file paths causing framework to crash on startup #1495 (peppy)
- Use Linq.Append and Prepend. #1492 (huoyaoyuan)
- Add rider run/debug configurations #1489 (peppy)
- Fix dynamic compilation not detecting changes on .NET Core #1488 (smoogipoo)
- Remove assembly loading code from TestBrowser #1487 (peppy)
- Fix dynamic compilation #1486 (nbvdkamp)
- Fix framework tests not building against netcore2.0 #1484 (peppy)
- Expose the ability to disable background performance profiling #1482 (peppy)
osu-web The new web front-end. Already live but hasn’t yet replaced the old site, pending feature parity.
Has been moved from the profile to the settings page, which feels more out-of-the-way but still easy to discover for users looking to change their username.
Based on feedback from BN/QAT members and mappers, it was decided that the penalty when a map is disqualified can sometimes be a bit too much, especially when only a small change was made to the map. To mitigate this, we’ve allowed maps to re-queue at roughly the position they were at when disqualified.
As an example, if you had a beatmap which was qualified for two days before being disqualified, and then requalified 5 days later, you would still only need to wait around 5 days for ranking (7 days queue length - 2 days previously qualified). Note that this caps out at a minimum of 24 hours, to make sure beatmaps aren’t instantly ranked before others can jump in and give their opinion on a re-qualification.
Add played filter to beatmap listing #3051 (notbakaneko)
As a support, you can now (once again) filter the beatmap listing by played/unplayed maps.
Skype is out of fashion, so we welcome a discord field on profiles. Due to limitations, this can’t be linked to open discord for the moment, but will instead copy a user’s discord handle to your clipboard for pasting in discord.
It was pretty weird that we were displaying scores on profiles in some cases instead of pp. Scores on their own basically carry no meaning, so this change made a lot of sense.
Also you can now see how many first place scores a user has at a glimpse!
For the first time, you can see all previous usernames a user has had. Now displayed with a smooth animation to boot.
Virtualize beatmap listing #3001 (notbakaneko)
This optimisation allows for infinite scrolling at the beatmap listing to automatically unload off-screen tiles, improving performance by insane amounts.
Send order confirmation mail after store payment received #2956 (notbakaneko)
For some reason, we didn’t have an email confirmation being sent out after an order for a physical product is placed until actual shipment occurred. As we sometimes have delays of up to 5 days before we ship goods, this should very much help ease anxiety during this period and stop the number of support enquiries we get asking whether we actually received an order.
In an effort to further simplify the disqualification process further, there is no longer a dedicated disqualify button. Instead, it is already triggered when an issue is pointed out (problem level only) by a QAT member.
Exclusively on the new site design, you can now see plays marked with the TD mod. Note that this mod is only applied to plays where a touch device is deemed to have helped the player reach jumps, and as such won’t be automatically applied to all touch plays.
This is a kind of in-between step briding us to the ongoing design overhaul of the new site (as in an even newer new design!). It improves usability of the top menu by reducing motion and exposing the top-level links at all times, rather than having them hidden until hover.
Also the osu! logo animates on hover!
Now with even more detail than before, you can examine the status of your supporter tag and also view historical stats on how much you’ve contributed to the game. Love ‘ya all.
Search implementation overhaul #2857 (notbakaneko)
Mostly an under-the-hood change, the search infrastructure is now a lot more extensible, allowing for adding more complexities and details to the search system going forward.
User badges finally make a return on the new site, with a fresh carousel display, rotating through all the badges a user has achieved. Hover to view all badges at once.
- Use correct user for rendering post info in editor #3086 (nanaya)
- Use correct font for new discussion text box #3085 (nanaya)
- Load bold and italic versions of Noto Sans #3084 (nekodex)
- Use OsuMarkdownProcessor on store product pages #3083 (nekodex)
- Properly show shortened url when editing post #3079 (nanaya)
- Filter user website value on output as well #3076 (nanaya)
- Switch beatmap search rank filter to filter on beatmap_id #3074 (notbakaneko)
- Solid color for reply form background #3070 (nanaya)
- Eagerload beatmaps #3069 (notbakaneko)
- Less misleading title when pp data doesn’t exist for ranked maps #3068 (nanaya)
- Allow chart ticks to be fewer than 6 in mobile #3067 (nanaya)
- Russian Language Update Pack ver. 1 #3058 (Nekonyx)
- Add missing keys to Polish locale #3054 (TPGPL)
- Changelog version fix #3052 (nanaya)
- Check if search count workaround queries needs to run before running #3049 (notbakaneko)
- Improved cursor position on edit start #3048 (nanaya)
- Fix check for showing pp #3047 (nanaya)
- l103: “:names” shouldn’t be there! #3046 (r33int)
- Expose japanese language #3044 (peppy)
- Add hacky support for art contest thumbnails #3042 (nekodex)
- Reverse conditional on username change history display #3041 (peppy)
- Remove ‘edit’ word from account settings page #3035 (nanaya)
- Hide scheme from user web link text #3034 (nanaya)
- Filter out empty string username_last #3032 (nanaya)
- Correctly hide beatmapset status icons #3031 (nanaya)
- Use ‘100%’ instead of ‘cover’ for .badge-rank #3030 (MegaApplePi)
- Fix success rate graphs in beatmap listings on mobile #3029 (MegaApplePi)
- Add achievement date to top score #3026 (nanaya)
- Use mb_strtolower in OsuMarkdownProcessor. #3025 (notbakaneko)
- Fix friend button icons on hover #3024 (nanaya)
- Wrap table in container #3021 (nanaya)
- Allow middle clicking profile icon #3020 (nanaya)
- Prevent overlapping button and status icons #3018 (nanaya)
- Spanish language update v5.2 #3017 (Underforest)
- Add inline validation error message for simple entries #3005 (nanaya)
- Fix osu.isDesktop/isMobile #3004 (nanaya)
- Allow activity text on user profile page to wrap #3003 (notbakaneko)
- Put back popup template #3000 (nanaya)
- Define React and friends as externals in webpack #2998 (notbakaneko)
- Reset size selector on select and load (browser form saving) #2997 (nanaya)
- font-awesome icon fixes #2996 (nekodex)
- Fix messages and featured artists song count pluralization i18n #2994 (notbakaneko)
- Rename previous usernames include #2989 (nanaya)
- Fix show more link in user profile #2988 (nanaya)
- Update event component to handle new disqualification #2987 (nanaya)
- Show correct button labels #2985 (nanaya)
- Username history #2984 (nanaya)
- Supporter status page fixes #2981 (nekodex)
- Configurable sender for donation thanks mail #2980 (notbakaneko)
- Add Spotify and osu! profile links to Featured Artists’ pages #2979 (nekodex)
- Add index to achievements name column #2978 (nanaya)
- Add spoiler tag #2977 (nanaya)
- Carts that haven’t been saved yet can’t be locked for update #2976 (notbakaneko)
- Upgrade Font Awesome from 4.x to 5.0.10 #2975 (nekodex)
- Use $this->getConnection() instead of DB::connection($this->connection) #2974 (notbakaneko)
- Spanish language update v5 #2973 (Underforest)
- Danish translation all pages #2971 (tailsdk)
- [PL] Add missing keys and fix typos #2967 (TPGPL)
- Wait to acquire row lock before checking if record can be deleted. #2965 (notbakaneko)
- Hide inactive beatmapsets from watch list #2964 (nanaya)
- Danish translation fix 2 #2963 (tailsdk)
- Danish translation fix 1 #2962 (tailsdk)
- Use Laravel’s
Filethingy #2957 (nanaya)
- Add missing tables and test for model table existence #2953 (notbakaneko)
- Add osu_badges to base tables migration #2952 (notbakaneko)
- French localization #2951 (leonekmi)
- Fix tooltip positioning on Edge #2949 (nanaya)
- Use margin instead of padding for the profile xp bar #2945 (MegaApplePi)
- Increase the margins for .forums #2940 (MegaApplePi)
- use simple_query_string instead of query_string #2935 (notbakaneko)
- Fix wrong variable #2934 (notbakaneko)
- Show verification and hide login fixes #2932 (nanaya)
- Remove unnecessary “on” from edited message #2929 (FreezyLemon)
- Fix kudosu grant check #2928 (nanaya)
- Prevent duplicate voting to same discussion #2925 (nanaya)
- Navigation header metric tweaks #2924 (nanaya)
- Add missing keys for Polish locale #2913 (TPGPL)
- Header fixes #2909 (nanaya)
- Update badge style #2904 (nanaya)
- Misc fixes and user pm link #2903 (nanaya)
- Refactor post editor (and footer) #2902 (nanaya)
- Check user is trying to checkout with current cart #2901 (notbakaneko)
- Improve “last update time” used for checking beatmap notification #2899 (nanaya)
- Topic events cleanup #2898 (nanaya)
- Update footer link to server status #2897 (nekodex)
- [WIP] completed japanese localisation for some files #2891 (Soukyuen)
- Update post index after commit #2886 (notbakaneko)
- [lang/es] Fix/update spanish post_count #2883 (flesnuk)
- Image Alignment on Modding Discussions Page #2874 (dorothy3242)
- Small updates and missing keys for Russian locale #2871 (Nekonyx)
- Add missing keys for Polish locale #2870 (TPGPL)
- Don’t wrap the tagline text in the downloads page #2865 (MegaApplePi)
- Fix badge size #2856 (nanaya)
- Update profile badge size #2855 (nanaya)
- Clean up after removed header/logo animations #2851 (nekodex)
- Don’t lowercase the username line in mobile nav #2850 (MegaApplePi)
- Remove profile avatar z-index #2848 (nanaya)
- Update mods order #2847 (nanaya)
- Forum fixes #2836 (nanaya)
- Limit height of user page section on user profiles #2834 (nekodex)
- Updated PT-BR translations #2833 (KanegaeGabriel)
- Handle scores for deleted beatmaps in more places. #2832 (nekodex)
- Force mobile navbar to use lowercase #2831 (MegaApplePi)
- Fix line breaking in mobile nothing found page #2830 (MegaApplePi)
- Faster forum index/show #2829 (nanaya)
- Cache beatmap listing search result #2828 (notbakaneko)
- Elasticsearch settings update #2827 (notbakaneko)
- Fix elasticsearch deprecation warnings #2824 (notbakaneko)
- Add missing keys in Polish locale #2818 (TPGPL)
- Language changes (free-to-win) #2812 (peppy)
- Explicitly set locale when using fallback in trans_choice #2809 (nanaya)
- Allow change username server-side error messages to be html #2805 (notbakaneko)
- Prevent overflowing title #2804 (nanaya)
- Fix converted mania keys calculation #2802 (nanaya)
- Replace missed instances of “log” with “sign” #2605 (Joehuu)
- Spanish Language Update v3.1 & v4 #2546 (Underforest)