We've run through quite a few alpha-builds but I feel it's time now to move this to the beta-branch. It's a long list, as usual. Here are some highlights:
A few weeks ago, player MDuh suggested using osu!.db, which was a great idea! It took a little while - but in this version, we have it. We can still scan folders and we now also have our own Holodance osu! folder that you can put osz-files into and Holodance will automatically unpack them ... but ... especially long-time osu! players with large libraries should now have a much better time playing Holodance. On a related note, VGDragon has created a little tool that lets you convert osu! collections into Holodance favorites folders. At the moment, you still need to rename those (or change Configuration.json) to switch to another collection but soon, we'll support multiple favorites folders and then we'll also let you get the collections from osu! from directly within Holodance.
Another very important and long awaited feature: We finally have song skipping for beatmaps that have longer gaps. Among others, this was requested by dkabot.
We've also spent a lot of time polishing the file browser, not only visually but also by adding new functions and completely rewriting how sorting / grouping works. This took a little while but was necessary to keep it easily extensible. New sorting / grouping options in this build: BPM, Added Date, Duration and Creator. Some of this was requested by CopperCat.
Audio-preview can now be disabled (this was requested - I just didn't find where) and we're using the preview time from the beatmaps to skip right into the right location of the song.
For left-handed people, you can now switch the location of the scrollbar to the left using the little button on the bottom side of the scrollbar. That should make browsing much more convenient.
Instructions to change the branch if you are not on the beta-branch, yet: Opting In and Out of Steam Client and Product Betas
And here's the full list:
- osu!-beatmaps: Completely rewrote filtering and sorting mechanism so we could add BPM, Added Date, Duration and Creator.
- osu!-beatmaps: Now using the audio preview time from the beatmaps instead of always starting all songs at the beginning in the preview.
- osu!-beatmaps: Audio preview can now be disabled by switching the "notes" button to "mute"
- osu!-beatmaps: Leaderboard for a beatmap is now also shown after a beatmap was played.
- osu!-beatmaps: Now properly showing artist and beatmap in score UIs, instead of "osu! Player" and other useless information.
- osu!-beatmaps: Scrollbar can now be switched from left to right with a button to better support left-handed navigation.
- Fixed font and colors of ScoreFlash popups (the ones you get when gaining or losing a multiplier).
- osu!-beatmaps: Polished layout of osu!-beatmap browser. All navigation (scrollbar, paging and level up buttons) is now on the right side, instead of having the level-up and paging buttons above the list (which was confusing - some players didn't even notice those buttons were related to navigation). This also gives us more room in the top area now, which we will use for displaying the current selection as well as adding more buttons, e.g. for muting the audio-preview (which is nice when you need it but can be very annoying if you don't need it).
- Fixed issue in UI: While in Pause, we already had "Opaque" instead of "Alpha", this wasn't properly propagated to the settings. Now it is.
- osu!-beatmaps: If no items are displayed in the list (which is often an error situation), we now have both a "refresh" button (that does the same as before: reload the cache file) as well as a "rescan" button which will do a full folder scan to fix any potential issues in the cache.
- Statistics of play sessions: Fixed a bug that put hitHotesForAverage into cumulativeOffTime instead of the actual cumulativeOffTime. avgOffTime is still there and correct, so there's really no information lost; but old session data has this wrong.
- For Streamers / YouTubers: You can now activate writing the current song, score and various stats in Configuration.json. What you'll get is a JSON file that has quite a bit of information that you can use for your own UIs to overlay on your stream / videos.
- Improved timing precision of song audio time. In most cases, this won't make a difference because we decompress audio before playing in music-audio but it's still safer to do it this way.
- osu!-beatmaps: We're not storing much more information about the beatmaps in our cache, like approach rate, orb, slider and spinner counts and also the gaps between events.
- osu!-beatmaps: FileSystemCache_Osu_LastPlayer.json still had the full replay-data included, which was redundant. That information is stored in PlaySessions.json and the folder structure under PlaySessions/. FileSystemCache_Osu_LastPlayer.json now only has the relevant information (a list of osu! beatmaps played in sequential order).
- osu!-beatmaps: Cleaned up code that finds out the osu! songs folder location and osu! application base location to make it both more robust and prepare using osu.db instead of doing the full filescan ourselves.
- osu!-beatmaps: Fixed a pretty nasty bug that caused the file scanner to always do a thorough check of the cache because we compared the number of songs in the cache with the number of folders in the file system, which frequently mismatches because we do ignore certain songs (like the osu! tutorial). We now keep a list of "ignored songs" in our songs container to make this check more reliable.
- osu!-beatmaps: Implemented using osu!.db to gather the beatmap information instead of scanning the file system. This should be much much faster than the previous approach. The previous approach is still available for people that don't have osu! installed (next item I'm implementing is unpacking osz-files, so that will be quite a difference then :wink: ) (edited)
- osu!-beatmaps: Handling of loading beatmaps and MP3 files is now much smarter so that starting a session should be much faster, especially when replaying a song a second time. EDIT: Unfortunately, the MP3-file reusing resulted in songs stopping in the middle, so that part was reverted.
- Fixed a very nasty bug where you could easily get very high scores while doing unexpected things while paused. Thanks to Luigiespo for reporting that one (that was in our Discord channel).
- osu!-beatmaps: Introduced a local beatmap cache for much more robust handling of favorites and last played as well as keeping local statistics. This also fixes issues with outdated paths stored in last played or favorites.
- osu!-beatmaps: Now that we use osu!.db in most cases, there may be quite a few beatmaps in our cache that actually cannot be played (e.g. because the beatmap cannot properly be parsed, or there's an issue with the audio file; previously we filtered those out while creating the file cache). What should happen now, when you run into a beatmap or song like that is that the beatmap button is greyed out and you cannot start playing it, and the next time you change the filter, it will be completely removed from view. If you run into beatmaps like that, sending us your output_log.txt is very much appreciated because in some cases we may be able to make it work. In others, it may not be worth the effort.
- osu!-beatmaps: Slider-Ticks (audio-feedback) now start at the hit time of the Slider (that's the time when the slider begins). Please let us know if this creates off-beat slider-ticks for you.
- osu!-beatmaps: If beatmaps are not available in favorites or last played, they are now automatically downloaded and added.
- osu!-beatmaps: Songfolders didn't have beatmapSetId set which caused the cache to break. Quite an annoying issue to debug.
- osu!-beatmaps: Last played now only keeps the last time a beatmap was played instead of listing them all. Eventually, we'll let you browse all played sessions via the song / beatmap info buttons and also provide more details and the replay feature through that interface.
- osu!-beatmaps: When playing a song (actually entering the beatmap), we now store the duration of the song into the cache. This is necessary because when we scan the filesystem, we cannot gather this information for all beatmaps / MP3s because it would take way too long. When using osu!.db, this information is always available. When using the folder scanner, you'll eventually get the song times by playing all the songs. We have now also added the "Unknown" top level entry in the Duration grouping for unknown song times.
- Added skipping feature: When a beatmap has a longer gap between any "events" (orbs, sliders, spinners), you can now skip by pressing the trigger-button. You see that this is the case because the skipping-UI pops up on both controllers, with the time to where you'll skip in the song.
- We have now activated "Performance Reporting" which basically posts exceptions to the Unity service so we can review them. This way, we should be able to react to issues much more quickly.
- Cleaning up the paths in Configuration.json to be consistent, absolute and in their simplest possible form.
- Added "Skip to End of Song" to Pause Menu. This is useful if you want to store the session as far as you've played it, including your score.
- osu!-beatmaps: Fixed issue that highscores were not updated immediately after playing a song, so you'd see your old score instead of the current one in the leaderboard.
- Much better and more reliable logic for skipping. Previously, we were relying on the events that create the orbs, which are always a little ahead of time. Now we're using the end-time of notes and a longer minimum gap time to trigger the skip-UI while still jumping only one bar ahead of the next orb (plus the BufferAheadTime). That way, it should be all safe and the skipping-UI should no longer appear for no good reason.
- Removed the "pre-path-slider-streamers" because they were more confusing than serving a real purpose.
- UI: Polished the osu! beatmap browser quite a bit. This is not completed, yet, but eventually, we'll polish all UI elements in all game areas.