Developer postOriginal post (opens in a new tab)

Alpha-Branch: Holodance V0.8.0c1 - A New Package!

To be honest, I don't even really know where to start. Maybe with: "Thank you!" and "I love you!" ;-) ... seriously! It's been a great ride so far and I very much enjoy every forum posting, every chat on Discord (or Steam), every review, and every gameplay video you post! And I love playing this game at least as much as you do. And I do get annoyed by every aspect of the game that is not polished enough, yet.

The last (almost) two months, I've spent ironing out many of the things you (and I) found annoying. It's not done, yet, but after taking the game apart and putting it together again, we finally have a version ready that I dare to upload for you to try.

So ... first things first: Downloading the game.

Package Size

For a few reasons, one being having a lot of fairly heavy visual content, another being not having taken the time for package size optimization before, Holodance currently consumes 8.5 GB on your harddrive. That is far more than it should ... not only because it's bad for you ... but I keep most builds archived, and that adds up fairly fast.

V0.8.0c1 is down to 4.3 GB on disk. That still is quite a lot - but it's almost 50% package reduction. The bad news about this: When you opt-in to the alpha branch, due to the new package layout (we moved to using AssetBundles), it's a 3.9 GB download. Apologies for that. If you have a slow connection, you may want to wait a little until this new version has stabilized, because it really is an "alpha"-version.

Startup and Level Loading Experience

There was a time when starting up Holodance literally took a few minutes - even on decent hardware. And until not too long ago, it still did take minutes on slower machines. There were a few low-hanging fruits but one thing that was really hard and is still not completely finished was fixing a design decision that did make things much easier during early prototyping but ended up becoming a fairly big problem:

All the "gameplay stuff" (including music, dragons, animation; excluding the environment geometries) was kept in a single Unity scene. That was one reason why starting up the game took longer than it should. Long story short (I wrote more about this in Upcoming Startup Time Improvements), on my machine, we're from 15 seconds until you even get to see the first splash screen, and 45 seconds until you could finally start the game to 4 seconds until you see the splash screen and about 25 seconds until you can actually interact with the game.

Plus, any scene loading now has a really nice 3D logo in front of you and both, a progress bar (at last ;-) ) and a visual preview for the environment you are entering. And the music keeps on playing, so if it takes a little longer on your machine, at least you can keep on dancing while your machine is busy loading.

User Interface

I had started partially implementing the new UI around Christmas but knew all along that an actual redesign was necessary: Having a good look at every screen, make it more spatial, have previews where it makes sense, have sliders that are really hard to work with using a laser pointer come close to you for much finer control ... and have nice UI transitions.

In the current version, we have the settings / pause menu almost complete, with a few placeholders (selecting themes still gets preview icons, and the avatar system is not complete so you cannot select and calibrate, let alone use an avatar, yet). The old "settings" screen in the level selection area might completely disappear once we have the initial UI tutorial ready. You can now always access the pause / settings menu by pressing and holding the menu button.

Before, this was only available when actually playing a song ... and ... yes, it was one of those things I, and probably you, often found very annoying. Doing it like this resulted in having 3 different ways to access those settings ("main settings" in the level selection area, a few buttons squeezed into the file browser making it even more overloaded than it already is, anyways, and pause which you could only access under certain circumstance, like, when actually playing a song).

After you completed a song, you'd get a tiny Window with your score and a few stats. This is a big one: There's a lot of more stats available now. In the current version, this is still just an ugly textual prototype without even a proper layout, but much of the information already is there:

  1. Duration of the song
  2. How often have you paused the game in this session?
  3. What was the distance of the orb source (so how far did the orbs travel from the creation to being caught by you)? How many beats did they fly (this depends on the tempo / BPM of the song, fast songs will take much less time at some number of beats; this is a setting available under Style / Gameplay, and some environments like Zero Distraction and Virtual Clubbing let you change the orb source)
  4. How many orbs, sliders and spinners did you catch,
  5. how many did you miss,
  6. how far were you off with the timing, accumulated, and min, average and max per orb,
  7. What was your total bonus due to velocity, rotation and using your head
  8. NEW: What was your "catch variety bonus"? This is pretty cool: You now get a bonus each time you switch what you catch the orbs with. In detail: Each time you catch a note with a different "catcher", you get an increasing bonus until you either miss a note or use a catcher that you have already used. So, when you catch the first orb with your left hand, you get no bonus. When you then catch the next orb with your right hand, you get 50. When you then catch the third note with your head, you get 100. When you then catch the fourth note with left, head or right again, it starts from 0. This will be fun when we support feet because then you can get up to 800 bonus when you do a full sequence (which is really hard - but possible). 5 is the maximum that is possible for human beings, and the scoring is as follows: 0, 50, 100, 200, 400, 800.
  9. Total distance with your left and right hand, and head. Not sure if this gives you correct values because:
  10. Total Valid Distance is usually higher, which does not make sense because this only counts the paths between successful catches and while following Sliders and spinning Spinners. So, this *should* always be a smaller value than the sum of the total distances. Not sure what is wrong here, yet, but looking into it.
  11. Minimum, average and maximum "valid distance". This does not separate between Sliders/Spinners where distance while interacting with the element is counted, and orbs, where the distance between catching an orb with that catcher is counted. Maybe it eventually will.
  12. Total counted valid distances, and how many of those were smaller than 0.5m, between 0.5m and 1.0m and larger than 1m. I'll use this for balancing this.
  13. Total Time spent in Sliders/Spinners

This is really for you to analyze and give feedback on. The scoring is mostly fixed, so it's possible to improve the leaderboards again but apparently, not for all beatmaps (Muzzy - Draining Atlantic is one that's way off).

Different Catch Area Grid Styles

The old one was so annoying! Now there's just an outline, just the sections, the old dense one, and two sci-fi extra ones. This was long overdue!

Disabling Sliders and Spinners

I love Sliders and Spinners - but not everyone does. Now you can switch both off individually (Spinners are kind of rare, so some may want to keep them, even when they don't want Sliders ... and some people may love Sliders but not Spinners). Be aware that both Sliders and Spinners give you a higher score, so disabling this will put you lower on the leaderboards.

Updated to Unity 5.6.1

This allowed me to enable Graphics Jobs again which improves performance. However, watch out with Level 01 - that one is actually worse than before. Also, the water levels have an issue with the underwater fog which is not applied to the terrain. Sometimes I kind of hate Unity for breaking so many things with each update. But 5.6.1 is doing pretty well so far.

Plenty of new bugs ... and plenty of bugfixes

I did say this was an alpha. I've seen a few nasty things like getting stuck in the loading area for no obvious reason, the fog issue ... story is probably very broken at the moment (and barely tested). This is called "alpha" for a reason.

However, I also fixed a lot of bugs, like the nasty "screeching" sound that many beatmaps had for the first Slider, or the colors issue where orb colors more or less randomly changed ... or a bunch of bad things about scoring that prevented everyone from improving their leaderboard ranking because even when you played better, you'd get a lower score. This is not perfect, yet, but much better than before.

So ... here's the full list of all the changes that I am aware of since V0.8.0b9:

All the Changes in a Long List

  • Prepared a major scene cleanup by writing an editor script that reliably reliable gives me all objects that have references to an input object. We currently have a lot of intra-scene dependencies and it's time to finally clean those up in a major round of decoupling.
  • Fixed loading screen always being oriented towards the original forward direction, regardless of where they player may have turned the world / play area, resulting in the loading screen appearing to the left, right or behind the player, when players have changed world / play area orientation.
  • Added background sound for loading screen.
  • Changed lightbaking from Directional Specular to Directional because in Unity 5.6, Directional Specular will not be available anymore (and it is already deprecated in Unity 5.5).
  • Major project cleanup, optimized compression and sizes of a lot of textures. This will significantly reduce the build / download size and also improve the level loading times quite a bit. In a few cases, we actually increased the resolution of certain textures for better quality but in most cases, we reduced everything quite a bit because many of the textures had way too high resolutions compared to the size of the objects they were applied to.
  • Breaking up our main scene that had everything except the environments included into small parts. This significantly improves the startup time and load times and also makes distributed work on various areas of the game much easier.
  • Cleaned up Level 05; in particular we now have much smaller lightmaps which improves the level loading time and decreases overall build size.
  • Removed trueSky from project and replaced clouds in levels 4 and 8 with Volumetric Fog instead. This doesn't look as good ... but at least it works (unlike trueSky which has been broken for more than half a year now).
  • Added 3D-Logo and raster-floor to loading screen.
  • Added an environment preview and progress bar to the loading screen for a much improved environment loading experience. This was long overdue.
  • Flatscreen UIs now fade out and disappear - together with the mouse cursor - when there is no mouse activity (which is usually the case when you're in VR). Clicking or moving the mouse will immediately restore the flatscreen UI screens that are currently active. The nice thing about this is that now, the mouse events will no longer mess with in VR UIs (unless you or someone else is messing with the mouse while you're in VR). And this works with in-VR UIs that were "thrown" on the flatscreen as well. So what we can do now (in principle), is use any settings or also the file browser both on the flatscreen and in VR. Quite a bit of work preparing this had been done earlier but now it's nearing completion and where putting the whole UI into this framework, at last.
  • Laser pointers now glow up a little bit when pressing trigger. The code doing this was there all along (and the width was way too large) ... it just didn't work because it was relying on SteamVR plugin code that isn't working properly.
  • Added forward arrow to "ideal location" runes and fixed color of runes.
  • Added UI screen manager and loader. This is part of breaking the monolithic "everything in the game" scene apart and also laying the foundation for a much improved handling of all UI aspects in the game. But it's also a very high risk and high effort task.
  • Important: Completely changed how "pause" works in the game. Previously, the "Pause menu" could only be accessed while actually playing a song. While this did make sense in a way, it also created an annoying limitation because in some cases you'd have to start playing a song just so you could enter the pause menu. Bad design. Fixed: Now you can enter pause at any time. The only difference between pausing while playing a song and pausing while not playing a song is that you need to keep the menu button pressed a little longer while playing a song. This is to prevent accidentally entering pause. Also, you can now exit pause by simply pressing the menu button again (or you could still "click" the Resume button in the main pause menu).
  • Finished the UI design of the pause and skip popup using our new UI style.
  • Pause-Mode no longer gets a low-saturation post processing effect. Instead, the exact same post-processing settings as in non-pause mode are kept. This change was important because we'll add some settings that have an effect on post processing under "Performance", and those now give you immediate feedback when you change them. Also, while the original "background goes black and white, UI keeps its colors" effect was pretty cool for pause, that introduced major performance issues when entering pause; and the low saturation effect just made things look muddy.
  • Comfort Settings were stored only locally up until now, so if you used your Steam account on multiple computers, the comfort settings didn't follow you and you'd have to set them up again and again. Comfort Settings are now stored with your Steam account so when you play Holodance at a friend's place, or in a VR arcade with your own account, you always get your settings.
  • Improved how comfort settings are applied so that they also work when the object they are applied to defaults to not being active.
  • Added Slider for Haptic Feedback Intensity to "Style Settings".
  • Added "Free Mode ScoreHUD" description and a Button to switch between the two ScoreHUDs in the Style Settings.
  • Added five style presets for the target grid: Outline, Sections, Full, Hexagon and Matrix. Also, these curved planes are now much higher poly so they don't like so low-quality.
  • New screen to select Themes (for Orbs, Sliders, Spinners), this is available from the Style Settings.
  • New screen to select Avatars (this is just a preview for now), this is available from the Style Settings.
  • Improved how after sessions scores and scores in general are shown.
  • New Performance Settings screen. Added option to disable color grading, added slider to set up renderscale (default is 1.0, this is the same as super-sampling but a different scale - our 1.0 is the same as 1.4 super-sampling)
  • Fix bug that we have had for a very long time that resulted in your particles setting to be overridden by the default for your currently quality level on startup (i.e. the game did not remember your setting if you had changed it from the default of the current quality level).
  • Added framerate tracker with detailed statistical performance information to the Performance Settings screen so you can immediately see the results of your changes.
  • New screen for "Expert Settings" that now also includes two checkboxes to disable Sliders and Spinners.
  • "Expert Settings" is now called "Gameplay" and is a submenu of the Style Settings
  • Improved progress in loading screen to be continuous instead of starting from 0% in each operation.
  • Fixed Bloom for Level 1 (this had been way too intense before)
  • Fixed "AnyColorOrb" which was still using a modo-based mesh for the sphere (making the sphere disappear when doing a build from a machine that didn't have modo installed ... which is most machines that we have
  • Fixed "FireballFAST" which is still used in Level 10; this broke when we switched to orb-pooling and resulted in orbs / colliders being way too large.
  • Fixed super-nasty and annoying bug that resulted in the Sliders that had their start time between 0 and 1 seconds into the song to have a screechy hit sound instead of rhythmic hihats.
  • Party Mode now supports defining sections with "Free Mode" where the player going through the demo can select a song. This is also a first step towards Free Mode play lists.
  • Curved Target Area now has polys for both directions, so it's visible also when using a camera that's facing the player from forward.
  • The timing laser lines now use an emissive material to make them more visible.
  • Lasers now use the orb colors as default and also fixed a bug that caused them to have fairly random colors.
  • Fixed a bug that resulted in platform and curved target area colors being always quite a bit brighter than they should have been.
  • Fixed remaining Party Mode presets to use the new level meta data information instead of just the level name string.
  • Added material pooling for flying orbs and fixed bug that caused orb colors to be assigned for many orbs kind of randomly without obvious rhyme or reason.
  • Moved beatmap player and environment scenes into asset bundles. This way, we can modularize the builds. This gives us significantly faster build times (we went from about an hour for a full build down to about 5 minutes for an update build) and also is a major step towards having Workshop support (because those AssetBundles could also be player created and downloaded on demand - we're not fully there, yet, but this is a major milestone towards Workshop support).
  • Ported Project to Unity 5.6.1p1. This gets us a lot closer to Linux support (but don't hold your breath, yet, we still need to find a library that can handle loading MP3s into Unity on Linux, which is not easy at all). Also, this further improved the startup time from 30 seconds overall to 22 seconds overall (on my machine, no SSD). The splash screen appears after about 3 or 4 seconds, game comes up first time at about 16 seconds (vs. 23 seconds before) and is playable at about 22 seconds. When starting up the game again, it already was fairly fast (15 seconds until you can play) but now we're at 13 seconds.
  • Updated TextMesh Pro to 1.0.55.56.0.b9 - that is a version specifically for Unity 5.6 that addresses some issues with that version of Unity.
  • Updated PlayWay Water to the most recent beta (which is actually from mid March).
  • Replaced loopback audio spectrum analyzer with Unity's built-in spectrum analyzer. This should improve performance quite a bit and get rid if insane allocations in the Clubbing level.
  • Removed the old "CalibrationScene" we had used for setting up Mixed Reality. There are much better approaches to do this already, like the one by TribalInstincts, so not necessary anymore to keep it. We might add something more awesome directly into the game shortly.
  • Updated Steamworks.NET to 9.1.0 (most current version).
  • Fixed bug in scoring: The rotation and velocity bonus was not added due to int-rounding where there should not have been int-rounding.
  • Balanced the scoring system and: Oh my god! The reason we all received much lower scores wasn't that bugfix but the distance factor that I had added. Because this gave all of us only half the score per orb most of the time. Facepalm! Big time! So sorry!
  • Fixed bug where cancelled sessions (that should not be stored) were still stored when exiting the selection (in the case that a player did go back to the selection after cancelling the song).
  • Added new "caught with different bonus": Each time you catch a note with a different "catcher", you get an increasing bonus until you either miss a note or use a catcher that you have already used. So, when you catch the first orb with your left hand, you get no bonus. When you then catch the next orb with your right hand, you get 50. When you then catch the third note with your head, you get 100. When you then catch the fourth note with left, head or right again, it starts from 0. This will be fun when we support feet because then you can get up to 800 bonus when you do a full sequence (which is really hard - but possible). 5 is the maximum that is possible for human beings, and the scoring is as follows: 0, 50, 100, 200, 400, 800.
  • We're now tracking and also storing the total distance moved with head, left and right hand while playing the session.
  • Cleaned up how distance has an effect on orb scores. With Sliders and Spinners, we already had a specific bonus value that is multiplied with the time-normalized distance factor. With orbs, we had multiplied the base orb score including velocity and rotation bonus with the distance factor, which made it impossible to figure out how much the distance actually contributed to the score. While distance is calculated differently between orbs and Sliders/Spinners (with Sliders and Spinners, it's the distance while interacting with the Slider/Spinner, with orbs it's the distance since catching the last orb with that controller, when no orb was missed), we now have a much more consistent way of handling distances because it's always a bonus added on top instead of muddying the previous score.
  • Added fairly complete (but still very prototypey) statistics for the current session after the session.