published 17 Jul 2017

Hello! We’ve now exceeded one month since my last post. I’ve had this post in a draft status for quite some time, unable to post it because not everything had come together yet. Also been working across the board to catch up on a heap of stuff. Rather than just focus on lazer, let’s take a moment to cover everything that’s happened in this time.

Anime Expo 2017

This experience was absolutely amazing. Being able to meet people face-to-face – especially many which I have been dealing with on a regular basis – was the best thing I took away from the event. There’s so much to cover from this event alone, but here’s a few things summarised:

  • Going forward I’m going to continue my efforts to do some kind of “official” meet-up once a year in different places around the world.
  • We have a heap of awesome video footage, which will be edited down into a digestible format once I find the spare time.
  • Some serious discussions were had, resulting in some changes to how I run things going forward (in the best interest of the community). Look forward to a few new projects surfacing before the end of the year that should really help bring the community even closer together than before.


multiplayer commands for all

We’ve released the ability for any user to use the previously exclusive multiplayer room commands. This allows very fine control over rooms in ways that were previously not possible. It is especially useful to people running tournaments, but can also be used by room owners in a host-rotation scenario where the owner can now retain control even after giving away host. Check out the full documentation reference to learn more.

online state tracking

Web profiles will now (finally!) show up-to-date “last online” times as long as the user is connected to bancho. Previously, it would only be updated when a user visited the website. Note that right now even AFK users are considered “online”, but we may look at making this smarter going forward.


The new website has received some new features and improvements!

A new global contextual search that searches everything at once!

You can also drill down into details, refining your search to a specific area and more. Forum specific advanced search options are also still present, of course!

A huge applause goes out to nanaya for realising this feature. By no means finished, but in a very usable state (personally I think it works better than the options we have on the live site!).

friends listing

The friends listing page has now been realised on the new site. With the addition of online state tracking above, you can now see all your friends which are online in-game accurately from the web! Also, it’s quite pretty to look at!

Thanks to nekodex for the sound implementation of this system.

support purchase page

Supporting the game will in the near future be moved to the osu!store, rather than being a stand-alone page. While the preferred method of supporting is still using the old site (it has more payment methods available for the time being), you can preview this feature already here and even try using it if paypal is your preferred payment method :).

Thanks to notbakaneko for the implementation of this!

user cards

Hover a username anywhere on the new site and you’ll now see a user card popup. This allows you to get an overview of the user’s details, see their only status, add them at a friend or access their profile for more in-depth information.

Thanks to nekodex for implementing these cards as part of the friend system!


So, it’s been two builds since the last time I made a post. Forgive me if I skip over anything, but there’s a lot to touch on so let’s get started! If you’re more of the hands-on type, you can go and check out v2017.717.0 right now, with an insane number of additions, improvements and bug fixes.

New UI sound effects

This is still much of a WIP, so you’ll still see some changes and additions going forward. Consider this a glimpse at what we are going to aim for in terms of sound effects

In-game profiles

As part of a push to move everything to being accessible in-game, you can now access user profiles without being dumped out to a browser. Full stats are still a work-in-progress, but it should give you an idea of what you can expect in the near future!

Settings improvements

Redesigned the UX of the settings sidebar to feel better and avoid hiding the UI behind it. Now the whole settings menu expands, and the sidebar automatically contracts after selecting a section you wish to visit.

Lots, lots more

If you want to check out all the intricacies of lazer which have changed, please check the full changelogs! There’s plenty more small changes, optimisations and fixes that deserve attention there. I just can’t cover them all in this already-too-long post.

Thanks for reading until the end. Obviously posts this long won’t be a regular thing and I’ll do my best to return to normal programming from hereon out.



published 09 Jun 2017

Good evening.

Preparations continue for our space at Anime Expo 2017 throughout this week. I’ve been working around the clock (literally, due to opposite time zones!) to organise all the furnishing, electricity, PCs and other gear that we need to make ths event space happen. Stay hyped, because we’re not cutting corners as far as making the osu! space as enjoyable as possible for everyone that attends!

In the spirit of the upcoming 10 years of osu!, let me give you a little present.

Click above for the full 4K download (warning: it’s quite a large file)

Oh, we’ve also made quite a bit of forward lazer progress in a few departments, so let’s get into that!

OSD support for Raw Input and Cursor Sensitivity

When changing cursor sensitivity or toggling raw input, you will now see the current status popup in the OSD. It also gives you a handy tip that you can now hit Ctrl+Alt+R to completely reset the settings, in case you make a mistake and are unable to control your game input.

Implemented by myself, requiring some amount of framework changes to get the reset part working correctly.

Very simplistic implementation of the Social Browser

Currently has nowhere near the functionality we will see in the final implementation, and only displays top-ranked players, but it’s a stepping stone towards the final goal!

Thanks to DrabWeb for his great work modularising these overlays so code can be shared between them all.

Other stuff

  • Drezi126 has started exposing more of the difficulty calculation interface to allow for potential future improvements to the pp algorithm.
  • Various code clean-ups and CI improvements.
  • Scrolling to the bottom of chat channels is now fixed via framework changes by default0.
  • Various issues with raw mouse handler have been resolved.

Try it yourself

2017.609.0 is now available from github releases (or via auto-update if you already have lazer installed)! Keep in mind that this is still very much an alpha release. We do not offer support for it just yet!



published 05 Jun 2017

It has only been a week, but it feels like a year since my last post!

A lot of progress has been made, even though I personally feel less productive then usual – I’ve been spending a lot of my own time getting everything in place for the Anime Expo 2017 event space we are going to run.

There’s a crapload involved to make an event run smoothly, quite a lot of which is falling on me to make happen! I hope to write up the journey of getting things prepared once the storm passes, but for now let’s continue with the development theme.

Since it has been exactly one week since the last post, I can include some overview stats and drill down on a per project level


Channel listing display

You can now view and join channels by clicking the new ‘+’ button on the chat overlay. Noe that they aren’t yet restored when you open the game again!

Also, loading channels for the first time should be a much smoother experience as it is now done asynchronously.

Thanks to DrabWeb and Jorolf (reviewed by me).

Raw Input and Cursor Sensitivity

This relies heavily on the framework changes found here.

As with stable, sensitivity adjustments are only available if raw input is turned on. We have tested this implementation on both Windows 10 and macOS Sierra to successfully bypass OS mouse acceleration and provide accurate positioning data.

Note that this may not work correctly for tablets or other absolute-position pointing peripherals. Support for such devices will be added soon, along with per-device configuration and toggling.

Implemented by me (reviewed by Tom and smoogipooo).

Triangles optimised a further 15%

Gains another ~15% of overall performance in song select for me. Remaining overhead of triangles is around 5% on update and 15% on draw (likely due to fill and not due to CPU overhead), measured by disabling generation of triangles.

Thanks Tom (reviewed by me).

“Daycore” mod added

Think nightcore, but for half-time.

Thanks to Shawdooow (reviewed by smoogipooo).

Improved tooltips

Tooltips have been moved to the framework so other projects can use them. There have also been a few improvements:

  • They now avoid the mouse cursor better than before.
  • They move even more smoothly in osu!.
  • They handle screen boundaries better.

Here’s an example of a scenario where you can see a lot of this magic happening:

Never-repeat random for song select

The new default random mode for song select is to never visit the same beatmap twice until all beatmaps have been exhausted. Of course, along with everything else in lazer, this is still customisable if you prefer true random!

Other stuff

  • Fixed some textures rendering incorrectly on linux/macOS (missing sRGB colour profiles) #903.
  • The skeleton for the replay settings overlay was completed by Evast. As it doesn’t have any functionality yet, let’s leave its reveal for a later post #785.
  • Increase timeout in TestImportOverIPC #887.
  • Allow for variables in storyboards #866.
  • Fix user dropdown menu item chevron alignment #886.


Most of the framework changes were already covered above, but allow me to mention a few that we skipped over.

Event-based input handling

While raw input was also added (and discussed above), I also took the opportunity to change non-raw mouse and keyboard input to use events rather than poll. The benefits of this are likely minimal (slightly lower CPU usage and maybe ~0.5ms improvement in latency), but it’s still a step forward.

Work was done by me and reviewed by smoogipooo.

Focus rewrite

In a combined effort between myself and Tom, we revisited input focus, rewriting it in a way we could both agree on. Until now, while focus has worked correctly it has been a complicated system to describe. Now we have a very succint implementation that should match what you’d expect from an operating system.

It’s still a bit complex to explain in this section, but I’m sure we will revisit it sometime in the future.

Other stuff

  • Scrollbars were slightly improved visually, adding padding and switching the blending mode so they fit better in different background scenarios #767.

Try it yourself

2017.605.0 is now available from github releases (or via auto-update if you already have lazer installed)! Keep in mind that this is still very much an alpha release. We do not offer support for it just yet!


2017 05 29

published 29 May 2017

It feels like it’s been an eternity since we last talked! I’ll do my best to bring you up to speed with everything that’s been going on.

Triangles are now more efficient

smoogipooo and Tom94 pair programmed a new implementation of triangle patterns. Since these are displayed everywhere in lazer, it is one of the areas that definitely required some optimisation.

Performance improvements upwards of 20% can be observed when many triangles were displayed on the screen at once.

Scroll drifting fixes

When scrolling beyond the bounds of a scrollable view, it was possible for the cursor to become misaligned. This has been fixed in both the generic ScrollContainer and the ChatOverlay, which has a slightly custom drag mechanic which was also drifting.

New animation when changing between mods

Thanks to jorolf for the concept.

osu!mania is getting more complete

smoogipooo has been busy making continuous progress on mania. Here’s a little preview of how things are going!

Auto isn’t quite there yet, but it is already quite playable in the release builds :). Holds are now in, along with very basic judgement.

Framework maintenance

There was also some substantial work done by myself and Tom94 to clean up input handling at a Drawable level in the framework. Drawables are no longer aware of their parent InputManager, as they don’t need to be. One more step in the right direction for the framework!

Other things

  • DrabWeb made a breadcrumb control, which will make an appearance in future in-game UI #865.
  • Linux mouse input is no longer handled when the window is not in focus #761.
  • The back button now bounces in time with the active beatmap #848.
  • The hotkey for drawings was changed to Shift-Alt-D as to not conflict with osu!direct #867.
  • Fixed a few potential hard-crashes when failing to load a beatmap #862.
  • When first loading the music controller, it no longer slides in, instead already being in the correct initial state #856.

New release available

2017.529.0 is now available from github releases (or via auto-update if you already have lazer installed)!


2017 05 24

published 24 May 2017

First of all, thanks to everyone who reads these posts! I took a moment to ask on twitter as to how often people would like me to digest development changes, as I mentioned it takes quite a bit of time and effort to prepare daily posts.

The results are quite spread over the first three options, but “per release” sits best with me (and is also the most popular) so I’m going to go with that. I’ll still keep the post titles as the current date because I don’t want to tie my posts 100% to releases for now.

osu!taiko visual improvements

smoogipooo has taken a step back from osu!mania to update the visuals of taiko. You can now enjoy more epic kiai time, better feeling hit explosions and overall a smoother visual experience.

osu! logo beat sync

Finally, the osu! logo bounces in time with the music - even at the beatmap loading screen! osu!lazer has honestly felt hollow without this implemented until now. Note that we also have screen-edge flashes (thanks to ColdVolcano with huge code review from smoogi and I) at the main menu too.

Now that we have the framework in place for synchronising arbitrary UI elements to the beatmap, you can be sure to see more of this playfulness happening all over the UI. With moderation, of course.

User panels

We now have a full user panel implementation thanks to DrabWeb (see #825). While you can’t see it changing state in the game currently, you can see your own user panel by clicking the user login area top-right.

Spinner colours improved

As per my previous blog post, we needed some framework changes to allow for more vivid spinner colours. The changes were made by paparony03 and as a result I was able to bring the spinners closer in-line with their design!

New release available

2017.524.0 is now available from github releases (or via auto-update if you already have lazer installed)!