Thanks to everyone for their questions on twitter today; some fun ones in there! I will be going through them tomorrow over some drinks and posting tomorrow evening (my time), but I don’t come empty-handed! Here’s one amusing example of how the new hierachical sprite system can be used to achieve previously impossible results.
Note that while rotating and scaling excessively, the main menu still performs (and handles input) how it should. Pretty fun stuff! Now we are officially on-par with osu!stream flexibility, as I explained yesterday.
Hope you’ve already checked out flyte’s latest, with a reveal of the new hitcircle design.
In order to explain what we are currently doing to the osu! graphics framework, I’d like you guys to take a look at the osu!stream UI. A lot of you are probably not familiar with this iOS-only release, but I wrote it from scratch several years ago, fixing all (most of?) the mistakes I made in the PC version you are used to.
Pay special attention to the movement of groups of sprites and interface elements on the screen. Although this video isn’t 60fps nor super high-quality (sorry, couldn’t capture it nicely in a quick moment), you should be able to notice the vibrance of the tweens, which react in a way you haven’t seen yet on the PC version of osu!.
Observe how the main menu is transformed on an overall level as well as an individual per-item level; how the header and footer in song select smoothly disappear off-screen (and back on); how bounces feel… more bouncy! Honestly, osu!stream feels so much more polished than osu! (everyone in the office today agreed) even though so much less time and effort was put into it over the years.
This is what the goal of the current framework changes is. In short, the ability to have nested “drawables”. A drawable can be anything from a sprite, to a primitive, to a collection of many more drawables. Each drawable can have Position, Scale, Rotation, Colour and Clipping applied to it. As you’d expect, these transforms will apply to all children drawables, which can lead to very dynamic movement of elements on the screen.
So you may then ask: what have we been doing until now in osu!? In the most basic terms, drawables could not be nested. A SpriteManager could contain many drawables, but that’s the end of the chain. So for elements like osu!direct, Online Users, song select panels etc., the movement of groups of sprites that are related to each other has been a bit clunky and cumbersome.
There are a few more intricacies to what the current changes we are working on are changing (and fixing), but trying to explain them without going into amazingly minute detail would be quite hard. Maybe we can do that another day, if you are so inclined :).
Making these framework changes are both imperative to implementing the osu!next design and also to open-sourcing the osu! code-base. Because there’s no way I would want to expose the masses to the current state of the code!
Made some great progress today implementing what I discussed yesterday. osu! is back to rendering as it should, so I don’t have any breakage videos for you today, sorry!
I didn’t get around to doing a write-up on the new draw hierarchy – because I was too busy actually implementing it – but it’s planned for tomorrow’s post :).
Tablet shipment safely delivered after some confusion and me attempting to remotely guide the delivery man (who has no smartphone with maps) through a neighbourhood I am unfamiliar with using google maps.
Let me take a moment to again make a shout out to the new forums, which are now more-or-less in a working state as far as posting, replying, quoting and consuming. They have been getting daily updates over the last weeks based on feedback, but we aren’t planning on releasing them to the masses until we are 100% sure they are ready.
Starting this week, we moved development focus to other areas of the site, so I’d be very grateful for any feedback on the forums specifically. Anything from usability to performance issues, to anything that’s bugging you which makes them unusable over the old forums for now.
As we don’t currently have somewhere to report issues (until the github repo is opened up), you’re welcome to leave comments on this post or just tweet at me.
2D math.. harder than you may first expect. At some point you realise it is best to cut your losses and start implementing from scratch, rather than attempting to fix what is at hand. This was that point for me:
(this video isn’t as broken as you might think: everything is working apart from sprite-based text and non-default texture origins)
In other news, while the osu!store is still in hibernation, our next batch of tablets is scheduled to arrive early tomorrow morning. While I’m not directly accepting the shipment, I am remotely managing communications between the person who is and the customs broker / delivery company. Lots of fun. Needless to say, we lasted a full tablet batch without going completely out of stock, and should also have stock for the foreseeable future. Finally figured that one out :).
Hello peoples of osu!, and welcome back for another week of ramblings. Hope you had a great weekend. It’s going to be another long week!
Continuing work on the draw hierarchy means I’m spending all my free time focusing on math. Math tires my brain like nothing else, so don’t expect too much by way of long posts until things settle (although I plan on attempting to explain the main issues I am working to solve in a technical post tomorrow)!
Breaking osu! in fun new ways, every day.
With that out of the way, let me touch with why I haven’t done a coding stream yet, even though I keep saying I will:
I know you guys say you want to watch no matter how boring I think what I am doing is, but honestly, the restructuring I’m doing right now means I regularly sit staring at the screen doing nothing for 10 minutes at a time, or am writing notes on paper to try and figure things out.
The code I’m currently working with isn’t exactly something I’m proud of. It’s a clusterfuck of hacks that work perfectly at a high level, but internally feel really clumsy. I feel cautious to share such code on my stream because it doesn’t set a good example.
I’m not really in an environment which I can use a microphone to talk while streaming. People around me can be quite noisy and I don’t want to capture that in my stream.
I have so many interruptions throughout the day which cannot be streamed (like attending to reports of foul-play, fixing ongoing database issues or answering emails) which I need to correctly separate to make sure they aren’t included in the stream. I had this setup well back around the time I was streaming late last year, but have since formatted and lost the degree of separation I want to achieve.
With these blog posts, I worry that the overhead of transparency will impede on my productivity. Streaming means dealing with extra social elements which I wouldn’t usually have to worry about. Socialising is tiring for me at times.
Honestly, coding streams work best when I am working on something fresh, rather than fixing bugs or refactoring large portions of code. I have made a mental note to stream next time I’m working on something new.
That said, I really want to stream on a more regular basis. I’ll keep striving to get to the point I can do so!