2017 04 13

published 13 Apr 2017

Bringing you the latest in osu! development

Fixes to screen interoperability

I had a lot planned today, but ended up spending most of my time following a yellow brick road to fix a reported bug which saw the game in a state of both paused and failed… at the same time. This, as you’d expect, should not be possible!

I spent almost five hours resolving this! It involved some very complex intertwined threading logic (which unfortunately is unavoidable in this context) and saw me finding at least three vaguely related bugs in the process:

  • Game screens were handling escape keys even when they were not the active screen.
  • The actual threading issues, caused by escape key presses being handled one level higher in the draw hierarchy than expected, in tandom with audio objects (when trated as an interpolating clock source) not correctly querying a cached IsRunning value.

If you didn’t understand any of what I just said, don’t worry! Explaining in words is hard… this was a complex situation.

Thanks to ocboogie for helping test this and finding an easily reproducible test scenario!

Fixes to gameplay cursor positioning

Until now, the gameplay cursor would start in a default position, not correctly updating it to the user’s current cursor position until the next time the input device was moved. This is really ugly, so I spent some time figuring out how to fix it up.

For a bit of background: all of our input events are event based. This unfortunately means that we can’t get an “initial” state for new screens/objects which are created, like the Player’s HitRenderer. As a temporary solution, we added an interface called IRequireHighFrequencyMousePosition. Anything implementing this interface would be guaranteed at least one MouseMove event per frame, regardless of whether the cursor was moved or not.

Inside a Player instance, we have a nested InputManager which is used to do key mapping (keys to mouse, mouse to keys etc.) and replay handling (injecting input frames from an external source). The bug here was caused by the fact that nested InputManagers weren’t implementing this interface correctly, which meant they wouldn’t correctly propagate it down to their children.



May seem insignificant, but every detail counts!

Fixes to cursor trail display

Until now, the gameplay cursor’s trail has been using the audio clock, which can lead to some unexpected results, especially after pausing or on retrying a map. I decoupled the trail from the audio clock in order to fix this, so it should behave a lot closer to how you’d expect it to, regardless of the state of audio playback.

API in the background…

Have been working with nekodex on bringing the new API up to speed so we can begin to populate more data in-game. This includes beatmap ratings, fail/retry times, user flags, personal best scores and more. We’re almost ready to set things up for testing, so stay tuned for further progress on that.

Oh and yes, these API changes will eventually be exposed for public consumption. We’re aiming to provide a much more feature rich API and address the concerns people have with the existing public API over the coming months.

No release today

While fixing the above issues was some major forward progress as far as stability is concerned, the code has not yet been reviewed so there will be no release today!


2017 04 12

published 12 Apr 2017

Bringing you the latest in osu! development

Sliderbar sound improvements

Fixed sliderbars making sounds when they shouldn’t, and added extent-specific sounds, so you know when you’ve hit the end (minimum or maximum) value of a setting.

Beatmap details page goes live!

After an arduously long code review, things are finally in a usable state. Note that there is code present for online stats, but as the API isn’t yet prepared to send those to the client they are not yet visible. You can see a preview in my post yesterday.

Fixes galore

  • Fixed a long-standing issue in OpenTK where the game window would receive keyboard input when it wasn’t focused. This generally happened when the window was not focused at startup.
  • Added more searchable fields at song select (tags, source). #621
  • Fix crash when typing in chat overlay while not logged in. #620
  • BufferedContainers no longer run needless updates on their children when they are in a cached state. framework #637

New release with all the above (and changes from yesterday)

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


2017 04 11

published 11 Apr 2017

Bringing you the latest in lazer progress!

Results screen

One of the few elements of “osu!next” design we haven’t yet made public is the results screen. I’ve been working on this in the background whenever I get time, and am almost ready to reveal the first iteration. Keep in mind this will still be missing some design elements which we need to add more framework support to make work.

Part of the work I did today was a refactor on loading rankings into a leaderboard, as we will be reusing the leaderboard display on the results screen.

You want a preview? Ok, fine.

New HUD design

While the visual effects aren’t in yet, I’ve started moving the HUD elements to the correct place on screen. This include finally moving the combo from the bottom-left location. Keep in mind you’ll be able to customise all of this.

Beatmap details at song select

jorolf has been working away on the beatmap details panel which will sit in song select. I’ve been reviewing the code and trying to mould it into a usable state and I think we’re almost there. You should see this live very very soon.

Fixes galore

  • No more crashes when clicking the “restart after update” notification. You won’t see this until the build after the next build, obviously.
  • Fix combo being incremented twice in osu! mode. THis was a regression caused by the work we did on game mode modularity for osu!taiko.
  • Fix off-screen transforms sometimes not being applied correctly. I’m not sure if this was visible in normal game execution, but we’ve triggered it a few times in test cases.
  • Adjust cursor appear/disappear animations. They took too long and looked a bit cheesy before.
  • Improvements to transition when retrying or leaving play mode. Minor changes, but things should look a lot smoother now (mainly from hiding the broken gameplay cursor).

No release today

Unfortunately there was no one available to review my code so there won’t be a new build going out today.

For those that haven’t been following, we are enforcing strict code review guidelines which means that no build can be published without one other core developer approving it. Currently there are only three of us with the knowledge of the larger picture (and how the framework works inside-out) but I hope to add more people to this group as they pick up the project and become adept at identifying potential issues with peoples’ code.

Spring fan art contest

Entries for the fan art contest we announced recently have closed and the results are up for voting. There is some amazing work, so I urge you to go check it out.


2017 04 10

published 10 Apr 2017

Bringing you the latest in lazer progress!

Component Refactoring

Refactored all UI components to use Bindable<T> for their values (via IHasCurrentValue<T>. Making all UI components conform to using one variable name makes it easier to use them without fumbling around for things like SelectedItem, Value or Text. This also unifies event handling logic to a single location and simplifies binding to UI controls from configuration or other components.

Retry via hotkey

Code review and minor modifications of retry via hotkey support.

Playfield aspect and sizing improvements

Paired with smoogipooo on further taiko/playfield modifications to allow for custom aspect scaling and clamping, as well as overriding support (for cases like a tournament spectating client where we want the play area to be very specifically defined on the screen).

This is taking up a lot of our time recently, but we are thinking forward to what will be required of other game modes and tackling problems ahead of time. There should be significant payoff down the track. We are also carving out an environment which should allow custom game modes not just the bootstrapping and scaffolding to just-work, but also the flexibility to customise anything they may need to.

New release with all the above

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


Back In Business!

published 09 Apr 2017

Hello guys! It’s been a while since I’ve posted here, but I’m back to set things on track. The main reason for lack of posts is that I have been focusing all my spare time on the osu!lazer project. We are seeing results from this though – it’s progressing forward at very agreeable rate.

Let me try to bring you all up-to-date. We have fortunately had dev meeting posts over the last few months, so while I haven’t been personally posting, we aren’t that far behind.

  • This blog is now jekyll powered. I switched ppy.sh across to HSTS and in the process found out that tumblr doesn’t support SSL on custom domains, so this was a necessary step to maintain compatibility. All said, it’s a much better platform for zero-overhead submissions (I can just commit a markdown post to a git repository and that’s that) so I figure it should allow me to post more often.
  • osu!lazer now has taiko gameplay support! I’ve been working very close with smoogi (who has been focused on taiko for the last month) to ensure we are moving forward in a modular and consistent direction. Although the taiko implementation took longer than we both expected, I believe we have paved a very solid path for future game modes.
  • osu!lazer also has replays, scoreboards, mod select, and much more! If you are interested and haven’t checked it out yet, lazer is available for public consumption already. We are aiming to add a dedicated chat channel in-game for testers to discuss the game in the coming weeks, so stay tuned for that.
  • The flow of featured artists will continue. We have a few large collections of songs that are almost ready to make public, so keep an eye on the featured artists page if you are a mapper, or let your mapping friends know. We are very serious about getting 100% licenced music and need your help to have amazing maps made for the music we acquire.

I plan on doing consistent ask-me-anything posts on this blog again, as questions pile up. If you have any questions you would like me to answer and think that your question is one that many people would like to see an answer to, simply tweet or email me with hashtag #amapeppy and I will include the question and answer in my next AMA blog post.

I know recently I may have been a bit quiet on the public communications side of things, but I am spending every second possible of my life working on the future of osu!, so please stay tuned and be patient as we develop some amaze for you guys!