a little framework test

published 12 Aug 2016

We’ve been doing a lot of work behind the scenes on the framework osu! runs on (the lazer project). Today I took a step back to test a week of intense coding changes with smoogipooo to see how things feel and work.

I made a little game which took 5 hours and 375 lines of code to write. Would have been 2 or 3 hours if I didn’t find some bugs along the way with the framework (this was my intention, so I am very happy).

Download here (30mb because it contains osu! resources, sorry)


  • W to move up
  • S to move down
  • D to boost
  • tab to autoplay

I’ll release the full source for this in the near future. And yes, this will likely appear as a game mode for osu! in the future (maybe a just-for-fun one like target practice :).

We are making great progress here. Big cogs are turning!

Enjoy your weekend!


come join us devs!

published 01 Aug 2016

I’ve mentioned this in previous posts, but wanted a single post I can link to when inviting new people to the discord network, so here it is!

Recently we moved our public dev chat from slack to discord, and it has been working quite well so far. Anyone is welcome to join, but in order to talk there you will need to follow the instructions in the #announcement channel to get approved. This is just to keep things safe and secure for all participands.

If you’re interested in following what is happening in the world of osu! dev - whether you want to participate or just watch over what we are doing - please follow this link to join the network.

DO NOTE that this is intended for development talk only. We don’t tolerate chit-chat. There are plenty of other discord networks for such chat to happen, but this one is low traffic so those involved in dev are able to keep up with everything going on without getting overwhelmed.


2016-07 dev meeting

published 30 Jul 2016

Turns out we’ve had a lot to talk about this July, what-with two dev meeting posts in a single month. Best of all, this new one was public!

To much excitement from the community at large, we held July’s meeting publicly in our dedicated development Discord server, with peppy himself streaming the affair via his twitch channel. While only the people participating in the meeting could actually speak, anyone with access to the server could commentate on the goings-on in a special channel. This was something entirely new for us - and we’re definitely looking at making this a more regular thing.

Here’s what got done this month:

  • The new sleek, black osu!tablet has been ordered and will be in the store within a month. Not the month, but a month. flyte proudly announced in the meetings that the new design features less in-your-face triangles and more of his signature design finesse. Whatever that means.
  • Work on LAZER continues at a slow pace. We’ve all but given up attempting to put a timeframe on its release date, since the developers are taking things slowly and adhering to strict standards in their work on the refactor. Lots of work is still being done each month (you can see for yourself if you’re a member of the osu!dev discord - #osu-lazer channel has the details), but things are still very far away from even a proper CE release as of yet.
  • We released a new set of achievements (and medals) in the Mod Spotlight series. These medals are all about experimenting with mods that some players may never have even looked at before, and are the gentle introduction to the sort of stuff required for the upcoming Hush-Hush 2 medals which will seriously test people’s mettle and riddle-solving skills.
  • The new forums are excruciatingly close to being fully released. If you’re fond of the current forums, start saying your farewells, because with nanaya’s work on the implementation almost entirely complete, they’ll not be around for much longer. This will be the most visible part of osu!next that people will see before the actual client, and we’re really excited to see it almost come to fruition.
  • A new contest system has been developed that paves the way for community votes and weekly contests of all kinds. nekodex has been hard at work on a brand new contest system that supports not only jury judging, but also community voting as well. With this coming live within the next week for the circles! remix contest, expect more contests coming for all sorts of things within the year.
  • Competitive score adjustments for Mania mode (scorev2) will be complete before the MWC commences. smoog might be sweating, but he’s pulling out all the stops to get this done. scorev2 for Mania means a better show for both the players and the audience in the upcoming Mania World Cup.
  • We’ve vastly expanded our collection of featured/licensed artists. There’s over 300 songs in the catalogue now, and nearly 100 of those are timed and ready to go. Yes, community favourite Helblinde is among them. All of us love his stuff.
  • The difficulty algorithm received a sneaky adjustment to make sliders worth less for star rating calculations. The most obvious example of this (for anyone who followed the Aspire contest in any case) was Monstrata’s winning map going from 8+ stars down to 5~. Don’t expect to see much (if any) change on other maps though, as it shouldn’t significantly affect the rating of pretty much any other map.

If you’ve got a spare hour and want to watch the stream yourself, head over here.

We ended the meeting by playing one of the remixes from the recent circles! remix contest, performed by the masterful BilliumMoto. Note that this track - along with some amazing other entries - will be available for voting in the coming days!

See you next month!


2016-06 dev meeting

published 22 Jul 2016

June might be mostly done, but that doesn’t mean we all forgot about our monthly meeting! Just the person responsible for writing the summary did. Oops.

As our monthly development meetings continue to be very much a revolving door of ideas and formats, June continued the trend of everything being pretty much completely different from the month before. Instead of discussing grand, overarching goals that we’d like to see completed, we turned our efforts towards keeping each other updated and involved about our respective tasks within the team.

That being said, June was not a very productive month for us, unfortunately.

Here’s a summary of what went down:

  • osu-web development continues, and the forums draw closer to being ready for a complete switch-over. It is something of a recurring theme for these posts to contain things that are almost ready for deployment, but the new forums (henceforth referred to as jizz in memoriam of its early working subdomain) are pretty much done. Granted, we said we’d get this out last month, and the month before that too. Things are progressing slower than we’d like, but they’re getting there. This includes the elusive moddingv2, as well.
  • LAZER is getting closer to a final, public release candidate. The final phase of the open-source plan for osu! approaches completion, and once the bulk of LAZER is done, development can be entrusted not only to just the in-house developers we have currently, but the entire community. It’s slow, arduous work (as highlighted in this blog post by peppy), but absolutely mandatory for pretty much everything else to get done.
  • New designs for a sleek, black osu!tablet are entering full production soon. Some of you might’ve already seen peppy’s tweet about the design. A few early issues with the prototype unit were identified and sent off to be fixed, but we hope to get a stock of these new, improved tablets in sooner rather than later.
  • Beatmapping contests will be held more frequently from now on. We’ve had a bit of a dearth of these in recent months, bar the recent Aspire contest, but we plan to host many more of them in the remainder of the year. These new contests will be across all gamemodes, and will include a shift from solely a jury-type judging system to a full community voting system.

The next dev meeting will be held on the public osu!dev discord in real-time. Spectators (listeners?) will only be able to listen in to our feckless banter, but we will have a small section towards the end of the meeting where we take some questions from those listening to mull over.

The date is not yet solidified, but it will be at 16:00 UTC on a given date between the 29th of July to the 1st of August. We’ll post with more details when the exact date is ironed out. Anyone with approved access to the osu!dev discord is free to join and listen in. We might even release a recording of the meeting afterwards if all goes well. We’ll see!

See you there!

– Ephemeral


a long-overdue update

published 30 Jun 2016

It’s been a while since I’ve posted, but trust me that it is for the best! The progress we’ve been making recently has been amazing, and I am very excited for the future! Let me bring you all up-to-date with what has been going on behind the scenes.


The lazer build has been my number one focus over the last few weeks, diverting my attention from everyday operations to actually writing code. I’ve been changing upwards of 2,000 lines of code a day (consider that the whole osu! project is only 72,000 LoC) in order to bring osu! into a state which prepares it for the future.

We’ve made some huge advances in technology and infrastructure of the client which are absolutely necessary as a solid base for the features we plan to implement going forward. Just to give you an idea of the things I’ve been working on:

  • Until now we used some XNA code for input handling and low-level structs. These dependencies are almost compeletely removed from the project now, with OpenTK or similar open-source frameworks replacing them. All that’s left is Vector2, Vector3 and Matrix. These last few are a bit more complicated to remove than the rest, but should be gone soon.

  • The audio subsystem is now in a better state than ever before. What was previously a mess of co-dependent classes and statics is not a lean Clock hierarchy. Each clock performs a specific task, allowing for very logical control of things like interpolation, frame-based time separation, offsets, rate adjustments and virtual time (intro/outro time).
  • The input subsystem has been rewritten multiple times in order to create the easiest and most understandable framework for how we plan on handling user input. Hard to show this visually, but definitely a step in the right direction.
  • What was previously a mess of independent static classes is now a since static OsuGame which acts as the root for things that need regular game-wide access, like Config, Audio and Skin subsystems.
  • The text input system received a huge overhaul, allowing for proper text selection, keyboard shortcuts like ctrl-a, shift-home, ctrl-shift-rightarrow and mouse shortcuts like double-click or drag selection.
  • The new draw and transformation hierarchy is capable of doing some pretty cool stuff! Below is a quick demo idea stolen from anime.js stress test that I replicated in about 5 minutes.
  • osu! can now be resized to virtually any windowed resolution without completely falling apart. Going forward this will probably no longer require a mode reload, which you can see in the current example.
  • Online support has been added back using the new osu-web client API. This will replace bancho going forward. So far, only basic login and chat (read-only) is available, but you can see already that chat can fetch previous history when connecting, unlike bancho.
  • The startup sequence has been modified to get an OpenGl context as soon as possible (for me, this is about 300ms for the osu! window to first display). The splash screen is therefore no longer necessary and will be replaced by the game intro sequence, during which other components will be initialised. I really hated the splash screen anyway, so good riddance!
  • We are targeting .NET 4.5 and are already deploying live with dual-targeting binaries (32 and 64-bit). Check it out, but don’t expect too much. A lot is broken and we are aware of this. note that this installer will install alongside your existing osu! install, and should NOT be used to replace your existing one.

I was hoping to open-source the project last week, but in the process of doing so I came across a lot of very old code which should not be seen by anyone. I’m therefore delaying the open-sourcing until I can first tidy things up a bit more. That said, read on for an opportunity to help out before we go open-source if that’s something you think you are capable of!

As you may have realised, the lazer project has increased in scope since I set out. What was originally supposed to be a 2-3 month project which would be released to cutting-edge (and subsequently as a stable release) is now turning in to closer to a full rewrite of the game. This is not a bad thing in my eyes, but it will affect the update schedule of osu!. You won’t be seeing any large updates to the stable branch (bug fixes being the exception) because it would mean implementing things twice - which we definitely want to avoid!

That said, osu!next (the design concept) is no longer a dream but a reality that is starting to piece together!

osu!dev discord

In my continuing effort to make osu! as close to 100% transparency as possible, we’ve moved all development efforts out of the private/public slack networks and into a new public discord network. I hope this will eventually lead to more collaboration from outside the team, but for the time being it lets anyone who wishes to oversee our development efforts in real-time.

If you are interested in helping out with the lazer project, make sure to let us know. We are accepting private contributors to the project on request, so come in to #osu-lazer and let us know your qualifications and github username if interested.

If you haven’t yet joined us and this kind of thing interest you, please use this invite! Make sure you hang around until you have been verified or you will automatically leave the network.